@azure-id/orc 2.0.2 → 2.1.1

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 (129) hide show
  1. package/CHANGELOG.md +455 -0
  2. package/README-id.md +52 -23
  3. package/README.md +36 -20
  4. package/bin/build-agents.js +205 -206
  5. package/bin/clear-logs.js +620 -0
  6. package/bin/cli.js +47417 -46420
  7. package/bin/fix.js +459 -0
  8. package/bin/gotcha.js +288 -8
  9. package/bin/habit.js +1538 -1453
  10. package/bin/mockrun-catalog.js +3 -0
  11. package/bin/onboarding-content.js +2 -1
  12. package/bin/pricing.json +28 -21
  13. package/bin/trace-write.js +869 -657
  14. package/bin/verify-contracts.js +5552 -5471
  15. package/bin/verify-package.js +716 -705
  16. package/bin/webui/api.js +125 -6
  17. package/bin/webui/css/panels/hookui.css +79 -0
  18. package/bin/webui/fixtures/behaviour.js +30 -0
  19. package/bin/webui/fixtures/extra.js +2036 -2036
  20. package/bin/webui/fixtures/flow.js +81 -81
  21. package/bin/webui/fixtures/hookui.js +506 -431
  22. package/bin/webui/fixtures/index.js +32 -3
  23. package/bin/webui/fixtures/knowledge.js +2 -2
  24. package/bin/webui/fixtures/maintenance.js +123 -42
  25. package/bin/webui/fixtures/rules.js +1007 -1002
  26. package/bin/webui/fixtures/settings.js +6 -7
  27. package/bin/webui/fixtures/stats.js +9 -6
  28. package/bin/webui/fixtures/wait.js +98 -97
  29. package/bin/webui/i18n/en/behaviour.json +13 -0
  30. package/bin/webui/i18n/en/hookui.json +290 -194
  31. package/bin/webui/i18n/en/maintenance.json +71 -52
  32. package/bin/webui/i18n/en/settings.json +60 -60
  33. package/bin/webui/i18n/id/behaviour.json +13 -0
  34. package/bin/webui/i18n/id/hookui.json +290 -194
  35. package/bin/webui/i18n/id/maintenance.json +71 -52
  36. package/bin/webui/i18n/id/settings.json +60 -60
  37. package/bin/webui/js/05-banners.js +181 -172
  38. package/bin/webui/js/06-edit.js +193 -183
  39. package/bin/webui/js/panels/behaviour.js +77 -12
  40. package/bin/webui/js/panels/hookui.js +2196 -1691
  41. package/bin/webui/js/panels/maintenance.js +336 -235
  42. package/bin/webui/js/panels/settings.js +726 -719
  43. package/mock-run/INDEX.md +1 -0
  44. package/mock-run/a-normal-day.md +2 -2
  45. package/mock-run/extra-slots.md +177 -177
  46. package/mock-run/habits.md +1 -1
  47. package/mock-run/orc-aftermath.md +392 -392
  48. package/mock-run/orc-budget.md +29 -33
  49. package/mock-run/orc-cli.md +200 -200
  50. package/mock-run/orc-explain.md +86 -86
  51. package/mock-run/orc-extra.md +389 -392
  52. package/mock-run/orc-fast.md +2 -2
  53. package/mock-run/orc-fix.md +87 -0
  54. package/mock-run/orc-pattern.md +112 -112
  55. package/mock-run/orc-quick.md +146 -146
  56. package/mock-run/orc.md +4 -4
  57. package/package.json +1 -1
  58. package/templates/agents/MODEL-MAPPING.md +176 -173
  59. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -2
  60. package/templates/agents/{orc-claude-writer-opus-5-med.md → orc-claude-writer-opus-5-low.md} +4 -4
  61. package/templates/agents/orc-executor-haiku-4-5.md +1 -1
  62. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  63. package/templates/agents/orc-executor-sonnet-4-6-high.md +1 -1
  64. package/templates/agents/orc-executor-sonnet-4-6-med.md +1 -1
  65. package/templates/agents/orc-executor-sonnet-5-high.md +2 -2
  66. package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
  67. package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
  68. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +2 -2
  69. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -2
  70. package/templates/agents/{orc-recon-sonnet-4-6-med.md → orc-recon-sonnet-5-med.md} +4 -4
  71. package/templates/agents/orc-retro-sonnet-5-high.md +2 -2
  72. package/templates/agents/{orc-reviewer-opus-5-med.md → orc-reviewer-opus-5-low.md} +4 -4
  73. package/templates/agents/{orc-wiki-scanner-opus-5-med.md → orc-wiki-scanner-opus-5-low.md} +3 -3
  74. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +2 -2
  75. package/templates/commands/orc-fast.md +10 -10
  76. package/templates/commands/orc-fix.md +18 -0
  77. package/templates/commands/orc-wiki.md +64 -64
  78. package/templates/hooks/README.md +75 -7
  79. package/templates/hooks/orc-session-hook.js +78 -3
  80. package/templates/hooks/orc-statusline-render.js +317 -23
  81. package/templates/hooks/orc-statusline.js +162 -49
  82. package/templates/hooks/orc-subagent-line.js +23 -5
  83. package/templates/hooks/orc-weather-fetch.js +123 -0
  84. package/templates/skills/_shared/extra-dispatch.md +1331 -1331
  85. package/templates/skills/_shared/gotchas.md +27 -7
  86. package/templates/skills/_shared/habits.md +2 -2
  87. package/templates/skills/_shared/opus5-only.md +137 -137
  88. package/templates/skills/_shared/phases/review.md +2 -2
  89. package/templates/skills/_shared/phases/trace-verbs.md +17 -3
  90. package/templates/skills/_shared/phases/trace.md +136 -136
  91. package/templates/skills/_shared/review-slice.md +28 -1
  92. package/templates/skills/_shared/wait.md +1 -0
  93. package/templates/skills/orc/README.md +2 -2
  94. package/templates/skills/orc/SKILL.md +227 -227
  95. package/templates/skills/orc/config.md +25 -27
  96. package/templates/skills/orc/examples/full-run-mock.md +74 -73
  97. package/templates/skills/orc/references/effort-and-mode.md +222 -222
  98. package/templates/skills/orc/references/preflight-report.md +3 -3
  99. package/templates/skills/orc/references/ultra-mode.md +1 -1
  100. package/templates/skills/orc/schemas/checkpoint.md +122 -122
  101. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +3 -3
  102. package/templates/skills/orc/subskills/orc-review-verify/core.md +1 -1
  103. package/templates/skills/orc-analyze/SKILL.md +4 -2
  104. package/templates/skills/orc-claude/SKILL.md +14 -14
  105. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
  106. package/templates/skills/orc-diy/SKILL.md +5 -5
  107. package/templates/skills/orc-fast/SKILL.md +210 -208
  108. package/templates/skills/orc-fix/SKILL.md +110 -0
  109. package/templates/skills/orc-grill/SKILL.md +232 -232
  110. package/templates/skills/orc-grill/references/grill-doc.md +1 -1
  111. package/templates/skills/orc-mini/SKILL.md +4 -4
  112. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
  113. package/templates/skills/orc-quick/README.md +536 -536
  114. package/templates/skills/orc-quick/SKILL.md +2 -2
  115. package/templates/skills/orc-quick/references/context-doc.md +145 -145
  116. package/templates/skills/orc-quick/references/dispatch-gate.md +220 -219
  117. package/templates/skills/orc-quick/references/gh-mode.md +4 -2
  118. package/templates/skills/orc-retro/SKILL.md +1 -1
  119. package/templates/skills/orc-retro/examples/retro-mock.md +16 -16
  120. package/templates/skills/orc-wiki/README.md +325 -325
  121. package/templates/skills/orc-wiki/SKILL.md +195 -195
  122. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
  123. package/templates/skills/orc-wiki/references/extra.md +2 -2
  124. package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
  125. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -1
  126. package/templates/skills/orc-wiki/references/phases/phase-2.md +3 -3
  127. package/templates/skills/orc-wiki/references/phases/phase-3c.md +3 -2
  128. package/templates/agents/orc-claude-writer-opus-4-8-high.md +0 -48
  129. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +0 -74
package/CHANGELOG.md CHANGED
@@ -10,6 +10,461 @@ Format: `### v<version> — <title> _(<date>)_`.
10
10
 
11
11
  ---
12
12
 
13
+ ### v2.1.1 — the quick and fast lanes move to Sonnet 5 _(2026-10-02)_
14
+
15
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
16
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
17
+ the top of this file.
18
+
19
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
20
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
21
+ - **Step 3 - re-apply it to your project:** `orc update`
22
+
23
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
24
+
25
+ This release changes the models that `/orc-quick`, `/orc-fast` and `orc extra`
26
+ use. Sonnet 4.6 leaves the coding lanes. Sonnet 5 (`claude-sonnet-5-5`) replaces it.
27
+
28
+ **1. The quick dispatch gate**
29
+
30
+ - Code entries: `orc-executor-sonnet-5-med` or `orc-executor-opus-5-low`. The
31
+ default suggestion for a mechanical edit is `orc-executor-sonnet-5-med`.
32
+ - Read-only entries: `orc-recon-sonnet-5-med` or `orc-recon-opus-5-low`.
33
+ - An agent's model change is a rename:
34
+ `orc-recon-sonnet-4-6-med` → `orc-recon-sonnet-5-med`. The agent count stays 51.
35
+
36
+ **2. orc extra**
37
+
38
+ - The `quick-executor` slot uses `orc-executor-sonnet-5-med`.
39
+ - `extra_fallback_agent` options and the fallback menu show
40
+ `orc-executor-sonnet-5-high`. They showed `orc-executor-sonnet-4-6-high`. A
41
+ config that names the old agent is still accepted.
42
+
43
+ **3. /orc-fast**
44
+
45
+ - The one executor is `orc-executor-sonnet-5-med`. It was
46
+ `orc-executor-sonnet-4-6-high`. The `fast-executor` extra slot, `orc budget`
47
+ and the `opus5_only` table use the new name. Under `opus5_only` it is still
48
+ `orc-executor-opus-5-low`.
49
+ - Run the lane from a Sonnet 5 (or higher) main session. A Sonnet 4.6 session is
50
+ below the executor's pin.
51
+
52
+ **4. Text and examples**
53
+
54
+ - `/orc`: the "even the smallest task gets a cheap subagent" rule names Sonnet 5
55
+ low. The examples dispatch Sonnet 5 high for scores 31–40.
56
+ - `/orc-grill`: the recon line names `claude-sonnet-5-5 / medium`.
57
+
58
+ **Not changed:** Sonnet 4.6 stays for the graph noter, the scout, the `orc diy`
59
+ choices and the opt-in executors (`orc-executor-sonnet-4-6-med`,
60
+ `orc-executor-sonnet-4-6-high`).
61
+
62
+ **What you have to do:** `orc update --prune`. If a script names
63
+ `orc-recon-sonnet-4-6-med`, change it to `orc-recon-sonnet-5-med`.
64
+
65
+ ---
66
+
67
+ ### v2.1.0 — the review counts, the score table moves up, and old logs can go _(2026-10-02)_
68
+
69
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
70
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
71
+ the top of this file.
72
+
73
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
74
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
75
+ - **Step 3 - re-apply it to your project:** `orc update`
76
+
77
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
78
+
79
+ This release has eight parts. It moves the score table up to newer models, it
80
+ makes Review quality count the reviews that really ran, and it adds a way to
81
+ delete old logs.
82
+
83
+ **1. Opus 4.x leaves the roles that do not write code**
84
+
85
+ - The deep wiki scanner and the CLAUDE.md writer now use **Opus 5.5 low**. They
86
+ used Opus 4.8 high. An agent's model change is always a rename, so the files
87
+ change name:
88
+ - `orc-wiki-scanner-opus-4-8-high` → `orc-wiki-scanner-opus-5-low`
89
+ - `orc-claude-writer-opus-4-8-high` → `orc-claude-writer-opus-5-low`
90
+ - The `opus5_only` twins of these two roles are **deleted**
91
+ (`orc-wiki-scanner-opus-5-med`, `orc-claude-writer-opus-5-med`). The defaults
92
+ are already Opus 5.5 low, so `opus5_only` has nothing to change. Under
93
+ `opus5_only`, a wiki scan and a CLAUDE.md write are now low effort, not medium
94
+ (cheaper).
95
+ - The coding lanes and the `/orc` main-session baseline do not change. Opus 4.6
96
+ is used nowhere.
97
+
98
+ **2. Sonnet 5 runs on `claude-sonnet-5-5`**
99
+
100
+ - Every Sonnet 5 agent now has `model: claude-sonnet-5-5`. The agent names keep
101
+ `-sonnet-5-`, as Opus did in v1.9.2. A config that names `claude-sonnet-5` is
102
+ still valid.
103
+
104
+ **3. A new score table with five bands**
105
+
106
+ | Score | Agent | Model · effort |
107
+ |---|---|---|
108
+ | `[0,21)` | `orc-executor-sonnet-5-low` (new) | Sonnet 5 · low |
109
+ | `[21,31)` | `orc-executor-sonnet-5-med` (new) | Sonnet 5 · medium |
110
+ | `[31,41)` | `orc-executor-sonnet-5-high` | Sonnet 5 · high |
111
+ | `[41,90)` | `orc-executor-opus-5-low` | Opus 5.5 · low |
112
+ | `[90,100]` | `orc-executor-opus-5-med` | Opus 5.5 · medium |
113
+
114
+ - The table had six bands. Seven executors now have no band
115
+ (`haiku-4-5`, `sonnet-4-6-med`, `sonnet-4-6-high`, `opus-4-7-med`,
116
+ `opus-4-7-high`, `opus-4-8-high`, `opus-5-high`). They still ship.
117
+ `rubric_bands_override`, `orc diy`'s `fixed_executor` and
118
+ `extra_fallback_agent` can still name them.
119
+ - **The cost effect:**
120
+ - Scores 41–64 move from Sonnet (Sonnet 4.6 high $3/$15, Sonnet 5 high $2/$10)
121
+ to **Opus 5.5 low ($4/$20)**. This is the largest change.
122
+ - Scores 0–29 move from Haiku 4.5 ($1/$5) to Sonnet 5 low or medium ($2/$10).
123
+ - Scores 30–39 move from Sonnet 4.6 medium ($3/$15) to Sonnet 5 high ($2/$10).
124
+ - **Every band from 41 needs an Opus 5.5 main session.** Before, this was from
125
+ 65. A lower main session runs these tasks on the session model, and the tier
126
+ line says so.
127
+ - Sandbox sample (14 scored tasks): the Opus share goes from 6 to 7 of 14, and
128
+ the Haiku share from 6 to 0. The sample is small. Measure your own project
129
+ with `orc stats`.
130
+ - **`opus5_only` does not change** (`[0,90)` low · `[90,100]` medium). It now
131
+ differs from the default table only below score 41. The `opus5_only` text in
132
+ `orc config` showed an old three-band ladder; it now shows the real two bands.
133
+ - A user route row in `orc diy` that spans two Claude bands now names both
134
+ agents.
135
+
136
+ **4. The price table is correct** (`bin/pricing.json`, dated 2026-10-01)
137
+
138
+ - `claude-sonnet-5-5` is added: $2 input · $2.50 cache write · $0.20 cache read
139
+ · $10 output per MTok.
140
+ - `claude-sonnet-5` was $3/$15; it is now $2 / $2.50 / $0.20 / $10.
141
+ - `claude-opus-5`, `claude-opus-4-8` and `claude-opus-4-7` are now
142
+ $5 / $6.25 / $0.50 / $25.
143
+ - `claude-fable-5` is now $10 / $12.50 / $1 / $50.
144
+ - `claude-sonnet-5-5` has a context window row, so `orc budget` shows its
145
+ context risk.
146
+
147
+ **5. Review**
148
+
149
+ - **The reviewer is `orc-reviewer-opus-5-low`** (renamed from
150
+ `orc-reviewer-opus-5-med`; low effort). In the live eval, low effort found
151
+ 100% of the seeded defects that were still in the diff. **A script that names
152
+ the old file breaks.** `orc update` removes the old file.
153
+ - **Review quality no longer says "0 so far" after real reviews.** It read only
154
+ `observations.jsonl`, and no lane wrote that file. Now a run with a
155
+ `FINDING-OUTCOME` line or a reviewer return in its trace counts as a review. A
156
+ clean review counts too. `orc gotcha quality --json` has two new fields:
157
+ `reviews_traced` and `reviews_observed`.
158
+ - **An observation with `author: orc` must name its `run`.** Without it, `orc
159
+ gotcha observe` exits 2 and names `run`. A `ref` that starts with the run id
160
+ fills `run` for you.
161
+ - **Your project's own review rule.** New command **`orc review policy`**. It
162
+ reads CLAUDE.md and AGENTS.md for a line that asks for a different review (for
163
+ example "All code review must go through /code-review"). When it finds one,
164
+ every coding lane that changed code asks: ORC review, that review, or skip.
165
+ The answer goes in a new trace line, `REVIEW-WHICH`. An external review is
166
+ counted as "Project reviews" and never in the ORC headline.
167
+ - **Fixes the review can see.** An observation can now carry `introduced_by`
168
+ (`orc` · `ai` · `human` · `unknown`, from `git blame`), and a fix after a
169
+ review is recorded. The reviewer card shows a `fix` line for each changed file.
170
+ A review that missed a later fix is counted as a miss.
171
+ - **New lane `/orc-fix`** with the commands **`orc fix classify`**, **`orc fix
172
+ record`** and **`orc fix list`**. Inside a paused run, `/orc-fix` only records:
173
+ one observation and one `FIX` line in the trace of that run. With no run open,
174
+ it fixes the way `/orc-quick` does, and it asks which agent to use. It refuses
175
+ while a dispatch is in flight.
176
+
177
+ **6. The Behaviour tab**
178
+
179
+ - The gate habit now proposes: one agent name written three ways now counts as
180
+ one answer.
181
+ - `/orc-fast` reads its lane config first, so it records your answers.
182
+ `/orc-analyze` and `/orc-diy` do the same.
183
+ - With `habits: off` you still see the Review quality and Gotchas tabs. Review
184
+ learning is always on.
185
+ - The answer log shows the question, not only its id.
186
+ - A run is dated from its file name. Rows say `orc-quick`, not `quick`. An empty
187
+ row is not shown.
188
+ - At the end of a run, `orc trace write` names a question whose key you set in
189
+ your config when the lane wrote no answer for it.
190
+
191
+ **7. Clear old logs**
192
+
193
+ - New command **`orc clear logs`**. It shows the old traces and finished run
194
+ folders that it can delete, and why it keeps the rest. **`orc clear logs
195
+ --apply`** deletes them.
196
+ - New key **`log_retention_days`**: 30 · 60 · 90 · 120 · 240 · 360 days
197
+ (default 90). The cutoff is never shorter than `aftermath_window_days`.
198
+ - It never deletes your data, a waiting run, the active trace, a file younger
199
+ than 6 hours, or a trace with a habit answer that is younger than 180 days.
200
+ - `orc stats` keeps the totals of a deleted run in `.claude/orc/logs-rollup.json`
201
+ and says "includes N pruned runs".
202
+ - **The promise "log_dir is never deleted automatically" changes.** It is still
203
+ true by default. New key **`log_retention_auto`** (default `off`): `on` runs
204
+ the delete after a lane's last trace packet, at most once per 24 hours.
205
+ - `orc ui` ▸ Maintenance has a **Clear old logs** row with a full preview.
206
+
207
+ **8. The status line timer**
208
+
209
+ - New key **`statusline_refresh`**: `off` · `1` · `2` · `3` · `5` · `10` seconds
210
+ (3 is new). It writes `statusLine.refreshInterval` in `settings.json`, the same
211
+ as `orc statusline refresh`, and `orc config list` reads it from there.
212
+ - **The floor is 1 second.** Claude Code gives no timer below 1 second. A value
213
+ below 1 is refused, and the message names the nearest value. In `orc ui` ▸ CLI
214
+ Hook Interface, 0.2 · 0.5 · 0.7 are disabled.
215
+ - With a timer, a pet moves one step for each redraw. `usage.json` is written
216
+ only when the numbers change.
217
+ - `orc doctor` tells you when the value is below the floor, when a moving part
218
+ has no timer, and when the timer is on the sub-agent board.
219
+
220
+ **Defects found in the live evals, and fixed**
221
+
222
+ - **D1:** `/orc-fast` refused to record review observations. Every lane that
223
+ runs a review now records them.
224
+ - **D2:** a free-text `FINDING` line (`FINDING 9 findings — P0×2 …`) was
225
+ accepted. The CLI now checks the count head (`FINDING p0= p1= p2= p3=`).
226
+ - **D3:** a `REVIEW-WHICH` line was written with no project rule and no name.
227
+ The CLI now checks the format, and refuses it when `orc review policy` says
228
+ "orc".
229
+ - **D4:** the question "which review" was asked with no project rule. It is now
230
+ refused by name.
231
+ - **D5:** a `FINDING-OUTCOME` line used its own category names. The categories
232
+ are now checked against the closed set of the review return.
233
+ - **D6:** an `/orc` run skipped review and verify for a small change. At the
234
+ end, `orc trace write` now names the skipped phase. `/orc` always runs both.
235
+ - **D7:** an `/orc-quick` run wrote its trace lines by hand. No CLI check and no
236
+ end-of-run reminder ran, and the lane then said the findings were recorded.
237
+ The session hook now stops the turn once when a trace has more narration lines
238
+ than its `.jsonl` twin, and names `orc trace write` and `orc gotcha observe`.
239
+ - **D8:** an `/orc` run ignored the end-of-run reminder to record its review
240
+ outcomes. The session hook now stops the turn once when a finished run had a
241
+ review with findings and no observation names the run.
242
+
243
+ **Live evals.** Five rounds ran `/orc-mini`, `/orc-fast`, `/orc-quick` and `/orc`
244
+ in a sandbox (17 sessions, about 43 USD). The reviewer at low effort found every
245
+ seeded defect that was still in the diff, habit capture and the review count
246
+ passed, and D1–D8 were each found live, fixed, and checked again in a later
247
+ round. The `/orc-fix` eval (E-F1) is still to do. The result
248
+ files are in `eval/results/2.1.0/` (maintainer copy, not in the package).
249
+
250
+ **What you have to do**
251
+
252
+ | You have … | What happens |
253
+ |---|---|
254
+ | any install | Run `orc update`. It removes the three renamed agent files and the two deleted twins. |
255
+ | a compiled `orc diy` flow | The status line shows `STALE→recompile`, and `/orc-diy` refuses. Run `orc diy compile`. |
256
+ | `rubric_bands_override`, `fixed_executor` or `extra_fallback_agent` with an old executor | It works. Those executors still ship. |
257
+ | a main session on Opus 4.8 or Sonnet | Scores 41–64 now run on the session model (before, from 65). The tier line says so. |
258
+ | a config or old traces that name `claude-sonnet-5` | They still work and still price. |
259
+ | old traces that name the old reviewer | `orc stats` and `/orc-retro` still read them. |
260
+ | a script that names `orc-reviewer-opus-5-med` | It breaks. Change it to `orc-reviewer-opus-5-low`. |
261
+ | a script that observes with `author: orc` and no `run` | It exits 2 and names `run`. Add `run`. |
262
+ | a 2.0.4 CLI on the same project | It reads the new observation fields. If it writes the same observation again, it drops `introduced_by` for that one row. |
263
+ | Review quality in the panel | The review count goes up, because traces count now. Acceptance does not change. |
264
+ | `refreshInterval` 1–60 in `settings.json` | `orc update` keeps it. |
265
+ | habits off | `orc lane config --json --no-probes` is byte-identical. |
266
+
267
+ New files `review-scope.jsonl` and `logs-rollup.json` are your data: they are not
268
+ in the install manifest, they survive `orc update`, `--prune` and `doctor --fix`,
269
+ and `orc clear logs` never deletes them.
270
+
271
+ ---
272
+
273
+ ### v2.0.4 — design the status line to the last cell _(2026-09-30)_
274
+
275
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
276
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
277
+ the top of this file.
278
+
279
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
280
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
281
+ - **Step 3 - re-apply it to your project:** `orc update`
282
+
283
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
284
+
285
+ `orc ui` ▸ CLI Hook Interface can now change almost everything a terminal cell can
286
+ show. Before, a bar drew only its cells: you could not put words before, after,
287
+ above or below it, and a gradient used fixed colours. Every item below is a
288
+ `orc statusline set` flag, and the part editor has a control for each one.
289
+
290
+ **Words around any shape**
291
+
292
+ - **A name on every shape.** `--label` now draws on a bar, a spark, an icon and a
293
+ motion mark too. `--label-pos before|after|above|below` says where it goes. A name
294
+ you already typed on a bar shows before it when you choose no position.
295
+ - **Text before and after the shape.** `--prefix` and `--suffix` wrap a bar, for
296
+ example `[██░░]`.
297
+ - **The number next to the bar.** `--value-pos before|after` draws the value of the
298
+ part beside its shape, with your number format.
299
+ - **Captions.** `--caption "five-hour window"` puts a short text on a row above or
300
+ below the part, at the column of the part (`--caption-pos`, `--caption-align
301
+ left|center|right`, `--caption-color`, `--caption-case`). `{value}` and `{label}`
302
+ in the text are replaced.
303
+ - **Small text.** A terminal has no font size, so `--case` (and `--caption-case`)
304
+ have three Unicode styles: `small` (ꜱᴍᴀʟʟ ᴄᴀᴘꜱ), `super` (ˢᵘᵖᵉʳ) and `sub` (numbers like ₆₁).
305
+
306
+ **Bars in your own colours and characters**
307
+
308
+ - `--fill-color` and `--empty-color` colour the filled and the empty cells.
309
+ - `--ramp-colors "#22c55e,#eab308,#ef4444"` and `--ramp-stops "0,60,85"` give any
310
+ part your own colour range. On `gradient` with hex colours, each cell is blended
311
+ in true colour.
312
+ - `--fill-char ■ --empty-char □` draw the bar with your own characters (one cell
313
+ each).
314
+ - `--threshold` sets the mark on `split` and `marker`.
315
+
316
+ **More control on every part**
317
+
318
+ - `--brackets "⟦,⟧"`, `--pad-left`, `--pad-right`, `--align`, `--sign`, `--max-len`
319
+ and `--unknown dash|hide`.
320
+ - `--bg` and any `#rrggbb` colour are in the editor now, and you can pick more than
321
+ one weight (bold and underline).
322
+ - `--state-color "ok=green,critical=red"` and `--state-glyph "ok=✓"` per state.
323
+ - `--param k=v` sets the settings of a part (the text of `text`, the clock format).
324
+
325
+ **Lines**
326
+
327
+ - `orc statusline line <n> --align right|center` and `--sep-color`. The panel also
328
+ takes your own separator text.
329
+
330
+ **Six parts that drew nothing now work**
331
+
332
+ - `text`, `divider`, `spacer`, `icon-static`, `fill` and `config` bound a value that
333
+ is always empty, and no command could set their text. They draw now. `fill`
334
+ pushes the parts after it to the right edge of the terminal.
335
+
336
+ **Animated pets and weather**
337
+
338
+ - **Eight pets that move** (group "Pets and motion"): `pet-cat` (a pixel cat drawn
339
+ in braille dots), `pet-mouse`, `pet-chase` (the cat chases the mouse),
340
+ `pet-cat-text` (ᓚᘏᗢ), `pet-pacman` (it eats the dots), `pet-fish`, `pet-bird` and
341
+ `pet-dog`. Each has three shapes: `run` (across the track), `bounce` (right and
342
+ back) and `idle` (stays and moves its legs), a track width of 6–40 cells, and a
343
+ `speed` setting.
344
+ - **Weather:** `weather` (the temperature), `weather-icon` (☼ ◐ ☁ ☂ ❄ ϟ ≋) and
345
+ `weather-desc`. Set `location` (empty = found from your network address) and
346
+ `units` (`metric` or `us`). The hook never waits on the network: a small
347
+ background fetcher asks wttr.in at most every 30 minutes, and only while a weather
348
+ part is on your layout. `ORC_STATUSLINE_NO_NET=1` stops it.
349
+ - **`orc statusline refresh <seconds|off>`** sets `refreshInterval` in the status
350
+ line setting. Claude Code redraws the status line only on events, or on this
351
+ timer (at least 1 second). So a pet moves about one step per second. The panel has
352
+ the same control, and tells you when a moving part has no timer.
353
+
354
+ **The panel**
355
+
356
+ - **Live preview of unsaved changes.** The panel replays your staged changes in a
357
+ temporary copy and draws the real result before you press Apply. A change that
358
+ the CLI refuses is named before Apply.
359
+ - **The preview moves.** A layout with a pet or a motion mark plays 12 frames in the
360
+ panel (at most 20 seconds, never when your system asks for reduced motion).
361
+ - A new `designer` preset shows the new powers.
362
+
363
+ **Fixes**
364
+
365
+ - **Text above or below a part showed at the start of the line.** Claude Code
366
+ removes the spaces at the start of every status line row, so a caption row, a
367
+ line prefix and a right-aligned line lost their indent. The first space of such a
368
+ row is now a braille blank (U+2800), which Claude Code keeps. The caption shows
369
+ above or below its own part.
370
+ - **Spark showed nothing.** `burn-rate` and `tok-speed` never recorded a history,
371
+ the first sample came after 20 seconds, and an empty history drew `░░░░░░░░`.
372
+ Now every history is recorded, the first sample is taken at once, the spark adds
373
+ the current value as its last point, and an empty spark shows `—`. `spark-braille`
374
+ keeps its width, and `trend` with one point shows `—`.
375
+ - **An unknown value on a bar drew an empty bar** (it read as 0%). It shows `—` now.
376
+ - **A small value on a bar drew no cell** (6% on 10 cells). A value above 0 fills
377
+ at least one cell.
378
+ - **`fill` could make a row wrap.** It leaves the last column free.
379
+ - **Parts disappeared on a wide terminal.** When any line was wider than 72 cells,
380
+ the plan for a narrow terminal was used on every wider one too, and it could
381
+ remove a part from a line that fitted. Now a part is removed only when the
382
+ terminal is narrower than the widest line, and only from a line that does not fit.
383
+ - Clearing a text field or a weight in the panel returned HTTP 400 ("missing
384
+ argument"). The clear now reaches the CLI.
385
+ - A label, caption or separator with a control character (for example ESC) is
386
+ refused. Before, a layout could send terminal escape codes to your terminal.
387
+ - `orc statusline set … --board subagent` read `subagent` as the part type.
388
+
389
+ **What you have to do:** `orc update`. Layouts you already have compile to the same
390
+ bytes.
391
+
392
+ ---
393
+
394
+ ### v2.0.3 — the status line you designed is the status line you see _(2026-09-30)_
395
+
396
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
397
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
398
+ the top of this file.
399
+
400
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
401
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
402
+ - **Step 3 - re-apply it to your project:** `orc update`
403
+
404
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
405
+
406
+ A patch for `orc ui` ▸ CLI Hook Interface. You designed a status line, the panel said
407
+ "Your lines are showing", and the terminal showed ORC's built-in lines. Some settings
408
+ also did nothing when you applied them. Each fix is below.
409
+
410
+ **Why your design fell back to the built-in lines**
411
+
412
+ - **The hook compared version numbers, not the parts it can draw.** It refused a
413
+ compiled layout when the ORC version that compiled it was not the version of the
414
+ installed hooks. A CLI one patch newer than the hooks, or any upgrade, sent the bar
415
+ back to the built-in lines. Now `orc init` and `orc update` write `catalog_hash` into
416
+ `hooks/orc-version.json`, and the hook compares that hash with the lock. A different
417
+ version with the same parts renders your layout. An install with no hash keeps the
418
+ old version check.
419
+ - **`orc update` recompiles your layout.** Before, nothing recompiled it after an
420
+ upgrade. Both boards are recompiled when their layout exists and validates. A layout
421
+ that does not validate is not touched, and the output says so.
422
+ - **The panel tells you when your terminal does not show your layout.** `statusline
423
+ show --json` now carries `hook` (the installed hook, its version, whether it matches,
424
+ the recorded fallback and the fix). The status card shows "NOT IN YOUR TERMINAL" and
425
+ the command to copy (`orc update`, `orc update --global` or `orc statusline compile`).
426
+ `orc doctor` reports the same as `statusline-hook-skew`, with `fix_command`.
427
+ - **A good render and a compile both clear the old fallback record**, so `orc doctor`
428
+ does not report a problem that is already gone.
429
+ - **`statusline_custom: on # a comment` now arms the layout** (and the same for
430
+ `subagent_line_custom`).
431
+ - **A compiled op the hook does not know** falls back as `statusline-layout-skew`.
432
+
433
+ **Settings that did nothing**
434
+
435
+ - **You can clear a field.** An empty Name, Before, After or number sets the field back
436
+ to the shared value, and the colour and weight pickers have a "shared" option
437
+ (`--value-color inherit`). Before, the write said "ok" and changed nothing.
438
+ - **A value that starts with `-` is kept** (for example a `-` prefix).
439
+ - **Change part (swap) works** when the old shape does not fit the new part. The CLI
440
+ drops the old shape, name and width instead of refusing the swap.
441
+ - **Your own colour and weight reach a bar.** A default colour ramp won over the value
442
+ colour you set, and the emphasis was lost with it.
443
+ - **`mono` has no colour.** A default ramp no longer colours a `mono` bar.
444
+ - **Apply stops at the first refused change.** The writes use positions, so a write
445
+ after a refusal changed the wrong part. The message names the refused change and how
446
+ many changes were not sent.
447
+ - **A chip on the board shows the part as you saved it** (your name, colours and theme),
448
+ not the catalogue sample.
449
+
450
+ **Parts that drew the wrong text**
451
+
452
+ - `api-time` and `wall-time` showed milliseconds as minutes (`api 960000m`).
453
+ - `clock` showed a raw number (`1767225600000`). It shows `HH:mm` now.
454
+ - `pill` put the value inside the brackets (`⟪ORC2.0.2⟫`). It is `⟪ORC⟫2.0.2` now.
455
+ - `effort` with `dots` drew nothing.
456
+ - `lines-added` showed `+ +412`.
457
+ - Four part descriptions still said the limit is five parts. It is six.
458
+
459
+ **Also in `orc ui`**
460
+
461
+ - The global-install banner could show twice, and it offered the wrong command
462
+ (`orc wiki sync`). It shows once and offers `orc update --global`.
463
+
464
+ **What you have to do:** `orc update`. Your layout is recompiled for you.
465
+
466
+ ---
467
+
13
468
  ### v2.0.2 — the lanes record what you answered, and the reviewer always gets the card _(2026-09-28)_
14
469
 
15
470
  **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
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-2.0.2-blue.svg?style=for-the-badge)
10
+ ![Version](https://img.shields.io/badge/version-2.1.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: v2.0.2** · diperbarui 28-09-2026 · [daftar perubahan lengkap](CHANGELOG.md)
16
+ **Versi terbaru: v2.1.0** · diperbarui 02-10-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
 
@@ -275,6 +275,7 @@ pemakaian 5 jam, pemakaian mingguan, dan beberapa hal lain.
275
275
  | **`/orc-mini`** | Satu agen Sonnet 5, satu pemeriksaan build + tes, lalu kirim. Melewati review penuh dan pengujian. Satu baris **pembacaan kompleksitas** berisi angka menawarkan lane penuh kalau perubahannya lebih luas dari satu area. Bisa pindah ke alur penuh di tengah jalan kalau diminta. | [lihat](templates/skills/orc-mini/examples/mini-run-mock.md) |
276
276
  | **`/orc-fast`** | Lane tercepat. Butuh wiki yang masih segar **dan** pola kode yang sudah tersimpan; kalau ada, ia melewati tahap analis dan perencana sepenuhnya. Kalau salah satu syarat tidak ada, ia mundur ke `/orc-mini` — obrolan tidak pernah berhenti. | [lihat](mock-run/orc-fast.md) |
277
277
  | **`/orc-quick`** | Minta apa saja: perbaikan kecil, pertanyaan, mencari bug, menaikkan versi dependensi, komentar PR. Lihat → tanya sekali → kerjakan. **Selalu bertanya agen mana yang mau dipakai**, dan tidak ada pengaturan yang bisa mengubah itu. Satu **defect direproduksi merah dulu sebelum diperbaiki**. | [lihat](mock-run/orc-quick.md) |
278
+ | **`/orc-fix`** | Memperbaiki satu hal setelah review: isu Sonar, CI merah, atau bug yang ditemukan orang. Di dalam run yang sedang dijeda, ia hanya **mencatat** perbaikannya (satu observasi dan satu baris `FIX` di jejak run itu), jadi review yang melewatkannya ikut terhitung. Kalau tidak ada run yang terbuka, ia memperbaiki seperti `/orc-quick` dan bertanya agen mana yang dipakai. | [lihat](mock-run/orc-fix.md) |
278
279
  | **`/orc-diy`** | Lane racikan Anda sendiri, disusun di terminal dengan `orc diy` lalu dikompilasi. Kalau belum disetel atau sudah basi, ia menolak jalan dan menawarkan `/orc` biasa. | [lihat](mock-run/orc-diy.md) |
279
280
 
280
281
  ### Memikirkan apa yang mau dibuat
@@ -665,9 +666,19 @@ dipublikasikan mengubahnya jadi angka. Risiko yang dikutip memaksa nilai minimal
665
666
  model terkunci** — jadi apa yang benar-benar berjalan bisa diperiksa, bukan
666
667
  sekadar diminta lewat kalimat.
667
668
 
669
+ Tabel bawaan (sejak v2.1.0):
670
+
671
+ | Nilai | Agen | Model · effort |
672
+ |---|---|---|
673
+ | `[0,21)` | `orc-executor-sonnet-5-low` | Sonnet 5 · low |
674
+ | `[21,31)` | `orc-executor-sonnet-5-med` | Sonnet 5 · medium |
675
+ | `[31,41)` | `orc-executor-sonnet-5-high` | Sonnet 5 · high |
676
+ | `[41,90)` | `orc-executor-opus-5-low` | Opus 5.5 · low |
677
+ | `[90,100]` | `orc-executor-opus-5-med` | Opus 5.5 · medium |
678
+
668
679
  > **Aturan yang paling sering membuat orang bingung:** model sebuah subagen tidak
669
- > akan pernah lebih tinggi daripada model sesi utama Anda. Jalankan sesi Anda di
670
- > Opus 5.
680
+ > akan pernah lebih tinggi daripada model sesi utama Anda. Setiap pita mulai nilai
681
+ > 41 butuh sesi utama Opus 5.5.
671
682
 
672
683
  **Penjelasan lengkap — pita nilainya, `opus5_only`, dan penjaga tingkat yang
673
684
  dipasang `orc init`: [guides/model-selection.md](guides/model-selection.md).**
@@ -699,13 +710,13 @@ yang sama.
699
710
 
700
711
  ```
701
712
  templates/
702
- ├── skills/ 31 folder skill, 38 berkas SKILL.md (satu lane boleh membawa
713
+ ├── skills/ 34 folder skill, 41 berkas SKILL.md (satu lane boleh membawa
703
714
  │ sub-skill) — lane di atas, plus yang tidak punya perintah
704
715
  │ sendiri: context-combiner, orc-advisor, orc-judge,
705
716
  │ orc-analyze-mini, dan _shared/ (kesepakatan lintas lane)
706
- ├── commands/ 29 perintah garis miring
717
+ ├── commands/ 33 perintah garis miring
707
718
  ├── hooks/ penjaga effort (PreToolUse) · peringatan statusline · catatan jejak
708
- └── agents/ 48 subagen dengan model terkunci + MODEL-MAPPING.md
719
+ └── agents/ 50 subagen dengan model terkunci + MODEL-MAPPING.md
709
720
  bin/cli.js pemasang, penyunting pengaturan, penyusun alur, pembaca status
710
721
  pekerjaan, dan separuh pasti dari setiap lane. Setiap pembacaan
711
722
  bisa menjawab --json
@@ -786,25 +797,43 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
786
797
  **Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
787
798
  hanya mencetak yang lebih baru dari versi yang Anda punya.
788
799
 
789
- ### v2.0.2 - lane mencatat jawaban Anda, dan reviewer selalu mendapat kartunya _(28-09-2026)_
790
-
791
- **Patch dari eval langsung.** Habits sekarang benar-benar bekerja di run langsung, dan
792
- reviewer selalu mendapat kartunya:
793
-
794
- - **Jawaban Anda dicatat dengan benar.** `orc trace write` memeriksa setiap jawaban saat
795
- masuk dan mengembalikan jawaban yang salah bersama id yang benar. Di akhir run, ia
796
- menyebut pertanyaan yang belum dicatat.
797
- - **Reviewer selalu mendapat kartu gotcha.** Sebuah hook memberikannya ke setiap
798
- reviewer, verifier dan judge.
799
- - **Run yang tidak menulis trace dihentikan sekali** dan diberi tahu cara memperbaikinya.
800
- - **`/orc-quick` selalu mengambil snapshot undo.**
801
- - **Kartu aturan ringkas menyala secara default untuk `/orc-mini` dan `/orc-fast`** (eval E4 lulus).
802
-
803
- **Yang harus Anda lakukan:** `orc update`.
800
+ ### v2.1.0 - review terhitung, tabel nilai naik, dan log lama bisa dihapus _(02-10-2026)_
801
+
802
+ - **Tabel nilai baru dengan lima pita.** Nilai 0–40 ke Sonnet 5 (low, medium,
803
+ high). Nilai 41–89 ke Opus 5.5 low, dan 90–100 ke Opus 5.5 medium. Haiku tidak
804
+ lagi ada di tabel. **Setiap pita mulai nilai 41 butuh sesi utama Opus 5.5.**
805
+ - **Sonnet 5 berjalan di `claude-sonnet-5-5`.** Tabel harga kembali benar.
806
+ - **Reviewer sekarang `orc-reviewer-opus-5-low`.** Di eval langsung, effort low
807
+ menemukan setiap cacat yang sengaja ditanam dan masih ada di diff.
808
+ - **Pemindai wiki dan penulis CLAUDE.md memakai Opus 5.5 low** (dulu Opus 4.8).
809
+ - **Review quality tidak lagi menulis "0 so far" setelah review sungguhan.** Ia
810
+ menghitung review dari jejak. Review yang bersih juga dihitung.
811
+ - **Aturan review milik proyek Anda.** Kalau CLAUDE.md atau AGENTS.md meminta
812
+ review lain (misalnya `/code-review`), lane bertanya "review ORC, review itu,
813
+ atau lewati". `orc review policy` menunjukkan apa yang ORC temukan.
814
+ - **Lane baru `/orc-fix`.** Ia mencatat perbaikan setelah review (Sonar, CI merah,
815
+ bug) dan siapa yang memasukkan bug itu. Kartu reviewer menampilkannya, dan panel
816
+ menampilkan "Fixes after review".
817
+ - **`orc clear logs`** menampilkan jejak dan folder run yang lama. `--apply`
818
+ menghapusnya. Tidak ada yang dihapus otomatis kecuali Anda menyetel
819
+ `log_retention_auto: on`.
820
+ - **Timer status line:** 1, 2, 3, 5 atau 10 detik. Di bawah 1 detik ditolak, karena
821
+ Claude Code tidak mendukungnya.
822
+ - **Perbaikan tab Behaviour:** dengan `habits: off` Anda tetap melihat Review quality
823
+ dan Gotchas, `/orc-fast` mencatat jawaban Anda, dan log jawaban menampilkan
824
+ pertanyaannya.
825
+
826
+ **Yang harus Anda lakukan:** `orc update`. Kalau Anda punya alur `orc diy` yang
827
+ sudah dikompilasi, jalankan `orc diy compile`. Kalau ada skrip yang menyebut
828
+ `orc-reviewer-opus-5-med`, ganti menjadi `orc-reviewer-opus-5-low`. Biayanya
829
+ berubah: baca CHANGELOG.
804
830
 
805
831
  <details>
806
- <summary><strong>Rilis sebelumnya</strong> — 124 rilis, hanya judulnya. Teks lengkapnya (dalam bahasa Inggris) ada di <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
832
+ <summary><strong>Rilis sebelumnya</strong> — 127 rilis, hanya judulnya. Teks lengkapnya (dalam bahasa Inggris) ada di <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
807
833
 
834
+ - **v2.0.4** — design the status line to the last cell · _2026-09-30_
835
+ - **v2.0.3** — the status line you designed is the status line you see · _2026-09-30_
836
+ - **v2.0.2** — the lanes record what you answered, and the reviewer always gets the card · _2026-09-28_
808
837
  - **v2.0.1** — the trace keeps the gate name, and the lanes find the habits rule · _2026-09-27_
809
838
  - **v2.0.0** — the coding lanes remember what you fixed and how you work · _2026-09-27_
810
839
  - **v1.9.2** — the code graph gets its own tab, and Opus 5 becomes Opus 5.5 · _2026-09-23_