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. Authoritysm_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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sm_provision-0.1.0.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sm_provision-0.1.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file sm_provision-0.1.0.tar.gz.

File metadata

  • Download URL: sm_provision-0.1.0.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sm_provision-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9faf72eb07dbf8ae98ce66744911ac4520a9ff76828355459d6374eb34a573cc
MD5 a26a1c559d40a450a400c99dda4661fa
BLAKE2b-256 2b22f6377c630aec51552e7023f58ff167ff38eaf561ef085e77baa8c9e065c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for sm_provision-0.1.0.tar.gz:

Publisher: release.yml on Sharathvc23/sm-provision

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sm_provision-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sm_provision-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sm_provision-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 089881b40cea35a10ee25b37db795ed9c7ea801df130556354bafe906be3154c
MD5 feed9e529760b047c4c626a49cdd38b4
BLAKE2b-256 59b624a897cc089e5bd414e90248d5b9e20916aaeba69316167bddcaf229ff72

See more details on using hashes here.

Provenance

The following attestation bundles were made for sm_provision-0.1.0-py3-none-any.whl:

Publisher: release.yml on Sharathvc23/sm-provision

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page