ssot-contracts 0.2.19.dev2__tar.gz → 0.2.20.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.19.dev2 → ssot_contracts-0.2.20.dev1}/PKG-INFO +1 -1
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/pyproject.toml +1 -1
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml +43 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0629-ssot-mcp-worker-repair-authority.yaml +21 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0630-scoped-maturation-claims-and-blockers.yaml +21 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0631-mcp-mediated-upgrade-uses-current-runtime.yaml +21 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0632-targeted-repair-with-baseline-validation-drift.yaml +21 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/adr/ADR-0633-public-registry-save-validates-before-write.yaml +27 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/manifest.json +138 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0629-ssot-mcp-cli-surface-contract.yaml +72 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0630-ssot-mcp-registry-repair-authority.yaml +24 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0631-scoped-maturation-blocker-contract.yaml +24 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0632-mcp-upgrade-delegation-contract.yaml +25 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0633-targeted-scaffold-repair-contract.yaml +24 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0634-worker-actionability-and-repair-loop.yaml +26 -0
- ssot_contracts-0.2.20.dev1/src/ssot_contracts/templates/specs/SPEC-0635-registry-save-validation-contract.yaml +37 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/manifest.json +193 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/PKG-INFO +1 -1
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/SOURCES.txt +13 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/README.md +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/setup.cfg +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/contract_data.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/cli_metadata.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/enums.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/ids.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/tui_metadata.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/adr.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/boundary.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/certification.report.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/graph.export.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/published.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/registry.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/release.snapshot.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/spec.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/validation.report.schema.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0600-canonical-json-registry.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0601-features-are-targetable-units.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0602-issues-are-plannable-work-items.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0603-entity-centric-registry-derived-graph.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0604-normalized-prefixed-ids.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0605-claim-status-vs-tier.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0606-feature-implementation-vs-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0607-immutable-boundary-and-release-snapshots.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0608-fail-closed-guards.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0609-generated-projections-are-non-canonical.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0610-explicit-schema-versioning.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0611-portable-core-repo-specific-evidence-adapters.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0612-ssot-path-and-filename-length-limits.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0613-profiles-as-reusable-feature-bundles.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0614-specs-own-typed-adr-links.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0615-downstream-assurance-language-ceilings.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0616-out-of-bounds-implementation-disposition.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0617-feature-implementation-claim-ceilings.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0618-local-release-assurance-remains-ssot-native.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0619-content-addressed-governed-source-snapshots.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0620-local-evidence-bundles-are-derived-release-artifacts.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0621-general-rules-of-interpretation.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/ADR-0627-feature-parent-links-are-inventory-composition.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/adr/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/registry.full.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/registry.minimal.json +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0601-cli.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0602-graph-model.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0603-feature-lifecycle.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0604-claim-statuses.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0605-claim-tiers.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0606-snapshots-and-reports.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0607-repo-policy.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0608-gates-and-fences.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0609-id-normalization.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0610-file-tree.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0611-planning-horizons.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0612-python-api.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0613-ssot-path-length-policy.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0614-profile-evaluation-and-boundary-resolution.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0615-typed-spec-to-adr-linking.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0616-out-of-bounds-implementation-disposition.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0617-feature-implementation-claim-ceilings.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0618-local-release-assurance-candidate-scope.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0619-governed-source-snapshot-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0620-local-evidence-bundle-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0621-output-artifact-manifest-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0622-local-release-verification-and-gate-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0623-general-rules-of-interpretation.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0624-ssot-definitions.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0627-feature-parent-link-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/SPEC-0628-feature-parent-cli-contract.yaml +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/specs/__init__.py +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/dependency_links.txt +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/requires.txt +0 -0
- {ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.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.20.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.20.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,43 @@
|
|
|
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 delegates the complete CLI surface safely"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Codex workers and other MCP clients sometimes need registry operations that already exist in the `ssot-registry` CLI but are not yet exposed as dedicated structured MCP tools. Workers must not hand-edit `.ssot/registry.json`, so MCP needs a complete, safe CLI delegation surface for discovery and execution."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern safe SSOT CLI delegation through ssot-mcp."
|
|
18
|
+
at: "2026-05-20T16:21:19Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Context
|
|
22
|
+
|
|
23
|
+
Codex workers and other MCP clients sometimes need registry operations that already exist in the `ssot-registry` CLI but are not yet exposed as dedicated structured MCP tools. Workers must not hand-edit `.ssot/registry.json`, so MCP needs a complete, safe CLI delegation surface for discovery and execution.
|
|
24
|
+
|
|
25
|
+
The CLI parser also handles help, version, and invalid argument flows by exiting through argparse. If those exits escape an MCP tool call, the MCP transport can close and strand workers.
|
|
26
|
+
|
|
27
|
+
## Decision
|
|
28
|
+
|
|
29
|
+
`ssot-mcp` exposes the full `ssot-registry` CLI surface as an optional MCP compatibility layer.
|
|
30
|
+
|
|
31
|
+
The MCP server provides a discovery tool that reports global flags, top-level commands, subcommand paths, and flags by command path. It also provides a CLI execution tool that accepts argv tokens after `ssot-registry` and supports global flags, commands, command flags, subcommands, and subcommand flags.
|
|
32
|
+
|
|
33
|
+
Help, version, and invalid-argument parser exits are contained and returned as normal tool results with `passed`, `exit_code`, `stdout`, and `stderr`. They must not close the MCP transport.
|
|
34
|
+
|
|
35
|
+
Dedicated structured MCP tools remain preferred for common registry CRUD, search, link, and worker-control operations, but CLI delegation is the required fallback for full parity with the CLI.
|
|
36
|
+
|
|
37
|
+
## Consequences
|
|
38
|
+
|
|
39
|
+
Workers can discover and invoke the live CLI surface through MCP without shelling out and without hand-editing registry files.
|
|
40
|
+
|
|
41
|
+
MCP clients can recover from invalid CLI arguments because failures are data, not transport failures.
|
|
42
|
+
|
|
43
|
+
The CLI remains the broad compatibility surface while purpose-built MCP tools can continue to grow over time.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0629"
|
|
4
|
+
number: 629
|
|
5
|
+
slug: "ssot-mcp-worker-repair-authority"
|
|
6
|
+
title: "SSOT MCP workers may request registry repair authority"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Decision: SSOT MCP workers may request creation, update, deletion, listing, search, linking, unlinking, CLI delegation, and repair of SSOT registry entities through ssot-mcp. Workers still must not hand-edit .ssot/registry.json. Rationale: pull-worker campaigns must be able to backfill lower-tier claim tranches, repair missing target-tier claim wiring, and resolve blocker rows without requiring direct registry edits or operator-only intervention."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP worker repair and scoped maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:14Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Decision: SSOT MCP workers may request creation, update, deletion, listing, search, linking, unlinking, CLI delegation, and repair of SSOT registry entities through ssot-mcp. Workers still must not hand-edit .ssot/registry.json. Rationale: pull-worker campaigns must be able to backfill lower-tier claim tranches, repair missing target-tier claim wiring, and resolve blocker rows without requiring direct registry edits or operator-only intervention.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0630"
|
|
4
|
+
number: 630
|
|
5
|
+
slug: "scoped-maturation-claims-and-blockers"
|
|
6
|
+
title: "Scoped maturation claims ignore unrelated blockers"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Decision: scoped maturation pulls are evaluated only against the requested feature, profile, or boundary scope. Open blockers outside that scope must not prevent targeted work from receiving a lease. Rationale: global backlog blockers caused targeted workers to churn even after the selected feature had been repaired."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP worker repair and scoped maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:15Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Decision: scoped maturation pulls are evaluated only against the requested feature, profile, or boundary scope. Open blockers outside that scope must not prevent targeted work from receiving a lease. Rationale: global backlog blockers caused targeted workers to churn even after the selected feature had been repaired.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0631"
|
|
4
|
+
number: 631
|
|
5
|
+
slug: "mcp-mediated-upgrade-uses-current-runtime"
|
|
6
|
+
title: "MCP mediated upgrade uses the current runtime"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Decision: ssot-mcp delegated upgrade calls use the currently running ssot-mcp binary and installed ssot-core runtime. MCP upgrade normalization must not attempt to install, resolve, or treat schema versions as PyPI package versions. It should refresh packaged ADR and SPEC documents during upgrade."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP worker repair and scoped maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:16Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Decision: ssot-mcp delegated upgrade calls use the currently running ssot-mcp binary and installed ssot-core runtime. MCP upgrade normalization must not attempt to install, resolve, or treat schema versions as PyPI package versions. It should refresh packaged ADR and SPEC documents during upgrade.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0632"
|
|
4
|
+
number: 632
|
|
5
|
+
slug: "targeted-repair-with-baseline-validation-drift"
|
|
6
|
+
title: "Targeted repair can proceed with unrelated baseline drift"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Decision: targeted SSOT repair may proceed in a repository that already has unrelated validation drift when the repair introduces no new validation failures. Rationale: workers must be able to repair the blocker they own without being forced to mutate unrelated registry state outside the slice."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP worker repair and scoped maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:17Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
Decision: targeted SSOT repair may proceed in a repository that already has unrelated validation drift when the repair introduces no new validation failures. Rationale: workers must be able to repair the blocker they own without being forced to mutate unrelated registry state outside the slice.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "adr"
|
|
3
|
+
id: "adr:0633"
|
|
4
|
+
number: 633
|
|
5
|
+
slug: "public-registry-save-validates-before-write"
|
|
6
|
+
title: "Public registry save validates before write"
|
|
7
|
+
status: "accepted"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "`save_registry` is the public Python API for writing `.ssot/registry.json`. Before this decision, that public surface only serialized the write under the registry JSON lock. Most mutation APIs validated before calling it, but a direct import could still persist invalid registry state."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Context
|
|
18
|
+
|
|
19
|
+
`save_registry` is the public Python API for writing `.ssot/registry.json`. Before this decision, that public surface only serialized the write under the registry JSON lock. Most mutation APIs validated before calling it, but a direct import could still persist invalid registry state.
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
22
|
+
|
|
23
|
+
The public/default registry save API shall validate the candidate registry document before persistence and fail closed on validation errors. Lock-only persistence remains available only through an explicitly named unchecked helper for bootstrap, migration, and targeted repair flows that have their own surrounding validation policy.
|
|
24
|
+
|
|
25
|
+
## Consequences
|
|
26
|
+
|
|
27
|
+
Default callers cannot bypass registry validation by importing the save helper directly. Exceptional flows remain possible, but their unchecked behavior is visible in code review and can be constrained by regression tests.
|
|
@@ -490,5 +490,143 @@
|
|
|
490
490
|
"status": "accepted"
|
|
491
491
|
}
|
|
492
492
|
]
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"id": "adr:0628",
|
|
496
|
+
"number": 628,
|
|
497
|
+
"slug": "ssot-mcp-cli-surface-delegation",
|
|
498
|
+
"title": "SSOT MCP delegates the complete CLI surface safely",
|
|
499
|
+
"filename": "ADR-0628-ssot-mcp-cli-surface-delegation.yaml",
|
|
500
|
+
"target_path": ".ssot/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml",
|
|
501
|
+
"sha256": "a3ca30d0bd5e9685d4cf6c07ace4ea1b83f0f3970cd67d32178e14e7b46243e7",
|
|
502
|
+
"origin": "ssot-origin",
|
|
503
|
+
"reservation_owner": "ssot-origin",
|
|
504
|
+
"immutable": true,
|
|
505
|
+
"minimum_schema_version": "0.7.0",
|
|
506
|
+
"introduced_in": "0.2.10",
|
|
507
|
+
"status": "draft",
|
|
508
|
+
"supersedes": [],
|
|
509
|
+
"superseded_by": [],
|
|
510
|
+
"status_notes": [
|
|
511
|
+
{
|
|
512
|
+
"at": "2026-05-20T16:21:19Z",
|
|
513
|
+
"note": "Created to govern safe SSOT CLI delegation through ssot-mcp.",
|
|
514
|
+
"status": "draft"
|
|
515
|
+
}
|
|
516
|
+
]
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
"id": "adr:0629",
|
|
520
|
+
"number": 629,
|
|
521
|
+
"slug": "ssot-mcp-worker-repair-authority",
|
|
522
|
+
"title": "SSOT MCP workers may request registry repair authority",
|
|
523
|
+
"filename": "ADR-0629-ssot-mcp-worker-repair-authority.yaml",
|
|
524
|
+
"target_path": ".ssot/adr/ADR-0629-ssot-mcp-worker-repair-authority.yaml",
|
|
525
|
+
"sha256": "21edaa8a7a927f1de3792ff9f24cff4313c97fa26f98b869ce13e764590fd555",
|
|
526
|
+
"origin": "ssot-origin",
|
|
527
|
+
"reservation_owner": "ssot-origin",
|
|
528
|
+
"immutable": true,
|
|
529
|
+
"minimum_schema_version": "0.7.0",
|
|
530
|
+
"introduced_in": "0.2.10",
|
|
531
|
+
"status": "draft",
|
|
532
|
+
"supersedes": [],
|
|
533
|
+
"superseded_by": [],
|
|
534
|
+
"status_notes": [
|
|
535
|
+
{
|
|
536
|
+
"at": "2026-05-20T17:45:14Z",
|
|
537
|
+
"note": "Created to govern SSOT MCP worker repair and scoped maturation behavior.",
|
|
538
|
+
"status": "draft"
|
|
539
|
+
}
|
|
540
|
+
]
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"id": "adr:0630",
|
|
544
|
+
"number": 630,
|
|
545
|
+
"slug": "scoped-maturation-claims-and-blockers",
|
|
546
|
+
"title": "Scoped maturation claims ignore unrelated blockers",
|
|
547
|
+
"filename": "ADR-0630-scoped-maturation-claims-and-blockers.yaml",
|
|
548
|
+
"target_path": ".ssot/adr/ADR-0630-scoped-maturation-claims-and-blockers.yaml",
|
|
549
|
+
"sha256": "ac082de9184093c3d74987ca4b8577e9e9f559e6e4b25699ee9e2ce4d905be5f",
|
|
550
|
+
"origin": "ssot-origin",
|
|
551
|
+
"reservation_owner": "ssot-origin",
|
|
552
|
+
"immutable": true,
|
|
553
|
+
"minimum_schema_version": "0.7.0",
|
|
554
|
+
"introduced_in": "0.2.10",
|
|
555
|
+
"status": "draft",
|
|
556
|
+
"supersedes": [],
|
|
557
|
+
"superseded_by": [],
|
|
558
|
+
"status_notes": [
|
|
559
|
+
{
|
|
560
|
+
"at": "2026-05-20T17:45:15Z",
|
|
561
|
+
"note": "Created to govern SSOT MCP worker repair and scoped maturation behavior.",
|
|
562
|
+
"status": "draft"
|
|
563
|
+
}
|
|
564
|
+
]
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
"id": "adr:0631",
|
|
568
|
+
"number": 631,
|
|
569
|
+
"slug": "mcp-mediated-upgrade-uses-current-runtime",
|
|
570
|
+
"title": "MCP mediated upgrade uses the current runtime",
|
|
571
|
+
"filename": "ADR-0631-mcp-mediated-upgrade-uses-current-runtime.yaml",
|
|
572
|
+
"target_path": ".ssot/adr/ADR-0631-mcp-mediated-upgrade-uses-current-runtime.yaml",
|
|
573
|
+
"sha256": "bbf48aec20dc35d89d79cb1011e9a62326c0c19aa0ff9429c6f82fcaf954aa0a",
|
|
574
|
+
"origin": "ssot-origin",
|
|
575
|
+
"reservation_owner": "ssot-origin",
|
|
576
|
+
"immutable": true,
|
|
577
|
+
"minimum_schema_version": "0.7.0",
|
|
578
|
+
"introduced_in": "0.2.10",
|
|
579
|
+
"status": "draft",
|
|
580
|
+
"supersedes": [],
|
|
581
|
+
"superseded_by": [],
|
|
582
|
+
"status_notes": [
|
|
583
|
+
{
|
|
584
|
+
"at": "2026-05-20T17:45:16Z",
|
|
585
|
+
"note": "Created to govern SSOT MCP worker repair and scoped maturation behavior.",
|
|
586
|
+
"status": "draft"
|
|
587
|
+
}
|
|
588
|
+
]
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"id": "adr:0632",
|
|
592
|
+
"number": 632,
|
|
593
|
+
"slug": "targeted-repair-with-baseline-validation-drift",
|
|
594
|
+
"title": "Targeted repair can proceed with unrelated baseline drift",
|
|
595
|
+
"filename": "ADR-0632-targeted-repair-with-baseline-validation-drift.yaml",
|
|
596
|
+
"target_path": ".ssot/adr/ADR-0632-targeted-repair-with-baseline-validation-drift.yaml",
|
|
597
|
+
"sha256": "1bdcd5b8632632610f518105ecac0300794bccb7b86c7be09a6c4e9916bde625",
|
|
598
|
+
"origin": "ssot-origin",
|
|
599
|
+
"reservation_owner": "ssot-origin",
|
|
600
|
+
"immutable": true,
|
|
601
|
+
"minimum_schema_version": "0.7.0",
|
|
602
|
+
"introduced_in": "0.2.10",
|
|
603
|
+
"status": "draft",
|
|
604
|
+
"supersedes": [],
|
|
605
|
+
"superseded_by": [],
|
|
606
|
+
"status_notes": [
|
|
607
|
+
{
|
|
608
|
+
"at": "2026-05-20T17:45:17Z",
|
|
609
|
+
"note": "Created to govern SSOT MCP worker repair and scoped maturation behavior.",
|
|
610
|
+
"status": "draft"
|
|
611
|
+
}
|
|
612
|
+
]
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"id": "adr:0633",
|
|
616
|
+
"number": 633,
|
|
617
|
+
"slug": "public-registry-save-validates-before-write",
|
|
618
|
+
"title": "Public registry save validates before write",
|
|
619
|
+
"filename": "ADR-0633-public-registry-save-validates-before-write.yaml",
|
|
620
|
+
"target_path": ".ssot/adr/ADR-0633-public-registry-save-validates-before-write.yaml",
|
|
621
|
+
"sha256": "7df0543232c6e0f3a076d7c8475153650acd4cbfa18fd9a53644e0e295834b6c",
|
|
622
|
+
"origin": "ssot-origin",
|
|
623
|
+
"reservation_owner": "ssot-origin",
|
|
624
|
+
"immutable": true,
|
|
625
|
+
"minimum_schema_version": "0.7.0",
|
|
626
|
+
"introduced_in": "0.2.10",
|
|
627
|
+
"status": "accepted",
|
|
628
|
+
"supersedes": [],
|
|
629
|
+
"superseded_by": [],
|
|
630
|
+
"status_notes": []
|
|
493
631
|
}
|
|
494
632
|
]
|
|
@@ -0,0 +1,72 @@
|
|
|
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 CLI surface contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "Define the SSOT MCP contract for discovering and safely executing the complete `ssot-registry` CLI surface through MCP tools."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to define full SSOT CLI delegation through ssot-mcp."
|
|
18
|
+
at: "2026-05-20T16:21:38Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
## Purpose
|
|
22
|
+
|
|
23
|
+
Define the SSOT MCP contract for discovering and safely executing the complete `ssot-registry` CLI surface through MCP tools.
|
|
24
|
+
|
|
25
|
+
## Required MCP Tools
|
|
26
|
+
|
|
27
|
+
`get_ssot_cli_surface` SHALL return:
|
|
28
|
+
|
|
29
|
+
- `passed`
|
|
30
|
+
- `global_flags`
|
|
31
|
+
- `top_level_commands`
|
|
32
|
+
- `subcommand_paths`
|
|
33
|
+
- `flags_by_path`
|
|
34
|
+
|
|
35
|
+
`run_ssot_cli` SHALL accept argv tokens after `ssot-registry` and SHALL support:
|
|
36
|
+
|
|
37
|
+
- global flags
|
|
38
|
+
- top-level commands
|
|
39
|
+
- command flags
|
|
40
|
+
- subcommands
|
|
41
|
+
- subcommand flags
|
|
42
|
+
- help requests
|
|
43
|
+
- version requests
|
|
44
|
+
- invalid-argument requests
|
|
45
|
+
|
|
46
|
+
## Execution Result Contract
|
|
47
|
+
|
|
48
|
+
`run_ssot_cli` SHALL return a structured result with:
|
|
49
|
+
|
|
50
|
+
- `passed`
|
|
51
|
+
- `exit_code`
|
|
52
|
+
- `args`
|
|
53
|
+
- `output`
|
|
54
|
+
- `stdout`
|
|
55
|
+
- `stderr`
|
|
56
|
+
|
|
57
|
+
If stdout is JSON, `output` SHOULD contain the parsed JSON payload. If stdout is not JSON, `output` MAY contain the raw stdout text.
|
|
58
|
+
|
|
59
|
+
## Parser Exit Containment
|
|
60
|
+
|
|
61
|
+
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.
|
|
62
|
+
|
|
63
|
+
## Repository Resolution
|
|
64
|
+
|
|
65
|
+
When `ssot-mcp` is pinned to a repository, `run_ssot_cli` SHALL execute 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.
|
|
66
|
+
|
|
67
|
+
## Mutation Notification
|
|
68
|
+
|
|
69
|
+
Successful CLI operations that can mutate registry state SHOULD emit a `registry_updated` event so workers can refresh context.
|
|
70
|
+
spec_kind: "operational"
|
|
71
|
+
adr_ids:
|
|
72
|
+
- "adr:0628"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0630"
|
|
4
|
+
number: 630
|
|
5
|
+
slug: "ssot-mcp-registry-repair-authority"
|
|
6
|
+
title: "SSOT MCP registry repair authority"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This specification defines the SSOT MCP registry repair authority surface. ssot-mcp SHALL expose registry get, list, search, create, update, delete, link, unlink, CLI delegation, target-claim scaffold repair, blocked-transition repair, and bulk blocked-transition repair. Workers SHALL use these tools instead of hand-editing registry files. Repair responses SHALL report changed entity ids, validation result, and retry guidance."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:19Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
This specification defines the SSOT MCP registry repair authority surface. ssot-mcp SHALL expose registry get, list, search, create, update, delete, link, unlink, CLI delegation, target-claim scaffold repair, blocked-transition repair, and bulk blocked-transition repair. Workers SHALL use these tools instead of hand-editing registry files. Repair responses SHALL report changed entity ids, validation result, and retry guidance.
|
|
22
|
+
spec_kind: "operational"
|
|
23
|
+
adr_ids:
|
|
24
|
+
- "adr:0629"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0631"
|
|
4
|
+
number: 631
|
|
5
|
+
slug: "scoped-maturation-blocker-contract"
|
|
6
|
+
title: "Scoped maturation blocker contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This specification defines scoped maturation behavior. claim_next_maturation_slice SHALL honor feature_ids, profile_ids, and boundary_ids. Blocked transitions outside the resolved scope SHALL NOT prevent a scoped claim from receiving a lease. Campaign status for a scoped campaign SHALL report scoped incomplete and blocked counts. Global blocked backlog SHALL NOT leak into targeted work responses."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:20Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
This specification defines scoped maturation behavior. claim_next_maturation_slice SHALL honor feature_ids, profile_ids, and boundary_ids. Blocked transitions outside the resolved scope SHALL NOT prevent a scoped claim from receiving a lease. Campaign status for a scoped campaign SHALL report scoped incomplete and blocked counts. Global blocked backlog SHALL NOT leak into targeted work responses.
|
|
22
|
+
spec_kind: "operational"
|
|
23
|
+
adr_ids:
|
|
24
|
+
- "adr:0630"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0632"
|
|
4
|
+
number: 632
|
|
5
|
+
slug: "mcp-upgrade-delegation-contract"
|
|
6
|
+
title: "MCP upgrade delegation contract"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This specification defines MCP upgrade delegation. When run_ssot_cli delegates upgrade, ssot-mcp SHALL use the currently running binary and installed runtime. It SHALL ignore target-version values supplied to MCP upgrade calls, SHALL add sync-docs when absent, SHALL return normalized_args and warnings, and SHALL NOT attempt package installation or PyPI resolution."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:21Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
This specification defines MCP upgrade delegation. When run_ssot_cli delegates upgrade, ssot-mcp SHALL use the currently running binary and installed runtime. It SHALL ignore target-version values supplied to MCP upgrade calls, SHALL add sync-docs when absent, SHALL return normalized_args and warnings, and SHALL NOT attempt package installation or PyPI resolution.
|
|
22
|
+
spec_kind: "operational"
|
|
23
|
+
adr_ids:
|
|
24
|
+
- "adr:0631"
|
|
25
|
+
- "adr:0628"
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:22Z"
|
|
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
|
+
spec_kind: "operational"
|
|
23
|
+
adr_ids:
|
|
24
|
+
- "adr:0632"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0634"
|
|
4
|
+
number: 634
|
|
5
|
+
slug: "worker-actionability-and-repair-loop"
|
|
6
|
+
title: "Worker actionability and repair loop"
|
|
7
|
+
status: "draft"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This specification defines worker behavior for blocked slices. When claim_next_maturation_slice returns kind=blocked, workers SHALL inspect reason and problem_detail, invoke recommended SSOT MCP repair tools when applicable, retry the scoped claim, and abandon only when the blocker is not repairable through MCP, the lease is stale, or honest claim elevation is impossible."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes:
|
|
15
|
+
-
|
|
16
|
+
status: "draft"
|
|
17
|
+
note: "Created to govern SSOT MCP scoped repair and worker maturation behavior."
|
|
18
|
+
at: "2026-05-20T17:45:23Z"
|
|
19
|
+
references: []
|
|
20
|
+
body: |-
|
|
21
|
+
This specification defines worker behavior for blocked slices. When claim_next_maturation_slice returns kind=blocked, workers SHALL inspect reason and problem_detail, invoke recommended SSOT MCP repair tools when applicable, retry the scoped claim, and abandon only when the blocker is not repairable through MCP, the lease is stale, or honest claim elevation is impossible.
|
|
22
|
+
spec_kind: "operational"
|
|
23
|
+
adr_ids:
|
|
24
|
+
- "adr:0629"
|
|
25
|
+
- "adr:0630"
|
|
26
|
+
- "adr:0632"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
schema_version: "0.7.0"
|
|
2
|
+
kind: "spec"
|
|
3
|
+
id: "spc:0635"
|
|
4
|
+
number: 635
|
|
5
|
+
slug: "registry-save-validation-contract"
|
|
6
|
+
title: "Registry save validation contract"
|
|
7
|
+
status: "accepted"
|
|
8
|
+
origin: "ssot-origin"
|
|
9
|
+
decision_date: null
|
|
10
|
+
tags: []
|
|
11
|
+
summary: "This SPEC defines the validation contract for public `.ssot/registry.json` save operations."
|
|
12
|
+
supersedes: []
|
|
13
|
+
superseded_by: []
|
|
14
|
+
status_notes: []
|
|
15
|
+
references: []
|
|
16
|
+
body: |-
|
|
17
|
+
## Scope
|
|
18
|
+
|
|
19
|
+
This SPEC defines the validation contract for public `.ssot/registry.json` save operations.
|
|
20
|
+
|
|
21
|
+
## Requirements
|
|
22
|
+
|
|
23
|
+
- The public/default `save_registry` API shall validate a candidate registry document before persistence.
|
|
24
|
+
- Validation shall use the same registry validator used by explicit validation commands.
|
|
25
|
+
- Validation failures shall fail closed and shall not replace the existing registry file.
|
|
26
|
+
- The public save API shall infer the repository root from `.ssot/registry.json` when a caller does not provide one.
|
|
27
|
+
- Lock acquisition and atomic replace semantics shall still protect the final write operation.
|
|
28
|
+
- Lock-only persistence shall be available only through an explicitly named unchecked helper.
|
|
29
|
+
- Unchecked persistence shall be reserved for bootstrap, migration, and targeted repair flows with separately documented validation policy.
|
|
30
|
+
- Regression tests shall prove that direct public save rejects invalid payloads and that unchecked save use remains limited to documented callers.
|
|
31
|
+
|
|
32
|
+
## Out of Scope
|
|
33
|
+
|
|
34
|
+
This SPEC does not change the registry schema, graph export format, release snapshot format, or repo-local automation configuration. Repo-local post-mutation validation remains a separate automation layer.
|
|
35
|
+
spec_kind: "operational"
|
|
36
|
+
adr_ids:
|
|
37
|
+
- "adr:0633"
|
|
@@ -650,5 +650,198 @@
|
|
|
650
650
|
"adr_ids": [
|
|
651
651
|
"adr:0627"
|
|
652
652
|
]
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"id": "spc:0629",
|
|
656
|
+
"number": 629,
|
|
657
|
+
"slug": "ssot-mcp-cli-surface-contract",
|
|
658
|
+
"title": "SSOT MCP CLI surface contract",
|
|
659
|
+
"filename": "SPEC-0629-ssot-mcp-cli-surface-contract.yaml",
|
|
660
|
+
"target_path": ".ssot/specs/SPEC-0629-ssot-mcp-cli-surface-contract.yaml",
|
|
661
|
+
"sha256": "00d75a03c3b235d97e6a543bf3828ac8a0aa08d217fcdb3013e23490f99b4c66",
|
|
662
|
+
"origin": "ssot-origin",
|
|
663
|
+
"reservation_owner": "ssot-origin",
|
|
664
|
+
"immutable": true,
|
|
665
|
+
"minimum_schema_version": "0.7.0",
|
|
666
|
+
"introduced_in": "0.2.10",
|
|
667
|
+
"status": "draft",
|
|
668
|
+
"supersedes": [],
|
|
669
|
+
"superseded_by": [],
|
|
670
|
+
"status_notes": [
|
|
671
|
+
{
|
|
672
|
+
"at": "2026-05-20T16:21:38Z",
|
|
673
|
+
"note": "Created to define full SSOT CLI delegation through ssot-mcp.",
|
|
674
|
+
"status": "draft"
|
|
675
|
+
}
|
|
676
|
+
],
|
|
677
|
+
"kind": "operational",
|
|
678
|
+
"adr_ids": [
|
|
679
|
+
"adr:0628"
|
|
680
|
+
]
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
"id": "spc:0630",
|
|
684
|
+
"number": 630,
|
|
685
|
+
"slug": "ssot-mcp-registry-repair-authority",
|
|
686
|
+
"title": "SSOT MCP registry repair authority",
|
|
687
|
+
"filename": "SPEC-0630-ssot-mcp-registry-repair-authority.yaml",
|
|
688
|
+
"target_path": ".ssot/specs/SPEC-0630-ssot-mcp-registry-repair-authority.yaml",
|
|
689
|
+
"sha256": "f20e69acdda6e849cf6cbacee2f63ed4545187a9afa033906b3e5c2388b108b4",
|
|
690
|
+
"origin": "ssot-origin",
|
|
691
|
+
"reservation_owner": "ssot-origin",
|
|
692
|
+
"immutable": true,
|
|
693
|
+
"minimum_schema_version": "0.7.0",
|
|
694
|
+
"introduced_in": "0.2.10",
|
|
695
|
+
"status": "draft",
|
|
696
|
+
"supersedes": [],
|
|
697
|
+
"superseded_by": [],
|
|
698
|
+
"status_notes": [
|
|
699
|
+
{
|
|
700
|
+
"at": "2026-05-20T17:45:19Z",
|
|
701
|
+
"note": "Created to govern SSOT MCP scoped repair and worker maturation behavior.",
|
|
702
|
+
"status": "draft"
|
|
703
|
+
}
|
|
704
|
+
],
|
|
705
|
+
"kind": "operational",
|
|
706
|
+
"adr_ids": [
|
|
707
|
+
"adr:0629"
|
|
708
|
+
]
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
"id": "spc:0631",
|
|
712
|
+
"number": 631,
|
|
713
|
+
"slug": "scoped-maturation-blocker-contract",
|
|
714
|
+
"title": "Scoped maturation blocker contract",
|
|
715
|
+
"filename": "SPEC-0631-scoped-maturation-blocker-contract.yaml",
|
|
716
|
+
"target_path": ".ssot/specs/SPEC-0631-scoped-maturation-blocker-contract.yaml",
|
|
717
|
+
"sha256": "5f254419a626ec8bbb4c496400856e531e82a5042a1cf4a96e68f994714ccf91",
|
|
718
|
+
"origin": "ssot-origin",
|
|
719
|
+
"reservation_owner": "ssot-origin",
|
|
720
|
+
"immutable": true,
|
|
721
|
+
"minimum_schema_version": "0.7.0",
|
|
722
|
+
"introduced_in": "0.2.10",
|
|
723
|
+
"status": "draft",
|
|
724
|
+
"supersedes": [],
|
|
725
|
+
"superseded_by": [],
|
|
726
|
+
"status_notes": [
|
|
727
|
+
{
|
|
728
|
+
"at": "2026-05-20T17:45:20Z",
|
|
729
|
+
"note": "Created to govern SSOT MCP scoped repair and worker maturation behavior.",
|
|
730
|
+
"status": "draft"
|
|
731
|
+
}
|
|
732
|
+
],
|
|
733
|
+
"kind": "operational",
|
|
734
|
+
"adr_ids": [
|
|
735
|
+
"adr:0630"
|
|
736
|
+
]
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
"id": "spc:0632",
|
|
740
|
+
"number": 632,
|
|
741
|
+
"slug": "mcp-upgrade-delegation-contract",
|
|
742
|
+
"title": "MCP upgrade delegation contract",
|
|
743
|
+
"filename": "SPEC-0632-mcp-upgrade-delegation-contract.yaml",
|
|
744
|
+
"target_path": ".ssot/specs/SPEC-0632-mcp-upgrade-delegation-contract.yaml",
|
|
745
|
+
"sha256": "498421694a5810454488ff83615fee2eb0dbc219b30f36be60d2bee01cf8776b",
|
|
746
|
+
"origin": "ssot-origin",
|
|
747
|
+
"reservation_owner": "ssot-origin",
|
|
748
|
+
"immutable": true,
|
|
749
|
+
"minimum_schema_version": "0.7.0",
|
|
750
|
+
"introduced_in": "0.2.10",
|
|
751
|
+
"status": "draft",
|
|
752
|
+
"supersedes": [],
|
|
753
|
+
"superseded_by": [],
|
|
754
|
+
"status_notes": [
|
|
755
|
+
{
|
|
756
|
+
"at": "2026-05-20T17:45:21Z",
|
|
757
|
+
"note": "Created to govern SSOT MCP scoped repair and worker maturation behavior.",
|
|
758
|
+
"status": "draft"
|
|
759
|
+
}
|
|
760
|
+
],
|
|
761
|
+
"kind": "operational",
|
|
762
|
+
"adr_ids": [
|
|
763
|
+
"adr:0631",
|
|
764
|
+
"adr:0628"
|
|
765
|
+
]
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
"id": "spc:0633",
|
|
769
|
+
"number": 633,
|
|
770
|
+
"slug": "targeted-scaffold-repair-contract",
|
|
771
|
+
"title": "Targeted scaffold repair contract",
|
|
772
|
+
"filename": "SPEC-0633-targeted-scaffold-repair-contract.yaml",
|
|
773
|
+
"target_path": ".ssot/specs/SPEC-0633-targeted-scaffold-repair-contract.yaml",
|
|
774
|
+
"sha256": "82105e8e4ea6bb4be30a5d29db1d240b870213615c8b0b71b2cfecfd5367cbd9",
|
|
775
|
+
"origin": "ssot-origin",
|
|
776
|
+
"reservation_owner": "ssot-origin",
|
|
777
|
+
"immutable": true,
|
|
778
|
+
"minimum_schema_version": "0.7.0",
|
|
779
|
+
"introduced_in": "0.2.10",
|
|
780
|
+
"status": "draft",
|
|
781
|
+
"supersedes": [],
|
|
782
|
+
"superseded_by": [],
|
|
783
|
+
"status_notes": [
|
|
784
|
+
{
|
|
785
|
+
"at": "2026-05-20T17:45:22Z",
|
|
786
|
+
"note": "Created to govern SSOT MCP scoped repair and worker maturation behavior.",
|
|
787
|
+
"status": "draft"
|
|
788
|
+
}
|
|
789
|
+
],
|
|
790
|
+
"kind": "operational",
|
|
791
|
+
"adr_ids": [
|
|
792
|
+
"adr:0632"
|
|
793
|
+
]
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"id": "spc:0634",
|
|
797
|
+
"number": 634,
|
|
798
|
+
"slug": "worker-actionability-and-repair-loop",
|
|
799
|
+
"title": "Worker actionability and repair loop",
|
|
800
|
+
"filename": "SPEC-0634-worker-actionability-and-repair-loop.yaml",
|
|
801
|
+
"target_path": ".ssot/specs/SPEC-0634-worker-actionability-and-repair-loop.yaml",
|
|
802
|
+
"sha256": "1fd5ad770004e8a736ca398c18f12e7b849880c76a05e93bb71659218a44e787",
|
|
803
|
+
"origin": "ssot-origin",
|
|
804
|
+
"reservation_owner": "ssot-origin",
|
|
805
|
+
"immutable": true,
|
|
806
|
+
"minimum_schema_version": "0.7.0",
|
|
807
|
+
"introduced_in": "0.2.10",
|
|
808
|
+
"status": "draft",
|
|
809
|
+
"supersedes": [],
|
|
810
|
+
"superseded_by": [],
|
|
811
|
+
"status_notes": [
|
|
812
|
+
{
|
|
813
|
+
"at": "2026-05-20T17:45:23Z",
|
|
814
|
+
"note": "Created to govern SSOT MCP scoped repair and worker maturation behavior.",
|
|
815
|
+
"status": "draft"
|
|
816
|
+
}
|
|
817
|
+
],
|
|
818
|
+
"kind": "operational",
|
|
819
|
+
"adr_ids": [
|
|
820
|
+
"adr:0629",
|
|
821
|
+
"adr:0630",
|
|
822
|
+
"adr:0632"
|
|
823
|
+
]
|
|
824
|
+
},
|
|
825
|
+
{
|
|
826
|
+
"id": "spc:0635",
|
|
827
|
+
"number": 635,
|
|
828
|
+
"slug": "registry-save-validation-contract",
|
|
829
|
+
"title": "Registry save validation contract",
|
|
830
|
+
"filename": "SPEC-0635-registry-save-validation-contract.yaml",
|
|
831
|
+
"target_path": ".ssot/specs/SPEC-0635-registry-save-validation-contract.yaml",
|
|
832
|
+
"sha256": "7eb90a861c39f042c4f85afc354d4bf91848ac080f9f303ccf38bd8697bcc3af",
|
|
833
|
+
"origin": "ssot-origin",
|
|
834
|
+
"reservation_owner": "ssot-origin",
|
|
835
|
+
"immutable": true,
|
|
836
|
+
"minimum_schema_version": "0.7.0",
|
|
837
|
+
"introduced_in": "0.2.10",
|
|
838
|
+
"status": "accepted",
|
|
839
|
+
"supersedes": [],
|
|
840
|
+
"superseded_by": [],
|
|
841
|
+
"status_notes": [],
|
|
842
|
+
"kind": "operational",
|
|
843
|
+
"adr_ids": [
|
|
844
|
+
"adr:0633"
|
|
845
|
+
]
|
|
653
846
|
}
|
|
654
847
|
]
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ssot-contracts
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.20.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
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/SOURCES.txt
RENAMED
|
@@ -52,6 +52,12 @@ src/ssot_contracts/templates/adr/ADR-0622-definitions-govern-ssot-vocabulary.yam
|
|
|
52
52
|
src/ssot_contracts/templates/adr/ADR-0625-claim-tier-gates-and-core-promotion.yaml
|
|
53
53
|
src/ssot_contracts/templates/adr/ADR-0626-externally-authored-validation-as-t4.yaml
|
|
54
54
|
src/ssot_contracts/templates/adr/ADR-0627-feature-parent-links-are-inventory-composition.yaml
|
|
55
|
+
src/ssot_contracts/templates/adr/ADR-0628-ssot-mcp-cli-surface-delegation.yaml
|
|
56
|
+
src/ssot_contracts/templates/adr/ADR-0629-ssot-mcp-worker-repair-authority.yaml
|
|
57
|
+
src/ssot_contracts/templates/adr/ADR-0630-scoped-maturation-claims-and-blockers.yaml
|
|
58
|
+
src/ssot_contracts/templates/adr/ADR-0631-mcp-mediated-upgrade-uses-current-runtime.yaml
|
|
59
|
+
src/ssot_contracts/templates/adr/ADR-0632-targeted-repair-with-baseline-validation-drift.yaml
|
|
60
|
+
src/ssot_contracts/templates/adr/ADR-0633-public-registry-save-validates-before-write.yaml
|
|
55
61
|
src/ssot_contracts/templates/adr/__init__.py
|
|
56
62
|
src/ssot_contracts/templates/adr/manifest.json
|
|
57
63
|
src/ssot_contracts/templates/specs/SPEC-0600-registry-core.yaml
|
|
@@ -83,5 +89,12 @@ src/ssot_contracts/templates/specs/SPEC-0625-claim-tier-gates.yaml
|
|
|
83
89
|
src/ssot_contracts/templates/specs/SPEC-0626-external-validation-evidence.yaml
|
|
84
90
|
src/ssot_contracts/templates/specs/SPEC-0627-feature-parent-link-contract.yaml
|
|
85
91
|
src/ssot_contracts/templates/specs/SPEC-0628-feature-parent-cli-contract.yaml
|
|
92
|
+
src/ssot_contracts/templates/specs/SPEC-0629-ssot-mcp-cli-surface-contract.yaml
|
|
93
|
+
src/ssot_contracts/templates/specs/SPEC-0630-ssot-mcp-registry-repair-authority.yaml
|
|
94
|
+
src/ssot_contracts/templates/specs/SPEC-0631-scoped-maturation-blocker-contract.yaml
|
|
95
|
+
src/ssot_contracts/templates/specs/SPEC-0632-mcp-upgrade-delegation-contract.yaml
|
|
96
|
+
src/ssot_contracts/templates/specs/SPEC-0633-targeted-scaffold-repair-contract.yaml
|
|
97
|
+
src/ssot_contracts/templates/specs/SPEC-0634-worker-actionability-and-repair-loop.yaml
|
|
98
|
+
src/ssot_contracts/templates/specs/SPEC-0635-registry-save-validation-contract.yaml
|
|
86
99
|
src/ssot_contracts/templates/specs/__init__.py
|
|
87
100
|
src/ssot_contracts/templates/specs/manifest.json
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/contract_data.py
RENAMED
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/generated/python/ids.py
RENAMED
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/__init__.py
RENAMED
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/adr.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/schema/spec.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts/templates/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/requires.txt
RENAMED
|
File without changes
|
{ssot_contracts-0.2.19.dev2 → ssot_contracts-0.2.20.dev1}/src/ssot_contracts.egg-info/top_level.txt
RENAMED
|
File without changes
|