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.1.tar.gz (28.4 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.1-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sm_provision-0.1.1.tar.gz
  • Upload date:
  • Size: 28.4 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.1.tar.gz
Algorithm Hash digest
SHA256 1f2e4b92d9adb19e380a519071888e2f2b749d4427a41d3d9c3db78c443e492a
MD5 e76b5b2088b2b846c571fb4a19ac5f9a
BLAKE2b-256 4f14eea97b8de7c1f49cb0da339ee63b68f5e3b5bf0e481a7df7a7a3978dd587

See more details on using hashes here.

Provenance

The following attestation bundles were made for sm_provision-0.1.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: sm_provision-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 11.7 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f772854c138bfc47008246af4b9f8b2ccf1c097d3488dafdcf122129aa8d682e
MD5 dfabc15843253a3ccaccf0da273e7207
BLAKE2b-256 1a53c818b972043822f2d0a269d37ee996ea060f317d99ab09528c54889dda9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for sm_provision-0.1.1-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