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.
Files changed (85) hide show
  1. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/PKG-INFO +2 -2
  2. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/README.md +1 -1
  3. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/pyproject.toml +1 -1
  4. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/contract_data.py +1 -1
  5. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/tui_metadata.py +1 -1
  6. ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/adr.schema.json +1 -0
  7. ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/registry.schema.json +1 -0
  8. ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/spec.schema.json +1 -0
  9. {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
  10. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +44 -0
  11. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +35 -0
  12. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +35 -0
  13. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +35 -0
  14. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +44 -0
  15. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +41 -0
  16. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/manifest.json +127 -1
  17. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/registry.full.json +1 -1
  18. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/registry.minimal.json +1 -1
  19. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +8 -0
  20. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +32 -16
  21. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +8 -0
  22. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +2 -1
  23. {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
  24. {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
  25. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +53 -0
  26. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +38 -0
  27. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +39 -0
  28. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +39 -0
  29. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +39 -0
  30. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +40 -0
  31. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +82 -0
  32. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +132 -0
  33. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/manifest.json +217 -6
  34. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/PKG-INFO +2 -2
  35. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/SOURCES.txt +14 -0
  36. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/adr.schema.json +0 -1
  37. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/registry.schema.json +0 -1
  38. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/spec.schema.json +0 -1
  39. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/setup.cfg +0 -0
  40. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/__init__.py +0 -0
  41. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/__init__.py +0 -0
  42. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/__init__.py +0 -0
  43. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
  44. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/enums.py +0 -0
  45. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/generated/python/ids.py +0 -0
  46. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/__init__.py +0 -0
  47. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
  48. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
  49. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
  50. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
  51. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
  52. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
  53. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/__init__.py +0 -0
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {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
  67. {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
  68. {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
  69. {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
  70. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/adr/__init__.py +0 -0
  71. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
  72. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
  73. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
  74. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -0
  75. {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
  76. {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
  77. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
  78. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
  79. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
  80. {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
  81. {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
  82. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts/templates/specs/__init__.py +0 -0
  83. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
  84. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev2}/src/ssot_contracts.egg-info/requires.txt +0 -0
  85. {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.16.dev1
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>🔷 ssot-contracts</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
 
@@ -1,5 +1,5 @@
1
1
  <div align="center">
2
- <h1>🔷 ssot-contracts</h1>
2
+ <h1>🔷 ssot-contracts</h1>
3
3
  <p><strong>Canonical schemas, templates, manifests, and generated contract metadata for SSOT.</strong></p>
4
4
  </div>
5
5
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssot-contracts"
7
- version = "0.2.16.dev1"
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"
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  CONTRACT_DATA = {
4
- "schema_version": "0.3.0",
4
+ "schema_version": "0.4.0",
5
5
  "output_formats": ["json", "csv", "df", "yaml", "toml"],
6
6
  "entity_sections": [
7
7
  {"key": "features", "label": "Features"},
@@ -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: "Non-absent out-of-bounds features must explicitly declare whether partial implementation is tolerated or prohibited."
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": "62327f52cab47a338956d630fc43f5ed3981467b3c1072876a9f955e62a37d86",
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.3.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
+ {"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.3.0","specs":[],"tests":[],"tooling":{"initialized_with_version":"0.2.1","last_upgraded_from_version":"0.2.1","ssot_registry_version":"0.2.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.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`