ssot-cli 0.1.12.dev9__tar.gz → 0.1.13__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.12.dev9 → ssot_cli-0.1.13}/PKG-INFO +239 -12
  2. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/README.md +234 -7
  3. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/pyproject.toml +5 -5
  4. ssot_cli-0.1.13/src/ssot_cli/campaign_cmd.py +22 -0
  5. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/feature_cmd.py +62 -4
  6. ssot_cli-0.1.13/src/ssot_cli/leases_cmd.py +43 -0
  7. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/main.py +90 -8
  8. ssot_cli-0.1.13/src/ssot_cli/maturity_cmd.py +43 -0
  9. ssot_cli-0.1.13/src/ssot_cli/repo_watch_cmd.py +20 -0
  10. ssot_cli-0.1.13/src/ssot_cli/worker_cmd.py +123 -0
  11. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli.egg-info/PKG-INFO +239 -12
  12. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli.egg-info/SOURCES.txt +5 -0
  13. ssot_cli-0.1.13/src/ssot_cli.egg-info/requires.txt +7 -0
  14. ssot_cli-0.1.12.dev9/src/ssot_cli.egg-info/requires.txt +0 -7
  15. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/setup.cfg +0 -0
  16. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/__init__.py +0 -0
  17. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/adr_cmd.py +0 -0
  18. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/boundary_cmd.py +0 -0
  19. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/claim_cmd.py +0 -0
  20. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/common.py +0 -0
  21. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/config_cmd.py +0 -0
  22. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/conformance_cmd.py +0 -0
  23. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/evidence_cmd.py +0 -0
  24. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/graph_cmd.py +0 -0
  25. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/init_cmd.py +0 -0
  26. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/issue_cmd.py +0 -0
  27. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/pack_cmd.py +0 -0
  28. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/profile_cmd.py +0 -0
  29. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/registry_cmd.py +0 -0
  30. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/release_cmd.py +0 -0
  31. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/risk_cmd.py +0 -0
  32. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/spec_cmd.py +0 -0
  33. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/test_cmd.py +0 -0
  34. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/upgrade_cmd.py +0 -0
  35. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli/validate_cmd.py +0 -0
  36. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
  37. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/src/ssot_cli.egg-info/entry_points.txt +0 -0
  38. {ssot_cli-0.1.12.dev9 → ssot_cli-0.1.13}/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.12.dev9
3
+ Version: 0.1.13
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.18.dev9
29
- Requires-Dist: ssot-core<0.3.0,>=0.2.18.dev9
30
- Requires-Dist: ssot-conformance<0.3.0,>=0.2.18.dev9
31
- Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.18.dev9
28
+ Requires-Dist: ssot-contracts<0.3.0,>=0.2.19
29
+ Requires-Dist: ssot-core<0.3.0,>=0.2.19
30
+ Requires-Dist: ssot-conformance<0.3.0,>=0.2.19
31
+ Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.20
32
32
  Requires-Dist: tomli>=2.0.1; python_version < "3.11"
33
33
 
34
34
  <div align="center">
@@ -42,14 +42,14 @@ Requires-Dist: tomli>=2.0.1; python_version < "3.11"
42
42
  <a href="https://pepy.tech/project/ssot-cli"><img src="https://static.pepy.tech/badge/ssot-cli" alt="Downloads" /></a>
43
43
  <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Repository hits" /></a>
44
44
  <!-- ssot-schema-badges:start -->
45
- <img src="https://img.shields.io/badge/schema_version-0.5.0-blue" alt="schema_version 0.5.0" />
46
- <img src="https://img.shields.io/badge/migration%20coverage-12%2F12-brightgreen" alt="Migration coverage 12/12" />
45
+ <img src="https://img.shields.io/badge/schema_version-0.7.0-blue" alt="schema_version 0.7.0" />
46
+ <img src="https://img.shields.io/badge/migration%20coverage-14%2F14-brightgreen" alt="Migration coverage 14/14" />
47
47
  <!-- ssot-schema-badges:end -->
48
48
  </div>
49
49
 
50
50
  `ssot-cli` is the primary command-line distribution for SSOT.
51
51
 
52
- It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/), reusable conformance checks come from [ssot-conformance](https://pypi.org/project/ssot-conformance/), and shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/).
52
+ It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/), reusable conformance checks come from [ssot-conformance](https://pypi.org/project/ssot-conformance/), shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/), and governance pack interoperability contracts come from [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/).
53
53
 
54
54
  - GitHub: https://github.com/groupsum/ssot-registry
55
55
 
@@ -71,7 +71,11 @@ For local development:
71
71
  python -m pip install -e pkgs/ssot-cli
72
72
  ```
73
73
 
74
- This package depends on [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), and [ssot-contracts](https://pypi.org/project/ssot-contracts/), so installing it gives you the full CLI runtime stack.
74
+ This package depends on [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/), and [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/), so installing it gives you the full CLI runtime stack for registry operations and governance pack contract checks.
75
+
76
+ Install [ssot-mcp](https://pypi.org/project/ssot-mcp/) separately, or through `ssot-registry[mcp]`, when an MCP-capable client should coordinate registry mutations, pull-worker campaigns, leases, and worker events through MCP tools.
77
+
78
+ The CLI tracks the current core release train through compatible `<0.3.0` ranges and uses the current `ssot-pack-contracts` floor. That keeps pack-aware CLI behavior compatible with the latest contract package without forcing unrelated surface packages into core lockstep.
75
79
 
76
80
  ## Executable names
77
81
 
@@ -127,7 +131,7 @@ ssot registry --help
127
131
 
128
132
  ## Screenshots
129
133
 
130
- Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
134
+ The screenshots below are generated from the current parser help. Regenerate them with `python scripts/generate_cli_screenshots.py`, or regenerate the CLI and TUI assets together with `python scripts/generate_terminal_screenshots.py`.
131
135
 
132
136
  ![ssot top-level help](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-cli/assets/ssot-cli-help.png)
133
137
 
@@ -165,11 +169,205 @@ ssot conformance run . --profiles registry
165
169
 
166
170
  ## Command surface
167
171
 
172
+ ### Complete parser manifest
173
+
174
+ This table is generated from the live `argparse` parser and is checked by integration tests against the current CLI implementation.
175
+
176
+ Global flags: `--output-file`, `--output-format`, `--version`
177
+
178
+ | Command path | Flags |
179
+ | --- | --- |
180
+ | `ssot-registry adr` | none |
181
+ | `ssot-registry adr create` | `--body`, `--body-file`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
182
+ | `ssot-registry adr delete` | `--id` |
183
+ | `ssot-registry adr get` | `--id` |
184
+ | `ssot-registry adr list` | `--ids` |
185
+ | `ssot-registry adr reserve` | none |
186
+ | `ssot-registry adr reserve create` | `--end`, `--name`, `--start` |
187
+ | `ssot-registry adr reserve list` | none |
188
+ | `ssot-registry adr set-status` | `--id`, `--note`, `--status` |
189
+ | `ssot-registry adr supersede` | `--id`, `--note`, `--supersedes` |
190
+ | `ssot-registry adr sync` | none |
191
+ | `ssot-registry adr update` | `--body`, `--body-file`, `--id`, `--note`, `--status`, `--title` |
192
+ | `ssot-registry boundary` | none |
193
+ | `ssot-registry boundary add-feature` | `--feature-ids`, `--id` |
194
+ | `ssot-registry boundary add-profile` | `--id`, `--profile-ids` |
195
+ | `ssot-registry boundary create` | `--body`, `--body-file`, `--feature-ids`, `--frozen`, `--id`, `--no-frozen`, `--profile-ids`, `--status`, `--title` |
196
+ | `ssot-registry boundary delete` | `--id` |
197
+ | `ssot-registry boundary freeze` | `--boundary-id` |
198
+ | `ssot-registry boundary get` | `--id` |
199
+ | `ssot-registry boundary list` | `--ids` |
200
+ | `ssot-registry boundary remove-feature` | `--feature-ids`, `--id` |
201
+ | `ssot-registry boundary remove-profile` | `--id`, `--profile-ids` |
202
+ | `ssot-registry boundary run-tests` | `--dry-run`, `--evidence-output`, `--id` |
203
+ | `ssot-registry boundary update` | `--body`, `--body-file`, `--frozen`, `--id`, `--no-frozen`, `--status`, `--title` |
204
+ | `ssot-registry campaign` | none |
205
+ | `ssot-registry campaign status` | `--campaign-id`, `--feature-limit`, `--target-tier` |
206
+ | `ssot-registry claim` | none |
207
+ | `ssot-registry claim create` | `--body`, `--body-file`, `--depends-on-claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
208
+ | `ssot-registry claim delete` | `--id` |
209
+ | `ssot-registry claim evaluate` | `--claim-id`, `--include-tier-gate` |
210
+ | `ssot-registry claim get` | `--id` |
211
+ | `ssot-registry claim link` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
212
+ | `ssot-registry claim list` | `--ids`, `--origin` |
213
+ | `ssot-registry claim set-status` | `--id`, `--status` |
214
+ | `ssot-registry claim set-tier` | `--id`, `--tier` |
215
+ | `ssot-registry claim unlink` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
216
+ | `ssot-registry claim update` | `--body`, `--body-file`, `--description`, `--id`, `--kind`, `--origin`, `--title` |
217
+ | `ssot-registry config` | none |
218
+ | `ssot-registry config init` | `--force` |
219
+ | `ssot-registry config show` | none |
220
+ | `ssot-registry config validate` | none |
221
+ | `ssot-registry conformance` | none |
222
+ | `ssot-registry conformance discover` | `--profiles` |
223
+ | `ssot-registry conformance origin` | `--apply`, `--include-claims`, `--include-evidence`, `--kinds`, `--overwrite`, `--report-output` |
224
+ | `ssot-registry conformance profile` | none |
225
+ | `ssot-registry conformance profile list` | none |
226
+ | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
227
+ | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
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` |
230
+ | `ssot-registry evidence delete` | `--id` |
231
+ | `ssot-registry evidence get` | `--id` |
232
+ | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
233
+ | `ssot-registry evidence list` | `--ids`, `--origin` |
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` |
236
+ | `ssot-registry evidence verify` | `--evidence-id` |
237
+ | `ssot-registry feature` | none |
238
+ | `ssot-registry feature children` | none |
239
+ | `ssot-registry feature children add` | `--child-ids`, `--id` |
240
+ | `ssot-registry feature children list` | `--id` |
241
+ | `ssot-registry feature children remove` | `--child-ids`, `--id` |
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
+ | `ssot-registry feature delete` | `--id` |
244
+ | `ssot-registry feature get` | `--id` |
245
+ | `ssot-registry feature lifecycle` | none |
246
+ | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
247
+ | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
248
+ | `ssot-registry feature list` | `--ids`, `--origin` |
249
+ | `ssot-registry feature parent` | none |
250
+ | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
251
+ | `ssot-registry feature parent clear` | `--ids` |
252
+ | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
253
+ | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
254
+ | `ssot-registry feature plan` | `--claim-tier`, `--horizon`, `--ids`, `--out-of-bounds-disposition`, `--slot`, `--target-lifecycle-stage` |
255
+ | `ssot-registry feature unlink` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
256
+ | `ssot-registry feature update` | `--body`, `--body-file`, `--description`, `--id`, `--implementation-status`, `--origin`, `--title` |
257
+ | `ssot-registry graph` | none |
258
+ | `ssot-registry graph export` | `--format`, `--output` |
259
+ | `ssot-registry init` | `--force`, `--repo-id`, `--repo-name`, `--version` |
260
+ | `ssot-registry issue` | none |
261
+ | `ssot-registry issue close` | `--id` |
262
+ | `ssot-registry issue create` | `--body`, `--body-file`, `--claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--horizon`, `--id`, `--no-release-blocking`, `--release-blocking`, `--risk-ids`, `--severity`, `--slot`, `--status`, `--test-ids`, `--title` |
263
+ | `ssot-registry issue delete` | `--id` |
264
+ | `ssot-registry issue get` | `--id` |
265
+ | `ssot-registry issue link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
266
+ | `ssot-registry issue list` | `--ids` |
267
+ | `ssot-registry issue plan` | `--horizon`, `--ids`, `--slot` |
268
+ | `ssot-registry issue reopen` | `--id` |
269
+ | `ssot-registry issue unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
270
+ | `ssot-registry issue update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
271
+ | `ssot-registry leases` | none |
272
+ | `ssot-registry leases expire` | none |
273
+ | `ssot-registry leases inspect` | `--lease-id` |
274
+ | `ssot-registry leases list` | `--status` |
275
+ | `ssot-registry maturity` | none |
276
+ | `ssot-registry maturity current-tier` | `--feature-id` |
277
+ | `ssot-registry maturity next-slice` | `--target-tier` |
278
+ | `ssot-registry pack` | none |
279
+ | `ssot-registry pack inspect` | `--manifest` |
280
+ | `ssot-registry pack preflight` | `--all`, `--kind`, `--manifest`, `--pin`, `--resolved`, `--trusted-only` |
281
+ | `ssot-registry pack sync` | `--all`, `--dry-run`, `--kind`, `--manifest`, `--no-sync`, `--pin`, `--preflight-only`, `--prune-stale`, `--reservations`, `--resolved`, `--trust`, `--trusted-only`, `--yes` |
282
+ | `ssot-registry profile` | none |
283
+ | `ssot-registry profile create` | `--allow-feature-override-tier`, `--body`, `--body-file`, `--claim-tier`, `--description`, `--feature-ids`, `--id`, `--kind`, `--no-allow-feature-override-tier`, `--profile-ids`, `--status`, `--title` |
284
+ | `ssot-registry profile delete` | `--id` |
285
+ | `ssot-registry profile evaluate` | `--profile-id` |
286
+ | `ssot-registry profile get` | `--id` |
287
+ | `ssot-registry profile link` | `--feature-ids`, `--id`, `--profile-ids` |
288
+ | `ssot-registry profile list` | `--ids` |
289
+ | `ssot-registry profile unlink` | `--feature-ids`, `--id`, `--profile-ids` |
290
+ | `ssot-registry profile update` | `--body`, `--body-file`, `--claim-tier`, `--description`, `--id`, `--kind`, `--status`, `--title` |
291
+ | `ssot-registry profile verify` | `--profile-id` |
292
+ | `ssot-registry registry` | none |
293
+ | `ssot-registry registry export` | `--format`, `--output` |
294
+ | `ssot-registry registry repair-doc-hashes` | `--ids` |
295
+ | `ssot-registry registry sync-statuses` | `--dry-run` |
296
+ | `ssot-registry release` | none |
297
+ | `ssot-registry release add-boundary` | `--boundary-ids`, `--id` |
298
+ | `ssot-registry release add-claim` | `--claim-ids`, `--id` |
299
+ | `ssot-registry release add-evidence` | `--evidence-ids`, `--id` |
300
+ | `ssot-registry release certify` | `--release-id`, `--write-report` |
301
+ | `ssot-registry release create` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--claim-ids`, `--evidence-ids`, `--id`, `--status`, `--version` |
302
+ | `ssot-registry release delete` | `--id` |
303
+ | `ssot-registry release get` | `--id` |
304
+ | `ssot-registry release list` | `--ids` |
305
+ | `ssot-registry release promote` | `--release-id` |
306
+ | `ssot-registry release publish` | `--release-id` |
307
+ | `ssot-registry release remove-boundary` | `--boundary-ids`, `--id` |
308
+ | `ssot-registry release remove-claim` | `--claim-ids`, `--id` |
309
+ | `ssot-registry release remove-evidence` | `--evidence-ids`, `--id` |
310
+ | `ssot-registry release revoke` | `--reason`, `--release-id` |
311
+ | `ssot-registry release update` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--id`, `--status`, `--version` |
312
+ | `ssot-registry release verify-local` | `--blocking`, `--no-write-artifacts`, `--path-policy`, `--release-id` |
313
+ | `ssot-registry repo-watch` | none |
314
+ | `ssot-registry repo-watch scan` | `--no-emit-events` |
315
+ | `ssot-registry risk` | none |
316
+ | `ssot-registry risk accept` | `--id` |
317
+ | `ssot-registry risk create` | `--body`, `--body-file`, `--claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--status`, `--test-ids`, `--title` |
318
+ | `ssot-registry risk delete` | `--id` |
319
+ | `ssot-registry risk get` | `--id` |
320
+ | `ssot-registry risk link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
321
+ | `ssot-registry risk list` | `--ids` |
322
+ | `ssot-registry risk mitigate` | `--id` |
323
+ | `ssot-registry risk retire` | `--id` |
324
+ | `ssot-registry risk unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
325
+ | `ssot-registry risk update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
326
+ | `ssot-registry spec` | none |
327
+ | `ssot-registry spec create` | `--adr-ids`, `--body`, `--body-file`, `--kind`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
328
+ | `ssot-registry spec delete` | `--id` |
329
+ | `ssot-registry spec get` | `--id` |
330
+ | `ssot-registry spec link` | `--adr-ids`, `--id` |
331
+ | `ssot-registry spec list` | `--ids` |
332
+ | `ssot-registry spec reserve` | none |
333
+ | `ssot-registry spec reserve create` | `--end`, `--name`, `--start` |
334
+ | `ssot-registry spec reserve list` | none |
335
+ | `ssot-registry spec run-tests` | `--dry-run`, `--evidence-output`, `--id` |
336
+ | `ssot-registry spec set-status` | `--id`, `--note`, `--status` |
337
+ | `ssot-registry spec supersede` | `--id`, `--note`, `--supersedes` |
338
+ | `ssot-registry spec sync` | none |
339
+ | `ssot-registry spec unlink` | `--adr-ids`, `--id` |
340
+ | `ssot-registry spec update` | `--adr-ids`, `--body`, `--body-file`, `--id`, `--kind`, `--note`, `--status`, `--title` |
341
+ | `ssot-registry test` | none |
342
+ | `ssot-registry test create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-ids`, `--execution-file`, `--execution-json`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
343
+ | `ssot-registry test delete` | `--id` |
344
+ | `ssot-registry test get` | `--id` |
345
+ | `ssot-registry test link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
346
+ | `ssot-registry test list` | `--ids`, `--origin` |
347
+ | `ssot-registry test run` | `--dry-run`, `--evidence-output`, `--id`, `--ids` |
348
+ | `ssot-registry test unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
349
+ | `ssot-registry test update` | `--body`, `--body-file`, `--execution-file`, `--execution-json`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
350
+ | `ssot-registry upgrade` | `--sync-docs`, `--target-version`, `--write-report` |
351
+ | `ssot-registry validate` | `--write-report` |
352
+ | `ssot-registry worker` | none |
353
+ | `ssot-registry worker abandon` | `--fencing-token`, `--lease-id`, `--reason`, `--worker-id` |
354
+ | `ssot-registry worker ack-events` | `--action`, `--event-ids`, `--worker-id` |
355
+ | `ssot-registry worker claim-next` | `--auto-scaffold`, `--boundary-ids`, `--campaign-id`, `--feature-ids`, `--feature-limit`, `--max-blockers-per-claim`, `--no-auto-scaffold`, `--os-user`, `--profile-ids`, `--target-tier`, `--ttl-seconds`, `--worker-id` |
356
+ | `ssot-registry worker events` | `--after-event-id`, `--campaign-id`, `--limit`, `--worker-id` |
357
+ | `ssot-registry worker register` | `--os-user`, `--worker-id` |
358
+ | `ssot-registry worker renew` | `--fencing-token`, `--lease-id`, `--ttl-seconds`, `--worker-id` |
359
+
168
360
  ### Top-level commands
169
361
 
170
362
  - `init`
171
363
  - `validate`
172
364
  - `upgrade`
365
+ - `config`
366
+ - `campaign`
367
+ - `leases`
368
+ - `maturity`
369
+ - `repo-watch`
370
+ - `worker`
173
371
  - `adr`
174
372
  - `spec`
175
373
  - `feature`
@@ -323,6 +521,8 @@ ssot-registry spec reserve list [path]
323
521
  Subcommands:
324
522
 
325
523
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
524
+ - `parent add`, `parent set`, `parent remove`, `parent clear`
525
+ - `children add`, `children remove`, `children list`
326
526
  - `lifecycle set`
327
527
 
328
528
  ```text
@@ -342,6 +542,7 @@ ssot-registry feature create [path]
342
542
  --claim-ids [CLAIM_IDS ...]
343
543
  --test-ids [TEST_IDS ...]
344
544
  --requires [REQUIRES ...]
545
+ --parent-feature-ids [PARENT_FEATURE_IDS ...]
345
546
 
346
547
  ssot-registry feature get [path]
347
548
  --id ID (required)
@@ -383,6 +584,32 @@ ssot-registry feature lifecycle set [path]
383
584
  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
384
585
  --effective-release-id EFFECTIVE_RELEASE_ID
385
586
  --note NOTE
587
+
588
+ ssot-registry feature parent add [path]
589
+ --ids IDS [IDS ...] (required)
590
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
591
+
592
+ ssot-registry feature parent set [path]
593
+ --ids IDS [IDS ...] (required)
594
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
595
+
596
+ ssot-registry feature parent remove [path]
597
+ --ids IDS [IDS ...] (required)
598
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
599
+
600
+ ssot-registry feature parent clear [path]
601
+ --ids IDS [IDS ...] (required)
602
+
603
+ ssot-registry feature children add [path]
604
+ --id ID (required)
605
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
606
+
607
+ ssot-registry feature children remove [path]
608
+ --id ID (required)
609
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
610
+
611
+ ssot-registry feature children list [path]
612
+ --id ID (required)
386
613
  ```
387
614
 
388
615
  ### `profile`
@@ -870,7 +1097,7 @@ ssot release certify . --release-id rel:0.1.0 --write-report
870
1097
  ## Package relationships
871
1098
 
872
1099
  - Package type: CLI distribution
873
- - Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/)
874
- - Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
1100
+ - Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/), [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/)
1101
+ - Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-mcp](https://pypi.org/project/ssot-mcp/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
875
1102
 
876
1103
  If you need the command-line interface, this is the package to install.
@@ -9,14 +9,14 @@
9
9
  <a href="https://pepy.tech/project/ssot-cli"><img src="https://static.pepy.tech/badge/ssot-cli" alt="Downloads" /></a>
10
10
  <a href="https://hits.sh/github.com/groupsum/ssot-registry/"><img src="https://hits.sh/github.com/groupsum/ssot-registry.svg?style=flat-square" alt="Repository hits" /></a>
11
11
  <!-- ssot-schema-badges:start -->
12
- <img src="https://img.shields.io/badge/schema_version-0.5.0-blue" alt="schema_version 0.5.0" />
13
- <img src="https://img.shields.io/badge/migration%20coverage-12%2F12-brightgreen" alt="Migration coverage 12/12" />
12
+ <img src="https://img.shields.io/badge/schema_version-0.7.0-blue" alt="schema_version 0.7.0" />
13
+ <img src="https://img.shields.io/badge/migration%20coverage-14%2F14-brightgreen" alt="Migration coverage 14/14" />
14
14
  <!-- ssot-schema-badges:end -->
15
15
  </div>
16
16
 
17
17
  `ssot-cli` is the primary command-line distribution for SSOT.
18
18
 
19
- It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/), reusable conformance checks come from [ssot-conformance](https://pypi.org/project/ssot-conformance/), and shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/).
19
+ It installs `ssot`, `ssot-cli`, and `ssot-registry` as equivalent executables over the same parser and runtime. The command surface is implemented here, while domain logic lives in [ssot-core](https://pypi.org/project/ssot-core/), reusable conformance checks come from [ssot-conformance](https://pypi.org/project/ssot-conformance/), shared contract metadata comes from [ssot-contracts](https://pypi.org/project/ssot-contracts/), and governance pack interoperability contracts come from [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/).
20
20
 
21
21
  - GitHub: https://github.com/groupsum/ssot-registry
22
22
 
@@ -38,7 +38,11 @@ For local development:
38
38
  python -m pip install -e pkgs/ssot-cli
39
39
  ```
40
40
 
41
- This package depends on [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), and [ssot-contracts](https://pypi.org/project/ssot-contracts/), so installing it gives you the full CLI runtime stack.
41
+ This package depends on [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/), and [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/), so installing it gives you the full CLI runtime stack for registry operations and governance pack contract checks.
42
+
43
+ Install [ssot-mcp](https://pypi.org/project/ssot-mcp/) separately, or through `ssot-registry[mcp]`, when an MCP-capable client should coordinate registry mutations, pull-worker campaigns, leases, and worker events through MCP tools.
44
+
45
+ The CLI tracks the current core release train through compatible `<0.3.0` ranges and uses the current `ssot-pack-contracts` floor. That keeps pack-aware CLI behavior compatible with the latest contract package without forcing unrelated surface packages into core lockstep.
42
46
 
43
47
  ## Executable names
44
48
 
@@ -94,7 +98,7 @@ ssot registry --help
94
98
 
95
99
  ## Screenshots
96
100
 
97
- Regenerate these assets with `python scripts/generate_cli_screenshots.py`.
101
+ The screenshots below are generated from the current parser help. Regenerate them with `python scripts/generate_cli_screenshots.py`, or regenerate the CLI and TUI assets together with `python scripts/generate_terminal_screenshots.py`.
98
102
 
99
103
  ![ssot top-level help](https://raw.githubusercontent.com/groupsum/ssot-registry/main/pkgs/ssot-cli/assets/ssot-cli-help.png)
100
104
 
@@ -132,11 +136,205 @@ ssot conformance run . --profiles registry
132
136
 
133
137
  ## Command surface
134
138
 
139
+ ### Complete parser manifest
140
+
141
+ This table is generated from the live `argparse` parser and is checked by integration tests against the current CLI implementation.
142
+
143
+ Global flags: `--output-file`, `--output-format`, `--version`
144
+
145
+ | Command path | Flags |
146
+ | --- | --- |
147
+ | `ssot-registry adr` | none |
148
+ | `ssot-registry adr create` | `--body`, `--body-file`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
149
+ | `ssot-registry adr delete` | `--id` |
150
+ | `ssot-registry adr get` | `--id` |
151
+ | `ssot-registry adr list` | `--ids` |
152
+ | `ssot-registry adr reserve` | none |
153
+ | `ssot-registry adr reserve create` | `--end`, `--name`, `--start` |
154
+ | `ssot-registry adr reserve list` | none |
155
+ | `ssot-registry adr set-status` | `--id`, `--note`, `--status` |
156
+ | `ssot-registry adr supersede` | `--id`, `--note`, `--supersedes` |
157
+ | `ssot-registry adr sync` | none |
158
+ | `ssot-registry adr update` | `--body`, `--body-file`, `--id`, `--note`, `--status`, `--title` |
159
+ | `ssot-registry boundary` | none |
160
+ | `ssot-registry boundary add-feature` | `--feature-ids`, `--id` |
161
+ | `ssot-registry boundary add-profile` | `--id`, `--profile-ids` |
162
+ | `ssot-registry boundary create` | `--body`, `--body-file`, `--feature-ids`, `--frozen`, `--id`, `--no-frozen`, `--profile-ids`, `--status`, `--title` |
163
+ | `ssot-registry boundary delete` | `--id` |
164
+ | `ssot-registry boundary freeze` | `--boundary-id` |
165
+ | `ssot-registry boundary get` | `--id` |
166
+ | `ssot-registry boundary list` | `--ids` |
167
+ | `ssot-registry boundary remove-feature` | `--feature-ids`, `--id` |
168
+ | `ssot-registry boundary remove-profile` | `--id`, `--profile-ids` |
169
+ | `ssot-registry boundary run-tests` | `--dry-run`, `--evidence-output`, `--id` |
170
+ | `ssot-registry boundary update` | `--body`, `--body-file`, `--frozen`, `--id`, `--no-frozen`, `--status`, `--title` |
171
+ | `ssot-registry campaign` | none |
172
+ | `ssot-registry campaign status` | `--campaign-id`, `--feature-limit`, `--target-tier` |
173
+ | `ssot-registry claim` | none |
174
+ | `ssot-registry claim create` | `--body`, `--body-file`, `--depends-on-claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
175
+ | `ssot-registry claim delete` | `--id` |
176
+ | `ssot-registry claim evaluate` | `--claim-id`, `--include-tier-gate` |
177
+ | `ssot-registry claim get` | `--id` |
178
+ | `ssot-registry claim link` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
179
+ | `ssot-registry claim list` | `--ids`, `--origin` |
180
+ | `ssot-registry claim set-status` | `--id`, `--status` |
181
+ | `ssot-registry claim set-tier` | `--id`, `--tier` |
182
+ | `ssot-registry claim unlink` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
183
+ | `ssot-registry claim update` | `--body`, `--body-file`, `--description`, `--id`, `--kind`, `--origin`, `--title` |
184
+ | `ssot-registry config` | none |
185
+ | `ssot-registry config init` | `--force` |
186
+ | `ssot-registry config show` | none |
187
+ | `ssot-registry config validate` | none |
188
+ | `ssot-registry conformance` | none |
189
+ | `ssot-registry conformance discover` | `--profiles` |
190
+ | `ssot-registry conformance origin` | `--apply`, `--include-claims`, `--include-evidence`, `--kinds`, `--overwrite`, `--report-output` |
191
+ | `ssot-registry conformance profile` | none |
192
+ | `ssot-registry conformance profile list` | none |
193
+ | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
194
+ | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
195
+ | `ssot-registry evidence` | none |
196
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
197
+ | `ssot-registry evidence delete` | `--id` |
198
+ | `ssot-registry evidence get` | `--id` |
199
+ | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
200
+ | `ssot-registry evidence list` | `--ids`, `--origin` |
201
+ | `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` |
203
+ | `ssot-registry evidence verify` | `--evidence-id` |
204
+ | `ssot-registry feature` | none |
205
+ | `ssot-registry feature children` | none |
206
+ | `ssot-registry feature children add` | `--child-ids`, `--id` |
207
+ | `ssot-registry feature children list` | `--id` |
208
+ | `ssot-registry feature children remove` | `--child-ids`, `--id` |
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` |
210
+ | `ssot-registry feature delete` | `--id` |
211
+ | `ssot-registry feature get` | `--id` |
212
+ | `ssot-registry feature lifecycle` | none |
213
+ | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
214
+ | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
215
+ | `ssot-registry feature list` | `--ids`, `--origin` |
216
+ | `ssot-registry feature parent` | none |
217
+ | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
218
+ | `ssot-registry feature parent clear` | `--ids` |
219
+ | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
220
+ | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
221
+ | `ssot-registry feature plan` | `--claim-tier`, `--horizon`, `--ids`, `--out-of-bounds-disposition`, `--slot`, `--target-lifecycle-stage` |
222
+ | `ssot-registry feature unlink` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
223
+ | `ssot-registry feature update` | `--body`, `--body-file`, `--description`, `--id`, `--implementation-status`, `--origin`, `--title` |
224
+ | `ssot-registry graph` | none |
225
+ | `ssot-registry graph export` | `--format`, `--output` |
226
+ | `ssot-registry init` | `--force`, `--repo-id`, `--repo-name`, `--version` |
227
+ | `ssot-registry issue` | none |
228
+ | `ssot-registry issue close` | `--id` |
229
+ | `ssot-registry issue create` | `--body`, `--body-file`, `--claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--horizon`, `--id`, `--no-release-blocking`, `--release-blocking`, `--risk-ids`, `--severity`, `--slot`, `--status`, `--test-ids`, `--title` |
230
+ | `ssot-registry issue delete` | `--id` |
231
+ | `ssot-registry issue get` | `--id` |
232
+ | `ssot-registry issue link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
233
+ | `ssot-registry issue list` | `--ids` |
234
+ | `ssot-registry issue plan` | `--horizon`, `--ids`, `--slot` |
235
+ | `ssot-registry issue reopen` | `--id` |
236
+ | `ssot-registry issue unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
237
+ | `ssot-registry issue update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
238
+ | `ssot-registry leases` | none |
239
+ | `ssot-registry leases expire` | none |
240
+ | `ssot-registry leases inspect` | `--lease-id` |
241
+ | `ssot-registry leases list` | `--status` |
242
+ | `ssot-registry maturity` | none |
243
+ | `ssot-registry maturity current-tier` | `--feature-id` |
244
+ | `ssot-registry maturity next-slice` | `--target-tier` |
245
+ | `ssot-registry pack` | none |
246
+ | `ssot-registry pack inspect` | `--manifest` |
247
+ | `ssot-registry pack preflight` | `--all`, `--kind`, `--manifest`, `--pin`, `--resolved`, `--trusted-only` |
248
+ | `ssot-registry pack sync` | `--all`, `--dry-run`, `--kind`, `--manifest`, `--no-sync`, `--pin`, `--preflight-only`, `--prune-stale`, `--reservations`, `--resolved`, `--trust`, `--trusted-only`, `--yes` |
249
+ | `ssot-registry profile` | none |
250
+ | `ssot-registry profile create` | `--allow-feature-override-tier`, `--body`, `--body-file`, `--claim-tier`, `--description`, `--feature-ids`, `--id`, `--kind`, `--no-allow-feature-override-tier`, `--profile-ids`, `--status`, `--title` |
251
+ | `ssot-registry profile delete` | `--id` |
252
+ | `ssot-registry profile evaluate` | `--profile-id` |
253
+ | `ssot-registry profile get` | `--id` |
254
+ | `ssot-registry profile link` | `--feature-ids`, `--id`, `--profile-ids` |
255
+ | `ssot-registry profile list` | `--ids` |
256
+ | `ssot-registry profile unlink` | `--feature-ids`, `--id`, `--profile-ids` |
257
+ | `ssot-registry profile update` | `--body`, `--body-file`, `--claim-tier`, `--description`, `--id`, `--kind`, `--status`, `--title` |
258
+ | `ssot-registry profile verify` | `--profile-id` |
259
+ | `ssot-registry registry` | none |
260
+ | `ssot-registry registry export` | `--format`, `--output` |
261
+ | `ssot-registry registry repair-doc-hashes` | `--ids` |
262
+ | `ssot-registry registry sync-statuses` | `--dry-run` |
263
+ | `ssot-registry release` | none |
264
+ | `ssot-registry release add-boundary` | `--boundary-ids`, `--id` |
265
+ | `ssot-registry release add-claim` | `--claim-ids`, `--id` |
266
+ | `ssot-registry release add-evidence` | `--evidence-ids`, `--id` |
267
+ | `ssot-registry release certify` | `--release-id`, `--write-report` |
268
+ | `ssot-registry release create` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--claim-ids`, `--evidence-ids`, `--id`, `--status`, `--version` |
269
+ | `ssot-registry release delete` | `--id` |
270
+ | `ssot-registry release get` | `--id` |
271
+ | `ssot-registry release list` | `--ids` |
272
+ | `ssot-registry release promote` | `--release-id` |
273
+ | `ssot-registry release publish` | `--release-id` |
274
+ | `ssot-registry release remove-boundary` | `--boundary-ids`, `--id` |
275
+ | `ssot-registry release remove-claim` | `--claim-ids`, `--id` |
276
+ | `ssot-registry release remove-evidence` | `--evidence-ids`, `--id` |
277
+ | `ssot-registry release revoke` | `--reason`, `--release-id` |
278
+ | `ssot-registry release update` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--id`, `--status`, `--version` |
279
+ | `ssot-registry release verify-local` | `--blocking`, `--no-write-artifacts`, `--path-policy`, `--release-id` |
280
+ | `ssot-registry repo-watch` | none |
281
+ | `ssot-registry repo-watch scan` | `--no-emit-events` |
282
+ | `ssot-registry risk` | none |
283
+ | `ssot-registry risk accept` | `--id` |
284
+ | `ssot-registry risk create` | `--body`, `--body-file`, `--claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--status`, `--test-ids`, `--title` |
285
+ | `ssot-registry risk delete` | `--id` |
286
+ | `ssot-registry risk get` | `--id` |
287
+ | `ssot-registry risk link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
288
+ | `ssot-registry risk list` | `--ids` |
289
+ | `ssot-registry risk mitigate` | `--id` |
290
+ | `ssot-registry risk retire` | `--id` |
291
+ | `ssot-registry risk unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
292
+ | `ssot-registry risk update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
293
+ | `ssot-registry spec` | none |
294
+ | `ssot-registry spec create` | `--adr-ids`, `--body`, `--body-file`, `--kind`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
295
+ | `ssot-registry spec delete` | `--id` |
296
+ | `ssot-registry spec get` | `--id` |
297
+ | `ssot-registry spec link` | `--adr-ids`, `--id` |
298
+ | `ssot-registry spec list` | `--ids` |
299
+ | `ssot-registry spec reserve` | none |
300
+ | `ssot-registry spec reserve create` | `--end`, `--name`, `--start` |
301
+ | `ssot-registry spec reserve list` | none |
302
+ | `ssot-registry spec run-tests` | `--dry-run`, `--evidence-output`, `--id` |
303
+ | `ssot-registry spec set-status` | `--id`, `--note`, `--status` |
304
+ | `ssot-registry spec supersede` | `--id`, `--note`, `--supersedes` |
305
+ | `ssot-registry spec sync` | none |
306
+ | `ssot-registry spec unlink` | `--adr-ids`, `--id` |
307
+ | `ssot-registry spec update` | `--adr-ids`, `--body`, `--body-file`, `--id`, `--kind`, `--note`, `--status`, `--title` |
308
+ | `ssot-registry test` | none |
309
+ | `ssot-registry test create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-ids`, `--execution-file`, `--execution-json`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
310
+ | `ssot-registry test delete` | `--id` |
311
+ | `ssot-registry test get` | `--id` |
312
+ | `ssot-registry test link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
313
+ | `ssot-registry test list` | `--ids`, `--origin` |
314
+ | `ssot-registry test run` | `--dry-run`, `--evidence-output`, `--id`, `--ids` |
315
+ | `ssot-registry test unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
316
+ | `ssot-registry test update` | `--body`, `--body-file`, `--execution-file`, `--execution-json`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
317
+ | `ssot-registry upgrade` | `--sync-docs`, `--target-version`, `--write-report` |
318
+ | `ssot-registry validate` | `--write-report` |
319
+ | `ssot-registry worker` | none |
320
+ | `ssot-registry worker abandon` | `--fencing-token`, `--lease-id`, `--reason`, `--worker-id` |
321
+ | `ssot-registry worker ack-events` | `--action`, `--event-ids`, `--worker-id` |
322
+ | `ssot-registry worker claim-next` | `--auto-scaffold`, `--boundary-ids`, `--campaign-id`, `--feature-ids`, `--feature-limit`, `--max-blockers-per-claim`, `--no-auto-scaffold`, `--os-user`, `--profile-ids`, `--target-tier`, `--ttl-seconds`, `--worker-id` |
323
+ | `ssot-registry worker events` | `--after-event-id`, `--campaign-id`, `--limit`, `--worker-id` |
324
+ | `ssot-registry worker register` | `--os-user`, `--worker-id` |
325
+ | `ssot-registry worker renew` | `--fencing-token`, `--lease-id`, `--ttl-seconds`, `--worker-id` |
326
+
135
327
  ### Top-level commands
136
328
 
137
329
  - `init`
138
330
  - `validate`
139
331
  - `upgrade`
332
+ - `config`
333
+ - `campaign`
334
+ - `leases`
335
+ - `maturity`
336
+ - `repo-watch`
337
+ - `worker`
140
338
  - `adr`
141
339
  - `spec`
142
340
  - `feature`
@@ -290,6 +488,8 @@ ssot-registry spec reserve list [path]
290
488
  Subcommands:
291
489
 
292
490
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
491
+ - `parent add`, `parent set`, `parent remove`, `parent clear`
492
+ - `children add`, `children remove`, `children list`
293
493
  - `lifecycle set`
294
494
 
295
495
  ```text
@@ -309,6 +509,7 @@ ssot-registry feature create [path]
309
509
  --claim-ids [CLAIM_IDS ...]
310
510
  --test-ids [TEST_IDS ...]
311
511
  --requires [REQUIRES ...]
512
+ --parent-feature-ids [PARENT_FEATURE_IDS ...]
312
513
 
313
514
  ssot-registry feature get [path]
314
515
  --id ID (required)
@@ -350,6 +551,32 @@ ssot-registry feature lifecycle set [path]
350
551
  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
351
552
  --effective-release-id EFFECTIVE_RELEASE_ID
352
553
  --note NOTE
554
+
555
+ ssot-registry feature parent add [path]
556
+ --ids IDS [IDS ...] (required)
557
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
558
+
559
+ ssot-registry feature parent set [path]
560
+ --ids IDS [IDS ...] (required)
561
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
562
+
563
+ ssot-registry feature parent remove [path]
564
+ --ids IDS [IDS ...] (required)
565
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
566
+
567
+ ssot-registry feature parent clear [path]
568
+ --ids IDS [IDS ...] (required)
569
+
570
+ ssot-registry feature children add [path]
571
+ --id ID (required)
572
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
573
+
574
+ ssot-registry feature children remove [path]
575
+ --id ID (required)
576
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
577
+
578
+ ssot-registry feature children list [path]
579
+ --id ID (required)
353
580
  ```
354
581
 
355
582
  ### `profile`
@@ -837,7 +1064,7 @@ ssot release certify . --release-id rel:0.1.0 --write-report
837
1064
  ## Package relationships
838
1065
 
839
1066
  - Package type: CLI distribution
840
- - Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/)
841
- - Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
1067
+ - Depends on: [ssot-core](https://pypi.org/project/ssot-core/), [ssot-conformance](https://pypi.org/project/ssot-conformance/), [ssot-contracts](https://pypi.org/project/ssot-contracts/), [ssot-pack-contracts](https://pypi.org/project/ssot-pack-contracts/)
1068
+ - Related packages: [ssot-registry](https://pypi.org/project/ssot-registry/), [ssot-mcp](https://pypi.org/project/ssot-mcp/), [ssot-tui](https://pypi.org/project/ssot-tui/), [ssot-views](https://pypi.org/project/ssot-views/), [ssot-codegen](https://pypi.org/project/ssot-codegen/)
842
1069
 
843
1070
  If you need the command-line interface, this is the package to install.