ssot-cli 0.1.14.dev1__tar.gz → 0.1.15__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 (38) hide show
  1. {ssot_cli-0.1.14.dev1/src/ssot_cli.egg-info → ssot_cli-0.1.15}/PKG-INFO +45 -12
  2. ssot_cli-0.1.14.dev1/PKG-INFO → ssot_cli-0.1.15/README.md +40 -40
  3. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/pyproject.toml +5 -5
  4. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/evidence_cmd.py +33 -1
  5. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/feature_cmd.py +121 -15
  6. ssot_cli-0.1.14.dev1/README.md → ssot_cli-0.1.15/src/ssot_cli.egg-info/PKG-INFO +73 -7
  7. ssot_cli-0.1.15/src/ssot_cli.egg-info/requires.txt +7 -0
  8. ssot_cli-0.1.14.dev1/src/ssot_cli.egg-info/requires.txt +0 -7
  9. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/setup.cfg +0 -0
  10. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/__init__.py +0 -0
  11. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/adr_cmd.py +0 -0
  12. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/boundary_cmd.py +0 -0
  13. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/campaign_cmd.py +0 -0
  14. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/claim_cmd.py +0 -0
  15. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/common.py +0 -0
  16. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/config_cmd.py +0 -0
  17. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/conformance_cmd.py +0 -0
  18. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/graph_cmd.py +0 -0
  19. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/init_cmd.py +0 -0
  20. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/issue_cmd.py +0 -0
  21. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/leases_cmd.py +0 -0
  22. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/main.py +0 -0
  23. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/maturity_cmd.py +0 -0
  24. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/pack_cmd.py +0 -0
  25. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/profile_cmd.py +0 -0
  26. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/registry_cmd.py +0 -0
  27. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/release_cmd.py +0 -0
  28. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/repo_watch_cmd.py +0 -0
  29. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/risk_cmd.py +0 -0
  30. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/spec_cmd.py +0 -0
  31. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/test_cmd.py +0 -0
  32. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/upgrade_cmd.py +0 -0
  33. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/validate_cmd.py +0 -0
  34. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli/worker_cmd.py +0 -0
  35. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli.egg-info/SOURCES.txt +0 -0
  36. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
  37. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli.egg-info/entry_points.txt +0 -0
  38. {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15}/src/ssot_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssot-cli
3
- Version: 0.1.14.dev1
3
+ Version: 0.1.15
4
4
  Summary: Primary CLI distribution for ssot-registry.
5
5
  Author-email: Jacob Stewart <jacob@swarmauri.com>
6
6
  License-Expression: Apache-2.0
@@ -25,10 +25,10 @@ Classifier: Topic :: Software Development :: Quality Assurance
25
25
  Classifier: Topic :: Utilities
26
26
  Requires-Python: <3.15,>=3.10
27
27
  Description-Content-Type: text/markdown
28
- Requires-Dist: ssot-contracts<0.3.0,>=0.2.20.dev1
29
- Requires-Dist: ssot-core<0.3.0,>=0.2.20.dev1
30
- Requires-Dist: ssot-conformance<0.3.0,>=0.2.20.dev1
31
- Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.21.dev1
28
+ Requires-Dist: ssot-contracts<0.3.0,>=0.2.21
29
+ Requires-Dist: ssot-core<0.3.0,>=0.2.21
30
+ Requires-Dist: ssot-conformance<0.3.0,>=0.2.21
31
+ Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.22
32
32
  Requires-Dist: tomli>=2.0.1; python_version < "3.11"
33
33
 
34
34
  <div align="center">
@@ -226,13 +226,13 @@ Global flags: `--output-file`, `--output-format`, `--version`
226
226
  | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
227
227
  | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
228
228
  | `ssot-registry evidence` | none |
229
- | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
229
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--test-ids`, `--tier`, `--title` |
230
230
  | `ssot-registry evidence delete` | `--id` |
231
231
  | `ssot-registry evidence get` | `--id` |
232
232
  | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
233
233
  | `ssot-registry evidence list` | `--ids`, `--origin` |
234
234
  | `ssot-registry evidence unlink` | `--claim-ids`, `--id`, `--test-ids` |
235
- | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--tier`, `--title` |
235
+ | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--tier`, `--title` |
236
236
  | `ssot-registry evidence verify` | `--evidence-id` |
237
237
  | `ssot-registry feature` | none |
238
238
  | `ssot-registry feature children` | none |
@@ -242,12 +242,14 @@ Global flags: `--output-file`, `--output-format`, `--version`
242
242
  | `ssot-registry feature create` | `--body`, `--body-file`, `--claim-ids`, `--claim-tier`, `--description`, `--horizon`, `--id`, `--implementation-status`, `--lifecycle-stage`, `--note`, `--origin`, `--out-of-bounds-disposition`, `--parent-feature-ids`, `--replacement-feature-id`, `--requires`, `--slot`, `--spec-ids`, `--target-lifecycle-stage`, `--test-ids`, `--title` |
243
243
  | `ssot-registry feature delete` | `--id` |
244
244
  | `ssot-registry feature get` | `--id` |
245
+ | `ssot-registry feature certify-proof-graph` | `--boundary-id`, `--boundary-title`, `--ids`, `--promote`, `--publish`, `--release-id`, `--release-version`, `--robustness-dimensions`, `--write-report` |
245
246
  | `ssot-registry feature lifecycle` | none |
246
247
  | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
247
248
  | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
248
249
  | `ssot-registry feature list` | `--ids`, `--origin` |
249
250
  | `ssot-registry feature parent` | none |
250
251
  | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
252
+ | `ssot-registry feature parent-audit` | `--feature-id`, `--parent-id`, `--remove-parent-link` |
251
253
  | `ssot-registry feature parent clear` | `--ids` |
252
254
  | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
253
255
  | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
@@ -522,7 +524,8 @@ Subcommands:
522
524
 
523
525
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
524
526
  - `parent add`, `parent set`, `parent remove`, `parent clear`
525
- - `children add`, `children remove`, `children list`
527
+ - `parent-audit`
528
+ - `children add` (deprecated), `children remove` (deprecated), `children list`
526
529
  - `lifecycle set`
527
530
 
528
531
  ```text
@@ -543,6 +546,7 @@ ssot-registry feature create [path]
543
546
  --test-ids [TEST_IDS ...]
544
547
  --requires [REQUIRES ...]
545
548
  --parent-feature-ids [PARENT_FEATURE_IDS ...]
549
+ `--auto-scaffold-proof-graph` | `--no-auto-scaffold-proof-graph`
546
550
 
547
551
  ssot-registry feature get [path]
548
552
  --id ID (required)
@@ -558,17 +562,28 @@ ssot-registry feature update [path]
558
562
  ssot-registry feature delete [path]
559
563
  --id ID (required)
560
564
 
565
+ ssot-registry feature certify-proof-graph [path]
566
+ --ids IDS [IDS ...] (required)
567
+ --boundary-id BOUNDARY_ID (required)
568
+ --boundary-title BOUNDARY_TITLE (required)
569
+ --release-id RELEASE_ID (required)
570
+ --release-version RELEASE_VERSION (required)
571
+ --robustness-dimensions ROBUSTNESS_DIMENSIONS [ROBUSTNESS_DIMENSIONS ...] (required)
572
+ --write-report
573
+ --promote
574
+ --publish
575
+
561
576
  ssot-registry feature link [path]
562
577
  --id ID (required)
563
578
  --claim-ids [CLAIM_IDS ...]
564
579
  --test-ids [TEST_IDS ...]
565
- --requires [REQUIRES ...]
580
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
566
581
 
567
582
  ssot-registry feature unlink [path]
568
583
  --id ID (required)
569
584
  --claim-ids [CLAIM_IDS ...]
570
585
  --test-ids [TEST_IDS ...]
571
- --requires [REQUIRES ...]
586
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
572
587
 
573
588
  ssot-registry feature plan [path]
574
589
  --ids IDS [IDS ...] (required)
@@ -600,13 +615,23 @@ ssot-registry feature parent remove [path]
600
615
  ssot-registry feature parent clear [path]
601
616
  --ids IDS [IDS ...] (required)
602
617
 
618
+ ssot-registry feature parent-audit [path]
619
+ --feature-id FEATURE_ID # only with: parent-audit migrate
620
+ --parent-id PARENT_ID # only with: parent-audit migrate
621
+ --remove-parent-link # only with: parent-audit migrate
622
+
623
+ ssot-registry feature parent-audit migrate [path]
624
+ --feature-id FEATURE_ID (required)
625
+ --parent-id PARENT_ID (required)
626
+ --remove-parent-link
627
+
603
628
  ssot-registry feature children add [path]
604
629
  --id ID (required)
605
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
630
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
606
631
 
607
632
  ssot-registry feature children remove [path]
608
633
  --id ID (required)
609
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
634
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
610
635
 
611
636
  ssot-registry feature children list [path]
612
637
  --id ID (required)
@@ -845,6 +870,10 @@ ssot-registry evidence create [path]
845
870
  --evidence-path EVIDENCE_PATH (required)
846
871
  --claim-ids [CLAIM_IDS ...]
847
872
  --test-ids [TEST_IDS ...]
873
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
874
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
875
+ --release-context-json RELEASE_CONTEXT_JSON
876
+ --release-context-file RELEASE_CONTEXT_FILE
848
877
 
849
878
  ssot-registry evidence get [path]
850
879
  --id ID (required)
@@ -858,6 +887,10 @@ ssot-registry evidence update [path]
858
887
  --kind KIND
859
888
  --tier {T0,T1,T2,T3,T4}
860
889
  --evidence-path EVIDENCE_PATH
890
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
891
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
892
+ --release-context-json RELEASE_CONTEXT_JSON
893
+ --release-context-file RELEASE_CONTEXT_FILE
861
894
 
862
895
  ssot-registry evidence delete [path]
863
896
  --id ID (required)
@@ -1,36 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: ssot-cli
3
- Version: 0.1.14.dev1
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/tree/main/pkgs/ssot-cli
8
- Project-URL: Repository, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
9
- Project-URL: Issues, https://github.com/groupsum/ssot-registry/issues
10
- Keywords: ssot,cli,registry,governance,release-management,validation,developer-tools
11
- Classifier: Development Status :: 3 - Alpha
12
- Classifier: Environment :: Console
13
- Classifier: Intended Audience :: Developers
14
- Classifier: Intended Audience :: Information Technology
15
- Classifier: Operating System :: OS Independent
16
- Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3 :: Only
18
- Classifier: Programming Language :: Python :: 3.10
19
- Classifier: Programming Language :: Python :: 3.11
20
- Classifier: Programming Language :: Python :: 3.12
21
- Classifier: Programming Language :: Python :: 3.13
22
- Classifier: Programming Language :: Python :: 3.14
23
- Classifier: Topic :: Software Development :: Documentation
24
- Classifier: Topic :: Software Development :: Quality Assurance
25
- Classifier: Topic :: Utilities
26
- Requires-Python: <3.15,>=3.10
27
- Description-Content-Type: text/markdown
28
- Requires-Dist: ssot-contracts<0.3.0,>=0.2.20.dev1
29
- Requires-Dist: ssot-core<0.3.0,>=0.2.20.dev1
30
- Requires-Dist: ssot-conformance<0.3.0,>=0.2.20.dev1
31
- Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.21.dev1
32
- Requires-Dist: tomli>=2.0.1; python_version < "3.11"
33
-
34
1
  <div align="center">
35
2
  <h1>🔷 ssot-cli</h1>
36
3
  <p><strong>Primary command-line distribution for SSOT workflows.</strong></p>
@@ -226,13 +193,13 @@ Global flags: `--output-file`, `--output-format`, `--version`
226
193
  | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
227
194
  | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
228
195
  | `ssot-registry evidence` | none |
229
- | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
196
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--test-ids`, `--tier`, `--title` |
230
197
  | `ssot-registry evidence delete` | `--id` |
231
198
  | `ssot-registry evidence get` | `--id` |
232
199
  | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
233
200
  | `ssot-registry evidence list` | `--ids`, `--origin` |
234
201
  | `ssot-registry evidence unlink` | `--claim-ids`, `--id`, `--test-ids` |
235
- | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--tier`, `--title` |
202
+ | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--tier`, `--title` |
236
203
  | `ssot-registry evidence verify` | `--evidence-id` |
237
204
  | `ssot-registry feature` | none |
238
205
  | `ssot-registry feature children` | none |
@@ -242,12 +209,14 @@ Global flags: `--output-file`, `--output-format`, `--version`
242
209
  | `ssot-registry feature create` | `--body`, `--body-file`, `--claim-ids`, `--claim-tier`, `--description`, `--horizon`, `--id`, `--implementation-status`, `--lifecycle-stage`, `--note`, `--origin`, `--out-of-bounds-disposition`, `--parent-feature-ids`, `--replacement-feature-id`, `--requires`, `--slot`, `--spec-ids`, `--target-lifecycle-stage`, `--test-ids`, `--title` |
243
210
  | `ssot-registry feature delete` | `--id` |
244
211
  | `ssot-registry feature get` | `--id` |
212
+ | `ssot-registry feature certify-proof-graph` | `--boundary-id`, `--boundary-title`, `--ids`, `--promote`, `--publish`, `--release-id`, `--release-version`, `--robustness-dimensions`, `--write-report` |
245
213
  | `ssot-registry feature lifecycle` | none |
246
214
  | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
247
215
  | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
248
216
  | `ssot-registry feature list` | `--ids`, `--origin` |
249
217
  | `ssot-registry feature parent` | none |
250
218
  | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
219
+ | `ssot-registry feature parent-audit` | `--feature-id`, `--parent-id`, `--remove-parent-link` |
251
220
  | `ssot-registry feature parent clear` | `--ids` |
252
221
  | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
253
222
  | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
@@ -522,7 +491,8 @@ Subcommands:
522
491
 
523
492
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
524
493
  - `parent add`, `parent set`, `parent remove`, `parent clear`
525
- - `children add`, `children remove`, `children list`
494
+ - `parent-audit`
495
+ - `children add` (deprecated), `children remove` (deprecated), `children list`
526
496
  - `lifecycle set`
527
497
 
528
498
  ```text
@@ -543,6 +513,7 @@ ssot-registry feature create [path]
543
513
  --test-ids [TEST_IDS ...]
544
514
  --requires [REQUIRES ...]
545
515
  --parent-feature-ids [PARENT_FEATURE_IDS ...]
516
+ `--auto-scaffold-proof-graph` | `--no-auto-scaffold-proof-graph`
546
517
 
547
518
  ssot-registry feature get [path]
548
519
  --id ID (required)
@@ -558,17 +529,28 @@ ssot-registry feature update [path]
558
529
  ssot-registry feature delete [path]
559
530
  --id ID (required)
560
531
 
532
+ ssot-registry feature certify-proof-graph [path]
533
+ --ids IDS [IDS ...] (required)
534
+ --boundary-id BOUNDARY_ID (required)
535
+ --boundary-title BOUNDARY_TITLE (required)
536
+ --release-id RELEASE_ID (required)
537
+ --release-version RELEASE_VERSION (required)
538
+ --robustness-dimensions ROBUSTNESS_DIMENSIONS [ROBUSTNESS_DIMENSIONS ...] (required)
539
+ --write-report
540
+ --promote
541
+ --publish
542
+
561
543
  ssot-registry feature link [path]
562
544
  --id ID (required)
563
545
  --claim-ids [CLAIM_IDS ...]
564
546
  --test-ids [TEST_IDS ...]
565
- --requires [REQUIRES ...]
547
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
566
548
 
567
549
  ssot-registry feature unlink [path]
568
550
  --id ID (required)
569
551
  --claim-ids [CLAIM_IDS ...]
570
552
  --test-ids [TEST_IDS ...]
571
- --requires [REQUIRES ...]
553
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
572
554
 
573
555
  ssot-registry feature plan [path]
574
556
  --ids IDS [IDS ...] (required)
@@ -600,13 +582,23 @@ ssot-registry feature parent remove [path]
600
582
  ssot-registry feature parent clear [path]
601
583
  --ids IDS [IDS ...] (required)
602
584
 
585
+ ssot-registry feature parent-audit [path]
586
+ --feature-id FEATURE_ID # only with: parent-audit migrate
587
+ --parent-id PARENT_ID # only with: parent-audit migrate
588
+ --remove-parent-link # only with: parent-audit migrate
589
+
590
+ ssot-registry feature parent-audit migrate [path]
591
+ --feature-id FEATURE_ID (required)
592
+ --parent-id PARENT_ID (required)
593
+ --remove-parent-link
594
+
603
595
  ssot-registry feature children add [path]
604
596
  --id ID (required)
605
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
597
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
606
598
 
607
599
  ssot-registry feature children remove [path]
608
600
  --id ID (required)
609
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
601
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
610
602
 
611
603
  ssot-registry feature children list [path]
612
604
  --id ID (required)
@@ -845,6 +837,10 @@ ssot-registry evidence create [path]
845
837
  --evidence-path EVIDENCE_PATH (required)
846
838
  --claim-ids [CLAIM_IDS ...]
847
839
  --test-ids [TEST_IDS ...]
840
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
841
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
842
+ --release-context-json RELEASE_CONTEXT_JSON
843
+ --release-context-file RELEASE_CONTEXT_FILE
848
844
 
849
845
  ssot-registry evidence get [path]
850
846
  --id ID (required)
@@ -858,6 +854,10 @@ ssot-registry evidence update [path]
858
854
  --kind KIND
859
855
  --tier {T0,T1,T2,T3,T4}
860
856
  --evidence-path EVIDENCE_PATH
857
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
858
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
859
+ --release-context-json RELEASE_CONTEXT_JSON
860
+ --release-context-file RELEASE_CONTEXT_FILE
861
861
 
862
862
  ssot-registry evidence delete [path]
863
863
  --id ID (required)
@@ -4,17 +4,17 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssot-cli"
7
- version = "0.1.14.dev1"
7
+ version = "0.1.15"
8
8
  description = "Primary CLI distribution for ssot-registry."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10,<3.15"
11
11
  license = "Apache-2.0"
12
12
  authors = [{ name = "Jacob Stewart", email = "jacob@swarmauri.com" }]
13
13
  dependencies = [
14
- "ssot-contracts>=0.2.20.dev1,<0.3.0",
15
- "ssot-core>=0.2.20.dev1,<0.3.0",
16
- "ssot-conformance>=0.2.20.dev1,<0.3.0",
17
- "ssot-pack-contracts>=0.2.21.dev1,<0.3.0",
14
+ "ssot-contracts>=0.2.21,<0.3.0",
15
+ "ssot-core>=0.2.21,<0.3.0",
16
+ "ssot-conformance>=0.2.21,<0.3.0",
17
+ "ssot-pack-contracts>=0.2.22,<0.3.0",
18
18
  "tomli>=2.0.1; python_version < '3.11'",
19
19
  ]
20
20
  keywords = ["ssot", "cli", "registry", "governance", "release-management", "validation", "developer-tools"]
@@ -13,7 +13,15 @@ from ssot_registry.api import (
13
13
  update_entity,
14
14
  verify_evidence_rows,
15
15
  )
16
- from ssot_cli.common import add_ids_argument, add_origin_argument, add_path_argument, collect_list_fields, compact_dict, load_text_argument
16
+ from ssot_cli.common import (
17
+ add_ids_argument,
18
+ add_origin_argument,
19
+ add_path_argument,
20
+ collect_list_fields,
21
+ compact_dict,
22
+ load_json_object_argument,
23
+ load_text_argument,
24
+ )
17
25
 
18
26
 
19
27
  _LINK_MAPPING = {
@@ -43,6 +51,10 @@ def register_evidence(subparsers: argparse._SubParsersAction) -> None:
43
51
  create.add_argument("--evidence-path", dest="evidence_path", required=True, help="Repository-relative location of the evidence artifact.")
44
52
  create.add_argument("--claim-ids", nargs="*", default=[], help="Claim ids supported by the evidence.")
45
53
  create.add_argument("--test-ids", nargs="*", default=[], help="Test ids associated with the evidence.")
54
+ create.add_argument("--robustness-dimensions", nargs="*", default=None, help="Declared robustness dimensions supported by this evidence.")
55
+ create.add_argument("--source-evidence-ids", nargs="*", default=None, help="Lower-tier evidence ids that this evidence extends or hardens.")
56
+ create.add_argument("--release-context-json", default=None, help="Inline JSON object describing release and boundary context for T3 evidence.")
57
+ create.add_argument("--release-context-file", default=None, help="Path to a JSON file containing release and boundary context for T3 evidence.")
46
58
  create.set_defaults(func=run_create)
47
59
 
48
60
  get = evidence_sub.add_parser("get", help="Show one evidence row.", description="Fetch a single evidence record by id.")
@@ -67,6 +79,10 @@ def register_evidence(subparsers: argparse._SubParsersAction) -> None:
67
79
  update.add_argument("--body-file", default=None, help="Path to a UTF-8 text file containing the replacement evidence body.")
68
80
  add_origin_argument(update, choices=sorted(ASSURANCE_ORIGINS), default=None)
69
81
  update.add_argument("--evidence-path", dest="evidence_path", default=None, help="Updated repository-relative path to the artifact.")
82
+ update.add_argument("--robustness-dimensions", nargs="*", default=None, help="Replacement robustness dimensions for the evidence.")
83
+ update.add_argument("--source-evidence-ids", nargs="*", default=None, help="Replacement source evidence ids for the evidence.")
84
+ update.add_argument("--release-context-json", default=None, help="Replacement inline JSON object describing release and boundary context.")
85
+ update.add_argument("--release-context-file", default=None, help="Path to a JSON file containing replacement release and boundary context.")
70
86
  update.set_defaults(func=run_update)
71
87
 
72
88
  delete = evidence_sub.add_parser("delete", help="Delete an evidence row.", description="Remove an evidence record from the registry.")
@@ -103,6 +119,11 @@ def _build_links(args: argparse.Namespace) -> dict[str, list[str]]:
103
119
 
104
120
  def run_create(args: argparse.Namespace) -> dict[str, object]:
105
121
  body = load_text_argument(inline_value=args.body, file_value=args.body_file, label="evidence")
122
+ release_context = load_json_object_argument(
123
+ inline_value=args.release_context_json,
124
+ file_value=args.release_context_file,
125
+ label="evidence release context",
126
+ )
106
127
  row = {
107
128
  "id": args.id,
108
129
  "title": args.title,
@@ -114,6 +135,9 @@ def run_create(args: argparse.Namespace) -> dict[str, object]:
114
135
  "path": args.evidence_path,
115
136
  "claim_ids": args.claim_ids,
116
137
  "test_ids": args.test_ids,
138
+ "robustness_dimensions": args.robustness_dimensions,
139
+ "source_evidence_ids": args.source_evidence_ids,
140
+ "release_context": release_context,
117
141
  }
118
142
  return create_entity(args.path, "evidence", row)
119
143
 
@@ -128,6 +152,11 @@ def run_list(args: argparse.Namespace) -> dict[str, object]:
128
152
 
129
153
  def run_update(args: argparse.Namespace) -> dict[str, object]:
130
154
  body = load_text_argument(inline_value=args.body, file_value=args.body_file, label="evidence")
155
+ release_context = load_json_object_argument(
156
+ inline_value=args.release_context_json,
157
+ file_value=args.release_context_file,
158
+ label="evidence release context",
159
+ )
131
160
  changes = compact_dict(
132
161
  {
133
162
  "title": args.title,
@@ -137,6 +166,9 @@ def run_update(args: argparse.Namespace) -> dict[str, object]:
137
166
  "body": body,
138
167
  "origin": args.origin,
139
168
  "path": args.evidence_path,
169
+ "robustness_dimensions": args.robustness_dimensions,
170
+ "source_evidence_ids": args.source_evidence_ids,
171
+ "release_context": release_context,
140
172
  }
141
173
  )
142
174
  if not changes:
@@ -12,13 +12,18 @@ from ssot_contracts.generated.python.enums import (
12
12
  )
13
13
  from ssot_registry.api import (
14
14
  add_feature_children,
15
+ audit_feature_parent_links,
16
+ certify_feature_proof_graphs,
15
17
  create_entity,
18
+ create_feature_with_scaffolded_proof_graph,
16
19
  delete_entity,
17
20
  get_entity,
18
21
  link_entities,
19
22
  list_feature_children,
20
23
  list_entities,
24
+ migrate_feature_parent_audit_edge,
21
25
  plan_features,
26
+ resolve_feature_create_auto_scaffold,
22
27
  remove_feature_children,
23
28
  set_feature_lifecycle,
24
29
  set_feature_parents,
@@ -68,10 +73,43 @@ def register_feature(subparsers: argparse._SubParsersAction) -> None:
68
73
  create.add_argument("--spec-ids", nargs="*", default=[], help="SPEC ids that define or constrain the feature.")
69
74
  create.add_argument("--claim-ids", nargs="*", default=[], help="Claim ids currently attached to the feature.")
70
75
  create.add_argument("--test-ids", nargs="*", default=[], help="Test ids that verify the feature.")
71
- create.add_argument("--requires", nargs="*", default=[], help="Passing prerequisite feature ids; not a parent/leaf composition link.")
76
+ create.add_argument(
77
+ "--requires",
78
+ nargs="*",
79
+ default=[],
80
+ help="Prerequisite feature ids; release and profile gates require them to pass. Not a parent/leaf composition link.",
81
+ )
72
82
  create.add_argument("--parent-feature-ids", nargs="*", default=[], help="Inventory parent feature ids; composition only, never a passing prerequisite.")
83
+ add_optional_bool_argument(
84
+ create,
85
+ "--auto-scaffold-proof-graph",
86
+ default=None,
87
+ help_text="Create a minimally valid linked claim, test, and evidence scaffold for this feature in the same transaction.",
88
+ )
73
89
  create.set_defaults(func=run_create)
74
90
 
91
+ certify_graph = feature_sub.add_parser(
92
+ "certify-proof-graph",
93
+ help="Execute proof-graph delivery and certification closure for features.",
94
+ description="Run linked tests, materialize source and T3 evidence, add the features to a boundary, create or update a release, certify it, and optionally promote or publish it.",
95
+ )
96
+ add_path_argument(certify_graph)
97
+ certify_graph.add_argument("--ids", nargs="+", required=True, help="Feature ids to drive through proof-graph certification closure.")
98
+ certify_graph.add_argument("--boundary-id", required=True, help="Boundary id to create or update for the selected features.")
99
+ certify_graph.add_argument("--boundary-title", required=True, help="Boundary title to use when creating the boundary.")
100
+ certify_graph.add_argument("--release-id", required=True, help="Release id to create or update for the selected features.")
101
+ certify_graph.add_argument("--release-version", required=True, help="Release version string to record on the release.")
102
+ certify_graph.add_argument(
103
+ "--robustness-dimensions",
104
+ nargs="+",
105
+ required=True,
106
+ help="Robustness dimensions to stamp into the T3 evidence rows.",
107
+ )
108
+ certify_graph.add_argument("--write-report", action="store_true", help="Write the certification report artifact.")
109
+ certify_graph.add_argument("--promote", action="store_true", help="Promote the certified release after certification succeeds.")
110
+ certify_graph.add_argument("--publish", action="store_true", help="Publish the release after certification and promotion succeed.")
111
+ certify_graph.set_defaults(func=run_certify_proof_graph)
112
+
75
113
  get = feature_sub.add_parser("get", help="Show one feature.", description="Fetch a single feature record by id.")
76
114
  add_path_argument(get)
77
115
  get.add_argument("--id", required=True, help="Feature id to retrieve.")
@@ -99,22 +137,26 @@ def register_feature(subparsers: argparse._SubParsersAction) -> None:
99
137
  delete.add_argument("--id", required=True, help="Feature id to delete.")
100
138
  delete.set_defaults(func=run_delete)
101
139
 
102
- link = feature_sub.add_parser("link", help="Attach related records to a feature.", description="Add links from a feature to governing SPECs, claims, tests, or passing prerequisite features.")
140
+ link = feature_sub.add_parser("link", help="Attach related records to a feature.", description="Add links from a feature to governing SPECs, claims, tests, or prerequisite features enforced by release and profile gates.")
103
141
  add_path_argument(link)
104
142
  link.add_argument("--id", required=True, help="Feature id that should receive the links.")
105
143
  link.add_argument("--spec-ids", nargs="*", help="SPEC ids to attach.")
106
144
  link.add_argument("--claim-ids", nargs="*", help="Claim ids to attach.")
107
145
  link.add_argument("--test-ids", nargs="*", help="Test ids to attach.")
108
- link.add_argument("--requires", nargs="*", help="Passing prerequisite feature ids to attach; not parent/leaf composition.")
146
+ link.add_argument(
147
+ "--requires",
148
+ nargs="*",
149
+ help="Prerequisite feature ids to attach; release and profile gates require them to pass. Not parent/leaf composition.",
150
+ )
109
151
  link.set_defaults(func=run_link)
110
152
 
111
- unlink = feature_sub.add_parser("unlink", help="Remove related records from a feature.", description="Remove links from a feature to SPECs, claims, tests, or prerequisite features.")
153
+ unlink = feature_sub.add_parser("unlink", help="Remove related records from a feature.", description="Remove links from a feature to SPECs, claims, tests, or prerequisite features enforced by release and profile gates.")
112
154
  add_path_argument(unlink)
113
155
  unlink.add_argument("--id", required=True, help="Feature id whose links should be removed.")
114
156
  unlink.add_argument("--spec-ids", nargs="*", help="SPEC ids to detach.")
115
157
  unlink.add_argument("--claim-ids", nargs="*", help="Claim ids to detach.")
116
158
  unlink.add_argument("--test-ids", nargs="*", help="Test ids to detach.")
117
- unlink.add_argument("--requires", nargs="*", help="Passing prerequisite feature ids to detach.")
159
+ unlink.add_argument("--requires", nargs="*", help="Prerequisite feature ids to detach; release and profile gates require them to pass.")
118
160
  unlink.set_defaults(func=run_unlink)
119
161
 
120
162
  plan = feature_sub.add_parser("plan", help="Set planned rollout targets.", description="Update feature planning fields such as horizon, target claim tier, and future lifecycle.")
@@ -153,42 +195,72 @@ def register_feature(subparsers: argparse._SubParsersAction) -> None:
153
195
  lifecycle_set.add_argument("--note", default=None, help="Lifecycle rationale or operator note.")
154
196
  lifecycle_set.set_defaults(func=run_lifecycle_set)
155
197
 
156
- parent = feature_sub.add_parser("parent", help="Manage feature parent links.", description="Manage inventory composition links from one or more leaf features to one or more parent features.")
198
+ parent = feature_sub.add_parser(
199
+ "parent",
200
+ help="Manage feature parent links.",
201
+ description="Manage inventory composition links only; parent links are never prerequisites or release-readiness gates.",
202
+ )
157
203
  parent_sub = parent.add_subparsers(dest="feature_parent_command", required=True)
158
204
  for command_name, help_text in (
159
205
  ("add", "Add parent links to features."),
160
206
  ("set", "Replace parent links on features."),
161
207
  ("remove", "Remove parent links from features."),
162
208
  ):
163
- command = parent_sub.add_parser(command_name, help=help_text)
209
+ command = parent_sub.add_parser(
210
+ command_name,
211
+ help=help_text,
212
+ description="Mutate inventory composition links only. Use feature link --requires for prerequisites.",
213
+ )
164
214
  add_path_argument(command)
165
215
  command.add_argument("--ids", nargs="+", required=True, help="Feature ids whose parent links should change.")
166
- command.add_argument("--parent-ids", nargs="+", required=True, help="Parent feature ids to add, set, or remove.")
216
+ command.add_argument("--parent-ids", nargs="+", required=True, help="Inventory parent feature ids to add, set, or remove; never prerequisites.")
167
217
  command.set_defaults(func=run_parent, parent_mode=command_name)
168
- parent_clear = parent_sub.add_parser("clear", help="Clear all parent links from features.")
218
+ parent_clear = parent_sub.add_parser("clear", help="Clear all parent links from features.", description="Clear inventory composition links only.")
169
219
  add_path_argument(parent_clear)
170
220
  parent_clear.add_argument("--ids", nargs="+", required=True, help="Feature ids whose parent links should be cleared.")
171
221
  parent_clear.set_defaults(func=run_parent, parent_mode="clear", parent_ids=[])
172
222
 
173
- children = feature_sub.add_parser("children", help="Manage feature children.", description="Manage inventory child links by mutating each child feature's parent_feature_ids field.")
223
+ children = feature_sub.add_parser("children", help="Manage feature children.", description="Manage derived inventory child links by mutating each child feature's parent_feature_ids field; never prerequisites.")
174
224
  children_sub = children.add_subparsers(dest="feature_children_command", required=True)
175
- children_add = children_sub.add_parser("add", help="Add child features to a parent feature.")
225
+ children_add = children_sub.add_parser("add", help="Deprecated: add child features to a parent feature.", description="Deprecated convenience mutation for inventory composition only. Use feature parent add for parent links and feature link --requires for prerequisites.")
176
226
  add_path_argument(children_add)
177
227
  children_add.add_argument("--id", required=True, help="Parent feature id.")
178
- children_add.add_argument("--child-ids", nargs="+", required=True, help="Child feature ids to attach to the parent.")
228
+ children_add.add_argument("--child-ids", nargs="+", required=True, help="Deprecated: child feature ids to attach to the inventory parent.")
179
229
  children_add.set_defaults(func=run_children_add)
180
230
 
181
- children_remove = children_sub.add_parser("remove", help="Remove child features from a parent feature.")
231
+ children_remove = children_sub.add_parser("remove", help="Deprecated: remove child features from a parent feature.", description="Deprecated convenience mutation for inventory composition only. Use feature parent remove for parent links and feature unlink --requires for prerequisites.")
182
232
  add_path_argument(children_remove)
183
233
  children_remove.add_argument("--id", required=True, help="Parent feature id.")
184
- children_remove.add_argument("--child-ids", nargs="+", required=True, help="Child feature ids to detach from the parent.")
234
+ children_remove.add_argument("--child-ids", nargs="+", required=True, help="Deprecated: child feature ids to detach from the inventory parent.")
185
235
  children_remove.set_defaults(func=run_children_remove)
186
236
 
187
- children_list = children_sub.add_parser("list", help="List child features for a parent feature.")
237
+ children_list = children_sub.add_parser("list", help="List child features for a parent feature.", description="List derived inventory children for a parent feature without mutating the registry.")
188
238
  add_path_argument(children_list)
189
239
  children_list.add_argument("--id", required=True, help="Parent feature id.")
190
240
  children_list.set_defaults(func=run_children_list)
191
241
 
242
+ parent_audit = feature_sub.add_parser(
243
+ "parent-audit",
244
+ help="Audit parent links that may be prerequisite workarounds.",
245
+ description="Report suspicious inventory parent links, or explicitly migrate one parent link into feature.requires.",
246
+ )
247
+ parent_audit.add_argument(
248
+ "path_or_command",
249
+ nargs="?",
250
+ default=".",
251
+ help="Repository path to audit, or the literal 'migrate' to run the opt-in migration helper.",
252
+ )
253
+ parent_audit.add_argument(
254
+ "path",
255
+ nargs="?",
256
+ default=None,
257
+ help="Repository path when using 'migrate'. Defaults to the current directory.",
258
+ )
259
+ parent_audit.add_argument("--feature-id", default=None, help="Feature id whose parent link should be migrated when using 'migrate'.")
260
+ parent_audit.add_argument("--parent-id", default=None, help="Parent feature id to add to requires when using 'migrate'.")
261
+ parent_audit.add_argument("--remove-parent-link", action="store_true", help="When using 'migrate', remove the parent_feature_ids link after adding requires.")
262
+ parent_audit.set_defaults(func=run_parent_audit)
263
+
192
264
 
193
265
  def _build_links(args: argparse.Namespace) -> dict[str, list[str]]:
194
266
  links = collect_list_fields(args, _LINK_MAPPING)
@@ -227,9 +299,26 @@ def run_create(args: argparse.Namespace) -> dict[str, object]:
227
299
  "requires": args.requires,
228
300
  "parent_feature_ids": args.parent_feature_ids,
229
301
  }
302
+ if resolve_feature_create_auto_scaffold(args.path, args.auto_scaffold_proof_graph):
303
+ return create_feature_with_scaffolded_proof_graph(args.path, row)
230
304
  return create_entity(args.path, "features", row)
231
305
 
232
306
 
307
+ def run_certify_proof_graph(args: argparse.Namespace) -> dict[str, object]:
308
+ return certify_feature_proof_graphs(
309
+ args.path,
310
+ feature_ids=args.ids,
311
+ boundary_id=args.boundary_id,
312
+ boundary_title=args.boundary_title,
313
+ release_id=args.release_id,
314
+ release_version=args.release_version,
315
+ robustness_dimensions=args.robustness_dimensions,
316
+ write_report=args.write_report,
317
+ promote=args.promote,
318
+ publish=args.publish,
319
+ )
320
+
321
+
233
322
  def run_get(args: argparse.Namespace) -> dict[str, object]:
234
323
  return get_entity(args.path, "features", args.id)
235
324
 
@@ -304,3 +393,20 @@ def run_children_remove(args: argparse.Namespace) -> dict[str, object]:
304
393
  def run_children_list(args: argparse.Namespace) -> list[dict[str, object]]:
305
394
  return list_feature_children(args.path, args.id)
306
395
 
396
+
397
+ def run_parent_audit(args: argparse.Namespace) -> dict[str, object]:
398
+ if args.path_or_command == "migrate":
399
+ if args.feature_id is None or args.parent_id is None:
400
+ raise ValueError("feature parent-audit migrate requires --feature-id and --parent-id")
401
+ return migrate_feature_parent_audit_edge(
402
+ args.path or ".",
403
+ args.feature_id,
404
+ args.parent_id,
405
+ remove_parent_link=args.remove_parent_link,
406
+ )
407
+ if args.path is not None:
408
+ raise ValueError("feature parent-audit accepts either <path> or migrate <path>")
409
+ if args.feature_id is not None or args.parent_id is not None or args.remove_parent_link:
410
+ raise ValueError("feature parent-audit migration flags require the migrate subcommand")
411
+ return audit_feature_parent_links(args.path_or_command)
412
+
@@ -1,3 +1,36 @@
1
+ Metadata-Version: 2.4
2
+ Name: ssot-cli
3
+ Version: 0.1.15
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/tree/main/pkgs/ssot-cli
8
+ Project-URL: Repository, https://github.com/groupsum/ssot-registry/tree/main/pkgs/ssot-cli
9
+ Project-URL: Issues, https://github.com/groupsum/ssot-registry/issues
10
+ Keywords: ssot,cli,registry,governance,release-management,validation,developer-tools
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Software Development :: Documentation
24
+ Classifier: Topic :: Software Development :: Quality Assurance
25
+ Classifier: Topic :: Utilities
26
+ Requires-Python: <3.15,>=3.10
27
+ Description-Content-Type: text/markdown
28
+ Requires-Dist: ssot-contracts<0.3.0,>=0.2.21
29
+ Requires-Dist: ssot-core<0.3.0,>=0.2.21
30
+ Requires-Dist: ssot-conformance<0.3.0,>=0.2.21
31
+ Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.22
32
+ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
33
+
1
34
  <div align="center">
2
35
  <h1>🔷 ssot-cli</h1>
3
36
  <p><strong>Primary command-line distribution for SSOT workflows.</strong></p>
@@ -193,13 +226,13 @@ Global flags: `--output-file`, `--output-format`, `--version`
193
226
  | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
194
227
  | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
195
228
  | `ssot-registry evidence` | none |
196
- | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
229
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--test-ids`, `--tier`, `--title` |
197
230
  | `ssot-registry evidence delete` | `--id` |
198
231
  | `ssot-registry evidence get` | `--id` |
199
232
  | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
200
233
  | `ssot-registry evidence list` | `--ids`, `--origin` |
201
234
  | `ssot-registry evidence unlink` | `--claim-ids`, `--id`, `--test-ids` |
202
- | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--tier`, `--title` |
235
+ | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--release-context-file`, `--release-context-json`, `--robustness-dimensions`, `--source-evidence-ids`, `--status`, `--tier`, `--title` |
203
236
  | `ssot-registry evidence verify` | `--evidence-id` |
204
237
  | `ssot-registry feature` | none |
205
238
  | `ssot-registry feature children` | none |
@@ -209,12 +242,14 @@ Global flags: `--output-file`, `--output-format`, `--version`
209
242
  | `ssot-registry feature create` | `--body`, `--body-file`, `--claim-ids`, `--claim-tier`, `--description`, `--horizon`, `--id`, `--implementation-status`, `--lifecycle-stage`, `--note`, `--origin`, `--out-of-bounds-disposition`, `--parent-feature-ids`, `--replacement-feature-id`, `--requires`, `--slot`, `--spec-ids`, `--target-lifecycle-stage`, `--test-ids`, `--title` |
210
243
  | `ssot-registry feature delete` | `--id` |
211
244
  | `ssot-registry feature get` | `--id` |
245
+ | `ssot-registry feature certify-proof-graph` | `--boundary-id`, `--boundary-title`, `--ids`, `--promote`, `--publish`, `--release-id`, `--release-version`, `--robustness-dimensions`, `--write-report` |
212
246
  | `ssot-registry feature lifecycle` | none |
213
247
  | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
214
248
  | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
215
249
  | `ssot-registry feature list` | `--ids`, `--origin` |
216
250
  | `ssot-registry feature parent` | none |
217
251
  | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
252
+ | `ssot-registry feature parent-audit` | `--feature-id`, `--parent-id`, `--remove-parent-link` |
218
253
  | `ssot-registry feature parent clear` | `--ids` |
219
254
  | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
220
255
  | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
@@ -489,7 +524,8 @@ Subcommands:
489
524
 
490
525
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
491
526
  - `parent add`, `parent set`, `parent remove`, `parent clear`
492
- - `children add`, `children remove`, `children list`
527
+ - `parent-audit`
528
+ - `children add` (deprecated), `children remove` (deprecated), `children list`
493
529
  - `lifecycle set`
494
530
 
495
531
  ```text
@@ -510,6 +546,7 @@ ssot-registry feature create [path]
510
546
  --test-ids [TEST_IDS ...]
511
547
  --requires [REQUIRES ...]
512
548
  --parent-feature-ids [PARENT_FEATURE_IDS ...]
549
+ `--auto-scaffold-proof-graph` | `--no-auto-scaffold-proof-graph`
513
550
 
514
551
  ssot-registry feature get [path]
515
552
  --id ID (required)
@@ -525,17 +562,28 @@ ssot-registry feature update [path]
525
562
  ssot-registry feature delete [path]
526
563
  --id ID (required)
527
564
 
565
+ ssot-registry feature certify-proof-graph [path]
566
+ --ids IDS [IDS ...] (required)
567
+ --boundary-id BOUNDARY_ID (required)
568
+ --boundary-title BOUNDARY_TITLE (required)
569
+ --release-id RELEASE_ID (required)
570
+ --release-version RELEASE_VERSION (required)
571
+ --robustness-dimensions ROBUSTNESS_DIMENSIONS [ROBUSTNESS_DIMENSIONS ...] (required)
572
+ --write-report
573
+ --promote
574
+ --publish
575
+
528
576
  ssot-registry feature link [path]
529
577
  --id ID (required)
530
578
  --claim-ids [CLAIM_IDS ...]
531
579
  --test-ids [TEST_IDS ...]
532
- --requires [REQUIRES ...]
580
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
533
581
 
534
582
  ssot-registry feature unlink [path]
535
583
  --id ID (required)
536
584
  --claim-ids [CLAIM_IDS ...]
537
585
  --test-ids [TEST_IDS ...]
538
- --requires [REQUIRES ...]
586
+ --requires [REQUIRES ...] # prerequisite feature ids enforced by release/profile gates
539
587
 
540
588
  ssot-registry feature plan [path]
541
589
  --ids IDS [IDS ...] (required)
@@ -567,13 +615,23 @@ ssot-registry feature parent remove [path]
567
615
  ssot-registry feature parent clear [path]
568
616
  --ids IDS [IDS ...] (required)
569
617
 
618
+ ssot-registry feature parent-audit [path]
619
+ --feature-id FEATURE_ID # only with: parent-audit migrate
620
+ --parent-id PARENT_ID # only with: parent-audit migrate
621
+ --remove-parent-link # only with: parent-audit migrate
622
+
623
+ ssot-registry feature parent-audit migrate [path]
624
+ --feature-id FEATURE_ID (required)
625
+ --parent-id PARENT_ID (required)
626
+ --remove-parent-link
627
+
570
628
  ssot-registry feature children add [path]
571
629
  --id ID (required)
572
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
630
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
573
631
 
574
632
  ssot-registry feature children remove [path]
575
633
  --id ID (required)
576
- --child-ids CHILD_IDS [CHILD_IDS ...] (required)
634
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required, deprecated mutation surface)
577
635
 
578
636
  ssot-registry feature children list [path]
579
637
  --id ID (required)
@@ -812,6 +870,10 @@ ssot-registry evidence create [path]
812
870
  --evidence-path EVIDENCE_PATH (required)
813
871
  --claim-ids [CLAIM_IDS ...]
814
872
  --test-ids [TEST_IDS ...]
873
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
874
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
875
+ --release-context-json RELEASE_CONTEXT_JSON
876
+ --release-context-file RELEASE_CONTEXT_FILE
815
877
 
816
878
  ssot-registry evidence get [path]
817
879
  --id ID (required)
@@ -825,6 +887,10 @@ ssot-registry evidence update [path]
825
887
  --kind KIND
826
888
  --tier {T0,T1,T2,T3,T4}
827
889
  --evidence-path EVIDENCE_PATH
890
+ --source-evidence-ids [SOURCE_EVIDENCE_IDS ...]
891
+ --robustness-dimensions [ROBUSTNESS_DIMENSIONS ...]
892
+ --release-context-json RELEASE_CONTEXT_JSON
893
+ --release-context-file RELEASE_CONTEXT_FILE
828
894
 
829
895
  ssot-registry evidence delete [path]
830
896
  --id ID (required)
@@ -0,0 +1,7 @@
1
+ ssot-contracts<0.3.0,>=0.2.21
2
+ ssot-core<0.3.0,>=0.2.21
3
+ ssot-conformance<0.3.0,>=0.2.21
4
+ ssot-pack-contracts<0.3.0,>=0.2.22
5
+
6
+ [:python_version < "3.11"]
7
+ tomli>=2.0.1
@@ -1,7 +0,0 @@
1
- ssot-contracts<0.3.0,>=0.2.20.dev1
2
- ssot-core<0.3.0,>=0.2.20.dev1
3
- ssot-conformance<0.3.0,>=0.2.20.dev1
4
- ssot-pack-contracts<0.3.0,>=0.2.21.dev1
5
-
6
- [:python_version < "3.11"]
7
- tomli>=2.0.1
File without changes