ssot-contracts 0.2.16.dev1__tar.gz → 0.2.17.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/PKG-INFO +2 -2
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/README.md +1 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/pyproject.toml +1 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/contract_data.py +1 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/tui_metadata.py +1 -1
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/adr.schema.json +1 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/registry.schema.json +1 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/spec.schema.json +1 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +1 -1
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +44 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +35 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +35 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +35 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +44 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +41 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/manifest.json +127 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/registry.full.json +1 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/registry.minimal.json +1 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +8 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +32 -16
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +8 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +2 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +2 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +1 -1
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +53 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +38 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +39 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +39 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +39 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +40 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +82 -0
- ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +132 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/manifest.json +217 -6
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/PKG-INFO +2 -2
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/SOURCES.txt +14 -0
- ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/adr.schema.json +0 -1
- ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/registry.schema.json +0 -1
- ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/spec.schema.json +0 -1
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/setup.cfg +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/enums.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/ids.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/__init__.py +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/requires.txt +0 -0
- {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssot-contracts
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.17.dev2
|
|
4
4
|
Summary: Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT.
|
|
5
5
|
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -30,7 +30,7 @@ Description-Content-Type: text/markdown
|
|
|
30
30
|
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
31
31
|
|
|
32
32
|
<div align="center">
|
|
33
|
-
<h1
|
|
33
|
+
<h1>🔷 ssot-contracts</h1>
|
|
34
34
|
<p><strong>Canonical schemas, templates, manifests, and generated contract metadata for SSOT.</strong></p>
|
|
35
35
|
</div>
|
|
36
36
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ssot-contracts"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.17.dev2"
|
|
8
8
|
description = "Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.14"
|
|
@@ -4,7 +4,7 @@ from ssot_contracts.contract_data import CONTRACT_DATA
|
|
|
4
4
|
|
|
5
5
|
ENTITY_SECTIONS = tuple((section["key"], section["label"]) for section in CONTRACT_DATA["entity_sections"])
|
|
6
6
|
ENTITY_VIEW_SECTIONS = {
|
|
7
|
-
"features": ("id", "title", "implementation_status", "horizon"),
|
|
7
|
+
"features": ("id", "title", "effective_status", "implementation_status", "horizon"),
|
|
8
8
|
"profiles": ("id", "title", "status"),
|
|
9
9
|
"tests": ("id", "title", "status"),
|
|
10
10
|
"claims": ("id", "title", "status"),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$defs":{"normalizedId":{"maxLength":128,"pattern":"^[a-z][a-z0-9-]*:[a-z0-9][a-z0-9._-]*$","type":"string"},"normalizedIdList":{"items":{"$ref":"#/$defs/normalizedId"},"type":"array"}},"$id":"https://example.invalid/ssot-registry/adr.schema.json","$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":true,"properties":{"body":{"minLength":1,"type":"string"},"decision_date":{"type":["string","null"]},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"const":"adr"},"number":{"minimum":1,"type":"integer"},"origin":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"references":{"items":{"type":"string"},"type":"array"},"schema_version":{"pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$","type":"string"},"slug":{"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"},"status":{"enum":["draft","in_review","accepted","rejected","superseded","withdrawn","retired"]},"status_notes":{"items":{"type":"object"},"type":"array"},"summary":{"minLength":1,"type":"string"},"superseded_by":{"$ref":"#/$defs/normalizedIdList"},"supersedes":{"$ref":"#/$defs/normalizedIdList"},"tags":{"items":{"type":"string"},"type":"array"},"title":{"minLength":1,"type":"string"}},"required":["schema_version","kind","id","number","slug","title","status","origin","summary","body"],"type":"object"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$defs":{"adr":{"additionalProperties":true,"properties":{"content_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"id":{"$ref":"#/$defs/normalizedId"},"immutable":{"type":"boolean"},"managed":{"type":"boolean"},"number":{"minimum":1,"type":"integer"},"origin":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"package_version":{"minLength":1,"type":"string"},"path":{"minLength":1,"type":"string"},"slug":{"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"},"status":{"$ref":"#/$defs/documentStatus"},"status_notes":{"items":{"$ref":"#/$defs/statusNote"},"type":"array"},"superseded_by":{"$ref":"#/$defs/stringList"},"supersedes":{"$ref":"#/$defs/stringList"},"title":{"minLength":1,"type":"string"}},"required":["id","number","slug","title","path","origin","managed","immutable","package_version","content_sha256","status","supersedes","superseded_by","status_notes"],"type":"object"},"boundary":{"additionalProperties":true,"properties":{"body":{"type":"string"},"feature_ids":{"$ref":"#/$defs/stringList"},"frozen":{"type":"boolean"},"id":{"$ref":"#/$defs/normalizedId"},"profile_ids":{"items":{"type":"string"},"type":"array"},"status":{"enum":["draft","active","frozen","retired"]},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","frozen","feature_ids","profile_ids"],"type":"object"},"claim":{"additionalProperties":true,"properties":{"body":{"type":"string"},"description":{"type":"string"},"evidence_ids":{"$ref":"#/$defs/stringList"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"minLength":1,"type":"string"},"status":{"enum":["proposed","declared","implemented","asserted","evidenced","certified","promoted","published","blocked","retired"]},"test_ids":{"$ref":"#/$defs/stringList"},"tier":{"enum":["T0","T1","T2","T3","T4"]},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","tier","kind","description","feature_ids","test_ids","evidence_ids"],"type":"object"},"documentIdReservations":{"additionalProperties":false,"properties":{"adr":{"items":{"$ref":"#/$defs/documentReservationRange"},"type":"array"},"spec":{"items":{"$ref":"#/$defs/documentReservationRange"},"type":"array"}},"required":["adr","spec"],"type":"object"},"documentReservationRange":{"additionalProperties":true,"properties":{"assignable_by_repo":{"type":"boolean"},"deletable":{"type":"boolean"},"end":{"minimum":1,"type":"integer"},"immutable":{"type":"boolean"},"owner":{"minLength":1,"type":"string"},"start":{"minimum":1,"type":"integer"}},"required":["owner","start","end","immutable","deletable","assignable_by_repo"],"type":"object"},"documentStatus":{"enum":["draft","in_review","accepted","rejected","superseded","withdrawn","retired"]},"evidence":{"additionalProperties":true,"properties":{"body":{"type":"string"},"claim_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"minLength":1,"type":"string"},"path":{"minLength":1,"type":"string"},"status":{"enum":["planned","collected","passed","failed","stale"]},"test_ids":{"$ref":"#/$defs/stringList"},"tier":{"enum":["T0","T1","T2","T3","T4"]},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","kind","tier","path","claim_ids","test_ids"],"type":"object"},"feature":{"additionalProperties":true,"properties":{"body":{"type":"string"},"claim_ids":{"$ref":"#/$defs/stringList"},"description":{"type":"string"},"id":{"$ref":"#/$defs/normalizedId"},"implementation_status":{"enum":["absent","partial","implemented"]},"lifecycle":{"$ref":"#/$defs/featureLifecycle"},"plan":{"$ref":"#/$defs/featurePlan"},"requires":{"$ref":"#/$defs/stringList"},"spec_ids":{"$ref":"#/$defs/stringList"},"test_ids":{"$ref":"#/$defs/stringList"},"title":{"minLength":1,"type":"string"}},"required":["id","title","description","implementation_status","lifecycle","plan","spec_ids","claim_ids","test_ids"],"type":"object"},"featureLifecycle":{"additionalProperties":true,"properties":{"effective_release_id":{"type":["string","null"]},"note":{"type":["string","null"]},"replacement_feature_ids":{"$ref":"#/$defs/stringList"},"stage":{"enum":["active","deprecated","obsolete","removed"]}},"required":["stage","replacement_feature_ids","note"],"type":"object"},"featurePlan":{"additionalProperties":true,"properties":{"horizon":{"enum":["current","next","future","explicit","backlog","out_of_bounds"]},"out_of_bounds_disposition":{"enum":["prohibited","tolerated",null],"type":["string","null"]},"slot":{"type":["string","null"]},"target_claim_tier":{"enum":["T0","T1","T2","T3","T4",null],"type":["string","null"]},"target_lifecycle_stage":{"enum":["active","deprecated","obsolete","removed"]}},"required":["horizon","slot","target_claim_tier","target_lifecycle_stage"],"type":"object"},"guardPolicies":{"additionalProperties":true,"type":"object"},"issue":{"additionalProperties":true,"properties":{"body":{"type":"string"},"claim_ids":{"$ref":"#/$defs/stringList"},"description":{"type":"string"},"evidence_ids":{"$ref":"#/$defs/stringList"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"plan":{"$ref":"#/$defs/issuePlan"},"release_blocking":{"type":"boolean"},"risk_ids":{"$ref":"#/$defs/stringList"},"severity":{"enum":["low","medium","high","critical"]},"status":{"enum":["open","in_progress","blocked","resolved","closed"]},"test_ids":{"$ref":"#/$defs/stringList"},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","severity","description","plan","feature_ids","claim_ids","test_ids","evidence_ids","risk_ids","release_blocking"],"type":"object"},"issuePlan":{"additionalProperties":true,"properties":{"horizon":{"enum":["current","next","future","explicit","backlog","out_of_bounds"]},"slot":{"type":["string","null"]}},"required":["horizon","slot"],"type":"object"},"normalizedId":{"maxLength":128,"pattern":"^[a-z][a-z0-9-]*:[a-z0-9][a-z0-9._-]*$","type":"string"},"paths":{"additionalProperties":true,"properties":{"adr_root":{"minLength":1,"type":"string"},"cache_root":{"minLength":1,"type":"string"},"evidence_root":{"minLength":1,"type":"string"},"graph_root":{"minLength":1,"type":"string"},"release_root":{"minLength":1,"type":"string"},"report_root":{"minLength":1,"type":"string"},"schema_root":{"minLength":1,"type":"string"},"spec_root":{"minLength":1,"type":"string"},"ssot_root":{"minLength":1,"type":"string"}},"required":["ssot_root","schema_root","adr_root","spec_root","graph_root","evidence_root","release_root","report_root","cache_root"],"type":"object"},"profile":{"additionalProperties":false,"properties":{"body":{"type":"string"},"claim_tier":{"enum":["T0","T1","T2","T3","T4",null],"type":["string","null"]},"description":{"type":"string"},"evaluation":{"additionalProperties":false,"properties":{"allow_feature_override_tier":{"type":"boolean"},"mode":{"enum":["all_features_must_pass"]}},"required":["mode","allow_feature_override_tier"],"type":"object"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"enum":["capability","certification","deployment","interoperability"]},"profile_ids":{"$ref":"#/$defs/stringList"},"status":{"enum":["draft","active","retired"]},"title":{"type":"string"}},"required":["id","title","description","status","kind","feature_ids","profile_ids","claim_tier","evaluation"],"type":"object"},"program":{"additionalProperties":true,"properties":{"active_boundary_id":{"$ref":"#/$defs/normalizedId"},"active_release_id":{"$ref":"#/$defs/normalizedId"}},"required":["active_boundary_id","active_release_id"],"type":"object"},"release":{"additionalProperties":true,"properties":{"body":{"type":"string"},"boundary_id":{"$ref":"#/$defs/normalizedId"},"boundary_ids":{"$ref":"#/$defs/stringList"},"claim_ids":{"$ref":"#/$defs/stringList"},"evidence_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"status":{"enum":["draft","candidate","certified","promoted","published","revoked"]},"version":{"minLength":1,"type":"string"}},"required":["id","version","status","boundary_id","boundary_ids","claim_ids","evidence_ids"],"type":"object"},"repo":{"additionalProperties":true,"properties":{"id":{"$ref":"#/$defs/normalizedId"},"kind":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version","kind"],"type":"object"},"risk":{"additionalProperties":true,"properties":{"body":{"type":"string"},"claim_ids":{"$ref":"#/$defs/stringList"},"description":{"type":"string"},"evidence_ids":{"$ref":"#/$defs/stringList"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"issue_ids":{"$ref":"#/$defs/stringList"},"release_blocking":{"type":"boolean"},"severity":{"enum":["low","medium","high","critical"]},"status":{"enum":["active","mitigated","accepted","retired"]},"test_ids":{"$ref":"#/$defs/stringList"},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","severity","description","feature_ids","claim_ids","test_ids","evidence_ids","issue_ids","release_blocking"],"type":"object"},"spec":{"additionalProperties":true,"properties":{"adr_ids":{"$ref":"#/$defs/stringList"},"content_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"id":{"$ref":"#/$defs/normalizedId"},"immutable":{"type":"boolean"},"kind":{"enum":["normative","operational","governance","local-policy"]},"managed":{"type":"boolean"},"number":{"minimum":1,"type":"integer"},"origin":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"package_version":{"minLength":1,"type":"string"},"path":{"minLength":1,"type":"string"},"slug":{"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"},"status":{"$ref":"#/$defs/documentStatus"},"status_notes":{"items":{"$ref":"#/$defs/statusNote"},"type":"array"},"superseded_by":{"$ref":"#/$defs/stringList"},"supersedes":{"$ref":"#/$defs/stringList"},"title":{"minLength":1,"type":"string"}},"required":["id","number","slug","title","path","origin","managed","immutable","package_version","content_sha256","kind","adr_ids","status","supersedes","superseded_by","status_notes"],"type":"object"},"statusNote":{"additionalProperties":false,"properties":{"actor":{"minLength":1,"type":"string"},"at":{"minLength":1,"type":"string"},"note":{"minLength":1,"type":"string"},"reason":{"minLength":1,"type":"string"},"status":{"$ref":"#/$defs/documentStatus"}},"required":["status","note","at"],"type":"object"},"stringList":{"items":{"$ref":"#/$defs/normalizedId"},"type":"array"},"test":{"additionalProperties":true,"properties":{"body":{"type":"string"},"claim_ids":{"$ref":"#/$defs/stringList"},"evidence_ids":{"$ref":"#/$defs/stringList"},"execution":{"$ref":"#/$defs/testExecution"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"minLength":1,"type":"string"},"path":{"minLength":1,"type":"string"},"status":{"enum":["planned","passing","failing","blocked","skipped"]},"title":{"minLength":1,"type":"string"}},"required":["id","title","status","kind","path","feature_ids","claim_ids","evidence_ids"],"type":"object"},"testExecution":{"additionalProperties":false,"properties":{"argv":{"items":{"type":"string"},"minItems":1,"type":"array"},"cwd":{"minLength":1,"type":"string"},"env":{"additionalProperties":{"type":"string"},"type":"object"},"mode":{"const":"command"},"success":{"$ref":"#/$defs/testExecutionSuccess"},"timeout_seconds":{"exclusiveMinimum":0,"type":"integer"}},"required":["mode","argv","cwd","env","timeout_seconds","success"],"type":"object"},"testExecutionSuccess":{"additionalProperties":false,"properties":{"expected":{"type":"integer"},"type":{"const":"exit_code"}},"required":["type","expected"],"type":"object"},"tooling":{"additionalProperties":true,"properties":{"initialized_with_version":{"minLength":1,"type":"string"},"last_upgraded_from_version":{"minLength":1,"type":"string"},"ssot_registry_version":{"minLength":1,"type":"string"}},"required":["ssot_registry_version","initialized_with_version","last_upgraded_from_version"],"type":"object"}},"$id":"https://example.invalid/ssot-registry/registry.schema.json","$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"if":{"properties":{"repo":{"properties":{"kind":{"const":"repo-local"}},"required":["kind"],"type":"object"}}},"then":{"properties":{"adrs":{"not":{"contains":{"properties":{"origin":{"const":"ssot-core"}},"required":["origin"],"type":"object"}}},"specs":{"not":{"contains":{"properties":{"origin":{"const":"ssot-core"}},"required":["origin"],"type":"object"}}}}}}],"properties":{"adrs":{"items":{"$ref":"#/$defs/adr"},"type":"array"},"boundaries":{"items":{"$ref":"#/$defs/boundary"},"type":"array"},"claims":{"items":{"$ref":"#/$defs/claim"},"type":"array"},"document_id_reservations":{"$ref":"#/$defs/documentIdReservations"},"evidence":{"items":{"$ref":"#/$defs/evidence"},"type":"array"},"features":{"items":{"$ref":"#/$defs/feature"},"type":"array"},"guard_policies":{"$ref":"#/$defs/guardPolicies"},"issues":{"items":{"$ref":"#/$defs/issue"},"type":"array"},"paths":{"$ref":"#/$defs/paths"},"profiles":{"items":{"$ref":"#/$defs/profile"},"type":"array"},"program":{"$ref":"#/$defs/program"},"releases":{"items":{"$ref":"#/$defs/release"},"type":"array"},"repo":{"$ref":"#/$defs/repo"},"risks":{"items":{"$ref":"#/$defs/risk"},"type":"array"},"schema_version":{"const":"0.4.0"},"specs":{"items":{"$ref":"#/$defs/spec"},"type":"array"},"tests":{"items":{"$ref":"#/$defs/test"},"type":"array"},"tooling":{"$ref":"#/$defs/tooling"}},"required":["schema_version","repo","tooling","paths","program","guard_policies","document_id_reservations","features","profiles","tests","claims","evidence","issues","risks","boundaries","releases","adrs","specs"],"title":"ssot-registry canonical registry","type":"object"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$defs":{"normalizedId":{"maxLength":128,"pattern":"^[a-z][a-z0-9-]*:[a-z0-9][a-z0-9._-]*$","type":"string"},"normalizedIdList":{"items":{"$ref":"#/$defs/normalizedId"},"type":"array"}},"$id":"https://example.invalid/ssot-registry/spec.schema.json","$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":true,"properties":{"adr_ids":{"$ref":"#/$defs/normalizedIdList"},"body":{"minLength":1,"type":"string"},"decision_date":{"type":["string","null"]},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"const":"spec"},"number":{"minimum":1,"type":"integer"},"origin":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"references":{"items":{"type":"string"},"type":"array"},"schema_version":{"pattern":"^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$","type":"string"},"slug":{"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"},"spec_kind":{"enum":["normative","operational","governance","local-policy"]},"status":{"enum":["draft","in_review","accepted","rejected","superseded","withdrawn","retired"]},"status_notes":{"items":{"type":"object"},"type":"array"},"summary":{"minLength":1,"type":"string"},"superseded_by":{"$ref":"#/$defs/normalizedIdList"},"supersedes":{"$ref":"#/$defs/normalizedIdList"},"tags":{"items":{"type":"string"},"type":"array"},"title":{"minLength":1,"type":"string"}},"required":["schema_version","kind","id","number","slug","title","status","origin","summary","body","spec_kind","adr_ids"],"type":"object"}
|
|
@@ -40,7 +40,7 @@ schema_version: "0.2.0"
|
|
|
40
40
|
slug: "out-of-bounds-implementation-disposition"
|
|
41
41
|
status: "accepted"
|
|
42
42
|
status_notes: []
|
|
43
|
-
summary: "
|
|
43
|
+
summary: "Feature implementation state, planning horizon, and lifecycle state are separate axes. That separation is useful, but it leaves an ambiguous case: a feature can be `out_of_bounds` while still being `partial` or `implemented` in the codebase."
|
|
44
44
|
superseded_by: []
|
|
45
45
|
supersedes: []
|
|
46
46
|
tags: []
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
## Context
|
|
3
|
+
|
|
4
|
+
Feature implementation status, claim lifecycle status, and claim assurance tier are separate fields. That separation is useful, but it can overstate implementation when a feature has multiple active linked claims and only one of them satisfies the target tier.
|
|
5
|
+
|
|
6
|
+
`T0` is inventory-level assurance. A `T0` claim records declared intent, scope, or placeholder support; it does not prove working behavior. Therefore a feature with an active required `T0` claim must not be marked `implemented`.
|
|
7
|
+
|
|
8
|
+
## Decision
|
|
9
|
+
|
|
10
|
+
Feature implementation promotion is capped by active required linked claims.
|
|
11
|
+
|
|
12
|
+
All active linked claims on a feature are required for feature implementation closure. Retired claims are ignored. A stronger linked claim cannot override a weaker active required claim.
|
|
13
|
+
|
|
14
|
+
A feature may be marked `implemented` only when:
|
|
15
|
+
|
|
16
|
+
- linked tests pass,
|
|
17
|
+
- required features are implemented,
|
|
18
|
+
- every active required linked claim satisfies the feature's effective target tier,
|
|
19
|
+
- no active required linked claim is `T0`.
|
|
20
|
+
|
|
21
|
+
If an active required `T0` claim is linked to a feature, the highest allowed feature `implementation_status` is `partial`. If all linked support is planned or placeholder-only, the highest allowed feature `implementation_status` is `absent`.
|
|
22
|
+
|
|
23
|
+
## Consequences
|
|
24
|
+
|
|
25
|
+
Automated status synchronization must use all-pass claim precedence for feature implementation promotion.
|
|
26
|
+
|
|
27
|
+
Validation must reject manually edited registries that mark a feature `implemented` while an active required linked claim is `T0` or below the feature target tier.
|
|
28
|
+
|
|
29
|
+
Registries that need non-blocking explanatory claims must model that as a later governed schema capability. Until that exists, active linked claims are required closure inputs.
|
|
30
|
+
decision_date: null
|
|
31
|
+
id: "adr:0617"
|
|
32
|
+
kind: "adr"
|
|
33
|
+
number: 617
|
|
34
|
+
origin: "ssot-origin"
|
|
35
|
+
references: []
|
|
36
|
+
schema_version: "0.2.0"
|
|
37
|
+
slug: "feature-implementation-claim-ceilings"
|
|
38
|
+
status: "accepted"
|
|
39
|
+
status_notes: []
|
|
40
|
+
summary: "Feature implementation status, claim lifecycle status, and claim assurance tier are separate fields. That separation is useful, but it can overstate implementation when a feature has multiple active linked claims and only one of them satisfies the target tier."
|
|
41
|
+
superseded_by: []
|
|
42
|
+
supersedes: []
|
|
43
|
+
tags: []
|
|
44
|
+
title: "Feature implementation is capped by active required claims"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0618"
|
|
4
|
+
number: 618
|
|
5
|
+
slug: "local-release-assurance-remains-ssot-native"
|
|
6
|
+
title: "Local Release Assurance Remains SSOT Native"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This is a tentative proposal record, not an accepted implementation mandate."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:33:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This is a tentative proposal record, not an accepted implementation mandate.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
The registry already governs ADRs, SPECs, features, tests, claims, evidence, boundaries, releases, reports, and snapshots. We want to explore release-assurance capabilities without adding mandatory external services or build systems.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Keep local release assurance SSOT-native. Candidate capabilities must use existing registry data, local files, canonical JSON, SHA-256 hashes, validation reports, certification reports, and release gates. CUE, Bazel, Nix, Sigstore, Cosign, Rekor, Docker-only assumptions, network services, and mandatory external build tools are out of scope for the core proposal.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
The implementation can remain portable and dependency-light. Any future external integration must be optional and adapter-based, not part of the core assurance contract.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0619"
|
|
4
|
+
number: 619
|
|
5
|
+
slug: "content-addressed-governed-source-snapshots"
|
|
6
|
+
title: "Content Addressed Governed Source Snapshots"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This records an exploratory direction for later feature rows."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:34:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This records an exploratory direction for later feature rows.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
Current SSOT validation hashes ADR and SPEC document bodies and release snapshots hash selected linked test and evidence paths. That does not yet provide a release-scoped source-state root over governed files.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Represent governed source state as deterministic file hashes plus a canonical root hash over the governed file hash map. The default scope should be declared or governed paths, not the entire repository. Full-repo hashing may be offered only as explicit opt-in policy.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
Release verification can detect drift across governed source, tests, evidence, documents, and artifacts while avoiding local cache, virtual environment, build-output, and temp-file noise.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0620"
|
|
4
|
+
number: 620
|
|
5
|
+
slug: "local-evidence-bundles-are-derived-release-artifacts"
|
|
6
|
+
title: "Local Evidence Bundles Are Derived Release Artifacts"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This is a tentative proposal for future implementation."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:34:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This is a tentative proposal for future implementation.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
Claims, tests, evidence rows, boundaries, and releases already form a proof chain. Operators still lack a single local artifact that bundles the release proof with source snapshot and artifact manifest references.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Treat local evidence bundles as derived SSOT release artifacts. Bundles are generated from registry truth and linked files; they are not a second source of truth. They should be canonical JSON, locally hashable, locally verifiable, and safe to regenerate.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
Verification can consume a portable local bundle while the registry remains authoritative. Bundle drift is detected through canonical hashing and release gates rather than external signatures.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0621"
|
|
4
|
+
number: 621
|
|
5
|
+
slug: "general-rules-of-interpretation"
|
|
6
|
+
title: "General rules of interpretation govern SSOT meaning"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "SSOT governance relies on authored ADRs, authored SPECs, registry entities, generated projections, CLI summaries, evidence artifacts, and repository documentation. Those surfaces are intentionally different, but the repository does not yet have a general rule set for resolving interpretation questions across them."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
SSOT governance relies on authored ADRs, authored SPECs, registry entities, generated projections, CLI summaries, evidence artifacts, and repository documentation. Those surfaces are intentionally different, but the repository does not yet have a general rule set for resolving interpretation questions across them.
|
|
20
|
+
|
|
21
|
+
Without a governed interpretation rule, readers and automation can over-weight generated views, treat draft proposals as binding, infer support from missing rows, or resolve ambiguous certification and release questions permissively.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
24
|
+
|
|
25
|
+
SSOT governance SHALL use general rules of interpretation for authority, conflict resolution, normative language, projections, entity absence, and fail-closed release decisions.
|
|
26
|
+
|
|
27
|
+
The rules are:
|
|
28
|
+
|
|
29
|
+
- authored ADRs and SPECs govern intent, rationale, and normative requirements;
|
|
30
|
+
- `.ssot/registry.json` governs current machine-readable entity state and relationships;
|
|
31
|
+
- generated exports, reports, graphs, README tables, and CLI summaries are projections unless a SPEC explicitly declares a surface canonical;
|
|
32
|
+
- specific accepted rules narrow or override general accepted rules for their exact scope;
|
|
33
|
+
- accepted documents override draft documents;
|
|
34
|
+
- later documents override earlier documents only through explicit supersession or explicit scoped narrowing;
|
|
35
|
+
- absence of a governed row means absence of a governed assertion;
|
|
36
|
+
- ambiguity in conformance, certification, promotion, publication, and release gates is resolved fail-closed.
|
|
37
|
+
|
|
38
|
+
## Consequences
|
|
39
|
+
|
|
40
|
+
Validation, synchronization, certification, and release tooling must not treat generated projections as independent authority when they disagree with authored documents or the canonical registry.
|
|
41
|
+
|
|
42
|
+
Draft ADRs and SPECs may guide planning, but they must not create binding conformance requirements until accepted or otherwise promoted by the repository's governed lifecycle.
|
|
43
|
+
|
|
44
|
+
Downstream projects may add stricter local rules, but they must not interpret missing, ambiguous, or projection-only data as stronger assurance than the originating SSOT registry supports.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0622"
|
|
4
|
+
number: 622
|
|
5
|
+
slug: "definitions-govern-ssot-vocabulary"
|
|
6
|
+
title: "Definitions govern SSOT vocabulary"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "SSOT governance uses recurring terms across authored ADRs, authored SPECs, registry rows, CLI output, generated projections, evidence artifacts, releases, boundaries, and downstream conformance work. Those terms currently appear across many documents, but there is no single governed vocabulary authority."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
SSOT governance uses recurring terms across authored ADRs, authored SPECs, registry rows, CLI output, generated projections, evidence artifacts, releases, boundaries, and downstream conformance work. Those terms currently appear across many documents, but there is no single governed vocabulary authority.
|
|
20
|
+
|
|
21
|
+
Without a definitions authority, readers and tools can interpret entity families, proof terms, lifecycle terms, projections, and assurance terms inconsistently. That weakens traceability and makes release or certification claims harder to audit.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
24
|
+
|
|
25
|
+
SSOT vocabulary SHALL be governed by a dedicated definitions SPEC.
|
|
26
|
+
|
|
27
|
+
Defined SSOT terms SHALL override informal usage in README files, generated reports, examples, comments, and downstream prose.
|
|
28
|
+
|
|
29
|
+
Entity-family terms SHALL be interpreted according to the definitions SPEC unless a more specific accepted SPEC narrows a term for its own explicit scope.
|
|
30
|
+
|
|
31
|
+
Undefined terms retain their ordinary technical meaning, but they SHALL NOT create conformance, certification, release, or implementation obligations by implication.
|
|
32
|
+
|
|
33
|
+
Downstream repositories MAY add stricter local definitions, but they SHALL NOT redefine upstream SSOT terms to claim stronger assurance than the upstream registry, authored documents, claims, tests, and evidence support.
|
|
34
|
+
|
|
35
|
+
## Consequences
|
|
36
|
+
|
|
37
|
+
New ADRs and SPECs should reuse defined terms where possible instead of creating parallel vocabulary.
|
|
38
|
+
|
|
39
|
+
Definitions that affect validation, synchronization, conformance, release, or certification behavior must be added to the governed definitions SPEC or to a narrower accepted SPEC that states its scope.
|
|
40
|
+
|
|
41
|
+
Generated projections and CLI summaries must not introduce authoritative definitions that do not exist in authored governance.
|
|
@@ -294,7 +294,7 @@
|
|
|
294
294
|
"title": "Out-of-bounds implementation disposition is explicit",
|
|
295
295
|
"filename": "ADR-0616-out-of-bounds-implementation-disposition.yaml",
|
|
296
296
|
"target_path": ".ssot/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml",
|
|
297
|
-
"sha256": "
|
|
297
|
+
"sha256": "d598e42994b2401e93b3c23b3c0095ed24b45ef257ead6689dc476bb273350d3",
|
|
298
298
|
"origin": "ssot-origin",
|
|
299
299
|
"reservation_owner": "ssot-origin",
|
|
300
300
|
"immutable": true,
|
|
@@ -304,5 +304,131 @@
|
|
|
304
304
|
"supersedes": [],
|
|
305
305
|
"superseded_by": [],
|
|
306
306
|
"status_notes": []
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
"id": "adr:0617",
|
|
310
|
+
"number": 617,
|
|
311
|
+
"slug": "feature-implementation-claim-ceilings",
|
|
312
|
+
"title": "Feature implementation is capped by active required claims",
|
|
313
|
+
"filename": "ADR-0617-feature-implementation-claim-ceilings.yaml",
|
|
314
|
+
"target_path": ".ssot/adr/ADR-0617-feature-implementation-claim-ceilings.yaml",
|
|
315
|
+
"sha256": "0a11198e91bb7e4e6027fbb4824798d784e5b15a9e39a58464ff1fdcb219ced5",
|
|
316
|
+
"origin": "ssot-origin",
|
|
317
|
+
"reservation_owner": "ssot-origin",
|
|
318
|
+
"immutable": true,
|
|
319
|
+
"minimum_schema_version": "0.2.0",
|
|
320
|
+
"introduced_in": "0.2.13",
|
|
321
|
+
"status": "accepted",
|
|
322
|
+
"supersedes": [],
|
|
323
|
+
"superseded_by": [],
|
|
324
|
+
"status_notes": []
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"id": "adr:0618",
|
|
328
|
+
"number": 618,
|
|
329
|
+
"slug": "local-release-assurance-remains-ssot-native",
|
|
330
|
+
"title": "Local Release Assurance Remains SSOT Native",
|
|
331
|
+
"filename": "ADR-0618-local-release-assurance-remains-ssot-native.yaml",
|
|
332
|
+
"target_path": ".ssot/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml",
|
|
333
|
+
"sha256": "1fcf1d69ab68ae5e125b0f3bb7f6369240164c4a18b8e686479408bfd282587c",
|
|
334
|
+
"origin": "ssot-origin",
|
|
335
|
+
"reservation_owner": "ssot-origin",
|
|
336
|
+
"immutable": true,
|
|
337
|
+
"minimum_schema_version": "0.4.0",
|
|
338
|
+
"introduced_in": "0.2.10",
|
|
339
|
+
"status": "draft",
|
|
340
|
+
"supersedes": [],
|
|
341
|
+
"superseded_by": [],
|
|
342
|
+
"status_notes": [
|
|
343
|
+
{
|
|
344
|
+
"at": "2026-05-08T07:33:02Z",
|
|
345
|
+
"note": "Tentative local release assurance proposal; not accepted or implementation-bound.",
|
|
346
|
+
"status": "draft"
|
|
347
|
+
}
|
|
348
|
+
]
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
"id": "adr:0619",
|
|
352
|
+
"number": 619,
|
|
353
|
+
"slug": "content-addressed-governed-source-snapshots",
|
|
354
|
+
"title": "Content Addressed Governed Source Snapshots",
|
|
355
|
+
"filename": "ADR-0619-content-addressed-governed-source-snapshots.yaml",
|
|
356
|
+
"target_path": ".ssot/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml",
|
|
357
|
+
"sha256": "3e356168e16d0a4e63288c32a21af6c6e96bf7e92bd124ea796a3fc7e1cc6f9f",
|
|
358
|
+
"origin": "ssot-origin",
|
|
359
|
+
"reservation_owner": "ssot-origin",
|
|
360
|
+
"immutable": true,
|
|
361
|
+
"minimum_schema_version": "0.4.0",
|
|
362
|
+
"introduced_in": "0.2.10",
|
|
363
|
+
"status": "draft",
|
|
364
|
+
"supersedes": [],
|
|
365
|
+
"superseded_by": [],
|
|
366
|
+
"status_notes": [
|
|
367
|
+
{
|
|
368
|
+
"at": "2026-05-08T07:34:02Z",
|
|
369
|
+
"note": "Tentative local release assurance proposal; not accepted or implementation-bound.",
|
|
370
|
+
"status": "draft"
|
|
371
|
+
}
|
|
372
|
+
]
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"id": "adr:0620",
|
|
376
|
+
"number": 620,
|
|
377
|
+
"slug": "local-evidence-bundles-are-derived-release-artifacts",
|
|
378
|
+
"title": "Local Evidence Bundles Are Derived Release Artifacts",
|
|
379
|
+
"filename": "ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml",
|
|
380
|
+
"target_path": ".ssot/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml",
|
|
381
|
+
"sha256": "6bd56ffd4ccdab5d939757fedb1b0c6df9e8dc8c4d0811b0855e84cc8c936ae3",
|
|
382
|
+
"origin": "ssot-origin",
|
|
383
|
+
"reservation_owner": "ssot-origin",
|
|
384
|
+
"immutable": true,
|
|
385
|
+
"minimum_schema_version": "0.4.0",
|
|
386
|
+
"introduced_in": "0.2.10",
|
|
387
|
+
"status": "draft",
|
|
388
|
+
"supersedes": [],
|
|
389
|
+
"superseded_by": [],
|
|
390
|
+
"status_notes": [
|
|
391
|
+
{
|
|
392
|
+
"at": "2026-05-08T07:34:02Z",
|
|
393
|
+
"note": "Tentative local release assurance proposal; not accepted or implementation-bound.",
|
|
394
|
+
"status": "draft"
|
|
395
|
+
}
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"id": "adr:0621",
|
|
400
|
+
"number": 621,
|
|
401
|
+
"slug": "general-rules-of-interpretation",
|
|
402
|
+
"title": "General rules of interpretation govern SSOT meaning",
|
|
403
|
+
"filename": "ADR-0621-general-rules-of-interpretation.yaml",
|
|
404
|
+
"target_path": ".ssot/adr/ADR-0621-general-rules-of-interpretation.yaml",
|
|
405
|
+
"sha256": "20c89d5a323835e4dee328e4debbc8de0edf623f0b297e8158d0e8295f8157a9",
|
|
406
|
+
"origin": "ssot-origin",
|
|
407
|
+
"reservation_owner": "ssot-origin",
|
|
408
|
+
"immutable": true,
|
|
409
|
+
"minimum_schema_version": "0.4.0",
|
|
410
|
+
"introduced_in": "0.2.10",
|
|
411
|
+
"status": "draft",
|
|
412
|
+
"supersedes": [],
|
|
413
|
+
"superseded_by": [],
|
|
414
|
+
"status_notes": []
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"id": "adr:0622",
|
|
418
|
+
"number": 622,
|
|
419
|
+
"slug": "definitions-govern-ssot-vocabulary",
|
|
420
|
+
"title": "Definitions govern SSOT vocabulary",
|
|
421
|
+
"filename": "ADR-0622-definitions-govern-ssot-vocabulary.yaml",
|
|
422
|
+
"target_path": ".ssot/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml",
|
|
423
|
+
"sha256": "816d194bcbbdf5f4bad1e8ab78e6756103f414554e0cc2a4c525a3697eee188d",
|
|
424
|
+
"origin": "ssot-origin",
|
|
425
|
+
"reservation_owner": "ssot-origin",
|
|
426
|
+
"immutable": true,
|
|
427
|
+
"minimum_schema_version": "0.4.0",
|
|
428
|
+
"introduced_in": "0.2.10",
|
|
429
|
+
"status": "draft",
|
|
430
|
+
"supersedes": [],
|
|
431
|
+
"superseded_by": [],
|
|
432
|
+
"status_notes": []
|
|
307
433
|
}
|
|
308
434
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"adrs":[],"boundaries":[{"feature_ids":["feat:rfc.9000.connection-migration"],"frozen":true,"id":"bnd:2026q2.core","profile_ids":[],"status":"frozen","title":"2026 Q2 core boundary"}],"claims":[{"description":"Connection migration conforms to the targeted behavior.","evidence_ids":["evd:t3.rfc.9000.connection-migration.bundle"],"feature_ids":["feat:rfc.9000.connection-migration"],"id":"clm:rfc.9000.connection-migration.t3","kind":"conformance","status":"asserted","test_ids":["tst:pytest.rfc.9000.connection-migration"],"tier":"T3","title":"RFC 9000 connection migration claim"}],"document_id_reservations":{"adr":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}],"spec":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}]},"evidence":[{"claim_ids":["clm:rfc.9000.connection-migration.t3"],"id":"evd:t3.rfc.9000.connection-migration.bundle","kind":"bundle","path":".ssot/evidence/bundles/evd__t3.rfc.9000.connection-migration.bundle","status":"passed","test_ids":["tst:pytest.rfc.9000.connection-migration"],"tier":"T3","title":"Tier 3 connection migration evidence bundle"}],"features":[{"claim_ids":["clm:rfc.9000.connection-migration.t3"],"description":"Implements QUIC connection migration behavior.","id":"feat:rfc.9000.connection-migration","implementation_status":"implemented","lifecycle":{"note":null,"replacement_feature_ids":[],"stage":"active"},"plan":{"horizon":"current","slot":null,"target_claim_tier":"T3","target_lifecycle_stage":"active"},"requires":[],"spec_ids":[],"test_ids":["tst:pytest.rfc.9000.connection-migration"],"title":"RFC 9000 connection migration"}],"guard_policies":{"certification":{"forbid_active_release_blocking_risks":true,"forbid_open_release_blocking_issues":true,"require_boundary_features_current_or_explicit":true,"require_feature_target_tiers_met":true,"require_frozen_boundary":true,"require_release_claim_coverage_for_boundary_features":true,"require_release_status_draft_or_candidate":true},"claim_closure":{"forbid_failed_or_stale_evidence":true,"require_claim_evidence_tier_alignment":true,"require_implemented_features":true,"require_linked_evidence_passing":true,"require_linked_tests_passing":true},"lifecycle":{"forbid_obsolete_or_removed_in_active_boundary":true,"require_feature_absent_for_removed":true,"require_replacement_or_note_for_deprecation":true},"promotion":{"require_release_snapshot_hashes":true,"require_release_status_certified":true},"publication":{"require_release_status_promoted":true}},"issues":[],"paths":{"adr_root":".ssot/adr","cache_root":".ssot/cache","evidence_root":".ssot/evidence","graph_root":".ssot/graphs","release_root":".ssot/releases","report_root":".ssot/reports","schema_root":".ssot/schemas","spec_root":".ssot/specs","ssot_root":".ssot"},"profiles":[],"program":{"active_boundary_id":"bnd:2026q2.core","active_release_id":"rel:1.2.0"},"releases":[{"boundary_id":"bnd:2026q2.core","boundary_ids":["bnd:2026q2.core"],"claim_ids":["clm:rfc.9000.connection-migration.t3"],"evidence_ids":["evd:t3.rfc.9000.connection-migration.bundle"],"id":"rel:1.2.0","status":"candidate","version":"1.2.0"}],"repo":{"id":"repo:advanced-example","kind":"repo-local","name":"advanced-example","version":"1.2.0"},"risks":[],"schema_version":"0.
|
|
1
|
+
{"adrs":[],"boundaries":[{"feature_ids":["feat:rfc.9000.connection-migration"],"frozen":true,"id":"bnd:2026q2.core","profile_ids":[],"status":"frozen","title":"2026 Q2 core boundary"}],"claims":[{"description":"Connection migration conforms to the targeted behavior.","evidence_ids":["evd:t3.rfc.9000.connection-migration.bundle"],"feature_ids":["feat:rfc.9000.connection-migration"],"id":"clm:rfc.9000.connection-migration.t3","kind":"conformance","status":"asserted","test_ids":["tst:pytest.rfc.9000.connection-migration"],"tier":"T3","title":"RFC 9000 connection migration claim"}],"document_id_reservations":{"adr":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}],"spec":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}]},"evidence":[{"claim_ids":["clm:rfc.9000.connection-migration.t3"],"id":"evd:t3.rfc.9000.connection-migration.bundle","kind":"bundle","path":".ssot/evidence/bundles/evd__t3.rfc.9000.connection-migration.bundle","status":"passed","test_ids":["tst:pytest.rfc.9000.connection-migration"],"tier":"T3","title":"Tier 3 connection migration evidence bundle"}],"features":[{"claim_ids":["clm:rfc.9000.connection-migration.t3"],"description":"Implements QUIC connection migration behavior.","id":"feat:rfc.9000.connection-migration","implementation_status":"implemented","lifecycle":{"note":null,"replacement_feature_ids":[],"stage":"active"},"plan":{"horizon":"current","slot":null,"target_claim_tier":"T3","target_lifecycle_stage":"active"},"requires":[],"spec_ids":[],"test_ids":["tst:pytest.rfc.9000.connection-migration"],"title":"RFC 9000 connection migration"}],"guard_policies":{"certification":{"forbid_active_release_blocking_risks":true,"forbid_open_release_blocking_issues":true,"require_boundary_features_current_or_explicit":true,"require_feature_target_tiers_met":true,"require_frozen_boundary":true,"require_release_claim_coverage_for_boundary_features":true,"require_release_status_draft_or_candidate":true},"claim_closure":{"forbid_failed_or_stale_evidence":true,"require_claim_evidence_tier_alignment":true,"require_implemented_features":true,"require_linked_evidence_passing":true,"require_linked_tests_passing":true},"lifecycle":{"forbid_obsolete_or_removed_in_active_boundary":true,"require_feature_absent_for_removed":true,"require_replacement_or_note_for_deprecation":true},"promotion":{"require_release_snapshot_hashes":true,"require_release_status_certified":true},"publication":{"require_release_status_promoted":true}},"issues":[],"paths":{"adr_root":".ssot/adr","cache_root":".ssot/cache","evidence_root":".ssot/evidence","graph_root":".ssot/graphs","release_root":".ssot/releases","report_root":".ssot/reports","schema_root":".ssot/schemas","spec_root":".ssot/specs","ssot_root":".ssot"},"profiles":[],"program":{"active_boundary_id":"bnd:2026q2.core","active_release_id":"rel:1.2.0"},"releases":[{"boundary_id":"bnd:2026q2.core","boundary_ids":["bnd:2026q2.core"],"claim_ids":["clm:rfc.9000.connection-migration.t3"],"evidence_ids":["evd:t3.rfc.9000.connection-migration.bundle"],"id":"rel:1.2.0","status":"candidate","version":"1.2.0"}],"repo":{"id":"repo:advanced-example","kind":"repo-local","name":"advanced-example","version":"1.2.0"},"risks":[],"schema_version":"0.4.0","specs":[],"tests":[{"claim_ids":["clm:rfc.9000.connection-migration.t3"],"evidence_ids":["evd:t3.rfc.9000.connection-migration.bundle"],"feature_ids":["feat:rfc.9000.connection-migration"],"id":"tst:pytest.rfc.9000.connection-migration","kind":"pytest","path":"tests/test_connection_migration.py","status":"passing","title":"Connection migration regression suite"}],"tooling":{"initialized_with_version":"0.2.1","last_upgraded_from_version":"0.2.1","ssot_registry_version":"0.2.1"}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"adrs":[],"boundaries":[{"feature_ids":[],"frozen":false,"id":"bnd:default","profile_ids":[],"status":"draft","title":"Default boundary"}],"claims":[],"document_id_reservations":{"adr":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}],"spec":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}]},"evidence":[],"features":[],"guard_policies":{"certification":{"forbid_active_release_blocking_risks":true,"forbid_open_release_blocking_issues":true,"require_boundary_features_current_or_explicit":true,"require_feature_target_tiers_met":true,"require_frozen_boundary":true,"require_release_claim_coverage_for_boundary_features":true,"require_release_status_draft_or_candidate":true},"claim_closure":{"forbid_failed_or_stale_evidence":true,"require_claim_evidence_tier_alignment":true,"require_implemented_features":true,"require_linked_evidence_passing":true,"require_linked_tests_passing":true},"lifecycle":{"forbid_obsolete_or_removed_in_active_boundary":true,"require_feature_absent_for_removed":true,"require_replacement_or_note_for_deprecation":true},"promotion":{"require_release_snapshot_hashes":true,"require_release_status_certified":true},"publication":{"require_release_status_promoted":true}},"issues":[],"paths":{"adr_root":".ssot/adr","cache_root":".ssot/cache","evidence_root":".ssot/evidence","graph_root":".ssot/graphs","release_root":".ssot/releases","report_root":".ssot/reports","schema_root":".ssot/schemas","spec_root":".ssot/specs","ssot_root":".ssot"},"profiles":[],"program":{"active_boundary_id":"bnd:default","active_release_id":"rel:0.1.0"},"releases":[{"boundary_id":"bnd:default","boundary_ids":["bnd:default"],"claim_ids":[],"evidence_ids":[],"id":"rel:0.1.0","status":"draft","version":"0.1.0"}],"repo":{"id":"repo:minimal-example","kind":"repo-local","name":"minimal-example","version":"0.1.0"},"risks":[],"schema_version":"0.
|
|
1
|
+
{"adrs":[],"boundaries":[{"feature_ids":[],"frozen":false,"id":"bnd:default","profile_ids":[],"status":"draft","title":"Default boundary"}],"claims":[],"document_id_reservations":{"adr":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}],"spec":[{"assignable_by_repo":false,"deletable":false,"end":599,"immutable":true,"owner":"ssot-core","start":1},{"assignable_by_repo":false,"deletable":false,"end":999,"immutable":true,"owner":"ssot-origin","start":600},{"assignable_by_repo":true,"deletable":true,"end":4999,"immutable":false,"owner":"repo-local","start":1000}]},"evidence":[],"features":[],"guard_policies":{"certification":{"forbid_active_release_blocking_risks":true,"forbid_open_release_blocking_issues":true,"require_boundary_features_current_or_explicit":true,"require_feature_target_tiers_met":true,"require_frozen_boundary":true,"require_release_claim_coverage_for_boundary_features":true,"require_release_status_draft_or_candidate":true},"claim_closure":{"forbid_failed_or_stale_evidence":true,"require_claim_evidence_tier_alignment":true,"require_implemented_features":true,"require_linked_evidence_passing":true,"require_linked_tests_passing":true},"lifecycle":{"forbid_obsolete_or_removed_in_active_boundary":true,"require_feature_absent_for_removed":true,"require_replacement_or_note_for_deprecation":true},"promotion":{"require_release_snapshot_hashes":true,"require_release_status_certified":true},"publication":{"require_release_status_promoted":true}},"issues":[],"paths":{"adr_root":".ssot/adr","cache_root":".ssot/cache","evidence_root":".ssot/evidence","graph_root":".ssot/graphs","release_root":".ssot/releases","report_root":".ssot/reports","schema_root":".ssot/schemas","spec_root":".ssot/specs","ssot_root":".ssot"},"profiles":[],"program":{"active_boundary_id":"bnd:default","active_release_id":"rel:0.1.0"},"releases":[{"boundary_id":"bnd:default","boundary_ids":["bnd:default"],"claim_ids":[],"evidence_ids":[],"id":"rel:0.1.0","status":"draft","version":"0.1.0"}],"repo":{"id":"repo:minimal-example","kind":"repo-local","name":"minimal-example","version":"0.1.0"},"risks":[],"schema_version":"0.4.0","specs":[],"tests":[],"tooling":{"initialized_with_version":"0.2.1","last_upgraded_from_version":"0.2.1","ssot_registry_version":"0.2.1"}}
|
|
@@ -6,6 +6,7 @@ body: |-
|
|
|
6
6
|
|
|
7
7
|
- `ssot-core`
|
|
8
8
|
- `ssot-origin`
|
|
9
|
+
- `extension-pack`
|
|
9
10
|
- `repo-local`
|
|
10
11
|
|
|
11
12
|
## Top Level Sections
|
|
@@ -41,8 +42,15 @@ body: |-
|
|
|
41
42
|
|
|
42
43
|
- `ssot-core`
|
|
43
44
|
- `ssot-origin`
|
|
45
|
+
- `extension-pack`
|
|
44
46
|
- `repo-local`
|
|
45
47
|
|
|
48
|
+
Provenance SHALL distinguish authority from distribution. In particular:
|
|
49
|
+
|
|
50
|
+
- `origin` identifies who governs the document truth surface
|
|
51
|
+
- packaging or installability does not by itself imply `ssot-origin`
|
|
52
|
+
- packaged extension catalogs SHALL remain `origin: extension-pack`
|
|
53
|
+
|
|
46
54
|
SPEC `kind` is a non-provenance label and MUST be one of:
|
|
47
55
|
|
|
48
56
|
- `normative`
|