ssot-contracts 0.2.16.dev1__tar.gz → 0.2.17.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 (73) hide show
  1. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/PKG-INFO +2 -2
  2. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/README.md +1 -1
  3. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/pyproject.toml +1 -1
  4. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/contract_data.py +1 -1
  5. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +1 -1
  6. ssot_contracts-0.2.17.dev1/src/ssot_contracts/schema/adr.schema.json +1 -0
  7. ssot_contracts-0.2.17.dev1/src/ssot_contracts/schema/registry.schema.json +1 -0
  8. ssot_contracts-0.2.17.dev1/src/ssot_contracts/schema/spec.schema.json +1 -0
  9. ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +44 -0
  10. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/manifest.json +18 -0
  11. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/registry.full.json +1 -1
  12. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/registry.minimal.json +1 -1
  13. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +8 -0
  14. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +8 -0
  15. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +2 -1
  16. ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +53 -0
  17. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/manifest.json +25 -3
  18. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts.egg-info/PKG-INFO +2 -2
  19. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +2 -0
  20. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/adr.schema.json +0 -1
  21. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/registry.schema.json +0 -1
  22. ssot_contracts-0.2.16.dev1/src/ssot_contracts/schema/spec.schema.json +0 -1
  23. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/setup.cfg +0 -0
  24. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/__init__.py +0 -0
  25. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
  26. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
  27. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
  28. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/python/enums.py +0 -0
  29. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
  30. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
  31. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
  32. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
  33. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
  34. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
  35. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
  36. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
  37. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
  38. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
  39. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -0
  40. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
  41. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
  42. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
  43. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -0
  44. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
  45. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
  46. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
  47. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
  48. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
  49. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
  50. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
  51. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
  52. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
  53. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -0
  54. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +0 -0
  55. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
  56. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +0 -0
  57. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
  58. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
  59. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
  60. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -0
  61. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
  62. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -0
  63. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
  64. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
  65. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
  66. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
  67. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +0 -0
  68. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
  69. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +0 -0
  70. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
  71. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
  72. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
  73. {ssot_contracts-0.2.16.dev1 → ssot_contracts-0.2.17.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.16.dev1
3
+ Version: 0.2.17.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
@@ -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.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.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"}
@@ -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 promotion is capped by active required linked claims; active T0 claims keep features below implemented."
41
+ superseded_by: []
42
+ supersedes: []
43
+ tags: []
44
+ title: "Feature implementation is capped by active required claims"
@@ -304,5 +304,23 @@
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": "1e21944c47759757773e66f5bbfaae8801a33bca966c69772d3a31543062078e",
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": []
307
325
  }
308
326
  ]
@@ -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`
@@ -7,6 +7,7 @@ body: |-
7
7
  ## Origin Model
8
8
 
9
9
  - `ssot-origin`: packaged contract docs synced from `ssot-registry` and immutable in operator repos.
10
+ - `extension-pack`: packaged external ADR/SPEC docs synced from trusted extension catalogs and immutable in operator repos.
10
11
  - `repo-local`: docs authored by your repository and editable locally.
11
12
  - `ssot-core`: upstream-only governance and not permitted in operator repositories.
12
13
 
@@ -15,6 +16,13 @@ body: |-
15
16
  - `1..599` is reserved for upstream `ssot-core` governance.
16
17
  - `600..999` is reserved for packaged `ssot-origin` docs.
17
18
  - `1000..4999` is assignable to `repo-local` docs.
19
+ - `extension-pack` docs SHALL use explicit catalog-owned reservations and SHALL NOT consume repo-local reservations by default.
20
+
21
+ ## Packaged Catalog Policy
22
+
23
+ - `ssot-origin` packaged docs are trusted built-in catalog content.
24
+ - `extension-pack` packaged docs are opt-in and trust-gated.
25
+ - Untrusted extension-pack catalogs SHALL fail closed during sync.
18
26
 
19
27
  ## Required Locations
20
28
 
@@ -5,7 +5,8 @@ body: |-
5
5
  - ADR files SHALL be stored under `.ssot/adr`.
6
6
  - SPEC files SHALL be stored under `.ssot/specs`.
7
7
  - `.ssot/registry.json` SHALL track ADR/SPEC metadata in top-level `adrs` and `specs` sections.
8
- - Synced packaged documents use `origin: ssot-origin` and are immutable.
8
+ - Synced official packaged documents use `origin: ssot-origin` and are immutable.
9
+ - Synced trusted external packaged documents use `origin: extension-pack` and are immutable.
9
10
  - Repository-authored documents use `origin: repo-local` and are mutable.
10
11
  - `origin: ssot-core` is upstream-only and is not valid in operator repositories.
11
12
  decision_date: null
@@ -0,0 +1,53 @@
1
+ adr_ids:
2
+ - "adr:0617"
3
+ body: |-
4
+ ## Overview
5
+
6
+ Feature implementation status SHALL be derived and validated through active required claim ceilings.
7
+
8
+ ## Active Required Claims
9
+
10
+ For feature implementation closure, active required claims are all linked `feature.claim_ids` whose claim status is not `retired`.
11
+
12
+ Until a first-class non-blocking claim role exists, every non-retired linked claim SHALL be treated as required for feature implementation closure.
13
+
14
+ ## Implementation Status Derivation
15
+
16
+ Automated status synchronization SHALL set a feature to `implemented` only when:
17
+
18
+ 1. the feature has at least one active required linked claim,
19
+ 2. every active required linked claim has a tier other than `T0`,
20
+ 3. every active required linked claim is at or above the feature's `plan.target_claim_tier` when that target is present,
21
+ 4. every active required linked claim has status `evidenced` or higher after claim synchronization,
22
+ 5. every linked test is `passing`,
23
+ 6. every required feature is `implemented`.
24
+
25
+ If any active required linked claim is `T0`, the feature SHALL NOT be synchronized to `implemented`; the highest synchronized status is `partial` unless all support is planned or placeholder-only.
26
+
27
+ If a feature has mixed active required claims and any one of them fails the closure requirements, the feature SHALL NOT be synchronized to `implemented`.
28
+
29
+ ## Validation
30
+
31
+ Registry validation SHALL reject a feature with `implementation_status: implemented` when any active required linked claim is `T0` or below the feature's target claim tier.
32
+
33
+ Claim lifecycle status normalization remains the responsibility of automated status synchronization.
34
+
35
+ ## Profile Evaluation
36
+
37
+ Profile and boundary-oriented feature evaluation SHALL use the same all-active-required-claims precedence. A feature with an active required `T0` claim SHALL fail feature-pass evaluation even if another linked claim is stronger.
38
+ decision_date: null
39
+ id: "spc:0617"
40
+ kind: "spec"
41
+ number: 617
42
+ origin: "ssot-origin"
43
+ references: []
44
+ schema_version: "0.2.0"
45
+ slug: "feature-implementation-claim-ceilings"
46
+ spec_kind: "normative"
47
+ status: "accepted"
48
+ status_notes: []
49
+ summary: "Feature implementation status is derived and validated through active required claim ceilings."
50
+ superseded_by: []
51
+ supersedes: []
52
+ tags: []
53
+ title: "Feature implementation claim ceilings"
@@ -6,7 +6,7 @@
6
6
  "title": "Registry core",
7
7
  "filename": "SPEC-0600-registry-core.yaml",
8
8
  "target_path": ".ssot/specs/SPEC-0600-registry-core.yaml",
9
- "sha256": "da939c4237f61e6c8b209bb53491b5021d3bfe57e23b8a5a477a4195575807d4",
9
+ "sha256": "2d3b4e58d718ecc89c17b757587ddce9ef7a6b96b200ae4bbd746196b21ba09f",
10
10
  "origin": "ssot-origin",
11
11
  "reservation_owner": "ssot-origin",
12
12
  "immutable": true,
@@ -139,7 +139,7 @@
139
139
  "title": "Repository policy",
140
140
  "filename": "SPEC-0607-repo-policy.yaml",
141
141
  "target_path": ".ssot/specs/SPEC-0607-repo-policy.yaml",
142
- "sha256": "ead1977983658e854ceafc06f8e9eff4785827ea387518e984ca585a9dab7814",
142
+ "sha256": "24dfb7e108a2182bf9884e325698034f989e683496287818deda273cf426cec5",
143
143
  "origin": "ssot-origin",
144
144
  "reservation_owner": "ssot-origin",
145
145
  "immutable": true,
@@ -196,7 +196,7 @@
196
196
  "title": "File tree",
197
197
  "filename": "SPEC-0610-file-tree.yaml",
198
198
  "target_path": ".ssot/specs/SPEC-0610-file-tree.yaml",
199
- "sha256": "4a575f660aecc6d5afee30ec4beec7ec8d983596eb7ac5516ba3db6792f5e0a5",
199
+ "sha256": "b1b00db672c7b5e5a2184fc3cb581dbc62f5994ad86efdd56c93facbc844a3cc",
200
200
  "origin": "ssot-origin",
201
201
  "reservation_owner": "ssot-origin",
202
202
  "immutable": true,
@@ -327,5 +327,27 @@
327
327
  "adr_ids": [
328
328
  "adr:0616"
329
329
  ]
330
+ },
331
+ {
332
+ "id": "spc:0617",
333
+ "number": 617,
334
+ "slug": "feature-implementation-claim-ceilings",
335
+ "title": "Feature implementation claim ceilings",
336
+ "filename": "SPEC-0617-feature-implementation-claim-ceilings.yaml",
337
+ "target_path": ".ssot/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml",
338
+ "sha256": "059fb567584a9ec0e05ef23cbf0affd61d7d86faa1fe0958f82b15119ab91b6f",
339
+ "origin": "ssot-origin",
340
+ "reservation_owner": "ssot-origin",
341
+ "immutable": true,
342
+ "minimum_schema_version": "0.2.0",
343
+ "introduced_in": "0.2.13",
344
+ "status": "accepted",
345
+ "supersedes": [],
346
+ "superseded_by": [],
347
+ "status_notes": [],
348
+ "kind": "normative",
349
+ "adr_ids": [
350
+ "adr:0617"
351
+ ]
330
352
  }
331
353
  ]
@@ -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.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
@@ -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
 
@@ -43,6 +43,7 @@ src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.y
43
43
  src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml
44
44
  src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml
45
45
  src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml
46
+ src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml
46
47
  src/ssot_contracts/templates/adr/__init__.py
47
48
  src/ssot_contracts/templates/adr/manifest.json
48
49
  src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml
@@ -62,5 +63,6 @@ src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml
62
63
  src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml
63
64
  src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml
64
65
  src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml
66
+ src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml
65
67
  src/ssot_contracts/templates/specs/__init__.py
66
68
  src/ssot_contracts/templates/specs/manifest.json
@@ -1 +0,0 @@
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","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"}
@@ -1 +0,0 @@
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","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":{"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":{"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":{"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":{"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":{"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":{"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":{"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","repo-local"]},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version","kind"],"type":"object"},"risk":{"additionalProperties":true,"properties":{"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","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":{"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.3.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 +0,0 @@
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","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"}