Skip to main content

sm-provision — delegated, field-scoped binding provisioning

A binding-provisioning profile of sm-dat. The signed, bounded grant a resolution-namespace owner gives an agent store to write specific fields of the owner's binding in a registry — create it, repoint it, suspend it, revoke it — and nothing else. Runtime-agnostic, vendor-neutral.

sm-dat answers "was this agent allowed to act?". sm-provision answers the adjacent question "was this store allowed to write this field of this binding?" — using the same grant envelope, the same signing path, and the same three-valued verdict. It adds no new crypto and requires no change to sm-dat: binding operations ride in the DAT's action_categories, and the field-scope rides in scope.stateless under binding_* keys the DAT core ignores and this profile enforces. The owner's signature covers both.

from sm_provision import (Identity, sign_grant, build_binding_grant,
                          build_write_request, verify_binding_write, OP_UPDATE_TARGET)

owner, store = Identity.generate(), Identity.generate()

grant = sign_grant(owner, build_binding_grant(
    grantee_did=store.did,
    subject="john@hotmail.com",                       # human-readable locator
    subject_issuer="https://login.microsoftonline.com",
    subject_provider_id="oid:…",                      # durable anchor (recorded, not verified here)
    registry="did:web:index.example",
    allowed_ops=[OP_UPDATE_TARGET],
    allowed_fields=["agent_card_url"],                # store-managed fields only
    allowed_target_hosts=["cards.acme-store.example"],
    allowed_agent_roles=["personal-assistant"],
    not_after="2027-07-01T00:00:00Z",
    human_summary="Acme may maintain John's personal-assistant binding.",
))

req = build_write_request(op=OP_UPDATE_TARGET, subject="john@hotmail.com",
                          fields=["agent_card_url"], target_host="cards.acme-store.example",
                          agent_role="personal-assistant")

v = verify_binding_write(grant, req, "2026-07-28T12:00:00Z", store_did=store.did)
print(v.status, v.reason)      # SATISFIED ok  — or a VIOLATED/INDETERMINATE reason

The invariant that defines this library

A store can only ever be granted store-managed fields. Owner-controlled fields (subject, recovery_delegates, transfer, …) and registry-controlled fields (validation_status, dispute_state, …) are never delegable — build_binding_grant rejects them at construction, and the verifier rejects them again at write time (defence in depth). Most capability/skill/runtime change belongs inside the Agent Card; the binding changes only when the discovery target, authority, lifecycle, or provider relationship changes.

Two-layer, fail-closed verification

  1. Authority — sm_dat.verify_grant, verbatim: signature by the owner, grantee == store, temporal window, revocation, op-in-scope. Its VIOLATED/INDETERMINATE verdicts propagate unchanged — this profile never launders one into a pass.
  2. Field-scope — right subject; only store-managed fields; only granted fields; only permitted target-hosts and agent-roles.

What it deliberately does not own

Establishing that the grantor really is the owner (DAT SPEC §5.4 O1) is out of band — a separate authority-evidence mechanism binds grantor_did/subject to the real owner; this profile only records the claimed anchor. Applying the write, logging it, and resolving conflicts between writers belong to the registry. See SPEC.md §1.1.

Status

  • SPEC.md — the normative draft (provision/0.1-draft).
  • vectors/provision/0.1/ — the deterministic conformance corpus; regenerate with python vectors/_generate.py, replay with pytest.
  • Depends on sm-dat (grant envelope, signing, verification) → sm-arp (identity, crypto). No transport, no framework.

License

MIT © 2026 StellarMinds. See LICENSE.


Part of the NANDA ecosystem · built by StellarMinds.

Metadata

Release files for sm-provision 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sm-provision 0.1.1
File Size Uploaded
sm_provision-0.1.1.tar.gz 28.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sm-provision 0.1.1
File Interpreter ABI Platform
sm_provision-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 40.1 kB

Release files / sm_provision-0.1.1.tar.gz

Download URL sm_provision-0.1.1.tar.gz
Size 28.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1f2e4b92d9adb19e380a519071888e2f2b749d4427a41d3d9c3db78c443e492a
BLAKE2b-256 checksum
How to use checksums
4f14eea97b8de7c1f49cb0da339ee63b68f5e3b5bf0e481a7df7a7a3978dd587
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release files / sm_provision-0.1.1-py3-none-any.whl

Download URL sm_provision-0.1.1-py3-none-any.whl
Size 11.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f772854c138bfc47008246af4b9f8b2ccf1c097d3488dafdcf122129aa8d682e
BLAKE2b-256 checksum
How to use checksums
1a53c818b972043822f2d0a269d37ee996ea060f317d99ab09528c54889dda9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page