ssot-contracts 0.2.20.dev1__tar.gz → 0.2.21.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.20.dev1 → ssot_contracts-0.2.21.dev1}/PKG-INFO +1 -1
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/pyproject.toml +1 -1
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +23 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0627-feature-parent-links-are-inventory-composition.yaml +5 -3
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml +60 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/adr/ADR-0634-proof-graph-canonical-assurance-unit.yaml +30 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/adr/ADR-0635-proof-graph-materialization-and-certification-closure.yaml +33 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/adr/ADR-0636-feature-create-defaults-to-proof-graph-scaffolding.yaml +33 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/manifest.json +81 -4
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0627-feature-parent-link-contract.yaml +5 -3
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0628-feature-parent-cli-contract.yaml +5 -3
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/specs/SPEC-0629-ssot-mcp-cli-surface-contract.yaml +96 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/specs/SPEC-0633-targeted-scaffold-repair-contract.yaml +32 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/specs/SPEC-0636-proof-graph-assurance-contract.yaml +38 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/specs/SPEC-0637-proof-graph-materialization-and-certification-flow.yaml +35 -0
- ssot_contracts-0.2.21.dev1/src/ssot_contracts/templates/specs/SPEC-0638-feature-create-default-proof-scaffold-contract.yaml +44 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/manifest.json +100 -6
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts.egg-info/PKG-INFO +1 -1
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +6 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -21
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml +0 -43
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0629-ssot-mcp-cli-surface-contract.yaml +0 -72
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0633-targeted-scaffold-repair-contract.yaml +0 -24
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/README.md +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/setup.cfg +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/contract_data.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/python/enums.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/registry.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0629-ssot-mcp-worker-repair-authority.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0630-scoped-maturation-claims-and-blockers.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0631-mcp-mediated-upgrade-uses-current-runtime.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0632-targeted-repair-with-baseline-validation-drift.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/ADR-0633-public-registry-save-validates-before-write.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/registry.full.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/registry.minimal.json +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0630-ssot-mcp-registry-repair-authority.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0631-scoped-maturation-blocker-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0632-mcp-upgrade-delegation-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0634-worker-actionability-and-repair-loop.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/SPEC-0635-registry-save-validation-contract.yaml +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
- {ssot_contracts-0.2.20.dev1 → ssot_contracts-0.2.21.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.21.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
|
|
@@ -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.21.dev1"
|
|
8
8
|
description = "Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.15"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0601"
|
|
4
|
+
number: 601
|
|
5
|
+
slug: "features-are-targetable-units"
|
|
6
|
+
title: "Features are the targetable units"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Features are the only targetable implementation units. There is no separate `targets[]` section."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
Features are the only targetable implementation units. There is no separate `targets[]` section.
|
|
18
|
+
|
|
19
|
+
Because features are the targetable units, the default authoring path for new feature rows shall align with proof requirements. New `feature create` operations are expected to scaffold minimally valid proof-graph closure by default unless the operator explicitly disables that behavior.
|
|
20
|
+
|
|
21
|
+
Feature inventory naming MAY use umbrella/leaf conventions when a repository needs grouped readability, but that convention is not a runtime dependency model. `feature.requires` is reserved for prerequisite features that must independently pass before the dependent feature can pass.
|
|
22
|
+
|
|
23
|
+
Profiles remain the preferred grouped evaluation surface. Operators should not overload umbrella feature names to represent certification or bundle evaluation when a profile is the correct modeled unit.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
schema_version: "0.
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
2
|
kind: "adr"
|
|
3
3
|
id: "adr:0627"
|
|
4
4
|
number: 627
|
|
@@ -13,9 +13,9 @@ supersedes: []
|
|
|
13
13
|
superseded_by: []
|
|
14
14
|
status_notes:
|
|
15
15
|
-
|
|
16
|
-
status: "accepted"
|
|
17
|
-
note: "Accepted as the modeling correction for umbrella and leaf feature inventories."
|
|
18
16
|
at: "2026-05-19T22:26:32Z"
|
|
17
|
+
note: "Accepted as the modeling correction for umbrella and leaf feature inventories."
|
|
18
|
+
status: "accepted"
|
|
19
19
|
references: []
|
|
20
20
|
body: |-
|
|
21
21
|
Decision: feature parent/leaf links are first-class inventory composition links, not readiness gates.
|
|
@@ -24,4 +24,6 @@ body: |-
|
|
|
24
24
|
|
|
25
25
|
This decision preserves feature.requires as a passing prerequisite edge. Parent/leaf links organize the feature inventory and graph views only; they do not affect feature pass/fail, status synchronization, claim closure, profile evaluation, boundary freeze, certification, promotion, or publication.
|
|
26
26
|
|
|
27
|
+
Default proof-graph scaffolding during `feature create` does not change the meaning of parent links. It only changes the default authoring path. When an operator is creating an inventory-only umbrella parent, disabling the default scaffold is an explicit operator choice or repo-local policy choice; it is not implied automatically by the existence of `parent_feature_ids`.
|
|
28
|
+
|
|
27
29
|
Migration must add parent_feature_ids as an empty list to existing feature rows without inferring hierarchy from ids and without rewriting requires.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0628"
|
|
4
|
+
number: 628
|
|
5
|
+
slug: "ssot-mcp-cli-surface-delegation"
|
|
6
|
+
title: "SSOT MCP and CLI surfaces stay in parity"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Codex workers and other MCP clients need the same governed operational surface that exists in the `ssot-registry` CLI. A generic delegated CLI runner is useful, but parity is weaker if MCP clients cannot address the live CLI paths as first-class MCP tools."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-20T16:21:19Z"
|
|
17
|
+
note: "Created to govern safe SSOT CLI delegation through ssot-mcp."
|
|
18
|
+
status: "draft"
|
|
19
|
+
-
|
|
20
|
+
status: "draft"
|
|
21
|
+
note: "Updated to require explicit CLI/MCP parity, mirrored MCP command-path tools, and drift enforcement."
|
|
22
|
+
at: "2026-05-22T00:44:55Z"
|
|
23
|
+
references: []
|
|
24
|
+
body: |-
|
|
25
|
+
## Context
|
|
26
|
+
|
|
27
|
+
Codex workers and other MCP clients need the same governed operational surface that exists in the `ssot-registry` CLI. A generic delegated CLI runner is useful, but parity is weaker if MCP clients cannot address the live CLI paths as first-class MCP tools.
|
|
28
|
+
|
|
29
|
+
Workers must not hand-edit `.ssot/registry.json`, so MCP needs a safe compatibility layer that preserves the CLI surface while remaining transport-safe for help, version, and invalid-argument flows.
|
|
30
|
+
|
|
31
|
+
## Decision
|
|
32
|
+
|
|
33
|
+
`ssot-mcp` SHALL maintain parity with the live `ssot-registry` CLI surface.
|
|
34
|
+
|
|
35
|
+
That parity includes two layers:
|
|
36
|
+
|
|
37
|
+
- discovery of the live CLI parser surface
|
|
38
|
+
- execution of that surface through MCP
|
|
39
|
+
|
|
40
|
+
The MCP server SHALL continue to expose a generic delegated CLI execution tool, and it SHALL also expose mirrored MCP tools for the live CLI command paths so the MCP surface is not limited to a single catch-all runner.
|
|
41
|
+
|
|
42
|
+
The discovery surface SHALL report:
|
|
43
|
+
|
|
44
|
+
- global flags
|
|
45
|
+
- top-level commands
|
|
46
|
+
- subcommand paths
|
|
47
|
+
- flags by command path
|
|
48
|
+
- exact MCP tool names mapped to CLI paths
|
|
49
|
+
|
|
50
|
+
Help, version, and invalid-argument parser exits SHALL be contained and returned as normal MCP tool results. They must not close the MCP transport.
|
|
51
|
+
|
|
52
|
+
Dedicated structured MCP tools remain preferred for domain-native worker-control and registry CRUD operations, but CLI/MCP parity is a required compatibility guarantee rather than a best-effort fallback.
|
|
53
|
+
|
|
54
|
+
## Consequences
|
|
55
|
+
|
|
56
|
+
MCP clients can invoke the governed CLI surface without shelling out and without hand-editing registry files.
|
|
57
|
+
|
|
58
|
+
CLI evolution becomes an MCP contract concern: when the parser surface changes, mirrored MCP tool coverage and parity tests must change with it.
|
|
59
|
+
|
|
60
|
+
The generic delegated runner remains useful, but parity is enforced by discovery, mirrored tool registration, and drift-detection tests rather than by convention alone.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0634"
|
|
4
|
+
number: 634
|
|
5
|
+
slug: "proof-graph-canonical-assurance-unit"
|
|
6
|
+
title: "Proof Graph Is The Canonical Assurance Unit"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Summary"
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern proof-graph-first assurance semantics after downstream MCP and certification closure work."
|
|
18
|
+
at: "2026-05-21T05:59:13Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Summary
|
|
22
|
+
The governed assurance unit is a linked proof graph rather than any single row.
|
|
23
|
+
|
|
24
|
+
Decision
|
|
25
|
+
A certifiable SSOT assertion shall be represented as a connected graph containing the target feature, tiered claims, verifying tests, supporting evidence, and any higher-tier certification context needed by guards.
|
|
26
|
+
|
|
27
|
+
Implications
|
|
28
|
+
Operators may continue to edit rows individually, but registry truth, tier gates, and certification closure shall be evaluated against the connected graph.
|
|
29
|
+
Row-complete but graph-incomplete states shall not be treated as certified or honestly fully featured.
|
|
30
|
+
Future CLI and MCP surfaces shall prefer graph-valid materialization over ad hoc row creation that leaves partial invalid states.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0635"
|
|
4
|
+
number: 635
|
|
5
|
+
slug: "proof-graph-materialization-and-certification-closure"
|
|
6
|
+
title: "Proof Graph Materialization And Certification Closure"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Summary"
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-21T05:59:14Z"
|
|
17
|
+
note: "Created to govern operator materialization and higher-tier proof-graph closure flows."
|
|
18
|
+
status: "draft"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Summary
|
|
22
|
+
Proof graphs shall be materializable and closable through supported operator workflows.
|
|
23
|
+
|
|
24
|
+
Decision
|
|
25
|
+
The SSOT CLI and MCP surfaces shall support atomic or fail-closed materialization of a minimally valid proof graph and a repeatable closure workflow for higher-tier evidence, boundary context, release certification, and certification feedback propagation.
|
|
26
|
+
|
|
27
|
+
A minimally valid create-time scaffold shall not collapse all scaffolded claim tiers onto one placeholder test row when multiple claim tiers are scaffolded. When a feature scaffold creates T0 and T1 claims, the scaffold shall create separate support tests for the T0 claim and the T1 claim. The same rule extends upward for higher scaffolded tiers.
|
|
28
|
+
|
|
29
|
+
Implications
|
|
30
|
+
A user shall not need hidden row-order knowledge to author or close a valid proof graph.
|
|
31
|
+
T2 and T3 closure metadata, including robustness dimensions, source evidence links, and release context, shall be first-class operator inputs.
|
|
32
|
+
Release certification outcomes that satisfy claim-tier gates shall be reattachable to linked proof evidence without direct registry edits.
|
|
33
|
+
Default scaffold materialization shall preserve tier distinction in the test rows it creates, even when those scaffold tests remain placeholder tests rather than authored unit or integration semantics.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0636"
|
|
4
|
+
number: 636
|
|
5
|
+
slug: "feature-create-defaults-to-proof-graph-scaffolding"
|
|
6
|
+
title: "Feature create defaults to proof-graph scaffolding"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Decision: `feature create` shall default to proof-graph scaffolding for new feature rows unless the operator explicitly disables that behavior."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-24T10:51:51Z"
|
|
17
|
+
note: "Created to govern scaffold-first feature creation defaults and explicit opt-out behavior."
|
|
18
|
+
status: "draft"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Decision: `feature create` shall default to proof-graph scaffolding for new feature rows unless the operator explicitly disables that behavior.
|
|
22
|
+
|
|
23
|
+
`ssot-registry` already treats features as the targetable units and fail-closes when targeted or implemented features do not carry linked proof-chain closure. In practice, downstream operators repeatedly discover `feature create` before they discover the scaffold flows, then either hit validation failure or attach new work to an unrelated existing feature that already has claim and test closure. That behavior preserves validation but weakens traceability and encourages feature overloading.
|
|
24
|
+
|
|
25
|
+
The default authoring path therefore shall align with the proof model instead of fighting it.
|
|
26
|
+
|
|
27
|
+
When an operator creates a feature row through `feature create`, the command shall behave as though proof-graph scaffolding were requested unless an explicit CLI override or repo-local config setting disables it. The default scaffold shall create or link the minimally valid proof graph needed for a new governed feature row in the same transaction.
|
|
28
|
+
|
|
29
|
+
When the scaffolded proof graph includes more than one claim tier, scaffold support shall remain tier-separated. At minimum, a scaffolded T0 claim shall receive its own scaffold test row and a scaffolded T1 claim shall receive its own scaffold test row. The scaffold is not required to label those tests as unit or integration tests, but it shall not collapse distinct scaffolded claim tiers onto one shared placeholder test row.
|
|
30
|
+
|
|
31
|
+
This default does not change the meaning of `parent_feature_ids`, `feature.requires`, profiles, or claim tiers. It changes only the default creation behavior for feature rows so the first successful path matches the governed model.
|
|
32
|
+
|
|
33
|
+
Inventory-only umbrella parents remain valid, but they are now an explicit opt-out case. Operators who are creating a non-targeted composition row may disable the default scaffold through CLI override or command-scoped repo-local config. The explicit opt-out keeps the fail-closed assurance model intact while making the common downstream path succeed by default.
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"title": "Features are the targetable units",
|
|
25
25
|
"filename": "ADR-0601-features-are-targetable-units.yaml",
|
|
26
26
|
"target_path": ".ssot/adr/ADR-0601-features-are-targetable-units.yaml",
|
|
27
|
-
"sha256": "
|
|
27
|
+
"sha256": "68c5ec6b68a2ae0c8b2523ac388bded26b3865843ffbb27d120f696573a67e11",
|
|
28
28
|
"origin": "ssot-origin",
|
|
29
29
|
"reservation_owner": "ssot-origin",
|
|
30
30
|
"immutable": true,
|
|
@@ -474,7 +474,7 @@
|
|
|
474
474
|
"title": "Feature parent links are inventory composition",
|
|
475
475
|
"filename": "ADR-0627-feature-parent-links-are-inventory-composition.yaml",
|
|
476
476
|
"target_path": ".ssot/adr/ADR-0627-feature-parent-links-are-inventory-composition.yaml",
|
|
477
|
-
"sha256": "
|
|
477
|
+
"sha256": "f737baf8e7ef3131d02c9bd74cf698894438e7136dcb77a488c40a9b9c138eda",
|
|
478
478
|
"origin": "ssot-origin",
|
|
479
479
|
"reservation_owner": "ssot-origin",
|
|
480
480
|
"immutable": true,
|
|
@@ -495,10 +495,10 @@
|
|
|
495
495
|
"id": "adr:0628",
|
|
496
496
|
"number": 628,
|
|
497
497
|
"slug": "ssot-mcp-cli-surface-delegation",
|
|
498
|
-
"title": "SSOT MCP
|
|
498
|
+
"title": "SSOT MCP and CLI surfaces stay in parity",
|
|
499
499
|
"filename": "ADR-0628-ssot-mcp-cli-surface-delegation.yaml",
|
|
500
500
|
"target_path": ".ssot/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml",
|
|
501
|
-
"sha256": "
|
|
501
|
+
"sha256": "6c1146e7081ff8a97c246311fef9239e3dad4c49492034f338e33b2b901c62e0",
|
|
502
502
|
"origin": "ssot-origin",
|
|
503
503
|
"reservation_owner": "ssot-origin",
|
|
504
504
|
"immutable": true,
|
|
@@ -512,6 +512,11 @@
|
|
|
512
512
|
"at": "2026-05-20T16:21:19Z",
|
|
513
513
|
"note": "Created to govern safe SSOT CLI delegation through ssot-mcp.",
|
|
514
514
|
"status": "draft"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"at": "2026-05-22T00:44:55Z",
|
|
518
|
+
"note": "Updated to require explicit CLI/MCP parity, mirrored MCP command-path tools, and drift enforcement.",
|
|
519
|
+
"status": "draft"
|
|
515
520
|
}
|
|
516
521
|
]
|
|
517
522
|
},
|
|
@@ -628,5 +633,77 @@
|
|
|
628
633
|
"supersedes": [],
|
|
629
634
|
"superseded_by": [],
|
|
630
635
|
"status_notes": []
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
"id": "adr:0634",
|
|
639
|
+
"number": 634,
|
|
640
|
+
"slug": "proof-graph-canonical-assurance-unit",
|
|
641
|
+
"title": "Proof Graph Is The Canonical Assurance Unit",
|
|
642
|
+
"filename": "ADR-0634-proof-graph-canonical-assurance-unit.yaml",
|
|
643
|
+
"target_path": ".ssot/adr/ADR-0634-proof-graph-canonical-assurance-unit.yaml",
|
|
644
|
+
"sha256": "d79f4e08ac8fe11b736e737c822d973fd55b8de9dd3f87aad71a8c5ff71bd669",
|
|
645
|
+
"origin": "ssot-origin",
|
|
646
|
+
"reservation_owner": "ssot-origin",
|
|
647
|
+
"immutable": true,
|
|
648
|
+
"minimum_schema_version": "0.7.0",
|
|
649
|
+
"introduced_in": "0.2.20",
|
|
650
|
+
"status": "draft",
|
|
651
|
+
"supersedes": [],
|
|
652
|
+
"superseded_by": [],
|
|
653
|
+
"status_notes": [
|
|
654
|
+
{
|
|
655
|
+
"at": "2026-05-21T05:59:13Z",
|
|
656
|
+
"note": "Created to govern proof-graph-first assurance semantics after downstream MCP and certification closure work.",
|
|
657
|
+
"status": "draft"
|
|
658
|
+
}
|
|
659
|
+
]
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
"id": "adr:0635",
|
|
663
|
+
"number": 635,
|
|
664
|
+
"slug": "proof-graph-materialization-and-certification-closure",
|
|
665
|
+
"title": "Proof Graph Materialization And Certification Closure",
|
|
666
|
+
"filename": "ADR-0635-proof-graph-materialization-and-certification-closure.yaml",
|
|
667
|
+
"target_path": ".ssot/adr/ADR-0635-proof-graph-materialization-and-certification-closure.yaml",
|
|
668
|
+
"sha256": "d228b642bc6c3c84e293c821c480099b5256e62a7048c73830a62d34c36e8012",
|
|
669
|
+
"origin": "ssot-origin",
|
|
670
|
+
"reservation_owner": "ssot-origin",
|
|
671
|
+
"immutable": true,
|
|
672
|
+
"minimum_schema_version": "0.7.0",
|
|
673
|
+
"introduced_in": "0.2.20",
|
|
674
|
+
"status": "draft",
|
|
675
|
+
"supersedes": [],
|
|
676
|
+
"superseded_by": [],
|
|
677
|
+
"status_notes": [
|
|
678
|
+
{
|
|
679
|
+
"at": "2026-05-21T05:59:14Z",
|
|
680
|
+
"note": "Created to govern operator materialization and higher-tier proof-graph closure flows.",
|
|
681
|
+
"status": "draft"
|
|
682
|
+
}
|
|
683
|
+
]
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
"id": "adr:0636",
|
|
687
|
+
"number": 636,
|
|
688
|
+
"slug": "feature-create-defaults-to-proof-graph-scaffolding",
|
|
689
|
+
"title": "Feature create defaults to proof-graph scaffolding",
|
|
690
|
+
"filename": "ADR-0636-feature-create-defaults-to-proof-graph-scaffolding.yaml",
|
|
691
|
+
"target_path": ".ssot/adr/ADR-0636-feature-create-defaults-to-proof-graph-scaffolding.yaml",
|
|
692
|
+
"sha256": "81b2744237e8f72d62cabc1ebf695c7fe2d39dd639d1e65d192c8668293d72bf",
|
|
693
|
+
"origin": "ssot-origin",
|
|
694
|
+
"reservation_owner": "ssot-origin",
|
|
695
|
+
"immutable": true,
|
|
696
|
+
"minimum_schema_version": "0.7.0",
|
|
697
|
+
"introduced_in": "0.2.20",
|
|
698
|
+
"status": "draft",
|
|
699
|
+
"supersedes": [],
|
|
700
|
+
"superseded_by": [],
|
|
701
|
+
"status_notes": [
|
|
702
|
+
{
|
|
703
|
+
"at": "2026-05-24T10:51:51Z",
|
|
704
|
+
"note": "Created to govern scaffold-first feature creation defaults and explicit opt-out behavior.",
|
|
705
|
+
"status": "draft"
|
|
706
|
+
}
|
|
707
|
+
]
|
|
631
708
|
}
|
|
632
709
|
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
schema_version: "0.
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
2
|
kind: "spec"
|
|
3
3
|
id: "spc:0627"
|
|
4
4
|
number: 627
|
|
@@ -13,9 +13,9 @@ supersedes: []
|
|
|
13
13
|
superseded_by: []
|
|
14
14
|
status_notes:
|
|
15
15
|
-
|
|
16
|
-
status: "accepted"
|
|
17
|
-
note: "Accepted with ADR-0627 to separate inventory composition from prerequisite gating."
|
|
18
16
|
at: "2026-05-19T22:26:45Z"
|
|
17
|
+
note: "Accepted with ADR-0627 to separate inventory composition from prerequisite gating."
|
|
18
|
+
status: "accepted"
|
|
19
19
|
references: []
|
|
20
20
|
body: |-
|
|
21
21
|
## Feature Row Contract
|
|
@@ -31,6 +31,8 @@ body: |-
|
|
|
31
31
|
Validation and migration SHALL deduplicate and sort parent_feature_ids for deterministic output. Normal validation SHALL reject malformed values.
|
|
32
32
|
|
|
33
33
|
Status synchronization, feature implementation evaluation, profile evaluation, boundary freeze, release certification, promotion, and publication SHALL ignore parent_feature_ids unless a later accepted ADR and SPEC define an explicit aggregate policy.
|
|
34
|
+
|
|
35
|
+
Default proof-graph scaffolding for `feature create` SHALL NOT treat parent links as readiness edges and SHALL NOT infer that a row is non-targeted merely because it references or is referenced by `parent_feature_ids`. Disabling create-time scaffold for inventory-only umbrella rows is an explicit command or config choice.
|
|
34
36
|
spec_kind: "normative"
|
|
35
37
|
adr_ids:
|
|
36
38
|
- "adr:0627"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
schema_version: "0.
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
2
|
kind: "spec"
|
|
3
3
|
id: "spc:0628"
|
|
4
4
|
number: 628
|
|
@@ -13,9 +13,9 @@ supersedes: []
|
|
|
13
13
|
superseded_by: []
|
|
14
14
|
status_notes:
|
|
15
15
|
-
|
|
16
|
-
status: "accepted"
|
|
17
|
-
note: "Accepted with ADR-0627 to define bulk parent and child command behavior."
|
|
18
16
|
at: "2026-05-19T22:26:59Z"
|
|
17
|
+
note: "Accepted with ADR-0627 to define bulk parent and child command behavior."
|
|
18
|
+
status: "accepted"
|
|
19
19
|
references: []
|
|
20
20
|
body: |-
|
|
21
21
|
## CLI Contract
|
|
@@ -34,6 +34,8 @@ body: |-
|
|
|
34
34
|
Every bulk mutation SHALL resolve all referenced ids, apply changes in memory, deduplicate and sort parent ids, check missing references, self-parenting, and cycles, validate the full registry, and save once. If any row fails validation, the operation SHALL fail atomically without partial writes.
|
|
35
35
|
|
|
36
36
|
CLI help and examples SHALL state that parent links are inventory composition only and SHALL NOT be used as a substitute for feature.requires prerequisite gates.
|
|
37
|
+
|
|
38
|
+
CLI help and examples for `feature create` SHALL also state that proof-graph scaffolding is enabled by default, and that inventory-only umbrella creation is an explicit opt-out workflow via CLI override or repo-local config.
|
|
37
39
|
spec_kind: "normative"
|
|
38
40
|
adr_ids:
|
|
39
41
|
- "adr:0627"
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0629"
|
|
4
|
+
number: 629
|
|
5
|
+
slug: "ssot-mcp-cli-surface-contract"
|
|
6
|
+
title: "SSOT MCP and CLI surface parity contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Define the SSOT MCP contract for keeping the live `ssot-registry` CLI surface and the SSOT MCP tool surface in parity."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-20T16:21:38Z"
|
|
17
|
+
note: "Created to define full SSOT CLI delegation through ssot-mcp."
|
|
18
|
+
status: "draft"
|
|
19
|
+
-
|
|
20
|
+
status: "draft"
|
|
21
|
+
note: "Updated to require discoverable mirrored MCP CLI-path tools and parity drift enforcement."
|
|
22
|
+
at: "2026-05-22T00:45:11Z"
|
|
23
|
+
references: []
|
|
24
|
+
body: |-
|
|
25
|
+
## Purpose
|
|
26
|
+
|
|
27
|
+
Define the SSOT MCP contract for keeping the live `ssot-registry` CLI surface and the SSOT MCP tool surface in parity.
|
|
28
|
+
|
|
29
|
+
## Required MCP Tools
|
|
30
|
+
|
|
31
|
+
`get_ssot_cli_surface` SHALL return:
|
|
32
|
+
|
|
33
|
+
- `passed`
|
|
34
|
+
- `global_flags`
|
|
35
|
+
- `top_level_commands`
|
|
36
|
+
- `subcommand_paths`
|
|
37
|
+
- `flags_by_path`
|
|
38
|
+
- `root_tool_name`
|
|
39
|
+
- `tool_name_by_path`
|
|
40
|
+
|
|
41
|
+
`run_ssot_cli` SHALL accept argv tokens after `ssot-registry` and SHALL support:
|
|
42
|
+
|
|
43
|
+
- global flags
|
|
44
|
+
- top-level commands
|
|
45
|
+
- command flags
|
|
46
|
+
- subcommands
|
|
47
|
+
- subcommand flags
|
|
48
|
+
- help requests
|
|
49
|
+
- version requests
|
|
50
|
+
- invalid-argument requests
|
|
51
|
+
|
|
52
|
+
## Mirrored CLI Path Tools
|
|
53
|
+
|
|
54
|
+
`ssot-mcp` SHALL register a root CLI MCP tool and mirrored MCP tools for the live CLI command paths.
|
|
55
|
+
|
|
56
|
+
The root tool SHALL support full delegated argv execution.
|
|
57
|
+
|
|
58
|
+
Each mirrored path tool SHALL:
|
|
59
|
+
|
|
60
|
+
- map to exactly one live CLI command path
|
|
61
|
+
- accept root/global flags separately from path-local flags and positional arguments
|
|
62
|
+
- execute through the same safe in-process CLI delegation path
|
|
63
|
+
|
|
64
|
+
## Execution Result Contract
|
|
65
|
+
|
|
66
|
+
Mirrored CLI path tools and `run_ssot_cli` SHALL return a structured result with:
|
|
67
|
+
|
|
68
|
+
- `passed`
|
|
69
|
+
- `exit_code`
|
|
70
|
+
- `args`
|
|
71
|
+
- `output`
|
|
72
|
+
- `stdout`
|
|
73
|
+
- `stderr`
|
|
74
|
+
|
|
75
|
+
If stdout is JSON, `output` SHOULD contain the parsed JSON payload. If stdout is not JSON, `output` MAY contain the raw stdout text.
|
|
76
|
+
|
|
77
|
+
## Parser Exit Containment
|
|
78
|
+
|
|
79
|
+
The MCP server SHALL catch CLI parser exits, including argparse `SystemExit`, and return them as normal tool results. Help, version, and invalid-argument flows SHALL NOT close the MCP transport.
|
|
80
|
+
|
|
81
|
+
## Repository Resolution
|
|
82
|
+
|
|
83
|
+
When `ssot-mcp` is pinned to a repository, delegated CLI execution SHALL run against the pinned repository unless an explicit different repo is rejected by policy. In explicit repo-per-call mode, non-metadata CLI operations SHALL require a repo argument. Metadata-only operations such as help, version, and CLI surface discovery MAY run without a repo.
|
|
84
|
+
|
|
85
|
+
## Drift Detection
|
|
86
|
+
|
|
87
|
+
Parity SHALL be enforced by tests that compare the live CLI parser surface with the exposed MCP discovery and mirrored MCP tool registration.
|
|
88
|
+
|
|
89
|
+
If a live CLI command path or flag is added, removed, or renamed, MCP parity tests SHALL fail until the MCP surface is updated to match.
|
|
90
|
+
|
|
91
|
+
## Mutation Notification
|
|
92
|
+
|
|
93
|
+
Successful delegated CLI operations that can mutate registry state SHOULD emit a `registry_updated` event so workers can refresh context.
|
|
94
|
+
spec_kind: "operational"
|
|
95
|
+
adr_ids:
|
|
96
|
+
- "adr:0628"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0633"
|
|
4
|
+
number: 633
|
|
5
|
+
slug: "targeted-scaffold-repair-contract"
|
|
6
|
+
title: "Targeted scaffold repair contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This specification defines targeted scaffold repair. `scaffold_target_claim_wiring` SHALL compare baseline validation failures against post-repair validation failures. The repair MAY persist when no new validation failures are introduced, even if baseline validation remains dirty. Responses SHALL expose `validation_clean`, `baseline_validation`, `validation`, and `new_validation_failures`."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-20T17:45:22Z"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
status: "draft"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
This specification defines targeted scaffold repair. `scaffold_target_claim_wiring` SHALL compare baseline validation failures against post-repair validation failures. The repair MAY persist when no new validation failures are introduced, even if baseline validation remains dirty. Responses SHALL expose `validation_clean`, `baseline_validation`, `validation`, and `new_validation_failures`.
|
|
22
|
+
|
|
23
|
+
The same scaffold semantics SHALL remain compatible with create-time proof-graph materialization. Repair-time scaffold and create-time scaffold may be reached through different command surfaces, but they SHALL produce proof-graph closure that obeys the same validation and no-new-failures discipline.
|
|
24
|
+
|
|
25
|
+
When scaffold materialization produces multiple claim tiers for one feature, it SHALL materialize separate scaffold test rows for each scaffolded claim tier. A scaffolded T0 claim SHALL link to a T0 scaffold test row, and a scaffolded T1 claim SHALL link to a distinct T1 scaffold test row. The same tier-separated rule extends to higher scaffolded tiers.
|
|
26
|
+
|
|
27
|
+
These scaffold tests MAY remain placeholder tests and do not need to declare authored runtime semantics such as unit versus integration. However, scaffold responses and persisted rows SHALL preserve tier distinction directly in the created `test_ids` and test paths. Shared scaffold evidence MAY still aggregate across the scaffolded claim tiers as long as claim-to-test support remains tier-separated.
|
|
28
|
+
spec_kind: "operational"
|
|
29
|
+
adr_ids:
|
|
30
|
+
- "adr:0632"
|
|
31
|
+
- "adr:0635"
|
|
32
|
+
- "adr:0636"
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0636"
|
|
4
|
+
number: 636
|
|
5
|
+
slug: "proof-graph-assurance-contract"
|
|
6
|
+
title: "Proof Graph Assurance Contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Scope"
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to define the connected proof-graph contract and tier semantics."
|
|
18
|
+
at: "2026-05-21T05:59:16Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Scope
|
|
22
|
+
This SPEC defines the proof-graph contract for SSOT assurance closure.
|
|
23
|
+
|
|
24
|
+
Required nodes
|
|
25
|
+
A valid proof graph contains at minimum a feature, one or more claims, one or more tests, and one or more evidence rows linked transitively and reciprocally according to registry rules.
|
|
26
|
+
|
|
27
|
+
Tier semantics
|
|
28
|
+
T1 requires passing linked tests and passed evidence at or above T1.
|
|
29
|
+
T2 additionally requires declared robustness dimensions and explicit source T1 evidence lineage.
|
|
30
|
+
T3 additionally requires release context, boundary context, and a passing certification guard result that can be read from linked evidence context.
|
|
31
|
+
|
|
32
|
+
Operator expectations
|
|
33
|
+
Graph-valid materialization shall create a minimally valid linked subgraph in one supported transaction.
|
|
34
|
+
Graph evaluation shall fail closed when required nodes, links, artifacts, or tier metadata are missing.
|
|
35
|
+
spec_kind: "normative"
|
|
36
|
+
adr_ids:
|
|
37
|
+
- "adr:0634"
|
|
38
|
+
- "adr:0635"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0637"
|
|
4
|
+
number: 637
|
|
5
|
+
slug: "proof-graph-materialization-and-certification-flow"
|
|
6
|
+
title: "Proof Graph Materialization And Certification Flow"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Scope"
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to define supported CLI and MCP proof-graph operator flows."
|
|
18
|
+
at: "2026-05-21T05:59:17Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Scope
|
|
22
|
+
This SPEC defines the operator flow for proof-graph materialization and certification closure.
|
|
23
|
+
|
|
24
|
+
Materialization flow
|
|
25
|
+
A supported command shall be able to create a target feature together with linked claims, tests, and evidence scaffolding without deadlocking on immediate validation.
|
|
26
|
+
|
|
27
|
+
Closure flow
|
|
28
|
+
A supported command shall be able to materialize T1 source evidence, enrich higher-tier evidence metadata, create or select scoped boundary and release context, certify the release, and persist certification feedback back into linked proof evidence.
|
|
29
|
+
|
|
30
|
+
Idempotency and failure behavior
|
|
31
|
+
Repeated runs shall converge without duplicate graph members.
|
|
32
|
+
Failures shall leave the registry in a graph-valid or explicitly incomplete state with actionable reasons rather than silent partial closure.
|
|
33
|
+
spec_kind: "operational"
|
|
34
|
+
adr_ids:
|
|
35
|
+
- "adr:0635"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0638"
|
|
4
|
+
number: 638
|
|
5
|
+
slug: "feature-create-default-proof-scaffold-contract"
|
|
6
|
+
title: "Feature create default proof scaffold contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "`feature create` SHALL default to proof-graph scaffolding for new feature rows unless an explicit CLI override or effective repo-local config disables that behavior."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
at: "2026-05-24T10:52:03Z"
|
|
17
|
+
note: "Created to govern default proof-graph scaffolding during feature creation."
|
|
18
|
+
status: "draft"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Contract
|
|
22
|
+
|
|
23
|
+
`feature create` SHALL default to proof-graph scaffolding for new feature rows unless an explicit CLI override or effective repo-local config disables that behavior.
|
|
24
|
+
|
|
25
|
+
The default scaffold SHALL create or link the minimally valid claim, test, and evidence graph required for a governed feature row in the same transaction as feature creation. The command SHALL validate and save atomically.
|
|
26
|
+
|
|
27
|
+
CLI precedence SHALL be:
|
|
28
|
+
1. explicit `--auto-scaffold-proof-graph` or `--no-auto-scaffold-proof-graph`
|
|
29
|
+
2. command-scoped repo-local config for feature creation
|
|
30
|
+
3. global repo-local config
|
|
31
|
+
4. built-in default
|
|
32
|
+
|
|
33
|
+
The built-in default SHALL be scaffold enabled.
|
|
34
|
+
|
|
35
|
+
The command SHALL expose an auditable result that makes clear when proof-graph scaffolding occurred, what ids were created or linked, and what files were materialized.
|
|
36
|
+
|
|
37
|
+
Repositories MAY disable the default through repo-local config for narrow workflows such as inventory-only umbrella-parent creation, but such policy does not change the canonical meaning of features, parent links, profiles, claims, tests, or evidence.
|
|
38
|
+
|
|
39
|
+
Repeated scaffolded creation attempts against an unchanged target SHALL be idempotent or fail cleanly without duplicating stable rows.
|
|
40
|
+
spec_kind: "operational"
|
|
41
|
+
adr_ids:
|
|
42
|
+
- "adr:0601"
|
|
43
|
+
- "adr:0627"
|
|
44
|
+
- "adr:0636"
|