ssot-contracts 0.2.17.dev2__tar.gz → 0.2.18.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 (92) hide show
  1. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/PKG-INFO +7 -2
  2. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/README.md +4 -0
  3. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/pyproject.toml +3 -2
  4. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/contract_data.py +2 -1
  5. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/enums.py +1 -0
  6. ssot_contracts-0.2.18.dev1/src/ssot_contracts/schema/registry.schema.json +1 -0
  7. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +33 -0
  8. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +62 -0
  9. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +6 -2
  10. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml +44 -0
  11. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml +31 -0
  12. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/manifest.json +39 -3
  13. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/registry.full.json +1 -0
  14. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/registry.minimal.json +1 -1
  15. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +47 -0
  16. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +33 -0
  17. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +12 -1
  18. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +4 -1
  19. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +16 -1
  20. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml +92 -0
  21. ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml +54 -0
  22. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/manifest.json +66 -10
  23. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/PKG-INFO +7 -2
  24. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +4 -0
  25. ssot_contracts-0.2.17.dev2/src/ssot_contracts/schema/registry.schema.json +0 -1
  26. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -17
  27. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -62
  28. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/registry.full.json +0 -1
  29. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -24
  30. ssot_contracts-0.2.17.dev2/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -26
  31. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/setup.cfg +0 -0
  32. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/__init__.py +0 -0
  33. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
  34. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
  35. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
  36. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
  37. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
  38. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
  39. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
  40. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
  41. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
  42. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
  43. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
  44. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
  45. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
  46. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
  47. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
  48. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
  49. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -0
  50. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
  51. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
  52. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
  53. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
  54. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
  55. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
  56. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
  57. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
  58. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
  59. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
  60. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
  61. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
  62. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +0 -0
  63. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +0 -0
  64. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +0 -0
  65. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +0 -0
  66. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +0 -0
  67. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +0 -0
  68. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
  69. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +0 -0
  70. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +0 -0
  71. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
  72. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
  73. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
  74. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
  75. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +0 -0
  76. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
  77. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +0 -0
  78. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
  79. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
  80. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
  81. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +0 -0
  82. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
  83. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +0 -0
  84. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +0 -0
  85. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +0 -0
  86. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +0 -0
  87. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +0 -0
  88. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +0 -0
  89. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
  90. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
  91. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
  92. {ssot_contracts-0.2.17.dev2 → ssot_contracts-0.2.18.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.17.dev2
3
+ Version: 0.2.18.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
@@ -19,13 +19,14 @@ Classifier: Programming Language :: Python :: 3.10
19
19
  Classifier: Programming Language :: Python :: 3.11
20
20
  Classifier: Programming Language :: Python :: 3.12
21
21
  Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
22
23
  Classifier: Topic :: File Formats :: JSON
23
24
  Classifier: Topic :: File Formats :: JSON :: JSON Schema
24
25
  Classifier: Topic :: Software Development :: Documentation
25
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
27
  Classifier: Topic :: Software Development :: Quality Assurance
27
28
  Classifier: Topic :: Utilities
28
- Requires-Python: <3.14,>=3.10
29
+ Requires-Python: <3.15,>=3.10
29
30
  Description-Content-Type: text/markdown
30
31
  Requires-Dist: tomli>=2.0.1; python_version < "3.11"
31
32
 
@@ -39,6 +40,10 @@ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
39
40
  <a href="https://pypi.org/project/ssot-contracts/"><img src="https://img.shields.io/pypi/pyversions/ssot-contracts?label=Python" alt="Supported Python versions" /></a>
40
41
  <a href="https://pepy.tech/project/ssot-contracts"><img src="https://static.pepy.tech/badge/ssot-contracts" alt="Downloads" /></a>
41
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
+ <!-- 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" />
46
+ <!-- ssot-schema-badges:end -->
42
47
  </div>
43
48
 
44
49
  `ssot-contracts` is the canonical artifact package for SSOT.
@@ -8,6 +8,10 @@
8
8
  <a href="https://pypi.org/project/ssot-contracts/"><img src="https://img.shields.io/pypi/pyversions/ssot-contracts?label=Python" alt="Supported Python versions" /></a>
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
+ <!-- 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" />
14
+ <!-- ssot-schema-badges:end -->
11
15
  </div>
12
16
 
13
17
  `ssot-contracts` is the canonical artifact package for SSOT.
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssot-contracts"
7
- version = "0.2.17.dev2"
7
+ version = "0.2.18.dev1"
8
8
  description = "Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT."
9
9
  readme = "README.md"
10
- requires-python = ">=3.10,<3.14"
10
+ requires-python = ">=3.10,<3.15"
11
11
  license = "Apache-2.0"
12
12
  authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
13
13
  dependencies = ["tomli>=2.0.1; python_version < '3.11'"]
@@ -24,6 +24,7 @@ classifiers = [
24
24
  "Programming Language :: Python :: 3.11",
25
25
  "Programming Language :: Python :: 3.12",
26
26
  "Programming Language :: Python :: 3.13",
27
+ "Programming Language :: Python :: 3.14",
27
28
  "Topic :: File Formats :: JSON",
28
29
  "Topic :: File Formats :: JSON :: JSON Schema",
29
30
  "Topic :: Software Development :: Documentation",
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  CONTRACT_DATA = {
4
- "schema_version": "0.4.0",
4
+ "schema_version": "0.6.0",
5
5
  "output_formats": ["json", "csv", "df", "yaml", "toml"],
6
6
  "entity_sections": [
7
7
  {"key": "features", "label": "Features"},
@@ -72,6 +72,7 @@ CONTRACT_DATA = {
72
72
  "severities": ["low", "medium", "high", "critical"],
73
73
  "document_statuses": ["draft", "in_review", "accepted", "rejected", "superseded", "withdrawn", "retired"],
74
74
  "spec_kinds": ["normative", "operational", "governance", "local-policy"],
75
+ "assurance_origins": ["ssot-core", "ssot-origin", "extension-pack", "repo-local"],
75
76
  },
76
77
  "document_contract": {
77
78
  "kinds": ["adr", "spec"],
@@ -23,3 +23,4 @@ RELEASE_STATUSES = set(CONTRACT_DATA["choice_sets"]["release_statuses"])
23
23
  SEVERITIES = set(CONTRACT_DATA["choice_sets"]["severities"])
24
24
  DOCUMENT_STATUSES = tuple(CONTRACT_DATA["choice_sets"]["document_statuses"])
25
25
  SPEC_KINDS = set(CONTRACT_DATA["choice_sets"]["spec_kinds"])
26
+ ASSURANCE_ORIGINS = set(CONTRACT_DATA["choice_sets"]["assurance_origins"])
@@ -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"},"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"],"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.6.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,33 @@
1
+ body: |-
2
+ ## Context
3
+
4
+ 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.
5
+
6
+ ## Decision
7
+
8
+ Claim status expresses lifecycle progression. Claim tier expresses assurance strength.
9
+
10
+ Status values such as `asserted`, `evidenced`, `certified`, `promoted`, and `published` indicate where the claim sits in the registry workflow. They do not authorize stronger assurance language or a higher claim tier.
11
+
12
+ Tier values `T0` through `T4` indicate what kind of proof supports the claim. A claim may only be treated as valid at a requested tier when the applicable claim tier gate passes.
13
+
14
+ ## Consequences
15
+
16
+ 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
+
18
+ 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"
@@ -0,0 +1,62 @@
1
+ body: |-
2
+ ## Context
3
+
4
+ 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.
5
+
6
+ This ADR is an `ssot-origin` decision. It is intended to apply to downstream repositories that synchronize and conform to SSOT origin documents, not only to the `ssot-registry` package repository.
7
+
8
+ ## Decision
9
+
10
+ Downstream SSOT repositories must treat each feature's effective target claim tier as the ceiling for assurance language used in SSOT-controlled outputs. A feature may be described with language from its effective tier or any weaker tier. It must not be described with stronger language unless a linked claim passes claim-closure checks and the applicable claim tier gate at the stronger tier.
11
+
12
+ The effective tier is resolved by the applicable evaluation policy. For direct feature evaluation, use `feature.plan.target_claim_tier`. For profile evaluation, use the feature target tier when present, otherwise the profile claim tier when the profile policy permits that fallback. If no effective tier can be resolved, downstream tooling must fail closed and must not emit assurance claims stronger than inventory-level language.
13
+
14
+ Acceptable language by tier:
15
+
16
+ | Tier | Assurance ceiling | Acceptable claims language |
17
+ |---|---|---|
18
+ | `T0` | Declared / Inventory | declared, tracked, intended, planned, in scope, inventoried |
19
+ | `T1` | Project Verified | project-verified, directly verified, verified by repeatable project-controlled tests, backed by project evidence |
20
+ | `T2` | Robustly Project Verified | robustly project-verified, verified across edge cases, verified across failure modes, verified across declared robustness dimensions |
21
+ | `T3` | Release Certified | release-certified, release-grade verified, certified for a named release, certified for a frozen boundary or profile |
22
+ | `T4` | Externally Certified | externally certified, independently reviewed, third-party validated, externally attested, validated by externally authored tests |
23
+
24
+ Disallowed escalations:
25
+
26
+ - `T0` features must not be described as implemented, working, verified, tested, robustly verified, certified, or externally validated.
27
+ - `T1` features must not be described as robustly verified, release-certified, or externally certified.
28
+ - `T2` features must not be described as release-certified or externally certified.
29
+ - `T3` features must not be described as externally certified, independently reviewed, or externally attested unless `T4` evidence exists.
30
+
31
+ Canonical wording templates:
32
+
33
+ - `T0`: Feature `<id>` is declared in scope for `<capability>`.
34
+ - `T1`: Feature `<id>` is project-verified for direct behavior `<capability>` by repeatable project-controlled checks.
35
+ - `T2`: Feature `<id>` is robustly project-verified for `<capability>` across `<robustness-dimensions>`.
36
+ - `T3`: Feature `<id>` is release-certified for `<release-or-boundary-or-profile>` with passing certification gates.
37
+ - `T4`: Feature `<id>` is externally certified for `<capability>` by `<external-source-or-artifact>`.
38
+
39
+ Claim status remains orthogonal to claim tier. Status may describe lifecycle progress, but it does not authorize stronger assurance language. Evidence tier alignment, linked test status, feature target tier evaluation, and the applicable claim tier gate remain the enforcement mechanisms for whether stronger language is valid.
40
+
41
+ ## Consequences
42
+
43
+ Downstream generated summaries, READMEs, release notes, certification reports, review comments, and human-authored SSOT-controlled documentation must choose assurance language from the feature's effective tier or a weaker tier.
44
+
45
+ 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
+
47
+ 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"
@@ -20,9 +20,13 @@ body: |-
20
20
 
21
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
22
 
23
+ Direct implementation and certification maturity are related but not identical. `T1` can establish direct implementation. `T2` can establish robust implementation. `T3` and `T4` establish release certification and external validation maturity unless a feature explicitly targets those tiers as its implementation bar.
24
+
25
+ Active weaker claims continue to block feature implementation until they are retired or superseded. A stronger linked claim cannot hide an active weaker required claim.
26
+
23
27
  ## Consequences
24
28
 
25
- Automated status synchronization must use all-pass claim precedence for feature implementation promotion.
29
+ Automated status synchronization must use all-pass claim precedence for feature implementation promotion and must respect claim tier gates when evaluating whether active claims satisfy a feature target tier.
26
30
 
27
31
  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
32
 
@@ -37,7 +41,7 @@ schema_version: "0.2.0"
37
41
  slug: "feature-implementation-claim-ceilings"
38
42
  status: "accepted"
39
43
  status_notes: []
40
- summary: "Feature implementation status, claim lifecycle status, and claim assurance tier are separate fields. That separation is useful, but it can overstate implementation when a feature has multiple active linked claims and only one of them satisfies the target tier."
44
+ summary: "Feature implementation status is capped by active required claims, while certification and external validation maturity remain distinct assurance layers."
41
45
  superseded_by: []
42
46
  supersedes: []
43
47
  tags: []
@@ -0,0 +1,44 @@
1
+ schema_version: "0.4.0"
2
+ kind: "adr"
3
+ id: "adr:0625"
4
+ number: 625
5
+ slug: "claim-tier-gates-and-core-promotion"
6
+ title: "Claim Tier Gates Govern Core Promotion"
7
+ status: "draft"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "Claim tiers are used by features, profiles, releases, reports, and downstream assurance language. If tiers can be raised by label alone, downstream outputs can overstate assurance even when tests and evidence exist."
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ ## Context
18
+
19
+ Claim tiers are used by features, profiles, releases, reports, and downstream assurance language. If tiers can be raised by label alone, downstream outputs can overstate assurance even when tests and evidence exist.
20
+
21
+ Optional orchestration extensions may later coordinate work, but tier semantics must be enforceable by core `ssot-registry` without those extensions.
22
+
23
+ ## Decision
24
+
25
+ Claim tier promotion is governed by machine-actionable tier gates in core `ssot-registry`.
26
+
27
+ `T1` means project-verified direct behavior. `T2` means robust project verification. `T3` means release, boundary, or profile certification. `T4` means external validation authority.
28
+
29
+ Claim closure remains separate from tier promotion. Closure checks whether linked features, tests, and evidence are coherent and passing. Tier gates check whether the requested assurance tier is semantically valid.
30
+
31
+ Operators may use an explicit override path where policy allows it, but bypasses must be visible in results or reports and must not silently convert weak evidence into stronger assurance.
32
+
33
+ ## Rejected Alternatives
34
+
35
+ - Treating evidence tier labels as sufficient for claim promotion.
36
+ - Treating `T2` as merely more repeatable `T1`.
37
+ - Treating `T3` as a `T2` claim with a release id.
38
+ - Treating `T4` as internal self-attestation.
39
+
40
+ ## Consequences
41
+
42
+ Core CLI, API, validation, and status synchronization can enforce assurance semantics before optional orchestration extensions exist.
43
+
44
+ Downstream repositories can rely on the tier ladder without adopting any optional orchestration model.
@@ -0,0 +1,31 @@
1
+ schema_version: "0.3.0"
2
+ kind: "adr"
3
+ id: "adr:0626"
4
+ number: 626
5
+ slug: "externally-authored-validation-as-t4"
6
+ title: "Externally Authored Validation Can Satisfy T4"
7
+ status: "draft"
8
+ origin: "ssot-origin"
9
+ decision_date: null
10
+ tags: []
11
+ summary: "T4 requires external validation authority; externally authored validation may count even when executed internally if provenance, scope, and result are recorded."
12
+ supersedes: []
13
+ superseded_by: []
14
+ status_notes: []
15
+ references: []
16
+ body: |-
17
+ ## Context
18
+
19
+ `T4` needs to represent external assurance rather than stronger project self-attestation. At the same time, many authoritative conformance suites, probe corpora, review artifacts, and certification checks can be executed locally while remaining externally authored or independently controlled.
20
+
21
+ ## Decision
22
+
23
+ `T4` requires external validation authority.
24
+
25
+ Externally authored validation artifacts may satisfy `T4` even when executed internally, provided the evidence records source provenance, authorship or control, validation scope, target claims or features, and result.
26
+
27
+ Using an external dependency internally is not `T4` by itself. Passing an externally authored conformance suite, receiving an independent review report, or carrying a third-party certification artifact can satisfy `T4` when the evidence contract is met.
28
+
29
+ ## Consequences
30
+
31
+ `T4` remains distinct from project-controlled robustness verification. Projects can still run external suites locally without losing the external-authority property, but they must preserve provenance and scope in evidence.
@@ -96,7 +96,7 @@
96
96
  "title": "Claim status and claim tier are orthogonal",
97
97
  "filename": "ADR-0605-claim-status-vs-tier.yaml",
98
98
  "target_path": ".ssot/adr/ADR-0605-claim-status-vs-tier.yaml",
99
- "sha256": "b3b857f45b059233beb40888af3fa394d87c889859f2a6503eae6be3ee67feda",
99
+ "sha256": "9201695116b283604dde141be2ee78425241309734f1d6b1997e2863a8f158ef",
100
100
  "origin": "ssot-origin",
101
101
  "reservation_owner": "ssot-origin",
102
102
  "immutable": true,
@@ -276,7 +276,7 @@
276
276
  "title": "Downstream assurance-language ceilings for feature target claim tiers",
277
277
  "filename": "ADR-0615-downstream-assurance-language-ceilings.yaml",
278
278
  "target_path": ".ssot/adr/ADR-0615-downstream-assurance-language-ceilings.yaml",
279
- "sha256": "0a4e25dda9cf29345da08b79ae913471db5a77bd1cfa4bb809cbfc64cd8fac84",
279
+ "sha256": "91ca6440ace4418fe7a422b457c1cecd78a65c3f93eee3a59bf7be031c5ecb0f",
280
280
  "origin": "ssot-origin",
281
281
  "reservation_owner": "ssot-origin",
282
282
  "immutable": true,
@@ -312,7 +312,7 @@
312
312
  "title": "Feature implementation is capped by active required claims",
313
313
  "filename": "ADR-0617-feature-implementation-claim-ceilings.yaml",
314
314
  "target_path": ".ssot/adr/ADR-0617-feature-implementation-claim-ceilings.yaml",
315
- "sha256": "0a11198e91bb7e4e6027fbb4824798d784e5b15a9e39a58464ff1fdcb219ced5",
315
+ "sha256": "e341894c626db60face039e41d2852b3c0f8422902de3b1793ce50f2698f06c5",
316
316
  "origin": "ssot-origin",
317
317
  "reservation_owner": "ssot-origin",
318
318
  "immutable": true,
@@ -430,5 +430,41 @@
430
430
  "supersedes": [],
431
431
  "superseded_by": [],
432
432
  "status_notes": []
433
+ },
434
+ {
435
+ "id": "adr:0625",
436
+ "number": 625,
437
+ "slug": "claim-tier-gates-and-core-promotion",
438
+ "title": "Claim Tier Gates Govern Core Promotion",
439
+ "filename": "ADR-0625-claim-tier-gates-and-core-promotion.yaml",
440
+ "target_path": ".ssot/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml",
441
+ "sha256": "3042cd4caa2403af4d32dfa6875f8ce6c53d2edc0527015f0225a34495e272ec",
442
+ "origin": "ssot-origin",
443
+ "reservation_owner": "ssot-origin",
444
+ "immutable": true,
445
+ "minimum_schema_version": "0.4.0",
446
+ "introduced_in": "0.2.10",
447
+ "status": "draft",
448
+ "supersedes": [],
449
+ "superseded_by": [],
450
+ "status_notes": []
451
+ },
452
+ {
453
+ "id": "adr:0626",
454
+ "number": 626,
455
+ "slug": "externally-authored-validation-as-t4",
456
+ "title": "Externally Authored Validation Can Satisfy T4",
457
+ "filename": "ADR-0626-externally-authored-validation-as-t4.yaml",
458
+ "target_path": ".ssot/adr/ADR-0626-externally-authored-validation-as-t4.yaml",
459
+ "sha256": "df9a983ccd5aedcd6284caa0ec338f0a888c23eab221bb722d88005848a0d2d5",
460
+ "origin": "ssot-origin",
461
+ "reservation_owner": "ssot-origin",
462
+ "immutable": true,
463
+ "minimum_schema_version": "0.4.0",
464
+ "introduced_in": "0.2.10",
465
+ "status": "draft",
466
+ "supersedes": [],
467
+ "superseded_by": [],
468
+ "status_notes": []
433
469
  }
434
470
  ]
@@ -0,0 +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":[{"depends_on_claim_ids":[],"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","origin":"repo-local","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","origin":"repo-local","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"},"origin":"repo-local","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.6.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","origin":"repo-local","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.4.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.6.0","specs":[],"tests":[],"tooling":{"initialized_with_version":"0.2.1","last_upgraded_from_version":"0.2.1","ssot_registry_version":"0.2.1"}}
@@ -0,0 +1,47 @@
1
+ adr_ids:
2
+ - "adr:0605"
3
+ - "adr:0625"
4
+ body: |-
5
+ ## Overview
6
+
7
+ Claim tiers describe assurance strength. They do not describe lifecycle status. Claim lifecycle status remains governed by claim statuses; tier promotion is governed by the tier semantics below and by the claim tier gates defined in `SPEC-0625`.
8
+
9
+ ## Supported Tiers
10
+
11
+ - `T0` Declared / Inventory: the claim is tracked, intended, planned, scoped, or inventoried. It does not assert working behavior.
12
+ - `T1` Project Verified: the claim's direct expected behavior is implemented and verified by repeatable project-controlled tests and evidence.
13
+ - `T2` Robustly Project Verified: the claim satisfies `T1` and is additionally verified across declared robustness dimensions such as negative cases, edge cases, state variation, concurrency, compatibility, security abuse cases, failure recovery, property or fuzz checks, performance envelopes, or regression corpora.
14
+ - `T3` Release Certified: the claim satisfies the configured lower-tier requirements and is certified inside a governed release, frozen boundary, or profile scope.
15
+ - `T4` Externally Certified: the claim is validated by an external, independent, or third-party authority. External dependency usage alone is not `T4`.
16
+
17
+ ## Difference Ladder
18
+
19
+ - `T0`: tracked.
20
+ - `T1`: directly works.
21
+ - `T2`: robustly works.
22
+ - `T3`: release certified.
23
+ - `T4`: externally certified.
24
+
25
+ ## Non-Overlap Rules
26
+
27
+ - `T0` SHALL NOT satisfy implementation.
28
+ - `T1` SHALL NOT be described as robust verification.
29
+ - `T2` SHALL NOT be described as release certification.
30
+ - `T3` SHALL NOT be described as external certification.
31
+ - `T4` SHALL require external validation authority, not only internally authored self-attestation.
32
+ decision_date: null
33
+ id: "spc:0605"
34
+ kind: "spec"
35
+ number: 605
36
+ origin: "ssot-origin"
37
+ references: []
38
+ schema_version: "0.1.0"
39
+ slug: "claim-tiers"
40
+ spec_kind: "normative"
41
+ status: "draft"
42
+ status_notes: []
43
+ summary: "Claim tiers define the assurance ladder from declared inventory through direct project verification, robust project verification, release certification, and external certification."
44
+ superseded_by: []
45
+ supersedes: []
46
+ tags: []
47
+ title: "Claim tiers"
@@ -0,0 +1,33 @@
1
+ adr_ids:
2
+ - "adr:0608"
3
+ - "adr:0625"
4
+ body: |-
5
+ The system enforces:
6
+ - claim closure guards
7
+ - claim tier promotion gates
8
+ - certification gates
9
+ - promotion gates
10
+ - publication fences
11
+ - lifecycle guards
12
+ - boundary freezing
13
+ - release-blocking issue and risk fences
14
+
15
+ Claim tier promotion gates are a first-class gate family. They determine whether a claim may be treated as valid at `T1`, `T2`, `T3`, or `T4`; claim closure guards only determine whether linked support is coherent and passing.
16
+
17
+ `SPEC-0625` defines the machine-actionable claim tier gate contract. `SPEC-0626` defines the external validation evidence contract used by `T4`.
18
+ decision_date: null
19
+ id: "spc:0608"
20
+ kind: "spec"
21
+ number: 608
22
+ origin: "ssot-origin"
23
+ references: []
24
+ schema_version: "0.1.0"
25
+ slug: "gates-and-fences"
26
+ spec_kind: "normative"
27
+ status: "draft"
28
+ status_notes: []
29
+ summary: "The system enforces claim closure, claim tier, certification, promotion, publication, lifecycle, boundary, issue, and risk gates."
30
+ superseded_by: []
31
+ supersedes: []
32
+ tags: []
33
+ title: "Gates and fences"
@@ -1,5 +1,6 @@
1
1
  adr_ids:
2
2
  - "adr:0617"
3
+ - "adr:0625"
3
4
  body: |-
4
5
  ## Overview
5
6
 
@@ -26,6 +27,16 @@ body: |-
26
27
 
27
28
  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
 
30
+ ## Tier Targets
31
+
32
+ `T1` claims can satisfy direct implementation targets when their direct project verification gates pass.
33
+
34
+ `T2` claims can satisfy robust implementation targets, including security-sensitive, compatibility-sensitive, concurrency-sensitive, or failure-mode-sensitive features, when their robustness gates pass.
35
+
36
+ `T3` and `T4` normally represent certification or validation maturity above implementation status. They SHALL be required for implementation only when the feature explicitly sets `plan.target_claim_tier` to `T3` or `T4`.
37
+
38
+ A feature may be implemented at `T1` or `T2` and later gain `T3` or `T4` assurance through release certification or external validation without changing the meaning of implementation status.
39
+
29
40
  ## Validation
30
41
 
31
42
  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.
@@ -46,7 +57,7 @@ slug: "feature-implementation-claim-ceilings"
46
57
  spec_kind: "normative"
47
58
  status: "accepted"
48
59
  status_notes: []
49
- summary: "Feature implementation status SHALL be derived and validated through active required claim ceilings."
60
+ summary: "Feature implementation status SHALL be derived and validated through active required claim ceilings and applicable tier gates."
50
61
  superseded_by: []
51
62
  supersedes: []
52
63
  tags: []
@@ -8,7 +8,7 @@ status: "draft"
8
8
  origin: "ssot-origin"
9
9
  decision_date: null
10
10
  tags: []
11
- summary: "Draft candidate scope."
11
+ summary: "Draft candidate scope for local release assurance artifacts, including their use as T3 release-certification inputs."
12
12
  supersedes: []
13
13
  superseded_by: []
14
14
  status_notes:
@@ -26,6 +26,8 @@ body: |-
26
26
 
27
27
  This SPEC defines the exploratory local release assurance scope. The candidate surface includes governed source snapshots, deterministic root hashes, local evidence bundles, output artifact manifests, local verification reports, tamper detection, and release gate integration.
28
28
 
29
+ Local release assurance artifacts MAY be configured as `T3` release-certification inputs. A `T3` claim is not merely `T2` evidence attached to a release id; it must be covered by release, boundary, or profile certification scope and pass the configured release certification guard.
30
+
29
31
  ## Out Of Scope
30
32
 
31
33
  Mandatory CUE, Bazel, Nix, Sigstore, Cosign, Rekor, Docker-only artifact handling, network services, and required external build systems are out of scope. Optional adapters may be proposed separately later.
@@ -36,3 +38,4 @@ body: |-
36
38
  spec_kind: "governance"
37
39
  adr_ids:
38
40
  - "adr:0618"
41
+ - "adr:0625"