@starci/cli 1.1.0 → 1.2.0

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.
@@ -1,7 +1,7 @@
1
1
  // GENERATED by scripts/cli/gen-catalog.mjs — do not edit
2
2
  export const CATALOG = {
3
3
  "schema": "starci/cli-catalog@1",
4
- "hash": "9a38df90fe9551b2abc6dc5877b67a8cc877a95655d5caf83a90469def18d7e2",
4
+ "hash": "ac30c2db454befe4660ea95245b4e02237a90f3565944da76b327e3a3aedeac5",
5
5
  "global": [
6
6
  {
7
7
  "name": "json",
@@ -128,7 +128,8 @@ export const CATALOG = {
128
128
  "full",
129
129
  "lite"
130
130
  ],
131
- "impl": null
131
+ "impl": null,
132
+ "runtimeSide": "host"
132
133
  },
133
134
  "check": {
134
135
  "summary": "judge the app tree, managed output, contracts, formatting and architecture",
@@ -160,7 +161,8 @@ export const CATALOG = {
160
161
  "full",
161
162
  "lite"
162
163
  ],
163
- "impl": null
164
+ "impl": null,
165
+ "runtimeSide": "host"
164
166
  },
165
167
  "emit": {
166
168
  "summary": "emit backend GraphQL, operation and event contract snapshots",
@@ -178,7 +180,8 @@ export const CATALOG = {
178
180
  "full",
179
181
  "lite"
180
182
  ],
181
- "impl": null
183
+ "impl": null,
184
+ "runtimeSide": "host"
182
185
  },
183
186
  "explain": {
184
187
  "summary": "explain which HFS slot owns one app-relative path",
@@ -204,7 +207,8 @@ export const CATALOG = {
204
207
  "full",
205
208
  "lite"
206
209
  ],
207
- "impl": null
210
+ "impl": null,
211
+ "runtimeSide": "host"
208
212
  },
209
213
  "hygiene": {
210
214
  "summary": "judge staged worktree metadata, stack files and plaintext secrets",
@@ -223,7 +227,8 @@ export const CATALOG = {
223
227
  "full",
224
228
  "lite"
225
229
  ],
226
- "impl": null
230
+ "impl": null,
231
+ "runtimeSide": "host"
227
232
  },
228
233
  "lint": {
229
234
  "summary": "lint both app sides and report repository, ESLint and stylelint findings together",
@@ -275,7 +280,8 @@ export const CATALOG = {
275
280
  "full",
276
281
  "lite"
277
282
  ],
278
- "impl": null
283
+ "impl": null,
284
+ "runtimeSide": "host"
279
285
  },
280
286
  "new": {
281
287
  "summary": "create a canonical service, unit spec or app image definition",
@@ -317,7 +323,8 @@ export const CATALOG = {
317
323
  "full",
318
324
  "lite"
319
325
  ],
320
- "impl": null
326
+ "impl": null,
327
+ "runtimeSide": "host"
321
328
  },
322
329
  "scaffold": {
323
330
  "summary": "create a full or lite StarCi app, including an empty unborn main Git repository",
@@ -353,7 +360,8 @@ export const CATALOG = {
353
360
  "conventions": [
354
361
  "packages/hfs/scaffold/app.mjs accepts a new path or a plain .git-only repository with unborn main, no refs and an empty index.",
355
362
  "Scaffold preserves Git metadata and configuration. Failure unlinks its own entries; replaced or occupied entries remain with a visible cleanup message."
356
- ]
363
+ ],
364
+ "runtimeSide": "host"
357
365
  },
358
366
  "secret": {
359
367
  "summary": "list, read, seal or generate an encrypted app secret",
@@ -411,7 +419,8 @@ export const CATALOG = {
411
419
  "full",
412
420
  "lite"
413
421
  ],
414
- "impl": null
422
+ "impl": null,
423
+ "runtimeSide": "host"
415
424
  },
416
425
  "stack": {
417
426
  "summary": "start, stop or inspect the shared local test-world infrastructure",
@@ -464,7 +473,8 @@ export const CATALOG = {
464
473
  "editions": [
465
474
  "full"
466
475
  ],
467
- "impl": null
476
+ "impl": null,
477
+ "runtimeSide": "host"
468
478
  },
469
479
  "sync": {
470
480
  "summary": "compare or write every managed app file from its canonical template",
@@ -495,7 +505,8 @@ export const CATALOG = {
495
505
  "full",
496
506
  "lite"
497
507
  ],
498
- "impl": null
508
+ "impl": null,
509
+ "runtimeSide": "host"
499
510
  },
500
511
  "upgrade": {
501
512
  "summary": "upgrade a lite app to the full edition (--edition full); a full app is already current",
@@ -520,7 +531,8 @@ export const CATALOG = {
520
531
  "full",
521
532
  "lite"
522
533
  ],
523
- "impl": null
534
+ "impl": null,
535
+ "runtimeSide": "host"
524
536
  }
525
537
  }
526
538
  },
@@ -581,7 +593,8 @@ export const CATALOG = {
581
593
  "Use L1 while working, L2 before asking for a land, and L3 when an IO slot changed.",
582
594
  "Runtime L1 selects only manifest self-checks whose implementation path changed; L2 and above run the full check.",
583
595
  "App L1 uses starci app check --fast; L2 and above use the full app check, with every example added at L4."
584
- ]
596
+ ],
597
+ "runtimeSide": "tree"
585
598
  }
586
599
  }
587
600
  },
@@ -632,7 +645,8 @@ export const CATALOG = {
632
645
  ],
633
646
  "impl": {
634
647
  "script": "scripts/connectors/ask-gateway.mjs"
635
- }
648
+ },
649
+ "runtimeSide": "host"
636
650
  },
637
651
  "telegram": {
638
652
  "summary": "deliver and maintain owner Telegram notifications",
@@ -692,7 +706,8 @@ export const CATALOG = {
692
706
  ],
693
707
  "impl": {
694
708
  "script": "scripts/connectors/telegram.mjs"
695
- }
709
+ },
710
+ "runtimeSide": "host"
696
711
  },
697
712
  "telegram-media": {
698
713
  "summary": "deliver settled operation media through Telegram",
@@ -773,7 +788,8 @@ export const CATALOG = {
773
788
  ],
774
789
  "impl": {
775
790
  "script": "scripts/connectors/telegram-media.mjs"
776
- }
791
+ },
792
+ "runtimeSide": "host"
777
793
  },
778
794
  "tunnel": {
779
795
  "summary": "operate the Cloudflare owner-ask tunnel",
@@ -819,7 +835,8 @@ export const CATALOG = {
819
835
  ],
820
836
  "impl": {
821
837
  "script": "scripts/connectors/tunnel.mjs"
822
- }
838
+ },
839
+ "runtimeSide": "host"
823
840
  }
824
841
  }
825
842
  },
@@ -828,7 +845,7 @@ export const CATALOG = {
828
845
  "owner": "runtime",
829
846
  "verbs": {
830
847
  "digest": {
831
- "summary": "print the read-only debug digest, with its problems ordered by blocked work",
848
+ "summary": "print the read-only debug digest with a verdict per role (no error, happy error, BUG)",
832
849
  "owner": "runtime",
833
850
  "flags": [
834
851
  {
@@ -841,6 +858,11 @@ export const CATALOG = {
841
858
  "type": "list",
842
859
  "summary": "workflow id to include (default every running workflow)"
843
860
  },
861
+ {
862
+ "name": "questions",
863
+ "type": "boolean",
864
+ "summary": "list every debug question with its answer or the signal it still needs"
865
+ },
844
866
  {
845
867
  "name": "child-timeout",
846
868
  "type": "number",
@@ -856,6 +878,7 @@ export const CATALOG = {
856
878
  "examples": [
857
879
  "starci debug digest",
858
880
  "starci debug digest --json",
881
+ "starci debug digest --questions",
859
882
  "starci debug digest --repo <path> --workflow <id>"
860
883
  ],
861
884
  "editions": [
@@ -863,7 +886,8 @@ export const CATALOG = {
863
886
  ],
864
887
  "impl": {
865
888
  "script": "scripts/reconciler/debug-digest.mjs"
866
- }
889
+ },
890
+ "runtimeSide": "host"
867
891
  },
868
892
  "run": {
869
893
  "summary": "run one allowlisted read-only runtime inspector",
@@ -927,7 +951,8 @@ export const CATALOG = {
927
951
  ],
928
952
  "impl": {
929
953
  "script": "scripts/cli/lib/debug-run.mjs"
930
- }
954
+ },
955
+ "runtimeSide": "host"
931
956
  }
932
957
  }
933
958
  },
@@ -988,7 +1013,8 @@ export const CATALOG = {
988
1013
  "published ports come from the project's 41000-44999 block",
989
1014
  "never touch containers of another project (the protected local installation) or ports 3000 and 3100",
990
1015
  "clean up with `starci docker down`"
991
- ]
1016
+ ],
1017
+ "runtimeSide": "host"
992
1018
  },
993
1019
  "down": {
994
1020
  "summary": "remove only the labelled resources owned by one application stack",
@@ -1043,7 +1069,8 @@ export const CATALOG = {
1043
1069
  "published ports come from the project's 41000-44999 block",
1044
1070
  "never touch containers of another project (the protected local installation) or ports 3000 and 3100",
1045
1071
  "clean up with `starci docker down`"
1046
- ]
1072
+ ],
1073
+ "runtimeSide": "host"
1047
1074
  },
1048
1075
  "ps": {
1049
1076
  "summary": "list StarCi-labelled containers with ports and health",
@@ -1086,7 +1113,8 @@ export const CATALOG = {
1086
1113
  "published ports come from the project's 41000-44999 block",
1087
1114
  "never touch containers of another project (the protected local installation) or ports 3000 and 3100",
1088
1115
  "clean up with `starci docker down`"
1089
- ]
1116
+ ],
1117
+ "runtimeSide": "host"
1090
1118
  },
1091
1119
  "up": {
1092
1120
  "summary": "start one application stack and wait for its declared healthchecks",
@@ -1146,7 +1174,8 @@ export const CATALOG = {
1146
1174
  "published ports come from the project's 41000-44999 block and never use 3000, 3100, 54320-54329 or 55321-55327",
1147
1175
  "never touch containers of another project (the protected local installation) or ports 3000 and 3100",
1148
1176
  "clean up with `starci docker down`"
1149
- ]
1177
+ ],
1178
+ "runtimeSide": "host"
1150
1179
  }
1151
1180
  }
1152
1181
  },
@@ -1225,7 +1254,8 @@ export const CATALOG = {
1225
1254
  ],
1226
1255
  "impl": {
1227
1256
  "script": "scripts/gates/canon-scan.mjs"
1228
- }
1257
+ },
1258
+ "runtimeSide": "tree"
1229
1259
  },
1230
1260
  "custody-exec": {
1231
1261
  "summary": "decrypt one custody document for a command or a bounded read",
@@ -1279,7 +1309,8 @@ export const CATALOG = {
1279
1309
  ],
1280
1310
  "impl": {
1281
1311
  "script": "scripts/gates/custody-exec.mjs"
1282
- }
1312
+ },
1313
+ "runtimeSide": "tree"
1283
1314
  },
1284
1315
  "env-health": {
1285
1316
  "summary": "inspect and manage the served environment used by verification",
@@ -1359,7 +1390,8 @@ export const CATALOG = {
1359
1390
  ],
1360
1391
  "impl": {
1361
1392
  "script": "scripts/uat/env-health.mjs"
1362
- }
1393
+ },
1394
+ "runtimeSide": "tree"
1363
1395
  },
1364
1396
  "hfs-sync": {
1365
1397
  "summary": "check an app's generated files and custody trees for drift",
@@ -1387,7 +1419,8 @@ export const CATALOG = {
1387
1419
  ],
1388
1420
  "impl": {
1389
1421
  "script": "scripts/gates/hfs-sync.mjs"
1390
- }
1422
+ },
1423
+ "runtimeSide": "tree"
1391
1424
  },
1392
1425
  "install-sandbox": {
1393
1426
  "summary": "prove the packed runtime tarball installs and runs in an empty home",
@@ -1427,14 +1460,15 @@ export const CATALOG = {
1427
1460
  },
1428
1461
  "json": "none",
1429
1462
  "examples": [
1430
- "starci gate install-sandbox --tarball starci-1.0.0-alpha.7.tgz"
1463
+ "starci gate install-sandbox --tarball starci-1.0.0-alpha.9.tgz"
1431
1464
  ],
1432
1465
  "editions": [
1433
1466
  "full"
1434
1467
  ],
1435
1468
  "impl": {
1436
1469
  "script": "scripts/gates/install-sandbox.mjs"
1437
- }
1470
+ },
1471
+ "runtimeSide": "tree"
1438
1472
  },
1439
1473
  "read": {
1440
1474
  "summary": "build the recorded READ digest for an operation",
@@ -1480,7 +1514,8 @@ export const CATALOG = {
1480
1514
  ],
1481
1515
  "impl": {
1482
1516
  "script": "scripts/cli/gate-read.mjs"
1483
- }
1517
+ },
1518
+ "runtimeSide": "tree"
1484
1519
  },
1485
1520
  "reference-conventions": {
1486
1521
  "summary": "probe the installed backend reference rules of a reference root",
@@ -1507,7 +1542,8 @@ export const CATALOG = {
1507
1542
  ],
1508
1543
  "impl": {
1509
1544
  "script": "scripts/gates/probe-reference-conventions.mjs"
1510
- }
1545
+ },
1546
+ "runtimeSide": "tree"
1511
1547
  },
1512
1548
  "repo-presentation": {
1513
1549
  "summary": "check repository presentation rules for a product or runtime tree",
@@ -1539,7 +1575,8 @@ export const CATALOG = {
1539
1575
  ],
1540
1576
  "impl": {
1541
1577
  "script": "scripts/gates/repo-presentation.mjs"
1542
- }
1578
+ },
1579
+ "runtimeSide": "tree"
1543
1580
  },
1544
1581
  "run": {
1545
1582
  "summary": "run the measured product or document gate",
@@ -1606,7 +1643,8 @@ export const CATALOG = {
1606
1643
  ],
1607
1644
  "impl": {
1608
1645
  "script": "scripts/cli/gate-run.mjs"
1609
- }
1646
+ },
1647
+ "runtimeSide": "tree"
1610
1648
  },
1611
1649
  "runtime-artifact": {
1612
1650
  "summary": "describe the packed runtime archive and refuse forbidden material in it",
@@ -1650,7 +1688,8 @@ export const CATALOG = {
1650
1688
  ],
1651
1689
  "impl": {
1652
1690
  "script": "scripts/gates/runtime-artifact.mjs"
1653
- }
1691
+ },
1692
+ "runtimeSide": "tree"
1654
1693
  },
1655
1694
  "runtime-coverage": {
1656
1695
  "summary": "run the runtime spec suite under Node coverage and write coverage/lcov.info",
@@ -1678,10 +1717,11 @@ export const CATALOG = {
1678
1717
  ],
1679
1718
  "impl": {
1680
1719
  "script": "scripts/gates/runtime-coverage.mjs"
1681
- }
1720
+ },
1721
+ "runtimeSide": "tree"
1682
1722
  },
1683
1723
  "sonar": {
1684
- "summary": "inspect, provision and run the local Sonar quality gate",
1724
+ "summary": "inspect, provision, run and start the local Sonar quality gate",
1685
1725
  "owner": "runtime",
1686
1726
  "positional": [
1687
1727
  {
@@ -1691,7 +1731,9 @@ export const CATALOG = {
1691
1731
  "ensure-project",
1692
1732
  "token",
1693
1733
  "scan",
1694
- "dashboard"
1734
+ "dashboard",
1735
+ "up",
1736
+ "stop"
1695
1737
  ],
1696
1738
  "required": true,
1697
1739
  "variadic": false
@@ -1802,6 +1844,11 @@ export const CATALOG = {
1802
1844
  "name": "stack",
1803
1845
  "type": "string",
1804
1846
  "summary": "custody stack directory"
1847
+ },
1848
+ {
1849
+ "name": "public",
1850
+ "type": "boolean",
1851
+ "summary": "up or stop: include the public Cloudflare tunnel (needs CLOUDFLARE_TUNNEL_TOKEN)"
1805
1852
  }
1806
1853
  ],
1807
1854
  "exit": {
@@ -1813,14 +1860,17 @@ export const CATALOG = {
1813
1860
  "examples": [
1814
1861
  "starci gate sonar status",
1815
1862
  "starci gate sonar scan --cwd <repo> --base <rev> --paths src --wait",
1816
- "starci gate sonar dashboard --cwd <repo>"
1863
+ "starci gate sonar dashboard --cwd <repo>",
1864
+ "starci gate sonar up",
1865
+ "starci gate sonar up --public"
1817
1866
  ],
1818
1867
  "editions": [
1819
1868
  "full"
1820
1869
  ],
1821
1870
  "impl": {
1822
1871
  "script": "scripts/gates/sonar-local.mjs"
1823
- }
1872
+ },
1873
+ "runtimeSide": "tree"
1824
1874
  },
1825
1875
  "starcistacks": {
1826
1876
  "summary": "check a repository's stack declaration and custody layout",
@@ -1854,7 +1904,8 @@ export const CATALOG = {
1854
1904
  ],
1855
1905
  "impl": {
1856
1906
  "script": "scripts/gates/starcistacks.mjs"
1857
- }
1907
+ },
1908
+ "runtimeSide": "tree"
1858
1909
  },
1859
1910
  "test-world": {
1860
1911
  "summary": "run and judge one managed test-world project",
@@ -1901,7 +1952,8 @@ export const CATALOG = {
1901
1952
  ],
1902
1953
  "impl": {
1903
1954
  "script": "scripts/gates/test-world-run.mjs"
1904
- }
1955
+ },
1956
+ "runtimeSide": "tree"
1905
1957
  },
1906
1958
  "unit": {
1907
1959
  "summary": "run unit tests and judge per-subject coverage and test-kit use",
@@ -1932,7 +1984,8 @@ export const CATALOG = {
1932
1984
  ],
1933
1985
  "impl": {
1934
1986
  "script": "scripts/gates/unit-run.mjs"
1935
- }
1987
+ },
1988
+ "runtimeSide": "tree"
1936
1989
  }
1937
1990
  }
1938
1991
  },
@@ -1988,7 +2041,8 @@ export const CATALOG = {
1988
2041
  "backup writes only refs/backup/<yyyy-mm-dd>/<branch>, never branches or tags",
1989
2042
  "backup refs trigger no workflow and are the only push a coordinator may make",
1990
2043
  "pushes are never forced and the pre-push hook is never bypassed"
1991
- ]
2044
+ ],
2045
+ "runtimeSide": "host"
1992
2046
  },
1993
2047
  "commit": {
1994
2048
  "summary": "commit staged work with the message convention and trailers",
@@ -2076,7 +2130,8 @@ export const CATALOG = {
2076
2130
  "subjects use `type(scope): summary`; types are feat, fix, refactor, test, docs, chore, land and release",
2077
2131
  "keep one logical change in each commit and pass explicit paths instead of staging unrelated work",
2078
2132
  "hooks run the L0 checks; never bypass them and never amend a pushed or landed commit"
2079
- ]
2133
+ ],
2134
+ "runtimeSide": "host"
2080
2135
  },
2081
2136
  "land": {
2082
2137
  "summary": "verify a lane and fast-forward it onto local main without pushing",
@@ -2114,6 +2169,11 @@ export const CATALOG = {
2114
2169
  "type": "string",
2115
2170
  "summary": "the workflow or lane id recorded in the human result"
2116
2171
  },
2172
+ {
2173
+ "name": "kernel-note",
2174
+ "type": "string",
2175
+ "summary": "one line, what a Kernel must do differently after this land; the land record carries it and the runtime delivers it verbatim with the Kernels' next wake (absent: no line)"
2176
+ },
2117
2177
  {
2118
2178
  "name": "concurrency",
2119
2179
  "type": "number",
@@ -2130,7 +2190,8 @@ export const CATALOG = {
2130
2190
  "examples": [
2131
2191
  "starci git land <worktree> <ref>",
2132
2192
  "starci git land <worktree> <ref> --verified <sha> --verified-log <file> --concurrency 2",
2133
- "starci git land <worktree> <ref> --dry-run --json"
2193
+ "starci git land <worktree> <ref> --dry-run --json",
2194
+ "starci git land <worktree> <ref> --kernel-note \"settle needs --evidence now\""
2134
2195
  ],
2135
2196
  "editions": [
2136
2197
  "full"
@@ -2149,7 +2210,8 @@ export const CATALOG = {
2149
2210
  "lands are serial and hold the host land lock through the gate, check, specs and local merge",
2150
2211
  "local main is the only destination; a land never pushes, tags or touches origin",
2151
2212
  "delta lands use --verified with the matching --verified-log and always rerun prior-red spec files"
2152
- ]
2213
+ ],
2214
+ "runtimeSide": "host"
2153
2215
  },
2154
2216
  "sync": {
2155
2217
  "summary": "merge local main into a clean lane with rerere enabled",
@@ -2201,7 +2263,8 @@ export const CATALOG = {
2201
2263
  "lanes merge the LOCAL main, never origin/main",
2202
2264
  "the tracked worktree must be clean; untracked files are left alone",
2203
2265
  "rerere records conflict resolutions so the same resolution can be replayed"
2204
- ]
2266
+ ],
2267
+ "runtimeSide": "host"
2205
2268
  }
2206
2269
  }
2207
2270
  },
@@ -2226,7 +2289,8 @@ export const CATALOG = {
2226
2289
  ],
2227
2290
  "impl": {
2228
2291
  "script": "scripts/guards/command-guard.mjs"
2229
- }
2292
+ },
2293
+ "runtimeSide": "host"
2230
2294
  },
2231
2295
  "footprint-scan": {
2232
2296
  "summary": "scan for fresh cross-repository links and linked worktrees",
@@ -2257,7 +2321,8 @@ export const CATALOG = {
2257
2321
  ],
2258
2322
  "impl": {
2259
2323
  "script": "scripts/guards/footprint-scan.mjs"
2260
- }
2324
+ },
2325
+ "runtimeSide": "host"
2261
2326
  },
2262
2327
  "raw": {
2263
2328
  "summary": "apply command policy and run the real host tool behind a PATH wrapper",
@@ -2303,7 +2368,8 @@ export const CATALOG = {
2303
2368
  "the shared command policy decides every invocation before the real tool starts",
2304
2369
  "resolution skips the per-user StarCi shim directory so a wrapper never calls itself",
2305
2370
  "policy refusals exit 2; allowed commands return the real tool's exit code unchanged"
2306
- ]
2371
+ ],
2372
+ "runtimeSide": "host"
2307
2373
  },
2308
2374
  "seat-tools": {
2309
2375
  "summary": "deny tools forbidden for the bound seat from JSON on stdin",
@@ -2321,7 +2387,8 @@ export const CATALOG = {
2321
2387
  ],
2322
2388
  "impl": {
2323
2389
  "script": "scripts/guards/seat-tools.mjs"
2324
- }
2390
+ },
2391
+ "runtimeSide": "host"
2325
2392
  },
2326
2393
  "verify-commit": {
2327
2394
  "summary": "verify a protected-branch update carries only worker-owned paths",
@@ -2352,7 +2419,8 @@ export const CATALOG = {
2352
2419
  ],
2353
2420
  "impl": {
2354
2421
  "script": "scripts/guards/verify-commit.mjs"
2355
- }
2422
+ },
2423
+ "runtimeSide": "host"
2356
2424
  }
2357
2425
  }
2358
2426
  },
@@ -2389,7 +2457,8 @@ export const CATALOG = {
2389
2457
  ],
2390
2458
  "conventions": [
2391
2459
  "open uses the local harness URL derived from the runtime statusApp port"
2392
- ]
2460
+ ],
2461
+ "runtimeSide": "host"
2393
2462
  },
2394
2463
  "start": {
2395
2464
  "summary": "start the harness API and UI or its named tunnel",
@@ -2429,7 +2498,8 @@ export const CATALOG = {
2429
2498
  "the API binds 127.0.0.1 at STARCI_STATUS_PORT when set, otherwise the runtime statusApp port",
2430
2499
  "the named tunnel reads %USERPROFILE%/.cloudflared/harness.yml and never accepts a token",
2431
2500
  "the local API stays in the verb process and Vite is its only child process"
2432
- ]
2501
+ ],
2502
+ "runtimeSide": "host"
2433
2503
  },
2434
2504
  "status": {
2435
2505
  "summary": "report whether the harness health endpoint is up",
@@ -2463,7 +2533,8 @@ export const CATALOG = {
2463
2533
  ],
2464
2534
  "conventions": [
2465
2535
  "status probes /healthz at the local harness URL derived from the runtime statusApp port"
2466
- ]
2536
+ ],
2537
+ "runtimeSide": "host"
2467
2538
  },
2468
2539
  "stop": {
2469
2540
  "summary": "stop only harness processes recorded by harness start",
@@ -2496,7 +2567,8 @@ export const CATALOG = {
2496
2567
  "conventions": [
2497
2568
  "stop acts only when the recorded PID, creation time and harness start command all match",
2498
2569
  "a missing PID clears a stale record while an identity mismatch is retained and refused"
2499
- ]
2570
+ ],
2571
+ "runtimeSide": "host"
2500
2572
  }
2501
2573
  }
2502
2574
  },
@@ -2554,7 +2626,8 @@ export const CATALOG = {
2554
2626
  "args": [
2555
2627
  "archive"
2556
2628
  ]
2557
- }
2629
+ },
2630
+ "runtimeSide": "host"
2558
2631
  },
2559
2632
  "artifacts": {
2560
2633
  "summary": "list the indexed proof files of the workflow's jobs, per job (read-only)",
@@ -2636,7 +2709,8 @@ export const CATALOG = {
2636
2709
  "args": [
2637
2710
  "artifacts"
2638
2711
  ]
2639
- }
2712
+ },
2713
+ "runtimeSide": "host"
2640
2714
  },
2641
2715
  "autopilot": {
2642
2716
  "summary": "show or drive a workflow's autopilot: switch it, sweep, bundle, defer to handover, release, extend",
@@ -2794,7 +2868,8 @@ export const CATALOG = {
2794
2868
  "args": [
2795
2869
  "autopilot"
2796
2870
  ]
2797
- }
2871
+ },
2872
+ "runtimeSide": "host"
2798
2873
  },
2799
2874
  "consume-report": {
2800
2875
  "summary": "integrate the report a job filed; the Kernel must consume it before settle",
@@ -2829,7 +2904,8 @@ export const CATALOG = {
2829
2904
  "args": [
2830
2905
  "consume-report"
2831
2906
  ]
2832
- }
2907
+ },
2908
+ "runtimeSide": "host"
2833
2909
  },
2834
2910
  "coverage": {
2835
2911
  "summary": "show every FR, shape and proof case of the workflow's scope as proven, stale or missing",
@@ -2864,7 +2940,8 @@ export const CATALOG = {
2864
2940
  "args": [
2865
2941
  "coverage"
2866
2942
  ]
2867
- }
2943
+ },
2944
+ "runtimeSide": "host"
2868
2945
  },
2869
2946
  "cut-seam": {
2870
2947
  "summary": "publish a cut seam's interface, release its siblings on a stub, or reconcile a stub sibling",
@@ -2960,10 +3037,11 @@ export const CATALOG = {
2960
3037
  "args": [
2961
3038
  "cut-seam"
2962
3039
  ]
2963
- }
3040
+ },
3041
+ "runtimeSide": "host"
2964
3042
  },
2965
3043
  "decide": {
2966
- "summary": "open, list or close an entry of the Kernel decision log (hypothesis, action, metric)",
3044
+ "summary": "answer one item of the Kernel menu with a typed choice, or keep the decision log",
2967
3045
  "owner": "runtime",
2968
3046
  "flags": [
2969
3047
  {
@@ -3020,15 +3098,41 @@ export const CATALOG = {
3020
3098
  "name": "list",
3021
3099
  "type": "boolean",
3022
3100
  "summary": "list the decisions of the workflow"
3101
+ },
3102
+ {
3103
+ "name": "item",
3104
+ "type": "string",
3105
+ "summary": "id of the menu item to answer (starci kernel status menu[].id)"
3106
+ },
3107
+ {
3108
+ "name": "choice",
3109
+ "type": "string",
3110
+ "summary": "the option of that item to take (menu[].options[].choice, or none-fits)"
3111
+ },
3112
+ {
3113
+ "name": "reason",
3114
+ "type": "string",
3115
+ "summary": "why this choice; recorded in the decision log (required with --item)"
3116
+ },
3117
+ {
3118
+ "name": "text",
3119
+ "type": "string",
3120
+ "summary": "the free-text input the chosen option names (its text field), e.g. the answer to a worker question"
3121
+ },
3122
+ {
3123
+ "name": "evidence",
3124
+ "type": "string",
3125
+ "summary": "comma list of refs (ledger rows, events, files) the choice rests on"
3023
3126
  }
3024
3127
  ],
3025
3128
  "exit": {
3026
- "0": "listed or recorded",
3027
- "1": "refused (incomplete, action already open or reverted, unknown or closed decision)",
3129
+ "0": "listed, recorded or executed",
3130
+ "1": "refused (an item or choice not on the menu, incomplete, action already open or reverted, unknown or closed decision) or a step of the choice failed",
3028
3131
  "2": "bad usage: a required flag is missing or a flag has no value"
3029
3132
  },
3030
3133
  "json": "flag",
3031
3134
  "examples": [
3135
+ "starci kernel decide --repo <path> --workflow <workflow> --item <item> --choice <choice> --reason <why>",
3032
3136
  "starci kernel decide --repo <path> --workflow <workflow> --list",
3033
3137
  "starci kernel decide --repo <path> --workflow <workflow> --hypothesis <hypothesis> --action-key <key> --metric <metric>",
3034
3138
  "starci kernel decide --repo <path> --workflow <workflow> --close <decision> --result keep --observed <observed>"
@@ -3041,12 +3145,18 @@ export const CATALOG = {
3041
3145
  "args": [
3042
3146
  "decide"
3043
3147
  ]
3044
- }
3148
+ },
3149
+ "runtimeSide": "host"
3045
3150
  },
3046
3151
  "decisions": {
3047
3152
  "summary": "list, open, claim, resolve or escalate Decision Items; the Kernel reads them first every wake",
3048
3153
  "owner": "runtime",
3049
3154
  "flags": [
3155
+ {
3156
+ "name": "field",
3157
+ "type": "string",
3158
+ "summary": "comma list of dotted paths of the answer; prints only those fields as JSON"
3159
+ },
3050
3160
  {
3051
3161
  "name": "repo",
3052
3162
  "type": "string",
@@ -3221,7 +3331,8 @@ export const CATALOG = {
3221
3331
  "args": [
3222
3332
  "decisions"
3223
3333
  ]
3224
- }
3334
+ },
3335
+ "runtimeSide": "host"
3225
3336
  },
3226
3337
  "dispatch": {
3227
3338
  "summary": "admit a routed job and launch its worker with --spawn; without it print the launch plan",
@@ -3285,7 +3396,8 @@ export const CATALOG = {
3285
3396
  "args": [
3286
3397
  "dispatch"
3287
3398
  ]
3288
- }
3399
+ },
3400
+ "runtimeSide": "host"
3289
3401
  },
3290
3402
  "dispatch-ready": {
3291
3403
  "summary": "route and dispatch queued-ready jobs up to the workflow allowed parallelism",
@@ -3336,7 +3448,8 @@ export const CATALOG = {
3336
3448
  "args": [
3337
3449
  "dispatch-ready"
3338
3450
  ]
3339
- }
3451
+ },
3452
+ "runtimeSide": "host"
3340
3453
  },
3341
3454
  "enqueue": {
3342
3455
  "summary": "enqueue a work-unit job with its op, owned paths, records and retry lineage",
@@ -3415,6 +3528,11 @@ export const CATALOG = {
3415
3528
  "type": "string",
3416
3529
  "summary": "job this one retries"
3417
3530
  },
3531
+ {
3532
+ "name": "switch-agent",
3533
+ "type": "boolean",
3534
+ "summary": "with --retry-of, the agent pool of the attempt being retried is demoted for this retry (the route table runs it on another eligible pool); a Kernel's choice to replace the agent"
3535
+ },
3418
3536
  {
3419
3537
  "name": "reopen",
3420
3538
  "type": "string",
@@ -3470,7 +3588,8 @@ export const CATALOG = {
3470
3588
  "args": [
3471
3589
  "enqueue"
3472
3590
  ]
3473
- }
3591
+ },
3592
+ "runtimeSide": "host"
3474
3593
  },
3475
3594
  "estimate": {
3476
3595
  "summary": "compute the size class and agent count of a slice from runtimes.yaml allocation.slicing",
@@ -3530,7 +3649,8 @@ export const CATALOG = {
3530
3649
  "args": [
3531
3650
  "estimate"
3532
3651
  ]
3533
- }
3652
+ },
3653
+ "runtimeSide": "host"
3534
3654
  },
3535
3655
  "extensions": {
3536
3656
  "summary": "list the file-based kernel extensions: verbs, status fields, boolean flags, load problems",
@@ -3559,7 +3679,8 @@ export const CATALOG = {
3559
3679
  "args": [
3560
3680
  "extensions"
3561
3681
  ]
3562
- }
3682
+ },
3683
+ "runtimeSide": "host"
3563
3684
  },
3564
3685
  "finish": {
3565
3686
  "summary": "finish an owner-approved workflow and release its kernel seat",
@@ -3594,7 +3715,8 @@ export const CATALOG = {
3594
3715
  "args": [
3595
3716
  "finish"
3596
3717
  ]
3597
- }
3718
+ },
3719
+ "runtimeSide": "host"
3598
3720
  },
3599
3721
  "foundation": {
3600
3722
  "summary": "claim, land or declare a shared foundation (or none) for a workflow",
@@ -3687,7 +3809,8 @@ export const CATALOG = {
3687
3809
  "args": [
3688
3810
  "foundation"
3689
3811
  ]
3690
- }
3812
+ },
3813
+ "runtimeSide": "host"
3691
3814
  },
3692
3815
  "foundations": {
3693
3816
  "summary": "list the ledger's shared foundations: owner, state, dependents, waits",
@@ -3722,7 +3845,8 @@ export const CATALOG = {
3722
3845
  "args": [
3723
3846
  "foundations"
3724
3847
  ]
3725
- }
3848
+ },
3849
+ "runtimeSide": "host"
3726
3850
  },
3727
3851
  "graph-edit": {
3728
3852
  "summary": "apply a logged, reversible light edit to the workflow's unit jobs (drop, widen, wire, ...)",
@@ -3859,7 +3983,8 @@ export const CATALOG = {
3859
3983
  "args": [
3860
3984
  "graph-edit"
3861
3985
  ]
3862
- }
3986
+ },
3987
+ "runtimeSide": "host"
3863
3988
  },
3864
3989
  "hierarchy": {
3865
3990
  "summary": "project the agent hierarchy (starci/agent-hierarchy@1) of a workflow",
@@ -3894,7 +4019,8 @@ export const CATALOG = {
3894
4019
  "args": [
3895
4020
  "hierarchy"
3896
4021
  ]
3897
- }
4022
+ },
4023
+ "runtimeSide": "host"
3898
4024
  },
3899
4025
  "inbox": {
3900
4026
  "summary": "list the workflow's pending inbox items, or acknowledge one with a disposition",
@@ -3940,7 +4066,8 @@ export const CATALOG = {
3940
4066
  "args": [
3941
4067
  "inbox"
3942
4068
  ]
3943
- }
4069
+ },
4070
+ "runtimeSide": "host"
3944
4071
  },
3945
4072
  "incident": {
3946
4073
  "summary": "raise, resolve or attach typed release conditions to a workflow incident",
@@ -4142,10 +4269,11 @@ export const CATALOG = {
4142
4269
  "args": [
4143
4270
  "incident"
4144
4271
  ]
4145
- }
4272
+ },
4273
+ "runtimeSide": "host"
4146
4274
  },
4147
4275
  "kernel-ack-rev": {
4148
- "summary": "project or attest the complete current Kernel READ manifest",
4276
+ "summary": "project or attest the Kernel READ manifest (also spelled revision-ack)",
4149
4277
  "owner": "runtime",
4150
4278
  "flags": [
4151
4279
  {
@@ -4169,6 +4297,11 @@ export const CATALOG = {
4169
4297
  "type": "boolean",
4170
4298
  "summary": "return the current server-derived required manifest without acknowledgement"
4171
4299
  },
4300
+ {
4301
+ "name": "digest",
4302
+ "type": "string",
4303
+ "summary": "the readToken --plan returned, after every path it lists was read (no file needed)"
4304
+ },
4172
4305
  {
4173
4306
  "name": "read-manifest",
4174
4307
  "type": "string",
@@ -4188,6 +4321,7 @@ export const CATALOG = {
4188
4321
  "json": "flag",
4189
4322
  "examples": [
4190
4323
  "starci kernel kernel-ack-rev --repo <path> --workflow <workflow> --plan",
4324
+ "starci kernel kernel-ack-rev --repo <path> --workflow <workflow> --rev <rev> --digest <readToken>",
4191
4325
  "starci kernel kernel-ack-rev --repo <path> --workflow <workflow> --rev <rev> --read-manifest <file>"
4192
4326
  ],
4193
4327
  "editions": [
@@ -4198,7 +4332,8 @@ export const CATALOG = {
4198
4332
  "args": [
4199
4333
  "kernel-ack-rev"
4200
4334
  ]
4201
- }
4335
+ },
4336
+ "runtimeSide": "host"
4202
4337
  },
4203
4338
  "kernel-proposal": {
4204
4339
  "summary": "file a tier-2 shared runtime change proposal for the Supervisor, or list proposals",
@@ -4264,7 +4399,8 @@ export const CATALOG = {
4264
4399
  "args": [
4265
4400
  "kernel-proposal"
4266
4401
  ]
4267
- }
4402
+ },
4403
+ "runtimeSide": "host"
4268
4404
  },
4269
4405
  "lifecycle": {
4270
4406
  "summary": "pause, stop or resume a workflow; only the owner or supervisor resumes or stops",
@@ -4332,7 +4468,8 @@ export const CATALOG = {
4332
4468
  "args": [
4333
4469
  "lifecycle"
4334
4470
  ]
4335
- }
4471
+ },
4472
+ "runtimeSide": "host"
4336
4473
  },
4337
4474
  "log": {
4338
4475
  "summary": "append one typed log row to the ledger's logs table",
@@ -4453,12 +4590,18 @@ export const CATALOG = {
4453
4590
  "args": [
4454
4591
  "log"
4455
4592
  ]
4456
- }
4593
+ },
4594
+ "runtimeSide": "host"
4457
4595
  },
4458
4596
  "logs": {
4459
4597
  "summary": "list the workflow's typed log rows, oldest first",
4460
4598
  "owner": "runtime",
4461
4599
  "flags": [
4600
+ {
4601
+ "name": "field",
4602
+ "type": "string",
4603
+ "summary": "comma list of dotted paths of the answer; prints only those fields as JSON"
4604
+ },
4462
4605
  {
4463
4606
  "name": "repo",
4464
4607
  "type": "string",
@@ -4509,7 +4652,8 @@ export const CATALOG = {
4509
4652
  "args": [
4510
4653
  "logs"
4511
4654
  ]
4512
- }
4655
+ },
4656
+ "runtimeSide": "host"
4513
4657
  },
4514
4658
  "messages": {
4515
4659
  "summary": "drain the workflow Runs into the ledger and list every orchestration message",
@@ -4544,7 +4688,8 @@ export const CATALOG = {
4544
4688
  "args": [
4545
4689
  "messages"
4546
4690
  ]
4547
- }
4691
+ },
4692
+ "runtimeSide": "host"
4548
4693
  },
4549
4694
  "notify": {
4550
4695
  "summary": "send a typed notice to one peer workflow or all peers",
@@ -4613,7 +4758,8 @@ export const CATALOG = {
4613
4758
  "args": [
4614
4759
  "notify"
4615
4760
  ]
4616
- }
4761
+ },
4762
+ "runtimeSide": "host"
4617
4763
  },
4618
4764
  "nudge": {
4619
4765
  "summary": "wake a running job's worker at its exact terminal so it files its report",
@@ -4647,7 +4793,8 @@ export const CATALOG = {
4647
4793
  "args": [
4648
4794
  "nudge"
4649
4795
  ]
4650
- }
4796
+ },
4797
+ "runtimeSide": "host"
4651
4798
  },
4652
4799
  "observe": {
4653
4800
  "summary": "read the exact op terminal screen of a job (reasoning context, never evidence)",
@@ -4687,7 +4834,8 @@ export const CATALOG = {
4687
4834
  "args": [
4688
4835
  "observe"
4689
4836
  ]
4690
- }
4837
+ },
4838
+ "runtimeSide": "host"
4691
4839
  },
4692
4840
  "op-contract": {
4693
4841
  "summary": "read the contract row dispatch wrote for a job or an op+attempt",
@@ -4737,7 +4885,8 @@ export const CATALOG = {
4737
4885
  "args": [
4738
4886
  "op-contract"
4739
4887
  ]
4740
- }
4888
+ },
4889
+ "runtimeSide": "host"
4741
4890
  },
4742
4891
  "op-override": {
4743
4892
  "summary": "store an additive override of one op for this workflow",
@@ -4793,7 +4942,8 @@ export const CATALOG = {
4793
4942
  "args": [
4794
4943
  "op-override"
4795
4944
  ]
4796
- }
4945
+ },
4946
+ "runtimeSide": "host"
4797
4947
  },
4798
4948
  "peers": {
4799
4949
  "summary": "the workflow's peer workflows of the same ledger",
@@ -4827,7 +4977,8 @@ export const CATALOG = {
4827
4977
  "args": [
4828
4978
  "peers"
4829
4979
  ]
4830
- }
4980
+ },
4981
+ "runtimeSide": "host"
4831
4982
  },
4832
4983
  "plan": {
4833
4984
  "summary": "write the workflow's derived plan into the ledger",
@@ -4888,7 +5039,8 @@ export const CATALOG = {
4888
5039
  "args": [
4889
5040
  "plan"
4890
5041
  ]
4891
- }
5042
+ },
5043
+ "runtimeSide": "host"
4892
5044
  },
4893
5045
  "provider-backoff": {
4894
5046
  "summary": "open the provider circuit a persisting rate limit calls for (idempotent)",
@@ -4951,7 +5103,8 @@ export const CATALOG = {
4951
5103
  "args": [
4952
5104
  "provider-backoff"
4953
5105
  ]
4954
- }
5106
+ },
5107
+ "runtimeSide": "host"
4955
5108
  },
4956
5109
  "provider-health": {
4957
5110
  "summary": "the ledger provider-health row; --recover clears an open circuit (Kernel terminal only)",
@@ -5017,7 +5170,8 @@ export const CATALOG = {
5017
5170
  "args": [
5018
5171
  "provider-health"
5019
5172
  ]
5020
- }
5173
+ },
5174
+ "runtimeSide": "host"
5021
5175
  },
5022
5176
  "questions": {
5023
5177
  "summary": "list the pending worker questions of a workflow, draining its Runs into the ledger first",
@@ -5051,7 +5205,8 @@ export const CATALOG = {
5051
5205
  "args": [
5052
5206
  "questions"
5053
5207
  ]
5054
- }
5208
+ },
5209
+ "runtimeSide": "host"
5055
5210
  },
5056
5211
  "reconcile": {
5057
5212
  "summary": "recover a fenced launch, drop a queued job, recover a dead worker or cancel orphan kernel jobs",
@@ -5138,7 +5293,8 @@ export const CATALOG = {
5138
5293
  "args": [
5139
5294
  "reconcile"
5140
5295
  ]
5141
- }
5296
+ },
5297
+ "runtimeSide": "host"
5142
5298
  },
5143
5299
  "record-change": {
5144
5300
  "summary": "the record's OWNER declares its committed change breaking (peers owe ONE follow-up leg) or advisory",
@@ -5195,7 +5351,8 @@ export const CATALOG = {
5195
5351
  "args": [
5196
5352
  "record-change"
5197
5353
  ]
5198
- }
5354
+ },
5355
+ "runtimeSide": "host"
5199
5356
  },
5200
5357
  "record-checks": {
5201
5358
  "summary": "record independent checks against a filed worker report",
@@ -5241,7 +5398,8 @@ export const CATALOG = {
5241
5398
  "args": [
5242
5399
  "record-checks"
5243
5400
  ]
5244
- }
5401
+ },
5402
+ "runtimeSide": "host"
5245
5403
  },
5246
5404
  "redesign": {
5247
5405
  "summary": "dispatch the owning op with the RCA as its brief (strong reasoning pool)",
@@ -5299,7 +5457,8 @@ export const CATALOG = {
5299
5457
  "args": [
5300
5458
  "redesign"
5301
5459
  ]
5302
- }
5460
+ },
5461
+ "runtimeSide": "host"
5303
5462
  },
5304
5463
  "rename": {
5305
5464
  "summary": "set a workflow's display name and rename its live [Kernel] and [Op] terminal tabs",
@@ -5361,7 +5520,8 @@ export const CATALOG = {
5361
5520
  "args": [
5362
5521
  "rename"
5363
5522
  ]
5364
- }
5523
+ },
5524
+ "runtimeSide": "host"
5365
5525
  },
5366
5526
  "reply": {
5367
5527
  "summary": "answer a pending worker question, or route it to the owner with --to-owner",
@@ -5412,7 +5572,8 @@ export const CATALOG = {
5412
5572
  "args": [
5413
5573
  "reply"
5414
5574
  ]
5415
- }
5575
+ },
5576
+ "runtimeSide": "host"
5416
5577
  },
5417
5578
  "report": {
5418
5579
  "summary": "a worker files its job report (the durable op to kernel IPC)",
@@ -5455,7 +5616,7 @@ export const CATALOG = {
5455
5616
  {
5456
5617
  "name": "dispatch-capability",
5457
5618
  "type": "string",
5458
- "summary": "the dispatch capability from the Orca preamble, authenticating the worker_done message"
5619
+ "summary": "the dispatch capability of the Orca preamble when it carries one, forwarded with the worker_done message"
5459
5620
  }
5460
5621
  ],
5461
5622
  "exit": {
@@ -5476,7 +5637,8 @@ export const CATALOG = {
5476
5637
  "args": [
5477
5638
  "report"
5478
5639
  ]
5479
- }
5640
+ },
5641
+ "runtimeSide": "host"
5480
5642
  },
5481
5643
  "retire-ask": {
5482
5644
  "summary": "close an ask the owner should no longer answer (ask-superseded)",
@@ -5523,7 +5685,71 @@ export const CATALOG = {
5523
5685
  "args": [
5524
5686
  "retire-ask"
5525
5687
  ]
5526
- }
5688
+ },
5689
+ "runtimeSide": "host"
5690
+ },
5691
+ "revision-ack": {
5692
+ "summary": "the same verb as kernel-ack-rev: project or attest the Kernel READ manifest",
5693
+ "owner": "runtime",
5694
+ "flags": [
5695
+ {
5696
+ "name": "repo",
5697
+ "type": "string",
5698
+ "summary": "managed repository whose .starciwork ledger the command uses"
5699
+ },
5700
+ {
5701
+ "name": "workflow",
5702
+ "type": "string",
5703
+ "required": true,
5704
+ "summary": "workflow id"
5705
+ },
5706
+ {
5707
+ "name": "rev",
5708
+ "type": "string",
5709
+ "summary": "exact current Git SHA or installed required-byte revision returned by --plan"
5710
+ },
5711
+ {
5712
+ "name": "plan",
5713
+ "type": "boolean",
5714
+ "summary": "return the current server-derived required manifest without acknowledgement"
5715
+ },
5716
+ {
5717
+ "name": "digest",
5718
+ "type": "string",
5719
+ "summary": "the readToken --plan returned, after every path it lists was read (no file needed)"
5720
+ },
5721
+ {
5722
+ "name": "read-manifest",
5723
+ "type": "string",
5724
+ "summary": "regular JSON file containing the exact complete manifest read by this Kernel"
5725
+ },
5726
+ {
5727
+ "name": "op",
5728
+ "type": "string",
5729
+ "summary": "include this declared upcoming op contract in the required READ set"
5730
+ }
5731
+ ],
5732
+ "exit": {
5733
+ "0": "planned or acknowledged",
5734
+ "1": "refused or unavailable current identity/READ inputs",
5735
+ "2": "bad usage: a required flag is missing or a flag has no value"
5736
+ },
5737
+ "json": "flag",
5738
+ "examples": [
5739
+ "starci kernel revision-ack --repo <path> --workflow <workflow> --plan",
5740
+ "starci kernel revision-ack --repo <path> --workflow <workflow> --rev <rev> --digest <readToken>",
5741
+ "starci kernel revision-ack --repo <path> --workflow <workflow> --rev <rev> --read-manifest <file>"
5742
+ ],
5743
+ "editions": [
5744
+ "full"
5745
+ ],
5746
+ "impl": {
5747
+ "script": "scripts/kernel/cli.mjs",
5748
+ "args": [
5749
+ "revision-ack"
5750
+ ]
5751
+ },
5752
+ "runtimeSide": "host"
5527
5753
  },
5528
5754
  "route": {
5529
5755
  "summary": "resolve and persist the model decision of a job",
@@ -5570,7 +5796,8 @@ export const CATALOG = {
5570
5796
  "args": [
5571
5797
  "route"
5572
5798
  ]
5573
- }
5799
+ },
5800
+ "runtimeSide": "host"
5574
5801
  },
5575
5802
  "run-deferred-tests": {
5576
5803
  "summary": "re-queue the test legs the owner's specs switch deferred (see status testsDeferred)",
@@ -5625,7 +5852,8 @@ export const CATALOG = {
5625
5852
  "args": [
5626
5853
  "run-deferred-tests"
5627
5854
  ]
5628
- }
5855
+ },
5856
+ "runtimeSide": "host"
5629
5857
  },
5630
5858
  "serve-ask": {
5631
5859
  "summary": "park an owner ask: Telegram notice first, the answer form served on demand",
@@ -5676,7 +5904,8 @@ export const CATALOG = {
5676
5904
  "args": [
5677
5905
  "serve-ask"
5678
5906
  ]
5679
- }
5907
+ },
5908
+ "runtimeSide": "host"
5680
5909
  },
5681
5910
  "settle": {
5682
5911
  "summary": "settle a consumed report: pass, fail or blocked verdict",
@@ -5738,7 +5967,8 @@ export const CATALOG = {
5738
5967
  "args": [
5739
5968
  "settle"
5740
5969
  ]
5741
- }
5970
+ },
5971
+ "runtimeSide": "host"
5742
5972
  },
5743
5973
  "settle-tail": {
5744
5974
  "summary": "run the async tail of a settled job (artifact index, evidence, retention)",
@@ -5774,12 +6004,23 @@ export const CATALOG = {
5774
6004
  "args": [
5775
6005
  "settle-tail"
5776
6006
  ]
5777
- }
6007
+ },
6008
+ "runtimeSide": "host"
5778
6009
  },
5779
6010
  "status": {
5780
6011
  "summary": "the live status projection of a workflow (frontier, progress, waits)",
5781
6012
  "owner": "runtime",
5782
6013
  "flags": [
6014
+ {
6015
+ "name": "field",
6016
+ "type": "string",
6017
+ "summary": "comma list of dotted paths of the answer; prints only those fields as JSON"
6018
+ },
6019
+ {
6020
+ "name": "full",
6021
+ "type": "boolean",
6022
+ "summary": "the whole text view (every section; the legs line tags each leg [judge:...] with who judges its product, the judge field of its op contract); the Kernel seat's own call prints its one-line state and its Decide section by default"
6023
+ },
5783
6024
  {
5784
6025
  "name": "repo",
5785
6026
  "type": "string",
@@ -5809,12 +6050,18 @@ export const CATALOG = {
5809
6050
  "args": [
5810
6051
  "status"
5811
6052
  ]
5812
- }
6053
+ },
6054
+ "runtimeSide": "host"
5813
6055
  },
5814
6056
  "survey": {
5815
6057
  "summary": "the read projection a Kernel scans each wake (jobs, inbox, signals, drift)",
5816
6058
  "owner": "runtime",
5817
6059
  "flags": [
6060
+ {
6061
+ "name": "field",
6062
+ "type": "string",
6063
+ "summary": "comma list of dotted paths of the answer; prints only those fields as JSON"
6064
+ },
5818
6065
  {
5819
6066
  "name": "repo",
5820
6067
  "type": "string",
@@ -5850,7 +6097,8 @@ export const CATALOG = {
5850
6097
  "args": [
5851
6098
  "survey"
5852
6099
  ]
5853
- }
6100
+ },
6101
+ "runtimeSide": "host"
5854
6102
  },
5855
6103
  "unit": {
5856
6104
  "summary": "the work units and their try budgets; only the owner or Supervisor raises one",
@@ -5909,7 +6157,8 @@ export const CATALOG = {
5909
6157
  "args": [
5910
6158
  "unit"
5911
6159
  ]
5912
- }
6160
+ },
6161
+ "runtimeSide": "host"
5913
6162
  },
5914
6163
  "usage": {
5915
6164
  "summary": "measured tokens by op, model and Kernel of one workflow, or per workflow",
@@ -5949,7 +6198,8 @@ export const CATALOG = {
5949
6198
  "args": [
5950
6199
  "usage"
5951
6200
  ]
5952
- }
6201
+ },
6202
+ "runtimeSide": "host"
5953
6203
  },
5954
6204
  "verify-proofs": {
5955
6205
  "summary": "re-hash every indexed proof file and walk the events digest chain; exit 1 on tampering",
@@ -5984,7 +6234,8 @@ export const CATALOG = {
5984
6234
  "args": [
5985
6235
  "verify-proofs"
5986
6236
  ]
5987
- }
6237
+ },
6238
+ "runtimeSide": "host"
5988
6239
  }
5989
6240
  }
5990
6241
  },
@@ -6055,7 +6306,8 @@ export const CATALOG = {
6055
6306
  "Use L1 while working, L2 before asking for a land, and L3 when an IO slot changed.",
6056
6307
  "L0 and L1 stay on changed files; L4 is the only whole-repository lint scope.",
6057
6308
  "Product apps go through starci app lint; the runtime uses its structural lint self-check family."
6058
- ]
6309
+ ],
6310
+ "runtimeSide": "tree"
6059
6311
  }
6060
6312
  }
6061
6313
  },
@@ -6155,7 +6407,8 @@ export const CATALOG = {
6155
6407
  ],
6156
6408
  "impl": {
6157
6409
  "script": "scripts/machine/decisions.mjs"
6158
- }
6410
+ },
6411
+ "runtimeSide": "host"
6159
6412
  },
6160
6413
  "kernel-watchdog": {
6161
6414
  "summary": "inspect or repair one running workflow Kernel seat",
@@ -6209,7 +6462,8 @@ export const CATALOG = {
6209
6462
  ],
6210
6463
  "impl": {
6211
6464
  "script": "scripts/kernel/kernel-watchdog.mjs"
6212
- }
6465
+ },
6466
+ "runtimeSide": "host"
6213
6467
  },
6214
6468
  "lessons": {
6215
6469
  "summary": "inspect and update Supervisor learning records",
@@ -6307,7 +6561,8 @@ export const CATALOG = {
6307
6561
  ],
6308
6562
  "impl": {
6309
6563
  "script": "scripts/machine/lessons.mjs"
6310
- }
6564
+ },
6565
+ "runtimeSide": "host"
6311
6566
  },
6312
6567
  "op-metrics": {
6313
6568
  "summary": "report operation health metrics across managed ledgers",
@@ -6354,7 +6609,8 @@ export const CATALOG = {
6354
6609
  ],
6355
6610
  "impl": {
6356
6611
  "script": "scripts/machine/op-metrics.mjs"
6357
- }
6612
+ },
6613
+ "runtimeSide": "host"
6358
6614
  },
6359
6615
  "seam-policy": {
6360
6616
  "summary": "plan canon cuts or redispatch a blocked canon slice",
@@ -6417,7 +6673,8 @@ export const CATALOG = {
6417
6673
  ],
6418
6674
  "impl": {
6419
6675
  "script": "scripts/kernel/seam-policy.mjs"
6420
- }
6676
+ },
6677
+ "runtimeSide": "host"
6421
6678
  },
6422
6679
  "worktrees": {
6423
6680
  "summary": "inspect, collect or resume runtime worktrees",
@@ -6456,7 +6713,8 @@ export const CATALOG = {
6456
6713
  ],
6457
6714
  "impl": {
6458
6715
  "script": "scripts/machine/worktrees.mjs"
6459
- }
6716
+ },
6717
+ "runtimeSide": "host"
6460
6718
  },
6461
6719
  "worktrees-clean": {
6462
6720
  "summary": "remove clean lane worktrees already merged into local main",
@@ -6502,7 +6760,8 @@ export const CATALOG = {
6502
6760
  "a candidate branch must be merged into local main and have no uncommitted tracked change",
6503
6761
  "every path is inspected with lstat and links are removed as links before Git or Orca removes the worktree",
6504
6762
  "--dry-run prints the exact selected worktrees and changes nothing"
6505
- ]
6763
+ ],
6764
+ "runtimeSide": "host"
6506
6765
  }
6507
6766
  }
6508
6767
  },
@@ -6550,7 +6809,8 @@ export const CATALOG = {
6550
6809
  "npm ci installs the lockfile into this worktree's real node_modules and never uses a junction or symbolic link",
6551
6810
  "package.json and package-lock.json must be clean before the run",
6552
6811
  "dependency installs run one at a time under the host lock and never use npm install"
6553
- ]
6812
+ ],
6813
+ "runtimeSide": "host"
6554
6814
  },
6555
6815
  "install": {
6556
6816
  "summary": "add exact dependencies from canon pins under the host lock",
@@ -6595,7 +6855,8 @@ export const CATALOG = {
6595
6855
  "bare package names resolve only from knowledge/hfs/canon-pins.yaml and never through a registry lookup",
6596
6856
  "explicit versions use exact x.y.z form and must agree with the canon pin when one exists",
6597
6857
  "installs always use --save-exact and report the package.json and package-lock.json diff stat"
6598
- ]
6858
+ ],
6859
+ "runtimeSide": "host"
6599
6860
  }
6600
6861
  }
6601
6862
  },
@@ -6639,7 +6900,8 @@ export const CATALOG = {
6639
6900
  ],
6640
6901
  "impl": {
6641
6902
  "script": "scripts/api/orca/terminal-read.mjs"
6642
- }
6903
+ },
6904
+ "runtimeSide": "host"
6643
6905
  },
6644
6906
  "terminal-send": {
6645
6907
  "summary": "send text or Enter to an Orca terminal",
@@ -6687,7 +6949,8 @@ export const CATALOG = {
6687
6949
  ],
6688
6950
  "impl": {
6689
6951
  "script": "scripts/api/orca/terminal-send.mjs"
6690
- }
6952
+ },
6953
+ "runtimeSide": "host"
6691
6954
  }
6692
6955
  }
6693
6956
  },
@@ -6741,7 +7004,44 @@ export const CATALOG = {
6741
7004
  "args": [
6742
7005
  "--once"
6743
7006
  ]
6744
- }
7007
+ },
7008
+ "runtimeSide": "host"
7009
+ },
7010
+ "reopen": {
7011
+ "summary": "put a quarantined service or seat back to declared with a clean restart history",
7012
+ "owner": "runtime",
7013
+ "positional": [
7014
+ {
7015
+ "name": "name",
7016
+ "required": true,
7017
+ "variadic": false
7018
+ }
7019
+ ],
7020
+ "flags": [],
7021
+ "exit": {
7022
+ "0": "the row is declared again",
7023
+ "1": "no such row",
7024
+ "2": "bad usage"
7025
+ },
7026
+ "json": "flag",
7027
+ "examples": [
7028
+ "starci reconciler reopen seat:kernel:<ledger-id>:<workflow-id>",
7029
+ "starci reconciler reopen <service-name>"
7030
+ ],
7031
+ "editions": [
7032
+ "full"
7033
+ ],
7034
+ "impl": {
7035
+ "script": "scripts/reconciler/services.mjs",
7036
+ "args": [
7037
+ "--reopen"
7038
+ ]
7039
+ },
7040
+ "roles": [
7041
+ "lead",
7042
+ "owner"
7043
+ ],
7044
+ "runtimeSide": "host"
6745
7045
  },
6746
7046
  "restart": {
6747
7047
  "summary": "stop the reconciler engine and ensure a new leader",
@@ -6764,7 +7064,8 @@ export const CATALOG = {
6764
7064
  "args": [
6765
7065
  "--restart"
6766
7066
  ]
6767
- }
7067
+ },
7068
+ "runtimeSide": "host"
6768
7069
  },
6769
7070
  "start": {
6770
7071
  "summary": "ensure the reconciler engine has a healthy leader",
@@ -6788,7 +7089,8 @@ export const CATALOG = {
6788
7089
  "args": [
6789
7090
  "ensure"
6790
7091
  ]
6791
- }
7092
+ },
7093
+ "runtimeSide": "host"
6792
7094
  },
6793
7095
  "status": {
6794
7096
  "summary": "print reconciler leader, queue, mode and violation status",
@@ -6811,7 +7113,8 @@ export const CATALOG = {
6811
7113
  "args": [
6812
7114
  "--status"
6813
7115
  ]
6814
- }
7116
+ },
7117
+ "runtimeSide": "host"
6815
7118
  },
6816
7119
  "stop": {
6817
7120
  "summary": "stop the current reconciler engine leader",
@@ -6834,7 +7137,8 @@ export const CATALOG = {
6834
7137
  "args": [
6835
7138
  "--stop"
6836
7139
  ]
6837
- }
7140
+ },
7141
+ "runtimeSide": "host"
6838
7142
  },
6839
7143
  "up": {
6840
7144
  "summary": "bring the host services and seats up, or check them read-only, and print the checklist",
@@ -6897,7 +7201,8 @@ export const CATALOG = {
6897
7201
  ],
6898
7202
  "impl": {
6899
7203
  "script": "scripts/reconciler/start.mjs"
6900
- }
7204
+ },
7205
+ "runtimeSide": "host"
6901
7206
  }
6902
7207
  }
6903
7208
  },
@@ -6930,7 +7235,8 @@ export const CATALOG = {
6930
7235
  ],
6931
7236
  "impl": {
6932
7237
  "script": "scripts/gates/release-app-installs.mjs"
6933
- }
7238
+ },
7239
+ "runtimeSide": "tree"
6934
7240
  },
6935
7241
  "check": {
6936
7242
  "summary": "run the one read-only release readiness gate",
@@ -6963,7 +7269,51 @@ export const CATALOG = {
6963
7269
  ],
6964
7270
  "impl": {
6965
7271
  "script": "scripts/gates/release-check.mjs"
6966
- }
7272
+ },
7273
+ "runtimeSide": "tree"
7274
+ },
7275
+ "ci-status": {
7276
+ "summary": "the verdict of the GitHub ci workflow, Codecov and Sonar for a release; red is recorded for Debug",
7277
+ "owner": "runtime",
7278
+ "flags": [
7279
+ {
7280
+ "name": "repo",
7281
+ "type": "string",
7282
+ "summary": "the repository released (default is the current directory)"
7283
+ },
7284
+ {
7285
+ "name": "tag",
7286
+ "type": "string",
7287
+ "summary": "the release tag v* whose commit is read (default is the newest release tag merged in HEAD)"
7288
+ },
7289
+ {
7290
+ "name": "wait",
7291
+ "type": "boolean",
7292
+ "summary": "poll until the run ends (modules/supervisor/release-cut.yaml suite.ci pollSeconds, waitMinutes)"
7293
+ }
7294
+ ],
7295
+ "exit": {
7296
+ "0": "the ci workflow of the release commit is green",
7297
+ "1": "it is red (for a release cut under suite ci: recorded once as runtime-defect:release-ci-red-<tag>)",
7298
+ "2": "bad usage",
7299
+ "3": "no verdict yet - no run, still running, or GitHub could not be read"
7300
+ },
7301
+ "json": "flag",
7302
+ "examples": [
7303
+ "starci release ci-status --tag v1.0.0-alpha.9 --wait",
7304
+ "starci release ci-status --json"
7305
+ ],
7306
+ "editions": [
7307
+ "full"
7308
+ ],
7309
+ "impl": {
7310
+ "script": "scripts/supervisor/release-ci-status-cli.mjs"
7311
+ },
7312
+ "conventions": [
7313
+ "Under suite ci the full test suite runs only in this workflow, after the push; this verb is how its verdict comes back.",
7314
+ "The state is left beside the release record (starci-release/<sha>.ci.json); starci debug digest and starci reconciler up --check show the last release CI."
7315
+ ],
7316
+ "runtimeSide": "tree"
6967
7317
  },
6968
7318
  "clean-test": {
6969
7319
  "summary": "test published packages from fresh isolated installs",
@@ -6996,7 +7346,8 @@ export const CATALOG = {
6996
7346
  ],
6997
7347
  "impl": {
6998
7348
  "script": "scripts/gates/package-clean-test.mjs"
6999
- }
7349
+ },
7350
+ "runtimeSide": "tree"
7000
7351
  },
7001
7352
  "cut": {
7002
7353
  "summary": "cut the release, the only way the runtime's remote main and a release tag move",
@@ -7005,7 +7356,7 @@ export const CATALOG = {
7005
7356
  {
7006
7357
  "name": "repo",
7007
7358
  "type": "string",
7008
- "summary": "the repository to release (default is the current directory)"
7359
+ "summary": "the repository to release (default: the runtime this command runs from, not the directory it is started in)"
7009
7360
  },
7010
7361
  {
7011
7362
  "name": "remote",
@@ -7026,6 +7377,16 @@ export const CATALOG = {
7026
7377
  "name": "tag",
7027
7378
  "type": "string",
7028
7379
  "summary": "the release tag v* to push (default is the one new annotated v* tag on HEAD)"
7380
+ },
7381
+ {
7382
+ "name": "rows",
7383
+ "type": "string",
7384
+ "summary": "re-run only these rows (comma separated, names as --plan lists them) on the SAME commit and complete the record when every other row is already green on it; a row that is not green there refuses the cut"
7385
+ },
7386
+ {
7387
+ "name": "no-reuse",
7388
+ "type": "boolean",
7389
+ "summary": "run every row; stand in for none from an earlier commit or an earlier cut of this one"
7029
7390
  }
7030
7391
  ],
7031
7392
  "exit": {
@@ -7036,15 +7397,17 @@ export const CATALOG = {
7036
7397
  "json": "flag",
7037
7398
  "examples": [
7038
7399
  "starci release cut",
7039
- "starci release cut --plan --tag v1.0.0-alpha.7",
7040
- "starci release cut --repo <path> --tag v1.0.0-alpha.7 --json"
7400
+ "starci release cut --plan --tag v1.0.0-alpha.9",
7401
+ "starci release cut --tag v1.0.0-alpha.9 --rows \"npm test,linux-parity\"",
7402
+ "starci release cut --repo <path> --tag v1.0.0-alpha.9 --json"
7041
7403
  ],
7042
7404
  "editions": [
7043
7405
  "full"
7044
7406
  ],
7045
7407
  "impl": {
7046
7408
  "script": "scripts/supervisor/release-cut-cli.mjs"
7047
- }
7409
+ },
7410
+ "runtimeSide": "tree"
7048
7411
  },
7049
7412
  "env-test": {
7050
7413
  "summary": "run the runtime spec suite under the release cut's own conditions",
@@ -7080,7 +7443,8 @@ export const CATALOG = {
7080
7443
  "conventions": [
7081
7444
  "the suite is the cut's own spec leg, so a red the cut would find shows here first; it takes minutes to an hour and writes each step to a log",
7082
7445
  "without --lane it refuses (exit 2) unless the host has an Orca terminal, a reachable Orca and a Docker daemon, the same prerequisites the cut refuses on"
7083
- ]
7446
+ ],
7447
+ "runtimeSide": "tree"
7084
7448
  },
7085
7449
  "images": {
7086
7450
  "summary": "build, run, health-check and tear down the shipped application images",
@@ -7141,7 +7505,8 @@ export const CATALOG = {
7141
7505
  "proof containers publish no ports and carry the exact starci.project label",
7142
7506
  "healthy containers pass; an image without HEALTHCHECK must remain running for ten seconds",
7143
7507
  "teardown always removes the exact proof container id and never touches a protected installation or protected port"
7144
- ]
7508
+ ],
7509
+ "runtimeSide": "tree"
7145
7510
  },
7146
7511
  "launch-smoke": {
7147
7512
  "summary": "prove live nested-agent launch paths on an Orca host",
@@ -7209,7 +7574,8 @@ export const CATALOG = {
7209
7574
  ],
7210
7575
  "impl": {
7211
7576
  "script": "scripts/kernel/launch-smoke.mjs"
7212
- }
7577
+ },
7578
+ "runtimeSide": "tree"
7213
7579
  },
7214
7580
  "notes": {
7215
7581
  "summary": "print or write the release notes of a tag, its CHANGELOG section",
@@ -7223,7 +7589,7 @@ export const CATALOG = {
7223
7589
  {
7224
7590
  "name": "repo",
7225
7591
  "type": "string",
7226
- "summary": "the repository holding CHANGELOG.md (default is the current directory)"
7592
+ "summary": "the repository holding CHANGELOG.md (default: the runtime this command runs from, not the directory it is started in)"
7227
7593
  },
7228
7594
  {
7229
7595
  "name": "out",
@@ -7238,8 +7604,8 @@ export const CATALOG = {
7238
7604
  },
7239
7605
  "json": "starci/release-notes@1",
7240
7606
  "examples": [
7241
- "starci release notes --tag v1.0.0-alpha.7",
7242
- "starci release notes --tag v1.0.0-alpha.7 --out notes.md --json"
7607
+ "starci release notes --tag v1.0.0-alpha.9",
7608
+ "starci release notes --tag v1.0.0-alpha.9 --out notes.md --json"
7243
7609
  ],
7244
7610
  "editions": [
7245
7611
  "full"
@@ -7258,7 +7624,8 @@ export const CATALOG = {
7258
7624
  ],
7259
7625
  "conventions": [
7260
7626
  "the text is the CHANGELOG section the annotated tag message is made of, and --out writes only the named file"
7261
- ]
7627
+ ],
7628
+ "runtimeSide": "tree"
7262
7629
  },
7263
7630
  "proof": {
7264
7631
  "summary": "build the release proof attached before publish or deploy effects",
@@ -7301,13 +7668,19 @@ export const CATALOG = {
7301
7668
  ],
7302
7669
  "impl": {
7303
7670
  "script": "scripts/gates/release-proof.mjs"
7304
- }
7671
+ },
7672
+ "runtimeSide": "tree"
7305
7673
  },
7306
7674
  "publish": {
7307
7675
  "summary": "plan or perform the owner-run package publication sequence",
7308
7676
  "owner": "runtime",
7309
7677
  "positional": [],
7310
7678
  "flags": [
7679
+ {
7680
+ "name": "plan",
7681
+ "type": "boolean",
7682
+ "summary": "explicitly print the read-only publication plan (the default)"
7683
+ },
7311
7684
  {
7312
7685
  "name": "publish",
7313
7686
  "type": "boolean",
@@ -7353,6 +7726,7 @@ export const CATALOG = {
7353
7726
  "json": "starci/release-publish-flow@1",
7354
7727
  "examples": [
7355
7728
  "starci release publish",
7729
+ "starci release publish --plan --npm-user <name>",
7356
7730
  "starci release publish --publish --npm-user <name> --expect-sha <sha>",
7357
7731
  "starci release publish --runtime-package --publish --npm-user <name> --expect-sha <sha>"
7358
7732
  ],
@@ -7376,7 +7750,8 @@ export const CATALOG = {
7376
7750
  "runtime-package publishes root package.json after package publication, committed bindings and finished notes; it proves the real archive and private install",
7377
7751
  "runtime-package refuses changed inputs or registry state after its cold proof and never performs rebind or example writes",
7378
7752
  "publication never commits, pushes or tags; release cut owns those effects"
7379
- ]
7753
+ ],
7754
+ "runtimeSide": "tree"
7380
7755
  },
7381
7756
  "sync-runtime": {
7382
7757
  "summary": "refresh or check package runtime copies and optionally prepare grammar",
@@ -7423,7 +7798,9 @@ export const CATALOG = {
7423
7798
  "ordinary sync and check retain their existing copy behavior",
7424
7799
  "prepare-grammar installs and builds ignored grammar output and refreshes knowledge under the host lock before syncing copies",
7425
7800
  "check and prepare-grammar cannot be combined"
7426
- ]
7801
+ ],
7802
+ "writesRuntimeTree": "!check",
7803
+ "runtimeSide": "tree"
7427
7804
  }
7428
7805
  }
7429
7806
  },
@@ -7476,7 +7853,8 @@ export const CATALOG = {
7476
7853
  ],
7477
7854
  "impl": {
7478
7855
  "script": "scripts/route/route-op.mjs"
7479
- }
7856
+ },
7857
+ "runtimeSide": "host"
7480
7858
  }
7481
7859
  }
7482
7860
  },
@@ -7516,7 +7894,50 @@ export const CATALOG = {
7516
7894
  ],
7517
7895
  "impl": {
7518
7896
  "script": "scripts/hfs/architecture.mjs"
7519
- }
7897
+ },
7898
+ "runtimeSide": "tree"
7899
+ },
7900
+ "artefacts": {
7901
+ "summary": "judge or migrate the artefacts the runtime installs outside its tree",
7902
+ "owner": "runtime",
7903
+ "flags": [
7904
+ {
7905
+ "name": "migrate",
7906
+ "type": "boolean",
7907
+ "summary": "rewrite every stale artefact to the revision of this tree and verify the stamp"
7908
+ }
7909
+ ],
7910
+ "exit": {
7911
+ "0": "every artefact is current, or was migrated and verified",
7912
+ "1": "an artefact is stale in check mode, or a migration was refused",
7913
+ "2": "bad usage"
7914
+ },
7915
+ "json": "starci/runtime-artefacts@1",
7916
+ "examples": [
7917
+ "starci runtime artefacts",
7918
+ "starci runtime artefacts --migrate --json"
7919
+ ],
7920
+ "editions": [
7921
+ "full"
7922
+ ],
7923
+ "impl": {
7924
+ "module": "scripts/reconciler/artefacts-verb.mjs",
7925
+ "export": "runtimeArtefacts"
7926
+ },
7927
+ "effect": "local-write",
7928
+ "roles": [
7929
+ "worker",
7930
+ "lead",
7931
+ "coordinator",
7932
+ "release",
7933
+ "owner"
7934
+ ],
7935
+ "conventions": [
7936
+ "without --migrate it only reads; with --migrate it rewrites hooks and generated copies of the live workflows and the host tree",
7937
+ "it never touches product content, only artefacts listed in modules/kernel/installed-artefacts.yaml",
7938
+ "a deploy runs it from the new tree after the fast-forward; the engine runs the same migration when it starts"
7939
+ ],
7940
+ "runtimeSide": "tree"
7520
7941
  },
7521
7942
  "benchmark-snapshot": {
7522
7943
  "summary": "append one model-pool snapshot file under benchmark/snapshots",
@@ -7559,7 +7980,8 @@ export const CATALOG = {
7559
7980
  ],
7560
7981
  "impl": {
7561
7982
  "script": "scripts/agent/benchmark-snapshot.mjs"
7562
- }
7983
+ },
7984
+ "runtimeSide": "tree"
7563
7985
  },
7564
7986
  "check": {
7565
7987
  "summary": "judge the runtime tree — node --check, the runtime HFS check, the retained self-checks",
@@ -7593,7 +8015,55 @@ export const CATALOG = {
7593
8015
  ],
7594
8016
  "impl": {
7595
8017
  "script": "scripts/checks/check-runtime.mjs"
7596
- }
8018
+ },
8019
+ "runtimeSide": "tree"
8020
+ },
8021
+ "deploy": {
8022
+ "summary": "carry a checked runtime revision onto the running host and verify the engine on it",
8023
+ "owner": "runtime",
8024
+ "flags": [
8025
+ {
8026
+ "name": "from",
8027
+ "type": "string",
8028
+ "summary": "a clone directory (its HEAD is the revision) or a ref of the host repository"
8029
+ },
8030
+ {
8031
+ "name": "plan",
8032
+ "type": "boolean",
8033
+ "summary": "print every step and every refusal without changing anything"
8034
+ }
8035
+ ],
8036
+ "exit": {
8037
+ "0": "the host runs the new revision, verified, and the deploy event is journalled (or the plan has no refusal)",
8038
+ "1": "refused before any change, or failed after the fast-forward with the host state named",
8039
+ "2": "bad usage"
8040
+ },
8041
+ "json": "starci/runtime-deploy@1",
8042
+ "examples": [
8043
+ "starci runtime deploy --from <clone> --plan",
8044
+ "starci runtime deploy --from <clone> --json",
8045
+ "starci runtime deploy --from main"
8046
+ ],
8047
+ "editions": [
8048
+ "full"
8049
+ ],
8050
+ "impl": {
8051
+ "module": "scripts/reconciler/runtime-deploy.mjs",
8052
+ "export": "runtimeDeploy"
8053
+ },
8054
+ "effect": "host",
8055
+ "roles": [
8056
+ "coordinator",
8057
+ "owner"
8058
+ ],
8059
+ "conventions": [
8060
+ "refuses unless the source is clean, a fast-forward of the host and its check and affected specs are proven by a receipt on that commit",
8061
+ "refuses while a release cut holds the host lock; waits for settles, Critic runs and prepared decisions in flight, stops none",
8062
+ "several commits are one revision change, with one fast-forward, installed artefacts migrated, one engine restart, then verified",
8063
+ "journals one runtime-deployed event; --plan prints every step and refusal and changes nothing",
8064
+ "a failed verification names the host state and the non-destructive way back (git revert of the range), never a reset"
8065
+ ],
8066
+ "runtimeSide": "host"
7597
8067
  },
7598
8068
  "derived-fields": {
7599
8069
  "summary": "regenerate or check the derived fields of the knowledge pattern files",
@@ -7625,7 +8095,9 @@ export const CATALOG = {
7625
8095
  ],
7626
8096
  "impl": {
7627
8097
  "script": "scripts/hfs/derived-fields.mjs"
7628
- }
8098
+ },
8099
+ "writesRuntimeTree": "write",
8100
+ "runtimeSide": "tree"
7629
8101
  },
7630
8102
  "doctor": {
7631
8103
  "summary": "verify installed payload, public entry custody and local runtime capabilities",
@@ -7654,7 +8126,8 @@ export const CATALOG = {
7654
8126
  "args": [
7655
8127
  "doctor"
7656
8128
  ]
7657
- }
8129
+ },
8130
+ "runtimeSide": "host"
7658
8131
  },
7659
8132
  "gen-catalog": {
7660
8133
  "summary": "write or check the generated CLI catalog outputs, docs and shell completions",
@@ -7679,7 +8152,7 @@ export const CATALOG = {
7679
8152
  "exit": {
7680
8153
  "0": "outputs in sync or written",
7681
8154
  "1": "drift listed or a catalog error",
7682
- "2": "neither --write nor --check given or bad usage"
8155
+ "2": "neither --write nor --check given, bad usage, or [RUNTIME_TREE_TARGET_FOREIGN]: the located runtime is not the tree that owns this CLI (set STARCI_RUNTIME or --root)"
7683
8156
  },
7684
8157
  "json": "none",
7685
8158
  "examples": [
@@ -7691,7 +8164,9 @@ export const CATALOG = {
7691
8164
  ],
7692
8165
  "impl": {
7693
8166
  "script": "scripts/cli/gen-catalog.mjs"
7694
- }
8167
+ },
8168
+ "writesRuntimeTree": "write",
8169
+ "runtimeSide": "tree"
7695
8170
  },
7696
8171
  "gen-ops": {
7697
8172
  "summary": "regenerate or check the generated operation registry",
@@ -7729,7 +8204,8 @@ export const CATALOG = {
7729
8204
  ],
7730
8205
  "impl": {
7731
8206
  "script": "scripts/route/build-ops-registry.mjs"
7732
- }
8207
+ },
8208
+ "runtimeSide": "tree"
7733
8209
  },
7734
8210
  "housekeeping": {
7735
8211
  "summary": "inspect or apply the host housekeeping sweeps",
@@ -7766,7 +8242,40 @@ export const CATALOG = {
7766
8242
  ],
7767
8243
  "impl": {
7768
8244
  "script": "scripts/housekeeping/housekeeping.mjs"
7769
- }
8245
+ },
8246
+ "runtimeSide": "host"
8247
+ },
8248
+ "import-held-secret": {
8249
+ "summary": "move one sealed member of the old tracked custody from git history into secret.env",
8250
+ "owner": "runtime",
8251
+ "flags": [
8252
+ {
8253
+ "name": "member",
8254
+ "type": "string",
8255
+ "summary": "the old tracked path of the member (the table of docs/host-secrets.md)"
8256
+ },
8257
+ {
8258
+ "name": "rev",
8259
+ "type": "string",
8260
+ "summary": "the revision that still holds the member; default the parent of the commit that deleted it"
8261
+ }
8262
+ ],
8263
+ "exit": {
8264
+ "0": "the variable was appended to secret.env",
8265
+ "1": "refused and nothing written",
8266
+ "2": "bad usage"
8267
+ },
8268
+ "json": "flag",
8269
+ "examples": [
8270
+ "starci runtime import-held-secret --member <member-path>"
8271
+ ],
8272
+ "editions": [
8273
+ "full"
8274
+ ],
8275
+ "impl": {
8276
+ "script": "scripts/gates/import-held-secret.mjs"
8277
+ },
8278
+ "runtimeSide": "host"
7770
8279
  },
7771
8280
  "install": {
7772
8281
  "summary": "install the StarCi runtime — fetch the pinned package, then init or update <cwd>/.claude",
@@ -7806,7 +8315,8 @@ export const CATALOG = {
7806
8315
  "args": [
7807
8316
  "init"
7808
8317
  ]
7809
- }
8318
+ },
8319
+ "runtimeSide": "host"
7810
8320
  },
7811
8321
  "ledger-hygiene": {
7812
8322
  "summary": "report orphan ledgers",
@@ -7833,7 +8343,8 @@ export const CATALOG = {
7833
8343
  ],
7834
8344
  "impl": {
7835
8345
  "script": "scripts/housekeeping/ledger-hygiene.mjs"
7836
- }
8346
+ },
8347
+ "runtimeSide": "host"
7837
8348
  },
7838
8349
  "link": {
7839
8350
  "summary": "point the per-user StarCi launcher at a live runtime checkout",
@@ -7860,7 +8371,8 @@ export const CATALOG = {
7860
8371
  ],
7861
8372
  "impl": {
7862
8373
  "script": "packages/cli/src/runtime-link.mjs"
7863
- }
8374
+ },
8375
+ "runtimeSide": "host"
7864
8376
  },
7865
8377
  "machine-db": {
7866
8378
  "summary": "inspect or maintain the host machine database",
@@ -7935,7 +8447,8 @@ export const CATALOG = {
7935
8447
  ],
7936
8448
  "impl": {
7937
8449
  "script": "engine/db/machine.mjs"
7938
- }
8450
+ },
8451
+ "runtimeSide": "host"
7939
8452
  },
7940
8453
  "owner-claims-audit": {
7941
8454
  "summary": "audit owner-decision claims and owner-gates in runtime ledgers",
@@ -7968,7 +8481,8 @@ export const CATALOG = {
7968
8481
  ],
7969
8482
  "impl": {
7970
8483
  "script": "scripts/housekeeping/owner-claims-audit.mjs"
7971
- }
8484
+ },
8485
+ "runtimeSide": "host"
7972
8486
  },
7973
8487
  "readme-blocks": {
7974
8488
  "summary": "regenerate or check the generated blocks of knowledge/hfs/README.md",
@@ -8000,7 +8514,47 @@ export const CATALOG = {
8000
8514
  ],
8001
8515
  "impl": {
8002
8516
  "script": "scripts/hfs/readme-blocks.mjs"
8003
- }
8517
+ },
8518
+ "writesRuntimeTree": "write",
8519
+ "runtimeSide": "tree"
8520
+ },
8521
+ "revision-scope": {
8522
+ "summary": "show what a deploy of the runtime tree asks of each role between two revisions",
8523
+ "owner": "runtime",
8524
+ "flags": [
8525
+ {
8526
+ "name": "from",
8527
+ "type": "string",
8528
+ "required": true,
8529
+ "summary": "the revision the seats stand at"
8530
+ },
8531
+ {
8532
+ "name": "to",
8533
+ "type": "string",
8534
+ "summary": "the revision to deploy; the HEAD of the runtime tree by default"
8535
+ },
8536
+ {
8537
+ "name": "root",
8538
+ "type": "string",
8539
+ "summary": "the runtime tree to read"
8540
+ }
8541
+ ],
8542
+ "exit": {
8543
+ "0": "scope printed",
8544
+ "2": "bad usage"
8545
+ },
8546
+ "json": "flag",
8547
+ "examples": [
8548
+ "starci runtime revision-scope --from <sha>",
8549
+ "starci runtime revision-scope --from <sha> --to <sha> --json"
8550
+ ],
8551
+ "editions": [
8552
+ "full"
8553
+ ],
8554
+ "impl": {
8555
+ "script": "scripts/reconciler/revision-scope-cli.mjs"
8556
+ },
8557
+ "runtimeSide": "tree"
8004
8558
  },
8005
8559
  "status": {
8006
8560
  "summary": "the runtime's version, tree root and manifest drift — a read-only summary",
@@ -8020,7 +8574,8 @@ export const CATALOG = {
8020
8574
  ],
8021
8575
  "impl": {
8022
8576
  "script": "scripts/cli/lib/runtime-status.mjs"
8023
- }
8577
+ },
8578
+ "runtimeSide": "host"
8024
8579
  },
8025
8580
  "update": {
8026
8581
  "summary": "bring an installed .claude tree to this package's payload version",
@@ -8059,7 +8614,8 @@ export const CATALOG = {
8059
8614
  "args": [
8060
8615
  "update"
8061
8616
  ]
8062
- }
8617
+ },
8618
+ "runtimeSide": "host"
8063
8619
  },
8064
8620
  "validate": {
8065
8621
  "summary": "read-only Work record/tree validation — structure, consistency, artifacts, schemas",
@@ -8097,7 +8653,59 @@ export const CATALOG = {
8097
8653
  ],
8098
8654
  "impl": {
8099
8655
  "script": "scripts/work/validate/work-validate.mjs"
8100
- }
8656
+ },
8657
+ "runtimeSide": "tree"
8658
+ },
8659
+ "verify": {
8660
+ "summary": "verify a committed revision - the check AND the affected specs on one commit, one receipt",
8661
+ "owner": "runtime",
8662
+ "positional": [],
8663
+ "flags": [
8664
+ {
8665
+ "name": "base",
8666
+ "type": "string",
8667
+ "summary": "ref to diff against (default: the merge-base with main, else origin/main)"
8668
+ },
8669
+ {
8670
+ "name": "root",
8671
+ "type": "string",
8672
+ "summary": "repository root (default: the command cwd)"
8673
+ }
8674
+ ],
8675
+ "exit": {
8676
+ "0": "verified: check and every affected spec passed on the exact commit, receipt written",
8677
+ "1": "NOT VERIFIED: dirty tree, no base, red check, or a red spec file",
8678
+ "2": "bad usage",
8679
+ "3": "PARTIAL: nothing red, the lane's own specs ran, some were not started inside the budget (fit to land, not to deploy)"
8680
+ },
8681
+ "json": "starci/runtime-verify@1",
8682
+ "examples": [
8683
+ "starci runtime verify --base <tip>",
8684
+ "starci runtime verify --json"
8685
+ ],
8686
+ "editions": [
8687
+ "full"
8688
+ ],
8689
+ "impl": {
8690
+ "module": "scripts/reconciler/runtime-verify.mjs",
8691
+ "export": "runtimeVerify"
8692
+ },
8693
+ "effect": "host",
8694
+ "roles": [
8695
+ "worker",
8696
+ "lead",
8697
+ "coordinator",
8698
+ "release",
8699
+ "owner"
8700
+ ],
8701
+ "conventions": [
8702
+ "A branch is verified only by this receipt: check N of N and affected specs N of N for base..tip, on the exact commit.",
8703
+ "A fix lane reports the last line of this verb, not the line of starci runtime check (which never runs a spec).",
8704
+ "Refuses a tree with uncommitted or untracked changes; the receipt binds a commit.",
8705
+ "starci git land accepts a partial receipt (0 failed, the lane's changed specs ran, not-started counted); deploy and release need all of them.",
8706
+ "A spec whose inputs are unchanged since a proven green run is reused; the receipt counts the reused files."
8707
+ ],
8708
+ "runtimeSide": "tree"
8101
8709
  },
8102
8710
  "version": {
8103
8711
  "summary": "print the runtime package version",
@@ -8119,7 +8727,8 @@ export const CATALOG = {
8119
8727
  "args": [
8120
8728
  "version"
8121
8729
  ]
8122
- }
8730
+ },
8731
+ "runtimeSide": "tree"
8123
8732
  }
8124
8733
  }
8125
8734
  },
@@ -8173,7 +8782,8 @@ export const CATALOG = {
8173
8782
  "scaffold, install, lint, typecheck, build and app check run sequentially under the host lock",
8174
8783
  "scratch output is link-safely removed unless --keep is given",
8175
8784
  "the smoke never starts Docker or Supabase and never opens port 3100"
8176
- ]
8785
+ ],
8786
+ "runtimeSide": "tree"
8177
8787
  }
8178
8788
  }
8179
8789
  },
@@ -8214,7 +8824,8 @@ export const CATALOG = {
8214
8824
  "never start a protected foreign stack or use ports 3000, 3100, 54320-54329 or 55321-55327",
8215
8825
  "secrets stay in sops and never appear in command output",
8216
8826
  "stop the project's stack when the work that needs it is done"
8217
- ]
8827
+ ],
8828
+ "runtimeSide": "host"
8218
8829
  },
8219
8830
  "status": {
8220
8831
  "summary": "show the app's Supabase endpoints and key names without secret values",
@@ -8249,7 +8860,8 @@ export const CATALOG = {
8249
8860
  "conventions": [
8250
8861
  "status reads only the project rooted at supabase/config.toml and never a protected foreign stack",
8251
8862
  "secret key names may be listed but their values never appear in text or JSON"
8252
- ]
8863
+ ],
8864
+ "runtimeSide": "host"
8253
8865
  },
8254
8866
  "stop": {
8255
8867
  "summary": "stop only the app's configured Supabase project",
@@ -8291,7 +8903,8 @@ export const CATALOG = {
8291
8903
  "never stop a protected foreign stack or another project's stack",
8292
8904
  "secrets stay in sops and never appear in command output",
8293
8905
  "stop the project's stack when the work that needs it is done"
8294
- ]
8906
+ ],
8907
+ "runtimeSide": "host"
8295
8908
  }
8296
8909
  }
8297
8910
  },
@@ -8372,7 +8985,8 @@ export const CATALOG = {
8372
8985
  ],
8373
8986
  "impl": {
8374
8987
  "script": "scripts/supervisor/actions.mjs"
8375
- }
8988
+ },
8989
+ "runtimeSide": "host"
8376
8990
  },
8377
8991
  "bridge": {
8378
8992
  "summary": "inspect and govern cross-workflow dependencies and shared ownership",
@@ -8547,7 +9161,8 @@ export const CATALOG = {
8547
9161
  ],
8548
9162
  "impl": {
8549
9163
  "script": "scripts/supervisor/bridge.mjs"
8550
- }
9164
+ },
9165
+ "runtimeSide": "host"
8551
9166
  },
8552
9167
  "channel": {
8553
9168
  "summary": "register, inspect, and answer the Supervisor owner-message channel",
@@ -8636,7 +9251,51 @@ export const CATALOG = {
8636
9251
  "lead",
8637
9252
  "coordinator",
8638
9253
  "owner"
8639
- ]
9254
+ ],
9255
+ "runtimeSide": "host"
9256
+ },
9257
+ "decide": {
9258
+ "summary": "answer one item of the Supervisor's menu with one typed choice",
9259
+ "owner": "runtime",
9260
+ "flags": [
9261
+ {
9262
+ "name": "item",
9263
+ "type": "string",
9264
+ "summary": "id of the open menu item, as starci supervisor status prints it"
9265
+ },
9266
+ {
9267
+ "name": "choice",
9268
+ "type": "string",
9269
+ "summary": "the choice of that item to take"
9270
+ },
9271
+ {
9272
+ "name": "reason",
9273
+ "type": "string",
9274
+ "summary": "why this choice, with the evidence: it is the record and the notice"
9275
+ },
9276
+ {
9277
+ "name": "text",
9278
+ "type": "string",
9279
+ "summary": "the input the choice names: a commit, a pool, a ruling, a workflow or a cause slug"
9280
+ }
9281
+ ],
9282
+ "exit": {
9283
+ "0": "the choice was executed and the item closed",
9284
+ "1": "the choice is not on the menu, an input is missing, or a step failed",
9285
+ "2": "bad usage"
9286
+ },
9287
+ "json": "flag",
9288
+ "examples": [
9289
+ "starci supervisor decide --item gate-ruling:<id> --choice not-runtime-fault --reason <evidence>",
9290
+ "starci supervisor decide --item workflow-conflict:<id> --choice rule --text <ruling> --reason <why>"
9291
+ ],
9292
+ "editions": [
9293
+ "full"
9294
+ ],
9295
+ "impl": {
9296
+ "script": "scripts/supervisor/decide.mjs"
9297
+ },
9298
+ "runtimeSide": "host"
8640
9299
  },
8641
9300
  "direct-commits": {
8642
9301
  "summary": "find runtime main commits that bypassed the exclusive land gate",
@@ -8663,7 +9322,8 @@ export const CATALOG = {
8663
9322
  ],
8664
9323
  "impl": {
8665
9324
  "script": "scripts/supervisor/direct-commits.mjs"
8666
- }
9325
+ },
9326
+ "runtimeSide": "host"
8667
9327
  },
8668
9328
  "gate-stability": {
8669
9329
  "summary": "compare explicitly selected current gates against accepted work in live workflows",
@@ -8716,7 +9376,8 @@ export const CATALOG = {
8716
9376
  ],
8717
9377
  "impl": {
8718
9378
  "script": "scripts/supervisor/gate-stability.mjs"
8719
- }
9379
+ },
9380
+ "runtimeSide": "host"
8720
9381
  },
8721
9382
  "gc": {
8722
9383
  "summary": "inspect or collect leftover workers, shells, lanes, temp data, leases, and logs",
@@ -8769,7 +9430,8 @@ export const CATALOG = {
8769
9430
  ],
8770
9431
  "impl": {
8771
9432
  "script": "scripts/supervisor/gc.mjs"
8772
- }
9433
+ },
9434
+ "runtimeSide": "host"
8773
9435
  },
8774
9436
  "land": {
8775
9437
  "summary": "run the in-runtime land gate; it fast-forwards local main and never pushes",
@@ -8810,6 +9472,11 @@ export const CATALOG = {
8810
9472
  "type": "boolean",
8811
9473
  "summary": "file the land outcome in the Supervisor inbox"
8812
9474
  },
9475
+ {
9476
+ "name": "foreground",
9477
+ "type": "boolean",
9478
+ "summary": "wait for the land in this process; without it the land runs in a detached child that outlives the caller's command window"
9479
+ },
8813
9480
  {
8814
9481
  "name": "status",
8815
9482
  "type": "boolean",
@@ -8842,7 +9509,8 @@ export const CATALOG = {
8842
9509
  "coordinator",
8843
9510
  "owner",
8844
9511
  "release"
8845
- ]
9512
+ ],
9513
+ "runtimeSide": "host"
8846
9514
  },
8847
9515
  "lesson-actions": {
8848
9516
  "summary": "land, revert, or propose changes from the Supervisor self-learning loop",
@@ -8947,7 +9615,8 @@ export const CATALOG = {
8947
9615
  ],
8948
9616
  "impl": {
8949
9617
  "script": "scripts/supervisor/lesson-actions.mjs"
8950
- }
9618
+ },
9619
+ "runtimeSide": "host"
8951
9620
  },
8952
9621
  "notify": {
8953
9622
  "summary": "deliver a durable Supervisor ruling to one workflow Kernel",
@@ -9001,7 +9670,8 @@ export const CATALOG = {
9001
9670
  ],
9002
9671
  "impl": {
9003
9672
  "script": "scripts/supervisor/notify.mjs"
9004
- }
9673
+ },
9674
+ "runtimeSide": "host"
9005
9675
  },
9006
9676
  "owed": {
9007
9677
  "summary": "inspect and acknowledge work that running workflows owe the Supervisor",
@@ -9071,7 +9741,8 @@ export const CATALOG = {
9071
9741
  ],
9072
9742
  "impl": {
9073
9743
  "script": "scripts/supervisor/owed.mjs"
9074
- }
9744
+ },
9745
+ "runtimeSide": "host"
9075
9746
  },
9076
9747
  "poll": {
9077
9748
  "summary": "stream or print a read-only Supervisor digest of workflow progress and blockers",
@@ -9118,7 +9789,8 @@ export const CATALOG = {
9118
9789
  ],
9119
9790
  "impl": {
9120
9791
  "script": "scripts/supervisor/poll.mjs"
9121
- }
9792
+ },
9793
+ "runtimeSide": "host"
9122
9794
  },
9123
9795
  "push": {
9124
9796
  "summary": "run full repository suites and push clean main branches",
@@ -9151,7 +9823,8 @@ export const CATALOG = {
9151
9823
  ],
9152
9824
  "impl": {
9153
9825
  "script": "scripts/supervisor/push-git.mjs"
9154
- }
9826
+ },
9827
+ "runtimeSide": "host"
9155
9828
  },
9156
9829
  "push-mains": {
9157
9830
  "summary": "scan and push main for the configured product repositories (not the runtime)",
@@ -9189,7 +9862,8 @@ export const CATALOG = {
9189
9862
  ],
9190
9863
  "impl": {
9191
9864
  "script": "scripts/supervisor/push-mains.mjs"
9192
- }
9865
+ },
9866
+ "runtimeSide": "host"
9193
9867
  },
9194
9868
  "ram-cap": {
9195
9869
  "summary": "inspect or override RAM-aware workflow dispatch priorities",
@@ -9244,7 +9918,8 @@ export const CATALOG = {
9244
9918
  ],
9245
9919
  "impl": {
9246
9920
  "script": "scripts/supervisor/ram-cap.mjs"
9247
- }
9921
+ },
9922
+ "runtimeSide": "host"
9248
9923
  },
9249
9924
  "report": {
9250
9925
  "summary": "render or send the owner's detailed workflow progress report",
@@ -9277,7 +9952,51 @@ export const CATALOG = {
9277
9952
  ],
9278
9953
  "impl": {
9279
9954
  "script": "scripts/supervisor/progress-report.mjs"
9280
- }
9955
+ },
9956
+ "runtimeSide": "host"
9957
+ },
9958
+ "revision-ack": {
9959
+ "summary": "read the files a runtime revision change sends to the Supervisor and attest them",
9960
+ "owner": "runtime",
9961
+ "flags": [
9962
+ {
9963
+ "name": "plan",
9964
+ "type": "boolean",
9965
+ "summary": "return the files this revision change sends to the Supervisor, with their hashes, without acknowledging"
9966
+ },
9967
+ {
9968
+ "name": "rev",
9969
+ "type": "string",
9970
+ "summary": "exact current Git SHA of the runtime revision the plan names"
9971
+ },
9972
+ {
9973
+ "name": "digest",
9974
+ "type": "string",
9975
+ "summary": "the readToken --plan returned, after every file it lists was read (no file needed)"
9976
+ },
9977
+ {
9978
+ "name": "read-manifest",
9979
+ "type": "string",
9980
+ "summary": "regular JSON file holding the exact manifest --plan returned, after every file in it was read"
9981
+ }
9982
+ ],
9983
+ "exit": {
9984
+ "0": "planned or acknowledged",
9985
+ "1": "refused",
9986
+ "2": "bad usage: --plan, or --rev with --read-manifest"
9987
+ },
9988
+ "json": "flag",
9989
+ "examples": [
9990
+ "starci supervisor revision-ack --plan",
9991
+ "starci supervisor revision-ack --rev <rev> --read-manifest <file>"
9992
+ ],
9993
+ "editions": [
9994
+ "full"
9995
+ ],
9996
+ "impl": {
9997
+ "script": "scripts/supervisor/revision-ack.mjs"
9998
+ },
9999
+ "runtimeSide": "host"
9281
10000
  },
9282
10001
  "start": {
9283
10002
  "summary": "enable and start the one long-lived Supervisor seat",
@@ -9310,29 +10029,49 @@ export const CATALOG = {
9310
10029
  ],
9311
10030
  "impl": {
9312
10031
  "script": "scripts/supervisor/start-supervisor.mjs"
9313
- }
10032
+ },
10033
+ "internalFlags": [
10034
+ {
10035
+ "name": "replace",
10036
+ "pointer": "the watchdog replaces a dead seat itself; to reload the standing prompt run starci supervisor stop, then starci supervisor start"
10037
+ },
10038
+ {
10039
+ "name": "rotate",
10040
+ "pointer": "the watchdog rotates an idle Supervisor itself (scripts/supervisor/supervisor-rotation.mjs); to reload the standing prompt run starci supervisor stop, then starci supervisor start"
10041
+ },
10042
+ {
10043
+ "name": "restart",
10044
+ "pointer": "run starci supervisor stop, then starci supervisor start"
10045
+ }
10046
+ ],
10047
+ "runtimeSide": "host"
9314
10048
  },
9315
10049
  "status": {
9316
- "summary": "print whether the Supervisor seat is enabled and healthy",
10050
+ "summary": "print the Supervisor seat status and its menu of open judgment points",
9317
10051
  "owner": "runtime",
9318
- "flags": [],
10052
+ "flags": [
10053
+ {
10054
+ "name": "menu",
10055
+ "type": "boolean",
10056
+ "summary": "print only the menu of open items and the spelling of the decision verb"
10057
+ }
10058
+ ],
9319
10059
  "exit": {
9320
10060
  "0": "status printed",
9321
10061
  "2": "bad usage"
9322
10062
  },
9323
10063
  "json": "flag",
9324
10064
  "examples": [
9325
- "starci supervisor status"
10065
+ "starci supervisor status",
10066
+ "starci supervisor status --json"
9326
10067
  ],
9327
10068
  "editions": [
9328
10069
  "full"
9329
10070
  ],
9330
10071
  "impl": {
9331
- "script": "scripts/supervisor/start-supervisor.mjs",
9332
- "args": [
9333
- "--status"
9334
- ]
9335
- }
10072
+ "script": "scripts/supervisor/status.mjs"
10073
+ },
10074
+ "runtimeSide": "host"
9336
10075
  },
9337
10076
  "stop": {
9338
10077
  "summary": "disable the Supervisor seat, stop its worker and release it",
@@ -9355,7 +10094,8 @@ export const CATALOG = {
9355
10094
  "args": [
9356
10095
  "--stop"
9357
10096
  ]
9358
- }
10097
+ },
10098
+ "runtimeSide": "host"
9359
10099
  },
9360
10100
  "telegram-bridge": {
9361
10101
  "summary": "start, run, inspect, or stop the Supervisor Telegram bridge",
@@ -9390,7 +10130,8 @@ export const CATALOG = {
9390
10130
  ],
9391
10131
  "impl": {
9392
10132
  "script": "scripts/supervisor/telegram-bridge.mjs"
9393
- }
10133
+ },
10134
+ "runtimeSide": "host"
9394
10135
  },
9395
10136
  "tell": {
9396
10137
  "summary": "send a desktop message to the Supervisor or read its recent replies",
@@ -9450,7 +10191,8 @@ export const CATALOG = {
9450
10191
  "lead",
9451
10192
  "coordinator",
9452
10193
  "owner"
9453
- ]
10194
+ ],
10195
+ "runtimeSide": "host"
9454
10196
  },
9455
10197
  "watchdog": {
9456
10198
  "summary": "run one reconciler-owned Supervisor seat liveness pass",
@@ -9478,7 +10220,18 @@ export const CATALOG = {
9478
10220
  ],
9479
10221
  "impl": {
9480
10222
  "script": "scripts/supervisor/supervisor-watchdog.mjs"
9481
- }
10223
+ },
10224
+ "internalFlags": [
10225
+ {
10226
+ "name": "replace",
10227
+ "pointer": "the pass replaces a dead seat itself; to reload the standing prompt run starci supervisor stop, then starci supervisor start"
10228
+ },
10229
+ {
10230
+ "name": "restart",
10231
+ "pointer": "run starci supervisor stop, then starci supervisor start"
10232
+ }
10233
+ ],
10234
+ "runtimeSide": "host"
9482
10235
  },
9483
10236
  "workers": {
9484
10237
  "summary": "create, launch, inspect, report, and clean up Supervisor repair workers",
@@ -9621,7 +10374,8 @@ export const CATALOG = {
9621
10374
  ],
9622
10375
  "impl": {
9623
10376
  "script": "scripts/supervisor/workers.mjs"
9624
- }
10377
+ },
10378
+ "runtimeSide": "host"
9625
10379
  }
9626
10380
  }
9627
10381
  },
@@ -9661,7 +10415,8 @@ export const CATALOG = {
9661
10415
  ],
9662
10416
  "conventions": [
9663
10417
  "only the runtime-owned harness app, harness tunnel and reconciler tasks are listed"
9664
- ]
10418
+ ],
10419
+ "runtimeSide": "host"
9665
10420
  },
9666
10421
  "register": {
9667
10422
  "summary": "print or apply one runtime scheduled-task registration",
@@ -9714,42 +10469,131 @@ export const CATALOG = {
9714
10469
  "registration is idempotent, per-user and limited-privilege; it never needs administrator rights",
9715
10470
  "task actions invoke starci through the current user's .starci/bin shim (starci runtime link writes it)",
9716
10471
  "harness-app runs starci harness start; its Windows task name is statusApp.task of modules/models/runtimes.yaml, the name the reconciler restarts"
9717
- ]
10472
+ ],
10473
+ "runtimeSide": "host"
9718
10474
  },
9719
10475
  "show": {
9720
10476
  "summary": "show state, runs, result and action for one runtime scheduled task",
9721
10477
  "owner": "runtime",
9722
10478
  "positional": [
9723
10479
  {
9724
- "name": "name",
9725
- "enum": [
9726
- "harness-app",
9727
- "harness-tunnel",
9728
- "reconciler"
9729
- ],
9730
- "required": true,
9731
- "variadic": false
10480
+ "name": "name",
10481
+ "enum": [
10482
+ "harness-app",
10483
+ "harness-tunnel",
10484
+ "reconciler"
10485
+ ],
10486
+ "required": true,
10487
+ "variadic": false
10488
+ }
10489
+ ],
10490
+ "flags": [],
10491
+ "exit": {
10492
+ "0": "task details listed",
10493
+ "1": "Task Scheduler could not be read",
10494
+ "2": "bad usage or unknown task name"
10495
+ },
10496
+ "json": "starci/task-show@1",
10497
+ "examples": [
10498
+ "starci task show reconciler",
10499
+ "starci task show harness-tunnel --json"
10500
+ ],
10501
+ "editions": [
10502
+ "full"
10503
+ ],
10504
+ "impl": {
10505
+ "module": "scripts/machine/task-verbs.mjs",
10506
+ "export": "taskShow"
10507
+ },
10508
+ "effect": "read",
10509
+ "roles": [
10510
+ "worker",
10511
+ "lead",
10512
+ "coordinator",
10513
+ "release",
10514
+ "owner"
10515
+ ],
10516
+ "conventions": [
10517
+ "names select only the runtime-owned harness app, harness tunnel and reconciler tasks"
10518
+ ],
10519
+ "runtimeSide": "host"
10520
+ }
10521
+ }
10522
+ },
10523
+ "test": {
10524
+ "summary": "run the bounded L1-L4 test ladder without accidental whole-suite work",
10525
+ "owner": "runtime",
10526
+ "verbs": {
10527
+ "affected": {
10528
+ "summary": "the specs related to the changed functions (--by file: every importer); --run runs each once",
10529
+ "owner": "runtime",
10530
+ "positional": [],
10531
+ "flags": [
10532
+ {
10533
+ "name": "base",
10534
+ "type": "string",
10535
+ "summary": "ref to diff against (default: the merge-base with main, else origin/main)"
10536
+ },
10537
+ {
10538
+ "name": "changed",
10539
+ "type": "list",
10540
+ "summary": "explicit changed repository paths instead of the diff"
10541
+ },
10542
+ {
10543
+ "name": "by",
10544
+ "type": "string",
10545
+ "summary": "symbol (default: the specs related to the changed functions) or file (every spec importing a changed file)"
10546
+ },
10547
+ {
10548
+ "name": "run",
10549
+ "type": "boolean",
10550
+ "summary": "run the selected spec files, one per process, inside the time budget"
10551
+ },
10552
+ {
10553
+ "name": "plan",
10554
+ "type": "boolean",
10555
+ "summary": "print the selected files with the reason each is in the set; run nothing"
10556
+ },
10557
+ {
10558
+ "name": "receipt-file",
10559
+ "type": "string",
10560
+ "summary": "with --run, write the receipt to this file; the answer carries its path (a gate reads the file, not the output)"
10561
+ },
10562
+ {
10563
+ "name": "no-cache",
10564
+ "type": "boolean",
10565
+ "summary": "run every selected file; ignore the per-spec result cache"
10566
+ },
10567
+ {
10568
+ "name": "concurrency",
10569
+ "type": "number",
10570
+ "summary": "override automatic file concurrency with a positive integer"
10571
+ },
10572
+ {
10573
+ "name": "root",
10574
+ "type": "string",
10575
+ "summary": "repository root (default: the command cwd)"
9732
10576
  }
9733
10577
  ],
9734
- "flags": [],
9735
10578
  "exit": {
9736
- "0": "task details listed",
9737
- "1": "Task Scheduler could not be read",
9738
- "2": "bad usage or unknown task name"
10579
+ "0": "selection printed, or every selected file passed",
10580
+ "1": "a selected spec file was red",
10581
+ "2": "no base to diff against, or the time budget ended before every selected file started"
9739
10582
  },
9740
- "json": "starci/task-show@1",
10583
+ "json": "starci/test-affected@1",
9741
10584
  "examples": [
9742
- "starci task show reconciler",
9743
- "starci task show harness-tunnel --json"
10585
+ "starci test affected",
10586
+ "starci test affected --run",
10587
+ "starci test affected --changed scripts/machine/ladder-test.mjs --run"
9744
10588
  ],
9745
10589
  "editions": [
9746
10590
  "full"
9747
10591
  ],
9748
10592
  "impl": {
9749
- "module": "scripts/machine/task-verbs.mjs",
9750
- "export": "taskShow"
10593
+ "module": "scripts/supervisor/affected-test.mjs",
10594
+ "export": "testAffected"
9751
10595
  },
9752
- "effect": "read",
10596
+ "effect": "host",
9753
10597
  "roles": [
9754
10598
  "worker",
9755
10599
  "lead",
@@ -9758,15 +10602,20 @@ export const CATALOG = {
9758
10602
  "owner"
9759
10603
  ],
9760
10604
  "conventions": [
9761
- "names select only the runtime-owned harness app, harness tunnel and reconciler tasks"
9762
- ]
9763
- }
9764
- }
9765
- },
9766
- "test": {
9767
- "summary": "run the bounded L1-L4 test ladder without accidental whole-suite work",
9768
- "owner": "runtime",
9769
- "verbs": {
10605
+ "Everyday verification after npm run check; the whole suite is the merged-tree run and the release cut.",
10606
+ "The set is computed - each changed .mjs symbol is followed by name through its importers, callers and CLI verbs.",
10607
+ "What cannot be followed by name (yaml, templates, load-time statements, no base, the depth bound) keeps the file-level rule, named in the report.",
10608
+ "Selection and --plan JSON carry every symbol, its specs and reasons, and file-level fallbacks; the set is never larger than --by file.",
10609
+ "A --run machine answer carries the complete selected set, every result and the receipt; the diagnostic graph remains available through --plan.",
10610
+ "A large set is never refused; it runs in parallel shards inside the printed time budget, and files not started when it ends are listed.",
10611
+ "The --plan flag prints each selected file with the reason it is in the set; a --run answer carries a receipt (base, tip, passed, total) a gate can require.",
10612
+ "A generated output maps to its generator's specs; an append-only change to a data file to the specs that name it or its readers.",
10613
+ "A red file is fixed and run again, then the affected set once; never the whole suite.",
10614
+ "A spec whose key (import closure, data it names, runner) is unchanged since a green run is reused; the receipt counts reused files; --no-cache runs all.",
10615
+ "Each file is its own low-priority node process with the four preloads, at the concurrency of test-concurrency.yaml."
10616
+ ],
10617
+ "runtimeSide": "tree"
10618
+ },
9770
10619
  "run": {
9771
10620
  "summary": "run the specs selected for one local ladder level",
9772
10621
  "owner": "runtime",
@@ -9849,7 +10698,8 @@ export const CATALOG = {
9849
10698
  "A red L2 or L3 selection is re-run once serially; a green re-run is recorded as a flake, never skipped.",
9850
10699
  "File concurrency uses fresh idle CPU and free RAM under modules/supervisor/test-concurrency.yaml; --concurrency overrides it.",
9851
10700
  "The result and spec log retain the concurrency decision and host measurements."
9852
- ]
10701
+ ],
10702
+ "runtimeSide": "tree"
9853
10703
  }
9854
10704
  }
9855
10705
  },
@@ -9915,7 +10765,8 @@ export const CATALOG = {
9915
10765
  "Use L1 while working, L2 before asking for a land, and L3 when an IO slot changed.",
9916
10766
  "L1 checks projects holding changed files, L2 and L3 check affected projects, and L4 checks every project.",
9917
10767
  "Runtime JavaScript uses node --check; product TypeScript always uses tsc --noEmit through the Node API owner."
9918
- ]
10768
+ ],
10769
+ "runtimeSide": "tree"
9919
10770
  }
9920
10771
  }
9921
10772
  },
@@ -9990,16 +10841,18 @@ export const CATALOG = {
9990
10841
  ],
9991
10842
  "impl": {
9992
10843
  "script": "scripts/uat/assisted-runner.mjs"
9993
- }
10844
+ },
10845
+ "runtimeSide": "host"
9994
10846
  },
9995
10847
  "slots": {
9996
- "summary": "inspect UAT slots or run a command while holding one",
10848
+ "summary": "inspect UAT slots, end the ones whose lessee is gone, or run a command while holding one",
9997
10849
  "owner": "runtime",
9998
10850
  "positional": [
9999
10851
  {
10000
10852
  "name": "action",
10001
10853
  "enum": [
10002
10854
  "status",
10855
+ "collect",
10003
10856
  "run"
10004
10857
  ],
10005
10858
  "required": true,
@@ -10012,6 +10865,11 @@ export const CATALOG = {
10012
10865
  }
10013
10866
  ],
10014
10867
  "flags": [
10868
+ {
10869
+ "name": "dry-run",
10870
+ "type": "boolean",
10871
+ "summary": "collect only lists the slots it would end"
10872
+ },
10015
10873
  {
10016
10874
  "name": "record-dir",
10017
10875
  "type": "string",
@@ -10027,6 +10885,7 @@ export const CATALOG = {
10027
10885
  "json": "none",
10028
10886
  "examples": [
10029
10887
  "starci uat slots status",
10888
+ "starci uat slots collect --dry-run",
10030
10889
  "starci uat slots run --record-dir <dir> -- npm test"
10031
10890
  ],
10032
10891
  "editions": [
@@ -10034,7 +10893,8 @@ export const CATALOG = {
10034
10893
  ],
10035
10894
  "impl": {
10036
10895
  "script": "scripts/uat/uat-slots.mjs"
10037
- }
10896
+ },
10897
+ "runtimeSide": "host"
10038
10898
  }
10039
10899
  }
10040
10900
  },
@@ -10077,7 +10937,8 @@ export const CATALOG = {
10077
10937
  ],
10078
10938
  "impl": {
10079
10939
  "script": "scripts/work/asset-slot.mjs"
10080
- }
10940
+ },
10941
+ "runtimeSide": "host"
10081
10942
  },
10082
10943
  "brand": {
10083
10944
  "summary": "derive or verify the canonical brand Work record",
@@ -10125,7 +10986,8 @@ export const CATALOG = {
10125
10986
  ],
10126
10987
  "impl": {
10127
10988
  "script": "scripts/work/brand/brand.mjs"
10128
- }
10989
+ },
10990
+ "runtimeSide": "host"
10129
10991
  },
10130
10992
  "brand-direction": {
10131
10993
  "summary": "inspect, ask for, or apply owner review of a brand direction",
@@ -10189,7 +11051,8 @@ export const CATALOG = {
10189
11051
  ],
10190
11052
  "impl": {
10191
11053
  "script": "scripts/work/brand-direction.mjs"
10192
- }
11054
+ },
11055
+ "runtimeSide": "host"
10193
11056
  },
10194
11057
  "brand-palette": {
10195
11058
  "summary": "emit a brand palette prompt or check rendered images against it",
@@ -10230,7 +11093,8 @@ export const CATALOG = {
10230
11093
  ],
10231
11094
  "impl": {
10232
11095
  "script": "scripts/work/brand/brand-palette.mjs"
10233
- }
11096
+ },
11097
+ "runtimeSide": "host"
10234
11098
  },
10235
11099
  "check-example-work": {
10236
11100
  "summary": "check the layout, ids, refs and evidence of every example Work tree",
@@ -10250,7 +11114,8 @@ export const CATALOG = {
10250
11114
  ],
10251
11115
  "impl": {
10252
11116
  "script": "scripts/work/validate/check-example-work.mjs"
10253
- }
11117
+ },
11118
+ "runtimeSide": "host"
10254
11119
  },
10255
11120
  "compose-direction": {
10256
11121
  "summary": "place drawn content into its measured page or overlay shell",
@@ -10351,7 +11216,74 @@ export const CATALOG = {
10351
11216
  ],
10352
11217
  "impl": {
10353
11218
  "script": "scripts/work/compose-direction.mjs"
10354
- }
11219
+ },
11220
+ "runtimeSide": "host"
11221
+ },
11222
+ "decision-critic": {
11223
+ "summary": "judge a decision leg with the Critic and write a verdict (debug aid; settle ignores it)",
11224
+ "owner": "runtime",
11225
+ "flags": [
11226
+ {
11227
+ "name": "kind",
11228
+ "type": "enum",
11229
+ "enum": [
11230
+ "scope.define",
11231
+ "business.decide",
11232
+ "architecture.decide"
11233
+ ],
11234
+ "required": true,
11235
+ "summary": "the decision leg whose records are judged"
11236
+ },
11237
+ {
11238
+ "name": "root",
11239
+ "type": "string",
11240
+ "required": true,
11241
+ "summary": "the work root (.starciwork) or the repository that holds it"
11242
+ },
11243
+ {
11244
+ "name": "out",
11245
+ "type": "string",
11246
+ "required": true,
11247
+ "summary": "the verdict file to write (for a person to read; the settle never reads it)"
11248
+ },
11249
+ {
11250
+ "name": "records",
11251
+ "type": "string",
11252
+ "summary": "comma-separated decision record files or directories to judge; default every decision record of the kind under the work root"
11253
+ },
11254
+ {
11255
+ "name": "input",
11256
+ "type": "string",
11257
+ "summary": "comma-separated extra input files the decision rests on, such as the goal or request text"
11258
+ },
11259
+ {
11260
+ "name": "maker",
11261
+ "type": "string",
11262
+ "summary": "provider that made the records; default the provider of the op running this verb"
11263
+ },
11264
+ {
11265
+ "name": "json",
11266
+ "type": "boolean",
11267
+ "summary": "print the outcome as JSON"
11268
+ }
11269
+ ],
11270
+ "exit": {
11271
+ "0": "judged and the verdict passes",
11272
+ "1": "judged and the verdict fails - fix every failed check and run it again",
11273
+ "2": "bad usage",
11274
+ "3": "no verdict - a Critic hold; report blocked with the CRITIC_ code"
11275
+ },
11276
+ "json": "flag",
11277
+ "examples": [
11278
+ "starci work decision-critic --kind scope.define --root <app> --out <STARCI_JOB_SCRATCH>/critic-verdict.json"
11279
+ ],
11280
+ "editions": [
11281
+ "full"
11282
+ ],
11283
+ "impl": {
11284
+ "script": "scripts/work/decision-critic.mjs"
11285
+ },
11286
+ "runtimeSide": "host"
10355
11287
  },
10356
11288
  "draw-acceptance": {
10357
11289
  "summary": "verify that drawn assets are accepted render shapes",
@@ -10388,7 +11320,8 @@ export const CATALOG = {
10388
11320
  ],
10389
11321
  "impl": {
10390
11322
  "script": "scripts/work/draw/draw-acceptance.mjs"
10391
- }
11323
+ },
11324
+ "runtimeSide": "host"
10392
11325
  },
10393
11326
  "draw-dna": {
10394
11327
  "summary": "compare a rendered drawing with grammar DNA",
@@ -10427,7 +11360,8 @@ export const CATALOG = {
10427
11360
  ],
10428
11361
  "impl": {
10429
11362
  "script": "scripts/work/draw/draw-dna.mjs"
10430
- }
11363
+ },
11364
+ "runtimeSide": "host"
10431
11365
  },
10432
11366
  "draw-feedback": {
10433
11367
  "summary": "build, inspect, check, or classify drawing feedback",
@@ -10518,7 +11452,8 @@ export const CATALOG = {
10518
11452
  ],
10519
11453
  "impl": {
10520
11454
  "script": "scripts/work/draw-feedback.mjs"
10521
- }
11455
+ },
11456
+ "runtimeSide": "host"
10522
11457
  },
10523
11458
  "draw-gates": {
10524
11459
  "summary": "run machine and owner gates for a drawn UI record",
@@ -10566,7 +11501,8 @@ export const CATALOG = {
10566
11501
  ],
10567
11502
  "impl": {
10568
11503
  "script": "scripts/work/draw-gates.mjs"
10569
- }
11504
+ },
11505
+ "runtimeSide": "host"
10570
11506
  },
10571
11507
  "draw-grammar": {
10572
11508
  "summary": "resolve the grammar package used by a drawing",
@@ -10614,7 +11550,8 @@ export const CATALOG = {
10614
11550
  ],
10615
11551
  "impl": {
10616
11552
  "script": "scripts/work/draw-grammar.mjs"
10617
- }
11553
+ },
11554
+ "runtimeSide": "host"
10618
11555
  },
10619
11556
  "draw-layer": {
10620
11557
  "summary": "verify that drawings are isolated content layers",
@@ -10647,7 +11584,8 @@ export const CATALOG = {
10647
11584
  ],
10648
11585
  "impl": {
10649
11586
  "script": "scripts/work/draw/draw-layer.mjs"
10650
- }
11587
+ },
11588
+ "runtimeSide": "host"
10651
11589
  },
10652
11590
  "draw-loop": {
10653
11591
  "summary": "render, score, inspect, finish, or verify an iterative drawing loop",
@@ -10787,7 +11725,8 @@ export const CATALOG = {
10787
11725
  ],
10788
11726
  "impl": {
10789
11727
  "script": "scripts/work/draw-loop.mjs"
10790
- }
11728
+ },
11729
+ "runtimeSide": "host"
10791
11730
  },
10792
11731
  "draw-rationale": {
10793
11732
  "summary": "verify the rationale bound to a rendered drawing",
@@ -10830,7 +11769,8 @@ export const CATALOG = {
10830
11769
  ],
10831
11770
  "impl": {
10832
11771
  "script": "scripts/work/draw/draw-rationale.mjs"
10833
- }
11772
+ },
11773
+ "runtimeSide": "host"
10834
11774
  },
10835
11775
  "draw-render": {
10836
11776
  "summary": "render HTML or a drawing component at declared viewports",
@@ -10954,7 +11894,8 @@ export const CATALOG = {
10954
11894
  ],
10955
11895
  "impl": {
10956
11896
  "script": "scripts/work/draw-render.mjs"
10957
- }
11897
+ },
11898
+ "runtimeSide": "host"
10958
11899
  },
10959
11900
  "draw-review": {
10960
11901
  "summary": "inspect, ask for, or apply owner review of a drawing",
@@ -11023,7 +11964,8 @@ export const CATALOG = {
11023
11964
  ],
11024
11965
  "impl": {
11025
11966
  "script": "scripts/work/draw-review.mjs"
11026
- }
11967
+ },
11968
+ "runtimeSide": "host"
11027
11969
  },
11028
11970
  "draw-source": {
11029
11971
  "summary": "validate a drawing source and its fixture bindings",
@@ -11082,7 +12024,8 @@ export const CATALOG = {
11082
12024
  ],
11083
12025
  "impl": {
11084
12026
  "script": "scripts/work/draw/draw-source.mjs"
11085
- }
12027
+ },
12028
+ "runtimeSide": "host"
11086
12029
  },
11087
12030
  "draw-taste": {
11088
12031
  "summary": "check a rendered drawing against visual taste rules",
@@ -11114,7 +12057,8 @@ export const CATALOG = {
11114
12057
  ],
11115
12058
  "impl": {
11116
12059
  "script": "scripts/work/draw/draw-taste.mjs"
11117
- }
12060
+ },
12061
+ "runtimeSide": "host"
11118
12062
  },
11119
12063
  "evidence-binding": {
11120
12064
  "summary": "prove that every done leaf's evidence still binds to the source it claims",
@@ -11141,7 +12085,8 @@ export const CATALOG = {
11141
12085
  ],
11142
12086
  "impl": {
11143
12087
  "script": "scripts/work/validate/check-evidence-binding.mjs"
11144
- }
12088
+ },
12089
+ "runtimeSide": "host"
11145
12090
  },
11146
12091
  "example-critique": {
11147
12092
  "summary": "derive example critique records from a Work tree",
@@ -11173,7 +12118,8 @@ export const CATALOG = {
11173
12118
  ],
11174
12119
  "impl": {
11175
12120
  "script": "scripts/example/example-critique.mjs"
11176
- }
12121
+ },
12122
+ "runtimeSide": "host"
11177
12123
  },
11178
12124
  "example-derive": {
11179
12125
  "summary": "derive example catalog artifacts from a Work tree",
@@ -11205,7 +12151,8 @@ export const CATALOG = {
11205
12151
  ],
11206
12152
  "impl": {
11207
12153
  "script": "scripts/example/example-derive.mjs"
11208
- }
12154
+ },
12155
+ "runtimeSide": "host"
11209
12156
  },
11210
12157
  "example-evidence": {
11211
12158
  "summary": "collect evidence for one example Work record",
@@ -11250,7 +12197,8 @@ export const CATALOG = {
11250
12197
  ],
11251
12198
  "impl": {
11252
12199
  "script": "scripts/example/example-evidence.mjs"
11253
- }
12200
+ },
12201
+ "runtimeSide": "host"
11254
12202
  },
11255
12203
  "example-verify": {
11256
12204
  "summary": "replay and verify evidence for one example Work record",
@@ -11289,7 +12237,8 @@ export const CATALOG = {
11289
12237
  ],
11290
12238
  "impl": {
11291
12239
  "script": "scripts/example/example-verify.mjs"
11292
- }
12240
+ },
12241
+ "runtimeSide": "host"
11293
12242
  },
11294
12243
  "grammar-geometry": {
11295
12244
  "summary": "emit grammar geometry guidance or check captured geometry",
@@ -11337,7 +12286,8 @@ export const CATALOG = {
11337
12286
  ],
11338
12287
  "impl": {
11339
12288
  "script": "scripts/work/ui/grammar-geometry.mjs"
11340
- }
12289
+ },
12290
+ "runtimeSide": "host"
11341
12291
  },
11342
12292
  "grammar-knowledge": {
11343
12293
  "summary": "compare or refresh measured grammar knowledge",
@@ -11363,7 +12313,8 @@ export const CATALOG = {
11363
12313
  ],
11364
12314
  "impl": {
11365
12315
  "script": "scripts/work/ui/grammar-knowledge.mjs"
11366
- }
12316
+ },
12317
+ "runtimeSide": "host"
11367
12318
  },
11368
12319
  "grammar-proposal": {
11369
12320
  "summary": "list or check grammar proposals in Work records",
@@ -11400,7 +12351,8 @@ export const CATALOG = {
11400
12351
  ],
11401
12352
  "impl": {
11402
12353
  "script": "scripts/work/grammar-proposal.mjs"
11403
- }
12354
+ },
12355
+ "runtimeSide": "host"
11404
12356
  },
11405
12357
  "grammar-registry-pin": {
11406
12358
  "summary": "check a frontend grammar dependency against the registry pin",
@@ -11427,7 +12379,8 @@ export const CATALOG = {
11427
12379
  ],
11428
12380
  "impl": {
11429
12381
  "script": "scripts/work/ui/grammar-registry-pin.mjs"
11430
- }
12382
+ },
12383
+ "runtimeSide": "host"
11431
12384
  },
11432
12385
  "graph": {
11433
12386
  "summary": "inspect, validate, diff or propose a workflow work graph",
@@ -11508,7 +12461,8 @@ export const CATALOG = {
11508
12461
  ],
11509
12462
  "impl": {
11510
12463
  "script": "scripts/work/work-graph.mjs"
11511
- }
12464
+ },
12465
+ "runtimeSide": "host"
11512
12466
  },
11513
12467
  "hygiene": {
11514
12468
  "summary": "parse, scope-validate and secret-check Work and stack files before they are committed",
@@ -11551,7 +12505,8 @@ export const CATALOG = {
11551
12505
  ],
11552
12506
  "impl": {
11553
12507
  "script": "scripts/work/validate/work-hygiene.mjs"
11554
- }
12508
+ },
12509
+ "runtimeSide": "host"
11555
12510
  },
11556
12511
  "imagegen": {
11557
12512
  "summary": "generate images headlessly on the imagegen call tier and write them with a receipt",
@@ -11611,7 +12566,80 @@ export const CATALOG = {
11611
12566
  ],
11612
12567
  "impl": {
11613
12568
  "script": "scripts/work/imagegen.mjs"
11614
- }
12569
+ },
12570
+ "runtimeSide": "host"
12571
+ },
12572
+ "layout-render": {
12573
+ "summary": "serve the product app and capture one layout in a real browser with its page slot keyed",
12574
+ "owner": "runtime",
12575
+ "flags": [
12576
+ {
12577
+ "name": "work",
12578
+ "type": "string",
12579
+ "summary": "the .starciwork root that holds the shell record"
12580
+ },
12581
+ {
12582
+ "name": "node",
12583
+ "type": "string",
12584
+ "summary": "layout node id to render"
12585
+ },
12586
+ {
12587
+ "name": "breakpoint",
12588
+ "type": "string",
12589
+ "summary": "breakpoint of the capture"
12590
+ },
12591
+ {
12592
+ "name": "theme",
12593
+ "type": "string",
12594
+ "summary": "theme of the capture"
12595
+ },
12596
+ {
12597
+ "name": "app",
12598
+ "type": "string",
12599
+ "summary": "app name when the shell has several apps"
12600
+ },
12601
+ {
12602
+ "name": "route",
12603
+ "type": "string",
12604
+ "summary": "path to load; default the node's url with the locale filled by the product locale"
12605
+ },
12606
+ {
12607
+ "name": "locale",
12608
+ "type": "string",
12609
+ "summary": "locale that fills the locale segment of the route"
12610
+ },
12611
+ {
12612
+ "name": "slot",
12613
+ "type": "string",
12614
+ "summary": "CSS selector of the page slot, exactly one match; default main"
12615
+ },
12616
+ {
12617
+ "name": "out",
12618
+ "type": "string",
12619
+ "summary": "directory for the capture and the server log; default a temp directory"
12620
+ },
12621
+ {
12622
+ "name": "write",
12623
+ "type": "boolean",
12624
+ "summary": "record the capture in the layout tree as layout-tree capture does"
12625
+ }
12626
+ ],
12627
+ "exit": {
12628
+ "0": "rendered",
12629
+ "1": "no render could be produced: code SHELL_RENDER_UNAVAILABLE with a typed cause, the failing URL and the redirect chain",
12630
+ "2": "bad usage"
12631
+ },
12632
+ "json": "flag",
12633
+ "examples": [
12634
+ "starci work layout-render --work .starciwork --node \"/[locale]\" --breakpoint desktop --theme light --write --json"
12635
+ ],
12636
+ "editions": [
12637
+ "full"
12638
+ ],
12639
+ "impl": {
12640
+ "script": "scripts/work/layout-render.mjs"
12641
+ },
12642
+ "runtimeSide": "host"
11615
12643
  },
11616
12644
  "layout-tree": {
11617
12645
  "summary": "scan, capture, plan, lock, or inspect a product layout tree",
@@ -11759,7 +12787,8 @@ export const CATALOG = {
11759
12787
  ],
11760
12788
  "impl": {
11761
12789
  "script": "scripts/work/layout-tree.mjs"
11762
- }
12790
+ },
12791
+ "runtimeSide": "host"
11763
12792
  },
11764
12793
  "render-proof": {
11765
12794
  "summary": "render a proof document for one Work record",
@@ -11792,7 +12821,8 @@ export const CATALOG = {
11792
12821
  ],
11793
12822
  "impl": {
11794
12823
  "script": "scripts/work/render-proof.mjs"
11795
- }
12824
+ },
12825
+ "runtimeSide": "host"
11796
12826
  },
11797
12827
  "shell-conformance": {
11798
12828
  "summary": "check Work and implementation records against the measured frontend shell",
@@ -11819,7 +12849,8 @@ export const CATALOG = {
11819
12849
  ],
11820
12850
  "impl": {
11821
12851
  "script": "scripts/work/ui/shell-conformance.mjs"
11822
- }
12852
+ },
12853
+ "runtimeSide": "host"
11823
12854
  },
11824
12855
  "ui-proof-brief": {
11825
12856
  "summary": "emit a UI proof brief or score a rendered surface",
@@ -11872,7 +12903,8 @@ export const CATALOG = {
11872
12903
  ],
11873
12904
  "impl": {
11874
12905
  "script": "scripts/work/ui/ui-proof-brief.mjs"
11875
- }
12906
+ },
12907
+ "runtimeSide": "host"
11876
12908
  }
11877
12909
  }
11878
12910
  },
@@ -11929,7 +12961,8 @@ export const CATALOG = {
11929
12961
  "always finish a worker with starci worker close; release alone is not complete cleanup",
11930
12962
  "--stop-first requires positive caller knowledge that the Dispatch is still working",
11931
12963
  "success requires release, terminal-close and process-exit proof"
11932
- ]
12964
+ ],
12965
+ "runtimeSide": "host"
11933
12966
  },
11934
12967
  "list": {
11935
12968
  "summary": "list supervised workers or working-agent counts by worktree lane",
@@ -11985,7 +13018,8 @@ export const CATALOG = {
11985
13018
  ],
11986
13019
  "conventions": [
11987
13020
  "use --by-lane to see how many agents of each type work in each worktree"
11988
- ]
13021
+ ],
13022
+ "runtimeSide": "host"
11989
13023
  },
11990
13024
  "read": {
11991
13025
  "summary": "read a bounded tail of one supervised worker's output",
@@ -12032,7 +13066,8 @@ export const CATALOG = {
12032
13066
  ],
12033
13067
  "conventions": [
12034
13068
  "read by Dispatch id so Orca can use the exact transcript or its labelled terminal fallback"
12035
- ]
13069
+ ],
13070
+ "runtimeSide": "host"
12036
13071
  },
12037
13072
  "release": {
12038
13073
  "summary": "release settled Orca worker accounting without claiming full cleanup",
@@ -12071,7 +13106,8 @@ export const CATALOG = {
12071
13106
  "conventions": [
12072
13107
  "release is retained for lifecycle recovery; normal completion always uses starci worker close",
12073
13108
  "release alone can leave an agent terminal and process running"
12074
- ]
13109
+ ],
13110
+ "runtimeSide": "host"
12075
13111
  },
12076
13112
  "show": {
12077
13113
  "summary": "show one supervised worker and Orca's exact liveness observation",
@@ -12111,7 +13147,8 @@ export const CATALOG = {
12111
13147
  ],
12112
13148
  "conventions": [
12113
13149
  "address a worker by Dispatch id, never by its terminal title"
12114
- ]
13150
+ ],
13151
+ "runtimeSide": "host"
12115
13152
  },
12116
13153
  "start": {
12117
13154
  "summary": "start one supervised agent in a registered worktree in an Orca run",
@@ -12188,7 +13225,8 @@ export const CATALOG = {
12188
13225
  "stagger starts by about 30 seconds and assign one Codex worker to each disjoint chunk",
12189
13226
  "create the caller Run in this same terminal before starting its workers",
12190
13227
  "always finish the worker with starci worker close; release alone is not complete cleanup"
12191
- ]
13228
+ ],
13229
+ "runtimeSide": "host"
12192
13230
  },
12193
13231
  "stop": {
12194
13232
  "summary": "stop a supervised worker that Orca still reports as working",
@@ -12226,7 +13264,8 @@ export const CATALOG = {
12226
13264
  ],
12227
13265
  "conventions": [
12228
13266
  "stop only a working Dispatch; finish cleanup with starci worker close"
12229
- ]
13267
+ ],
13268
+ "runtimeSide": "host"
12230
13269
  }
12231
13270
  }
12232
13271
  },
@@ -12257,7 +13296,8 @@ export const CATALOG = {
12257
13296
  ],
12258
13297
  "impl": {
12259
13298
  "script": "scripts/goal/assess.mjs"
12260
- }
13299
+ },
13300
+ "runtimeSide": "host"
12261
13301
  },
12262
13302
  "bias": {
12263
13303
  "summary": "normalize a routing bias or extract one from the owner's text",
@@ -12290,7 +13330,8 @@ export const CATALOG = {
12290
13330
  ],
12291
13331
  "impl": {
12292
13332
  "script": "scripts/agent/bias.mjs"
12293
- }
13333
+ },
13334
+ "runtimeSide": "host"
12294
13335
  },
12295
13336
  "custody": {
12296
13337
  "summary": "show a workflow tree against its branch and preserved work; --apply moves it onto them",
@@ -12310,7 +13351,7 @@ export const CATALOG = {
12310
13351
  {
12311
13352
  "name": "apply",
12312
13353
  "type": "boolean",
12313
- "summary": "move a tree that is behind its branch onto it (its own work preserved), or make a missing one at the branch; refused while an op is in flight"
13354
+ "summary": "move a tree that is behind its branch onto it (its own work preserved), or make a missing one at the branch; refused while an op has a live worker; the admitted attempts whose tree path was lost are rebound to the tree or ended placement-lost"
12314
13355
  }
12315
13356
  ],
12316
13357
  "exit": {
@@ -12328,7 +13369,8 @@ export const CATALOG = {
12328
13369
  ],
12329
13370
  "impl": {
12330
13371
  "script": "scripts/kernel/workflow-custody-cli.mjs"
12331
- }
13372
+ },
13373
+ "runtimeSide": "host"
12332
13374
  },
12333
13375
  "define": {
12334
13376
  "summary": "define a goal — assess the prompt, plan the op chain, queue it in the ledger inbox",
@@ -12426,7 +13468,75 @@ export const CATALOG = {
12426
13468
  ],
12427
13469
  "impl": {
12428
13470
  "script": "scripts/goal/define-goal.mjs"
12429
- }
13471
+ },
13472
+ "runtimeSide": "host"
13473
+ },
13474
+ "purge": {
13475
+ "summary": "remove what an archived workflow left on the host (plan by default)",
13476
+ "owner": "runtime",
13477
+ "flags": [
13478
+ {
13479
+ "name": "repo",
13480
+ "type": "string",
13481
+ "summary": "repository whose .starciwork ledger holds the workflow (default: the working directory)"
13482
+ },
13483
+ {
13484
+ "name": "workflow",
13485
+ "type": "string",
13486
+ "required": true,
13487
+ "summary": "the workflow_id of an archived workflow"
13488
+ },
13489
+ {
13490
+ "name": "plan",
13491
+ "type": "boolean",
13492
+ "summary": "print what would be removed and change nothing (the default)"
13493
+ },
13494
+ {
13495
+ "name": "apply",
13496
+ "type": "boolean",
13497
+ "summary": "remove the planned set"
13498
+ },
13499
+ {
13500
+ "name": "ledger",
13501
+ "type": "boolean",
13502
+ "summary": "also archive the workflow's ledger rows to a verified zip and drop them"
13503
+ },
13504
+ {
13505
+ "name": "expect",
13506
+ "type": "string",
13507
+ "summary": "with --apply, refuse unless the plan still starts with this sha (12 characters or more)"
13508
+ }
13509
+ ],
13510
+ "exit": {
13511
+ "0": "plan printed, or the purge finished (or was already done)",
13512
+ "1": "a precondition refused it, or a step failed and the purge can be resumed",
13513
+ "2": "bad usage"
13514
+ },
13515
+ "json": "flag",
13516
+ "examples": [
13517
+ "starci workflow purge --repo <repo> --workflow <id>",
13518
+ "starci workflow purge --repo <repo> --workflow <id> --apply --expect <sha>"
13519
+ ],
13520
+ "editions": [
13521
+ "full"
13522
+ ],
13523
+ "impl": {
13524
+ "module": "scripts/kernel/workflow-purge.mjs",
13525
+ "export": "workflowPurge"
13526
+ },
13527
+ "effect": "host",
13528
+ "roles": [
13529
+ "owner"
13530
+ ],
13531
+ "conventions": [
13532
+ "the plan is the default and changes nothing; --apply acts, under the host lock and the gc lock",
13533
+ "only an archived workflow with no live job, lease, seat or worker is purged; Orca must answer",
13534
+ "trees, refs, workers and terminals go through the worktree home, the git api and worker-close; never a raw recursive delete",
13535
+ "a branch is deleted only with its proof (registry row, or name grammar with a tip in main or on the workflow's checkpoint chain); the plan prints every tip",
13536
+ "what the ledger or Orca cannot tie to the workflow by evidence is listed and never touched",
13537
+ "the ledger rows are kept unless --ledger archives them to a verified zip and drops them"
13538
+ ],
13539
+ "runtimeSide": "host"
12430
13540
  },
12431
13541
  "start": {
12432
13542
  "summary": "ensure the host, then claim an approved goal and boot its Kernel",
@@ -12480,7 +13590,8 @@ export const CATALOG = {
12480
13590
  ],
12481
13591
  "impl": {
12482
13592
  "script": "scripts/kernel/start-workflow.mjs"
12483
- }
13593
+ },
13594
+ "runtimeSide": "host"
12484
13595
  },
12485
13596
  "status": {
12486
13597
  "summary": "the workflow projection — phase, frontier, leases and pending owner asks",
@@ -12515,7 +13626,8 @@ export const CATALOG = {
12515
13626
  "args": [
12516
13627
  "status"
12517
13628
  ]
12518
- }
13629
+ },
13630
+ "runtimeSide": "host"
12519
13631
  },
12520
13632
  "stop": {
12521
13633
  "summary": "stop a workflow — archive it, drop open jobs and retire its asks (the owner stop)",
@@ -12566,7 +13678,8 @@ export const CATALOG = {
12566
13678
  "args": [
12567
13679
  "archive"
12568
13680
  ]
12569
- }
13681
+ },
13682
+ "runtimeSide": "host"
12570
13683
  }
12571
13684
  }
12572
13685
  }