@azure-id/orc 1.0.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +84 -34
  3. package/bin/cli.js +1110 -0
  4. package/bin/verify-contracts.js +112 -1
  5. package/bin/verify-package.js +568 -563
  6. package/bin/webui/api.js +15 -0
  7. package/bin/webui/app.html +210 -207
  8. package/bin/webui/css/panels/wait.css +123 -0
  9. package/bin/webui/fixtures/index.js +7 -0
  10. package/bin/webui/fixtures/wait.js +97 -0
  11. package/bin/webui/i18n/en/nav.json +21 -20
  12. package/bin/webui/i18n/en/wait.json +41 -0
  13. package/bin/webui/i18n/id/nav.json +21 -20
  14. package/bin/webui/i18n/id/wait.json +41 -0
  15. package/bin/webui/js/01-i18n.js +151 -150
  16. package/bin/webui/js/panels/wait.js +253 -0
  17. package/package.json +1 -1
  18. package/templates/commands/orc-wait.md +19 -0
  19. package/templates/hooks/orc-statusline.js +227 -1
  20. package/templates/skills/_shared/phases/execution.md +2 -0
  21. package/templates/skills/_shared/phases/preflight.md +22 -0
  22. package/templates/skills/_shared/return-validation.md +222 -145
  23. package/templates/skills/_shared/wait.md +240 -0
  24. package/templates/skills/orc/SKILL.md +247 -238
  25. package/templates/skills/orc-aftermath/SKILL.md +6 -1
  26. package/templates/skills/orc-analyze/SKILL.md +6 -1
  27. package/templates/skills/orc-boundary/SKILL.md +6 -1
  28. package/templates/skills/orc-brainstorm/SKILL.md +6 -1
  29. package/templates/skills/orc-budget/SKILL.md +6 -1
  30. package/templates/skills/orc-challenge/SKILL.md +6 -1
  31. package/templates/skills/orc-claude/SKILL.md +6 -1
  32. package/templates/skills/orc-diy/SKILL.md +6 -1
  33. package/templates/skills/orc-doc/SKILL.md +490 -481
  34. package/templates/skills/orc-explain/SKILL.md +5 -0
  35. package/templates/skills/orc-export/SKILL.md +5 -0
  36. package/templates/skills/orc-fast/SKILL.md +222 -215
  37. package/templates/skills/orc-grill/SKILL.md +6 -1
  38. package/templates/skills/orc-learn/SKILL.md +6 -1
  39. package/templates/skills/orc-mini/SKILL.md +252 -244
  40. package/templates/skills/orc-pact/SKILL.md +6 -1
  41. package/templates/skills/orc-pattern/SKILL.md +6 -1
  42. package/templates/skills/orc-poly/SKILL.md +6 -1
  43. package/templates/skills/orc-quick/SKILL.md +353 -346
  44. package/templates/skills/orc-retro/SKILL.md +6 -1
  45. package/templates/skills/orc-route/SKILL.md +6 -1
  46. package/templates/skills/orc-verify/SKILL.md +6 -1
  47. package/templates/skills/orc-wait/SKILL.md +163 -0
  48. package/templates/skills/orc-wiki/SKILL.md +180 -171
@@ -384,6 +384,43 @@ const CONTRACTS = [
384
384
  binFiles: ["bin/cli.js"],
385
385
  files: ["skills/_shared/extra-dispatch.md"],
386
386
  },
387
+ {
388
+ // v1.2.0. A Task error does not kill the subagent behind it. Every lane's
389
+ // retry rule assumed it did, and one graded /orc-quick entry put THREE
390
+ // opus-5-low executors on one task for 266 minutes combined. The guard is
391
+ // only real if every lane that re-dispatches carries the same sentence and
392
+ // the CLI keeps the command it names.
393
+ name: "a re-dispatch is refused over a live attempt (v1.2.0)",
394
+ token: "a lane that re-dispatches over a live attempt",
395
+ binFiles: ["bin/cli.js"],
396
+ files: [
397
+ "skills/_shared/return-validation.md",
398
+ "skills/_shared/phases/execution.md",
399
+ "skills/orc/SKILL.md",
400
+ "skills/orc-doc/SKILL.md",
401
+ "skills/orc-wiki/SKILL.md",
402
+ "skills/orc-quick/SKILL.md",
403
+ "skills/orc-mini/SKILL.md",
404
+ "skills/orc-fast/SKILL.md",
405
+ ],
406
+ },
407
+ {
408
+ // The command the contract above names. A rename on either side silently
409
+ // turns the guard into prose nobody can run.
410
+ name: "the in-flight read is ONE command (v1.2.0)",
411
+ token: "orc run inflight",
412
+ binFiles: ["bin/cli.js"],
413
+ files: [
414
+ "skills/_shared/return-validation.md",
415
+ "skills/_shared/phases/execution.md",
416
+ "skills/orc/SKILL.md",
417
+ "skills/orc-doc/SKILL.md",
418
+ "skills/orc-wiki/SKILL.md",
419
+ "skills/orc-quick/SKILL.md",
420
+ "skills/orc-mini/SKILL.md",
421
+ "skills/orc-fast/SKILL.md",
422
+ ],
423
+ },
387
424
  {
388
425
  // The field a resumed return owes. Absent on a resume slice is MALFORMED,
389
426
  // and `restarted` on a non-empty preexisting[] is a finding — both are
@@ -438,6 +475,65 @@ const CONTRACTS = [
438
475
  binFiles: ["bin/cli.js"],
439
476
  files: ["skills/_shared/extra-dispatch.md"],
440
477
  },
478
+ {
479
+ // v1.1.0 W1 — THE WAIT. A wait is a stop, and every stop in ORC writes its
480
+ // hand-back before it ends, because the thing that resumes the run may not
481
+ // be this session: the wake-up message is a Claude Code behaviour ORC
482
+ // cannot promise. Registered as the eighth member of the family with
483
+ // `a lane that answers its own interview question`, `a lane that picks its
484
+ // own favourite`, `a lane that fixes what it judged`, `a lane that picks
485
+ // its own council`, `a lane that reads its own document`, `a lane that
486
+ // sends work off Claude without saying so` and `a lane that re-does work
487
+ // the worktree already contains`.
488
+ //
489
+ // W3 adds every lane spine in WAIT_LANE_SHAPES to `files` — the token plus
490
+ // a pointer, never a forked copy of the prose.
491
+ name: "a wait is a stop, and a stop writes its hand-back (v1.1.0)",
492
+ token: "a lane that waits without a hand-back",
493
+ files: [
494
+ "commands/orc-wait.md",
495
+ "skills/_shared/wait.md",
496
+ "skills/orc-wait/SKILL.md",
497
+ // v1.1.0 W3 — EVERY lane in WAIT_LANE_SHAPES, in one release. A wait
498
+ // whose behaviour depends on which lane you are in is worse than no wait,
499
+ // so a half-rolled-out contract was never an option. /orc-ultra and
500
+ // /orc-plan are covered by skills/orc/SKILL.md — neither has a spine.
501
+ "skills/orc/SKILL.md",
502
+ "skills/orc-aftermath/SKILL.md",
503
+ "skills/orc-analyze/SKILL.md",
504
+ "skills/orc-boundary/SKILL.md",
505
+ "skills/orc-brainstorm/SKILL.md",
506
+ "skills/orc-budget/SKILL.md",
507
+ "skills/orc-challenge/SKILL.md",
508
+ "skills/orc-claude/SKILL.md",
509
+ "skills/orc-diy/SKILL.md",
510
+ "skills/orc-doc/SKILL.md",
511
+ "skills/orc-explain/SKILL.md",
512
+ "skills/orc-export/SKILL.md",
513
+ "skills/orc-fast/SKILL.md",
514
+ "skills/orc-grill/SKILL.md",
515
+ "skills/orc-learn/SKILL.md",
516
+ "skills/orc-mini/SKILL.md",
517
+ "skills/orc-pact/SKILL.md",
518
+ "skills/orc-pattern/SKILL.md",
519
+ "skills/orc-poly/SKILL.md",
520
+ "skills/orc-quick/SKILL.md",
521
+ "skills/orc-retro/SKILL.md",
522
+ "skills/orc-route/SKILL.md",
523
+ "skills/orc-verify/SKILL.md",
524
+ "skills/orc-wiki/SKILL.md",
525
+ ],
526
+ },
527
+ {
528
+ // v1.1.0 W1 — the lane table is CODE, not only prose. Same shape and same
529
+ // reason as the `orc extra` row below it: `WAIT_LANE_SHAPES` in bin/cli.js
530
+ // is the machine-readable copy, and a golden test in test/cli/wait.test.js
531
+ // compares the two IN BOTH DIRECTIONS.
532
+ name: "the wait lane table is CODE, not only prose (v1.1.0)",
533
+ token: "Which lanes support a wait",
534
+ binFiles: ["bin/cli.js"],
535
+ files: ["skills/_shared/wait.md"],
536
+ },
441
537
  {
442
538
  // v0.52.0 (D6) — WHICH LANES ROUTE FOREIGN. The table was prose in one
443
539
  // markdown file and nothing computed it, so the routing table could say
@@ -1295,6 +1391,9 @@ const CONTRACTS = [
1295
1391
  "commands/orc-brainstorm.md",
1296
1392
  "skills/_shared/README.md",
1297
1393
  "skills/_shared/lane-suspend.md",
1394
+ // v1.1.0: wait.md contrasts itself with BOTH leaving shapes in one table.
1395
+ // If a suspend's obligations change, that table is wrong.
1396
+ "skills/_shared/wait.md",
1298
1397
  "skills/orc-brainstorm/SKILL.md",
1299
1398
  "skills/orc-challenge/references/intake.md",
1300
1399
  "skills/orc-doc/SKILL.md",
@@ -1355,6 +1454,10 @@ const CONTRACTS = [
1355
1454
  // {run_dir}/{slug}/, and is deleted with the run. A move of one is a move
1356
1455
  // of the other.
1357
1456
  "skills/_shared/extra-dispatch.md",
1457
+ // v1.1.0 — a wait is a stop, so it owes the same hand-back. The whole
1458
+ // contract token `a lane that waits without a hand-back` rests on this.
1459
+ "skills/_shared/wait.md",
1460
+ "skills/orc-wait/SKILL.md",
1358
1461
  "skills/orc-challenge/SKILL.md",
1359
1462
  "skills/orc-challenge/examples/tsd-two-iterations.md",
1360
1463
  "skills/orc-challenge/references/fix-brief.md",
@@ -1425,6 +1528,9 @@ const CONTRACTS = [
1425
1528
  // v0.45.0: lane-suspend.md defines itself AGAINST this contract — leaving
1426
1529
  // and returning vs leaving for good. Naming the sibling is the point.
1427
1530
  "skills/_shared/lane-suspend.md",
1531
+ // v1.1.0: and wait.md against BOTH of them — a third shape, where nothing
1532
+ // runs at all.
1533
+ "skills/_shared/wait.md",
1428
1534
  ],
1429
1535
  },
1430
1536
  {
@@ -3274,7 +3380,7 @@ const BUDGETS = [
3274
3380
  // 4 of 31 lanes. The shrinking in this release happens by moving prose to
3275
3381
  // `_shared/phases/` (W11–W13) or to a lane's own `references/phases/`, which
3276
3382
  // is what orc-wiki did this wave: 352 → 172.
3277
- { file: "skills/orc-mini/SKILL.md", maxLines: 250 },
3383
+ { file: "skills/orc-mini/SKILL.md", maxLines: 253 },
3278
3384
  // v0.39.0: deliberate raises 195→201 / 179→182 — the analyst gains hard rules
3279
3385
  // 2b (a source it did not author is FOREIGN input) and 4a (the read ladder);
3280
3386
  // fast gains the ladder as a slice line. Both are hard rules by nature: they
@@ -3506,6 +3612,11 @@ for (const b of BUDGETS) {
3506
3612
  "extra_resume_max",
3507
3613
  "extra_demote_after",
3508
3614
  "extra_demote_stale_min",
3615
+ // v1.1.0 — operating keys of the WAIT itself. A lane runs `orc wait plan`
3616
+ // and the CLI reads these two; no spine ever reads them, exactly as no
3617
+ // spine reads `extra_timeout_s`. An empty lanes[] here is an ANSWER.
3618
+ "wait_hop_minutes",
3619
+ "wait_max_hops",
3509
3620
  ]);
3510
3621
  for (const e of metaEntries) {
3511
3622
  if (!e.lanes) {