@azure-id/orc 1.5.0 → 1.7.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 (74) hide show
  1. package/CHANGELOG.md +185 -0
  2. package/README-id.md +206 -125
  3. package/README.md +270 -57
  4. package/bin/cli.js +1676 -2
  5. package/bin/mockrun-catalog.js +272 -267
  6. package/bin/verify-contracts.js +4485 -4449
  7. package/bin/verify-package.js +9 -0
  8. package/bin/webui/api.js +26 -0
  9. package/bin/webui/app.html +10 -0
  10. package/bin/webui/css/panels/knowledge.css +30 -0
  11. package/bin/webui/css/panels/rules.css +145 -0
  12. package/bin/webui/fixtures/index.js +27 -0
  13. package/bin/webui/fixtures/rules.js +1002 -0
  14. package/bin/webui/fixtures/wiki-one.js +198 -0
  15. package/bin/webui/i18n/en/knowledge.json +127 -117
  16. package/bin/webui/i18n/en/nav.json +1 -0
  17. package/bin/webui/i18n/en/overview.json +1 -0
  18. package/bin/webui/i18n/en/rules.json +55 -0
  19. package/bin/webui/i18n/id/knowledge.json +127 -117
  20. package/bin/webui/i18n/id/nav.json +1 -0
  21. package/bin/webui/i18n/id/overview.json +1 -0
  22. package/bin/webui/i18n/id/rules.json +55 -0
  23. package/bin/webui/js/01-i18n.js +1 -0
  24. package/bin/webui/js/panels/knowledge.js +117 -1
  25. package/bin/webui/js/panels/overview.js +8 -0
  26. package/bin/webui/js/panels/rules.js +351 -0
  27. package/mock-run/INDEX.md +107 -106
  28. package/mock-run/orc-rules.md +254 -0
  29. package/package.json +1 -1
  30. package/templates/commands/orc-rules.md +66 -0
  31. package/templates/commands/orc-wiki.md +23 -1
  32. package/templates/hooks/README.md +110 -1
  33. package/templates/hooks/orc-read-gate.js +279 -0
  34. package/templates/skills/_shared/README.md +61 -54
  35. package/templates/skills/_shared/phases/README.md +1 -0
  36. package/templates/skills/_shared/phases/preflight.md +20 -0
  37. package/templates/skills/_shared/phases/rules.md +154 -0
  38. package/templates/skills/_shared/return-validation.md +28 -0
  39. package/templates/skills/_shared/rules/CREDITS.md +141 -0
  40. package/templates/skills/_shared/rules/INDEX.md +107 -0
  41. package/templates/skills/_shared/rules/code.md +229 -0
  42. package/templates/skills/_shared/rules/delivery.md +114 -0
  43. package/templates/skills/_shared/rules/ui.md +139 -0
  44. package/templates/skills/_shared/rules/writing.md +223 -0
  45. package/templates/skills/context-combiner/SKILL.md +9 -1
  46. package/templates/skills/orc/SKILL.md +7 -0
  47. package/templates/skills/orc-aftermath/SKILL.md +7 -0
  48. package/templates/skills/orc-analyze/SKILL.md +7 -0
  49. package/templates/skills/orc-analyze-mini/SKILL.md +9 -1
  50. package/templates/skills/orc-boundary/SKILL.md +7 -0
  51. package/templates/skills/orc-brainstorm/SKILL.md +7 -0
  52. package/templates/skills/orc-budget/SKILL.md +7 -0
  53. package/templates/skills/orc-challenge/SKILL.md +7 -0
  54. package/templates/skills/orc-claude/SKILL.md +7 -0
  55. package/templates/skills/orc-diy/SKILL.md +7 -0
  56. package/templates/skills/orc-explain/SKILL.md +7 -0
  57. package/templates/skills/orc-export/SKILL.md +7 -0
  58. package/templates/skills/orc-fast/SKILL.md +7 -0
  59. package/templates/skills/orc-grill/SKILL.md +7 -0
  60. package/templates/skills/orc-handoff/SKILL.md +9 -1
  61. package/templates/skills/orc-learn/SKILL.md +7 -0
  62. package/templates/skills/orc-mini/SKILL.md +7 -0
  63. package/templates/skills/orc-pact/SKILL.md +7 -0
  64. package/templates/skills/orc-poly/SKILL.md +7 -0
  65. package/templates/skills/orc-pr-driver/SKILL.md +9 -1
  66. package/templates/skills/orc-pr-setup/SKILL.md +9 -1
  67. package/templates/skills/orc-quick/SKILL.md +7 -0
  68. package/templates/skills/orc-retro/SKILL.md +7 -0
  69. package/templates/skills/orc-route/SKILL.md +7 -0
  70. package/templates/skills/orc-test/SKILL.md +7 -0
  71. package/templates/skills/orc-verify/SKILL.md +7 -0
  72. package/templates/skills/orc-wiki/SKILL.md +15 -0
  73. package/templates/skills/orc-wiki/references/partial-refresh.md +68 -0
  74. package/templates/skills/orc-wiki/references/phases/phase-0.md +15 -1
package/CHANGELOG.md CHANGED
@@ -10,6 +10,191 @@ Format: `### v<version> — <title> _(<date>)_`.
10
10
 
11
11
  ---
12
12
 
13
+ ### v1.7.0 - the rules that keep the slop out _(2026-09-13)_
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
+
26
+ ORC writes a lot of prose and a lot of code, and both came out carrying the same
27
+ recognisable defaults: sentences that say nothing in a confident shape, and code
28
+ that is longer, more defensive and more abstract than the task asked for. There
29
+ was one standing card against it - the seven-line house rules - and it is about
30
+ CODE. Nothing said anything about the words.
31
+
32
+ **`orc rules` is a second rule surface, and it has two halves that never mix.**
33
+
34
+ - **ORC rules** - 65 rules in four packs, shipped, tagged, **read-only**. They
35
+ change with `orc update` and with nothing else. `orc rules set --pack ...` is
36
+ refused BY NAME, with the command that replaces it.
37
+ - **Your rules** - `.claude/orc/rules.md`. Plain text, three headings, as much
38
+ under each as you want. **They beat an ORC rule outright.**
39
+
40
+ The packs: **`OSW` writing (23)**, **`OSC` code (22)**, **`OSD` delivery (10)** -
41
+ what an agent reports about its OWN work - and **`OSU` UI (10)**, which rides per
42
+ TASK rather than per lane, because a UI rule in a backend slice is tokens paid on
43
+ every spawn for a rule that cannot apply.
44
+
45
+ Three tiers, taken from `anti-slop`: **HARD** absolute, **PURPOSE** allowed with
46
+ a written one-line reason, **LOCK** a consistency check. The purpose gate is the
47
+ mechanism that matters - a ban list alone leaves a void, and a model fills a void
48
+ with its most generic output.
49
+
50
+ **Credit is a shipped artifact here, not a line in a commit message.** Every pack
51
+ opens with its sources; `orc rules credits` prints author, handle, repository,
52
+ licence, and what ORC took from each. Adapted from
53
+ [`petergyang/no-ai-slop`](https://github.com/petergyang/no-ai-slop) (MIT),
54
+ [`miqdadbadjuber/anti-slop`](https://github.com/miqdadbadjuber/anti-slop) (MIT),
55
+ [`ehmo/slopkit`](https://github.com/ehmo/slopkit),
56
+ [`BioInfo/slopless`](https://github.com/BioInfo/slopless), Andrej Karpathy's
57
+ `CLAUDE.md`, Matty Cartwright's Anti-Slop Writing Rules, and three papers on LLM
58
+ code smells.
59
+
60
+ **Precedence: house rules > your rules > ORC rules.** The house card is CODE and
61
+ BEHAVIOUR only - it says nothing about the words an agent writes, so it never
62
+ overrules a writing rule. A project rule beats an ORC rule OUTRIGHT: the rule is
63
+ removed from the slice and the removal is stated inside it.
64
+
65
+ **An override is counted the only honest way.** The CLI counts ORC rule ids you
66
+ NAMED, and says that is what it counted. A conflict you did not name is found by
67
+ the agent at dispatch and comes back as `rules_conflicts[]` - a gap, never a
68
+ silent choice. The CLI cannot parse intent, so it does not pretend to: the same
69
+ decision `orc doc rules` made about its structural boundary, for the same reason.
70
+
71
+ **`orc rules lint` is free, deterministic, and small on purpose.** It checks 13
72
+ of the 65 - banned lexicon and phrases, em dash DENSITY (a dose rule, measured
73
+ per file, because ORC's own docs use them), emoji headings, six comment shapes,
74
+ artifact filenames, `outline: none`, UI buzzwords - and it prints, in every mode
75
+ including `--json`: `not checked here: 52 rules. They need a reader, not a
76
+ matcher.` A clean exit that stands in for a review nobody did is the failure that
77
+ line prevents. It skips the rule packs themselves (a rule that bans a word has to
78
+ print that word to define it) and anything marked `orc-rules-ignore`, and counts
79
+ both rather than staying quiet.
80
+
81
+ **Findings are advisory. There is no gate.** A style preference that fails a
82
+ build gets switched off within a week, and then nothing is enforced at all.
83
+
84
+ The card rides in every slice of **28 lanes** - every one that writes words or
85
+ code. **`/orc-doc` is excluded by design**; it has `orc doc rules`. One assembler
86
+ (`orc rules slice`), because a card built in twenty-eight spines is
87
+ twenty-eight ideas of the precedence order, and because it is the only place the
88
+ per-spawn token weight can be measured. Measured: **~3 600 tokens** per
89
+ build-lane slice, ~2 200 for a prose lane.
90
+
91
+ **`orc ui` gains a Rules panel** - the ladder, your textarea, the 65 read-only
92
+ rows behind a filter, the credit table, and the lint.
93
+
94
+ ---
95
+
96
+ **`orc wiki`, one doc at a time.** Targeted refresh has existed since v0.33.0 and
97
+ is not rebuilt. What was missing is the other half: **adding one topic** to a
98
+ wiki that already exists. Until now a new coverage area only appeared as a
99
+ by-product of the coverage-gap sweep during a delta refresh, so "add the
100
+ remittance feature" had no path that did not re-plan every area in the repo.
101
+
102
+ - **`/orc-wiki update <doc-or-topic>`** - the targeted refresh, under the name
103
+ people actually type. A topic resolves to a doc first.
104
+ - **`/orc-wiki add "<topic>"`** - A0-A7: resolve, scope, confirm, reserve, scan,
105
+ write, sweep, check. Nothing spawns before the one confirmation turn.
106
+ - **`orc wiki resolve <topic>`** - free, no scan. A MATCH must beat the runner-up
107
+ by half again plus one; anything closer is **AMBIGUOUS and becomes a question**,
108
+ because two docs a point apart is exactly where guessing costs a scan of the
109
+ wrong area.
110
+ - **`orc wiki add <slug> --covers ...`** - reserves a stub carrying
111
+ `status: reserved` and a body that says nothing in it is evidence. A doc that
112
+ lies is worse than a doc that is missing.
113
+ - **`orc wiki refs [--check]`** - the DERIVED-REFERENCE sweep. After one doc
114
+ changes, six surfaces are behind it: the registration, reserved rows, the
115
+ orientation page, the architecture overview, the CLAUDE.md pointer's doc COUNT,
116
+ and any crosslink tag anchored to a file that is gone. It **repairs only the
117
+ registration**, because `orc wiki sync` is free and already the single writer.
118
+ Everything else is reported with its command - a sweep that silently
119
+ regenerated prose would be spending money nobody asked it to spend.
120
+
121
+ The Knowledge panel gains a **One doc at a time** card for both halves.
122
+
123
+ ### v1.6.0 - the rule that can finally say no _(2026-09-07)_
124
+
125
+ **Still on the unscoped `orc` package?** Do this once first - your `orc upgrade`
126
+ is the pre-v0.56.0 one and cannot install itself. Full detail in the CAUTION at
127
+ the top of this file.
128
+
129
+ - **Step 1 - release the command from the old package:** `npm uninstall -g orc`
130
+ - **Step 2 - install the current package:** `npm i -g @azure-id/orc`
131
+ - **Step 3 - re-apply it to your project:** `orc update`
132
+
133
+ **Do not use `npm i -g -f`.** Full detail in v0.56.0 below.
134
+
135
+
136
+ ORC's read discipline has always said the same thing in three places: the main
137
+ session reads to **find**, and dispatches an agent to **understand**. It was
138
+ prose in `_shared/read-ladder.md`, in `/orc-doc` hard rule 0, and on line 21 of
139
+ `/orc-quick` - and **nothing checked any of it**.
140
+
141
+ `orc-read-gate.js` is a `PreToolUse` hook on `Read` that can refuse. It ships
142
+ **off**, and `off` is byte-identical to not having it - asserted by a test, not
143
+ by intention.
144
+
145
+ **The threshold is ORC's own number, measured.** The pattern this came from uses
146
+ 350 lines, derived from a 10-30 second delegation round trip. ORC's round trip
147
+ is nothing like that: a dispatch measured **p50 76s, p90 188s** (n=125), and one
148
+ real read-only dispatch cost **13,276 tokens** to read a four-line file. At the
149
+ measured 55.2 chars/line across 316 sampled reads, break-even is **~1000 lines**.
150
+ Copying 350 would delegate work whose overhead exceeds its saving.
151
+
152
+ **`agent_id` is the only discriminator, and that was MEASURED, not assumed.**
153
+ `PreToolUse` **does** fire inside a dispatched subagent - the assumption that
154
+ hooks are session-level was wrong. `session_id` and `transcript_path` are
155
+ **identical** in both contexts, so a gate written against either would block the
156
+ full read an executor must perform before an `Edit`, and a reconstructed
157
+ `old_string` corrupts files. The gate tests for the **presence** of `agent_id`,
158
+ never for the absence of some other key, which asserts nothing.
159
+
160
+ **Everything it stays silent on, and each one is deliberate:** any read by a
161
+ subagent - outside an open ORC run - a targeted `offset`/`limit` read - a file
162
+ under the threshold - build logs, test results and `.jsonl` that a gate parses
163
+ whole, because a truncated red build reads **green** - and any error at all,
164
+ because **a read gate that throws and blocks a read has broken the tool.**
165
+
166
+ **A block always names the cheaper path.** A gate that only refuses is a gate
167
+ people switch off. It names the targeted read, the agent dispatch, and the
168
+ config key that turns it down.
169
+
170
+ **Every `warn` and `block` writes one trace line** (`READ-GATE`), an allow
171
+ writes none. That is affordable here for a structural reason: the gate only acts
172
+ while a run is open, so a trace always exists. `orc doctor` gains
173
+ `read-gate-unwired` and `read-gate-fallback`, both reported **only while the
174
+ feature is armed** - a doctor that warns about the default is one people learn
175
+ to ignore.
176
+
177
+ **Two config keys**, both on the `SEED_EMPTY` allowlist with an empty `lanes[]`,
178
+ because a hook has no lane and cannot resolve config: `read_gate`
179
+ (`off`|`warn`|`block`, default `off`) and `read_gate_max_lines` (default 1000).
180
+
181
+ **What this release deliberately does NOT do**, with the reasons recorded so
182
+ nobody re-proposes them: no gate on `Bash` reads (`cat`/`head`/`tail`) - it is
183
+ several times the false-positive surface, and the measurement says the `Read`
184
+ tool is only about 7.5% of the actual read surface here - and no
185
+ `context-reader` slot in `EXTRA_SLOTS`, because at a 1000-line threshold the
186
+ addressable population is five reads across 239 sampled sessions, which is
187
+ infrastructure for nothing.
188
+
189
+ **An honest note on the measurement.** The audit behind this release found the
190
+ existing prose is largely *working*: median full read is 85 lines, p90 is 288,
191
+ and 46% of reads already use `offset`/`limit` without being told. Oversized
192
+ reads are about **1% of price-weighted main-session ingest** at a generous upper
193
+ bound. This hook is a guardrail on a road most runs already stay on - it is off
194
+ by default for exactly that reason.
195
+
196
+ ---
197
+
13
198
  ### v1.5.0 - the lane that runs the test _(2026-09-07)_
14
199
 
15
200
  **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-1.4.2-blue.svg?style=for-the-badge)
10
+ ![Version](https://img.shields.io/badge/version-1.7.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: v1.4.2** · diperbarui 05-09-2026 · [daftar perubahan lengkap](CHANGELOG.md)
16
+ **Versi terbaru: v1.7.0** · diperbarui 13-09-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
 
@@ -322,6 +322,62 @@ pemakaian 5 jam, pemakaian mingguan, dan beberapa hal lain.
322
322
 
323
323
  ---
324
324
 
325
+ ## Aturan yang menahan slop
326
+
327
+ ORC menulis banyak prosa dan banyak kode. Keduanya keluar membawa bawaan yang
328
+ sama dan mudah dikenali: kalimat yang terdengar yakin tetapi tidak mengatakan
329
+ apa-apa, dan kode yang lebih panjang, lebih defensif, dan lebih abstrak daripada
330
+ yang diminta tugasnya. `orc rules` adalah saringannya, dan saringan itu punya
331
+ **dua bagian yang tidak pernah bercampur**.
332
+
333
+ | Bagian | Siapa yang menulis | Di mana | Berubah kapan |
334
+ |---|---|---|---|
335
+ | **Aturan ORC** | ORC | `.claude/skills/_shared/rules/` | `orc update` |
336
+ | **Aturan Anda** | Anda | `.claude/orc/rules.md` | Anda mengetik |
337
+
338
+ **65 aturan kiriman, hanya-baca**, dalam empat paket: `OSW` penulisan (23) ·
339
+ `OSC` kode (22) · `OSD` pelaporan (10), yaitu apa yang dilaporkan agen tentang
340
+ pekerjaannya SENDIRI · `OSU` antarmuka (10), yang ikut per TUGAS, bukan per
341
+ lane. Tiga tingkat — **HARD** mutlak, **PURPOSE** boleh dengan satu baris alasan
342
+ tertulis, **LOCK** pemeriksaan konsistensi.
343
+
344
+ **Aturan Anda berupa teks biasa**, tiga judul, sebanyak apa pun di bawah
345
+ masing-masing — dan **aturan Anda mengalahkan aturan ORC secara langsung**:
346
+
347
+ ```
348
+ aturan rumah > aturan Anda > aturan ORC
349
+ ```
350
+
351
+ Aturan rumah hanya tentang KODE dan perilaku. Aturan itu tidak berbicara tentang
352
+ kata-kata yang ditulis agen, jadi tidak pernah mengalahkan aturan penulisan.
353
+ Untuk mematikan satu aturan ORC, sebut id-nya di dalam aturan Anda sendiri;
354
+ penggantian itu lalu dihitung, dicetak saat preflight, dan dinyatakan di dalam
355
+ setiap slice. **Tidak pernah diam-diam.**
356
+
357
+ ```bash
358
+ orc rules # kedua bagian, urutan kuasa, jumlahnya
359
+ orc rules add --priority P0 --text "..." # aturan Anda, dengan kata-kata Anda
360
+ orc rules lint src/ README.md # gratis, nol token
361
+ orc rules credits # tiap sumber, penulis, dan lisensinya
362
+ ```
363
+
364
+ `orc rules lint` memeriksa **13 dari 65** — yang dapat dibuktikan pencocokan
365
+ teks — dan selalu mencetak `not checked here: 52 rules. They need a reader, not a
366
+ matcher.` Lint yang bersih bukan tinjauan yang bersih, dan perintah itu
367
+ mengatakannya.
368
+
369
+ **Aturan ini adalah karya orang lain, dan kreditnya ikut dikirim.** Diadaptasi
370
+ dari [`petergyang/no-ai-slop`](https://github.com/petergyang/no-ai-slop) (MIT),
371
+ [`miqdadbadjuber/anti-slop`](https://github.com/miqdadbadjuber/anti-slop) (MIT),
372
+ [`ehmo/slopkit`](https://github.com/ehmo/slopkit),
373
+ [`BioInfo/slopless`](https://github.com/BioInfo/slopless), `CLAUDE.md` milik
374
+ Andrej Karpathy, Anti-Slop Writing Rules milik Matty Cartwright, dan tiga makalah
375
+ tentang bau kode LLM.
376
+
377
+ **Penjelasan lengkap: [`guides/rules.md`](guides/rules.md).**
378
+
379
+ ---
380
+
325
381
  ## Dokumen yang benar-benar bisa dipindahkan
326
382
 
327
383
  `/orc-doc` menulis dokumen panjang — dan Markdown dipilih justru karena berkas
@@ -566,6 +622,7 @@ bahasa yang sederhana:
566
622
 
567
623
  | Panduan | Baca kalau |
568
624
  |---|---|
625
+ | [Aturan](guides/rules.md) | Anda ingin 65 aturan anti-slop, urutan kuasanya, dan lint-nya |
569
626
  | [ORC-QUICK](templates/skills/orc-quick/README.md) | Anda ingin contoh lengkap lane cepat |
570
627
  | [ORC-DIY](templates/skills/orc-diy/README.md) | Anda ingin meracik lane sendiri |
571
628
  | [ORC-WIKI](templates/skills/orc-wiki/README.md) | Anda ingin basis pengetahuan, dan pengaturan crosslink antar repo |
@@ -619,138 +676,162 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
619
676
  **Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
620
677
  hanya mencetak yang lebih baru dari versi yang Anda punya.
621
678
 
622
- ### v1.4.2 - panel yang berhenti memuat ulang, dan bidang yang tidak bisa dibaca kembali _(05-09-2026)_
623
-
624
- Empat cacat lagi di `orc ui` ▸ **Antarmuka CLI Hook**. Tiga di antaranya adalah
625
- cacat yang sama dengan tiga wajah berbeda.
626
-
627
- **Menyiapkan satu perubahan memuat ulang seluruh panel** - tiap operasi yang
628
- disiapkan masuk kembali ke router, jadi empat endpoint diambil ulang dan semua
629
- dibangun lagi dari kerangka. Itu membuat perubahan yang baru disiapkan tampak
630
- seperti sudah diterapkan, dan meninggalkan editor yang terbuka menampilkan nilai
631
- sebelum perubahan yang baru saja Anda buat: Anda memilih bentuk, tidak ada yang
632
- bergerak. Sekarang tidak ada yang diambil sampai sesuatu benar-benar mengubah
633
- disk; satu operasi yang disiapkan menggambar ulang dari cache dengan **nol
634
- permintaan**, menjaga posisi gulir Anda, dan editor yang terbuka ikut digambar
635
- ulang - beserta kursornya.
636
-
637
- **Dan bidangnya tidak bisa dibaca kembali.** `orc statusline show --json`
638
- mengirim dua belas dari dua puluh empat bidang yang bisa dibawa sebuah bagian,
639
- jadi `case`, `prefix`, `min_cols`, `precision` dan tujuh lainnya ditulis ke disk
640
- dengan benar lalu tidak terlihat oleh panel yang menulisnya. Sekarang semua
641
- bidang dikirim, ditambah `authored`, sehingga sebuah kontrol bisa menyebut
642
- **nilai mana yang milik Anda** dan mana yang warisan.
643
-
644
- **Enam bagian per baris, bukan lima** - dipindahkan di satu tempat, dan pemisah
645
- tetap tidak dihitung. **Menu tarik-turun yang tidak terbaca** ternyata adalah
646
- panel tanpa warna sama sekali: `hookui.css` ditulis memakai empat token CSS yang
647
- tidak ada, jadi setiap deklarasi itu dibuang diam-diam oleh peramban.
648
-
649
- **Pratinjau kini digambar sebagai terminal** - jendela selebar yang disebutkan
650
- dengan penggaris kolom - dan `orc statusline preview` menerima `--theme` dan
651
- `--glyphs` sebagai penimpaan **khusus gambar**, jadi laci baru menampilkan bar
652
- yang sama di bawah keempat set warna dan ketujuh set simbol. Memilih set warna
653
- dari namanya adalah tebakan; memilihnya dari gambarnya adalah keputusan.
654
-
655
- Detail lengkap di [CHANGELOG.md](CHANGELOG.md).
656
-
657
- ---
658
-
659
- ### v1.3.0 - bangun sendiri baris status Anda _(04-09-2026)_
679
+ ### v1.7.0 - aturan yang menahan slop _(13-09-2026)_
660
680
 
661
- **Masih memakai paket `orc` yang tanpa awalan?** Lakukan ini sekali dulu —
662
- `orc upgrade` Anda adalah versi sebelum v0.56.0 dan tidak dapat memasang
663
- dirinya sendiri.
681
+ ORC menulis banyak prosa dan banyak kode, dan keduanya keluar membawa bawaan yang
682
+ sama dan mudah dikenali. Selama ini hanya ada satu kartu tetap yang melawannya —
683
+ aturan rumah tujuh baris — dan kartu itu tentang KODE. Tidak ada yang mengatakan
684
+ apa pun tentang kata-katanya.
664
685
 
665
- - **Langkah 1 — lepaskan perintahnya dari paket lama:** `npm uninstall -g orc`
666
- - **Langkah 2 — pasang paket saat ini:** `npm i -g @azure-id/orc`
667
- - **Langkah 3 — terapkan lagi ke proyek Anda:** `orc update`
686
+ **`orc rules` adalah permukaan aturan kedua, dan punya dua bagian yang tidak
687
+ pernah bercampur.** 65 aturan ORC yang dikirim dan **hanya-baca** (`orc rules set
688
+ --pack ...` ditolak dengan menyebut nama perintah penggantinya), dan aturan milik
689
+ proyek Anda di `.claude/orc/rules.md`, yang **menang secara langsung**.
668
690
 
669
- **Jangan pakai `npm i -g -f`.**
691
+ Empat paket: `OSW` penulisan (23), `OSC` kode (22), `OSD` pelaporan (10), dan
692
+ `OSU` antarmuka (10) yang ikut per TUGAS. Tiga tingkat: **HARD**, **PURPOSE**
693
+ (boleh, dengan satu baris alasan tertulis), **LOCK**.
670
694
 
671
- Baris status kini **milik Anda**. Tiga baris, tiap baris memuat satu sampai lima
672
- bagian dari katalog yang dikirim ORC, tiap bagian digambar lewat salah satu dari
673
- 35 bentuk dan Anda beri gaya sendiri: dua warna, warna yang mengikuti nilai,
674
- kata-katanya sendiri, simbolnya sendiri, lebar yang tetap, dan kapan bagian itu
675
- boleh muncul.
695
+ **Kredit adalah berkas yang ikut dikirim, bukan satu baris di pesan commit.**
696
+ `orc rules credits` menyebut penulis, repositori, lisensi, dan apa yang diambil
697
+ ORC dari masing-masing.
676
698
 
677
- **Fitur ini mati secara bawaan, dan saat mati hasilnya sama persis byte per byte
678
- dengan sebelumnya.** Itu sebuah tes — sembilan keadaan dibekukan simbol demi
679
- simbol — bukan sekadar niat.
699
+ **Urutan kuasa: aturan rumah > aturan Anda > aturan ORC.** Penggantian dihitung
700
+ dari id yang Anda SEBUT, dan perintahnya mengatakan bahwa itulah yang dihitung;
701
+ pertentangan yang tidak Anda sebut ditemukan agen saat bekerja dan kembali
702
+ sebagai celah, bukan pilihan diam-diam. CLI tidak dapat membaca maksud, jadi CLI
703
+ tidak berpura-pura bisa.
680
704
 
681
- Susun di **`orc ui` ▸ CLI Hook Interface**.
705
+ **`orc rules lint` gratis dan sengaja kecil**: memeriksa 13 dari 65 dan selalu
706
+ mencetak berapa yang tidak diperiksanya. Temuannya bersifat saran; tidak ada
707
+ gerbang.
682
708
 
683
- - **CLI YANG MENYUSUN, HOOK YANG MENGGAMBAR.** Tata letak Anda diturunkan jadi
684
- daftar instruksi datar dengan setiap warna sudah dihitung; hook menjalankannya
685
- dan tidak memutuskan apa pun. Claude Code menggambar ulang paling cepat tiap
686
- 300 md dan **membatalkan** skrip yang masih berjalan — di Windows memulai
687
- `node` saja sudah 285 md dari jatah itu, jadi hook hanya punya sekitar 15 md.
688
- - **Pratinjau ITU bilahnya.** Pratinjau dan hook memakai modul penggambar yang
689
- SAMA, jadi keduanya tidak mungkin berbeda.
690
- - **Peletakan yang tidak sah dibuat MUSTAHIL.** Sebuah baris hanya boleh memuat
691
- bagian jika setiap baris di atasnya sudah terisi. Setiap seret juga punya
692
- jalur papan tombol dan menu.
693
- - **Tata letak susunan Anda bisa LEBIH CEPAT** daripada bawaan: 346,7 md untuk
694
- bawaan, **298,2 md** untuk `minimal` susunan sendiri.
695
- - **Delapan bagian DITOLAK**, tiap-tiap dengan hasil pengukurannya. Nilai yang
696
- tidak dapat dihitung tampil sebagai tanda pisah — **bukan `0`**, yang berarti
697
- gratis.
709
+ **`orc wiki`, satu dokumen sekaligus.** `/orc-wiki update <dokumen-atau-topik>`
710
+ dan `/orc-wiki add "<topik>"` menambah satu dokumen ke wiki yang sudah ada tanpa
711
+ merencanakan ulang area lain. `orc wiki resolve` gratis dan tidak memindai;
712
+ hasil **AMBIGUOUS menjadi pertanyaan, bukan tebakan**. `orc wiki refs` menyapu
713
+ enam rujukan turunan setelah satu dokumen berubah, dan hanya memperbaiki
714
+ pendaftarannya — sisanya dilaporkan beserta perintahnya.
698
715
 
699
- **Rincian lengkap: [`guides/status-line.md`](guides/status-line.md).**
700
-
701
- ---
702
-
703
- ### v1.0.0 - konfigurasi, fase, dan panggilan berhenti jadi prosa _(30-08-2026)_
704
-
705
- **Masih memakai paket `orc` yang tanpa awalan?** Lakukan ini sekali dulu —
706
- `orc upgrade` Anda adalah versi sebelum v0.56.0 dan tidak bisa memasang dirinya
707
- sendiri. Rincian lengkapnya ada di blok PERHATIAN di bagian atas berkas ini.
708
-
709
- - **Langkah 1 — lepaskan perintahnya dari paket lama:** `npm uninstall -g orc`
710
- - **Langkah 2 — pasang paket yang sekarang:** `npm i -g @azure-id/orc`
711
- - **Langkah 3 — terapkan lagi ke proyek Anda:** `orc update`
712
-
713
- **Tidak ada pengaturan yang berubah artinya, dan tidak ada perintah yang diganti
714
- namanya.** Tiga hal benar-benar mengubah perilaku; sisanya adalah ORC yang
715
- akhirnya membaca muatannya sendiri dengan cara yang selama ini ia ajarkan kepada
716
- Anda untuk membaca kode Anda.
717
-
718
- - **Tabel skor ke model berakhir di `opus-5-low [65,90)` · `opus-5-med
719
- [90,100]`.** Dua dari enam pita kini ingin sesi utama Opus 5, dari sebelumnya
720
- satu dari delapan.
721
- - **Pekerja luar yang macet dua kali dalam satu run akan menepi** untuk sisa run
722
- itu. Dua jam, tidak pernah digabung; ia tidak menulis pengukuran baru dan tidak
723
- pernah menulis konfigurasi Anda; sebuah promote adalah tanda batas, bukan
724
- membisukan, dan perlu alasan.
725
- - **`orc diy init` kini berbawaan `opus-5-high`.** Bawaan yang lama diam-diam
726
- meruntuhkan sepertiga atas tangga Anda ke satu agen sebelum Anda memilih
727
- apa pun.
728
-
729
- Bagian strukturalnya - **konfigurasi, fase, dan panggilan berhenti jadi prosa**:
730
-
731
- - **`orc lane config <lane>`** menjawab konfigurasi sebuah lane sudah menjadi
732
- apa, dengan setiap bayangan sudah dikalimatkan. Sebuah lane tidak pernah lagi
733
- menggabungkan berkas konfigurasi sendiri, dan **peringkat di bawah peringkat
734
- yang sudah menjawab tidak dibaca sama sekali**.
735
- - **`orc lane phases <lane>`** dan **`orc lane calls --all`** melakukan hal yang
736
- sama untuk pustaka fase bersama dan katalog panggilan CLI - masing-masing satu
737
- salinan kanonis, dari sebelumnya 14-59 pengulangan per panggilan.
738
- - **`orc ui` menampilkan semuanya**: tangga peringkat yang menunjukkan
739
- pengaturan mana yang MENJAWAB, lane mana yang membaca tiap kunci, panel Lane
740
- baru, dan baris penurunan di Extra ▸ Recovery beserta tombol Promote.
741
- `orc doctor` mendapat `lane-keys-drifted`.
742
-
743
- **Ini tidak membuat muatannya lebih kecil** - 208 berkas menjadi 291, 26.507
744
- baris menjadi 33.204. Sebagian besar gelombang terukur sebagai kebenaran, bukan
745
- penghapusan duplikasi. Yang berubah adalah kini ada satu tempat untuk memperbaiki
746
- masing-masing hal ini, dan ada lint yang gagal saat sebuah salinan tumbuh
747
- kembali. Dua penghapusan yang direncanakan **diukur lalu ditolak**, dan flake
748
- yang membuat empat gelombang gagal akhirnya didiagnosis - dengan catatan jujur
749
- bahwa tiga run hijau adalah gerbangnya, bukan buktinya.
750
-
751
- **Entri lengkap: [CHANGELOG.md](CHANGELOG.md).**
716
+ <details>
717
+ <summary><strong>Rilis sebelumnya</strong> — 114 rilis, hanya judulnya. Teks lengkapnya (dalam bahasa Inggris) ada di <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
718
+
719
+ - **v1.6.0** — the rule that can finally say no · _2026-09-07_
720
+ - **v1.5.0** — the lane that runs the test · _2026-09-07_
721
+ - **v1.4.2** — the panel that stops reloading, and the fields you could not read back · _2026-09-05_
722
+ - **v1.4.1** — the board you can actually use · _2026-09-05_
723
+ - **v1.4.0** — the agent panel, and the number that was missing · _2026-09-04_
724
+ - **v1.3.0** — build your own status line · _2026-09-04_
725
+ - **v1.2.1** — the status line says what ORC is doing · _2026-09-04_
726
+ - **v1.2.0** — a retry that cloned the agent, and a window you can watch empty · _2026-09-04_
727
+ - **v1.1.0** — the wait, and a window ORC can finally see · _2026-08-31_
728
+ - **v1.0.0** — config, phases and calls stop being prose · _2026-08-30_
729
+ - **v0.56.1** — a worker that is alive and doing nothing · _2026-08-28_
730
+ - **v0.56.0** — a rename moved the command, and nobody could reach the fix · _2026-08-27_
731
+ - **v0.55.2** — a gate that is never probed is a gate that is always off · _2026-08-27_
732
+ - **v0.55.1** — ORC is on npm · _2026-08-27_
733
+ - **v0.55.0** — a score is what a band needs, and four lanes do not have one · _2026-08-26_
734
+ - **v0.54.0** — a failed dispatch is a POSITION, not a blank page · _2026-08-25_
735
+ - **v0.53.4** — the reload that dropped its own token · _2026-08-24_
736
+ - **v0.53.3** — the key it never sent · _2026-08-24_
737
+ - **v0.53.2** — the cost that was paid and never written down · _2026-08-24_
738
+ - **v0.53.1** — "up to date" now names what it checked · _2026-08-23_
739
+ - **v0.53.0** — the schema the provider rejected, and a routing table you can read · _2026-08-23_
740
+ - **v0.52.0** — the connection that could not be used, and the routing nobody could see · _2026-08-23_
741
+ - **v0.51.0** — the tools you already have, and a connection that proves itself · _2026-08-22_
742
+ - **v0.50.0** — work that runs somewhere else · _2026-08-22_
743
+ - **v0.49.5** — house rules are text, and the hand-back writes itself · _2026-08-21_
744
+ - **v0.49.4** — the panel was being handed half an answer · _2026-08-20_
745
+ - **v0.49.3** — coverage on a large repo · _2026-08-19_
746
+ - **v0.49.2** — house rules, a run map before you pay, and three defects · _2026-08-18_
747
+ - **v0.49.1** — the challenge council, and a `--json` that stops throwing things away · _2026-08-18_
748
+ - **v0.49.0** — the document is a folder, and the file is a build artifact · _2026-08-17_
749
+ - **v0.48.1** — one file per thing, and a document that can be finished · _2026-08-16_
750
+ - **v0.48.0** — a document long enough to end a session, written anyway · _2026-08-13_
751
+ - **v0.47.0** — the lane that refuses to produce · _2026-08-12_
752
+ - **v0.46.1** — see a lane run before you pay for one · _2026-08-12_
753
+ - **v0.46.0** — a lane that remembers, a lane that declines, and a lane that measures · _2026-08-10_
754
+ - **v0.45.0** — `/orc-brainstorm`: for when you do not have the idea yet · _2026-08-10_
755
+ - **v0.44.1** — apply when you say so, and a spotlight that survives a banner · _2026-08-09_
756
+ - **v0.44.0** — the panel stops making you type what it already knows · _2026-08-09_
757
+ - **v0.43.7** — the flow you can see, and a boundary you can read · _2026-08-09_
758
+ - **v0.43.6** — `orc ui` in two languages, and panels that point at the right page · _2026-08-08_
759
+ - **v0.43.5** — the update check works, and the UI teaches itself · _2026-08-08_
760
+ - **v0.43.4** — a warning that finally clears, an Experiment panel, crosslink from the UI · _2026-08-08_
761
+ - **v0.43.3** — `orc ui`: it tells you about updates, and 36 keys stop being a wall · _2026-08-08_
762
+ - **v0.43.2** — `orc ui`: boxes stop colliding, because the container owns the gap · _2026-08-08_
763
+ - **v0.43.1** — the panel's stylesheet and script actually reach the browser · _2026-08-08_
764
+ - **v0.43.0** — `orc ui`: a control panel for everything that is not ai · _2026-08-08_
765
+ - **v0.42.0** — Say what you mean, see what it costs, find your way back · _2026-08-08_
766
+ - **v0.41.0** — A wiki that can tell you it is fresh, and TDD only where it can fail · _2026-08-06_
767
+ - **v0.40.0** — Gotchas: repair memory that outlives the run · _2026-08-06_
768
+ - **v0.39.0** — The read ladder, and foreign input that is evidence rather than instruction · _2026-08-06_
769
+ - **v0.38.1** — `orc doctor --json` + handoff carry-over that says what is re-derived · _2026-08-06_
770
+ - **v0.38.0** — `/orc-quick`: the quick lane, and the gate no config can collapse · _2026-08-05_
771
+ - **v0.37.0** — Stacked pull requests: a measured ship gate + two standalone lanes · _2026-08-03_
772
+ - **v0.36.0** — `opus5_only`: one model for every role, not just executors · _2026-08-02_
773
+ - **v0.35.0** — `opus5_executor_only`: one model, effort as the cost dial · _2026-08-02_
774
+ - **v0.34.8** — `orc pattern status` rejects a language key the payload has never heard of · _2026-08-01_
775
+ - **v0.34.7** — DIY: a usable status contract, and compile docs that match the compiler · _2026-08-01_
776
+ - **v0.34.6** — Analyze: the evidence gate now covers the rows a good analysis produces · _2026-08-01_
777
+ - **v0.34.5** — Wiki: stop losing tags silently, let a delta clear its own delta · _2026-08-01_
778
+ - **v0.34.4** — Planner: scorable facets, and TDD rules scoped to reality · _2026-08-01_
779
+ - **v0.34.3** — Slice boundary: the worktree, not the editor · _2026-08-01_
780
+ - **v0.34.2** — Trace subsystem: the pointer clobber, and a writer contract that holds · _2026-08-01_
781
+ - **v0.34.1** — Install integrity: run state survives `orc update` · _2026-08-01_
782
+ - **v0.34.0** — Opus 5: top scoring band, every core role, medium-effort session tier · _2026-07-25_
783
+ - **v0.33.0** — Knowledge deepening + verification revamp · _2026-07-25_
784
+ - **v0.32.0** — Trace revamp: narration is dispatched, not remembered · _2026-07-24_
785
+ - **v0.31.0** — Execution-integrity revamp: plan handoff, attributable traces, facet scoring · _2026-07-23_
786
+ - **v0.30.0** — Scoring revamp, Fable 5 role override, tier-aware guards, `orc onboarding` · _2026-07-23_
787
+ - **v0.29.0** — Drift-prevention hardening: install manifest + prune, `orc doctor`, a real test suite · _2026-07-22_
788
+ - **v0.28.1** — Defect fixes: package encoding, trace event routing, count/doc drift · _2026-07-22_
789
+ - **v0.28.0** — Run integrity: rich full-lane traces, deterministic wave stop, visible knowledge gates · _2026-07-21_
790
+ - **v0.27.0** — `/orc-poly`: plan one change across two-or-more repos without drift · _2026-07-20_
791
+ - **v0.26.0** — Test-gen output pinned to a visible `test-generator/<change-slug>/` deliverable · _2026-07-19_
792
+ - **v0.25.1** — Eval report: the full 17-lane suite graded against the v0.25.0 payload · _2026-07-18_
793
+ - **v0.25.0** — Deterministic artifact detection: a generated wiki/pattern is never missed · _2026-07-18_
794
+ - **v0.24.0** — Crosslink fused into wiki generation: always-on, per-scan-task, never wiped · _2026-07-18_
795
+ - **v0.23.0** — Trace fix: SPAWN restored on the `Agent` tool, stale runs rotate to fresh files · _2026-07-18_
796
+ - **v0.22.0** — `/orc-learn`: per-feature onboarding docs — learning.md + knowledge.md, wiki-deep, git-ignored · _2026-07-17_
797
+ - **v0.21.0** — Statusline shows live subscription usage: 5h ↔ weekly, official numbers · _2026-07-16_
798
+ - **v0.20.0** — One source of truth: generated executor agents + shared cross-lane contracts · _2026-07-16_
799
+ - **v0.19.0** — Thin spines: skill compaction, budget lint, and a trace that logs every phase · _2026-07-16_
800
+ - **v0.18.0** — `orc wiki sync`: the wiki registers itself — a paused scan is no longer an invisible wiki · _2026-07-15_
801
+ - **v0.17.3** — Trace the wiki consult: Phase 1 now logs whether the run grounded in the wiki (and if it was stale) · _2026-07-14_
802
+ - **v0.17.2** — Behavior-trace logging is permanent + the trace folder is now created deterministically · _2026-07-14_
803
+ - **v0.17.1** — Complete cross-repo crosslink setup guide in the orc-wiki README · _2026-07-14_
804
+ - **v0.17.0** — `orc crosslink`: cross-repo wiki references — advisory boundary contracts · _2026-07-14_
805
+ - **v0.16.1** — Interactive `orc diy` composer + numbered picks in `orc config` · _2026-07-14_
806
+ - **v0.16.0** — `/orc-diy`: build your own lane — CLI-composed flow, compiled, hard-gated · _2026-07-14_
807
+ - **v0.15.0** — Wiki v2: evidence-anchored docs · per-file staleness registry · integrity gate · _2026-07-14_
808
+ - **v0.14.0** — Postgres data-access playbook: cross-cutting query grounding · _2026-07-13_
809
+ - **v0.13.0** — `/orc-claude`: local CLAUDE.md builder — fenced sections, fingerprint refresh, zero questions · _2026-07-12_
810
+ - **v0.12.0** — Lossless context-combiner: conservation gate · overlap taxonomy · evidence freshness · _2026-07-12_
811
+ - **v0.11.0** — `/orc-fast`: knowledge-gated speed lane + wiki freshness infrastructure · _2026-07-12_
812
+ - **v0.10.1** — README: a fuller "Why ORC exists" · _2026-07-12_
813
+ - **v0.10.0** — `/orc-ultra`: max-effort advisor + three judgment gates for ultra-complex work · _2026-07-12_
814
+ - **v0.9.0** — Trust-but-verify the analyst→planner chain: quote-anchored evidence · coverage gate · anchored judgment · _2026-07-12_
815
+ - **v0.8.1** — /orc-retro delivers upstream: PR/issue to the ORC repo, channel-gated · _2026-07-12_
816
+ - **v0.8.0** — Close the loop: grounded intake · scoring anchors · OUTCOME marker · /orc-retro trace miner · eval harness · _2026-07-12_
817
+ - **v0.7.0** — Evidence everywhere: grounded plans · verbatim proof · anchored findings · contract lint · trace fixes · _2026-07-12_
818
+ - **v0.6.0** — P0–P3 ladder · house rules · deep playbooks + wired gates · 3 new languages · FE rule packs · security pass · _2026-07-11_
819
+ - **v0.5.1** — Statusline false-degrade fix · _2026-07-11_
820
+ - v0.5.0 — Code-pattern findings: executors match your house style, invariants always enforced
821
+ - v0.4.5 — Rewrite weak worker descriptions (the real score lever)
822
+ - v0.4.4 — Act on external review: raise sub-70 workers, fix cross-spine paths
823
+ - v0.4.3 — `orc-analyze`: trim description under the 1024-char skill-spec limit
824
+ - v0.4.2 — External-review pass: worked examples + sharper mini-analyst activation
825
+ - v0.4.1 — `orc-mini`: faster, safer fast-lane — smoke gate, opt-in tests, trimmed ceremony
826
+ - v0.4.0 — Opt-in Phase 6.5 Test Authoring (writes test cases, never runs them)
827
+ - v0.3.0 — Opt-in behavior-trace logging + claimed-vs-actual model verification
828
+ - v0.2.4 — `orc-analyze`: gather anchored adjacent-scope context (non-actionable)
829
+ - v0.2.3 — Context Combiner: merge 2+ related analyses into one combined spec
830
+ - v0.2.2 — Config: enforce per-key override-first resolution
831
+ - v0.2.1 — Move config editing into the `orc config` CLI (zero-token); drop `/orc-config`
832
+ - v0.2.0 — Doc-optional evidence-backed analyst + deep mode
752
833
 
753
- ---
834
+ </details>
754
835
 
755
836
  ## Yang dibutuhkan
756
837