ssot-cli 0.1.0__tar.gz → 0.1.2__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.
Files changed (37) hide show
  1. ssot_cli-0.1.2/PKG-INFO +828 -0
  2. ssot_cli-0.1.2/README.md +801 -0
  3. ssot_cli-0.1.2/pyproject.toml +47 -0
  4. ssot_cli-0.1.2/src/ssot_cli/__init__.py +5 -0
  5. ssot_cli-0.1.2/src/ssot_cli/adr_cmd.py +143 -0
  6. ssot_cli-0.1.2/src/ssot_cli/boundary_cmd.py +135 -0
  7. ssot_cli-0.1.2/src/ssot_cli/claim_cmd.py +159 -0
  8. ssot_cli-0.1.2/src/ssot_cli/common.py +37 -0
  9. ssot_cli-0.1.2/src/ssot_cli/evidence_cmd.py +142 -0
  10. ssot_cli-0.1.2/src/ssot_cli/feature_cmd.py +202 -0
  11. ssot_cli-0.1.2/src/ssot_cli/graph_cmd.py +20 -0
  12. ssot_cli-0.1.2/src/ssot_cli/init_cmd.py +25 -0
  13. ssot_cli-0.1.2/src/ssot_cli/issue_cmd.py +184 -0
  14. ssot_cli-0.1.2/src/ssot_cli/main.py +89 -0
  15. ssot_cli-0.1.2/src/ssot_cli/profile_cmd.py +159 -0
  16. ssot_cli-0.1.2/src/ssot_cli/registry_cmd.py +20 -0
  17. ssot_cli-0.1.2/src/ssot_cli/release_cmd.py +167 -0
  18. ssot_cli-0.1.2/src/ssot_cli/risk_cmd.py +173 -0
  19. ssot_cli-0.1.2/src/ssot_cli/spec_cmd.py +146 -0
  20. ssot_cli-0.1.2/src/ssot_cli/test_cmd.py +125 -0
  21. ssot_cli-0.1.2/src/ssot_cli/upgrade_cmd.py +23 -0
  22. ssot_cli-0.1.2/src/ssot_cli/validate_cmd.py +25 -0
  23. ssot_cli-0.1.2/src/ssot_cli.egg-info/PKG-INFO +828 -0
  24. ssot_cli-0.1.2/src/ssot_cli.egg-info/SOURCES.txt +27 -0
  25. ssot_cli-0.1.2/src/ssot_cli.egg-info/entry_points.txt +4 -0
  26. ssot_cli-0.1.2/src/ssot_cli.egg-info/requires.txt +5 -0
  27. ssot_cli-0.1.0/PKG-INFO +0 -16
  28. ssot_cli-0.1.0/README.md +0 -3
  29. ssot_cli-0.1.0/pyproject.toml +0 -29
  30. ssot_cli-0.1.0/src/ssot_cli/__init__.py +0 -1
  31. ssot_cli-0.1.0/src/ssot_cli.egg-info/PKG-INFO +0 -16
  32. ssot_cli-0.1.0/src/ssot_cli.egg-info/SOURCES.txt +0 -9
  33. ssot_cli-0.1.0/src/ssot_cli.egg-info/entry_points.txt +0 -2
  34. ssot_cli-0.1.0/src/ssot_cli.egg-info/requires.txt +0 -1
  35. {ssot_cli-0.1.0 → ssot_cli-0.1.2}/setup.cfg +0 -0
  36. {ssot_cli-0.1.0 → ssot_cli-0.1.2}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
  37. {ssot_cli-0.1.0 → ssot_cli-0.1.2}/src/ssot_cli.egg-info/top_level.txt +0 -0
@@ -0,0 +1,828 @@
1
+ Metadata-Version: 2.4
2
+ Name: ssot-cli
3
+ Version: 0.1.2
4
+ Summary: Primary CLI distribution for ssot-registry.
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,cli,registry
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3 :: Only
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: <3.14,>=3.10
23
+ Description-Content-Type: text/markdown
24
+ Requires-Dist: ssot-contracts<0.3.0,>=0.2.6
25
+ Requires-Dist: ssot-registry<0.3.0,>=0.2.6
26
+ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
27
+
28
+ <div align="center">
29
+ <h1>🔷 ssot-cli</h1>
30
+ <p><strong>Primary command-line distribution for SSOT workflows.</strong></p>
31
+ </div>
32
+
33
+ <div align="center">
34
+ <a href="https://pypi.org/project/ssot-cli/"><img src="https://img.shields.io/pypi/v/ssot-cli?label=PyPI%20version" alt="PyPI version" /></a>
35
+ <a href="https://pypi.org/project/ssot-cli/"><img src="https://img.shields.io/pypi/pyversions/ssot-cli?label=Python" alt="Supported Python versions" /></a>
36
+ <a href="https://pepy.tech/project/ssot-cli"><img src="https://static.pepy.tech/badge/ssot-cli" alt="Downloads" /></a>
37
+ <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Repository hits" /></a>
38
+ </div>
39
+
40
+ `ssot-cli` is the primary command-line distribution for SSOT.
41
+
42
+ It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in `ssot-registry` and shared contract metadata comes from `ssot-contracts`.
43
+
44
+ - GitHub: https://github.com/groupsum/ssot-registry
45
+
46
+ ## What this package owns
47
+
48
+ - The primary end-user CLI distribution
49
+ - Argument parsing and command registration for the SSOT command surface
50
+ - Structured output rendering and file-output conventions for CLI workflows
51
+
52
+ ## Install
53
+
54
+ ```bash
55
+ python -m pip install ssot-cli
56
+ ```
57
+
58
+ For local development:
59
+
60
+ ```bash
61
+ python -m pip install -e pkgs/ssot-cli
62
+ ```
63
+
64
+ This package depends on `ssot-registry` and `ssot-contracts`, so installing it gives you the full CLI runtime stack.
65
+
66
+ ## Executable names
67
+
68
+ This package installs three equivalent console scripts:
69
+
70
+ - `ssot`
71
+ - `ssot-cli`
72
+ - `ssot-registry`
73
+
74
+ Prefer `ssot` in new automation and documentation. `ssot-registry` remains a compatibility alias. Every command block below can be invoked with any of the three names.
75
+
76
+ ## Boundaries vs releases
77
+
78
+ Boundaries and releases are intentionally different:
79
+
80
+ - A boundary defines the scoped set of features and profiles that belong to a candidate delivery unit.
81
+ - Freezing a boundary locks that resolved scope and emits a boundary snapshot.
82
+ - A release points at a frozen boundary and then bundles claims and evidence for certify, promote, publish, and revoke workflows.
83
+
84
+ ## CLI quick reference
85
+
86
+ ```bash
87
+ ssot --help
88
+ ssot-cli --help
89
+ ssot-registry --help
90
+ ssot profile --help
91
+ ssot feature --help
92
+ ssot boundary --help
93
+ ssot release --help
94
+ ssot graph --help
95
+ ssot registry --help
96
+ ```
97
+
98
+ ## Screenshots
99
+
100
+ Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
101
+
102
+ Top-level command help:
103
+
104
+ ![ssot top-level help](assets/ssot-cli-help.png)
105
+
106
+ Boundary command help:
107
+
108
+ ![ssot boundary help](assets/ssot-cli-boundary-help.svg)
109
+
110
+ ## CLI conventions
111
+
112
+ - Most commands accept `[path]` as an optional positional argument. Default is current directory (`.`).
113
+ - Commands emit structured output by default.
114
+ - Global rendering flags apply to all commands:
115
+
116
+ ```text
117
+ --output-format {json,csv,df,yaml,toml}
118
+ --output-file PATH
119
+ ```
120
+
121
+ - Non-zero exit code indicates an operation failure or failed checks.
122
+
123
+ ## Command surface
124
+
125
+ ### Top-level commands
126
+
127
+ - `init`
128
+ - `validate`
129
+ - `upgrade`
130
+ - `adr`
131
+ - `spec`
132
+ - `feature`
133
+ - `profile`
134
+ - `test`
135
+ - `issue`
136
+ - `claim`
137
+ - `evidence`
138
+ - `risk`
139
+ - `boundary`
140
+ - `release`
141
+ - `graph`
142
+ - `registry`
143
+
144
+ ### `init`
145
+
146
+ ```text
147
+ ssot-registry init [path]
148
+ --repo-id REPO_ID
149
+ --repo-name REPO_NAME
150
+ --version VERSION
151
+ --force
152
+ ```
153
+
154
+ ### `validate`
155
+
156
+ ```text
157
+ ssot-registry validate [path]
158
+ --write-report
159
+ ```
160
+
161
+ ### `upgrade`
162
+
163
+ ```text
164
+ ssot-registry upgrade [path]
165
+ --target-version VERSION
166
+ --sync-docs
167
+ --write-report
168
+ ```
169
+
170
+ ### `adr`
171
+
172
+ Subcommands:
173
+
174
+ - `create`, `get`, `list`, `update`, `set-status`, `supersede`, `delete`, `sync`
175
+ - `reserve create`, `reserve list`
176
+
177
+ ```text
178
+ ssot-registry adr create [path]
179
+ --title TITLE (required)
180
+ --slug SLUG (required)
181
+ --body-file BODY_FILE (required)
182
+ --number NUMBER
183
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
184
+ --note NOTE
185
+ --origin {repo-local,ssot-origin,ssot-core}
186
+ --reserve-range RANGE_NAME
187
+
188
+ ssot-registry adr get [path]
189
+ --id ID (required)
190
+
191
+ ssot-registry adr list [path]
192
+
193
+ ssot-registry adr update [path]
194
+ --id ID (required)
195
+ --title TITLE
196
+ --body-file BODY_FILE
197
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
198
+ --note NOTE
199
+
200
+ ssot-registry adr set-status [path]
201
+ --id ID (required)
202
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired} (required)
203
+ --note NOTE
204
+
205
+ ssot-registry adr supersede [path]
206
+ --id ID (required)
207
+ --supersedes IDS [IDS ...] (required)
208
+ --note NOTE
209
+
210
+ ssot-registry adr delete [path]
211
+ --id ID (required)
212
+
213
+ ssot-registry adr sync [path]
214
+
215
+ ssot-registry adr reserve create [path]
216
+ --name NAME (required)
217
+ --start START (required)
218
+ --end END (required)
219
+
220
+ ssot-registry adr reserve list [path]
221
+ ```
222
+
223
+ ### `spec`
224
+
225
+ Subcommands:
226
+
227
+ - `create`, `get`, `list`, `update`, `set-status`, `supersede`, `delete`, `sync`
228
+ - `reserve create`, `reserve list`
229
+
230
+ ```text
231
+ ssot-registry spec create [path]
232
+ --title TITLE (required)
233
+ --slug SLUG (required)
234
+ --body-file BODY_FILE (required)
235
+ --number NUMBER
236
+ --origin {repo-local,ssot-origin,ssot-core}
237
+ --kind {normative,operational,governance,local-policy}
238
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
239
+ --note NOTE
240
+ --reserve-range RANGE_NAME
241
+
242
+ ssot-registry spec get [path]
243
+ --id ID (required)
244
+
245
+ ssot-registry spec list [path]
246
+
247
+ ssot-registry spec update [path]
248
+ --id ID (required)
249
+ --title TITLE
250
+ --body-file BODY_FILE
251
+ --kind {normative,operational,governance,local-policy}
252
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired}
253
+ --note NOTE
254
+
255
+ ssot-registry spec set-status [path]
256
+ --id ID (required)
257
+ --status {draft,in_review,accepted,rejected,withdrawn,superseded,retired} (required)
258
+ --note NOTE
259
+
260
+ ssot-registry spec supersede [path]
261
+ --id ID (required)
262
+ --supersedes IDS [IDS ...] (required)
263
+ --note NOTE
264
+
265
+ ssot-registry spec delete [path]
266
+ --id ID (required)
267
+
268
+ ssot-registry spec sync [path]
269
+
270
+ ssot-registry spec reserve create [path]
271
+ --name NAME (required)
272
+ --start START (required)
273
+ --end END (required)
274
+
275
+ ssot-registry spec reserve list [path]
276
+ ```
277
+
278
+ ### `feature`
279
+
280
+ Subcommands:
281
+
282
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
283
+ - `lifecycle set`
284
+
285
+ ```text
286
+ ssot-registry feature create [path]
287
+ --id ID (required)
288
+ --title TITLE (required)
289
+ --description DESCRIPTION
290
+ --implementation-status {absent,implemented,partial}
291
+ --lifecycle-stage {active,deprecated,obsolete,removed}
292
+ --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
293
+ --note NOTE
294
+ --horizon {backlog,current,explicit,future,next,out_of_bounds}
295
+ --claim-tier {T0,T1,T2,T3,T4}
296
+ --target-lifecycle-stage {active,deprecated,obsolete,removed}
297
+ --slot SLOT
298
+ --claim-ids [CLAIM_IDS ...]
299
+ --test-ids [TEST_IDS ...]
300
+ --requires [REQUIRES ...]
301
+
302
+ ssot-registry feature get [path]
303
+ --id ID (required)
304
+
305
+ ssot-registry feature list [path]
306
+
307
+ ssot-registry feature update [path]
308
+ --id ID (required)
309
+ --title TITLE
310
+ --description DESCRIPTION
311
+ --implementation-status {absent,implemented,partial}
312
+
313
+ ssot-registry feature delete [path]
314
+ --id ID (required)
315
+
316
+ ssot-registry feature link [path]
317
+ --id ID (required)
318
+ --claim-ids [CLAIM_IDS ...]
319
+ --test-ids [TEST_IDS ...]
320
+ --requires [REQUIRES ...]
321
+
322
+ ssot-registry feature unlink [path]
323
+ --id ID (required)
324
+ --claim-ids [CLAIM_IDS ...]
325
+ --test-ids [TEST_IDS ...]
326
+ --requires [REQUIRES ...]
327
+
328
+ ssot-registry feature plan [path]
329
+ --ids IDS [IDS ...] (required)
330
+ --horizon {backlog,current,explicit,future,next,out_of_bounds} (required)
331
+ --claim-tier {T0,T1,T2,T3,T4}
332
+ --target-lifecycle-stage {active,deprecated,obsolete,removed}
333
+ --slot SLOT
334
+
335
+ ssot-registry feature lifecycle set [path]
336
+ --ids IDS [IDS ...] (required)
337
+ --stage {active,deprecated,obsolete,removed} (required)
338
+ --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
339
+ --effective-release-id EFFECTIVE_RELEASE_ID
340
+ --note NOTE
341
+ ```
342
+
343
+ ### `profile`
344
+
345
+ Subcommands:
346
+
347
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `evaluate`, `verify`
348
+
349
+ ```text
350
+ ssot-registry profile create [path]
351
+ --id ID (required)
352
+ --title TITLE (required)
353
+ --description DESCRIPTION
354
+ --status {draft,active,retired}
355
+ --kind {capability,certification,deployment,interoperability}
356
+ --feature-ids [FEATURE_IDS ...]
357
+ --profile-ids [PROFILE_IDS ...]
358
+ --claim-tier {T0,T1,T2,T3,T4}
359
+ --allow-feature-override-tier | --no-allow-feature-override-tier
360
+
361
+ ssot-registry profile get [path]
362
+ --id ID (required)
363
+
364
+ ssot-registry profile list [path]
365
+
366
+ ssot-registry profile update [path]
367
+ --id ID (required)
368
+ --title TITLE
369
+ --description DESCRIPTION
370
+ --status {draft,active,retired}
371
+ --kind {capability,certification,deployment,interoperability}
372
+ --claim-tier {T0,T1,T2,T3,T4}
373
+
374
+ ssot-registry profile delete [path]
375
+ --id ID (required)
376
+
377
+ ssot-registry profile link [path]
378
+ --id ID (required)
379
+ --feature-ids [FEATURE_IDS ...]
380
+ --profile-ids [PROFILE_IDS ...]
381
+
382
+ ssot-registry profile unlink [path]
383
+ --id ID (required)
384
+ --feature-ids [FEATURE_IDS ...]
385
+ --profile-ids [PROFILE_IDS ...]
386
+
387
+ ssot-registry profile evaluate [path]
388
+ --profile-id PROFILE_ID (required)
389
+
390
+ ssot-registry profile verify [path]
391
+ --profile-id PROFILE_ID (required)
392
+ ```
393
+
394
+ ### `test`
395
+
396
+ Subcommands:
397
+
398
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`
399
+
400
+ ```text
401
+ ssot-registry test create [path]
402
+ --id ID (required)
403
+ --title TITLE (required)
404
+ --status {planned,passing,failing,blocked,skipped}
405
+ --kind KIND (required)
406
+ --test-path TEST_PATH (required)
407
+ --feature-ids [FEATURE_IDS ...]
408
+ --claim-ids [CLAIM_IDS ...]
409
+ --evidence-ids [EVIDENCE_IDS ...]
410
+
411
+ ssot-registry test get [path]
412
+ --id ID (required)
413
+
414
+ ssot-registry test list [path]
415
+
416
+ ssot-registry test update [path]
417
+ --id ID (required)
418
+ --title TITLE
419
+ --status {planned,passing,failing,blocked,skipped}
420
+ --kind KIND
421
+ --test-path TEST_PATH
422
+
423
+ ssot-registry test delete [path]
424
+ --id ID (required)
425
+
426
+ ssot-registry test link [path]
427
+ --id ID (required)
428
+ --feature-ids [FEATURE_IDS ...]
429
+ --claim-ids [CLAIM_IDS ...]
430
+ --evidence-ids [EVIDENCE_IDS ...]
431
+
432
+ ssot-registry test unlink [path]
433
+ --id ID (required)
434
+ --feature-ids [FEATURE_IDS ...]
435
+ --claim-ids [CLAIM_IDS ...]
436
+ --evidence-ids [EVIDENCE_IDS ...]
437
+ ```
438
+
439
+ ### `issue`
440
+
441
+ Subcommands:
442
+
443
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`, `close`, `reopen`
444
+
445
+ ```text
446
+ ssot-registry issue create [path]
447
+ --id ID (required)
448
+ --title TITLE (required)
449
+ --status {open,in_progress,blocked,resolved,closed}
450
+ --severity {low,medium,high,critical}
451
+ --description DESCRIPTION
452
+ --horizon {current,next,future,explicit,backlog,out_of_bounds}
453
+ --slot SLOT
454
+ --feature-ids [FEATURE_IDS ...]
455
+ --claim-ids [CLAIM_IDS ...]
456
+ --test-ids [TEST_IDS ...]
457
+ --evidence-ids [EVIDENCE_IDS ...]
458
+ --risk-ids [RISK_IDS ...]
459
+ --release-blocking | --no-release-blocking
460
+
461
+ ssot-registry issue get [path]
462
+ --id ID (required)
463
+
464
+ ssot-registry issue list [path]
465
+
466
+ ssot-registry issue update [path]
467
+ --id ID (required)
468
+ --title TITLE
469
+ --severity {low,medium,high,critical}
470
+ --description DESCRIPTION
471
+ --release-blocking | --no-release-blocking
472
+
473
+ ssot-registry issue delete [path]
474
+ --id ID (required)
475
+
476
+ ssot-registry issue link [path]
477
+ --id ID (required)
478
+ --feature-ids [FEATURE_IDS ...]
479
+ --claim-ids [CLAIM_IDS ...]
480
+ --test-ids [TEST_IDS ...]
481
+ --evidence-ids [EVIDENCE_IDS ...]
482
+ --risk-ids [RISK_IDS ...]
483
+
484
+ ssot-registry issue unlink [path]
485
+ --id ID (required)
486
+ --feature-ids [FEATURE_IDS ...]
487
+ --claim-ids [CLAIM_IDS ...]
488
+ --test-ids [TEST_IDS ...]
489
+ --evidence-ids [EVIDENCE_IDS ...]
490
+ --risk-ids [RISK_IDS ...]
491
+
492
+ ssot-registry issue plan [path]
493
+ --ids IDS [IDS ...] (required)
494
+ --horizon {current,next,future,explicit,backlog,out_of_bounds} (required)
495
+ --slot SLOT
496
+
497
+ ssot-registry issue close [path]
498
+ --id ID (required)
499
+
500
+ ssot-registry issue reopen [path]
501
+ --id ID (required)
502
+ ```
503
+
504
+ ### `claim`
505
+
506
+ Subcommands:
507
+
508
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `evaluate`, `set-status`, `set-tier`
509
+
510
+ ```text
511
+ ssot-registry claim create [path]
512
+ --id ID (required)
513
+ --title TITLE (required)
514
+ --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired}
515
+ --tier {T0,T1,T2,T3,T4}
516
+ --kind KIND (required)
517
+ --description DESCRIPTION
518
+ --feature-ids [FEATURE_IDS ...]
519
+ --test-ids [TEST_IDS ...]
520
+ --evidence-ids [EVIDENCE_IDS ...]
521
+
522
+ ssot-registry claim get [path]
523
+ --id ID (required)
524
+
525
+ ssot-registry claim list [path]
526
+
527
+ ssot-registry claim update [path]
528
+ --id ID (required)
529
+ --title TITLE
530
+ --kind KIND
531
+ --description DESCRIPTION
532
+
533
+ ssot-registry claim delete [path]
534
+ --id ID (required)
535
+
536
+ ssot-registry claim link [path]
537
+ --id ID (required)
538
+ --feature-ids [FEATURE_IDS ...]
539
+ --test-ids [TEST_IDS ...]
540
+ --evidence-ids [EVIDENCE_IDS ...]
541
+
542
+ ssot-registry claim unlink [path]
543
+ --id ID (required)
544
+ --feature-ids [FEATURE_IDS ...]
545
+ --test-ids [TEST_IDS ...]
546
+ --evidence-ids [EVIDENCE_IDS ...]
547
+
548
+ ssot-registry claim evaluate [path]
549
+ --claim-id CLAIM_ID
550
+
551
+ ssot-registry claim set-status [path]
552
+ --id ID (required)
553
+ --status {proposed,declared,implemented,asserted,evidenced,certified,promoted,published,blocked,retired} (required)
554
+
555
+ ssot-registry claim set-tier [path]
556
+ --id ID (required)
557
+ --tier {T0,T1,T2,T3,T4} (required)
558
+ ```
559
+
560
+ ### `evidence`
561
+
562
+ Subcommands:
563
+
564
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `verify`
565
+
566
+ ```text
567
+ ssot-registry evidence create [path]
568
+ --id ID (required)
569
+ --title TITLE (required)
570
+ --status {planned,collected,passed,failed,stale}
571
+ --kind KIND (required)
572
+ --tier {T0,T1,T2,T3,T4}
573
+ --evidence-path EVIDENCE_PATH (required)
574
+ --claim-ids [CLAIM_IDS ...]
575
+ --test-ids [TEST_IDS ...]
576
+
577
+ ssot-registry evidence get [path]
578
+ --id ID (required)
579
+
580
+ ssot-registry evidence list [path]
581
+
582
+ ssot-registry evidence update [path]
583
+ --id ID (required)
584
+ --title TITLE
585
+ --status {planned,collected,passed,failed,stale}
586
+ --kind KIND
587
+ --tier {T0,T1,T2,T3,T4}
588
+ --evidence-path EVIDENCE_PATH
589
+
590
+ ssot-registry evidence delete [path]
591
+ --id ID (required)
592
+
593
+ ssot-registry evidence link [path]
594
+ --id ID (required)
595
+ --claim-ids [CLAIM_IDS ...]
596
+ --test-ids [TEST_IDS ...]
597
+
598
+ ssot-registry evidence unlink [path]
599
+ --id ID (required)
600
+ --claim-ids [CLAIM_IDS ...]
601
+ --test-ids [TEST_IDS ...]
602
+
603
+ ssot-registry evidence verify [path]
604
+ --evidence-id EVIDENCE_ID
605
+ ```
606
+
607
+ ### `risk`
608
+
609
+ Subcommands:
610
+
611
+ - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `mitigate`, `accept`, `retire`
612
+
613
+ ```text
614
+ ssot-registry risk create [path]
615
+ --id ID (required)
616
+ --title TITLE (required)
617
+ --status {active,mitigated,accepted,retired}
618
+ --severity {low,medium,high,critical}
619
+ --description DESCRIPTION
620
+ --feature-ids [FEATURE_IDS ...]
621
+ --claim-ids [CLAIM_IDS ...]
622
+ --test-ids [TEST_IDS ...]
623
+ --evidence-ids [EVIDENCE_IDS ...]
624
+ --issue-ids [ISSUE_IDS ...]
625
+ --release-blocking | --no-release-blocking
626
+
627
+ ssot-registry risk get [path]
628
+ --id ID (required)
629
+
630
+ ssot-registry risk list [path]
631
+
632
+ ssot-registry risk update [path]
633
+ --id ID (required)
634
+ --title TITLE
635
+ --severity {low,medium,high,critical}
636
+ --description DESCRIPTION
637
+ --release-blocking | --no-release-blocking
638
+
639
+ ssot-registry risk delete [path]
640
+ --id ID (required)
641
+
642
+ ssot-registry risk link [path]
643
+ --id ID (required)
644
+ --feature-ids [FEATURE_IDS ...]
645
+ --claim-ids [CLAIM_IDS ...]
646
+ --test-ids [TEST_IDS ...]
647
+ --evidence-ids [EVIDENCE_IDS ...]
648
+ --issue-ids [ISSUE_IDS ...]
649
+
650
+ ssot-registry risk unlink [path]
651
+ --id ID (required)
652
+ --feature-ids [FEATURE_IDS ...]
653
+ --claim-ids [CLAIM_IDS ...]
654
+ --test-ids [TEST_IDS ...]
655
+ --evidence-ids [EVIDENCE_IDS ...]
656
+ --issue-ids [ISSUE_IDS ...]
657
+
658
+ ssot-registry risk mitigate [path]
659
+ --id ID (required)
660
+
661
+ ssot-registry risk accept [path]
662
+ --id ID (required)
663
+
664
+ ssot-registry risk retire [path]
665
+ --id ID (required)
666
+ ```
667
+
668
+ ### `boundary`
669
+
670
+ Subcommands:
671
+
672
+ - `create`, `get`, `list`, `update`, `delete`
673
+ - `add-feature`, `remove-feature`, `add-profile`, `remove-profile`
674
+ - `freeze`
675
+
676
+ ```text
677
+ ssot-registry boundary create [path]
678
+ --id ID (required)
679
+ --title TITLE (required)
680
+ --status {draft,active,frozen,retired}
681
+ --frozen | --no-frozen
682
+ --feature-ids [FEATURE_IDS ...]
683
+ --profile-ids [PROFILE_IDS ...]
684
+
685
+ ssot-registry boundary get [path]
686
+ --id ID (required)
687
+
688
+ ssot-registry boundary list [path]
689
+
690
+ ssot-registry boundary update [path]
691
+ --id ID (required)
692
+ --title TITLE
693
+ --status {draft,active,frozen,retired}
694
+ --frozen | --no-frozen
695
+
696
+ ssot-registry boundary delete [path]
697
+ --id ID (required)
698
+
699
+ ssot-registry boundary add-feature [path]
700
+ --id ID (required)
701
+ --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)
702
+
703
+ ssot-registry boundary remove-feature [path]
704
+ --id ID (required)
705
+ --feature-ids FEATURE_IDS [FEATURE_IDS ...] (required)
706
+
707
+ ssot-registry boundary add-profile [path]
708
+ --id ID (required)
709
+ --profile-ids PROFILE_IDS [PROFILE_IDS ...] (required)
710
+
711
+ ssot-registry boundary remove-profile [path]
712
+ --id ID (required)
713
+ --profile-ids PROFILE_IDS [PROFILE_IDS ...] (required)
714
+
715
+ ssot-registry boundary freeze [path]
716
+ --boundary-id BOUNDARY_ID
717
+ ```
718
+
719
+ ### `release`
720
+
721
+ Subcommands:
722
+
723
+ - `create`, `get`, `list`, `update`, `delete`
724
+ - `add-claim`, `remove-claim`, `add-evidence`, `remove-evidence`
725
+ - `certify`, `promote`, `publish`, `revoke`
726
+
727
+ ```text
728
+ ssot-registry release create [path]
729
+ --id ID (required)
730
+ --version VERSION (required)
731
+ --status {draft,candidate,certified,promoted,published,revoked}
732
+ --boundary-id BOUNDARY_ID (required)
733
+ --claim-ids [CLAIM_IDS ...]
734
+ --evidence-ids [EVIDENCE_IDS ...]
735
+
736
+ ssot-registry release get [path]
737
+ --id ID (required)
738
+
739
+ ssot-registry release list [path]
740
+
741
+ ssot-registry release update [path]
742
+ --id ID (required)
743
+ --version VERSION
744
+ --status {draft,candidate,certified,promoted,published,revoked}
745
+ --boundary-id BOUNDARY_ID
746
+
747
+ ssot-registry release delete [path]
748
+ --id ID (required)
749
+
750
+ ssot-registry release add-claim [path]
751
+ --id ID (required)
752
+ --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)
753
+
754
+ ssot-registry release remove-claim [path]
755
+ --id ID (required)
756
+ --claim-ids CLAIM_IDS [CLAIM_IDS ...] (required)
757
+
758
+ ssot-registry release add-evidence [path]
759
+ --id ID (required)
760
+ --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)
761
+
762
+ ssot-registry release remove-evidence [path]
763
+ --id ID (required)
764
+ --evidence-ids EVIDENCE_IDS [EVIDENCE_IDS ...] (required)
765
+
766
+ ssot-registry release certify [path]
767
+ --release-id RELEASE_ID
768
+ --write-report
769
+
770
+ ssot-registry release promote [path]
771
+ --release-id RELEASE_ID
772
+
773
+ ssot-registry release publish [path]
774
+ --release-id RELEASE_ID
775
+
776
+ ssot-registry release revoke [path]
777
+ --release-id RELEASE_ID (required)
778
+ --reason REASON (required)
779
+ ```
780
+
781
+ ### `graph`
782
+
783
+ Subcommands:
784
+
785
+ - `export`
786
+
787
+ ```text
788
+ ssot-registry graph export [path]
789
+ --format {json,dot,png,svg} (required)
790
+ --output OUTPUT
791
+ ```
792
+
793
+ ### `registry`
794
+
795
+ Subcommands:
796
+
797
+ - `export`
798
+
799
+ ```text
800
+ ssot-registry registry export [path]
801
+ --format {json,csv,df,yaml,toml} (required)
802
+ --output OUTPUT
803
+ ```
804
+
805
+ ## Example workflows
806
+
807
+ ```bash
808
+ ssot init . --repo-id repo:demo.app --repo-name "Demo App" --version 0.1.0
809
+ ssot validate . --write-report
810
+ ssot feature list .
811
+ ssot profile list .
812
+ ssot boundary list .
813
+ ```
814
+
815
+ ```bash
816
+ ssot boundary create . --id bnd:demo.v0 --title "Demo v0 scope" --feature-ids feat:demo.login --profile-ids prf:demo.core
817
+ ssot boundary freeze . --boundary-id bnd:demo.v0
818
+ ssot 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
819
+ ssot release certify . --release-id rel:0.1.0 --write-report
820
+ ```
821
+
822
+ ## Package relationships
823
+
824
+ - Package type: CLI distribution
825
+ - Depends on: `ssot-registry`, `ssot-contracts`
826
+ - Related packages: `ssot-tui`, `ssot-views`, `ssot-codegen`
827
+
828
+ If you need the command-line interface, this is the package to install.