ssot-contracts 0.2.4__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.4/PKG-INFO +34 -0
- ssot_contracts-0.2.4/README.md +8 -0
- ssot_contracts-0.2.4/pyproject.toml +45 -0
- ssot_contracts-0.2.4/setup.cfg +4 -0
- ssot_contracts-0.2.4/src/ssot_contracts/__init__.py +20 -0
- ssot_contracts-0.2.4/src/ssot_contracts/contract_data.py +92 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/__init__.py +1 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/python/__init__.py +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/python/cli_metadata.py +6 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/python/enums.py +24 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/python/ids.py +8 -0
- ssot_contracts-0.2.4/src/ssot_contracts/generated/python/tui_metadata.py +18 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/__init__.py +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/boundary.snapshot.schema.json +15 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/certification.report.schema.json +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/graph.export.schema.json +54 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/published.snapshot.schema.json +17 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/registry.schema.json +1189 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/release.snapshot.schema.json +20 -0
- ssot_contracts-0.2.4/src/ssot_contracts/schema/validation.report.schema.json +12 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/__init__.py +31 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0001-canonical-json-registry.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0002-features-are-targetable-units.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0003-issues-are-plannable-work-items.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0004-entity-centric-registry-derived-graph.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0005-normalized-prefixed-ids.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0006-claim-status-vs-tier.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0007-feature-implementation-vs-lifecycle.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0008-immutable-boundary-and-release-snapshots.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0009-fail-closed-guards.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0010-generated-projections-are-non-canonical.md +18 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0011-explicit-schema-versioning.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0012-portable-core-repo-specific-evidence-adapters.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0013-ssot-path-and-filename-length-limits.md +17 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/ADR-0014-profiles-as-reusable-feature-bundles.md +38 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/__init__.py +0 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/adr/manifest.json +254 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/registry.full.json +223 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/registry.minimal.json +142 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0001-registry-core.md +55 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0002-cli.md +30 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0003-graph-model.md +18 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0004-feature-lifecycle.md +12 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0005-claim-statuses.md +16 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0006-claim-tiers.md +11 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0007-snapshots-and-reports.md +12 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0008-repo-policy.md +28 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0009-gates-and-fences.md +13 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0010-id-normalization.md +21 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0011-file-tree.md +28 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0012-planning-horizons.md +14 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0013-python-api.md +25 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0014-ssot-path-length-policy.md +24 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/SPEC-0015-profile-evaluation-and-boundary-resolution.md +58 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/__init__.py +0 -0
- ssot_contracts-0.2.4/src/ssot_contracts/templates/specs/manifest.json +287 -0
- ssot_contracts-0.2.4/src/ssot_contracts.egg-info/PKG-INFO +34 -0
- ssot_contracts-0.2.4/src/ssot_contracts.egg-info/SOURCES.txt +59 -0
- ssot_contracts-0.2.4/src/ssot_contracts.egg-info/dependency_links.txt +1 -0
- ssot_contracts-0.2.4/src/ssot_contracts.egg-info/requires.txt +3 -0
- ssot_contracts-0.2.4/src/ssot_contracts.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ssot-contracts
|
|
3
|
+
Version: 0.2.4
|
|
4
|
+
Summary: Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT.
|
|
5
|
+
Author-email: Jacob Stewart <jacob@swarmauri.com>
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/groupsum/ssot-registry
|
|
8
|
+
Project-URL: Repository, https://github.com/groupsum/ssot-registry
|
|
9
|
+
Project-URL: Issues, https://github.com/groupsum/ssot-registry/issues
|
|
10
|
+
Keywords: ssot,contracts,schemas,templates,manifests
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: File Formats :: JSON
|
|
21
|
+
Classifier: Topic :: File Formats :: JSON :: JSON Schema
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Requires-Python: <3.14,>=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
Requires-Dist: tomli>=2.0.1; python_version < "3.11"
|
|
26
|
+
|
|
27
|
+
# ssot-contracts
|
|
28
|
+
|
|
29
|
+
Canonical machine-readable SSOT artifacts:
|
|
30
|
+
|
|
31
|
+
- JSON Schemas
|
|
32
|
+
- packaged registry templates
|
|
33
|
+
- packaged ssot-origin ADR and SPEC manifests
|
|
34
|
+
- generated Python contract metadata
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=69", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "ssot-contracts"
|
|
7
|
+
version = "0.2.4"
|
|
8
|
+
description = "Canonical schemas, templates, manifests, and generated Python contract artifacts for SSOT."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10,<3.14"
|
|
11
|
+
license = "Apache-2.0"
|
|
12
|
+
authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
|
|
13
|
+
dependencies = ["tomli>=2.0.1; python_version < '3.11'"]
|
|
14
|
+
keywords = ["ssot", "contracts", "schemas", "templates", "manifests"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 3 - Alpha",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"Operating System :: OS Independent",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Programming Language :: Python :: 3.13",
|
|
25
|
+
"Topic :: File Formats :: JSON",
|
|
26
|
+
"Topic :: File Formats :: JSON :: JSON Schema",
|
|
27
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.urls]
|
|
31
|
+
Homepage = "https://github.com/groupsum/ssot-registry"
|
|
32
|
+
Repository = "https://github.com/groupsum/ssot-registry"
|
|
33
|
+
Issues = "https://github.com/groupsum/ssot-registry/issues"
|
|
34
|
+
|
|
35
|
+
[tool.setuptools]
|
|
36
|
+
package-dir = {"" = "src"}
|
|
37
|
+
|
|
38
|
+
[tool.setuptools.packages.find]
|
|
39
|
+
where = ["src"]
|
|
40
|
+
|
|
41
|
+
[tool.setuptools.package-data]
|
|
42
|
+
"ssot_contracts.schema" = ["*.json"]
|
|
43
|
+
"ssot_contracts.templates" = ["*.json"]
|
|
44
|
+
"ssot_contracts.templates.adr" = ["*.md", "*.json"]
|
|
45
|
+
"ssot_contracts.templates.specs" = ["*.md", "*.json"]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from .contract_data import CONTRACT_DATA
|
|
2
|
+
from .schema import list_schema_names, load_schema_text
|
|
3
|
+
from .templates import (
|
|
4
|
+
list_document_manifest_entries,
|
|
5
|
+
load_document_manifest,
|
|
6
|
+
load_template_text,
|
|
7
|
+
read_packaged_document_bytes,
|
|
8
|
+
read_packaged_document_text,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"CONTRACT_DATA",
|
|
13
|
+
"list_document_manifest_entries",
|
|
14
|
+
"list_schema_names",
|
|
15
|
+
"load_document_manifest",
|
|
16
|
+
"load_schema_text",
|
|
17
|
+
"load_template_text",
|
|
18
|
+
"read_packaged_document_bytes",
|
|
19
|
+
"read_packaged_document_text",
|
|
20
|
+
]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
CONTRACT_DATA = {
|
|
4
|
+
"schema_version": 7,
|
|
5
|
+
"output_formats": ["json", "csv", "df", "yaml", "toml"],
|
|
6
|
+
"entity_sections": [
|
|
7
|
+
{"key": "features", "label": "Features"},
|
|
8
|
+
{"key": "profiles", "label": "Profiles"},
|
|
9
|
+
{"key": "tests", "label": "Tests"},
|
|
10
|
+
{"key": "claims", "label": "Claims"},
|
|
11
|
+
{"key": "evidence", "label": "Evidence"},
|
|
12
|
+
{"key": "issues", "label": "Issues"},
|
|
13
|
+
{"key": "risks", "label": "Risks"},
|
|
14
|
+
{"key": "boundaries", "label": "Boundaries"},
|
|
15
|
+
{"key": "releases", "label": "Releases"},
|
|
16
|
+
{"key": "adrs", "label": "ADRs"},
|
|
17
|
+
{"key": "specs", "label": "Specs"},
|
|
18
|
+
],
|
|
19
|
+
"entity_prefixes": {
|
|
20
|
+
"repo": "repo:",
|
|
21
|
+
"features": "feat:",
|
|
22
|
+
"profiles": "prf:",
|
|
23
|
+
"tests": "tst:",
|
|
24
|
+
"claims": "clm:",
|
|
25
|
+
"evidence": "evd:",
|
|
26
|
+
"issues": "iss:",
|
|
27
|
+
"risks": "rsk:",
|
|
28
|
+
"boundaries": "bnd:",
|
|
29
|
+
"releases": "rel:",
|
|
30
|
+
"adrs": "adr:",
|
|
31
|
+
"specs": "spc:",
|
|
32
|
+
},
|
|
33
|
+
"graph_node_kind": {
|
|
34
|
+
"features": "feature",
|
|
35
|
+
"profiles": "profile",
|
|
36
|
+
"tests": "test",
|
|
37
|
+
"claims": "claim",
|
|
38
|
+
"evidence": "evidence",
|
|
39
|
+
"issues": "issue",
|
|
40
|
+
"risks": "risk",
|
|
41
|
+
"boundaries": "boundary",
|
|
42
|
+
"releases": "release",
|
|
43
|
+
},
|
|
44
|
+
"choice_sets": {
|
|
45
|
+
"feature_implementation_statuses": ["absent", "partial", "implemented"],
|
|
46
|
+
"feature_lifecycle_stages": ["active", "deprecated", "obsolete", "removed"],
|
|
47
|
+
"planning_horizons": ["current", "next", "future", "explicit", "backlog", "out_of_bounds"],
|
|
48
|
+
"test_statuses": ["planned", "passing", "failing", "blocked", "skipped"],
|
|
49
|
+
"profile_statuses": ["draft", "active", "retired"],
|
|
50
|
+
"profile_kinds": ["capability", "certification", "deployment", "interoperability"],
|
|
51
|
+
"claim_tiers": ["T0", "T1", "T2", "T3", "T4"],
|
|
52
|
+
"claim_statuses": [
|
|
53
|
+
"proposed",
|
|
54
|
+
"declared",
|
|
55
|
+
"implemented",
|
|
56
|
+
"asserted",
|
|
57
|
+
"evidenced",
|
|
58
|
+
"certified",
|
|
59
|
+
"promoted",
|
|
60
|
+
"published",
|
|
61
|
+
"blocked",
|
|
62
|
+
"retired",
|
|
63
|
+
],
|
|
64
|
+
"evidence_statuses": ["planned", "collected", "passed", "failed", "stale"],
|
|
65
|
+
"issue_statuses": ["open", "in_progress", "blocked", "resolved", "closed"],
|
|
66
|
+
"risk_statuses": ["active", "mitigated", "accepted", "retired"],
|
|
67
|
+
"boundary_statuses": ["draft", "active", "frozen", "retired"],
|
|
68
|
+
"release_statuses": ["draft", "candidate", "certified", "promoted", "published", "revoked"],
|
|
69
|
+
"severities": ["low", "medium", "high", "critical"],
|
|
70
|
+
"document_statuses": ["draft", "in_review", "accepted", "rejected", "superseded", "withdrawn", "retired"],
|
|
71
|
+
"spec_kinds": ["normative", "operational", "governance", "local-policy"],
|
|
72
|
+
},
|
|
73
|
+
"document_contract": {
|
|
74
|
+
"kinds": ["adr", "spec"],
|
|
75
|
+
"sections": {"adr": "adrs", "spec": "specs"},
|
|
76
|
+
"filename_prefixes": {"adr": "ADR", "spec": "SPEC"},
|
|
77
|
+
"path_keys": {"adr": "adr_root", "spec": "spec_root"},
|
|
78
|
+
"reservation_keys": {"adr": "adr", "spec": "spec"},
|
|
79
|
+
"default_reservations": {
|
|
80
|
+
"adr": [
|
|
81
|
+
{"owner": "ssot-origin", "start": 1, "end": 499, "immutable": True, "deletable": False, "assignable_by_repo": False},
|
|
82
|
+
{"owner": "ssot-core", "start": 500, "end": 999, "immutable": True, "deletable": False, "assignable_by_repo": False},
|
|
83
|
+
{"owner": "repo-local-default", "start": 1000, "end": 4999, "immutable": False, "deletable": True, "assignable_by_repo": True},
|
|
84
|
+
],
|
|
85
|
+
"spec": [
|
|
86
|
+
{"owner": "ssot-origin", "start": 1, "end": 499, "immutable": True, "deletable": False, "assignable_by_repo": False},
|
|
87
|
+
{"owner": "ssot-core", "start": 500, "end": 999, "immutable": True, "deletable": False, "assignable_by_repo": False},
|
|
88
|
+
{"owner": "repo-local-default", "start": 1000, "end": 4999, "immutable": False, "deletable": True, "assignable_by_repo": True},
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__all__: list[str] = []
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from .cli_metadata import CLI_COMMAND_LABELS, OUTPUT_FORMATS
|
|
2
|
+
from .enums import *
|
|
3
|
+
from .ids import *
|
|
4
|
+
from .tui_metadata import ENTITY_SECTIONS, ENTITY_VIEW_SECTIONS
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"CLI_COMMAND_LABELS",
|
|
8
|
+
"ENTITY_SECTIONS",
|
|
9
|
+
"ENTITY_VIEW_SECTIONS",
|
|
10
|
+
"OUTPUT_FORMATS",
|
|
11
|
+
]
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from ssot_contracts.contract_data import CONTRACT_DATA
|
|
4
|
+
|
|
5
|
+
OUTPUT_FORMATS = tuple(CONTRACT_DATA["output_formats"])
|
|
6
|
+
CLI_COMMAND_LABELS = tuple(section["key"] for section in CONTRACT_DATA["entity_sections"] if section["key"] not in {"adrs", "specs"})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from ssot_contracts.contract_data import CONTRACT_DATA
|
|
4
|
+
|
|
5
|
+
SCHEMA_VERSION = CONTRACT_DATA["schema_version"]
|
|
6
|
+
ENTITY_PREFIXES = CONTRACT_DATA["entity_prefixes"]
|
|
7
|
+
GRAPH_NODE_KIND = CONTRACT_DATA["graph_node_kind"]
|
|
8
|
+
|
|
9
|
+
FEATURE_IMPLEMENTATION_STATUSES = set(CONTRACT_DATA["choice_sets"]["feature_implementation_statuses"])
|
|
10
|
+
FEATURE_LIFECYCLE_STAGES = set(CONTRACT_DATA["choice_sets"]["feature_lifecycle_stages"])
|
|
11
|
+
PLANNING_HORIZONS = set(CONTRACT_DATA["choice_sets"]["planning_horizons"])
|
|
12
|
+
TEST_STATUSES = set(CONTRACT_DATA["choice_sets"]["test_statuses"])
|
|
13
|
+
PROFILE_STATUSES = set(CONTRACT_DATA["choice_sets"]["profile_statuses"])
|
|
14
|
+
PROFILE_KINDS = set(CONTRACT_DATA["choice_sets"]["profile_kinds"])
|
|
15
|
+
CLAIM_TIERS = set(CONTRACT_DATA["choice_sets"]["claim_tiers"])
|
|
16
|
+
CLAIM_STATUSES = set(CONTRACT_DATA["choice_sets"]["claim_statuses"])
|
|
17
|
+
EVIDENCE_STATUSES = set(CONTRACT_DATA["choice_sets"]["evidence_statuses"])
|
|
18
|
+
ISSUE_STATUSES = set(CONTRACT_DATA["choice_sets"]["issue_statuses"])
|
|
19
|
+
RISK_STATUSES = set(CONTRACT_DATA["choice_sets"]["risk_statuses"])
|
|
20
|
+
BOUNDARY_STATUSES = set(CONTRACT_DATA["choice_sets"]["boundary_statuses"])
|
|
21
|
+
RELEASE_STATUSES = set(CONTRACT_DATA["choice_sets"]["release_statuses"])
|
|
22
|
+
SEVERITIES = set(CONTRACT_DATA["choice_sets"]["severities"])
|
|
23
|
+
DOCUMENT_STATUSES = tuple(CONTRACT_DATA["choice_sets"]["document_statuses"])
|
|
24
|
+
SPEC_KINDS = set(CONTRACT_DATA["choice_sets"]["spec_kinds"])
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from ssot_contracts.contract_data import CONTRACT_DATA
|
|
4
|
+
|
|
5
|
+
ENTITY_SECTIONS = tuple((section["key"], section["label"]) for section in CONTRACT_DATA["entity_sections"])
|
|
6
|
+
ENTITY_VIEW_SECTIONS = {
|
|
7
|
+
"features": ("id", "title", "implementation_status"),
|
|
8
|
+
"profiles": ("id", "title", "status"),
|
|
9
|
+
"tests": ("id", "title", "status"),
|
|
10
|
+
"claims": ("id", "title", "status"),
|
|
11
|
+
"evidence": ("id", "title", "status"),
|
|
12
|
+
"issues": ("id", "title", "status"),
|
|
13
|
+
"risks": ("id", "title", "status"),
|
|
14
|
+
"boundaries": ("id", "title", "status"),
|
|
15
|
+
"releases": ("id", "version", "status"),
|
|
16
|
+
"adrs": ("id", "title", "status"),
|
|
17
|
+
"specs": ("id", "title", "status"),
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib import resources
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def list_schema_names() -> list[str]:
|
|
7
|
+
return sorted(entry.name for entry in resources.files(__package__).iterdir() if entry.name.endswith(".json"))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def load_schema_text(name: str) -> str:
|
|
11
|
+
return resources.files(__package__).joinpath(name).read_text(encoding="utf-8")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://example.invalid/ssot-registry/boundary.snapshot.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"schema_version",
|
|
7
|
+
"kind",
|
|
8
|
+
"generated_at",
|
|
9
|
+
"registry_path",
|
|
10
|
+
"registry_sha256",
|
|
11
|
+
"boundary",
|
|
12
|
+
"features",
|
|
13
|
+
"summary"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://example.invalid/ssot-registry/graph.export.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"nodes",
|
|
7
|
+
"edges"
|
|
8
|
+
],
|
|
9
|
+
"properties": {
|
|
10
|
+
"nodes": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": [
|
|
15
|
+
"id",
|
|
16
|
+
"kind"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"id": {
|
|
20
|
+
"type": "string"
|
|
21
|
+
},
|
|
22
|
+
"kind": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"edges": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"required": [
|
|
34
|
+
"type",
|
|
35
|
+
"from",
|
|
36
|
+
"to"
|
|
37
|
+
],
|
|
38
|
+
"properties": {
|
|
39
|
+
"type": {
|
|
40
|
+
"type": "string"
|
|
41
|
+
},
|
|
42
|
+
"from": {
|
|
43
|
+
"type": "string"
|
|
44
|
+
},
|
|
45
|
+
"to": {
|
|
46
|
+
"type": "string"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"additionalProperties": false
|
|
54
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://example.invalid/ssot-registry/published.snapshot.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": [
|
|
6
|
+
"schema_version",
|
|
7
|
+
"kind",
|
|
8
|
+
"generated_at",
|
|
9
|
+
"registry_path",
|
|
10
|
+
"registry_sha256",
|
|
11
|
+
"release",
|
|
12
|
+
"boundary",
|
|
13
|
+
"claims",
|
|
14
|
+
"evidence",
|
|
15
|
+
"summary"
|
|
16
|
+
]
|
|
17
|
+
}
|