@azure-id/orc 2.0.2 → 2.1.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 (121) hide show
  1. package/CHANGELOG.md +401 -0
  2. package/README-id.md +52 -23
  3. package/README.md +50 -22
  4. package/bin/build-agents.js +24 -25
  5. package/bin/clear-logs.js +620 -0
  6. package/bin/cli.js +1155 -158
  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 +108 -27
  15. package/bin/verify-package.js +17 -6
  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 +9 -9
  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/extra-slots.md +1 -1
  45. package/mock-run/habits.md +1 -1
  46. package/mock-run/orc-aftermath.md +392 -392
  47. package/mock-run/orc-budget.md +29 -33
  48. package/mock-run/orc-cli.md +200 -200
  49. package/mock-run/orc-explain.md +86 -86
  50. package/mock-run/orc-extra.md +389 -392
  51. package/mock-run/orc-fix.md +87 -0
  52. package/mock-run/orc-pattern.md +112 -112
  53. package/mock-run/orc.md +157 -157
  54. package/package.json +1 -1
  55. package/templates/agents/MODEL-MAPPING.md +32 -29
  56. package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -2
  57. package/templates/agents/{orc-claude-writer-opus-5-med.md → orc-claude-writer-opus-5-low.md} +4 -4
  58. package/templates/agents/orc-executor-haiku-4-5.md +1 -1
  59. package/templates/agents/orc-executor-opus-5-low.md +1 -1
  60. package/templates/agents/orc-executor-sonnet-4-6-high.md +1 -1
  61. package/templates/agents/orc-executor-sonnet-4-6-med.md +1 -1
  62. package/templates/agents/orc-executor-sonnet-5-high.md +2 -2
  63. package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
  64. package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
  65. package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +2 -2
  66. package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -2
  67. package/templates/agents/orc-retro-sonnet-5-high.md +2 -2
  68. package/templates/agents/{orc-reviewer-opus-5-med.md → orc-reviewer-opus-5-low.md} +4 -4
  69. package/templates/agents/{orc-wiki-scanner-opus-5-med.md → orc-wiki-scanner-opus-5-low.md} +3 -3
  70. package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +2 -2
  71. package/templates/commands/orc-fix.md +18 -0
  72. package/templates/commands/orc-wiki.md +64 -64
  73. package/templates/hooks/README.md +75 -7
  74. package/templates/hooks/orc-session-hook.js +78 -3
  75. package/templates/hooks/orc-statusline-render.js +317 -23
  76. package/templates/hooks/orc-statusline.js +162 -49
  77. package/templates/hooks/orc-subagent-line.js +23 -5
  78. package/templates/hooks/orc-weather-fetch.js +123 -0
  79. package/templates/skills/_shared/extra-dispatch.md +5 -5
  80. package/templates/skills/_shared/gotchas.md +27 -7
  81. package/templates/skills/_shared/habits.md +2 -2
  82. package/templates/skills/_shared/opus5-only.md +14 -14
  83. package/templates/skills/_shared/phases/review.md +2 -2
  84. package/templates/skills/_shared/phases/trace-verbs.md +17 -3
  85. package/templates/skills/_shared/phases/trace.md +136 -136
  86. package/templates/skills/_shared/review-slice.md +28 -1
  87. package/templates/skills/_shared/wait.md +1 -0
  88. package/templates/skills/orc/README.md +2 -2
  89. package/templates/skills/orc/SKILL.md +1 -1
  90. package/templates/skills/orc/config.md +25 -27
  91. package/templates/skills/orc/examples/full-run-mock.md +2 -1
  92. package/templates/skills/orc/references/effort-and-mode.md +17 -17
  93. package/templates/skills/orc/references/preflight-report.md +3 -3
  94. package/templates/skills/orc/references/ultra-mode.md +1 -1
  95. package/templates/skills/orc/schemas/checkpoint.md +122 -122
  96. package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +3 -3
  97. package/templates/skills/orc/subskills/orc-review-verify/core.md +1 -1
  98. package/templates/skills/orc-analyze/SKILL.md +4 -2
  99. package/templates/skills/orc-claude/SKILL.md +14 -14
  100. package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
  101. package/templates/skills/orc-diy/SKILL.md +5 -5
  102. package/templates/skills/orc-fast/SKILL.md +8 -6
  103. package/templates/skills/orc-fix/SKILL.md +110 -0
  104. package/templates/skills/orc-mini/SKILL.md +4 -4
  105. package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
  106. package/templates/skills/orc-quick/README.md +1 -1
  107. package/templates/skills/orc-quick/SKILL.md +2 -2
  108. package/templates/skills/orc-quick/references/dispatch-gate.md +3 -2
  109. package/templates/skills/orc-quick/references/gh-mode.md +4 -2
  110. package/templates/skills/orc-retro/SKILL.md +1 -1
  111. package/templates/skills/orc-retro/examples/retro-mock.md +16 -16
  112. package/templates/skills/orc-wiki/README.md +325 -325
  113. package/templates/skills/orc-wiki/SKILL.md +195 -195
  114. package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
  115. package/templates/skills/orc-wiki/references/extra.md +2 -2
  116. package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
  117. package/templates/skills/orc-wiki/references/phases/phase-0.md +1 -1
  118. package/templates/skills/orc-wiki/references/phases/phase-2.md +3 -3
  119. package/templates/skills/orc-wiki/references/phases/phase-3c.md +3 -2
  120. package/templates/agents/orc-claude-writer-opus-4-8-high.md +0 -48
  121. package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +0 -74
package/CHANGELOG.md CHANGED
@@ -10,6 +10,407 @@ Format: `### v<version> — <title> _(<date>)_`.
10
10
 
11
11
  ---
12
12
 
13
+ ### v2.1.0 — the review counts, the score table moves up, and old logs can go _(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 has eight parts. It moves the score table up to newer models, it
26
+ makes Review quality count the reviews that really ran, and it adds a way to
27
+ delete old logs.
28
+
29
+ **1. Opus 4.x leaves the roles that do not write code**
30
+
31
+ - The deep wiki scanner and the CLAUDE.md writer now use **Opus 5.5 low**. They
32
+ used Opus 4.8 high. An agent's model change is always a rename, so the files
33
+ change name:
34
+ - `orc-wiki-scanner-opus-4-8-high` → `orc-wiki-scanner-opus-5-low`
35
+ - `orc-claude-writer-opus-4-8-high` → `orc-claude-writer-opus-5-low`
36
+ - The `opus5_only` twins of these two roles are **deleted**
37
+ (`orc-wiki-scanner-opus-5-med`, `orc-claude-writer-opus-5-med`). The defaults
38
+ are already Opus 5.5 low, so `opus5_only` has nothing to change. Under
39
+ `opus5_only`, a wiki scan and a CLAUDE.md write are now low effort, not medium
40
+ (cheaper).
41
+ - The coding lanes and the `/orc` main-session baseline do not change. Opus 4.6
42
+ is used nowhere.
43
+
44
+ **2. Sonnet 5 runs on `claude-sonnet-5-5`**
45
+
46
+ - Every Sonnet 5 agent now has `model: claude-sonnet-5-5`. The agent names keep
47
+ `-sonnet-5-`, as Opus did in v1.9.2. A config that names `claude-sonnet-5` is
48
+ still valid.
49
+
50
+ **3. A new score table with five bands**
51
+
52
+ | Score | Agent | Model · effort |
53
+ |---|---|---|
54
+ | `[0,21)` | `orc-executor-sonnet-5-low` (new) | Sonnet 5 · low |
55
+ | `[21,31)` | `orc-executor-sonnet-5-med` (new) | Sonnet 5 · medium |
56
+ | `[31,41)` | `orc-executor-sonnet-5-high` | Sonnet 5 · high |
57
+ | `[41,90)` | `orc-executor-opus-5-low` | Opus 5.5 · low |
58
+ | `[90,100]` | `orc-executor-opus-5-med` | Opus 5.5 · medium |
59
+
60
+ - The table had six bands. Seven executors now have no band
61
+ (`haiku-4-5`, `sonnet-4-6-med`, `sonnet-4-6-high`, `opus-4-7-med`,
62
+ `opus-4-7-high`, `opus-4-8-high`, `opus-5-high`). They still ship.
63
+ `rubric_bands_override`, `orc diy`'s `fixed_executor` and
64
+ `extra_fallback_agent` can still name them.
65
+ - **The cost effect:**
66
+ - Scores 41–64 move from Sonnet (Sonnet 4.6 high $3/$15, Sonnet 5 high $2/$10)
67
+ to **Opus 5.5 low ($4/$20)**. This is the largest change.
68
+ - Scores 0–29 move from Haiku 4.5 ($1/$5) to Sonnet 5 low or medium ($2/$10).
69
+ - Scores 30–39 move from Sonnet 4.6 medium ($3/$15) to Sonnet 5 high ($2/$10).
70
+ - **Every band from 41 needs an Opus 5.5 main session.** Before, this was from
71
+ 65. A lower main session runs these tasks on the session model, and the tier
72
+ line says so.
73
+ - Sandbox sample (14 scored tasks): the Opus share goes from 6 to 7 of 14, and
74
+ the Haiku share from 6 to 0. The sample is small. Measure your own project
75
+ with `orc stats`.
76
+ - **`opus5_only` does not change** (`[0,90)` low · `[90,100]` medium). It now
77
+ differs from the default table only below score 41. The `opus5_only` text in
78
+ `orc config` showed an old three-band ladder; it now shows the real two bands.
79
+ - A user route row in `orc diy` that spans two Claude bands now names both
80
+ agents.
81
+
82
+ **4. The price table is correct** (`bin/pricing.json`, dated 2026-10-01)
83
+
84
+ - `claude-sonnet-5-5` is added: $2 input · $2.50 cache write · $0.20 cache read
85
+ · $10 output per MTok.
86
+ - `claude-sonnet-5` was $3/$15; it is now $2 / $2.50 / $0.20 / $10.
87
+ - `claude-opus-5`, `claude-opus-4-8` and `claude-opus-4-7` are now
88
+ $5 / $6.25 / $0.50 / $25.
89
+ - `claude-fable-5` is now $10 / $12.50 / $1 / $50.
90
+ - `claude-sonnet-5-5` has a context window row, so `orc budget` shows its
91
+ context risk.
92
+
93
+ **5. Review**
94
+
95
+ - **The reviewer is `orc-reviewer-opus-5-low`** (renamed from
96
+ `orc-reviewer-opus-5-med`; low effort). In the live eval, low effort found
97
+ 100% of the seeded defects that were still in the diff. **A script that names
98
+ the old file breaks.** `orc update` removes the old file.
99
+ - **Review quality no longer says "0 so far" after real reviews.** It read only
100
+ `observations.jsonl`, and no lane wrote that file. Now a run with a
101
+ `FINDING-OUTCOME` line or a reviewer return in its trace counts as a review. A
102
+ clean review counts too. `orc gotcha quality --json` has two new fields:
103
+ `reviews_traced` and `reviews_observed`.
104
+ - **An observation with `author: orc` must name its `run`.** Without it, `orc
105
+ gotcha observe` exits 2 and names `run`. A `ref` that starts with the run id
106
+ fills `run` for you.
107
+ - **Your project's own review rule.** New command **`orc review policy`**. It
108
+ reads CLAUDE.md and AGENTS.md for a line that asks for a different review (for
109
+ example "All code review must go through /code-review"). When it finds one,
110
+ every coding lane that changed code asks: ORC review, that review, or skip.
111
+ The answer goes in a new trace line, `REVIEW-WHICH`. An external review is
112
+ counted as "Project reviews" and never in the ORC headline.
113
+ - **Fixes the review can see.** An observation can now carry `introduced_by`
114
+ (`orc` · `ai` · `human` · `unknown`, from `git blame`), and a fix after a
115
+ review is recorded. The reviewer card shows a `fix` line for each changed file.
116
+ A review that missed a later fix is counted as a miss.
117
+ - **New lane `/orc-fix`** with the commands **`orc fix classify`**, **`orc fix
118
+ record`** and **`orc fix list`**. Inside a paused run, `/orc-fix` only records:
119
+ one observation and one `FIX` line in the trace of that run. With no run open,
120
+ it fixes the way `/orc-quick` does, and it asks which agent to use. It refuses
121
+ while a dispatch is in flight.
122
+
123
+ **6. The Behaviour tab**
124
+
125
+ - The gate habit now proposes: one agent name written three ways now counts as
126
+ one answer.
127
+ - `/orc-fast` reads its lane config first, so it records your answers.
128
+ `/orc-analyze` and `/orc-diy` do the same.
129
+ - With `habits: off` you still see the Review quality and Gotchas tabs. Review
130
+ learning is always on.
131
+ - The answer log shows the question, not only its id.
132
+ - A run is dated from its file name. Rows say `orc-quick`, not `quick`. An empty
133
+ row is not shown.
134
+ - At the end of a run, `orc trace write` names a question whose key you set in
135
+ your config when the lane wrote no answer for it.
136
+
137
+ **7. Clear old logs**
138
+
139
+ - New command **`orc clear logs`**. It shows the old traces and finished run
140
+ folders that it can delete, and why it keeps the rest. **`orc clear logs
141
+ --apply`** deletes them.
142
+ - New key **`log_retention_days`**: 30 · 60 · 90 · 120 · 240 · 360 days
143
+ (default 90). The cutoff is never shorter than `aftermath_window_days`.
144
+ - It never deletes your data, a waiting run, the active trace, a file younger
145
+ than 6 hours, or a trace with a habit answer that is younger than 180 days.
146
+ - `orc stats` keeps the totals of a deleted run in `.claude/orc/logs-rollup.json`
147
+ and says "includes N pruned runs".
148
+ - **The promise "log_dir is never deleted automatically" changes.** It is still
149
+ true by default. New key **`log_retention_auto`** (default `off`): `on` runs
150
+ the delete after a lane's last trace packet, at most once per 24 hours.
151
+ - `orc ui` ▸ Maintenance has a **Clear old logs** row with a full preview.
152
+
153
+ **8. The status line timer**
154
+
155
+ - New key **`statusline_refresh`**: `off` · `1` · `2` · `3` · `5` · `10` seconds
156
+ (3 is new). It writes `statusLine.refreshInterval` in `settings.json`, the same
157
+ as `orc statusline refresh`, and `orc config list` reads it from there.
158
+ - **The floor is 1 second.** Claude Code gives no timer below 1 second. A value
159
+ below 1 is refused, and the message names the nearest value. In `orc ui` ▸ CLI
160
+ Hook Interface, 0.2 · 0.5 · 0.7 are disabled.
161
+ - With a timer, a pet moves one step for each redraw. `usage.json` is written
162
+ only when the numbers change.
163
+ - `orc doctor` tells you when the value is below the floor, when a moving part
164
+ has no timer, and when the timer is on the sub-agent board.
165
+
166
+ **Defects found in the live evals, and fixed**
167
+
168
+ - **D1:** `/orc-fast` refused to record review observations. Every lane that
169
+ runs a review now records them.
170
+ - **D2:** a free-text `FINDING` line (`FINDING 9 findings — P0×2 …`) was
171
+ accepted. The CLI now checks the count head (`FINDING p0= p1= p2= p3=`).
172
+ - **D3:** a `REVIEW-WHICH` line was written with no project rule and no name.
173
+ The CLI now checks the format, and refuses it when `orc review policy` says
174
+ "orc".
175
+ - **D4:** the question "which review" was asked with no project rule. It is now
176
+ refused by name.
177
+ - **D5:** a `FINDING-OUTCOME` line used its own category names. The categories
178
+ are now checked against the closed set of the review return.
179
+ - **D6:** an `/orc` run skipped review and verify for a small change. At the
180
+ end, `orc trace write` now names the skipped phase. `/orc` always runs both.
181
+ - **D7:** an `/orc-quick` run wrote its trace lines by hand. No CLI check and no
182
+ end-of-run reminder ran, and the lane then said the findings were recorded.
183
+ The session hook now stops the turn once when a trace has more narration lines
184
+ than its `.jsonl` twin, and names `orc trace write` and `orc gotcha observe`.
185
+ - **D8:** an `/orc` run ignored the end-of-run reminder to record its review
186
+ outcomes. The session hook now stops the turn once when a finished run had a
187
+ review with findings and no observation names the run.
188
+
189
+ **Live evals.** Five rounds ran `/orc-mini`, `/orc-fast`, `/orc-quick` and `/orc`
190
+ in a sandbox (17 sessions, about 43 USD). The reviewer at low effort found every
191
+ seeded defect that was still in the diff, habit capture and the review count
192
+ passed, and D1–D8 were each found live, fixed, and checked again in a later
193
+ round. The `/orc-fix` eval (E-F1) is still to do. The result
194
+ files are in `eval/results/2.1.0/` (maintainer copy, not in the package).
195
+
196
+ **What you have to do**
197
+
198
+ | You have … | What happens |
199
+ |---|---|
200
+ | any install | Run `orc update`. It removes the three renamed agent files and the two deleted twins. |
201
+ | a compiled `orc diy` flow | The status line shows `STALE→recompile`, and `/orc-diy` refuses. Run `orc diy compile`. |
202
+ | `rubric_bands_override`, `fixed_executor` or `extra_fallback_agent` with an old executor | It works. Those executors still ship. |
203
+ | 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. |
204
+ | a config or old traces that name `claude-sonnet-5` | They still work and still price. |
205
+ | old traces that name the old reviewer | `orc stats` and `/orc-retro` still read them. |
206
+ | a script that names `orc-reviewer-opus-5-med` | It breaks. Change it to `orc-reviewer-opus-5-low`. |
207
+ | a script that observes with `author: orc` and no `run` | It exits 2 and names `run`. Add `run`. |
208
+ | 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. |
209
+ | Review quality in the panel | The review count goes up, because traces count now. Acceptance does not change. |
210
+ | `refreshInterval` 1–60 in `settings.json` | `orc update` keeps it. |
211
+ | habits off | `orc lane config --json --no-probes` is byte-identical. |
212
+
213
+ New files `review-scope.jsonl` and `logs-rollup.json` are your data: they are not
214
+ in the install manifest, they survive `orc update`, `--prune` and `doctor --fix`,
215
+ and `orc clear logs` never deletes them.
216
+
217
+ ---
218
+
219
+ ### v2.0.4 — design the status line to the last cell _(2026-09-30)_
220
+
221
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
222
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
223
+ the top of this file.
224
+
225
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
226
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
227
+ - **Step 3 - re-apply it to your project:** `orc update`
228
+
229
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
230
+
231
+ `orc ui` ▸ CLI Hook Interface can now change almost everything a terminal cell can
232
+ show. Before, a bar drew only its cells: you could not put words before, after,
233
+ above or below it, and a gradient used fixed colours. Every item below is a
234
+ `orc statusline set` flag, and the part editor has a control for each one.
235
+
236
+ **Words around any shape**
237
+
238
+ - **A name on every shape.** `--label` now draws on a bar, a spark, an icon and a
239
+ motion mark too. `--label-pos before|after|above|below` says where it goes. A name
240
+ you already typed on a bar shows before it when you choose no position.
241
+ - **Text before and after the shape.** `--prefix` and `--suffix` wrap a bar, for
242
+ example `[██░░]`.
243
+ - **The number next to the bar.** `--value-pos before|after` draws the value of the
244
+ part beside its shape, with your number format.
245
+ - **Captions.** `--caption "five-hour window"` puts a short text on a row above or
246
+ below the part, at the column of the part (`--caption-pos`, `--caption-align
247
+ left|center|right`, `--caption-color`, `--caption-case`). `{value}` and `{label}`
248
+ in the text are replaced.
249
+ - **Small text.** A terminal has no font size, so `--case` (and `--caption-case`)
250
+ have three Unicode styles: `small` (ꜱᴍᴀʟʟ ᴄᴀᴘꜱ), `super` (ˢᵘᵖᵉʳ) and `sub` (numbers like ₆₁).
251
+
252
+ **Bars in your own colours and characters**
253
+
254
+ - `--fill-color` and `--empty-color` colour the filled and the empty cells.
255
+ - `--ramp-colors "#22c55e,#eab308,#ef4444"` and `--ramp-stops "0,60,85"` give any
256
+ part your own colour range. On `gradient` with hex colours, each cell is blended
257
+ in true colour.
258
+ - `--fill-char ■ --empty-char □` draw the bar with your own characters (one cell
259
+ each).
260
+ - `--threshold` sets the mark on `split` and `marker`.
261
+
262
+ **More control on every part**
263
+
264
+ - `--brackets "⟦,⟧"`, `--pad-left`, `--pad-right`, `--align`, `--sign`, `--max-len`
265
+ and `--unknown dash|hide`.
266
+ - `--bg` and any `#rrggbb` colour are in the editor now, and you can pick more than
267
+ one weight (bold and underline).
268
+ - `--state-color "ok=green,critical=red"` and `--state-glyph "ok=✓"` per state.
269
+ - `--param k=v` sets the settings of a part (the text of `text`, the clock format).
270
+
271
+ **Lines**
272
+
273
+ - `orc statusline line <n> --align right|center` and `--sep-color`. The panel also
274
+ takes your own separator text.
275
+
276
+ **Six parts that drew nothing now work**
277
+
278
+ - `text`, `divider`, `spacer`, `icon-static`, `fill` and `config` bound a value that
279
+ is always empty, and no command could set their text. They draw now. `fill`
280
+ pushes the parts after it to the right edge of the terminal.
281
+
282
+ **Animated pets and weather**
283
+
284
+ - **Eight pets that move** (group "Pets and motion"): `pet-cat` (a pixel cat drawn
285
+ in braille dots), `pet-mouse`, `pet-chase` (the cat chases the mouse),
286
+ `pet-cat-text` (ᓚᘏᗢ), `pet-pacman` (it eats the dots), `pet-fish`, `pet-bird` and
287
+ `pet-dog`. Each has three shapes: `run` (across the track), `bounce` (right and
288
+ back) and `idle` (stays and moves its legs), a track width of 6–40 cells, and a
289
+ `speed` setting.
290
+ - **Weather:** `weather` (the temperature), `weather-icon` (☼ ◐ ☁ ☂ ❄ ϟ ≋) and
291
+ `weather-desc`. Set `location` (empty = found from your network address) and
292
+ `units` (`metric` or `us`). The hook never waits on the network: a small
293
+ background fetcher asks wttr.in at most every 30 minutes, and only while a weather
294
+ part is on your layout. `ORC_STATUSLINE_NO_NET=1` stops it.
295
+ - **`orc statusline refresh <seconds|off>`** sets `refreshInterval` in the status
296
+ line setting. Claude Code redraws the status line only on events, or on this
297
+ timer (at least 1 second). So a pet moves about one step per second. The panel has
298
+ the same control, and tells you when a moving part has no timer.
299
+
300
+ **The panel**
301
+
302
+ - **Live preview of unsaved changes.** The panel replays your staged changes in a
303
+ temporary copy and draws the real result before you press Apply. A change that
304
+ the CLI refuses is named before Apply.
305
+ - **The preview moves.** A layout with a pet or a motion mark plays 12 frames in the
306
+ panel (at most 20 seconds, never when your system asks for reduced motion).
307
+ - A new `designer` preset shows the new powers.
308
+
309
+ **Fixes**
310
+
311
+ - **Text above or below a part showed at the start of the line.** Claude Code
312
+ removes the spaces at the start of every status line row, so a caption row, a
313
+ line prefix and a right-aligned line lost their indent. The first space of such a
314
+ row is now a braille blank (U+2800), which Claude Code keeps. The caption shows
315
+ above or below its own part.
316
+ - **Spark showed nothing.** `burn-rate` and `tok-speed` never recorded a history,
317
+ the first sample came after 20 seconds, and an empty history drew `░░░░░░░░`.
318
+ Now every history is recorded, the first sample is taken at once, the spark adds
319
+ the current value as its last point, and an empty spark shows `—`. `spark-braille`
320
+ keeps its width, and `trend` with one point shows `—`.
321
+ - **An unknown value on a bar drew an empty bar** (it read as 0%). It shows `—` now.
322
+ - **A small value on a bar drew no cell** (6% on 10 cells). A value above 0 fills
323
+ at least one cell.
324
+ - **`fill` could make a row wrap.** It leaves the last column free.
325
+ - **Parts disappeared on a wide terminal.** When any line was wider than 72 cells,
326
+ the plan for a narrow terminal was used on every wider one too, and it could
327
+ remove a part from a line that fitted. Now a part is removed only when the
328
+ terminal is narrower than the widest line, and only from a line that does not fit.
329
+ - Clearing a text field or a weight in the panel returned HTTP 400 ("missing
330
+ argument"). The clear now reaches the CLI.
331
+ - A label, caption or separator with a control character (for example ESC) is
332
+ refused. Before, a layout could send terminal escape codes to your terminal.
333
+ - `orc statusline set … --board subagent` read `subagent` as the part type.
334
+
335
+ **What you have to do:** `orc update`. Layouts you already have compile to the same
336
+ bytes.
337
+
338
+ ---
339
+
340
+ ### v2.0.3 — the status line you designed is the status line you see _(2026-09-30)_
341
+
342
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
343
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
344
+ the top of this file.
345
+
346
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
347
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
348
+ - **Step 3 - re-apply it to your project:** `orc update`
349
+
350
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
351
+
352
+ A patch for `orc ui` ▸ CLI Hook Interface. You designed a status line, the panel said
353
+ "Your lines are showing", and the terminal showed ORC's built-in lines. Some settings
354
+ also did nothing when you applied them. Each fix is below.
355
+
356
+ **Why your design fell back to the built-in lines**
357
+
358
+ - **The hook compared version numbers, not the parts it can draw.** It refused a
359
+ compiled layout when the ORC version that compiled it was not the version of the
360
+ installed hooks. A CLI one patch newer than the hooks, or any upgrade, sent the bar
361
+ back to the built-in lines. Now `orc init` and `orc update` write `catalog_hash` into
362
+ `hooks/orc-version.json`, and the hook compares that hash with the lock. A different
363
+ version with the same parts renders your layout. An install with no hash keeps the
364
+ old version check.
365
+ - **`orc update` recompiles your layout.** Before, nothing recompiled it after an
366
+ upgrade. Both boards are recompiled when their layout exists and validates. A layout
367
+ that does not validate is not touched, and the output says so.
368
+ - **The panel tells you when your terminal does not show your layout.** `statusline
369
+ show --json` now carries `hook` (the installed hook, its version, whether it matches,
370
+ the recorded fallback and the fix). The status card shows "NOT IN YOUR TERMINAL" and
371
+ the command to copy (`orc update`, `orc update --global` or `orc statusline compile`).
372
+ `orc doctor` reports the same as `statusline-hook-skew`, with `fix_command`.
373
+ - **A good render and a compile both clear the old fallback record**, so `orc doctor`
374
+ does not report a problem that is already gone.
375
+ - **`statusline_custom: on # a comment` now arms the layout** (and the same for
376
+ `subagent_line_custom`).
377
+ - **A compiled op the hook does not know** falls back as `statusline-layout-skew`.
378
+
379
+ **Settings that did nothing**
380
+
381
+ - **You can clear a field.** An empty Name, Before, After or number sets the field back
382
+ to the shared value, and the colour and weight pickers have a "shared" option
383
+ (`--value-color inherit`). Before, the write said "ok" and changed nothing.
384
+ - **A value that starts with `-` is kept** (for example a `-` prefix).
385
+ - **Change part (swap) works** when the old shape does not fit the new part. The CLI
386
+ drops the old shape, name and width instead of refusing the swap.
387
+ - **Your own colour and weight reach a bar.** A default colour ramp won over the value
388
+ colour you set, and the emphasis was lost with it.
389
+ - **`mono` has no colour.** A default ramp no longer colours a `mono` bar.
390
+ - **Apply stops at the first refused change.** The writes use positions, so a write
391
+ after a refusal changed the wrong part. The message names the refused change and how
392
+ many changes were not sent.
393
+ - **A chip on the board shows the part as you saved it** (your name, colours and theme),
394
+ not the catalogue sample.
395
+
396
+ **Parts that drew the wrong text**
397
+
398
+ - `api-time` and `wall-time` showed milliseconds as minutes (`api 960000m`).
399
+ - `clock` showed a raw number (`1767225600000`). It shows `HH:mm` now.
400
+ - `pill` put the value inside the brackets (`⟪ORC2.0.2⟫`). It is `⟪ORC⟫2.0.2` now.
401
+ - `effort` with `dots` drew nothing.
402
+ - `lines-added` showed `+ +412`.
403
+ - Four part descriptions still said the limit is five parts. It is six.
404
+
405
+ **Also in `orc ui`**
406
+
407
+ - The global-install banner could show twice, and it offered the wrong command
408
+ (`orc wiki sync`). It shows once and offers `orc update --global`.
409
+
410
+ **What you have to do:** `orc update`. Your layout is recompiled for you.
411
+
412
+ ---
413
+
13
414
  ### v2.0.2 — the lanes record what you answered, and the reviewer always gets the card _(2026-09-28)_
14
415
 
15
416
  **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_