ssot-cli 0.1.12__tar.gz → 0.1.13.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.
Files changed (38) hide show
  1. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/PKG-INFO +230 -7
  2. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/README.md +225 -2
  3. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/pyproject.toml +5 -5
  4. ssot_cli-0.1.13.dev1/src/ssot_cli/campaign_cmd.py +22 -0
  5. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/feature_cmd.py +62 -4
  6. ssot_cli-0.1.13.dev1/src/ssot_cli/leases_cmd.py +43 -0
  7. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/main.py +90 -8
  8. ssot_cli-0.1.13.dev1/src/ssot_cli/maturity_cmd.py +43 -0
  9. ssot_cli-0.1.13.dev1/src/ssot_cli/repo_watch_cmd.py +20 -0
  10. ssot_cli-0.1.13.dev1/src/ssot_cli/worker_cmd.py +123 -0
  11. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli.egg-info/PKG-INFO +230 -7
  12. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli.egg-info/SOURCES.txt +5 -0
  13. ssot_cli-0.1.13.dev1/src/ssot_cli.egg-info/requires.txt +7 -0
  14. ssot_cli-0.1.12/src/ssot_cli.egg-info/requires.txt +0 -7
  15. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/setup.cfg +0 -0
  16. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/__init__.py +0 -0
  17. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/adr_cmd.py +0 -0
  18. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/boundary_cmd.py +0 -0
  19. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/claim_cmd.py +0 -0
  20. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/common.py +0 -0
  21. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/config_cmd.py +0 -0
  22. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/conformance_cmd.py +0 -0
  23. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/evidence_cmd.py +0 -0
  24. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/graph_cmd.py +0 -0
  25. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/init_cmd.py +0 -0
  26. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/issue_cmd.py +0 -0
  27. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/pack_cmd.py +0 -0
  28. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/profile_cmd.py +0 -0
  29. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/registry_cmd.py +0 -0
  30. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/release_cmd.py +0 -0
  31. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/risk_cmd.py +0 -0
  32. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/spec_cmd.py +0 -0
  33. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/test_cmd.py +0 -0
  34. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/upgrade_cmd.py +0 -0
  35. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli/validate_cmd.py +0 -0
  36. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli.egg-info/dependency_links.txt +0 -0
  37. {ssot_cli-0.1.12 → ssot_cli-0.1.13.dev1}/src/ssot_cli.egg-info/entry_points.txt +0 -0
  38. {ssot_cli-0.1.12 → ssot_cli-0.1.13.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.12
3
+ Version: 0.1.13.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.18
29
- Requires-Dist: ssot-core<0.3.0,>=0.2.18
30
- Requires-Dist: ssot-conformance<0.3.0,>=0.2.18
31
- Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.19
28
+ Requires-Dist: ssot-contracts<0.3.0,>=0.2.19.dev1
29
+ Requires-Dist: ssot-core<0.3.0,>=0.2.19.dev1
30
+ Requires-Dist: ssot-conformance<0.3.0,>=0.2.19.dev1
31
+ Requires-Dist: ssot-pack-contracts<0.3.0,>=0.2.20.dev1
32
32
  Requires-Dist: tomli>=2.0.1; python_version < "3.11"
33
33
 
34
34
  <div align="center">
@@ -42,8 +42,8 @@ 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
 
@@ -167,11 +167,205 @@ ssot conformance run . --profiles registry
167
167
 
168
168
  ## Command surface
169
169
 
170
+ ### Complete parser manifest
171
+
172
+ This table is generated from the live `argparse` parser and is checked by integration tests against the current CLI implementation.
173
+
174
+ Global flags: `--output-file`, `--output-format`, `--version`
175
+
176
+ | Command path | Flags |
177
+ | --- | --- |
178
+ | `ssot-registry adr` | none |
179
+ | `ssot-registry adr create` | `--body`, `--body-file`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
180
+ | `ssot-registry adr delete` | `--id` |
181
+ | `ssot-registry adr get` | `--id` |
182
+ | `ssot-registry adr list` | `--ids` |
183
+ | `ssot-registry adr reserve` | none |
184
+ | `ssot-registry adr reserve create` | `--end`, `--name`, `--start` |
185
+ | `ssot-registry adr reserve list` | none |
186
+ | `ssot-registry adr set-status` | `--id`, `--note`, `--status` |
187
+ | `ssot-registry adr supersede` | `--id`, `--note`, `--supersedes` |
188
+ | `ssot-registry adr sync` | none |
189
+ | `ssot-registry adr update` | `--body`, `--body-file`, `--id`, `--note`, `--status`, `--title` |
190
+ | `ssot-registry boundary` | none |
191
+ | `ssot-registry boundary add-feature` | `--feature-ids`, `--id` |
192
+ | `ssot-registry boundary add-profile` | `--id`, `--profile-ids` |
193
+ | `ssot-registry boundary create` | `--body`, `--body-file`, `--feature-ids`, `--frozen`, `--id`, `--no-frozen`, `--profile-ids`, `--status`, `--title` |
194
+ | `ssot-registry boundary delete` | `--id` |
195
+ | `ssot-registry boundary freeze` | `--boundary-id` |
196
+ | `ssot-registry boundary get` | `--id` |
197
+ | `ssot-registry boundary list` | `--ids` |
198
+ | `ssot-registry boundary remove-feature` | `--feature-ids`, `--id` |
199
+ | `ssot-registry boundary remove-profile` | `--id`, `--profile-ids` |
200
+ | `ssot-registry boundary run-tests` | `--dry-run`, `--evidence-output`, `--id` |
201
+ | `ssot-registry boundary update` | `--body`, `--body-file`, `--frozen`, `--id`, `--no-frozen`, `--status`, `--title` |
202
+ | `ssot-registry campaign` | none |
203
+ | `ssot-registry campaign status` | `--campaign-id`, `--feature-limit`, `--target-tier` |
204
+ | `ssot-registry claim` | none |
205
+ | `ssot-registry claim create` | `--body`, `--body-file`, `--depends-on-claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
206
+ | `ssot-registry claim delete` | `--id` |
207
+ | `ssot-registry claim evaluate` | `--claim-id`, `--include-tier-gate` |
208
+ | `ssot-registry claim get` | `--id` |
209
+ | `ssot-registry claim link` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
210
+ | `ssot-registry claim list` | `--ids`, `--origin` |
211
+ | `ssot-registry claim set-status` | `--id`, `--status` |
212
+ | `ssot-registry claim set-tier` | `--id`, `--tier` |
213
+ | `ssot-registry claim unlink` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
214
+ | `ssot-registry claim update` | `--body`, `--body-file`, `--description`, `--id`, `--kind`, `--origin`, `--title` |
215
+ | `ssot-registry config` | none |
216
+ | `ssot-registry config init` | `--force` |
217
+ | `ssot-registry config show` | none |
218
+ | `ssot-registry config validate` | none |
219
+ | `ssot-registry conformance` | none |
220
+ | `ssot-registry conformance discover` | `--profiles` |
221
+ | `ssot-registry conformance origin` | `--apply`, `--include-claims`, `--include-evidence`, `--kinds`, `--overwrite`, `--report-output` |
222
+ | `ssot-registry conformance profile` | none |
223
+ | `ssot-registry conformance profile list` | none |
224
+ | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
225
+ | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
226
+ | `ssot-registry evidence` | none |
227
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
228
+ | `ssot-registry evidence delete` | `--id` |
229
+ | `ssot-registry evidence get` | `--id` |
230
+ | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
231
+ | `ssot-registry evidence list` | `--ids`, `--origin` |
232
+ | `ssot-registry evidence unlink` | `--claim-ids`, `--id`, `--test-ids` |
233
+ | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--tier`, `--title` |
234
+ | `ssot-registry evidence verify` | `--evidence-id` |
235
+ | `ssot-registry feature` | none |
236
+ | `ssot-registry feature children` | none |
237
+ | `ssot-registry feature children add` | `--child-ids`, `--id` |
238
+ | `ssot-registry feature children list` | `--id` |
239
+ | `ssot-registry feature children remove` | `--child-ids`, `--id` |
240
+ | `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` |
241
+ | `ssot-registry feature delete` | `--id` |
242
+ | `ssot-registry feature get` | `--id` |
243
+ | `ssot-registry feature lifecycle` | none |
244
+ | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
245
+ | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
246
+ | `ssot-registry feature list` | `--ids`, `--origin` |
247
+ | `ssot-registry feature parent` | none |
248
+ | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
249
+ | `ssot-registry feature parent clear` | `--ids` |
250
+ | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
251
+ | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
252
+ | `ssot-registry feature plan` | `--claim-tier`, `--horizon`, `--ids`, `--out-of-bounds-disposition`, `--slot`, `--target-lifecycle-stage` |
253
+ | `ssot-registry feature unlink` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
254
+ | `ssot-registry feature update` | `--body`, `--body-file`, `--description`, `--id`, `--implementation-status`, `--origin`, `--title` |
255
+ | `ssot-registry graph` | none |
256
+ | `ssot-registry graph export` | `--format`, `--output` |
257
+ | `ssot-registry init` | `--force`, `--repo-id`, `--repo-name`, `--version` |
258
+ | `ssot-registry issue` | none |
259
+ | `ssot-registry issue close` | `--id` |
260
+ | `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` |
261
+ | `ssot-registry issue delete` | `--id` |
262
+ | `ssot-registry issue get` | `--id` |
263
+ | `ssot-registry issue link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
264
+ | `ssot-registry issue list` | `--ids` |
265
+ | `ssot-registry issue plan` | `--horizon`, `--ids`, `--slot` |
266
+ | `ssot-registry issue reopen` | `--id` |
267
+ | `ssot-registry issue unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
268
+ | `ssot-registry issue update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
269
+ | `ssot-registry leases` | none |
270
+ | `ssot-registry leases expire` | none |
271
+ | `ssot-registry leases inspect` | `--lease-id` |
272
+ | `ssot-registry leases list` | `--status` |
273
+ | `ssot-registry maturity` | none |
274
+ | `ssot-registry maturity current-tier` | `--feature-id` |
275
+ | `ssot-registry maturity next-slice` | `--target-tier` |
276
+ | `ssot-registry pack` | none |
277
+ | `ssot-registry pack inspect` | `--manifest` |
278
+ | `ssot-registry pack preflight` | `--all`, `--kind`, `--manifest`, `--pin`, `--resolved`, `--trusted-only` |
279
+ | `ssot-registry pack sync` | `--all`, `--dry-run`, `--kind`, `--manifest`, `--no-sync`, `--pin`, `--preflight-only`, `--prune-stale`, `--reservations`, `--resolved`, `--trust`, `--trusted-only`, `--yes` |
280
+ | `ssot-registry profile` | none |
281
+ | `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` |
282
+ | `ssot-registry profile delete` | `--id` |
283
+ | `ssot-registry profile evaluate` | `--profile-id` |
284
+ | `ssot-registry profile get` | `--id` |
285
+ | `ssot-registry profile link` | `--feature-ids`, `--id`, `--profile-ids` |
286
+ | `ssot-registry profile list` | `--ids` |
287
+ | `ssot-registry profile unlink` | `--feature-ids`, `--id`, `--profile-ids` |
288
+ | `ssot-registry profile update` | `--body`, `--body-file`, `--claim-tier`, `--description`, `--id`, `--kind`, `--status`, `--title` |
289
+ | `ssot-registry profile verify` | `--profile-id` |
290
+ | `ssot-registry registry` | none |
291
+ | `ssot-registry registry export` | `--format`, `--output` |
292
+ | `ssot-registry registry repair-doc-hashes` | `--ids` |
293
+ | `ssot-registry registry sync-statuses` | `--dry-run` |
294
+ | `ssot-registry release` | none |
295
+ | `ssot-registry release add-boundary` | `--boundary-ids`, `--id` |
296
+ | `ssot-registry release add-claim` | `--claim-ids`, `--id` |
297
+ | `ssot-registry release add-evidence` | `--evidence-ids`, `--id` |
298
+ | `ssot-registry release certify` | `--release-id`, `--write-report` |
299
+ | `ssot-registry release create` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--claim-ids`, `--evidence-ids`, `--id`, `--status`, `--version` |
300
+ | `ssot-registry release delete` | `--id` |
301
+ | `ssot-registry release get` | `--id` |
302
+ | `ssot-registry release list` | `--ids` |
303
+ | `ssot-registry release promote` | `--release-id` |
304
+ | `ssot-registry release publish` | `--release-id` |
305
+ | `ssot-registry release remove-boundary` | `--boundary-ids`, `--id` |
306
+ | `ssot-registry release remove-claim` | `--claim-ids`, `--id` |
307
+ | `ssot-registry release remove-evidence` | `--evidence-ids`, `--id` |
308
+ | `ssot-registry release revoke` | `--reason`, `--release-id` |
309
+ | `ssot-registry release update` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--id`, `--status`, `--version` |
310
+ | `ssot-registry release verify-local` | `--blocking`, `--no-write-artifacts`, `--path-policy`, `--release-id` |
311
+ | `ssot-registry repo-watch` | none |
312
+ | `ssot-registry repo-watch scan` | `--no-emit-events` |
313
+ | `ssot-registry risk` | none |
314
+ | `ssot-registry risk accept` | `--id` |
315
+ | `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` |
316
+ | `ssot-registry risk delete` | `--id` |
317
+ | `ssot-registry risk get` | `--id` |
318
+ | `ssot-registry risk link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
319
+ | `ssot-registry risk list` | `--ids` |
320
+ | `ssot-registry risk mitigate` | `--id` |
321
+ | `ssot-registry risk retire` | `--id` |
322
+ | `ssot-registry risk unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
323
+ | `ssot-registry risk update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
324
+ | `ssot-registry spec` | none |
325
+ | `ssot-registry spec create` | `--adr-ids`, `--body`, `--body-file`, `--kind`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
326
+ | `ssot-registry spec delete` | `--id` |
327
+ | `ssot-registry spec get` | `--id` |
328
+ | `ssot-registry spec link` | `--adr-ids`, `--id` |
329
+ | `ssot-registry spec list` | `--ids` |
330
+ | `ssot-registry spec reserve` | none |
331
+ | `ssot-registry spec reserve create` | `--end`, `--name`, `--start` |
332
+ | `ssot-registry spec reserve list` | none |
333
+ | `ssot-registry spec run-tests` | `--dry-run`, `--evidence-output`, `--id` |
334
+ | `ssot-registry spec set-status` | `--id`, `--note`, `--status` |
335
+ | `ssot-registry spec supersede` | `--id`, `--note`, `--supersedes` |
336
+ | `ssot-registry spec sync` | none |
337
+ | `ssot-registry spec unlink` | `--adr-ids`, `--id` |
338
+ | `ssot-registry spec update` | `--adr-ids`, `--body`, `--body-file`, `--id`, `--kind`, `--note`, `--status`, `--title` |
339
+ | `ssot-registry test` | none |
340
+ | `ssot-registry test create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-ids`, `--execution-file`, `--execution-json`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
341
+ | `ssot-registry test delete` | `--id` |
342
+ | `ssot-registry test get` | `--id` |
343
+ | `ssot-registry test link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
344
+ | `ssot-registry test list` | `--ids`, `--origin` |
345
+ | `ssot-registry test run` | `--dry-run`, `--evidence-output`, `--id`, `--ids` |
346
+ | `ssot-registry test unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
347
+ | `ssot-registry test update` | `--body`, `--body-file`, `--execution-file`, `--execution-json`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
348
+ | `ssot-registry upgrade` | `--sync-docs`, `--target-version`, `--write-report` |
349
+ | `ssot-registry validate` | `--write-report` |
350
+ | `ssot-registry worker` | none |
351
+ | `ssot-registry worker abandon` | `--fencing-token`, `--lease-id`, `--reason`, `--worker-id` |
352
+ | `ssot-registry worker ack-events` | `--action`, `--event-ids`, `--worker-id` |
353
+ | `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` |
354
+ | `ssot-registry worker events` | `--after-event-id`, `--campaign-id`, `--limit`, `--worker-id` |
355
+ | `ssot-registry worker register` | `--os-user`, `--worker-id` |
356
+ | `ssot-registry worker renew` | `--fencing-token`, `--lease-id`, `--ttl-seconds`, `--worker-id` |
357
+
170
358
  ### Top-level commands
171
359
 
172
360
  - `init`
173
361
  - `validate`
174
362
  - `upgrade`
363
+ - `config`
364
+ - `campaign`
365
+ - `leases`
366
+ - `maturity`
367
+ - `repo-watch`
368
+ - `worker`
175
369
  - `adr`
176
370
  - `spec`
177
371
  - `feature`
@@ -325,6 +519,8 @@ ssot-registry spec reserve list [path]
325
519
  Subcommands:
326
520
 
327
521
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
522
+ - `parent add`, `parent set`, `parent remove`, `parent clear`
523
+ - `children add`, `children remove`, `children list`
328
524
  - `lifecycle set`
329
525
 
330
526
  ```text
@@ -344,6 +540,7 @@ ssot-registry feature create [path]
344
540
  --claim-ids [CLAIM_IDS ...]
345
541
  --test-ids [TEST_IDS ...]
346
542
  --requires [REQUIRES ...]
543
+ --parent-feature-ids [PARENT_FEATURE_IDS ...]
347
544
 
348
545
  ssot-registry feature get [path]
349
546
  --id ID (required)
@@ -385,6 +582,32 @@ ssot-registry feature lifecycle set [path]
385
582
  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
386
583
  --effective-release-id EFFECTIVE_RELEASE_ID
387
584
  --note NOTE
585
+
586
+ ssot-registry feature parent add [path]
587
+ --ids IDS [IDS ...] (required)
588
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
589
+
590
+ ssot-registry feature parent set [path]
591
+ --ids IDS [IDS ...] (required)
592
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
593
+
594
+ ssot-registry feature parent remove [path]
595
+ --ids IDS [IDS ...] (required)
596
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
597
+
598
+ ssot-registry feature parent clear [path]
599
+ --ids IDS [IDS ...] (required)
600
+
601
+ ssot-registry feature children add [path]
602
+ --id ID (required)
603
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
604
+
605
+ ssot-registry feature children remove [path]
606
+ --id ID (required)
607
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
608
+
609
+ ssot-registry feature children list [path]
610
+ --id ID (required)
388
611
  ```
389
612
 
390
613
  ### `profile`
@@ -9,8 +9,8 @@
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
 
@@ -134,11 +134,205 @@ ssot conformance run . --profiles registry
134
134
 
135
135
  ## Command surface
136
136
 
137
+ ### Complete parser manifest
138
+
139
+ This table is generated from the live `argparse` parser and is checked by integration tests against the current CLI implementation.
140
+
141
+ Global flags: `--output-file`, `--output-format`, `--version`
142
+
143
+ | Command path | Flags |
144
+ | --- | --- |
145
+ | `ssot-registry adr` | none |
146
+ | `ssot-registry adr create` | `--body`, `--body-file`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
147
+ | `ssot-registry adr delete` | `--id` |
148
+ | `ssot-registry adr get` | `--id` |
149
+ | `ssot-registry adr list` | `--ids` |
150
+ | `ssot-registry adr reserve` | none |
151
+ | `ssot-registry adr reserve create` | `--end`, `--name`, `--start` |
152
+ | `ssot-registry adr reserve list` | none |
153
+ | `ssot-registry adr set-status` | `--id`, `--note`, `--status` |
154
+ | `ssot-registry adr supersede` | `--id`, `--note`, `--supersedes` |
155
+ | `ssot-registry adr sync` | none |
156
+ | `ssot-registry adr update` | `--body`, `--body-file`, `--id`, `--note`, `--status`, `--title` |
157
+ | `ssot-registry boundary` | none |
158
+ | `ssot-registry boundary add-feature` | `--feature-ids`, `--id` |
159
+ | `ssot-registry boundary add-profile` | `--id`, `--profile-ids` |
160
+ | `ssot-registry boundary create` | `--body`, `--body-file`, `--feature-ids`, `--frozen`, `--id`, `--no-frozen`, `--profile-ids`, `--status`, `--title` |
161
+ | `ssot-registry boundary delete` | `--id` |
162
+ | `ssot-registry boundary freeze` | `--boundary-id` |
163
+ | `ssot-registry boundary get` | `--id` |
164
+ | `ssot-registry boundary list` | `--ids` |
165
+ | `ssot-registry boundary remove-feature` | `--feature-ids`, `--id` |
166
+ | `ssot-registry boundary remove-profile` | `--id`, `--profile-ids` |
167
+ | `ssot-registry boundary run-tests` | `--dry-run`, `--evidence-output`, `--id` |
168
+ | `ssot-registry boundary update` | `--body`, `--body-file`, `--frozen`, `--id`, `--no-frozen`, `--status`, `--title` |
169
+ | `ssot-registry campaign` | none |
170
+ | `ssot-registry campaign status` | `--campaign-id`, `--feature-limit`, `--target-tier` |
171
+ | `ssot-registry claim` | none |
172
+ | `ssot-registry claim create` | `--body`, `--body-file`, `--depends-on-claim-ids`, `--description`, `--evidence-ids`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
173
+ | `ssot-registry claim delete` | `--id` |
174
+ | `ssot-registry claim evaluate` | `--claim-id`, `--include-tier-gate` |
175
+ | `ssot-registry claim get` | `--id` |
176
+ | `ssot-registry claim link` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
177
+ | `ssot-registry claim list` | `--ids`, `--origin` |
178
+ | `ssot-registry claim set-status` | `--id`, `--status` |
179
+ | `ssot-registry claim set-tier` | `--id`, `--tier` |
180
+ | `ssot-registry claim unlink` | `--depends-on-claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--test-ids` |
181
+ | `ssot-registry claim update` | `--body`, `--body-file`, `--description`, `--id`, `--kind`, `--origin`, `--title` |
182
+ | `ssot-registry config` | none |
183
+ | `ssot-registry config init` | `--force` |
184
+ | `ssot-registry config show` | none |
185
+ | `ssot-registry config validate` | none |
186
+ | `ssot-registry conformance` | none |
187
+ | `ssot-registry conformance discover` | `--profiles` |
188
+ | `ssot-registry conformance origin` | `--apply`, `--include-claims`, `--include-evidence`, `--kinds`, `--overwrite`, `--report-output` |
189
+ | `ssot-registry conformance profile` | none |
190
+ | `ssot-registry conformance profile list` | none |
191
+ | `ssot-registry conformance run` | `--dry-run`, `--evidence-output`, `--profiles` |
192
+ | `ssot-registry conformance scaffold` | `--apply`, `--include-claims`, `--include-evidence`, `--profiles` |
193
+ | `ssot-registry evidence` | none |
194
+ | `ssot-registry evidence create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--test-ids`, `--tier`, `--title` |
195
+ | `ssot-registry evidence delete` | `--id` |
196
+ | `ssot-registry evidence get` | `--id` |
197
+ | `ssot-registry evidence link` | `--claim-ids`, `--id`, `--test-ids` |
198
+ | `ssot-registry evidence list` | `--ids`, `--origin` |
199
+ | `ssot-registry evidence unlink` | `--claim-ids`, `--id`, `--test-ids` |
200
+ | `ssot-registry evidence update` | `--body`, `--body-file`, `--evidence-path`, `--id`, `--kind`, `--origin`, `--status`, `--tier`, `--title` |
201
+ | `ssot-registry evidence verify` | `--evidence-id` |
202
+ | `ssot-registry feature` | none |
203
+ | `ssot-registry feature children` | none |
204
+ | `ssot-registry feature children add` | `--child-ids`, `--id` |
205
+ | `ssot-registry feature children list` | `--id` |
206
+ | `ssot-registry feature children remove` | `--child-ids`, `--id` |
207
+ | `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` |
208
+ | `ssot-registry feature delete` | `--id` |
209
+ | `ssot-registry feature get` | `--id` |
210
+ | `ssot-registry feature lifecycle` | none |
211
+ | `ssot-registry feature lifecycle set` | `--effective-release-id`, `--ids`, `--note`, `--replacement-feature-id`, `--stage` |
212
+ | `ssot-registry feature link` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
213
+ | `ssot-registry feature list` | `--ids`, `--origin` |
214
+ | `ssot-registry feature parent` | none |
215
+ | `ssot-registry feature parent add` | `--ids`, `--parent-ids` |
216
+ | `ssot-registry feature parent clear` | `--ids` |
217
+ | `ssot-registry feature parent remove` | `--ids`, `--parent-ids` |
218
+ | `ssot-registry feature parent set` | `--ids`, `--parent-ids` |
219
+ | `ssot-registry feature plan` | `--claim-tier`, `--horizon`, `--ids`, `--out-of-bounds-disposition`, `--slot`, `--target-lifecycle-stage` |
220
+ | `ssot-registry feature unlink` | `--claim-ids`, `--id`, `--requires`, `--spec-ids`, `--test-ids` |
221
+ | `ssot-registry feature update` | `--body`, `--body-file`, `--description`, `--id`, `--implementation-status`, `--origin`, `--title` |
222
+ | `ssot-registry graph` | none |
223
+ | `ssot-registry graph export` | `--format`, `--output` |
224
+ | `ssot-registry init` | `--force`, `--repo-id`, `--repo-name`, `--version` |
225
+ | `ssot-registry issue` | none |
226
+ | `ssot-registry issue close` | `--id` |
227
+ | `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` |
228
+ | `ssot-registry issue delete` | `--id` |
229
+ | `ssot-registry issue get` | `--id` |
230
+ | `ssot-registry issue link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
231
+ | `ssot-registry issue list` | `--ids` |
232
+ | `ssot-registry issue plan` | `--horizon`, `--ids`, `--slot` |
233
+ | `ssot-registry issue reopen` | `--id` |
234
+ | `ssot-registry issue unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--risk-ids`, `--test-ids` |
235
+ | `ssot-registry issue update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
236
+ | `ssot-registry leases` | none |
237
+ | `ssot-registry leases expire` | none |
238
+ | `ssot-registry leases inspect` | `--lease-id` |
239
+ | `ssot-registry leases list` | `--status` |
240
+ | `ssot-registry maturity` | none |
241
+ | `ssot-registry maturity current-tier` | `--feature-id` |
242
+ | `ssot-registry maturity next-slice` | `--target-tier` |
243
+ | `ssot-registry pack` | none |
244
+ | `ssot-registry pack inspect` | `--manifest` |
245
+ | `ssot-registry pack preflight` | `--all`, `--kind`, `--manifest`, `--pin`, `--resolved`, `--trusted-only` |
246
+ | `ssot-registry pack sync` | `--all`, `--dry-run`, `--kind`, `--manifest`, `--no-sync`, `--pin`, `--preflight-only`, `--prune-stale`, `--reservations`, `--resolved`, `--trust`, `--trusted-only`, `--yes` |
247
+ | `ssot-registry profile` | none |
248
+ | `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` |
249
+ | `ssot-registry profile delete` | `--id` |
250
+ | `ssot-registry profile evaluate` | `--profile-id` |
251
+ | `ssot-registry profile get` | `--id` |
252
+ | `ssot-registry profile link` | `--feature-ids`, `--id`, `--profile-ids` |
253
+ | `ssot-registry profile list` | `--ids` |
254
+ | `ssot-registry profile unlink` | `--feature-ids`, `--id`, `--profile-ids` |
255
+ | `ssot-registry profile update` | `--body`, `--body-file`, `--claim-tier`, `--description`, `--id`, `--kind`, `--status`, `--title` |
256
+ | `ssot-registry profile verify` | `--profile-id` |
257
+ | `ssot-registry registry` | none |
258
+ | `ssot-registry registry export` | `--format`, `--output` |
259
+ | `ssot-registry registry repair-doc-hashes` | `--ids` |
260
+ | `ssot-registry registry sync-statuses` | `--dry-run` |
261
+ | `ssot-registry release` | none |
262
+ | `ssot-registry release add-boundary` | `--boundary-ids`, `--id` |
263
+ | `ssot-registry release add-claim` | `--claim-ids`, `--id` |
264
+ | `ssot-registry release add-evidence` | `--evidence-ids`, `--id` |
265
+ | `ssot-registry release certify` | `--release-id`, `--write-report` |
266
+ | `ssot-registry release create` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--claim-ids`, `--evidence-ids`, `--id`, `--status`, `--version` |
267
+ | `ssot-registry release delete` | `--id` |
268
+ | `ssot-registry release get` | `--id` |
269
+ | `ssot-registry release list` | `--ids` |
270
+ | `ssot-registry release promote` | `--release-id` |
271
+ | `ssot-registry release publish` | `--release-id` |
272
+ | `ssot-registry release remove-boundary` | `--boundary-ids`, `--id` |
273
+ | `ssot-registry release remove-claim` | `--claim-ids`, `--id` |
274
+ | `ssot-registry release remove-evidence` | `--evidence-ids`, `--id` |
275
+ | `ssot-registry release revoke` | `--reason`, `--release-id` |
276
+ | `ssot-registry release update` | `--body`, `--body-file`, `--boundary-id`, `--boundary-ids`, `--id`, `--status`, `--version` |
277
+ | `ssot-registry release verify-local` | `--blocking`, `--no-write-artifacts`, `--path-policy`, `--release-id` |
278
+ | `ssot-registry repo-watch` | none |
279
+ | `ssot-registry repo-watch scan` | `--no-emit-events` |
280
+ | `ssot-registry risk` | none |
281
+ | `ssot-registry risk accept` | `--id` |
282
+ | `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` |
283
+ | `ssot-registry risk delete` | `--id` |
284
+ | `ssot-registry risk get` | `--id` |
285
+ | `ssot-registry risk link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
286
+ | `ssot-registry risk list` | `--ids` |
287
+ | `ssot-registry risk mitigate` | `--id` |
288
+ | `ssot-registry risk retire` | `--id` |
289
+ | `ssot-registry risk unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id`, `--issue-ids`, `--test-ids` |
290
+ | `ssot-registry risk update` | `--body`, `--body-file`, `--description`, `--id`, `--no-release-blocking`, `--release-blocking`, `--severity`, `--title` |
291
+ | `ssot-registry spec` | none |
292
+ | `ssot-registry spec create` | `--adr-ids`, `--body`, `--body-file`, `--kind`, `--note`, `--number`, `--origin`, `--reserve-range`, `--slug`, `--status`, `--title` |
293
+ | `ssot-registry spec delete` | `--id` |
294
+ | `ssot-registry spec get` | `--id` |
295
+ | `ssot-registry spec link` | `--adr-ids`, `--id` |
296
+ | `ssot-registry spec list` | `--ids` |
297
+ | `ssot-registry spec reserve` | none |
298
+ | `ssot-registry spec reserve create` | `--end`, `--name`, `--start` |
299
+ | `ssot-registry spec reserve list` | none |
300
+ | `ssot-registry spec run-tests` | `--dry-run`, `--evidence-output`, `--id` |
301
+ | `ssot-registry spec set-status` | `--id`, `--note`, `--status` |
302
+ | `ssot-registry spec supersede` | `--id`, `--note`, `--supersedes` |
303
+ | `ssot-registry spec sync` | none |
304
+ | `ssot-registry spec unlink` | `--adr-ids`, `--id` |
305
+ | `ssot-registry spec update` | `--adr-ids`, `--body`, `--body-file`, `--id`, `--kind`, `--note`, `--status`, `--title` |
306
+ | `ssot-registry test` | none |
307
+ | `ssot-registry test create` | `--body`, `--body-file`, `--claim-ids`, `--evidence-ids`, `--execution-file`, `--execution-json`, `--feature-ids`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
308
+ | `ssot-registry test delete` | `--id` |
309
+ | `ssot-registry test get` | `--id` |
310
+ | `ssot-registry test link` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
311
+ | `ssot-registry test list` | `--ids`, `--origin` |
312
+ | `ssot-registry test run` | `--dry-run`, `--evidence-output`, `--id`, `--ids` |
313
+ | `ssot-registry test unlink` | `--claim-ids`, `--evidence-ids`, `--feature-ids`, `--id` |
314
+ | `ssot-registry test update` | `--body`, `--body-file`, `--execution-file`, `--execution-json`, `--id`, `--kind`, `--origin`, `--status`, `--test-path`, `--title` |
315
+ | `ssot-registry upgrade` | `--sync-docs`, `--target-version`, `--write-report` |
316
+ | `ssot-registry validate` | `--write-report` |
317
+ | `ssot-registry worker` | none |
318
+ | `ssot-registry worker abandon` | `--fencing-token`, `--lease-id`, `--reason`, `--worker-id` |
319
+ | `ssot-registry worker ack-events` | `--action`, `--event-ids`, `--worker-id` |
320
+ | `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` |
321
+ | `ssot-registry worker events` | `--after-event-id`, `--campaign-id`, `--limit`, `--worker-id` |
322
+ | `ssot-registry worker register` | `--os-user`, `--worker-id` |
323
+ | `ssot-registry worker renew` | `--fencing-token`, `--lease-id`, `--ttl-seconds`, `--worker-id` |
324
+
137
325
  ### Top-level commands
138
326
 
139
327
  - `init`
140
328
  - `validate`
141
329
  - `upgrade`
330
+ - `config`
331
+ - `campaign`
332
+ - `leases`
333
+ - `maturity`
334
+ - `repo-watch`
335
+ - `worker`
142
336
  - `adr`
143
337
  - `spec`
144
338
  - `feature`
@@ -292,6 +486,8 @@ ssot-registry spec reserve list [path]
292
486
  Subcommands:
293
487
 
294
488
  - `create`, `get`, `list`, `update`, `delete`, `link`, `unlink`, `plan`
489
+ - `parent add`, `parent set`, `parent remove`, `parent clear`
490
+ - `children add`, `children remove`, `children list`
295
491
  - `lifecycle set`
296
492
 
297
493
  ```text
@@ -311,6 +507,7 @@ ssot-registry feature create [path]
311
507
  --claim-ids [CLAIM_IDS ...]
312
508
  --test-ids [TEST_IDS ...]
313
509
  --requires [REQUIRES ...]
510
+ --parent-feature-ids [PARENT_FEATURE_IDS ...]
314
511
 
315
512
  ssot-registry feature get [path]
316
513
  --id ID (required)
@@ -352,6 +549,32 @@ ssot-registry feature lifecycle set [path]
352
549
  --replacement-feature-id [REPLACEMENT_FEATURE_ID ...]
353
550
  --effective-release-id EFFECTIVE_RELEASE_ID
354
551
  --note NOTE
552
+
553
+ ssot-registry feature parent add [path]
554
+ --ids IDS [IDS ...] (required)
555
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
556
+
557
+ ssot-registry feature parent set [path]
558
+ --ids IDS [IDS ...] (required)
559
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
560
+
561
+ ssot-registry feature parent remove [path]
562
+ --ids IDS [IDS ...] (required)
563
+ --parent-ids PARENT_IDS [PARENT_IDS ...] (required)
564
+
565
+ ssot-registry feature parent clear [path]
566
+ --ids IDS [IDS ...] (required)
567
+
568
+ ssot-registry feature children add [path]
569
+ --id ID (required)
570
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
571
+
572
+ ssot-registry feature children remove [path]
573
+ --id ID (required)
574
+ --child-ids CHILD_IDS [CHILD_IDS ...] (required)
575
+
576
+ ssot-registry feature children list [path]
577
+ --id ID (required)
355
578
  ```
356
579
 
357
580
  ### `profile`
@@ -4,17 +4,17 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssot-cli"
7
- version = "0.1.12"
7
+ version = "0.1.13.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.18,<0.3.0",
15
- "ssot-core>=0.2.18,<0.3.0",
16
- "ssot-conformance>=0.2.18,<0.3.0",
17
- "ssot-pack-contracts>=0.2.19,<0.3.0",
14
+ "ssot-contracts>=0.2.19.dev1,<0.3.0",
15
+ "ssot-core>=0.2.19.dev1,<0.3.0",
16
+ "ssot-conformance>=0.2.19.dev1,<0.3.0",
17
+ "ssot-pack-contracts>=0.2.20.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"]
@@ -0,0 +1,22 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ from pathlib import Path
5
+
6
+ from ssot_registry.control.service import ControlPlane
7
+
8
+
9
+ def register_campaign(subparsers: argparse._SubParsersAction) -> None:
10
+ campaign = subparsers.add_parser("campaign", help="Inspect pull-worker maturation campaign state.")
11
+ campaign_sub = campaign.add_subparsers(dest="campaign_command", required=True)
12
+
13
+ status = campaign_sub.add_parser("status", help="Show campaign lease counts and maturity completion.")
14
+ status.add_argument("path", nargs="?", default=".")
15
+ status.add_argument("--campaign-id", required=True)
16
+ status.add_argument("--target-tier", default="T2", choices=["T0", "T1", "T2", "T3", "T4"])
17
+ status.add_argument("--feature-limit", type=int, default=None, help="Override the campaign feature consideration limit.")
18
+ status.set_defaults(func=run_status)
19
+
20
+
21
+ def run_status(args: argparse.Namespace) -> dict[str, object]:
22
+ return ControlPlane(Path(args.path)).get_campaign_status(args.campaign_id, target_tier=args.target_tier, feature_limit=args.feature_limit)