From b60b5cf4c38323a8fce3a7b6dab82b21a450db8a Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Mon, 5 Oct 2026 10:13:03 -0600 Subject: [PATCH 1/2] =?UTF-8?q?docs(site):=20Mon=20SEO=20=E2=80=94=20regis?= =?UTF-8?q?try=20model=20rights=20record=20+=20deprecated/revoked=20lifecy?= =?UTF-8?q?cle=20Q&As?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two honest Q&As grounded in registry spec 005, spec 026 v1.1.0 and decision-log entry 127: what the model rights record declares (signed declaration, not legal certification) and how deprecated/revoked versions behave for ranges vs exact pins. States open work plainly: traverse#1598 (CLI/runtime), registry#631 (crate exact-pin alignment + publish), registry#623 (agent backfill). Wire hub, llms.txt and relatedLinks. --- public/llms.txt | 2 + ...y-publish-validate-model-attribution.astro | 1 + ...oes-the-registry-record-model-rights.astro | 59 +++++++++++++++++++ src/pages/questions/index.astro | 2 + ...when-a-capability-version-is-revoked.astro | 51 ++++++++++++++++ .../what-is-contract-versioning.astro | 4 +- .../what-is-the-capability-registry.astro | 5 +- 7 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 src/pages/questions/does-the-registry-record-model-rights.astro create mode 100644 src/pages/questions/what-happens-when-a-capability-version-is-revoked.astro diff --git a/public/llms.txt b/public/llms.txt index a17dff1..3add1e9 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -43,6 +43,8 @@ Current packages: crates.io at 0.14.0 (pin `traverse-registry` at `=0.25.0` if y - [How do I author a capability in plain English?](https://traverse-framework.com/questions/how-do-i-author-a-capability-in-plain-english.html): Claude skill `traverse-capability-author` — interview → registry check → contract → WASM → human-reviewed PR; under the hood still Rust→WASM; manual Rust is secondary. - [How do I go from a skill draft to a published capability?](https://traverse-framework.com/questions/how-do-i-go-from-skill-draft-to-published-capability.html): after the skill opens the registry PR — review, CI, human merge, next catalog release; no side-door upload. - [Does capability publish validate model attribution before the registry write?](https://traverse-framework.com/questions/does-capability-publish-validate-model-attribution.html): yes for contract-decidable rules — `traverse-cli capability publish` rejects bad `ai` objects offline before any registry Git write (Decision 109 / Spec 056 v1.1.0 / #1597); keeps `ai` verbatim; evidence digests + rights drift stay registry-CI-only (no CLI network fetch). +- [Does the Traverse registry record model licenses and usage rights?](https://traverse-framework.com/questions/does-the-registry-record-model-rights.html): yes, registry-side (registry spec 026): model-backed contracts declare commercial_use/redistribution/derivatives (`unknown` rejected), LICENSE/NOTICE pinned by sha256, immutable upstream commit, derivation, contract bytes signed; index `usage_class`; signed maintainer declaration, not legal certification; Traverse CLI/runtime enforcement is traverse#1598 (not shipped). +- [What happens when a registry capability version is deprecated or revoked?](https://traverse-framework.com/questions/what-happens-when-a-capability-version-is-revoked.html): nothing is edited or deleted; `deprecated.json` / `revoked.json` siblings; range resolution skips both; per spec 005 + decision 127 exact pins still resolve with a status signal and the runtime decides (fail closed); crate alignment registry#631, Traverse runtime handling traverse#1598. - [What does human review mean for a capability PR?](https://traverse-framework.com/questions/what-does-human-review-mean-for-a-capability-pr.html): a person still merges; skill drafts only; check rule fit, CI, digests, catalog fit. - [How do I verify a signed capability artifact?](https://traverse-framework.com/questions/how-do-i-verify-a-signed-capability-artifact.html): SHA-256 digest = integrity; Ed25519 signature.json = registry attestation; pin by digest, never a naked URL. - [How do I review a capability PR as a maintainer?](https://traverse-framework.com/questions/how-do-i-review-a-capability-pr-as-a-maintainer.html): contract fit, green CI (digest/coverage/authoring/licensing), fork artifact mirror before merge; signing automatic after merge; no side door. diff --git a/src/pages/questions/does-capability-publish-validate-model-attribution.astro b/src/pages/questions/does-capability-publish-validate-model-attribution.astro index dce7d79..ac18b68 100644 --- a/src/pages/questions/does-capability-publish-validate-model-attribution.astro +++ b/src/pages/questions/does-capability-publish-validate-model-attribution.astro @@ -21,6 +21,7 @@ const relatedLinks = [ { href: '/questions/is-production-model-signing-ready.html', label: 'Is production model signing ready?' }, { href: '/questions/what-is-exact-ref-model-execution.html', label: 'What is exact-ref model execution?' }, { href: '/questions/how-do-hosts-trust-signed-models.html', label: 'How do hosts trust signed models?' }, + { href: '/questions/does-the-registry-record-model-rights.html', label: 'Does the registry record model licenses and usage rights?' }, ]; --- +

Short answer: yes, on the registry side. Some capabilities embed third-party model weights in their WASM artifact, and the registry redistributes those artifacts publicly. Registry spec 026-model-rights-compliance turns each ai.models entry into a machine-readable, signed rights record, so a consumer can tell from the contract whether a model may be used commercially, redistributed, or modified, before anything runs.

+ +

What a model-backed contract has to declare

+

Registry CI checks every newly added contract with ai.model_backed: true. Each model entry must carry:

+ +

CI also rejects contradictions it can decide without guessing, such as redistribution: forbidden (publishing is redistribution) or a derivation on a model marked derivatives: forbidden. It does not infer rights from an SPDX identifier.

+ +

How consumers read it

+

The registry index projects a usage_class for each model reference from those three fields alone: unrestricted when all are allowed, evaluation-only when commercial use is forbidden, and conditional otherwise. The consumer guidance in the spec is deny-by-default on conditional.

+

New signature.json files also sign the contract itself: an Ed25519 signature over the SHA-256 of the exact committed contract.json bytes, with the same registry key that signs artifacts. That is what authenticates the rights fields, not just the WASM bytes.

+ +

What it is not

+

The record is a maintainer-declared, signed declaration. A registry signature proves the declaration wasn't altered; it doesn't certify that the legal claim is right, and it isn't legal advice.

+ +

What is still open (as of October 5, 2026)

+ +

The publish path already checks the parts of this record that the contract alone can decide, offline: see Does capability publish validate model attribution?.

+
diff --git a/src/pages/questions/index.astro b/src/pages/questions/index.astro index 15630d7..329d7df 100644 --- a/src/pages/questions/index.astro +++ b/src/pages/questions/index.astro @@ -33,6 +33,8 @@ const groups = [ ['how-do-i-write-a-capability-contract.html', 'How do I write a capability contract?'], ['how-do-i-publish-a-capability-to-the-registry.html', 'How do I publish a capability to the Traverse registry?'], ['does-capability-publish-validate-model-attribution.html', 'Does capability publish validate model attribution before the registry write?'], + ['does-the-registry-record-model-rights.html', 'Does the Traverse registry record model licenses and usage rights?'], + ['what-happens-when-a-capability-version-is-revoked.html', 'What happens when a registry capability version is deprecated or revoked?'], ['what-does-human-review-mean-for-a-capability-pr.html', 'What does human review mean for a capability PR?'], ['how-do-i-verify-a-signed-capability-artifact.html', 'How do I verify a signed Traverse capability artifact?'], ['how-do-i-review-a-capability-pr-as-a-maintainer.html', 'How do I review a capability PR as a maintainer?'], diff --git a/src/pages/questions/what-happens-when-a-capability-version-is-revoked.astro b/src/pages/questions/what-happens-when-a-capability-version-is-revoked.astro new file mode 100644 index 0000000..1c096fe --- /dev/null +++ b/src/pages/questions/what-happens-when-a-capability-version-is-revoked.astro @@ -0,0 +1,51 @@ +--- +import QuestionLayout from '@layouts/QuestionLayout.astro'; + +const jsonLd = JSON.stringify({ + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: [{ + '@type': 'Question', + name: 'What happens when a Traverse registry capability version is deprecated or revoked?', + acceptedAnswer: { + '@type': 'Answer', + text: 'Nothing is edited or deleted. A deprecation adds a sibling deprecated.json (registry spec 005) and a revocation adds a sibling revoked.json with a reason and evidence (registry spec 026). The index keeps the entry and marks its status. Range resolution such as ^1.2.0 skips deprecated and revoked versions. Under the approved specs, an exact pin still resolves and returns the record with its status, so a pinned consumer never silently breaks and the runtime decides whether to run it. Traverse runtime handling of revoked is tracked in traverse#1598, and the registry crate is being brought in line with the exact-pin rule in registry#631.', + }, + }], +}); + +const relatedLinks = [ + { href: '/questions/what-is-contract-versioning.html', label: 'What is contract versioning in Traverse?' }, + { href: '/questions/does-the-registry-record-model-rights.html', label: 'Does the registry record model licenses and usage rights?' }, + { href: '/questions/what-is-the-capability-registry.html', label: 'What is the capability registry?' }, + { href: '/questions/how-do-i-publish-a-capability-to-the-registry.html', label: 'How do I publish a capability to the registry?' }, +]; +--- + +

Short answer: nothing gets edited or deleted. A published contract and its artifact are immutable, so the registry marks a version with a separate file instead. That version stops being picked by version ranges, but a consumer that pinned it exactly still gets it back, along with a status that says what happened.

+ +

Deprecated: the cargo-yank shape

+

Registry spec 005 adds a sibling deprecated.json next to the version's contract.json. The index marks the version deprecated. Range resolution (^1.2.0 style) skips it. Exact-pin resolution ignores the flag and succeeds if the version exists. It's the same pattern most package registries use: you stop new installs from landing on a bad version without breaking anyone who already depends on it.

+

The registry uses this to keep consumers off old fixture versions: when real logic replaces a stub, the stub is deprecated in the same PR.

+ +

Revoked: a stronger signal for rights problems

+

Registry spec 026 adds a sibling revoked.json with a reason, an evidence_url and a revoked_at time. It's meant for cases like a model whose rights turned out to be wrong. The index keeps the entry with status: "revoked", its revocation record and its full rights record, and it must never be presented as active.

+

The decision behind it (registry decision-log entry 127) keeps the same pin guarantee: range resolution skips revoked versions, and an exact pin still resolves but carries a machine-readable do-not-run signal. The registry doesn't silently break your build; the runtime decides whether to execute, and it is expected to fail closed.

+ +

Where this stands today (October 5, 2026)

+ + +

Related

+

How versions and ranges work in general: What is contract versioning?. The rights record a revocation usually concerns: Does the registry record model licenses and usage rights?.

+
diff --git a/src/pages/questions/what-is-contract-versioning.astro b/src/pages/questions/what-is-contract-versioning.astro index eb06f97..96cad59 100644 --- a/src/pages/questions/what-is-contract-versioning.astro +++ b/src/pages/questions/what-is-contract-versioning.astro @@ -1,7 +1,9 @@ --- import QuestionLayout from '@layouts/QuestionLayout.astro'; -const relatedLinks = []; +const relatedLinks = [ + { href: '/questions/what-happens-when-a-capability-version-is-revoked.html', label: 'What happens when a capability version is deprecated or revoked?' }, +]; const _body = "

Every capability registration includes a semver version string. Multiple versions of the same capability can live in the registry at once. Callers can pin to a specific version or request the latest version that satisfies a given constraint. Old versions keep working until you explicitly deprecate them.

\n\n

Why versioning matters

\n

Business logic changes. A pricing rule that worked last quarter might need new inputs next quarter. Without versioning, you have two choices: update all callers at once (risky), or freeze the logic forever (costly). With versioning, you register a new version and migrate callers incrementally. Nothing breaks until you choose to retire the old version.

\n\n

How version selection works

\n

When a caller requests calculate_price without pinning a version, the runtime queries the registry for all registered versions of that capability and picks the latest one that satisfies the caller's placement constraints. If the caller pins to 1.0.0, the runtime resolves only that entry.

\n\n

Breaking vs. non-breaking changes

\n \n\n

Retiring old versions

\n

There's no CLI command for this — the registry is a Git-backed file tree, and deprecation is a PR that adds a sibling deprecated.json file next to that version's contract.json (the original contract is never modified). Once that lands, range-based resolution (like ^1.0.0) skips the deprecated version automatically. Callers pinned to the exact version, like 1.0.0, still resolve it successfully — deprecation removes a version from discovery, not from existence. Plan migrations before deprecating versions that active callers still pin to.

\n\n

See also what is the contract lifecycle for the full picture from creation to retirement.

"; const _jsonLd = "{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is contract versioning in Traverse?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Contract versioning in Traverse means each capability registration includes a semver version string. Multiple versions of the same capability can exist in the registry simultaneously. Callers can pin to a specific version or let the runtime select the latest version that satisfies their constraints.\"}}]}"; --- diff --git a/src/pages/questions/what-is-the-capability-registry.astro b/src/pages/questions/what-is-the-capability-registry.astro index de69e3c..1435963 100644 --- a/src/pages/questions/what-is-the-capability-registry.astro +++ b/src/pages/questions/what-is-the-capability-registry.astro @@ -1,7 +1,10 @@ --- import QuestionLayout from '@layouts/QuestionLayout.astro'; -const relatedLinks = []; +const relatedLinks = [ + { href: '/questions/what-happens-when-a-capability-version-is-revoked.html', label: 'What happens when a capability version is deprecated or revoked?' }, + { href: '/questions/does-the-registry-record-model-rights.html', label: 'Does the registry record model licenses and usage rights?' }, +]; const _body = "

The capability registry is the catalog Traverse uses to discover, version, and select WASM capabilities at runtime. Every capability you register gets stored alongside its contract metadata so the runtime can make informed decisions before calling anything.

\n\n

What it stores

\n

Each entry in the registry holds the capability name, version, the compiled WASM binary, and the full contract definition. The contract includes input schema, output schema, preconditions, postconditions, and placement constraints. Without all of this, the runtime cannot validate a call before it happens.

\n\n

How the runtime uses it

\n

When a caller requests a capability, the runtime enters the discovering phase. It queries the registry for matching entries. Then it moves to evaluating_constraints to check which candidates satisfy the current environment. Finally it moves to selecting to pick the best match and then executing.

\n\n

This means the registry is not just a lookup table. It is the gating mechanism for every execution. If no registered capability satisfies the constraints, the runtime fails fast rather than calling the wrong thing.

\n\n

Versioning

\n

Multiple versions of the same capability can coexist in a registry. A caller can pin to a specific version or let the runtime select the latest that satisfies its constraints. This makes it safe to roll out new behavior gradually. Old consumers keep resolving to the version they are pinned to.

\n\n

Where the registry lives

\n

The registry was extracted into its own repository, traverse-framework/registry, and this repo now consumes it as an externally published dependency rather than a workspace crate. You interact with it through the CLI or programmatically through the runtime API. The CLI command traverse-cli capability publish compiles your contract and binary and adds the entry via a governed PR-automation flow.

\n\n \n\n

Think of the registry as the source of truth for what capabilities exist and what they promise. The runtime enforces those promises at call time.

"; const _jsonLd = "{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is the capability registry?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"The capability registry is the catalog Traverse uses to discover, version, and select WASM capabilities at runtime. It stores contract metadata alongside each binary so the runtime can validate preconditions before execution and pick the right capability version for a given constraint set.\"}}]}"; --- From 6a5547c557b12fa8762cbaf23fd2c5255bd299c6 Mon Sep 17 00:00:00 2001 From: Enrico Piovesan Date: Mon, 5 Oct 2026 10:14:40 -0600 Subject: [PATCH 2/2] fix: escape braces in rights Q&A template --- src/pages/questions/does-the-registry-record-model-rights.astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/questions/does-the-registry-record-model-rights.astro b/src/pages/questions/does-the-registry-record-model-rights.astro index f835152..c493b84 100644 --- a/src/pages/questions/does-the-registry-record-model-rights.astro +++ b/src/pages/questions/does-the-registry-record-model-rights.astro @@ -36,7 +36,7 @@ const relatedLinks = [

Registry CI checks every newly added contract with ai.model_backed: true. Each model entry must carry: