@azure-id/orc 0.56.0 → 1.0.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 (153) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/README-id.md +143 -53
  3. package/README.md +124 -103
  4. package/bin/build-agents.js +18 -11
  5. package/bin/cli.js +4139 -315
  6. package/bin/onboarding-content.js +0 -3
  7. package/bin/test-run.js +491 -0
  8. package/bin/verify-contracts.js +4256 -3277
  9. package/bin/verify-package.js +563 -498
  10. package/bin/webui/api.js +1186 -1163
  11. package/bin/webui/app.html +9 -0
  12. package/bin/webui/css/06-responsive.css +120 -108
  13. package/bin/webui/css/panels/extra.css +29 -0
  14. package/bin/webui/css/panels/lanes.css +134 -0
  15. package/bin/webui/css/panels/settings.css +79 -3
  16. package/bin/webui/fixtures/extra.js +2036 -1934
  17. package/bin/webui/fixtures/flow.js +2 -2
  18. package/bin/webui/fixtures/index.js +503 -486
  19. package/bin/webui/fixtures/lanes.js +218 -0
  20. package/bin/webui/fixtures/settings.js +261 -34
  21. package/bin/webui/fixtures/stats.js +3 -3
  22. package/bin/webui/i18n/TERMS.md +135 -134
  23. package/bin/webui/i18n/en/extra.json +345 -313
  24. package/bin/webui/i18n/en/lanes.json +29 -0
  25. package/bin/webui/i18n/en/nav.json +1 -0
  26. package/bin/webui/i18n/en/overview.json +2 -0
  27. package/bin/webui/i18n/en/settings.json +16 -5
  28. package/bin/webui/i18n/id/extra.json +345 -313
  29. package/bin/webui/i18n/id/lanes.json +29 -0
  30. package/bin/webui/i18n/id/nav.json +1 -0
  31. package/bin/webui/i18n/id/overview.json +2 -0
  32. package/bin/webui/i18n/id/settings.json +15 -4
  33. package/bin/webui/js/01-i18n.js +1 -0
  34. package/bin/webui/js/panels/extra.js +3199 -3011
  35. package/bin/webui/js/panels/lanes.js +259 -0
  36. package/bin/webui/js/panels/overview.js +10 -0
  37. package/bin/webui/js/panels/settings.js +149 -3
  38. package/package.json +3 -3
  39. package/templates/agents/MODEL-MAPPING.md +23 -35
  40. package/templates/agents/orc-executor-opus-4-7-high.md +1 -1
  41. package/templates/agents/orc-executor-opus-4-7-med.md +1 -1
  42. package/templates/agents/orc-executor-opus-4-8-high.md +1 -1
  43. package/templates/agents/orc-executor-opus-5-high.md +1 -1
  44. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  45. package/templates/agents/orc-executor-opus-5-med.md +1 -1
  46. package/templates/agents/orc-retro-opus-5-med.md +73 -73
  47. package/templates/agents/orc-retro-sonnet-5-high.md +72 -72
  48. package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -107
  49. package/templates/commands/orc-route.md +1 -1
  50. package/templates/commands/orc.md +1 -1
  51. package/templates/skills/_shared/README.md +7 -3
  52. package/templates/skills/_shared/config-precedence.md +198 -0
  53. package/templates/skills/_shared/drift-recovery.md +1 -1
  54. package/templates/skills/_shared/extra-dispatch.md +292 -6
  55. package/templates/skills/_shared/interview.md +1 -1
  56. package/templates/skills/_shared/opus5-only.md +9 -7
  57. package/templates/skills/_shared/phases/README.md +82 -0
  58. package/templates/skills/{orc/references → _shared/phases}/analyst-gates.md +15 -3
  59. package/templates/skills/_shared/phases/execution.md +143 -0
  60. package/templates/skills/{orc/references → _shared/phases}/house-rules.md +13 -1
  61. package/templates/skills/{orc/references → _shared/phases}/intake.md +15 -2
  62. package/templates/skills/_shared/phases/mock-example.md +56 -0
  63. package/templates/skills/{orc/references → _shared/phases}/plan-handoff.md +16 -3
  64. package/templates/skills/_shared/phases/planning.md +135 -0
  65. package/templates/skills/_shared/phases/preflight.md +76 -0
  66. package/templates/skills/_shared/phases/review.md +53 -0
  67. package/templates/skills/_shared/phases/scoring.md +65 -0
  68. package/templates/skills/{orc/references → _shared/phases}/security-checklist.md +12 -1
  69. package/templates/skills/_shared/phases/security.md +55 -0
  70. package/templates/skills/_shared/phases/ship.md +88 -0
  71. package/templates/skills/{orc/references/stop-and-resume.md → _shared/phases/stop-resume.md} +169 -160
  72. package/templates/skills/_shared/phases/summary.md +48 -0
  73. package/templates/skills/_shared/phases/testgen.md +51 -0
  74. package/templates/skills/{orc/references/trace-protocol.md → _shared/phases/trace.md} +49 -6
  75. package/templates/skills/_shared/phases/verify.md +70 -0
  76. package/templates/skills/{orc/references → _shared/phases}/wave-grouping.md +14 -2
  77. package/templates/skills/{orc/references → _shared/phases}/wiki-consult.md +13 -1
  78. package/templates/skills/_shared/read-ladder.md +48 -0
  79. package/templates/skills/context-combiner/SKILL.md +214 -187
  80. package/templates/skills/orc/README.md +148 -150
  81. package/templates/skills/orc/SKILL.md +70 -358
  82. package/templates/skills/orc/config.md +137 -389
  83. package/templates/skills/orc/examples/full-run-mock.md +1 -1
  84. package/templates/skills/orc/references/effort-and-mode.md +16 -18
  85. package/templates/skills/orc/references/phases/intake.md +47 -0
  86. package/templates/skills/orc/references/phases/integration.md +19 -0
  87. package/templates/skills/orc/references/preflight-report.md +4 -4
  88. package/templates/skills/orc/references/ultra-mode.md +117 -123
  89. package/templates/skills/orc/schemas/planning-output.md +279 -279
  90. package/templates/skills/orc/subskills/orc-planner/SKILL.md +260 -264
  91. package/templates/skills/orc/subskills/orc-pr/stack-gate.md +4 -1
  92. package/templates/skills/orc-aftermath/SKILL.md +153 -136
  93. package/templates/skills/orc-analyze/SKILL.md +247 -220
  94. package/templates/skills/orc-analyze/references/branching.md +51 -51
  95. package/templates/skills/orc-analyze/references/thin-input.md +1 -1
  96. package/templates/skills/orc-analyze-mini/SKILL.md +128 -112
  97. package/templates/skills/orc-boundary/SKILL.md +244 -208
  98. package/templates/skills/orc-brainstorm/SKILL.md +372 -339
  99. package/templates/skills/orc-budget/SKILL.md +243 -225
  100. package/templates/skills/orc-challenge/README.md +1 -1
  101. package/templates/skills/orc-challenge/SKILL.md +293 -255
  102. package/templates/skills/orc-challenge/examples/council-full-roster.md +1 -1
  103. package/templates/skills/orc-claude/SKILL.md +216 -199
  104. package/templates/skills/orc-diy/README.md +2 -1
  105. package/templates/skills/orc-diy/SKILL.md +129 -70
  106. package/templates/skills/orc-diy/references/blocks/analyze.md +1 -1
  107. package/templates/skills/orc-diy/references/compile.md +21 -7
  108. package/templates/skills/orc-diy/references/flow-schema.md +2 -2
  109. package/templates/skills/orc-doc/SKILL.md +44 -7
  110. package/templates/skills/orc-explain/SKILL.md +19 -0
  111. package/templates/skills/orc-export/SKILL.md +26 -5
  112. package/templates/skills/orc-fast/SKILL.md +215 -187
  113. package/templates/skills/orc-grill/SKILL.md +233 -207
  114. package/templates/skills/orc-handoff/SKILL.md +223 -204
  115. package/templates/skills/orc-learn/SKILL.md +176 -156
  116. package/templates/skills/orc-mini/SKILL.md +41 -23
  117. package/templates/skills/orc-pact/SKILL.md +250 -218
  118. package/templates/skills/orc-pattern/SKILL.md +149 -124
  119. package/templates/skills/orc-poly/SKILL.md +237 -216
  120. package/templates/skills/orc-poly/references/gather.md +1 -1
  121. package/templates/skills/orc-pr-driver/SKILL.md +196 -167
  122. package/templates/skills/orc-pr-driver/references/orc-run-split.md +1 -1
  123. package/templates/skills/orc-pr-setup/SKILL.md +212 -184
  124. package/templates/skills/orc-quick/README.md +2 -2
  125. package/templates/skills/orc-quick/SKILL.md +346 -313
  126. package/templates/skills/orc-quick/references/dispatch-gate.md +12 -4
  127. package/templates/skills/orc-retro/SKILL.md +244 -222
  128. package/templates/skills/orc-retro/examples/retro-mock.md +171 -171
  129. package/templates/skills/orc-route/SKILL.md +183 -165
  130. package/templates/skills/orc-verify/SKILL.md +100 -86
  131. package/templates/skills/orc-wiki/SKILL.md +55 -206
  132. package/templates/skills/orc-wiki/references/phases/phase-0.md +71 -0
  133. package/templates/skills/orc-wiki/references/phases/phase-1.md +35 -0
  134. package/templates/skills/orc-wiki/references/phases/phase-2.md +52 -0
  135. package/templates/skills/orc-wiki/references/phases/phase-3.md +57 -0
  136. package/templates/skills/orc-wiki/references/phases/phase-3c.md +36 -0
  137. package/templates/agents/orc-advisor-fable-5.md +0 -50
  138. package/templates/agents/orc-analyst-fable-5.md +0 -115
  139. package/templates/agents/orc-judge-fable-5.md +0 -79
  140. package/templates/agents/orc-planner-fable-5.md +0 -152
  141. package/templates/agents/orc-reviewer-fable-5.md +0 -57
  142. package/templates/skills/_shared/fable5-override.md +0 -56
  143. package/templates/skills/orc-diy/references/blocks/execution.md +0 -42
  144. package/templates/skills/orc-diy/references/blocks/mock-example.md +0 -22
  145. package/templates/skills/orc-diy/references/blocks/planning.md +0 -34
  146. package/templates/skills/orc-diy/references/blocks/review.md +0 -18
  147. package/templates/skills/orc-diy/references/blocks/scoring.md +0 -16
  148. package/templates/skills/orc-diy/references/blocks/security.md +0 -25
  149. package/templates/skills/orc-diy/references/blocks/ship.md +0 -25
  150. package/templates/skills/orc-diy/references/blocks/summary.md +0 -18
  151. package/templates/skills/orc-diy/references/blocks/testgen.md +0 -17
  152. package/templates/skills/orc-diy/references/blocks/trace.md +0 -28
  153. package/templates/skills/orc-diy/references/blocks/verify.md +0 -25
package/CHANGELOG.md CHANGED
@@ -10,6 +10,234 @@ Format: `### v<version> — <title> _(<date>)_`.
10
10
 
11
11
  ---
12
12
 
13
+ ### v1.0.0 - config, phases and calls stop being prose _(2026-08-30)_
14
+
15
+ **Still on the unscoped `orc` package?** Do this once before anything else -
16
+ your `orc upgrade` is the pre-v0.56.0 one and it cannot install itself:
17
+
18
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
19
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
20
+ - **Step 3 - re-apply it to your project:** `orc update`
21
+
22
+ **Do not use `npm i -g -f`.** It overwrites the command file and leaves the
23
+ superseded package installed underneath, owning nothing and updated by nothing.
24
+ Full detail in v0.56.0 below.
25
+
26
+ **Nothing you configure changes meaning, and no command you run is renamed.**
27
+ The user-visible half of this release is three: a wider Opus 5 band in the score
28
+ table, a foreign worker that stalls twice now steps aside for the rest of the
29
+ run, and `orc diy init` starts on `opus-5-high` instead of `opus-4-8-high`.
30
+ Everything else is ORC finally reading its own payload the way it has been
31
+ telling you to read yours.
32
+
33
+ **Start with what it cost, because the framing was wrong.** This release was
34
+ planned as a deduplication, and it is not one. The payload went from **208 files
35
+ / 26,507 lines to 291 files / 33,204 lines** — bigger on both counts. Of the
36
+ sixteen waves, four measured as the class they were declared (fewer lines) and
37
+ **most measured as C: correctness, at a small cost in lines**. The prose that
38
+ was copied 14-59 times did not disappear; it moved into one canonical file per
39
+ phase and the copies became pointers, and pointers plus a manifest cost more
40
+ bytes than the duplication did. What changed is not the size. **It is that there
41
+ is now exactly one place to fix each of these things, and a lint that fails when
42
+ a copy grows back.**
43
+
44
+ **Config stops being prose.** Every lane used to restate the config it reads and
45
+ re-derive the precedence around it, and `orc/SKILL.md` declared 8 keys while the
46
+ `/orc` directory referenced 32 - so the per-lane key list already existed and
47
+ was already 75% wrong. Config is now a **rank-ordered registry with declared
48
+ families**, and a lane asks ONE command what resolved:
49
+
50
+ - **`orc lane config <lane> [--json]`** answers "what did this lane's config
51
+ resolve to", with every shadow and inertness ALREADY WORDED. A lane never
52
+ merges `.claude/orc.config.yaml` itself again, and never re-derives a
53
+ precedence. **A rank below a resolved rank is not read at all.**
54
+ - **Six rank states, and they are the CLI's**: `resolved`, `partly-resolved`,
55
+ `not-read`, `inert`, `demoted`, `absent`. `absent` and `not-read` are
56
+ different facts - one rank was consulted and declined, the other was never
57
+ looked at - and rendering them the same way erases the difference between
58
+ "your setting did nothing" and "your setting was never read".
59
+ - A **two-way lint**: a key no lane reads is an error, and so is a lane naming a
60
+ key the CLI cannot write. Ten keys are permanently empty and are on a NAMED
61
+ allowlist - they are operating keys of the `orc extra` bridge, which a lane
62
+ never names - so an empty list is an ANSWER and not a to-do.
63
+ - The **config file is grouped by family**, ranked inside a contested one, with
64
+ the sentence that makes the grouping mean anything: *ranks compare only inside
65
+ a family.* Your existing `orc.config.yaml` is untouched - only the comments
66
+ around it move, and only on your next `orc config set`.
67
+ - The `fable5_*` role override is **removed**. It held exactly three keys, and
68
+ the retired-key mechanism reports them by name rather than silently ignoring
69
+ them.
70
+
71
+ **Phases stop being copied.** One canonical copy per phase in
72
+ `_shared/phases/`, and each lane spine becomes a **manifest** over that library:
73
+
74
+ - **`orc lane phases <lane> [--json]`** answers which shared phases a lane runs,
75
+ in what order, which layers to read, and when. A row names a FILE **or** a
76
+ HEADING - never both, never neither - and a two-way lint means neither a
77
+ missing row nor a phase-shaped heading nobody declared can survive a commit.
78
+ - **A manifest names a file, a layer and at most a heading. Never a line
79
+ number** - a stored line number is a wrong line number one edit later.
80
+ - **`orc-diy` became a consumer of that library** rather than a parallel copy of
81
+ it.
82
+
83
+ **Calls stop being restated.** Eleven CLI invocations were re-described 14-59
84
+ times each, every copy re-wording its own exit codes:
85
+
86
+ - **`orc lane calls [--all] [--json]`** is the one catalogue: the command, what
87
+ it answers, its exit codes, its cost, when to call it, **what a lane must do
88
+ when the answer is empty**, and what it must never do.
89
+ - `_shared/read-ladder.md` - "reading more is not understanding more", which ORC
90
+ has told you about your code since v0.4.0 - now covers reading **ORC's own
91
+ payload**, so a manifest of pointers does not become more round trips than the
92
+ prose it replaced.
93
+
94
+ **The three things that actually change behaviour.**
95
+
96
+ - **The score to model table is six bands and ends `opus-5-low [65,90)` ·
97
+ `opus-5-med [90,100]`.** Two bands in six now need an Opus 5 main session
98
+ where one in eight did. The `opus5_only` ladder is two bands, `[0,90)` low and
99
+ `[90,100]` medium, sharing that same round-90 edge.
100
+ - **A foreign worker that stalls twice in one run is DEMOTED** to the bottom of
101
+ its families for the rest of that run - or once a live attempt has been quiet
102
+ for `extra_demote_stale_min` minutes. **Two clocks, never merged**, each with
103
+ its own key and its own zero, and setting either to `0` disables that clock
104
+ and says so. It **writes no new measurement**: every fact comes from the
105
+ journal already on disk, the verdict is recomputed from disk on every read,
106
+ and the only thing stored is the human half - a promote or a hand demotion,
107
+ with its reason, deleted with the run. It never writes your config, never
108
+ auto-promotes, and never changes WHAT runs: same score, same declared files,
109
+ same acceptance criteria, same Claude agent. Two keys, `extra_demote_after`
110
+ and `extra_demote_stale_min`; a promote is a **watermark, not a mute**.
111
+ - **`orc diy init` now defaults `session_tier` to `opus-5-high`.** The old
112
+ default could not outrank the top two bands, so a wizard-built flow arrived
113
+ with a third of its ladder already collapsed onto one agent before you had
114
+ chosen anything. The clip itself was correct and announced - it is now
115
+ something you opt into by naming a lower tier. Existing configs are untouched.
116
+
117
+ **`orc ui` renders all of it, and decides none of it.**
118
+
119
+ - **Settings gains "Who decides what"** - the rank ladder for every contested
120
+ family, showing which rank ANSWERED and why every other one did not. The panel
121
+ never walks the ladder itself and never names a contested key.
122
+ - **Every setting row now names the lanes that read it**, so "I changed this,
123
+ so what did I just change?" has an answer on the same screen. An empty list is
124
+ an answer and keeps its row.
125
+ - **A new Lanes panel** with two tabs: the shared phases a lane runs, in order,
126
+ and the whole call catalogue with its exit codes. A lane that keeps its
127
+ pipeline in its own spine says so - a blank card would read as a failed load.
128
+ - **Extra ▸ Recovery gains the demotion row**: the counter (at zero too), both
129
+ clocks, the evidence, and **Promote, which requires a reason**. There is
130
+ deliberately no Demote button.
131
+ - **`orc doctor` gains `lane-keys-drifted`** - an installed spine out of step
132
+ with this CLI's config model, which is precisely the state in which a lane
133
+ falls back to resolving config itself and gets a shadowed key wrong, silently.
134
+
135
+ **The test suite, and an honest caveat.** `npm test` went from 596 to **669
136
+ tests** and from a single global concurrency to **pools by resource class**
137
+ (pure 14 / spawn 4 / net 2 / heavy 1) under one global cap. A flake that cost
138
+ four waves their gate was diagnosed: every `extra` test arms its fixture with a
139
+ real `orc extra ping`, and rung 1 of that ping is a hardcoded 3-second wall
140
+ clock in product code with no test seam - so on a loaded box a loopback answer
141
+ misses it, the ping falls through to the 20-second rung 2, and the assertion
142
+ fails at ~23 s on a different file every run. There is now one seam over every
143
+ probe budget; unset, shipped behaviour is byte-identical, and nothing in ORC
144
+ ever sets it. **The caveat that travels with that fix:** three consecutive green
145
+ full runs are the gate, not proof. The same box is green with the seam OFF, so
146
+ an idle run cannot tell a fixed flake from a quiet afternoon.
147
+
148
+ **Two things this release deliberately did NOT do**, both measured before being
149
+ refused:
150
+
151
+ - **`orc-diy/references/blocks/` was not deleted.** The plan said 448 lines
152
+ would go. Counted: 270 relocate, **178 stay**, 0 delete. Five of those blocks
153
+ have no counterpart anywhere in the payload, and 233 of the 448 lines are
154
+ composition prose describing what a phase becomes under each config value -
155
+ something no shared phase file contains, because `/orc` has no such choice to
156
+ express.
157
+ - **20 of 21 lane spines did not move their phase prose out.** The saving was
158
+ measured and refused: those lanes loop, everything genuinely shared had
159
+ already left, and relocating their own wording would have bought a round trip
160
+ per phase for the same bytes. Only `orc-wiki` qualified, and it moved.
161
+
162
+ ### v0.56.1 - a worker that is alive and doing nothing _(2026-08-28)_
163
+
164
+ **Still on the unscoped `orc` package?** Do this once before anything else -
165
+ your `orc upgrade` is the pre-v0.56.0 one and it cannot install itself:
166
+
167
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
168
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
169
+ - **Step 3 - re-apply it to your project:** `orc update`
170
+
171
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
172
+
173
+ **An opencode dispatch that goes quiet mid-task used to burn the whole
174
+ fifteen-minute wall clock and then report `timeout`.** That word is a statement
175
+ about ORC's patience, and it reads as a budget somebody should raise. It was a
176
+ POSITION somebody should resume from - the thing you fix by hand by typing
177
+ `continue` into the worker's window.
178
+
179
+ A wall clock cannot tell a worker that is thinking hard from a worker that has
180
+ stopped. Both look like fifteen minutes of nothing.
181
+
182
+ - **`extra_stall_s` (default 180, `0` disables) is the fourth timeout, and the
183
+ only one that measures the WORKER rather than a socket.** It is reset by
184
+ observable progress in the three places progress can show up: new bytes on the
185
+ worker's stream, new bytes on its stderr, or a **declared file that changed on
186
+ disk**. That third signal is what stops it firing on a worker that thinks for
187
+ four minutes and then writes in one go. Engine `cli` only - engine `api`
188
+ already has a per-request inactivity timeout on its own socket.
189
+ - **Engine `cli` spawns ASYNCHRONOUSLY now, because `spawnSync` cannot be
190
+ watched.** It blocks the event loop for the whole dispatch, so nothing could
191
+ observe the child while it ran. The child's stdout still lands on the journal's
192
+ progress file, so the measurement is a `stat` and not a buffer in a parent that
193
+ might die. On Windows a `.cmd` shim is killed with `taskkill /T`, or the real
194
+ tool survives as a grandchild and edits the repository the next attempt is
195
+ about to resume into.
196
+ - **`stalled` is its own failure class and it is RETRYABLE.** That is the whole
197
+ point: `orc extra reconcile` reads the position out of the journal baseline and
198
+ `extra_resume` continues from what is already on disk instead of starting over.
199
+ **That is ORC's spelling of typing `continue`.** There is deliberately no key
200
+ that nudges the child on its stdin - `opencode run` is not an interactive
201
+ session, so a keystroke nobody reads would be a fake fix, and a fake fix looks
202
+ like the problem was handled.
203
+ - **Ordered once: stall < idle < api < wall.** A stall budget that cannot fit
204
+ under the wall clock stands down entirely and says why, rather than racing it -
205
+ two timers on the same instant report whichever won, which is the exact bug
206
+ `extraTimeouts` exists to prevent.
207
+ - **Every engine-`cli` return carries a `timeline`** - first byte, last progress,
208
+ longest quiet gap, and both budgets - on success as well as on failure. A
209
+ budget you can only see when it fires is a budget nobody can set before it
210
+ does. `first_byte_ms: null` is the honest reading of a worker that never said
211
+ anything, never `0`.
212
+
213
+ **`orc extra health <profile> [--model <id>]` - does this model stall?**
214
+ `0` answered - `1` stalled or failed - `2` unknown profile. It runs the live
215
+ probe through the SAME watchdog a dispatch uses, so a green badge is earned by
216
+ the path a wave actually runs. A **listed** model is not a **working** model, and
217
+ a working model is not a model that **finishes**: three different facts, and this
218
+ is the command that tells the third one apart.
219
+
220
+ **`extra_fallback_agent` (default `band`) - who picks the task up.** `band` is
221
+ the previous behaviour and stays the default, because a fallback that changes
222
+ tier is a re-plan nobody asked for. `ask` STOPS and puts the menu to you with the
223
+ failure and the position already on the table. Any installed agent name pins one.
224
+
225
+ - Under `ask` the lane does **not** choose: `fallback.agent` is `null` and the
226
+ trace line says `pending (extra_fallback_agent=ask)`. A lane that picked the
227
+ first option would answer the one question the setting exists to ask, and
228
+ `/orc-retro` would aggregate a decision nobody made.
229
+ - The menu is computed and the task's own agent leads it. The alternates are
230
+ `orc-executor-opus-5-med`, `orc-executor-opus-5-low` and
231
+ `orc-executor-sonnet-4-6-high`, and any installed agent name is accepted -
232
+ the roster is generated, so a closed list here would go stale.
233
+ - It changes WHO, never WHAT: the score does not move, `declared_files` is not
234
+ widened, `acceptance[]` is not touched. **INERT in `/orc-quick`**, announced at
235
+ the gate - re-opening that gate IS the ask.
236
+ - **A stop now NAMES the model.** The trace line read `profile/?` on a timeout,
237
+ and `orc extra stats` dedupes on the fields that line carries, so a stalled
238
+ dispatch could not be joined to a price, a provider, or another stall on a
239
+ different model.
240
+
13
241
  ### v0.56.0 - a rename moved the command, and nobody could reach the fix _(2026-08-27)_
14
242
 
15
243
  **READ THIS FIRST IF YOUR `orc upgrade` IS FAILING.** If you are on a version
package/README-id.md CHANGED
@@ -7,13 +7,13 @@
7
7
  *Terima permintaan → pahami → rencanakan → beri nilai → kerjakan paralel → periksa → uji → kirim.*
8
8
 
9
9
  ![npm](https://img.shields.io/npm/v/%40azure-id%2Forc?style=for-the-badge&color=cb3837&logo=npm)
10
- ![Version](https://img.shields.io/badge/version-0.56.0-blue.svg?style=for-the-badge)
10
+ ![Version](https://img.shields.io/badge/version-1.0.0-blue.svg?style=for-the-badge)
11
11
  ![License](https://img.shields.io/badge/license-MIT-green.svg?style=for-the-badge)
12
12
  ![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg?style=for-the-badge)
13
13
  ![Claude Code](https://img.shields.io/badge/Claude_Code-Skills-purple.svg?style=for-the-badge)
14
14
  ![Dependencies](https://img.shields.io/badge/dependencies-zero-lightgrey.svg?style=for-the-badge)
15
15
 
16
- **Versi terbaru: v0.56.0** · diperbarui 27-08-2026 · [daftar perubahan lengkap](CHANGELOG.md)
16
+ **Versi terbaru: v1.0.0** · diperbarui 30-08-2026 · [daftar perubahan lengkap](CHANGELOG.md)
17
17
 
18
18
  **Ada di npm: [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc)** — `npm i -g @azure-id/orc`
19
19
 
@@ -377,6 +377,8 @@ orc ui --stop # matikan server proyek ini
377
377
  | Crosslink | **Design** (batas antar repo sebagai gambar) dan **Settings** (kesegaran tiap tetangga) | `crosslink add` / `remove` |
378
378
  | Promises · Boundary · Self-serve | buku janji, kartu batas, dan permukaan yang boleh diubah orang non-teknis | `pact check`, `pact sync`, `handoff set` |
379
379
  | **Docs** | setiap dokumen `/orc-doc` sebagai **pita** — satu blok per bagian, lebarnya sesuai panjangnya dan warnanya sesuai statusnya — plus berkas tiap bagian, jalur gelombang, kartu kesehatan lint, dan pratinjau gelombang | `doc compile` · `doc migrate` |
380
+ | **Extra** | **enam tab**: penyiapan koneksi, alat lokal beserta keadaannya, tangga rentang skor dan enam posisinya, pengeluaran per profil per rentang, dan **Recovery** — setiap pengiriman yang tidak pernah melapor kembali, beserta apa yang ia tinggalkan di disk | `extra add` / `ping` / `route` / `role` |
381
+ | **Challenge** | setiap putaran `/orc-challenge`: tujuan yang dibekukan, daftar sudut pandang dan apa yang diangkat masing-masing, temuan beserta keputusannya, dan apakah kelulusannya dihitung atau tertahan | `challenge record` · `accept` · `rebut` |
380
382
  | **Mocked Skill Use** | semua contoh jalannya yang ikut dikirim bersama ORC, dikelompokkan dan bisa dicari, dengan panel baca | — |
381
383
  | Learn | panduan `orc onboarding`, satu bagian sekali baca | — |
382
384
  | Experiment | setiap lane dengan tombol salin; membuka sesi Claude di terminal | — |
@@ -405,6 +407,90 @@ ditulis tangan.
405
407
 
406
408
  ---
407
409
 
410
+ ## Menjalankan sebagian tangga di tempat lain — `orc extra`
411
+
412
+ **Pengatur utamanya selalu Claude.** Yang diubah Extra adalah *siapa yang
413
+ mengerjakan satu potong tugas*: satu rentang skor milik Anda, atau salah satu
414
+ dari enam posisi bernama, bisa diarahkan ke DeepSeek, GLM, Kimi, MiniMax, Qwen,
415
+ Ollama lokal, atau CLI pemrograman yang sudah Anda pakai (opencode, codex).
416
+ Semua pemeriksaan setelahnya — gerbang asap, gerbang TDD, peninjau, pemeriksa
417
+ selisih pohon kerja — buta terhadap mesin yang dipakai, jadi tak ada satu pun
418
+ yang tahu pekerjaan itu dikerjakan di luar.
419
+
420
+ **Mati secara bawaan, dan tidak bisa dinyalakan sebelum ada yang benar-benar
421
+ menjawab.**
422
+
423
+ ```bash
424
+ orc extra providers # katalog bertanggal — penyedia, bukan model
425
+ orc extra tools # CLI lokal: belum ada · terlalu lama · belum masuk · siap
426
+ orc extra add ds --provider deepseek --engine api --env-key DEEPSEEK_API_KEY
427
+ orc extra ping ds # gerbang koneksi: bertingkat, dan tak ada yang dibaca lebih kuat dari kenyataannya
428
+ orc extra models ds --test <id> # model yang TERDAFTAR bisa saja sudah mati di sana
429
+ orc extra health ds --model <id> # …dan model yang jalan belum tentu SELESAI
430
+ orc extra route set 40-55 ds/deepseek-chat # satu rentang skor
431
+ orc extra role set doc-writer ds/deepseek-chat # atau satu posisi bernama
432
+ orc config set extra_enabled true
433
+ ```
434
+
435
+ - **Katalognya berisi penyedia, tidak pernah model.** Nama model yang ikut
436
+ dikirim akan salah dalam hitungan bulan, dan salahnya *diam-diam* — 404 di
437
+ tengah gelombang. `orc extra ping` membaca daftar aslinya lalu menyimpannya;
438
+ tidak ada yang mengarang nama. Begitu juga harga: angka biaya yang bukan ORC
439
+ sendiri yang hitung tidak pernah dicetak, melainkan muncul sebagai tanda
440
+ hubung panjang.
441
+ - **Setiap pekerjaan yang aktif mengatakannya sebelum gelombang pertama.**
442
+ Mengirim pekerjaan keluar dari Claude tanpa memberi tahu adalah justru
443
+ kegagalan yang membentuk seluruh bagian ini.
444
+ - **Dua penahan keras**: tugas dengan `risk[]` yang disebut (autentikasi, uang,
445
+ migrasi, keamanan, konkurensi, keutuhan data) tetap di Claude kecuali Anda
446
+ menyatakan lain, dan area REFUSE dari `/orc-boundary` tetap menahan bahkan
447
+ dalam mode `warn`.
448
+ - **Balasan dari luar adalah masukan asing.** Ia satu-satunya jenis masukan
449
+ asing yang menyunting pohon kerja Anda, jadi apa yang ia katakan telah ia
450
+ kerjakan adalah *klaim*, yang diperiksa terhadap pohon kerja.
451
+ - **Kunci Anda tidak pernah sampai ke baris perintah.** Ia lewat stdin menuju
452
+ brankas terenkripsi, atau tetap di variabel lingkungan, atau alatnya yang
453
+ menyimpannya sendiri — dan frasa sandinya adalah **tenggat waktu**, bukan
454
+ faktor kedua.
455
+ - **Enam posisi untuk lane yang mengunci agen alih-alih menilai tugas**:
456
+ `quick-executor` · `fast-executor` · `doc-writer` · `doc-checker` ·
457
+ `wiki-scanner-deep` · `wiki-scanner-light`. Posisi tanpa baris tetap
458
+ ditampilkan dan terbaca sebagai agen Claude yang terkunci padanya — "saya
459
+ sengaja membiarkan pemeriksanya di Claude" dan "tidak ada pemeriksa" tidak
460
+ boleh terlihat sama.
461
+
462
+ **Ketika pekerja luar gagal, yang tertinggal adalah sebuah posisi, bukan halaman
463
+ kosong.** ORC mencatat keadaan awal *sebelum bita pertama meninggalkan mesin
464
+ ini*, jadi pekerja yang terputus di tengah tulisan akan **dicocokkan lalu
465
+ dilanjutkan** — tidak pernah dikirim ulang dari nol ke berkas yang sudah
466
+ dua-pertiga jadi.
467
+
468
+ - **`extra_stall_s` (bawaan 180)** menghentikan pekerja yang tidak menghasilkan
469
+ apa pun selama itu. Hitungannya direset oleh kemajuan yang terlihat — aliran
470
+ keluaran pekerja, keluaran kesalahannya, atau berkas yang dideklarasikan
471
+ berubah di disk — jadi ia tidak pernah memotong pekerja yang sekadar lambat.
472
+ `stalled` boleh diulang, dan itulah yang membuat pelanjutannya menjadi cara
473
+ ORC sendiri mengetik `continue`.
474
+ - **`extra_fallback_agent` (bawaan `band`)** menentukan siapa yang mengambil alih
475
+ tugasnya. `ask` berhenti dan menyodorkan pilihannya kepada Anda; nama agen
476
+ apa pun yang terpasang bisa dikunci. Ia mengubah *siapa*, tidak pernah skornya,
477
+ daftar berkasnya, atau syarat penerimaannya.
478
+ - **Setiap pengiriman menulis catatan biayanya sendiri**, jadi laporan biaya
479
+ tidak pernah bergantung pada sebuah pekerjaan yang harus ingat menceritakan
480
+ pengeluarannya. `orc extra stats` menggabungkan catatan biaya, jejak, dan
481
+ balasan yang tersimpan, dan selalu menyebut berapa baris berasal dari mana.
482
+
483
+ **`/orc-quick` tidak terpengaruh di sini** dan mengatakannya — lane itu selalu
484
+ bertanya agen mana sebelum setiap pengiriman, jadi tidak ada pengaturan yang
485
+ boleh menjawabnya lebih dulu. **`/orc-challenge` tidak pernah keluar dari
486
+ Claude**: mengganti satu sudut pandang dengan model lain tidak membuat lane itu
487
+ lebih murah, ia mengubah apa yang sedang diukur.
488
+
489
+ **Seluruh bagian ini, dengan setiap perintah dan kuncinya:
490
+ [guides/extra-models.md](guides/extra-models.md).**
491
+
492
+ ---
493
+
408
494
  ## Bagaimana modelnya dipilih
409
495
 
410
496
  Setiap tugas diberi nilai 0–100 dengan **hitungan, bukan perasaan**: perencana
@@ -449,12 +535,13 @@ yang sama.
449
535
 
450
536
  ```
451
537
  templates/
452
- ├── skills/ 29 skill lane di atas, plus yang tidak punya perintah
538
+ ├── skills/ 31 folder skill, 38 berkas SKILL.md (satu lane boleh membawa
539
+ │ sub-skill) — lane di atas, plus yang tidak punya perintah
453
540
  │ sendiri: context-combiner, orc-advisor, orc-judge,
454
541
  │ orc-analyze-mini, dan _shared/ (kesepakatan lintas lane)
455
- ├── commands/ 27 perintah garis miring
542
+ ├── commands/ 29 perintah garis miring
456
543
  ├── hooks/ penjaga effort (PreToolUse) · peringatan statusline · catatan jejak
457
- └── agents/ 40 subagen dengan model terkunci + MODEL-MAPPING.md
544
+ └── agents/ 51 subagen dengan model terkunci + MODEL-MAPPING.md
458
545
  bin/cli.js pemasang, penyunting pengaturan, penyusun alur, pembaca status
459
546
  pekerjaan, dan separuh pasti dari setiap lane. Setiap pembacaan
460
547
  bisa menjawab --json
@@ -462,7 +549,8 @@ bin/webui/ `orc ui` — panel kendali lokal: css/ + js/ + i18n/<bahasa>/
462
549
  fixtures/, satu berkas per lapisan dan per panel. Nol dependensi
463
550
  bin/mockrun-catalog.js katalog contoh jalannya (diturunkan dari berkas di disk)
464
551
  mock-run/ contoh-contoh jalannya itu sendiri — mulai dari INDEX.md
465
- guides/ pengaturan · pemilihan model · dokumen · pembacaan pengetahuan
552
+ guides/ pengaturan · pemilihan model · dokumen · pembacaan pengetahuan ·
553
+ model AI lain
466
554
  ```
467
555
 
468
556
  Skill `orc` sendiri hanyalah **tulang punggung** yang tipis: ia hanya memuat
@@ -531,53 +619,55 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
531
619
  **Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
532
620
  hanya mencetak yang lebih baru dari versi yang Anda punya.
533
621
 
534
- ### v0.55.1 ORC sudah ada di npm _(27-08-2026)_
535
-
536
- **ORC diterbitkan dengan nama [`@azure-id/orc`](https://www.npmjs.com/package/@azure-id/orc).**
537
- Pemasangan lewat GitHub tetap jalan, dan isi paketnya tidak berubah sama sekali —
538
- ini hanya soal cara memasangnya sekarang punya nama.
539
-
540
- - **`npm i -g @azure-id/orc`** untuk memasang, dan
541
- **`npm i -g @azure-id/orc@latest`** untuk memperbarui. `orc upgrade` sudah
542
- melakukan keduanya sejak dulu dan tetap begitu.
543
- - **Pemasangan dari GitHub sekarang jadi cadangan**, bukan cara utama — tetap ada
544
- di bagian "Cara mulai", dilipat, untuk fork atau kalau Anda mengunci sebuah
545
- branch.
546
-
547
- ### v0.51.0 alat yang sudah Anda punya, dan koneksi yang membuktikan dirinya _(22-08-2026)_
548
-
549
- **Koneksi `orc extra`.** Dua alat coding yang bisa diberi pekerjaan oleh ORC
550
- adalah **program di komputer Anda sendiri**, bukan situs jadi sekarang keduanya
551
- jadi penyedia kelas satu, punya kotak hubungkan masing-masing, dan daftar model
552
- yang dibangun dari apa yang benar-benar bisa dijangkau akun Anda.
553
-
554
- - **Program bisa saja belum terpasang, dan panelnya mengatakan itu lebih dulu** —
555
- empat keadaan, dihitung setiap kali, tidak pernah diingat. Alat yang belum
556
- terpasang tidak diberi tombol yang tidak mungkin berhasil, dan `orc extra add`
557
- menolak sambil menyebutkan perintah pemasangannya.
558
- - **ORC membuka terminal Anda sendiri dan menjalankan pemasangannya di sana.**
559
- Bukan pekerjaan tersembunyi di latar — di dalamnya, permintaan hak
560
- administrator, kegagalan izin, unduhan 80 MB, dan tunggu empat puluh detik
561
- semuanya terlihat sama: *tidak terjadi apa-apa*. Perintahnya tampil sebelum
562
- tombolnya, jendelanya milik Anda, dan **ORC tidak pernah meminta hak
563
- administrator**. Tidak ada terminal yang bisa dibuka? Anda tetap dapat
564
- perintahnya untuk disalin.
565
- - **Uji koneksi sekarang bertingkat**: programnya ada · cukup baru · sudah masuk
566
- akun · model apa yang bisa dijangkau akun ini · dan, hanya kalau Anda minta,
567
- **apakah pesan sungguhan benar-benar dijawab** lengkap dengan waktu tempuh,
568
- jawabannya, dan empat jenis hitungan token yang tidak pernah dicampur.
569
- - **Model yang terdaftar bukan berarti model yang bekerja.**
570
- `orc extra models <nama> --test <id>` adalah satu-satunya cara membedakannya.
571
- - **Kedua alat lokal itu tidak memberi tahu model mana yang menjawab**, jadi ORC
572
- menuliskan kalimat itu, bukan membiarkan kolom kosong.
573
- - **`extra_enabled` tidak bisa dinyalakan sebelum ada yang menjawab** — dulu ia
574
- akan terbaca NYALA padahal artinya MATI.
575
-
576
- Sebelumnya: **v0.50.0 pekerjaan yang berjalan di tempat lain** (`orc extra`),
577
- **v0.49.1 dewan penilai, dan `--json` yang berhenti membuang isinya**,
578
- **v0.49.0 dokumen itu folder, dan berkasnya hasil rakitan** (`/orc-doc`), dan
579
- **v0.48.1 satu berkas untuk satu hal, dan dokumen yang bisa diselesaikan**.
580
- [Baca semuanya di daftar perubahan](CHANGELOG.md).
622
+ ### v1.0.0 - konfigurasi, fase, dan panggilan berhenti jadi prosa _(30-08-2026)_
623
+
624
+ **Masih memakai paket `orc` yang tanpa awalan?** Lakukan ini sekali dulu —
625
+ `orc upgrade` Anda adalah versi sebelum v0.56.0 dan tidak bisa memasang dirinya
626
+ sendiri. Rincian lengkapnya ada di blok PERHATIAN di bagian atas berkas ini.
627
+
628
+ - **Langkah 1 — lepaskan perintahnya dari paket lama:** `npm uninstall -g orc`
629
+ - **Langkah 2 — pasang paket yang sekarang:** `npm i -g @azure-id/orc`
630
+ - **Langkah 3 terapkan lagi ke proyek Anda:** `orc update`
631
+
632
+ **Tidak ada pengaturan yang berubah artinya, dan tidak ada perintah yang diganti
633
+ namanya.** Tiga hal benar-benar mengubah perilaku; sisanya adalah ORC yang
634
+ akhirnya membaca muatannya sendiri dengan cara yang selama ini ia ajarkan kepada
635
+ Anda untuk membaca kode Anda.
636
+
637
+ - **Tabel skor ke model berakhir di `opus-5-low [65,90)` · `opus-5-med
638
+ [90,100]`.** Dua dari enam pita kini ingin sesi utama Opus 5, dari sebelumnya
639
+ satu dari delapan.
640
+ - **Pekerja luar yang macet dua kali dalam satu run akan menepi** untuk sisa run
641
+ itu. Dua jam, tidak pernah digabung; ia tidak menulis pengukuran baru dan tidak
642
+ pernah menulis konfigurasi Anda; sebuah promote adalah tanda batas, bukan
643
+ membisukan, dan perlu alasan.
644
+ - **`orc diy init` kini berbawaan `opus-5-high`.** Bawaan yang lama diam-diam
645
+ meruntuhkan sepertiga atas tangga Anda ke satu agen sebelum Anda memilih
646
+ apa pun.
647
+
648
+ Bagian strukturalnya - **konfigurasi, fase, dan panggilan berhenti jadi prosa**:
649
+
650
+ - **`orc lane config <lane>`** menjawab konfigurasi sebuah lane sudah menjadi
651
+ apa, dengan setiap bayangan sudah dikalimatkan. Sebuah lane tidak pernah lagi
652
+ menggabungkan berkas konfigurasi sendiri, dan **peringkat di bawah peringkat
653
+ yang sudah menjawab tidak dibaca sama sekali**.
654
+ - **`orc lane phases <lane>`** dan **`orc lane calls --all`** melakukan hal yang
655
+ sama untuk pustaka fase bersama dan katalog panggilan CLI - masing-masing satu
656
+ salinan kanonis, dari sebelumnya 14-59 pengulangan per panggilan.
657
+ - **`orc ui` menampilkan semuanya**: tangga peringkat yang menunjukkan
658
+ pengaturan mana yang MENJAWAB, lane mana yang membaca tiap kunci, panel Lane
659
+ baru, dan baris penurunan di Extra Recovery beserta tombol Promote.
660
+ `orc doctor` mendapat `lane-keys-drifted`.
661
+
662
+ **Ini tidak membuat muatannya lebih kecil** - 208 berkas menjadi 291, 26.507
663
+ baris menjadi 33.204. Sebagian besar gelombang terukur sebagai kebenaran, bukan
664
+ penghapusan duplikasi. Yang berubah adalah kini ada satu tempat untuk memperbaiki
665
+ masing-masing hal ini, dan ada lint yang gagal saat sebuah salinan tumbuh
666
+ kembali. Dua penghapusan yang direncanakan **diukur lalu ditolak**, dan flake
667
+ yang membuat empat gelombang gagal akhirnya didiagnosis - dengan catatan jujur
668
+ bahwa tiga run hijau adalah gerbangnya, bukan buktinya.
669
+
670
+ **Entri lengkap: [CHANGELOG.md](CHANGELOG.md).**
581
671
 
582
672
  ---
583
673