ssot-core 0.2.7__py3-none-any.whl

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.
Files changed (112) hide show
  1. ssot_core-0.2.7.dist-info/METADATA +935 -0
  2. ssot_core-0.2.7.dist-info/RECORD +112 -0
  3. ssot_core-0.2.7.dist-info/WHEEL +5 -0
  4. ssot_core-0.2.7.dist-info/top_level.txt +1 -0
  5. ssot_registry/__init__.py +3 -0
  6. ssot_registry/__main__.py +4 -0
  7. ssot_registry/api/__init__.py +102 -0
  8. ssot_registry/api/boundary.py +55 -0
  9. ssot_registry/api/claims.py +35 -0
  10. ssot_registry/api/documents.py +599 -0
  11. ssot_registry/api/entity_ops.py +323 -0
  12. ssot_registry/api/evidence.py +64 -0
  13. ssot_registry/api/graph.py +57 -0
  14. ssot_registry/api/init.py +52 -0
  15. ssot_registry/api/lifecycle.py +66 -0
  16. ssot_registry/api/load.py +13 -0
  17. ssot_registry/api/plan.py +72 -0
  18. ssot_registry/api/profile_eval.py +175 -0
  19. ssot_registry/api/profile_resolution.py +33 -0
  20. ssot_registry/api/registry.py +21 -0
  21. ssot_registry/api/release.py +219 -0
  22. ssot_registry/api/save.py +9 -0
  23. ssot_registry/api/upgrade.py +589 -0
  24. ssot_registry/api/validate.py +55 -0
  25. ssot_registry/cli/__init__.py +5 -0
  26. ssot_registry/cli/adr_cmd.py +2 -0
  27. ssot_registry/cli/boundary_cmd.py +2 -0
  28. ssot_registry/cli/claim_cmd.py +2 -0
  29. ssot_registry/cli/common.py +1 -0
  30. ssot_registry/cli/evidence_cmd.py +2 -0
  31. ssot_registry/cli/feature_cmd.py +2 -0
  32. ssot_registry/cli/graph_cmd.py +2 -0
  33. ssot_registry/cli/init_cmd.py +2 -0
  34. ssot_registry/cli/issue_cmd.py +2 -0
  35. ssot_registry/cli/main.py +39 -0
  36. ssot_registry/cli/profile_cmd.py +2 -0
  37. ssot_registry/cli/registry_cmd.py +2 -0
  38. ssot_registry/cli/release_cmd.py +2 -0
  39. ssot_registry/cli/risk_cmd.py +2 -0
  40. ssot_registry/cli/spec_cmd.py +2 -0
  41. ssot_registry/cli/test_cmd.py +2 -0
  42. ssot_registry/cli/upgrade_cmd.py +2 -0
  43. ssot_registry/cli/validate_cmd.py +2 -0
  44. ssot_registry/graph/__init__.py +7 -0
  45. ssot_registry/graph/export_dot.py +1 -0
  46. ssot_registry/graph/export_json.py +1 -0
  47. ssot_registry/guards/__init__.py +23 -0
  48. ssot_registry/guards/certification.py +152 -0
  49. ssot_registry/guards/claim_closure.py +93 -0
  50. ssot_registry/guards/document_lifecycle.py +68 -0
  51. ssot_registry/guards/document_supersession.py +82 -0
  52. ssot_registry/guards/feature_requirements.py +81 -0
  53. ssot_registry/guards/lifecycle.py +54 -0
  54. ssot_registry/guards/profile_requirements.py +43 -0
  55. ssot_registry/guards/promotion.py +41 -0
  56. ssot_registry/guards/publication.py +31 -0
  57. ssot_registry/model/__init__.py +53 -0
  58. ssot_registry/model/boundary.py +12 -0
  59. ssot_registry/model/claim.py +15 -0
  60. ssot_registry/model/document.py +107 -0
  61. ssot_registry/model/enums.py +117 -0
  62. ssot_registry/model/evidence.py +14 -0
  63. ssot_registry/model/feature.py +15 -0
  64. ssot_registry/model/ids.py +11 -0
  65. ssot_registry/model/issue.py +18 -0
  66. ssot_registry/model/profile.py +15 -0
  67. ssot_registry/model/registry.py +171 -0
  68. ssot_registry/model/release.py +12 -0
  69. ssot_registry/model/risk.py +17 -0
  70. ssot_registry/model/test.py +14 -0
  71. ssot_registry/reports/__init__.py +9 -0
  72. ssot_registry/reports/certification_report.py +11 -0
  73. ssot_registry/reports/summary.py +6 -0
  74. ssot_registry/reports/validation_report.py +12 -0
  75. ssot_registry/schema/__init__.py +0 -0
  76. ssot_registry/schema/adr.schema.json +105 -0
  77. ssot_registry/schema/boundary.snapshot.schema.json +15 -0
  78. ssot_registry/schema/certification.report.schema.json +11 -0
  79. ssot_registry/schema/graph.export.schema.json +54 -0
  80. ssot_registry/schema/published.snapshot.schema.json +17 -0
  81. ssot_registry/schema/registry.schema.json +1190 -0
  82. ssot_registry/schema/release.snapshot.schema.json +20 -0
  83. ssot_registry/schema/spec.schema.json +114 -0
  84. ssot_registry/schema/validation.report.schema.json +12 -0
  85. ssot_registry/snapshots/__init__.py +9 -0
  86. ssot_registry/snapshots/boundary_snapshot.py +33 -0
  87. ssot_registry/snapshots/hashing.py +9 -0
  88. ssot_registry/snapshots/published_snapshot.py +37 -0
  89. ssot_registry/snapshots/release_snapshot.py +52 -0
  90. ssot_registry/templates/__init__.py +0 -0
  91. ssot_registry/templates/registry.full.json +223 -0
  92. ssot_registry/templates/registry.minimal.json +142 -0
  93. ssot_registry/util/__init__.py +18 -0
  94. ssot_registry/util/document_io.py +592 -0
  95. ssot_registry/util/errors.py +10 -0
  96. ssot_registry/util/formatting.py +155 -0
  97. ssot_registry/util/fs.py +59 -0
  98. ssot_registry/util/jsonio.py +19 -0
  99. ssot_registry/util/time.py +7 -0
  100. ssot_registry/validators/__init__.py +24 -0
  101. ssot_registry/validators/bidirectional.py +20 -0
  102. ssot_registry/validators/coverage.py +76 -0
  103. ssot_registry/validators/documents.py +242 -0
  104. ssot_registry/validators/filesystem.py +94 -0
  105. ssot_registry/validators/identity.py +56 -0
  106. ssot_registry/validators/lifecycle.py +27 -0
  107. ssot_registry/validators/promotion.py +3 -0
  108. ssot_registry/validators/references.py +48 -0
  109. ssot_registry/validators/reservations.py +53 -0
  110. ssot_registry/validators/structure.py +307 -0
  111. ssot_registry/validators/tiers.py +30 -0
  112. ssot_registry/version.py +46 -0
@@ -0,0 +1,935 @@
1
+ Metadata-Version: 2.4
2
+ Name: ssot-core
3
+ Version: 0.2.7
4
+ Summary: Core Python runtime, registry model, validation, and release workflow APIs 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,core,registry,validation,release-management,governance,compliance
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Natural Language :: English
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3 :: Only
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Database
25
+ Classifier: Topic :: File Formats :: JSON
26
+ Classifier: Topic :: File Formats :: JSON :: JSON Schema
27
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
28
+ Classifier: Topic :: Software Development :: Documentation
29
+ Classifier: Topic :: Software Development :: Libraries
30
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
31
+ Classifier: Topic :: Software Development :: Quality Assurance
32
+ Classifier: Topic :: Software Development :: Testing
33
+ Classifier: Topic :: System :: Archiving
34
+ Classifier: Topic :: Utilities
35
+ Requires-Python: <3.14,>=3.10
36
+ Description-Content-Type: text/markdown
37
+ Requires-Dist: ssot-contracts==0.2.7
38
+ Requires-Dist: ssot-views==0.2.7
39
+ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
40
+
41
+ <div align="center">
42
+ <h1>🔷 ssot-core</h1>
43
+ <p><strong>Core Python runtime, registry model, validation, and release workflow APIs for SSOT.</strong></p>
44
+ </div>
45
+
46
+ <div align="center">
47
+ <a href="https://pypi.org/project/ssot-core/"><img src="https://img.shields.io/pypi/v/ssot-core?label=PyPI%20version" alt="PyPI version" /></a>
48
+ <a href="https://pypi.org/project/ssot-core/"><img src="https://img.shields.io/pypi/pyversions/ssot-core?label=Python" alt="Supported Python versions" /></a>
49
+ <a href="https://pepy.tech/project/ssot-core"><img src="https://static.pepy.tech/badge/ssot-core" alt="Downloads" /></a>
50
+ <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Hits" /></a>
51
+ </div>
52
+
53
+ `ssot-core` is the core Python runtime package for SSOT.
54
+
55
+ It owns the canonical registry model, core APIs for loading and mutating registries, validation and guard logic, planning and release workflows, and the domain operations that `ssot-cli` and `ssot-tui` build on top of.
56
+
57
+ - GitHub: https://github.com/groupsum/ssot-registry
58
+
59
+ ## Core model
60
+
61
+ `ssot-core` treats `.ssot/registry.json` as the canonical machine-readable source of truth for:
62
+
63
+ - features
64
+ - profiles
65
+ - tests
66
+ - claims
67
+ - evidence
68
+ - issues
69
+ - risks
70
+ - boundaries
71
+ - releases
72
+ - ADRs
73
+ - specs
74
+
75
+ Everything else is derived from it.
76
+
77
+ ### Boundaries vs releases
78
+
79
+ Boundaries are not releases.
80
+
81
+ - A boundary is the frozen scope of features and profiles for a delivery unit.
82
+ - Freezing a boundary validates the registry, locks that scope, and emits a boundary snapshot.
83
+ - A release references a frozen boundary and then bundles the claims and evidence used for certify, promote, publish, and revoke workflows.
84
+
85
+ If you omit this distinction, releases look redundant. They are not: boundaries freeze scope; releases attest and ship against that frozen scope.
86
+
87
+ ## Canonical format
88
+
89
+ `.ssot/registry.json` remains the canonical machine-readable registry.
90
+
91
+ ADR and SPEC companion documents are canonically authored as YAML for readability, and may also be stored as JSON when a repository prefers machine-oriented document files. Markdown, CSV, DOT, SQLite, reports, and snapshots are derived projections.
92
+
93
+ ## Install
94
+
95
+ ```bash
96
+ python -m pip install ssot-core # core library/runtime only
97
+ python -m pip install ssot-cli # primary CLI distribution + ssot-core
98
+ python -m pip install ssot-registry # umbrella bundle: ssot-core + ssot-cli
99
+ python -m pip install "ssot-registry[tui]" # optional TUI bundle
100
+ ```
101
+
102
+ For local development:
103
+
104
+ ```bash
105
+ python -m pip install -e pkgs/ssot-core
106
+ ```
107
+
108
+ `ssot_registry` remains the canonical import package. The import module ships from `ssot-core`, while CLI entry points ship from `ssot-cli`.
109
+
110
+ ## What this package owns
111
+
112
+ - the canonical `.ssot/registry.json` data model
113
+ - runtime APIs under `ssot_registry.api`
114
+ - validators, guards, graph builders, reports, and snapshot generation
115
+ - planning, profile evaluation, evidence verification, document lifecycle, and release gating logic
116
+
117
+ ## Python API examples
118
+
119
+ Initialize and validate a repository:
120
+
121
+ ```python
122
+ from ssot_registry.api import initialize_repo, validate_registry
123
+
124
+ initialize_repo(".", repo_id="demo-repo", repo_name="Demo Repo", version="0.1.0")
125
+ report = validate_registry(".")
126
+ print(report["passed"])
127
+ ```
128
+
129
+ Load and save a registry:
130
+
131
+ ```python
132
+ from ssot_registry.api import load_registry, save_registry
133
+
134
+ registry_path, repo_root, registry = load_registry(".")
135
+ save_registry(registry_path, registry)
136
+ ```
137
+
138
+ Freeze a boundary and export a graph:
139
+
140
+ ```python
141
+ from ssot_registry.api import export_graph, freeze_boundary
142
+
143
+ freeze_boundary(".", boundary_id="bnd:demo.v0")
144
+ graph_result = export_graph(".", "json")
145
+ print(graph_result["output_path"])
146
+ ```
147
+
148
+ Representative API areas currently exposed from `ssot_registry.api` include:
149
+
150
+ - repository initialization, load, save, validate, and upgrade
151
+ - entity CRUD and linking operations
152
+ - document creation, synchronization, supersession, and reservations
153
+ - feature planning and lifecycle updates
154
+ - profile evaluation and profile resolution
155
+ - evidence verification and claim evaluation
156
+ - boundary freezing and release certification, promotion, publication, and revocation
157
+ - graph and registry export
158
+
159
+ ## CLI quick reference
160
+
161
+ Install `ssot-cli` for the primary command surface. The same parser is available under:
162
+
163
+ - `ssot`
164
+ - `ssot-cli`
165
+ - `ssot-registry`
166
+
167
+ Examples in the long-form reference below use `ssot-registry`, but every command can be invoked with any of the three executable names.
168
+
169
+ ```bash
170
+ ssot --help
171
+ ssot-cli --help
172
+ ssot-registry --help
173
+ ssot-registry profile --help
174
+ ssot-registry feature --help
175
+ ssot-registry boundary --help
176
+ ssot-registry release --help
177
+ ssot-registry graph --help
178
+ ssot-registry registry --help
179
+ ```
180
+
181
+ ## Screenshots
182
+
183
+ CLI screenshots from `ssot-cli`:
184
+
185
+ ![ssot top-level help](../ssot-cli/assets/ssot-cli-help.png)
186
+
187
+ ![ssot boundary help](../ssot-cli/assets/ssot-cli-boundary-help.png)
188
+
189
+ TUI screenshots from `ssot-tui`:
190
+
191
+ ![SSOT TUI browser](../ssot-tui/assets/ssot-tui-browser.png)
192
+
193
+ ![SSOT TUI ADR browser](../ssot-tui/assets/ssot-tui-adrs.png)
194
+
195
+ ![SSOT TUI spec browser](../ssot-tui/assets/ssot-tui-specs.png)
196
+
197
+ ![SSOT TUI validation status](../ssot-tui/assets/ssot-tui-validated.png)
198
+
199
+ ## CLI conventions
200
+
201
+ - Most commands accept `[path]` as an optional positional argument. Default is current directory (`.`).
202
+ - Prefer `ssot ...` in new automation and examples; `ssot-registry ...` remains a compatibility alias.
203
+ - IDs are normalized prefixed identifiers such as `feat:*`, `prf:*`, `clm:*`, `tst:*`, `evd:*`, `iss:*`, `rsk:*`, `bnd:*`, `rel:*`, `adr:*`, and `spc:*`.
204
+ - Commands emit JSON by default; use `--output-format {json,csv,df,yaml,toml}` for alternate renderings.
205
+ - Use `--output-file PATH` to save rendered command output to disk.
206
+ - Non-zero exit code indicates an operation failure or failed checks.
207
+
208
+ ## Command surface
209
+
210
+ ### Top-level commands
211
+
212
+ - `init`
213
+ - `validate`
214
+ - `upgrade`
215
+ - `adr`
216
+ - `spec`
217
+ - `feature`
218
+ - `profile`
219
+ - `test`
220
+ - `issue`
221
+ - `claim`
222
+ - `evidence`
223
+ - `risk`
224
+ - `boundary`
225
+ - `release`
226
+ - `graph`
227
+ - `registry`
228
+
229
+ ### `init`
230
+
231
+ ```text
232
+ ssot-registry init [path]
233
+ --repo-id REPO_ID
234
+ --repo-name REPO_NAME
235
+ --version VERSION
236
+ --force
237
+ ```
238
+
239
+ ### `validate`
240
+
241
+ ```text
242
+ ssot-registry validate [path]
243
+ --write-report
244
+ ```
245
+
246
+ ### `upgrade`
247
+
248
+ ```text
249
+ ssot-registry upgrade [path]
250
+ --target-version VERSION
251
+ --sync-docs
252
+ --write-report
253
+ ```
254
+
255
+ ### `adr`
256
+
257
+ Subcommands:
258
+
259
+ - `create`, `get`, `list`, `update`, `set-status`, `supersede`, `delete`, `sync`
260
+ - `reserve create`, `reserve list`
261
+
262
+ ```text
263
+ ssot-registry adr create [path]
264
+ --title TITLE (required)
265
+ --slug SLUG (required)
266
+ --body-file BODY_FILE (required)
267
+ --number NUMBER
268
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
269
+ --note NOTE
270
+ --origin {repo-local,ssot-origin,ssot-core}
271
+ --reserve-range RANGE_NAME
272
+
273
+ ssot-registry adr get [path]
274
+ --id ID (required)
275
+
276
+ ssot-registry adr list [path]
277
+
278
+ ssot-registry adr update [path]
279
+ --id ID (required)
280
+ --title TITLE
281
+ --body-file BODY_FILE
282
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
283
+ --note NOTE
284
+
285
+ ssot-registry adr set-status [path]
286
+ --id ID (required)
287
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired} (required)
288
+ --note NOTE
289
+
290
+ ssot-registry adr supersede [path]
291
+ --id ID (required)
292
+ --supersedes IDS [IDS ...] (required)
293
+ --note NOTE
294
+
295
+ ssot-registry adr delete [path]
296
+ --id ID (required)
297
+
298
+ ssot-registry adr sync [path]
299
+
300
+ ssot-registry adr reserve create [path]
301
+ --name NAME (required)
302
+ --start START (required)
303
+ --end END (required)
304
+
305
+ ssot-registry adr reserve list [path]
306
+ ```
307
+
308
+ ### `spec`
309
+
310
+ Subcommands:
311
+
312
+ - `create`, `get`, `list`, `update`, `set-status`, `supersede`, `delete`, `sync`
313
+ - `reserve create`, `reserve list`
314
+
315
+ ```text
316
+ ssot-registry spec create [path]
317
+ --title TITLE (required)
318
+ --slug SLUG (required)
319
+ --body-file BODY_FILE (required)
320
+ --number NUMBER
321
+ --origin {repo-local,ssot-origin,ssot-core}
322
+ --kind {normative,operational,governance,local-policy}
323
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
324
+ --note NOTE
325
+ --reserve-range RANGE_NAME
326
+
327
+ ssot-registry spec get [path]
328
+ --id ID (required)
329
+
330
+ ssot-registry spec list [path]
331
+
332
+ ssot-registry spec update [path]
333
+ --id ID (required)
334
+ --title TITLE
335
+ --body-file BODY_FILE
336
+ --kind {normative,operational,governance,local-policy}
337
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
338
+ --note NOTE
339
+
340
+ ssot-registry spec set-status [path]
341
+ --id ID (required)
342
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired} (required)
343
+ --note NOTE
344
+
345
+ ssot-registry spec supersede [path]
346
+ --id ID (required)
347
+ --supersedes IDS [IDS ...] (required)
348
+ --note NOTE
349
+
350
+ ssot-registry spec delete [path]
351
+ --id ID (required)
352
+
353
+ ssot-registry spec sync [path]
354
+
355
+ ssot-registry spec reserve create [path]
356
+ --name NAME (required)
357
+ --start START (required)
358
+ --end END (required)
359
+
360
+ ssot-registry spec reserve list [path]
361
+ ```
362
+
363
+ ### `feature`
364
+
365
+ Subcommands:
366
+
367
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
368
+ - `lifecycle set`
369
+
370
+ ```text
371
+ ssot-registry feature create [path]
372
+ --id ID (required)
373
+ --title TITLE (required)
374
+ --description DESCRIPTION
375
+ --implementation-status {absent,implemented,partial}
376
+ --lifecycle-stage {active,deprecated,obsolete,removed}
377
+ --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
378
+ --note NOTE
379
+ --horizon {backlog,current,explicit,future,next,out_of_bounds}
380
+ --claim-tier {T0,T1,T2,T3,T4}
381
+ --target-lifecycle-stage {active,deprecated,obsolete,removed}
382
+ --slot SLOT
383
+ --claim-ids [CLAIM_IDS ...]
384
+ --test-ids [TEST_IDS ...]
385
+ --requires [REQUIRES ...]
386
+
387
+ ssot-registry feature get [path]
388
+ --id ID (required)
389
+
390
+ ssot-registry feature list [path]
391
+
392
+ ssot-registry feature update [path]
393
+ --id ID (required)
394
+ --title TITLE
395
+ --description DESCRIPTION
396
+ --implementation-status {absent,implemented,partial}
397
+
398
+ ssot-registry feature delete [path]
399
+ --id ID (required)
400
+
401
+ ssot-registry feature link [path]
402
+ --id ID (required)
403
+ --claim-ids [CLAIM_IDS ...]
404
+ --test-ids [TEST_IDS ...]
405
+ --requires [REQUIRES ...]
406
+
407
+ ssot-registry feature unlink [path]
408
+ --id ID (required)
409
+ --claim-ids [CLAIM_IDS ...]
410
+ --test-ids [TEST_IDS ...]
411
+ --requires [REQUIRES ...]
412
+
413
+ ssot-registry feature plan [path]
414
+ --ids IDS [IDS ...] (required)
415
+ --horizon {backlog,current,explicit,future,next,out_of_bounds} (required)
416
+ --claim-tier {T0,T1,T2,T3,T4}
417
+ --target-lifecycle-stage {active,deprecated,obsolete,removed}
418
+ --slot SLOT
419
+
420
+ ssot-registry feature lifecycle set [path]
421
+ --ids IDS [IDS ...] (required)
422
+ --stage {active,deprecated,obsolete,removed} (required)
423
+ --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
424
+ --effective-release-id EFFECTIVE_RELEASE_ID
425
+ --note NOTE
426
+ ```
427
+
428
+ ### `profile`
429
+
430
+ Subcommands:
431
+
432
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `evaluate`, `verify`
433
+
434
+ ```text
435
+ ssot-registry profile create [path]
436
+ --id ID (required)
437
+ --title TITLE (required)
438
+ --description DESCRIPTION
439
+ --status {draft,active,retired}
440
+ --kind {capability,certification,deployment,interoperability}
441
+ --feature-ids [FEATURE_IDS ...]
442
+ --profile-ids [PROFILE_IDS ...]
443
+ --claim-tier {T0,T1,T2,T3,T4}
444
+ --allow-feature-override-tier | --no-allow-feature-override-tier
445
+
446
+ ssot-registry profile get [path]
447
+ --id ID (required)
448
+
449
+ ssot-registry profile list [path]
450
+
451
+ ssot-registry profile update [path]
452
+ --id ID (required)
453
+ --title TITLE
454
+ --description DESCRIPTION
455
+ --status {draft,active,retired}
456
+ --kind {capability,certification,deployment,interoperability}
457
+ --claim-tier {T0,T1,T2,T3,T4}
458
+
459
+ ssot-registry profile delete [path]
460
+ --id ID (required)
461
+
462
+ ssot-registry profile link [path]
463
+ --id ID (required)
464
+ --feature-ids [FEATURE_IDS ...]
465
+ --profile-ids [PROFILE_IDS ...]
466
+
467
+ ssot-registry profile unlink [path]
468
+ --id ID (required)
469
+ --feature-ids [FEATURE_IDS ...]
470
+ --profile-ids [PROFILE_IDS ...]
471
+
472
+ ssot-registry profile evaluate [path]
473
+ --profile-id PROFILE_ID (required)
474
+
475
+ ssot-registry profile verify [path]
476
+ --profile-id PROFILE_ID (required)
477
+ ```
478
+
479
+ ### `test`
480
+
481
+ Subcommands:
482
+
483
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`
484
+
485
+ ```text
486
+ ssot-registry test create [path]
487
+ --id ID (required)
488
+ --title TITLE (required)
489
+ --status {planned,passing,failing,blocked,skipped}
490
+ --kind KIND (required)
491
+ --test-path TEST_PATH (required)
492
+ --feature-ids [FEATURE_IDS ...]
493
+ --claim-ids [CLAIM_IDS ...]
494
+ --evidence-ids [EVIDENCE_IDS ...]
495
+
496
+ ssot-registry test get [path]
497
+ --id ID (required)
498
+
499
+ ssot-registry test list [path]
500
+
501
+ ssot-registry test update [path]
502
+ --id ID (required)
503
+ --title TITLE
504
+ --status {planned,passing,failing,blocked,skipped}
505
+ --kind KIND
506
+ --test-path TEST_PATH
507
+
508
+ ssot-registry test delete [path]
509
+ --id ID (required)
510
+
511
+ ssot-registry test link [path]
512
+ --id ID (required)
513
+ --feature-ids [FEATURE_IDS ...]
514
+ --claim-ids [CLAIM_IDS ...]
515
+ --evidence-ids [EVIDENCE_IDS ...]
516
+
517
+ ssot-registry test unlink [path]
518
+ --id ID (required)
519
+ --feature-ids [FEATURE_IDS ...]
520
+ --claim-ids [CLAIM_IDS ...]
521
+ --evidence-ids [EVIDENCE_IDS ...]
522
+ ```
523
+
524
+ ### `issue`
525
+
526
+ Subcommands:
527
+
528
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`, `close`, `reopen`
529
+
530
+ ```text
531
+ ssot-registry issue create [path]
532
+ --id ID (required)
533
+ --title TITLE (required)
534
+ --status {open,in_progress,blocked,resolved,closed}
535
+ --severity {low,medium,high,critical}
536
+ --description DESCRIPTION
537
+ --horizon {current,next,future,explicit,backlog,out_of_bounds}
538
+ --slot SLOT
539
+ --feature-ids [FEATURE_IDS ...]
540
+ --claim-ids [CLAIM_IDS ...]
541
+ --test-ids [TEST_IDS ...]
542
+ --evidence-ids [EVIDENCE_IDS ...]
543
+ --risk-ids [RISK_IDS ...]
544
+ --release-blocking | --no-release-blocking
545
+
546
+ ssot-registry issue get [path]
547
+ --id ID (required)
548
+
549
+ ssot-registry issue list [path]
550
+
551
+ ssot-registry issue update [path]
552
+ --id ID (required)
553
+ --title TITLE
554
+ --severity {low,medium,high,critical}
555
+ --description DESCRIPTION
556
+ --release-blocking | --no-release-blocking
557
+
558
+ ssot-registry issue delete [path]
559
+ --id ID (required)
560
+
561
+ ssot-registry issue link [path]
562
+ --id ID (required)
563
+ --feature-ids [FEATURE_IDS ...]
564
+ --claim-ids [CLAIM_IDS ...]
565
+ --test-ids [TEST_IDS ...]
566
+ --evidence-ids [EVIDENCE_IDS ...]
567
+ --risk-ids [RISK_IDS ...]
568
+
569
+ ssot-registry issue unlink [path]
570
+ --id ID (required)
571
+ --feature-ids [FEATURE_IDS ...]
572
+ --claim-ids [CLAIM_IDS ...]
573
+ --test-ids [TEST_IDS ...]
574
+ --evidence-ids [EVIDENCE_IDS ...]
575
+ --risk-ids [RISK_IDS ...]
576
+
577
+ ssot-registry issue plan [path]
578
+ --ids IDS [IDS ...] (required)
579
+ --horizon {current,next,future,explicit,backlog,out_of_bounds} (required)
580
+ --slot SLOT
581
+
582
+ ssot-registry issue close [path]
583
+ --id ID (required)
584
+
585
+ ssot-registry issue reopen [path]
586
+ --id ID (required)
587
+ ```
588
+
589
+ ### `claim`
590
+
591
+ Subcommands:
592
+
593
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `evaluate`, `set-status`, `set-tier`
594
+
595
+ ```text
596
+ ssot-registry claim create [path]
597
+ --id ID (required)
598
+ --title TITLE (required)
599
+ --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired}
600
+ --tier {T0,T1,T2,T3,T4}
601
+ --kind KIND (required)
602
+ --description DESCRIPTION
603
+ --feature-ids [FEATURE_IDS ...]
604
+ --test-ids [TEST_IDS ...]
605
+ --evidence-ids [EVIDENCE_IDS ...]
606
+
607
+ ssot-registry claim get [path]
608
+ --id ID (required)
609
+
610
+ ssot-registry claim list [path]
611
+
612
+ ssot-registry claim update [path]
613
+ --id ID (required)
614
+ --title TITLE
615
+ --kind KIND
616
+ --description DESCRIPTION
617
+
618
+ ssot-registry claim delete [path]
619
+ --id ID (required)
620
+
621
+ ssot-registry claim link [path]
622
+ --id ID (required)
623
+ --feature-ids [FEATURE_IDS ...]
624
+ --test-ids [TEST_IDS ...]
625
+ --evidence-ids [EVIDENCE_IDS ...]
626
+
627
+ ssot-registry claim unlink [path]
628
+ --id ID (required)
629
+ --feature-ids [FEATURE_IDS ...]
630
+ --test-ids [TEST_IDS ...]
631
+ --evidence-ids [EVIDENCE_IDS ...]
632
+
633
+ ssot-registry claim evaluate [path]
634
+ --claim-id CLAIM_ID
635
+
636
+ ssot-registry claim set-status [path]
637
+ --id ID (required)
638
+ --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired} (required)
639
+
640
+ ssot-registry claim set-tier [path]
641
+ --id ID (required)
642
+ --tier {T0,T1,T2,T3,T4} (required)
643
+ ```
644
+
645
+ ### `evidence`
646
+
647
+ Subcommands:
648
+
649
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `verify`
650
+
651
+ ```text
652
+ ssot-registry evidence create [path]
653
+ --id ID (required)
654
+ --title TITLE (required)
655
+ --status {planned,collected,passed,failed,stale}
656
+ --kind KIND (required)
657
+ --tier {T0,T1,T2,T3,T4}
658
+ --evidence-path EVIDENCE_PATH (required)
659
+ --claim-ids [CLAIM_IDS ...]
660
+ --test-ids [TEST_IDS ...]
661
+
662
+ ssot-registry evidence get [path]
663
+ --id ID (required)
664
+
665
+ ssot-registry evidence list [path]
666
+
667
+ ssot-registry evidence update [path]
668
+ --id ID (required)
669
+ --title TITLE
670
+ --status {planned,collected,passed,failed,stale}
671
+ --kind KIND
672
+ --tier {T0,T1,T2,T3,T4}
673
+ --evidence-path EVIDENCE_PATH
674
+
675
+ ssot-registry evidence delete [path]
676
+ --id ID (required)
677
+
678
+ ssot-registry evidence link [path]
679
+ --id ID (required)
680
+ --claim-ids [CLAIM_IDS ...]
681
+ --test-ids [TEST_IDS ...]
682
+
683
+ ssot-registry evidence unlink [path]
684
+ --id ID (required)
685
+ --claim-ids [CLAIM_IDS ...]
686
+ --test-ids [TEST_IDS ...]
687
+
688
+ ssot-registry evidence verify [path]
689
+ --evidence-id EVIDENCE_ID
690
+ ```
691
+
692
+ ### `risk`
693
+
694
+ Subcommands:
695
+
696
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `mitigate`, `accept`, `retire`
697
+
698
+ ```text
699
+ ssot-registry risk create [path]
700
+ --id ID (required)
701
+ --title TITLE (required)
702
+ --status {active,mitigated,accepted,retired}
703
+ --severity {low,medium,high,critical}
704
+ --description DESCRIPTION
705
+ --feature-ids [FEATURE_IDS ...]
706
+ --claim-ids [CLAIM_IDS ...]
707
+ --test-ids [TEST_IDS ...]
708
+ --evidence-ids [EVIDENCE_IDS ...]
709
+ --issue-ids [ISSUE_IDS ...]
710
+ --release-blocking | --no-release-blocking
711
+
712
+ ssot-registry risk get [path]
713
+ --id ID (required)
714
+
715
+ ssot-registry risk list [path]
716
+
717
+ ssot-registry risk update [path]
718
+ --id ID (required)
719
+ --title TITLE
720
+ --severity {low,medium,high,critical}
721
+ --description DESCRIPTION
722
+ --release-blocking | --no-release-blocking
723
+
724
+ ssot-registry risk delete [path]
725
+ --id ID (required)
726
+
727
+ ssot-registry risk link [path]
728
+ --id ID (required)
729
+ --feature-ids [FEATURE_IDS ...]
730
+ --claim-ids [CLAIM_IDS ...]
731
+ --test-ids [TEST_IDS ...]
732
+ --evidence-ids [EVIDENCE_IDS ...]
733
+ --issue-ids [ISSUE_IDS ...]
734
+
735
+ ssot-registry risk unlink [path]
736
+ --id ID (required)
737
+ --feature-ids [FEATURE_IDS ...]
738
+ --claim-ids [CLAIM_IDS ...]
739
+ --test-ids [TEST_IDS ...]
740
+ --evidence-ids [EVIDENCE_IDS ...]
741
+ --issue-ids [ISSUE_IDS ...]
742
+
743
+ ssot-registry risk mitigate [path]
744
+ --id ID (required)
745
+
746
+ ssot-registry risk accept [path]
747
+ --id ID (required)
748
+
749
+ ssot-registry risk retire [path]
750
+ --id ID (required)
751
+ ```
752
+
753
+ ### `boundary`
754
+
755
+ Subcommands:
756
+
757
+ - `create`, `get`, `list`, `update`, `delete`
758
+ - `add-feature`, `remove-feature`, `add-profile`, `remove-profile`
759
+ - `freeze`
760
+
761
+ ```text
762
+ ssot-registry boundary create [path]
763
+ --id ID (required)
764
+ --title TITLE (required)
765
+ --status {draft,active,frozen,retired}
766
+ --frozen | --no-frozen
767
+ --feature-ids [FEATURE_IDS ...]
768
+ --profile-ids [PROFILE_IDS ...]
769
+
770
+ ssot-registry boundary get [path]
771
+ --id ID (required)
772
+
773
+ ssot-registry boundary list [path]
774
+
775
+ ssot-registry boundary update [path]
776
+ --id ID (required)
777
+ --title TITLE
778
+ --status {draft,active,frozen,retired}
779
+ --frozen | --no-frozen
780
+
781
+ ssot-registry boundary delete [path]
782
+ --id ID (required)
783
+
784
+ ssot-registry boundary add-feature [path]
785
+ --id ID (required)
786
+ --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)
787
+
788
+ ssot-registry boundary remove-feature [path]
789
+ --id ID (required)
790
+ --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)
791
+
792
+ ssot-registry boundary add-profile [path]
793
+ --id ID (required)
794
+ --profile-ids PROFILE_IDS [PROFILE_IDS ...] (required)
795
+
796
+ ssot-registry boundary remove-profile [path]
797
+ --id ID (required)
798
+ --profile-ids PROFILE_IDS [PROFILE_IDS ...] (required)
799
+
800
+ ssot-registry boundary freeze [path]
801
+ --boundary-id BOUNDARY_ID
802
+ ```
803
+
804
+ ### `release`
805
+
806
+ Subcommands:
807
+
808
+ - `create`, `get`, `list`, `update`, `delete`
809
+ - `add-claim`, `remove-claim`, `add-evidence`, `remove-evidence`
810
+ - `certify`, `promote`, `publish`, `revoke`
811
+
812
+ ```text
813
+ ssot-registry release create [path]
814
+ --id ID (required)
815
+ --version VERSION (required)
816
+ --status {draft,candidate,certified,promoted,published,revoked}
817
+ --boundary-id BOUNDARY_ID (required)
818
+ --claim-ids [CLAIM_IDS ...]
819
+ --evidence-ids [EVIDENCE_IDS ...]
820
+
821
+ ssot-registry release get [path]
822
+ --id ID (required)
823
+
824
+ ssot-registry release list [path]
825
+
826
+ ssot-registry release update [path]
827
+ --id ID (required)
828
+ --version VERSION
829
+ --status {draft,candidate,certified,promoted,published,revoked}
830
+ --boundary-id BOUNDARY_ID
831
+
832
+ ssot-registry release delete [path]
833
+ --id ID (required)
834
+
835
+ ssot-registry release add-claim [path]
836
+ --id ID (required)
837
+ --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)
838
+
839
+ ssot-registry release remove-claim [path]
840
+ --id ID (required)
841
+ --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)
842
+
843
+ ssot-registry release add-evidence [path]
844
+ --id ID (required)
845
+ --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)
846
+
847
+ ssot-registry release remove-evidence [path]
848
+ --id ID (required)
849
+ --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)
850
+
851
+ ssot-registry release certify [path]
852
+ --release-id RELEASE_ID
853
+ --write-report
854
+
855
+ ssot-registry release promote [path]
856
+ --release-id RELEASE_ID
857
+
858
+ ssot-registry release publish [path]
859
+ --release-id RELEASE_ID
860
+
861
+ ssot-registry release revoke [path]
862
+ --release-id RELEASE_ID (required)
863
+ --reason REASON (required)
864
+ ```
865
+
866
+ ### `graph`
867
+
868
+ Subcommands:
869
+
870
+ - `export`
871
+
872
+ ```text
873
+ ssot-registry graph export [path]
874
+ --format {json,dot,png,svg} (required)
875
+ --output OUTPUT
876
+ ```
877
+
878
+ ### `registry`
879
+
880
+ Subcommands:
881
+
882
+ - `export`
883
+
884
+ ```text
885
+ ssot-registry registry export [path]
886
+ --format {json,csv,df,yaml,toml} (required)
887
+ --output OUTPUT
888
+ ```
889
+
890
+ ## End-to-end examples
891
+
892
+ ### Initialize and inspect a repo
893
+
894
+ ```bash
895
+ ssot-registry init . --repo-id repo:demo.app --repo-name "Demo App" --version 0.1.0
896
+ ssot-registry validate . --write-report
897
+ ssot-registry feature list .
898
+ ssot-registry profile list .
899
+ ssot-registry adr list .
900
+ ssot-registry spec list .
901
+ ```
902
+
903
+ ### Freeze scope and release against it
904
+
905
+ ```bash
906
+ ssot-registry boundary create . --id bnd:demo.v0 --title "Demo v0 scope" --feature-ids feat:demo.login --profile-ids prf:demo.core
907
+ ssot-registry boundary freeze . --boundary-id bnd:demo.v0
908
+ ssot-registry release create . --id rel:0.1.0 --version 0.1.0 --boundary-id bnd:demo.v0 --claim-ids clm:demo.login.t1 --evidence-ids evd:demo.login.pytest
909
+ ssot-registry release certify . --release-id rel:0.1.0 --write-report
910
+ ssot-registry release promote . --release-id rel:0.1.0
911
+ ssot-registry release publish . --release-id rel:0.1.0
912
+ ```
913
+
914
+ ### Graphs and exports
915
+
916
+ ```bash
917
+ ssot-registry graph export . --format json --output .ssot/graphs/registry.graph.json
918
+ ssot-registry graph export . --format dot --output .ssot/graphs/registry.graph.dot
919
+ ssot-registry registry export . --format toml --output .ssot/exports/registry.toml
920
+ ```
921
+
922
+ ## Documentation map
923
+
924
+ - Specifications: `.ssot/specs/`
925
+ - Architecture decisions: `.ssot/adr/`
926
+ - Examples: `examples/`
927
+ - Source code: `pkgs/*/src/`
928
+
929
+ ## Package relationships
930
+
931
+ - Package type: core runtime/library package
932
+ - Depends on: `ssot-contracts`, `ssot-views`
933
+ - Consumed by: `ssot-cli`, `ssot-tui`, direct Python integrations, and automation
934
+
935
+ If you are embedding SSOT behavior inside Python code, this is the package to import. If you need the primary CLI distribution, install `ssot-cli` alongside it.