ssot-contracts 0.2.17.dev1__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.
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/PKG-INFO +7 -2
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/README.md +4 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/pyproject.toml +3 -2
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/contract_data.py +2 -1
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/enums.py +1 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/schema/registry.schema.json +1 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +33 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +62 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +1 -1
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +18 -14
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +35 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +35 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +35 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +44 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +41 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml +44 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml +31 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/manifest.json +148 -4
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/registry.full.json +1 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/registry.minimal.json +1 -1
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +32 -16
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +47 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +33 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +2 -1
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +1 -1
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +26 -15
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +41 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +39 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +39 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +39 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +55 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +82 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +132 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml +92 -0
- ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml +54 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/manifest.json +254 -9
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/PKG-INFO +7 -2
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +16 -0
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/schema/registry.schema.json +0 -1
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -17
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -62
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/registry.full.json +0 -1
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -24
- ssot_contracts-0.2.17.dev1/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -26
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/setup.cfg +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
- {ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
- {ssot_contracts-0.2.17.dev1 → 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|
{ssot_contracts-0.2.17.dev1 → ssot_contracts-0.2.18.dev1}/src/ssot_contracts/contract_data.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
CONTRACT_DATA = {
|
|
4
|
-
"schema_version": "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"}
|
ssot_contracts-0.2.18.dev1/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml
ADDED
|
@@ -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"
|
|
@@ -40,7 +40,7 @@ schema_version: "0.2.0"
|
|
|
40
40
|
slug: "out-of-bounds-implementation-disposition"
|
|
41
41
|
status: "accepted"
|
|
42
42
|
status_notes: []
|
|
43
|
-
summary: "
|
|
43
|
+
summary: "Feature implementation state, planning horizon, and lifecycle state are separate axes. That separation is useful, but it leaves an ambiguous case: a feature can be `out_of_bounds` while still being `partial` or `implemented` in the codebase."
|
|
44
44
|
superseded_by: []
|
|
45
45
|
supersedes: []
|
|
46
46
|
tags: []
|
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
body: |-
|
|
2
2
|
## Context
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
Feature implementation status, claim lifecycle status, and claim assurance tier are separate fields. That separation is useful, but it can overstate implementation when a feature has multiple active linked claims and only one of them satisfies the target tier.
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
`T0` is inventory-level assurance. A `T0` claim records declared intent, scope, or placeholder support; it does not prove working behavior. Therefore a feature with an active required `T0` claim must not be marked `implemented`.
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
## Decision
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
Feature implementation promotion is capped by active required linked claims.
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
All active linked claims on a feature are required for feature implementation closure. Retired claims are ignored. A stronger linked claim cannot override a weaker active required claim.
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
A feature may be marked `implemented` only when:
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
- linked tests pass,
|
|
17
17
|
- required features are implemented,
|
|
18
18
|
- every active required linked claim satisfies the feature's effective target tier,
|
|
19
19
|
- no active required linked claim is `T0`.
|
|
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
|
-
|
|
25
|
-
Automated status synchronization must use all-pass claim precedence for feature implementation promotion.
|
|
26
|
-
|
|
28
|
+
|
|
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.
|
|
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
|
+
|
|
29
33
|
Registries that need non-blocking explanatory claims must model that as a later governed schema capability. Until that exists, active linked claims are required closure inputs.
|
|
30
34
|
decision_date: null
|
|
31
35
|
id: "adr:0617"
|
|
@@ -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
|
|
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,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0618"
|
|
4
|
+
number: 618
|
|
5
|
+
slug: "local-release-assurance-remains-ssot-native"
|
|
6
|
+
title: "Local Release Assurance Remains SSOT Native"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This is a tentative proposal record, not an accepted implementation mandate."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:33:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This is a tentative proposal record, not an accepted implementation mandate.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
The registry already governs ADRs, SPECs, features, tests, claims, evidence, boundaries, releases, reports, and snapshots. We want to explore release-assurance capabilities without adding mandatory external services or build systems.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Keep local release assurance SSOT-native. Candidate capabilities must use existing registry data, local files, canonical JSON, SHA-256 hashes, validation reports, certification reports, and release gates. CUE, Bazel, Nix, Sigstore, Cosign, Rekor, Docker-only assumptions, network services, and mandatory external build tools are out of scope for the core proposal.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
The implementation can remain portable and dependency-light. Any future external integration must be optional and adapter-based, not part of the core assurance contract.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0619"
|
|
4
|
+
number: 619
|
|
5
|
+
slug: "content-addressed-governed-source-snapshots"
|
|
6
|
+
title: "Content Addressed Governed Source Snapshots"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This records an exploratory direction for later feature rows."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:34:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This records an exploratory direction for later feature rows.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
Current SSOT validation hashes ADR and SPEC document bodies and release snapshots hash selected linked test and evidence paths. That does not yet provide a release-scoped source-state root over governed files.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Represent governed source state as deterministic file hashes plus a canonical root hash over the governed file hash map. The default scope should be declared or governed paths, not the entire repository. Full-repo hashing may be offered only as explicit opt-in policy.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
Release verification can detect drift across governed source, tests, evidence, documents, and artifacts while avoiding local cache, virtual environment, build-output, and temp-file noise.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0620"
|
|
4
|
+
number: 620
|
|
5
|
+
slug: "local-evidence-bundles-are-derived-release-artifacts"
|
|
6
|
+
title: "Local Evidence Bundles Are Derived Release Artifacts"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Draft. This is a tentative proposal for future implementation."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Tentative local release assurance proposal; not accepted or implementation-bound."
|
|
18
|
+
at: "2026-05-08T07:34:02Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Status
|
|
22
|
+
|
|
23
|
+
Draft. This is a tentative proposal for future implementation.
|
|
24
|
+
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
Claims, tests, evidence rows, boundaries, and releases already form a proof chain. Operators still lack a single local artifact that bundles the release proof with source snapshot and artifact manifest references.
|
|
28
|
+
|
|
29
|
+
## Decision
|
|
30
|
+
|
|
31
|
+
Treat local evidence bundles as derived SSOT release artifacts. Bundles are generated from registry truth and linked files; they are not a second source of truth. They should be canonical JSON, locally hashable, locally verifiable, and safe to regenerate.
|
|
32
|
+
|
|
33
|
+
## Consequences
|
|
34
|
+
|
|
35
|
+
Verification can consume a portable local bundle while the registry remains authoritative. Bundle drift is detected through canonical hashing and release gates rather than external signatures.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0621"
|
|
4
|
+
number: 621
|
|
5
|
+
slug: "general-rules-of-interpretation"
|
|
6
|
+
title: "General rules of interpretation govern SSOT meaning"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "SSOT governance relies on authored ADRs, authored SPECs, registry entities, generated projections, CLI summaries, evidence artifacts, and repository documentation. Those surfaces are intentionally different, but the repository does not yet have a general rule set for resolving interpretation questions across them."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
SSOT governance relies on authored ADRs, authored SPECs, registry entities, generated projections, CLI summaries, evidence artifacts, and repository documentation. Those surfaces are intentionally different, but the repository does not yet have a general rule set for resolving interpretation questions across them.
|
|
20
|
+
|
|
21
|
+
Without a governed interpretation rule, readers and automation can over-weight generated views, treat draft proposals as binding, infer support from missing rows, or resolve ambiguous certification and release questions permissively.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
24
|
+
|
|
25
|
+
SSOT governance SHALL use general rules of interpretation for authority, conflict resolution, normative language, projections, entity absence, and fail-closed release decisions.
|
|
26
|
+
|
|
27
|
+
The rules are:
|
|
28
|
+
|
|
29
|
+
- authored ADRs and SPECs govern intent, rationale, and normative requirements;
|
|
30
|
+
- `.ssot/registry.json` governs current machine-readable entity state and relationships;
|
|
31
|
+
- generated exports, reports, graphs, README tables, and CLI summaries are projections unless a SPEC explicitly declares a surface canonical;
|
|
32
|
+
- specific accepted rules narrow or override general accepted rules for their exact scope;
|
|
33
|
+
- accepted documents override draft documents;
|
|
34
|
+
- later documents override earlier documents only through explicit supersession or explicit scoped narrowing;
|
|
35
|
+
- absence of a governed row means absence of a governed assertion;
|
|
36
|
+
- ambiguity in conformance, certification, promotion, publication, and release gates is resolved fail-closed.
|
|
37
|
+
|
|
38
|
+
## Consequences
|
|
39
|
+
|
|
40
|
+
Validation, synchronization, certification, and release tooling must not treat generated projections as independent authority when they disagree with authored documents or the canonical registry.
|
|
41
|
+
|
|
42
|
+
Draft ADRs and SPECs may guide planning, but they must not create binding conformance requirements until accepted or otherwise promoted by the repository's governed lifecycle.
|
|
43
|
+
|
|
44
|
+
Downstream projects may add stricter local rules, but they must not interpret missing, ambiguous, or projection-only data as stronger assurance than the originating SSOT registry supports.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
schema_version: "0.3.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0622"
|
|
4
|
+
number: 622
|
|
5
|
+
slug: "definitions-govern-ssot-vocabulary"
|
|
6
|
+
title: "Definitions govern SSOT vocabulary"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "SSOT governance uses recurring terms across authored ADRs, authored SPECs, registry rows, CLI output, generated projections, evidence artifacts, releases, boundaries, and downstream conformance work. Those terms currently appear across many documents, but there is no single governed vocabulary authority."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
SSOT governance uses recurring terms across authored ADRs, authored SPECs, registry rows, CLI output, generated projections, evidence artifacts, releases, boundaries, and downstream conformance work. Those terms currently appear across many documents, but there is no single governed vocabulary authority.
|
|
20
|
+
|
|
21
|
+
Without a definitions authority, readers and tools can interpret entity families, proof terms, lifecycle terms, projections, and assurance terms inconsistently. That weakens traceability and makes release or certification claims harder to audit.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
24
|
+
|
|
25
|
+
SSOT vocabulary SHALL be governed by a dedicated definitions SPEC.
|
|
26
|
+
|
|
27
|
+
Defined SSOT terms SHALL override informal usage in README files, generated reports, examples, comments, and downstream prose.
|
|
28
|
+
|
|
29
|
+
Entity-family terms SHALL be interpreted according to the definitions SPEC unless a more specific accepted SPEC narrows a term for its own explicit scope.
|
|
30
|
+
|
|
31
|
+
Undefined terms retain their ordinary technical meaning, but they SHALL NOT create conformance, certification, release, or implementation obligations by implication.
|
|
32
|
+
|
|
33
|
+
Downstream repositories MAY add stricter local definitions, but they SHALL NOT redefine upstream SSOT terms to claim stronger assurance than the upstream registry, authored documents, claims, tests, and evidence support.
|
|
34
|
+
|
|
35
|
+
## Consequences
|
|
36
|
+
|
|
37
|
+
New ADRs and SPECs should reuse defined terms where possible instead of creating parallel vocabulary.
|
|
38
|
+
|
|
39
|
+
Definitions that affect validation, synchronization, conformance, release, or certification behavior must be added to the governed definitions SPEC or to a narrower accepted SPEC that states its scope.
|
|
40
|
+
|
|
41
|
+
Generated projections and CLI summaries must not introduce authoritative definitions that do not exist in authored governance.
|
|
@@ -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.
|