ssot-contracts 0.2.14.dev1__tar.gz → 0.2.15.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.
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/PKG-INFO +4 -5
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/README.md +3 -4
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/pyproject.toml +3 -3
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/contract_data.py +1 -1
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/registry.schema.json +1 -1
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/schema/release.snapshot.schema.json +1 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +32 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +22 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +41 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +17 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +62 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +47 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/adr/manifest.json +51 -51
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/registry.full.json +1 -1
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/registry.minimal.json +1 -1
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +67 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +54 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +31 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +25 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +29 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +24 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +25 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +39 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +26 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +34 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +26 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +27 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +53 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +37 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +71 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +20 -0
- ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +51 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/specs/manifest.json +51 -51
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts.egg-info/PKG-INFO +4 -5
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +34 -34
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/schema/release.snapshot.schema.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0601-cli.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0612-python-api.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.json +0 -1
- ssot_contracts-0.2.14.dev1/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.json +0 -1
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/setup.cfg +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/python/enums.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
- {ssot_contracts-0.2.14.dev1 → ssot_contracts-0.2.15.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.
|
|
3
|
+
Version: 0.2.15.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
|
|
@@ -58,7 +58,7 @@ Use `ssot-contracts` when you want:
|
|
|
58
58
|
|
|
59
59
|
- packaged schemas and templates without the full CLI
|
|
60
60
|
- a stable place to load SSOT manifests and contract metadata from Python
|
|
61
|
-
- the artifact layer consumed by [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), and [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
61
|
+
- the artifact layer consumed by [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), and [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
62
62
|
|
|
63
63
|
Use another package when you want:
|
|
64
64
|
|
|
@@ -136,7 +136,7 @@ Read packaged document bodies:
|
|
|
136
136
|
```python
|
|
137
137
|
from ssot_contracts import read_packaged_document_text
|
|
138
138
|
|
|
139
|
-
text = read_packaged_document_text("adr", "ADR-0600-canonical-json-registry.
|
|
139
|
+
text = read_packaged_document_text("adr", "ADR-0600-canonical-json-registry.yaml")
|
|
140
140
|
print(text.splitlines()[0])
|
|
141
141
|
```
|
|
142
142
|
|
|
@@ -155,7 +155,6 @@ These modules provide shared constants such as output formats, entity section la
|
|
|
155
155
|
|
|
156
156
|
- Package type: artifact and contract package
|
|
157
157
|
- Depends on: standard library only, plus `tomli` on Python earlier than 3.11
|
|
158
|
-
- Consumed by: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
158
|
+
- Consumed by: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
159
159
|
|
|
160
160
|
If you need the canonical packaged schemas and manifests, install this package. It is the lowest-level reusable contract layer in the workspace.
|
|
161
|
-
|
|
@@ -27,7 +27,7 @@ Use `ssot-contracts` when you want:
|
|
|
27
27
|
|
|
28
28
|
- packaged schemas and templates without the full CLI
|
|
29
29
|
- a stable place to load SSOT manifests and contract metadata from Python
|
|
30
|
-
- the artifact layer consumed by [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), and [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
30
|
+
- the artifact layer consumed by [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), and [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
31
31
|
|
|
32
32
|
Use another package when you want:
|
|
33
33
|
|
|
@@ -105,7 +105,7 @@ Read packaged document bodies:
|
|
|
105
105
|
```python
|
|
106
106
|
from ssot_contracts import read_packaged_document_text
|
|
107
107
|
|
|
108
|
-
text = read_packaged_document_text("adr", "ADR-0600-canonical-json-registry.
|
|
108
|
+
text = read_packaged_document_text("adr", "ADR-0600-canonical-json-registry.yaml")
|
|
109
109
|
print(text.splitlines()[0])
|
|
110
110
|
```
|
|
111
111
|
|
|
@@ -124,7 +124,6 @@ These modules provide shared constants such as output formats, entity section la
|
|
|
124
124
|
|
|
125
125
|
- Package type: artifact and contract package
|
|
126
126
|
- Depends on: standard library only, plus `tomli` on Python earlier than 3.11
|
|
127
|
-
- Consumed by: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
127
|
+
- Consumed by: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-cli](https://pypi.org/project/ssot-cli/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
|
|
128
128
|
|
|
129
129
|
If you need the canonical packaged schemas and manifests, install this package. It is the lowest-level reusable contract layer in the workspace.
|
|
130
|
-
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ssot-contracts"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.15.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"
|
|
@@ -46,5 +46,5 @@ where = ["src"]
|
|
|
46
46
|
[tool.setuptools.package-data]
|
|
47
47
|
"ssot_contracts.schema" = ["*.json"]
|
|
48
48
|
"ssot_contracts.templates" = ["*.json"]
|
|
49
|
-
"ssot_contracts.templates.adr" = ["*.json"]
|
|
50
|
-
"ssot_contracts.templates.specs" = ["*.json"]
|
|
49
|
+
"ssot_contracts.templates.adr" = ["*.json", "*.yaml"]
|
|
50
|
+
"ssot_contracts.templates.specs" = ["*.json", "*.yaml"]
|
|
@@ -1 +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","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"},"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","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"},"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"},"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.1.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
|
+
{"$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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$id":"https://example.invalid/ssot-registry/release.snapshot.schema.json","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"boundaries":{"items":{"type":"object"},"type":"array"},"boundary":{"type":["object","null"]},"claims":{"items":{"type":"object"},"type":"array"},"evidence":{"items":{"type":"object"},"type":"array"},"features":{"items":{"type":"object"},"type":"array"},"file_hashes":{"type":"object"},"generated_at":{"type":"string"},"kind":{"const":"release_snapshot"},"profile_evaluations":{"items":{"type":"object"},"type":"array"},"profiles":{"items":{"type":"object"},"type":"array"},"registry_path":{"type":"string"},"registry_sha256":{"type":"string"},"release":{"properties":{"boundary_id":{"type":"string"},"boundary_ids":{"items":{"type":"string"},"type":"array"},"claim_ids":{"items":{"type":"string"},"type":"array"},"evidence_ids":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"status":{"type":"string"},"version":{"type":"string"}},"required":["id","version","status","boundary_id","boundary_ids","claim_ids","evidence_ids"],"type":"object"},"schema_version":{"type":"integer"},"summary":{"properties":{"boundary_count":{"type":"integer"},"boundary_id":{"type":["string","null"]},"boundary_ids":{"items":{"type":"string"},"type":"array"},"claim_count":{"type":"integer"},"evidence_count":{"type":"integer"},"feature_count":{"type":"integer"},"profile_count":{"type":"integer"},"release_id":{"type":"string"},"status":{"type":"string"},"test_count":{"type":"integer"},"version":{"type":"string"}},"required":["release_id","version","boundary_id","boundary_ids","boundary_count","feature_count","profile_count","claim_count","test_count","evidence_count","status"],"type":"object"},"tests":{"items":{"type":"object"},"type":"array"}},"required":["schema_version","kind","generated_at","registry_path","registry_sha256","release","boundary","boundaries","features","profiles","profile_evaluations","claims","tests","evidence","file_hashes","summary"],"type":"object"}
|
ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
The only authored machine-readable source of truth is `.ssot/registry.json`.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0600"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 600
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "canonical-json-registry"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "The only authored machine-readable source of truth is `.ssot/registry.json`."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Canonical registry is a single JSON document"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Features are the only targetable implementation units. There is no separate `targets[]` section.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0601"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 601
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "features-are-targetable-units"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Features are the only targetable implementation units. There is no separate `targets[]` section."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Features are the targetable units"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Issues and tickets can be planned as current, next, future, explicit, backlog, or out-of-bounds, but they are not substitute targets for features.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0602"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 602
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "issues-are-plannable-work-items"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Issues and tickets can be planned as current, next, future, explicit, backlog, or out-of-bounds, but they are not substitute targets for features."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Issues are plannable work items"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
The canonical registry is entity-centric JSON with explicit references. A graph export is derived from it.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0603"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 603
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "entity-centric-registry-derived-graph"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "The canonical registry is entity-centric JSON with explicit references. A graph export is derived from it."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Entity-centric registry with a derived graph export"
|
ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Every first-class entity uses a normalized prefixed ID.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0604"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 604
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "normalized-prefixed-ids"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Every first-class entity uses a normalized prefixed ID."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Normalized prefixed IDs"
|
ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Claim status expresses lifecycle progression. Claim tier expresses assurance strength.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0605"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 605
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "claim-status-vs-tier"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Claim status expresses lifecycle progression. Claim tier expresses assurance strength."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Claim status and claim tier are orthogonal"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
`implementation_status` and `lifecycle.stage` are distinct fields.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0606"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 606
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "feature-implementation-vs-lifecycle"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "`implementation_status` and `lifecycle.stage` are distinct fields."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Feature implementation state is separate from lifecycle state"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Frozen boundaries and promoted/published releases emit immutable snapshots with hashes.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0607"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 607
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "immutable-boundary-and-release-snapshots"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Frozen boundaries and promoted/published releases emit immutable snapshots with hashes."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Immutable boundary and release snapshots"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Validation, certification, promotion, publication, and lifecycle transitions refuse to proceed on guard violations.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0608"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 608
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "fail-closed-guards"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Validation, certification, promotion, publication, and lifecycle transitions refuse to proceed on guard violations."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Fail-closed guards"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
This is an `ssot-origin` ADR copied into downstream SSOT repositories.
|
|
3
|
+
|
|
4
|
+
In an operator repository, canonical authored SSOT content lives under `.ssot/`:
|
|
5
|
+
|
|
6
|
+
- `.ssot/registry.json`,
|
|
7
|
+
- repo-local ADRs under `.ssot/adr/`,
|
|
8
|
+
- repo-local specs under `.ssot/specs/`.
|
|
9
|
+
|
|
10
|
+
Packaged `ssot-origin` ADRs/specs provide baseline policy, but operators do not edit those synced copies directly.
|
|
11
|
+
|
|
12
|
+
Generated projections include:
|
|
13
|
+
|
|
14
|
+
- graph exports,
|
|
15
|
+
- reports and snapshots,
|
|
16
|
+
- rendered or exported representations such as CSV, YAML, TOML, DOT, PNG, and SVG,
|
|
17
|
+
- mirrored or regenerated documentation derived from the canonical SSOT content.
|
|
18
|
+
decision_date: null
|
|
19
|
+
id: "adr:0609"
|
|
20
|
+
kind: "adr"
|
|
21
|
+
number: 609
|
|
22
|
+
origin: "ssot-origin"
|
|
23
|
+
references: []
|
|
24
|
+
schema_version: "0.1.0"
|
|
25
|
+
slug: "generated-projections-are-non-canonical"
|
|
26
|
+
status: "draft"
|
|
27
|
+
status_notes: []
|
|
28
|
+
summary: "This is an `ssot-origin` ADR copied into downstream SSOT repositories."
|
|
29
|
+
superseded_by: []
|
|
30
|
+
supersedes: []
|
|
31
|
+
tags: []
|
|
32
|
+
title: "Generated projections are non-canonical"
|
ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Breaking schema changes increment `schema_version` and require migration.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0610"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 610
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "explicit-schema-versioning"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "Breaking schema changes increment `schema_version` and require migration."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Explicit schema versioning"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
The SSOT core contract governs and validates the registry graph. Repository-specific evidence generation is implemented outside the core (or through adapters) per repository.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0611"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 611
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.1.0"
|
|
10
|
+
slug: "portable-core-repo-specific-evidence-adapters"
|
|
11
|
+
status: "draft"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "The SSOT core contract governs and validates the registry graph. Repository-specific evidence generation is implemented outside the core (or through adapters) per repository."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "Portable SSOT core with repo-specific evidence adapters"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
Files under `.ssot` MUST respect these limits:
|
|
3
|
+
|
|
4
|
+
- Maximum relative path length: **240** characters.
|
|
5
|
+
- Maximum filename length: **120** characters.
|
|
6
|
+
|
|
7
|
+
Validation fails when either limit is exceeded.
|
|
8
|
+
decision_date: null
|
|
9
|
+
id: "adr:0612"
|
|
10
|
+
kind: "adr"
|
|
11
|
+
number: 612
|
|
12
|
+
origin: "ssot-origin"
|
|
13
|
+
references: []
|
|
14
|
+
schema_version: "0.1.0"
|
|
15
|
+
slug: "ssot-path-and-filename-length-limits"
|
|
16
|
+
status: "draft"
|
|
17
|
+
status_notes: []
|
|
18
|
+
summary: "Files under `.ssot` MUST respect these limits:"
|
|
19
|
+
superseded_by: []
|
|
20
|
+
supersedes: []
|
|
21
|
+
tags: []
|
|
22
|
+
title: "Enforce max path and filename lengths under `.ssot`"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
## Context
|
|
3
|
+
|
|
4
|
+
The registry needed an entity between atomic features and release boundaries:
|
|
5
|
+
|
|
6
|
+
- features are independently targetable,
|
|
7
|
+
- boundaries are release/freeze artifacts,
|
|
8
|
+
- releases certify a boundary scope.
|
|
9
|
+
|
|
10
|
+
Teams also need reusable capability bundles that can be composed and evaluated.
|
|
11
|
+
|
|
12
|
+
## Decision
|
|
13
|
+
|
|
14
|
+
Introduce a first-class `profiles` entity:
|
|
15
|
+
|
|
16
|
+
- profile rows bundle `feature_ids` and nested `profile_ids`,
|
|
17
|
+
- profile pass/fail is computed (never stored),
|
|
18
|
+
- feature pass still requires satisfying claims and guard checks,
|
|
19
|
+
- boundary scope may include both direct `feature_ids` and `profile_ids`,
|
|
20
|
+
- boundary feature scope is resolved dynamically at evaluation/reporting time.
|
|
21
|
+
|
|
22
|
+
Tier resolution is fail-closed:
|
|
23
|
+
|
|
24
|
+
1. feature `plan.target_claim_tier`,
|
|
25
|
+
2. profile `claim_tier`,
|
|
26
|
+
3. no tier => failing evaluation.
|
|
27
|
+
decision_date: null
|
|
28
|
+
id: "adr:0613"
|
|
29
|
+
kind: "adr"
|
|
30
|
+
number: 613
|
|
31
|
+
origin: "ssot-origin"
|
|
32
|
+
references: []
|
|
33
|
+
schema_version: "0.1.0"
|
|
34
|
+
slug: "profiles-as-reusable-feature-bundles"
|
|
35
|
+
status: "accepted"
|
|
36
|
+
status_notes: []
|
|
37
|
+
summary: "The registry needed an entity between atomic features and release boundaries:"
|
|
38
|
+
superseded_by: []
|
|
39
|
+
supersedes: []
|
|
40
|
+
tags: []
|
|
41
|
+
title: "Profiles are reusable feature bundles with derived pass status"
|
ssot_contracts-0.2.15.dev1/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
SPEC documents own typed ADR references. Features continue to reference SPECs only. Feature-to-ADR visibility is derived transitively through feature.spec_ids -> spec.adr_ids. This is a breaking schema-model change that requires a schema_version bump and migration support.
|
|
3
|
+
decision_date: null
|
|
4
|
+
id: "adr:0614"
|
|
5
|
+
kind: "adr"
|
|
6
|
+
number: 614
|
|
7
|
+
origin: "ssot-origin"
|
|
8
|
+
references: []
|
|
9
|
+
schema_version: "0.2.0"
|
|
10
|
+
slug: "specs-own-typed-adr-links"
|
|
11
|
+
status: "accepted"
|
|
12
|
+
status_notes: []
|
|
13
|
+
summary: "SPEC documents own typed ADR references. Features continue to reference SPECs only. Feature-to-ADR visibility is derived transitively through feature.spec_ids -> spec.adr_ids. This is a breaking schema-model change that requires a schema_version bump and migration support."
|
|
14
|
+
superseded_by: []
|
|
15
|
+
supersedes: []
|
|
16
|
+
tags: []
|
|
17
|
+
title: "SPECs own typed ADR links"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
body: |-
|
|
2
|
+
## Context
|
|
3
|
+
|
|
4
|
+
SSOT downstream repositories use feature target claim tiers, linked claims, tests, and evidence 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 at the stronger tier and the feature evaluation requires or accepts that 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 intent or inventory-level | declared, tracked, intended, planned, in scope, inventory-level support |
|
|
19
|
+
| `T1` | Maintainer-asserted with local evidence | maintainer-asserted, locally evidenced, supported by local evidence, observed in maintainer-run checks |
|
|
20
|
+
| `T2` | Reproducible project-controlled verification | reproducibly verified, project-verified, verified by project-controlled tests or CI, repeatably validated |
|
|
21
|
+
| `T3` | Release-grade certified claim | release-certified, release-grade verified, certified for a named release or frozen boundary |
|
|
22
|
+
| `T4` | Independently reviewed or externally attested claim | independently reviewed, externally attested, third-party validated, validated by a named external source or artifact |
|
|
23
|
+
|
|
24
|
+
Disallowed escalations:
|
|
25
|
+
|
|
26
|
+
- `T0` features must not be described as working, verified, tested, certified, or attested.
|
|
27
|
+
- `T1` features must not be described as reproducibly verified, release-certified, or independently reviewed.
|
|
28
|
+
- `T2` features must not be described as release-certified or independently reviewed.
|
|
29
|
+
- `T3` features must not be described as 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`: Maintainers assert that feature `<id>` supports `<capability>`, backed by local evidence `<evidence-id>`.
|
|
35
|
+
- `T2`: Feature `<id>` is reproducibly verified by project-controlled checks for `<capability>`.
|
|
36
|
+
- `T3`: Feature `<id>` is release-certified for `<release-or-boundary>` with passing claim closure at tier `T3` or higher.
|
|
37
|
+
- `T4`: Feature `<id>` is independently reviewed or externally attested for `<capability>` by `<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, and feature target tier evaluation 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, and evidence 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."
|
|
59
|
+
superseded_by: []
|
|
60
|
+
supersedes: []
|
|
61
|
+
tags: []
|
|
62
|
+
title: "Downstream assurance-language ceilings for feature target claim tiers"
|