ssot-cli 0.1.14.dev1__tar.gz → 0.1.15.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ssot_cli-0.1.14.dev1/src/ssot_cli.egg-info → ssot_cli-0.1.15.dev1}/PKG-INFO +45 -12
- ssot_cli-0.1.14.dev1/PKG-INFO → ssot_cli-0.1.15.dev1/README.md +40 -40
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/pyproject.toml +5 -5
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/evidence_cmd.py +33 -1
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/feature_cmd.py +121 -15
- ssot_cli-0.1.14.dev1/README.md → ssot_cli-0.1.15.dev1/src/ssot_cli.egg-info/PKG-INFO +73 -7
- ssot_cli-0.1.15.dev1/src/ssot_cli.egg-info/requires.txt +7 -0
- ssot_cli-0.1.14.dev1/src/ssot_cli.egg-info/requires.txt +0 -7
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/setup.cfg +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/__init__.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/adr_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/boundary_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/campaign_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/claim_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/common.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/config_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/conformance_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/graph_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/init_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/issue_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/leases_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/main.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/maturity_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/pack_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/profile_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/registry_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/release_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/repo_watch_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/risk_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/spec_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/test_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/upgrade_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/validate_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli/worker_cmd.py +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli.egg-info/SOURCES.txt +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/src/ssot_cli.egg-info/entry_points.txt +0 -0
- {ssot_cli-0.1.14.dev1 → ssot_cli-0.1.15.dev1}/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.
|
|
3
|
+
Version: 0.1.15.dev1
|
|
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.
|
|
29
|
-
Requires-Dist: ssot-core<0.3.0,>=0.2.
|
|
30
|
-
Requires-Dist: ssot-conformance<0.3.0,>=0.2.
|
|
31
|
-
Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.
|
|
28
|
+
Requires-Dist: ssot-contracts<0.3.0,>=0.2.21.dev1
|
|
29
|
+
Requires-Dist: ssot-core<0.3.0,>=0.2.21.dev1
|
|
30
|
+
Requires-Dist: ssot-conformance<0.3.0,>=0.2.21.dev1
|
|
31
|
+
Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.22.dev1
|
|
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
|
-
- `
|
|
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
|
-
- `
|
|
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.
|
|
7
|
+
version = "0.1.15.dev1"
|
|
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.
|
|
15
|
-
"ssot-core>=0.2.
|
|
16
|
-
"ssot-conformance>=0.2.
|
|
17
|
-
"ssot-pack-contracts>=0.2.
|
|
14
|
+
"ssot-contracts>=0.2.21.dev1,<0.3.0",
|
|
15
|
+
"ssot-core>=0.2.21.dev1,<0.3.0",
|
|
16
|
+
"ssot-conformance>=0.2.21.dev1,<0.3.0",
|
|
17
|
+
"ssot-pack-contracts>=0.2.22.dev1,<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
|
|
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(
|
|
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
|
|
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(
|
|
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="
|
|
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(
|
|
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(
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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="
|
|
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.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.21.dev1
|
|
29
|
+
Requires-Dist: ssot-core<0.3.0,>=0.2.21.dev1
|
|
30
|
+
Requires-Dist: ssot-conformance<0.3.0,>=0.2.21.dev1
|
|
31
|
+
Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.22.dev1
|
|
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
|
-
- `
|
|
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)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|