@azure-id/orc 1.9.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.
- package/CHANGELOG.md +722 -0
- package/README-id.md +56 -42
- package/README.md +58 -41
- package/bin/build-agents.js +125 -29
- package/bin/clear-logs.js +620 -0
- package/bin/cli.js +1873 -180
- package/bin/fix.js +459 -0
- package/bin/gotcha-import.js +1081 -0
- package/bin/gotcha.js +1566 -0
- package/bin/graph-query.js +1 -1
- package/bin/graph.js +717 -717
- package/bin/habit.js +1538 -0
- package/bin/mockrun-catalog.js +284 -276
- package/bin/onboarding-content.js +2 -1
- package/bin/pricing.json +28 -21
- package/bin/run-undo.js +398 -0
- package/bin/trace-write.js +869 -0
- package/bin/verify-contracts.js +627 -100
- package/bin/verify-package.js +68 -10
- package/bin/webui/api.js +151 -6
- package/bin/webui/app.html +239 -232
- package/bin/webui/css/00-tokens.css +110 -92
- package/bin/webui/css/04-motion.css +87 -0
- package/bin/webui/css/06-responsive.css +203 -178
- package/bin/webui/css/panels/behaviour.css +205 -0
- package/bin/webui/css/panels/hookui.css +79 -0
- package/bin/webui/fixtures/behaviour.js +562 -0
- package/bin/webui/fixtures/extra.js +9 -9
- package/bin/webui/fixtures/flow.js +81 -81
- package/bin/webui/fixtures/hookui.js +506 -431
- package/bin/webui/fixtures/index.js +66 -3
- package/bin/webui/fixtures/knowledge.js +9 -3
- package/bin/webui/fixtures/maintenance.js +123 -42
- package/bin/webui/fixtures/rules.js +1007 -1002
- package/bin/webui/fixtures/settings.js +6 -7
- package/bin/webui/fixtures/stats.js +25 -6
- package/bin/webui/fixtures/wait.js +98 -97
- package/bin/webui/i18n/en/behaviour.json +156 -0
- package/bin/webui/i18n/en/hookui.json +290 -194
- package/bin/webui/i18n/en/maintenance.json +71 -52
- package/bin/webui/i18n/en/nav.json +25 -24
- package/bin/webui/i18n/en/settings.json +60 -60
- package/bin/webui/i18n/en/tour.json +37 -35
- package/bin/webui/i18n/id/behaviour.json +156 -0
- package/bin/webui/i18n/id/hookui.json +290 -194
- package/bin/webui/i18n/id/maintenance.json +71 -52
- package/bin/webui/i18n/id/nav.json +25 -24
- package/bin/webui/i18n/id/settings.json +60 -60
- package/bin/webui/i18n/id/tour.json +37 -35
- package/bin/webui/js/01-i18n.js +155 -154
- package/bin/webui/js/05-banners.js +181 -172
- package/bin/webui/js/06-edit.js +193 -183
- package/bin/webui/js/90-tour.js +498 -494
- package/bin/webui/js/91-shortcuts.js +126 -126
- package/bin/webui/js/99-boot.js +121 -118
- package/bin/webui/js/panels/behaviour.js +1087 -0
- package/bin/webui/js/panels/hookui.js +2196 -1691
- package/bin/webui/js/panels/maintenance.js +336 -235
- package/bin/webui/js/panels/settings.js +726 -719
- package/mock-run/INDEX.md +110 -107
- package/mock-run/extra-slots.md +1 -1
- package/mock-run/gotcha-import.md +118 -0
- package/mock-run/habits.md +129 -0
- package/mock-run/orc-aftermath.md +392 -392
- package/mock-run/orc-budget.md +29 -33
- package/mock-run/orc-cli.md +200 -200
- package/mock-run/orc-explain.md +86 -86
- package/mock-run/orc-extra.md +389 -392
- package/mock-run/orc-fix.md +87 -0
- package/mock-run/orc-pattern.md +112 -112
- package/mock-run/orc-quick.md +6 -1
- package/mock-run/orc.md +157 -157
- package/package.json +1 -1
- package/templates/agents/MODEL-MAPPING.md +37 -34
- package/templates/agents/orc-advisor-opus-5-xhigh.md +1 -7
- package/templates/agents/orc-analyze-mini-opus-5-med.md +1 -6
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +2 -5
- package/templates/agents/{orc-claude-writer-opus-4-8-high.md → orc-claude-writer-opus-5-low.md} +48 -53
- package/templates/agents/orc-context-combiner-opus-5-high.md +1 -11
- package/templates/agents/orc-executor-haiku-4-5.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-high.md +14 -6
- package/templates/agents/orc-executor-opus-4-7-med.md +14 -6
- package/templates/agents/orc-executor-opus-4-8-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-high.md +14 -6
- package/templates/agents/orc-executor-opus-5-low.md +14 -6
- package/templates/agents/orc-executor-opus-5-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-high.md +14 -6
- package/templates/agents/orc-executor-sonnet-4-6-med.md +14 -6
- package/templates/agents/orc-executor-sonnet-5-high.md +15 -7
- package/templates/agents/orc-executor-sonnet-5-low.md +155 -0
- package/templates/agents/orc-executor-sonnet-5-med.md +155 -0
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +1 -10
- package/templates/agents/orc-judge-opus-5-xhigh.md +5 -9
- package/templates/agents/orc-learn-writer-opus-5-low.md +1 -7
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +1 -8
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +58 -63
- package/templates/agents/orc-planner-mini-opus-5-med.md +1 -4
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +2 -3
- package/templates/agents/orc-planner-opus-5-med.md +1 -4
- package/templates/agents/orc-recon-opus-5-low.md +1 -8
- package/templates/agents/orc-recon-sonnet-4-6-med.md +1 -8
- package/templates/agents/orc-retro-opus-5-med.md +6 -8
- package/templates/agents/orc-retro-sonnet-5-high.md +7 -8
- package/templates/agents/orc-reviewer-opus-5-low.md +96 -0
- package/templates/agents/orc-scout-opus-5-low.md +1 -6
- package/templates/agents/orc-scout-sonnet-4-6-high.md +35 -39
- package/templates/agents/orc-system-analyst-opus-5-high.md +1 -6
- package/templates/agents/orc-test-author-opus-5-med.md +4 -5
- package/templates/agents/orc-trace-writer-haiku-4-5.md +3 -7
- package/templates/agents/orc-verifier-opus-5-med.md +16 -8
- package/templates/agents/{orc-wiki-scanner-opus-4-8-high.md → orc-wiki-scanner-opus-5-low.md} +74 -79
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +97 -106
- package/templates/commands/orc-analyze.md +13 -21
- package/templates/commands/orc-fast.md +10 -15
- package/templates/commands/orc-fix.md +18 -0
- package/templates/commands/orc-poly.md +12 -21
- package/templates/commands/orc-pr-driver.md +11 -30
- package/templates/commands/orc-pr-setup.md +10 -31
- package/templates/commands/orc-route.md +11 -41
- package/templates/commands/orc-test.md +5 -60
- package/templates/commands/orc-wiki.md +64 -64
- package/templates/hooks/README.md +109 -7
- package/templates/hooks/orc-session-hook.js +339 -0
- package/templates/hooks/orc-statusline-render.js +317 -23
- package/templates/hooks/orc-statusline.js +165 -50
- package/templates/hooks/orc-subagent-line.js +23 -5
- package/templates/hooks/orc-weather-fetch.js +123 -0
- package/templates/skills/_shared/README.md +9 -0
- package/templates/skills/_shared/code-graph.md +47 -55
- package/templates/skills/_shared/config-precedence.md +3 -1
- package/templates/skills/_shared/extra-dispatch.md +78 -93
- package/templates/skills/_shared/gotchas.md +248 -177
- package/templates/skills/_shared/habits.md +101 -0
- package/templates/skills/_shared/lane-contract.md +84 -0
- package/templates/skills/_shared/opus5-only.md +14 -14
- package/templates/skills/_shared/phases/README.md +142 -83
- package/templates/skills/_shared/phases/analyst-gates.md +10 -21
- package/templates/skills/_shared/phases/execution.md +8 -14
- package/templates/skills/_shared/phases/house-rules.md +27 -32
- package/templates/skills/_shared/phases/intake.md +127 -133
- package/templates/skills/_shared/phases/mock-example.md +46 -56
- package/templates/skills/_shared/phases/plan-handoff.md +91 -97
- package/templates/skills/_shared/phases/planning.md +7 -17
- package/templates/skills/_shared/phases/preflight.md +19 -42
- package/templates/skills/_shared/phases/review.md +24 -28
- package/templates/skills/_shared/phases/rules.md +18 -42
- package/templates/skills/_shared/phases/scoring.md +55 -65
- package/templates/skills/_shared/phases/security-checklist.md +46 -50
- package/templates/skills/_shared/phases/security.md +45 -55
- package/templates/skills/_shared/phases/ship.md +6 -15
- package/templates/skills/_shared/phases/stop-resume.md +2 -5
- package/templates/skills/_shared/phases/summary.md +73 -48
- package/templates/skills/_shared/phases/testgen.md +41 -51
- package/templates/skills/_shared/phases/trace-verbs.md +447 -0
- package/templates/skills/_shared/phases/trace.md +66 -297
- package/templates/skills/_shared/phases/verify.md +62 -70
- package/templates/skills/_shared/phases/wave-grouping.md +128 -133
- package/templates/skills/_shared/phases/wiki-consult.md +10 -6
- package/templates/skills/_shared/read-ladder.md +2 -55
- package/templates/skills/_shared/return-validation.md +17 -70
- package/templates/skills/_shared/review-slice.md +106 -0
- package/templates/skills/_shared/smoke-gate.md +46 -28
- package/templates/skills/_shared/wait.md +1 -0
- package/templates/skills/context-combiner/SKILL.md +15 -44
- package/templates/skills/orc/README.md +2 -2
- package/templates/skills/orc/SKILL.md +35 -63
- package/templates/skills/orc/config.md +25 -27
- package/templates/skills/orc/examples/full-run-mock.md +2 -1
- package/templates/skills/orc/references/effort-and-mode.md +17 -17
- package/templates/skills/orc/references/pattern-gate.md +89 -89
- package/templates/skills/orc/references/phases/intake.md +41 -47
- package/templates/skills/orc/references/phases/integration.md +13 -19
- package/templates/skills/orc/references/preflight-report.md +11 -12
- package/templates/skills/orc/references/ultra-mode.md +9 -7
- package/templates/skills/orc/schemas/checkpoint.md +122 -122
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +27 -73
- package/templates/skills/orc/subskills/orc-execution/core.md +12 -99
- package/templates/skills/orc/subskills/orc-execution/subagent.md +14 -13
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +12 -53
- package/templates/skills/orc/subskills/orc-review-verify/core.md +52 -135
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -7
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +11 -22
- package/templates/skills/orc/subskills/orc-testgen/core.md +20 -59
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -7
- package/templates/skills/orc-advisor/SKILL.md +56 -60
- package/templates/skills/orc-analyze/SKILL.md +33 -67
- package/templates/skills/orc-analyze/schemas/report-audit.md +2 -1
- package/templates/skills/orc-analyze/schemas/report-prose.md +2 -1
- package/templates/skills/orc-analyze-mini/SKILL.md +35 -70
- package/templates/skills/orc-claude/SKILL.md +14 -14
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -65
- package/templates/skills/orc-diy/README.md +31 -0
- package/templates/skills/orc-diy/SKILL.md +27 -78
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -18
- package/templates/skills/orc-fast/SKILL.md +49 -75
- package/templates/skills/orc-fix/SKILL.md +110 -0
- package/templates/skills/orc-judge/SKILL.md +77 -82
- package/templates/skills/orc-mini/SKILL.md +64 -112
- package/templates/skills/orc-mini/examples/mini-run-mock.md +4 -2
- package/templates/skills/orc-pattern/SKILL.md +27 -48
- package/templates/skills/orc-poly/SKILL.md +32 -61
- package/templates/skills/orc-pr-driver/SKILL.md +25 -51
- package/templates/skills/orc-pr-driver/references/green-gate.md +113 -105
- package/templates/skills/orc-pr-setup/SKILL.md +20 -45
- package/templates/skills/orc-quick/README.md +44 -3
- package/templates/skills/orc-quick/SKILL.md +77 -108
- package/templates/skills/orc-quick/references/dispatch-gate.md +18 -6
- package/templates/skills/orc-quick/references/gh-mode.md +50 -1
- package/templates/skills/orc-quick/references/look.md +3 -1
- package/templates/skills/orc-retro/SKILL.md +20 -19
- package/templates/skills/orc-retro/examples/retro-mock.md +17 -17
- package/templates/skills/orc-route/SKILL.md +25 -45
- package/templates/skills/orc-test/SKILL.md +16 -37
- package/templates/skills/orc-verify/SKILL.md +14 -32
- package/templates/skills/orc-wait/SKILL.md +156 -163
- package/templates/skills/orc-wiki/README.md +325 -325
- package/templates/skills/orc-wiki/SKILL.md +195 -195
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -37
- package/templates/skills/orc-wiki/references/extra.md +2 -2
- package/templates/skills/orc-wiki/references/partial-refresh.md +276 -271
- package/templates/skills/orc-wiki/references/phases/phase-0.md +2 -7
- package/templates/skills/orc-wiki/references/phases/phase-1.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-2.md +4 -9
- package/templates/skills/orc-wiki/references/phases/phase-3.md +1 -6
- package/templates/skills/orc-wiki/references/phases/phase-3c.md +4 -8
- package/templates/agents/orc-claude-writer-opus-5-med.md +0 -55
- package/templates/agents/orc-reviewer-opus-5-med.md +0 -60
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +0 -81
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,728 @@ 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
|
+
|
|
414
|
+
### v2.0.2 — the lanes record what you answered, and the reviewer always gets the card _(2026-09-28)_
|
|
415
|
+
|
|
416
|
+
**Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
|
|
417
|
+
is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
|
|
418
|
+
the top of this file.
|
|
419
|
+
|
|
420
|
+
- **Step 1 - release the command from the old package:** `npm uninstall -g orc`
|
|
421
|
+
- **Step 2 - install the current package:** `npm i -g @azure-id/orc`
|
|
422
|
+
- **Step 3 - re-apply it to your project:** `orc update`
|
|
423
|
+
|
|
424
|
+
**Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
|
|
425
|
+
|
|
426
|
+
A patch from the live evals of 2.0 (E1–E4 in the eval sandbox). The habits feature did
|
|
427
|
+
not work in live use until this release: the lanes forgot to record answers, used their
|
|
428
|
+
own option and question names, and recorded a follow-up decision as the same question.
|
|
429
|
+
Each fix below is in the CLI or a hook, not in more lane prose.
|
|
430
|
+
|
|
431
|
+
- **`orc trace write` checks every `ASK` as it arrives.** A wrong option id, an unknown
|
|
432
|
+
question id, or a repeat of the same question with no new executor dispatch (a
|
|
433
|
+
follow-up) is kept OUT of the trace and handed back with the real ids, first in the
|
|
434
|
+
answer. The rest of the packet is written.
|
|
435
|
+
- **The FINISH packet names the questions nobody recorded.** With `habits` on, the answer
|
|
436
|
+
lists each registered question of the lane that has no `ASK` in the run, with its
|
|
437
|
+
option ids. A late packet with `run: <trace name>` still lands after `.current` is gone.
|
|
438
|
+
- **Habit evidence is not split by context.** The "any context" row counts every answer;
|
|
439
|
+
a row with `kind`/`branch` is a refinement. A dispatch-gate answer may list a
|
|
440
|
+
third-party slot. The habit cache version changed, so a parser change clears it.
|
|
441
|
+
- **The narration guard** (session hook, `Stop`). A run that dispatched agents and wrote
|
|
442
|
+
NO narration line is stopped ONCE, with the command that fixes it. Never twice, never
|
|
443
|
+
for a subagent.
|
|
444
|
+
- **The reviewer always gets the gotcha card** (session hook, `SubagentStart`). A live
|
|
445
|
+
review got no card in 5 of 5 runs. Now every `orc-reviewer-*`, `orc-verifier-*` and
|
|
446
|
+
`orc-judge-*` receives the card for the files git sees as changed. `orc update` wires
|
|
447
|
+
the new event; `orc doctor` names it when it is missing.
|
|
448
|
+
- **`/orc-quick` takes the undo snapshot.** Its own start step names
|
|
449
|
+
`orc run snapshot` (before: 3 of 8 runs took it; after: 6 of 6).
|
|
450
|
+
- **`rules_card_compact` is `on` by default.** Eval E4 (12 runs) passed: no new
|
|
451
|
+
`unmet[]`, no new `rules_conflicts[]`, the smoke gate green on the first try in 6 of 6
|
|
452
|
+
runs with the compact card against 3 of 6 without. `off` gives the full card.
|
|
453
|
+
|
|
454
|
+
**Eval results:** E1 (the trim broke nothing) passed · E2 (habits) passed — 6 answers →
|
|
455
|
+
the offer "5 of 5" → accepted → the next run marks `→ usual` and still asks; with
|
|
456
|
+
`habits: off` zero `ASK` lines · E3 (the gotcha card): E3 (the gotcha card): with the card the reviewer found all 3 recurring defects in 5 of 5 runs (without: 2.4 of 3; the float-money defect 5 of 5 against 2 of 5), ordinary recall was equal (3.0), false positives fell from 2.2 to 1.0 per run. The planned gap of 1.0 could not be reached: without the card the reviewer already finds 2 of the 3, so the most the card could add was 0.6, and it added all of it · E4 passed (above).
|
|
457
|
+
|
|
458
|
+
**What you have to do:** `orc update`.
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
462
|
+
### v2.0.1 — the trace keeps the gate name, and the lanes find the habits rule _(2026-09-27)_
|
|
463
|
+
|
|
464
|
+
**Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
|
|
465
|
+
is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
|
|
466
|
+
the top of this file.
|
|
467
|
+
|
|
468
|
+
- **Step 1 - release the command from the old package:** `npm uninstall -g orc`
|
|
469
|
+
- **Step 2 - install the current package:** `npm i -g @azure-id/orc`
|
|
470
|
+
- **Step 3 - re-apply it to your project:** `orc update`
|
|
471
|
+
|
|
472
|
+
**Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
|
|
473
|
+
|
|
474
|
+
A patch. The first live runs of 2.0.0 in the eval sandbox found four defects. Nothing
|
|
475
|
+
changes for a user who has `habits` off, except that traces are complete again.
|
|
476
|
+
|
|
477
|
+
- **`orc trace write` keeps the gate name.** A lane often sent `verb: GATE` and put
|
|
478
|
+
the rest in the tail. The CLI then wrote `GATE :: …`, and the name and the
|
|
479
|
+
`pass|bounce|escalate` word were lost (`orc stats` and `/orc-retro` read them).
|
|
480
|
+
The CLI now puts each event into the shape of its own grammar in `TRACE_VERBS`:
|
|
481
|
+
- `note:`, `detail:` or `text:` is used as the tail when `tail` is missing
|
|
482
|
+
(before: an EMPTY `.txt` line);
|
|
483
|
+
- a ` :: ` inside `verb` splits into head and tail, and a tail that starts with
|
|
484
|
+
`::` loses it (before: `GATE x :: :: …`);
|
|
485
|
+
- a verb with no ` :: ` in its grammar (`OUTCOME`, `FINDING`, `PHASE` …) that
|
|
486
|
+
has only a tail is joined to its head;
|
|
487
|
+
- a verb whose grammar needs head arguments (`GATE <name> pass|…`, `ASK <qid>`,
|
|
488
|
+
`DISPATCH <agent>`, `SCORE task=…`) is repaired from `args :: detail` in the
|
|
489
|
+
tail, or REFUSED by name (exit 2, nothing written) — the lane then uses the
|
|
490
|
+
writer agent.
|
|
491
|
+
`_shared/phases/trace.md` says it once: `verb` = the WHOLE head, `tail` = the detail.
|
|
492
|
+
- **The lanes find the habits rule.** The `habits{}` pointer sat in each spine's
|
|
493
|
+
lane-contract block, far from the step that reads the answer, and a live
|
|
494
|
+
`/orc-quick` run with `habits: propose` never opened `_shared/habits.md` and
|
|
495
|
+
wrote no `ASK`. The rule now sits IN the step that reads `orc lane config`:
|
|
496
|
+
`/orc-quick` Q0 step 1, `/orc-mini` Phase 0, and `_shared/phases/preflight.md`
|
|
497
|
+
step 1 (orc, fast, test, pr-setup). The orc and fast spine copies were removed.
|
|
498
|
+
|
|
499
|
+
**What you have to do:** `orc update`.
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
### v2.0.0 — the coding lanes remember what you fixed and how you work _(2026-09-27)_
|
|
504
|
+
|
|
505
|
+
**Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
|
|
506
|
+
is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
|
|
507
|
+
the top of this file.
|
|
508
|
+
|
|
509
|
+
- **Step 1 - release the command from the old package:** `npm uninstall -g orc`
|
|
510
|
+
- **Step 2 - install the current package:** `npm i -g @azure-id/orc`
|
|
511
|
+
- **Step 3 - re-apply it to your project:** `orc update`
|
|
512
|
+
|
|
513
|
+
**Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
|
|
514
|
+
|
|
515
|
+
This release does five things. The coding lanes load less than half the text
|
|
516
|
+
they loaded before. ORC can learn the answers you give to its questions, but
|
|
517
|
+
only when you turn that on, and it applies nothing without your yes. The repair
|
|
518
|
+
memory (gotchas) learns from reviews, Sonar, SARIF, PR threads and closed
|
|
519
|
+
defects. The reviewer returns more facts about each finding. And a set of small
|
|
520
|
+
tools: `orc undo`, `orc pr threads`, `orc ci failed`, `orc ci flaky`, an
|
|
521
|
+
end-of-run card, questions per run in `orc stats`, a terminal bell, and the run
|
|
522
|
+
pointer after a compact.
|
|
523
|
+
|
|
524
|
+
**BREAKING.** This is a major version because five contracts change in a way
|
|
525
|
+
that a 1.9.x user or a fork can see:
|
|
526
|
+
|
|
527
|
+
1. **`/orc-quick` now takes part in the review memory.** Before, quick did not
|
|
528
|
+
read gotchas and did not record them, and its dispatch gate said never to
|
|
529
|
+
remember an answer for the next entry. Now quick reads the gotcha card when
|
|
530
|
+
it offers a review, records the review outcome, and shows a habit
|
|
531
|
+
suggestion on its `→ suggested` line (only when `habits` is not `off`). The
|
|
532
|
+
gate is still asked every time.
|
|
533
|
+
2. **The reviewer return has new REQUIRED fields**: `category` (a closed set of
|
|
534
|
+
11 values), `scenario` on every P0 and P1, and `pre_existing`. A forked or
|
|
535
|
+
hand-edited reviewer agent that does not return them fails the return
|
|
536
|
+
validation, and the orchestrator treats its return as malformed.
|
|
537
|
+
3. **The closed trace verb set is larger**: `ASK` (one answered question),
|
|
538
|
+
`FINDING-OUTCOME` (what became of each finding at review close) and the
|
|
539
|
+
`GATE flaky` result. `FINDING` has optional tail fields
|
|
540
|
+
(`pre=` `suppressed=` `folded=`). A trace reader that treats the verb set as
|
|
541
|
+
closed must learn them. Old traces parse as before.
|
|
542
|
+
4. **The lane spines have a new shape.** The shared lane contract text moved to
|
|
543
|
+
`_shared/lane-contract.md`, and worker instructions live in the agent files
|
|
544
|
+
only. `orc update` overwrites an installed spine as it always did, so a
|
|
545
|
+
hand patch on a spine is lost.
|
|
546
|
+
5. **Config resolution has a new rank, `learned`,** below your config file and
|
|
547
|
+
above the shipped default, and a new state word `learned`. Both appear ONLY
|
|
548
|
+
when `habits` is not `off`.
|
|
549
|
+
|
|
550
|
+
Nothing is removed: no config key is retired, no command is renamed, and no file
|
|
551
|
+
that you own moves.
|
|
552
|
+
|
|
553
|
+
**T — the lanes load less.** Each lane reads the same rules from fewer bytes.
|
|
554
|
+
The trace protocol went from 36,089 to 7,885 bytes (the full verb table is now
|
|
555
|
+
on demand, and each lane gets only its own verbs from `orc lane phases`). The
|
|
556
|
+
file banners, history and repeated exit codes left the payload. The coding
|
|
557
|
+
spines have a 16,384-byte cap. Worker instructions have one source, the agent
|
|
558
|
+
file. The descriptions that load in every session went from 11,711 to 6,587
|
|
559
|
+
characters, and three internal skills are hidden from the skill list.
|
|
560
|
+
`orc lane config --json` now carries a `probes{}` block, so a preflight reads
|
|
561
|
+
up to seven probe answers from one call. `orc trace write --packet -` writes
|
|
562
|
+
the `.txt` and the `.jsonl` of a trace from one packet (the Haiku trace writer
|
|
563
|
+
is now the fallback). 16 more agent files are generated from
|
|
564
|
+
`agents-src/twins/`, and `node bin/build-agents.js --check` (part of
|
|
565
|
+
`npm run verify`) covers them.
|
|
566
|
+
|
|
567
|
+
Always-loaded bytes per lane (`spine + command + when: "always"` references):
|
|
568
|
+
|
|
569
|
+
| Lane | 1.9.2 | after the trim | 2.0.0 | change |
|
|
570
|
+
|---|---|---|---|---|
|
|
571
|
+
| orc | 60,169 | 29,289 | 29,124 | −52 % |
|
|
572
|
+
| orc-mini | 56,153 | 24,851 | 24,697 | −56 % |
|
|
573
|
+
| orc-fast | 59,142 | 27,793 | 27,750 | −53 % |
|
|
574
|
+
| orc-quick | 61,858 | 30,998 | 30,768 | −50 % |
|
|
575
|
+
| orc-verify | 42,330 | 13,224 | 13,035 | −69 % |
|
|
576
|
+
| orc-test | 61,566 | 28,295 | 27,994 | −55 % |
|
|
577
|
+
| orc-pr-setup | 56,130 | 24,673 | 24,380 | −57 % |
|
|
578
|
+
| orc-pr-driver | 48,456 | 18,071 | 17,882 | −63 % |
|
|
579
|
+
| orc-analyze | 52,351 | 21,514 | 21,339 | −59 % |
|
|
580
|
+
| orc-analyze-mini | 43,792 | 13,401 | 13,212 | −70 % |
|
|
581
|
+
| orc-poly | 51,483 | 20,826 | 20,637 | −60 % |
|
|
582
|
+
| orc-route | 47,454 | 16,923 | 16,734 | −65 % |
|
|
583
|
+
| orc-wait | 7,082 | 6,696 | 6,693 | −5 % |
|
|
584
|
+
| orc-diy | 8,098 | 5,292 | 5,278 | −35 % |
|
|
585
|
+
| context-combiner | 13,193 | 11,472 | 11,472 | −13 % |
|
|
586
|
+
| orc-pattern | 45,748 | 16,249 | 16,060 | −65 % |
|
|
587
|
+
| orc-advisor | 2,916 | 2,605 | 2,605 | −11 % |
|
|
588
|
+
| orc-judge | 4,679 | 4,280 | 4,280 | −9 % |
|
|
589
|
+
| **sum** | **722,600** | **316,452** | **313,940** | **−57 %** |
|
|
590
|
+
|
|
591
|
+
The habits, gotchas and review work that came after the trim added no byte to
|
|
592
|
+
any lane above its trimmed value: the new text is read on demand.
|
|
593
|
+
|
|
594
|
+
**H — habits (off by default).** New key `habits`: `off` · `observe` ·
|
|
595
|
+
`propose`.
|
|
596
|
+
|
|
597
|
+
- `off` (the default) costs zero tokens: `orc lane config --json` has no
|
|
598
|
+
habits field (with `--no-probes` it is byte-identical to 1.9.2), and no lane
|
|
599
|
+
writes an `ASK` line.
|
|
600
|
+
- `observe`: each answered question writes one `ASK` line into the trace.
|
|
601
|
+
`orc habit show` computes your usual answers from those lines. It proposes
|
|
602
|
+
nothing.
|
|
603
|
+
- `propose`: at the END of a run, at most once, ORC asks whether an answer you
|
|
604
|
+
keep giving should become your usual one. The rule is fixed in the CLI: at
|
|
605
|
+
least 5 full-weight answers, a Wilson lower bound of 0.55 or more, and the
|
|
606
|
+
last 3 answers the same.
|
|
607
|
+
- Nothing is applied without your yes. There is no automatic level, and
|
|
608
|
+
`auto` is refused by name. An accepted habit is the `learned` rank, below
|
|
609
|
+
your config file: `orc config set` always wins. `orc habit forget <id>`
|
|
610
|
+
undoes it.
|
|
611
|
+
- A habit can learn only toward the careful side: `review_before_push: on`,
|
|
612
|
+
`mini_tdd: on`, `quick_update_tests: on`. A habit to skip a review, to drop
|
|
613
|
+
TDD or to continue on a stale wiki is never applied. A dispatch gate is
|
|
614
|
+
asked every time; a habit only orders the offer.
|
|
615
|
+
- 30 question points in the lanes carry an `(H <qid>)` mark.
|
|
616
|
+
`orc habit points` lists them.
|
|
617
|
+
- Commands: `orc habit show | log | points | why | accept | decline | forget |
|
|
618
|
+
reset | doctor | export | purge`, and `orc habit repo` for the soft
|
|
619
|
+
preferences read from git history (commit, branch and test naming).
|
|
620
|
+
- New keys: `review_before_push` (`ask`), `mini_tdd` (`ask`),
|
|
621
|
+
`quick_update_tests` (`ask`).
|
|
622
|
+
|
|
623
|
+
**G — gotchas v2, importers and sync.** The repair memory learns from more
|
|
624
|
+
sources, and the reviewer gets a card.
|
|
625
|
+
|
|
626
|
+
- `orc gotcha add | match | card | filter | observe | accept | quality | why`,
|
|
627
|
+
`orc gotcha list --candidates` and `orc gotcha export --review-md`.
|
|
628
|
+
- `orc gotcha card` is the reviewer card, sized by `gotcha_card_budget`
|
|
629
|
+
(600 tokens, minimum 200). It is always on: `gotcha_card_budget` is a size,
|
|
630
|
+
not an off switch. An entry that does not fit is counted in the card header.
|
|
631
|
+
- Observations go to `.claude/orc/observations.jsonl`. A candidate becomes an
|
|
632
|
+
entry by a fixed rule: an in-lane red → green with a reproduction, a miss, a
|
|
633
|
+
security finding with a CWE tag or a HIGH impact, or 3 addressed cases in 2
|
|
634
|
+
PRs within 90 days. `orc gotcha accept <C-id>` promotes one by hand.
|
|
635
|
+
- `orc gotcha filter` drops suppressed, folded and noisy advice. It never
|
|
636
|
+
removes a P0 or a P1.
|
|
637
|
+
- Importers: `orc gotcha import sarif <file>`,
|
|
638
|
+
`orc gotcha import sonar` (the token comes from `SONAR_TOKEN` only),
|
|
639
|
+
`orc gotcha import pr <n>` (human threads only) and
|
|
640
|
+
`orc gotcha import issues`. `orc gotcha sync` runs every source that is
|
|
641
|
+
available, incremental and time-boxed. New keys: `gotcha_card_budget`,
|
|
642
|
+
`gotcha_sync_hours` (6), `sonar_url`, `sonar_project`, `sonar_org`.
|
|
643
|
+
- A v1 `gotchas.md` stays valid, with no rewrite. The 1.9.2 parser still reads
|
|
644
|
+
a file that 2.0.0 wrote (a test copies its regex).
|
|
645
|
+
- The status line gotcha count now shows a number. It was always empty.
|
|
646
|
+
|
|
647
|
+
**R — the reviewer v2.** New `_shared/review-slice.md` names the slice fields
|
|
648
|
+
once. The reviewer gets the diff ranges, the gotcha card, the rules card and
|
|
649
|
+
the tool findings. It returns `category`, `cwe`, `scenario`, `pre_existing`,
|
|
650
|
+
`group` and `confidence` on each finding. `/orc` and `/orc-ultra` can dispatch
|
|
651
|
+
a disprove pass on a P0/P1. A re-review gets the previous findings. At review
|
|
652
|
+
close the lane records each outcome, and `orc gotcha quality` measures the
|
|
653
|
+
acceptance per category.
|
|
654
|
+
|
|
655
|
+
**Q — quality of life.**
|
|
656
|
+
|
|
657
|
+
- **`orc undo --run <slug>`** prints the commands that revert ONLY the files the
|
|
658
|
+
run changed, back to the snapshot taken at run start
|
|
659
|
+
(`orc run snapshot`). It changes nothing until you add `--apply`. An edit you
|
|
660
|
+
made before the run stays.
|
|
661
|
+
- **`orc pr threads <n>`** lists the unresolved review threads.
|
|
662
|
+
**`orc ci failed`** lists the failing CI steps. Both are read-only.
|
|
663
|
+
`/orc-quick` takes a red CI, or Sonar and SARIF issues, as a request.
|
|
664
|
+
- **`orc ci flaky`** tells a flaky local red from a real one. A flaky re-run
|
|
665
|
+
does not use a repair round, and the trace gets `GATE flaky`.
|
|
666
|
+
- **The end-of-run card** names what changed and the undo command. Quick
|
|
667
|
+
prints it in place of `git checkout -- .`.
|
|
668
|
+
- **`orc stats --json`** has `questions{}`: questions per run, per lane and per
|
|
669
|
+
point.
|
|
670
|
+
- **`notify: bell`** rings the terminal bell once when a turn of an ORC run
|
|
671
|
+
ends. `off` is the default and is silent.
|
|
672
|
+
- **After a compact**, the session hook prints the run pointer line again.
|
|
673
|
+
- **`rules_card_compact`** (`off`) would give `/orc-mini` and `/orc-fast` the
|
|
674
|
+
compact rules card. It stays off until eval E4 passes.
|
|
675
|
+
|
|
676
|
+
**U — `orc ui` ▸ Behaviour.** A new panel under Stats, key `u`. It shows the
|
|
677
|
+
learning switch (Off · Observe · Propose), your habits with their evidence and
|
|
678
|
+
the buttons the CLI allows, the rhythm of your runs, the gotchas and what the
|
|
679
|
+
reviewer will see, review quality per category, and the answer log. It renders
|
|
680
|
+
the CLI's lines and computes no habit. A `never` habit has no button. With
|
|
681
|
+
`habits: off`, one card replaces the tabs. Reduced motion stops all motion.
|
|
682
|
+
|
|
683
|
+
**Upgrade notes — what a 1.9.2 install keeps, and what changes.**
|
|
684
|
+
|
|
685
|
+
- `.claude/orc.config.yaml` is read as it is. No key is renamed or retired. The
|
|
686
|
+
new keys resolve to their defaults: `habits: off`, `review_before_push: ask`,
|
|
687
|
+
`mini_tdd: ask`, `quick_update_tests: ask`, `gotcha_card_budget: 600`,
|
|
688
|
+
`gotcha_sync_hours: 6`, `notify: off`, `rules_card_compact: off`, and the
|
|
689
|
+
`sonar_*` keys empty.
|
|
690
|
+
- `.claude/orc/gotchas.md` and its archive stay valid, with no rewrite. A
|
|
691
|
+
downgrade to 1.9.2 still parses the file.
|
|
692
|
+
- `gotchas: off` no longer removes the reviewer card, because review learning is
|
|
693
|
+
always on. `orc config set gotchas off` says so. An old `gotchas: off` still
|
|
694
|
+
turns off the executor block (`orc gotcha match` exits 4).
|
|
695
|
+
- Old traces are read as they are. They have no `ASK` lines, so the habits start
|
|
696
|
+
at `none yet`. Nothing is guessed from old `NOTE` lines.
|
|
697
|
+
- Every existing field of `orc lane config --json` and `orc config list --json`
|
|
698
|
+
is unchanged (a test pins them). `probes{}` is added; `habits{}`, the
|
|
699
|
+
`learned` source and the `learned` state appear only when `habits` is on.
|
|
700
|
+
- `orc gotcha status | list | show | prune` are unchanged, with the same exit
|
|
701
|
+
codes.
|
|
702
|
+
- **A DIY flow compiled by 1.9.x is STALE after the update**, because the
|
|
703
|
+
version and the composed layers changed. Run `orc diy compile` after the
|
|
704
|
+
update. Until then `orc diy status` exits 1 and `/orc-diy` offers the compile
|
|
705
|
+
or plain `/orc`.
|
|
706
|
+
- A forked or hand-edited reviewer agent fails the v2 return validation (see
|
|
707
|
+
BREAKING item 2). Hand-edited installed spines are overwritten, as always.
|
|
708
|
+
- **`orc update` wires the new session hook** (`orc-session-hook.js`) into
|
|
709
|
+
`.claude/settings.json`: ONE `Stop` entry and ONE `SessionStart` entry with
|
|
710
|
+
the matcher `compact`. It is always wired. The `Stop` hook reads `notify` first
|
|
711
|
+
and stays silent unless `notify: bell`. `orc doctor` checks both entries, and
|
|
712
|
+
when one is missing it names `orc update` as the fix
|
|
713
|
+
(`session-hook-unwired`).
|
|
714
|
+
- New files are user data: `habits-state.json`, `habits-cache.json`,
|
|
715
|
+
`observations.jsonl`, `gotchas-sync.json`. They are never in the install
|
|
716
|
+
manifest, and they survive `update`, `update --prune` and `doctor --fix`.
|
|
717
|
+
- Node ≥ 18 and zero npm dependencies, as before.
|
|
718
|
+
|
|
719
|
+
**Evals owed.** Four evals are prepared and NOT run. Each needs a live Claude
|
|
720
|
+
Code session in the sandbox:
|
|
721
|
+
|
|
722
|
+
- **E1** — trace parity before and after the trim.
|
|
723
|
+
- **E2** — six `/orc-quick` requests under `habits: propose` give one proposal,
|
|
724
|
+
and the seventh shows `→ usual`.
|
|
725
|
+
- **E3** — five reviews with the gotcha card and five without it. The card
|
|
726
|
+
stays on whatever the result is.
|
|
727
|
+
- **E4** — the compact rules card on `/orc-mini` and `/orc-fast`.
|
|
728
|
+
`rules_card_compact` stays `off` until E4 passes.
|
|
729
|
+
|
|
730
|
+
**What you have to do:** `orc update`. Then, if you use `/orc-diy`,
|
|
731
|
+
`orc diy compile`. To try habits, `orc config set habits observe`.
|
|
732
|
+
|
|
733
|
+
---
|
|
734
|
+
|
|
13
735
|
### v1.9.2 — the code graph gets its own tab, and Opus 5 becomes Opus 5.5 _(2026-09-23)_
|
|
14
736
|
|
|
15
737
|
**Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
|