ssot-contracts 0.2.18.dev7__tar.gz → 0.2.19.dev1__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 (91) hide show
  1. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/PKG-INFO +3 -3
  2. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/README.md +2 -2
  3. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/pyproject.toml +1 -1
  4. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/contract_data.py +1 -1
  5. ssot_contracts-0.2.19.dev1/src/ssot_contracts/schema/registry.schema.json +1 -0
  6. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +11 -11
  7. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +15 -11
  8. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +11 -11
  9. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +11 -11
  10. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +11 -11
  11. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +15 -15
  12. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +11 -11
  13. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +11 -11
  14. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +11 -11
  15. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +15 -15
  16. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +11 -11
  17. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +11 -11
  18. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +15 -15
  19. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +15 -15
  20. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +11 -11
  21. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +15 -15
  22. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +15 -15
  23. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +15 -15
  24. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +3 -3
  25. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +3 -3
  26. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +3 -3
  27. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +1 -1
  28. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +1 -1
  29. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml +1 -1
  30. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml +2 -2
  31. ssot_contracts-0.2.19.dev1/src/ssot_contracts/templates/adr/ADR-0627-feature-parent-links-are-inventory-composition.yaml +27 -0
  32. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/manifest.json +49 -25
  33. ssot_contracts-0.2.19.dev1/src/ssot_contracts/templates/registry.full.json +1 -0
  34. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/registry.minimal.json +1 -1
  35. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +16 -16
  36. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +15 -3
  37. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +22 -16
  38. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +16 -16
  39. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +16 -16
  40. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +18 -18
  41. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +16 -16
  42. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +16 -16
  43. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +18 -18
  44. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +16 -16
  45. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +16 -16
  46. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +16 -16
  47. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +16 -16
  48. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +16 -16
  49. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +16 -16
  50. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +14 -14
  51. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +17 -17
  52. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +18 -18
  53. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +4 -4
  54. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +3 -3
  55. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +3 -3
  56. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +3 -3
  57. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +4 -4
  58. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +17 -17
  59. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +17 -17
  60. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml +2 -2
  61. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml +2 -2
  62. ssot_contracts-0.2.19.dev1/src/ssot_contracts/templates/specs/SPEC-0627-feature-parent-link-contract.yaml +36 -0
  63. ssot_contracts-0.2.19.dev1/src/ssot_contracts/templates/specs/SPEC-0628-feature-parent-cli-contract.yaml +39 -0
  64. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/manifest.json +83 -27
  65. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts.egg-info/PKG-INFO +3 -3
  66. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +3 -0
  67. ssot_contracts-0.2.18.dev7/src/ssot_contracts/schema/registry.schema.json +0 -1
  68. ssot_contracts-0.2.18.dev7/src/ssot_contracts/templates/registry.full.json +0 -1
  69. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/setup.cfg +0 -0
  70. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/__init__.py +0 -0
  71. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
  72. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
  73. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
  74. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/python/enums.py +0 -0
  75. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
  76. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
  77. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
  78. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
  79. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
  80. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
  81. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
  82. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
  83. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
  84. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
  85. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
  86. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
  87. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
  88. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
  89. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
  90. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
  91. {ssot_contracts-0.2.18.dev7 → ssot_contracts-0.2.19.dev1}/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.18.dev7
3
+ Version: 0.2.19.dev1
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
@@ -41,8 +41,8 @@ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
41
41
  <a href="https://pepy.tech/project/ssot-contracts"><img src="https://static.pepy.tech/badge/ssot-contracts" alt="Downloads" /></a>
42
42
  <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Repository hits" /></a>
43
43
  <!-- ssot-schema-badges:start -->
44
- <img src="https://img.shields.io/badge/schema_version-0.5.0-blue" alt="schema_version 0.5.0" />
45
- <img src="https://img.shields.io/badge/migration%20coverage-12%2F12-brightgreen" alt="Migration coverage 12/12" />
44
+ <img src="https://img.shields.io/badge/schema_version-0.7.0-blue" alt="schema_version 0.7.0" />
45
+ <img src="https://img.shields.io/badge/migration%20coverage-14%2F14-brightgreen" alt="Migration coverage 14/14" />
46
46
  <!-- ssot-schema-badges:end -->
47
47
  </div>
48
48
 
@@ -9,8 +9,8 @@
9
9
  <a href="https://pepy.tech/project/ssot-contracts"><img src="https://static.pepy.tech/badge/ssot-contracts" alt="Downloads" /></a>
10
10
  <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Repository hits" /></a>
11
11
  <!-- ssot-schema-badges:start -->
12
- <img src="https://img.shields.io/badge/schema_version-0.5.0-blue" alt="schema_version 0.5.0" />
13
- <img src="https://img.shields.io/badge/migration%20coverage-12%2F12-brightgreen" alt="Migration coverage 12/12" />
12
+ <img src="https://img.shields.io/badge/schema_version-0.7.0-blue" alt="schema_version 0.7.0" />
13
+ <img src="https://img.shields.io/badge/migration%20coverage-14%2F14-brightgreen" alt="Migration coverage 14/14" />
14
14
  <!-- ssot-schema-badges:end -->
15
15
  </div>
16
16
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssot-contracts"
7
- version = "0.2.18.dev7"
7
+ version = "0.2.19.dev1"
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.15"
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  CONTRACT_DATA = {
4
- "schema_version": "0.6.0",
4
+ "schema_version": "0.7.0",
5
5
  "output_formats": ["json", "csv", "df", "yaml", "toml"],
6
6
  "entity_sections": [
7
7
  {"key": "features", "label": "Features"},
@@ -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"},"source_document_id":{"$ref":"#/$defs/normalizedId"},"source_document_kind":{"enum":["adr","spec"]},"source_pack_id":{"$ref":"#/$defs/normalizedId"},"source_package_name":{"minLength":1,"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"},"assuranceOrigin":{"enum":["ssot-core","ssot-origin","extension-pack","repo-local"]},"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"},"depends_on_claim_ids":{"$ref":"#/$defs/stringList"},"description":{"type":"string"},"evidence_ids":{"$ref":"#/$defs/stringList"},"feature_ids":{"$ref":"#/$defs/stringList"},"id":{"$ref":"#/$defs/normalizedId"},"kind":{"minLength":1,"type":"string"},"origin":{"$ref":"#/$defs/assuranceOrigin"},"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","origin","depends_on_claim_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"},"origin":{"$ref":"#/$defs/assuranceOrigin"},"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","origin"],"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"},"origin":{"$ref":"#/$defs/assuranceOrigin"},"parent_feature_ids":{"$ref":"#/$defs/stringList"},"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","origin","parent_feature_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"},"source_document_id":{"$ref":"#/$defs/normalizedId"},"source_document_kind":{"enum":["adr","spec"]},"source_pack_id":{"$ref":"#/$defs/normalizedId"},"source_package_name":{"minLength":1,"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"},"origin":{"$ref":"#/$defs/assuranceOrigin"},"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","origin"],"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.7.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"}
@@ -1,17 +1,17 @@
1
- body: |-
2
- The only authored machine-readable source of truth is `.ssot/registry.json`.
3
- decision_date: null
4
- id: "adr:0600"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0600"
6
4
  number: 600
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "canonical-json-registry"
6
+ title: "Canonical registry is a single JSON document"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "The only authored machine-readable source of truth is `.ssot/registry.json`."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Canonical registry is a single JSON document"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ The only authored machine-readable source of truth is `.ssot/registry.json`.
@@ -1,17 +1,21 @@
1
- body: |-
2
- Features are the only targetable implementation units. There is no separate `targets[]` section.
3
- decision_date: null
4
- id: "adr:0601"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0601"
6
4
  number: 601
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "features-are-targetable-units"
6
+ title: "Features are the targetable units"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Features are the only targetable implementation units. There is no separate `targets[]` section."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Features are the targetable units"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Features are the only targetable implementation units. There is no separate `targets[]` section.
18
+
19
+ Feature inventory naming MAY use umbrella/leaf conventions when a repository needs grouped readability,
20
+ but that convention is not a runtime dependency model. `feature.requires` is reserved for prerequisite
21
+ features that must independently pass before the dependent feature can pass.
@@ -1,17 +1,17 @@
1
- body: |-
2
- Issues and tickets can be planned as current, next, future, explicit, backlog, or out-of-bounds, but they are not substitute targets for features.
3
- decision_date: null
4
- id: "adr:0602"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0602"
6
4
  number: 602
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "issues-are-plannable-work-items"
6
+ title: "Issues are plannable work items"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Issues and tickets can be planned as current, next, future, explicit, backlog, or out-of-bounds, but they are not substitute targets for features."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Issues are plannable work items"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Issues and tickets can be planned as current, next, future, explicit, backlog, or out-of-bounds, but they are not substitute targets for features.
@@ -1,17 +1,17 @@
1
- body: |-
2
- The canonical registry is entity-centric JSON with explicit references. A graph export is derived from it.
3
- decision_date: null
4
- id: "adr:0603"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0603"
6
4
  number: 603
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "entity-centric-registry-derived-graph"
6
+ title: "Entity-centric registry with a derived graph export"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "The canonical registry is entity-centric JSON with explicit references. A graph export is derived from it."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Entity-centric registry with a derived graph export"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ The canonical registry is entity-centric JSON with explicit references. A graph export is derived from it.
@@ -1,17 +1,17 @@
1
- body: |-
2
- Every first-class entity uses a normalized prefixed ID.
3
- decision_date: null
4
- id: "adr:0604"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0604"
6
4
  number: 604
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "normalized-prefixed-ids"
6
+ title: "Normalized prefixed IDs"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Every first-class entity uses a normalized prefixed ID."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Normalized prefixed IDs"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Every first-class entity uses a normalized prefixed ID.
@@ -1,3 +1,18 @@
1
+ schema_version: "0.7.0"
2
+ kind: "adr"
3
+ id: "adr:0605"
4
+ number: 605
5
+ slug: "claim-status-vs-tier"
6
+ title: "Claim status and claim tier are orthogonal"
7
+ status: "draft"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "Claims carry both lifecycle status and assurance tier. Earlier wording stated that status and tier are orthogonal, but the registry now also needs explicit promotion gates so a high lifecycle status cannot be mistaken for high assurance."
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
1
16
  body: |-
2
17
  ## Context
3
18
 
@@ -16,18 +31,3 @@ body: |-
16
31
  Automation and reviewers must not infer assurance strength from status alone. A claim with a high lifecycle status but insufficient tier-gate evidence must be reported as over-stated or blocked at the requested tier.
17
32
 
18
33
  Claim closure remains a support-coherence check. Tier gates remain the authority for the semantic meaning of `T1`, `T2`, `T3`, and `T4`.
19
- decision_date: null
20
- id: "adr:0605"
21
- kind: "adr"
22
- number: 605
23
- origin: "ssot-origin"
24
- references: []
25
- schema_version: "0.1.0"
26
- slug: "claim-status-vs-tier"
27
- status: "draft"
28
- status_notes: []
29
- summary: "Claim status expresses lifecycle progression, while claim tier expresses assurance strength and requires the applicable tier gate."
30
- superseded_by: []
31
- supersedes: []
32
- tags: []
33
- title: "Claim status and claim tier are orthogonal"
@@ -1,17 +1,17 @@
1
- body: |-
2
- `implementation_status` and `lifecycle.stage` are distinct fields.
3
- decision_date: null
4
- id: "adr:0606"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0606"
6
4
  number: 606
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "feature-implementation-vs-lifecycle"
6
+ title: "Feature implementation state is separate from lifecycle state"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "`implementation_status` and `lifecycle.stage` are distinct fields."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Feature implementation state is separate from lifecycle state"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ `implementation_status` and `lifecycle.stage` are distinct fields.
@@ -1,17 +1,17 @@
1
- body: |-
2
- Frozen boundaries and promoted/published releases emit immutable snapshots with hashes.
3
- decision_date: null
4
- id: "adr:0607"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0607"
6
4
  number: 607
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "immutable-boundary-and-release-snapshots"
6
+ title: "Immutable boundary and release snapshots"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Frozen boundaries and promoted/published releases emit immutable snapshots with hashes."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Immutable boundary and release snapshots"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Frozen boundaries and promoted/published releases emit immutable snapshots with hashes.
@@ -1,17 +1,17 @@
1
- body: |-
2
- Validation, certification, promotion, publication, and lifecycle transitions refuse to proceed on guard violations.
3
- decision_date: null
4
- id: "adr:0608"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0608"
6
4
  number: 608
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "fail-closed-guards"
6
+ title: "Fail-closed guards"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Validation, certification, promotion, publication, and lifecycle transitions refuse to proceed on guard violations."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Fail-closed guards"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Validation, certification, promotion, publication, and lifecycle transitions refuse to proceed on guard violations.
@@ -1,3 +1,18 @@
1
+ schema_version: "0.7.0"
2
+ kind: "adr"
3
+ id: "adr:0609"
4
+ number: 609
5
+ slug: "generated-projections-are-non-canonical"
6
+ title: "Generated projections are non-canonical"
7
+ status: "draft"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "This is an `ssot-origin` ADR copied into downstream SSOT repositories."
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
1
16
  body: |-
2
17
  This is an `ssot-origin` ADR copied into downstream SSOT repositories.
3
18
 
@@ -15,18 +30,3 @@ body: |-
15
30
  - reports and snapshots,
16
31
  - rendered or exported representations such as CSV, YAML, TOML, DOT, PNG, and SVG,
17
32
  - mirrored or regenerated documentation derived from the canonical SSOT content.
18
- decision_date: null
19
- id: "adr:0609"
20
- kind: "adr"
21
- number: 609
22
- origin: "ssot-origin"
23
- references: []
24
- schema_version: "0.1.0"
25
- slug: "generated-projections-are-non-canonical"
26
- status: "draft"
27
- status_notes: []
28
- summary: "This is an `ssot-origin` ADR copied into downstream SSOT repositories."
29
- superseded_by: []
30
- supersedes: []
31
- tags: []
32
- title: "Generated projections are non-canonical"
@@ -1,17 +1,17 @@
1
- body: |-
2
- Breaking schema changes increment `schema_version` and require migration.
3
- decision_date: null
4
- id: "adr:0610"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0610"
6
4
  number: 610
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "explicit-schema-versioning"
6
+ title: "Explicit schema versioning"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "Breaking schema changes increment `schema_version` and require migration."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Explicit schema versioning"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ Breaking schema changes increment `schema_version` and require migration.
@@ -1,17 +1,17 @@
1
- body: |-
2
- The SSOT core contract governs and validates the registry graph. Repository-specific evidence generation is implemented outside the core (or through adapters) per repository.
3
- decision_date: null
4
- id: "adr:0611"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0611"
6
4
  number: 611
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.1.0"
10
5
  slug: "portable-core-repo-specific-evidence-adapters"
6
+ title: "Portable SSOT core with repo-specific evidence adapters"
11
7
  status: "draft"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "The SSOT core contract governs and validates the registry graph. Repository-specific evidence generation is implemented outside the core (or through adapters) per repository."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "Portable SSOT core with repo-specific evidence adapters"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ The SSOT core contract governs and validates the registry graph. Repository-specific evidence generation is implemented outside the core (or through adapters) per repository.
@@ -1,3 +1,18 @@
1
+ schema_version: "0.7.0"
2
+ kind: "adr"
3
+ id: "adr:0612"
4
+ number: 612
5
+ slug: "ssot-path-and-filename-length-limits"
6
+ title: "Enforce max path and filename lengths under `.ssot`"
7
+ status: "draft"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "Files under `.ssot` MUST respect these limits:"
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
1
16
  body: |-
2
17
  Files under `.ssot` MUST respect these limits:
3
18
 
@@ -5,18 +20,3 @@ body: |-
5
20
  - Maximum filename length: **120** characters.
6
21
 
7
22
  Validation fails when either limit is exceeded.
8
- decision_date: null
9
- id: "adr:0612"
10
- kind: "adr"
11
- number: 612
12
- origin: "ssot-origin"
13
- references: []
14
- schema_version: "0.1.0"
15
- slug: "ssot-path-and-filename-length-limits"
16
- status: "draft"
17
- status_notes: []
18
- summary: "Files under `.ssot` MUST respect these limits:"
19
- superseded_by: []
20
- supersedes: []
21
- tags: []
22
- title: "Enforce max path and filename lengths under `.ssot`"
@@ -1,3 +1,18 @@
1
+ schema_version: "0.7.0"
2
+ kind: "adr"
3
+ id: "adr:0613"
4
+ number: 613
5
+ slug: "profiles-as-reusable-feature-bundles"
6
+ title: "Profiles are reusable feature bundles with derived pass status"
7
+ status: "accepted"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "The registry needed an entity between atomic features and release boundaries:"
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
1
16
  body: |-
2
17
  ## Context
3
18
 
@@ -24,18 +39,3 @@ body: |-
24
39
  1. feature `plan.target_claim_tier`,
25
40
  2. profile `claim_tier`,
26
41
  3. no tier => failing evaluation.
27
- decision_date: null
28
- id: "adr:0613"
29
- kind: "adr"
30
- number: 613
31
- origin: "ssot-origin"
32
- references: []
33
- schema_version: "0.1.0"
34
- slug: "profiles-as-reusable-feature-bundles"
35
- status: "accepted"
36
- status_notes: []
37
- summary: "The registry needed an entity between atomic features and release boundaries:"
38
- superseded_by: []
39
- supersedes: []
40
- tags: []
41
- title: "Profiles are reusable feature bundles with derived pass status"
@@ -1,17 +1,17 @@
1
- body: |-
2
- SPEC documents own typed ADR references. Features continue to reference SPECs only. Feature-to-ADR visibility is derived transitively through feature.spec_ids -> spec.adr_ids. This is a breaking schema-model change that requires a schema_version bump and migration support.
3
- decision_date: null
4
- id: "adr:0614"
1
+ schema_version: "0.7.0"
5
2
  kind: "adr"
3
+ id: "adr:0614"
6
4
  number: 614
7
- origin: "ssot-origin"
8
- references: []
9
- schema_version: "0.2.0"
10
5
  slug: "specs-own-typed-adr-links"
6
+ title: "SPECs own typed ADR links"
11
7
  status: "accepted"
12
- status_notes: []
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
13
11
  summary: "SPEC documents own typed ADR references. Features continue to reference SPECs only. Feature-to-ADR visibility is derived transitively through feature.spec_ids -> spec.adr_ids. This is a breaking schema-model change that requires a schema_version bump and migration support."
14
- superseded_by: []
15
12
  supersedes: []
16
- tags: []
17
- title: "SPECs own typed ADR links"
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ SPEC documents own typed ADR references. Features continue to reference SPECs only. Feature-to-ADR visibility is derived transitively through feature.spec_ids -> spec.adr_ids. This is a breaking schema-model change that requires a schema_version bump and migration support.
@@ -1,3 +1,18 @@
1
+ schema_version: "0.7.0"
2
+ kind: "adr"
3
+ id: "adr:0615"
4
+ number: 615
5
+ slug: "downstream-assurance-language-ceilings"
6
+ title: "Downstream assurance-language ceilings for feature target claim tiers"
7
+ status: "accepted"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "SSOT downstream repositories use feature target claim tiers, linked claims, tests, evidence, and tier gates to describe what a system can responsibly claim about a feature. The shared `T0` through `T4` tiers describe assurance strength, but downstream reports, release notes, README content, generated summaries, and certification artifacts also need a common language ceiling so weakly evidenced features are not described with stronger assurance language than their proof chains support."
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
1
16
  body: |-
2
17
  ## Context
3
18
 
@@ -45,18 +60,3 @@ body: |-
45
60
  Downstream projects may adopt stricter vocabulary, additional review gates, or domain-specific phrasing, but they must not permit stronger assurance wording than the feature's passing proof chain supports.
46
61
 
47
62
  Reviewers and automation should treat over-strong assurance language as a policy defect even when the underlying feature is implemented.
48
- decision_date: null
49
- id: "adr:0615"
50
- kind: "adr"
51
- number: 615
52
- origin: "ssot-origin"
53
- references: []
54
- schema_version: "0.2.0"
55
- slug: "downstream-assurance-language-ceilings"
56
- status: "accepted"
57
- status_notes: []
58
- summary: "SSOT downstream repositories use feature target claim tiers, linked claims, tests, evidence, and tier gates to control assurance language ceilings."
59
- superseded_by: []
60
- supersedes: []
61
- tags: []
62
- title: "Downstream assurance-language ceilings for feature target claim tiers"