@azure-id/orc 1.8.1 → 1.8.2
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 +220 -0
- package/README-id.md +90 -71
- package/README.md +77 -31
- package/bin/cli.js +45460 -44867
- package/bin/graph-extract.js +2409 -120
- package/bin/graph-gain.js +404 -0
- package/bin/graph-map.js +232 -0
- package/bin/graph-notes.js +49 -8
- package/bin/graph-query.js +1770 -808
- package/bin/graph-resolve.js +93 -16
- package/bin/graph-shard.js +325 -0
- package/bin/graph.js +658 -605
- package/bin/verify-contracts.js +140 -0
- package/bin/verify-package.js +14 -0
- package/bin/webui/api.js +6 -0
- package/bin/webui/fixtures/index.js +6 -1
- package/bin/webui/fixtures/knowledge.js +41 -1
- package/bin/webui/fixtures/stats.js +107 -104
- package/bin/webui/i18n/en/knowledge.json +16 -1
- package/bin/webui/i18n/id/knowledge.json +16 -1
- package/bin/webui/js/panels/knowledge.js +68 -3
- package/package.json +1 -1
- package/templates/agents/orc-executor-haiku-4-5.md +8 -13
- package/templates/agents/orc-executor-opus-4-7-high.md +8 -13
- package/templates/agents/orc-executor-opus-4-7-med.md +8 -13
- package/templates/agents/orc-executor-opus-4-8-high.md +8 -13
- package/templates/agents/orc-executor-opus-5-high.md +8 -13
- package/templates/agents/orc-executor-opus-5-low.md +8 -13
- package/templates/agents/orc-executor-opus-5-med.md +8 -13
- package/templates/agents/orc-executor-sonnet-4-6-high.md +8 -13
- package/templates/agents/orc-executor-sonnet-4-6-med.md +8 -13
- package/templates/agents/orc-executor-sonnet-5-high.md +8 -13
- package/templates/agents/orc-graph-noter-sonnet-4-6-med.md +15 -12
- package/templates/hooks/README.md +13 -3
- package/templates/hooks/orc-graph-hook.js +148 -13
- package/templates/skills/_shared/code-graph.md +148 -20
- package/templates/skills/_shared/phases/execution.md +13 -11
- package/templates/skills/_shared/phases/planning.md +8 -1
- package/templates/skills/_shared/phases/ship.md +5 -1
- package/templates/skills/_shared/phases/trace.md +2 -0
- package/templates/skills/_shared/phases/wiki-consult.md +1 -1
- package/templates/skills/_shared/read-ladder.md +10 -2
- package/templates/skills/orc/SKILL.md +1 -1
- package/templates/skills/orc-analyze/SKILL.md +13 -13
- package/templates/skills/orc-diy/references/flow-schema.md +1 -1
- package/templates/skills/orc-wiki/references/staleness.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,226 @@ Format: `### v<version> — <title> _(<date>)_`.
|
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
+
### v1.8.2 — the map that finds what a grep cannot _(2026-09-21)_
|
|
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
|
+
v1.8.0 shipped the code graph with a known hole. A card listed every caller that
|
|
26
|
+
NAMES a symbol, so a test that reaches a route by its URL was not a caller, and
|
|
27
|
+
the card was silent about it. On one real question the graph declared eleven
|
|
28
|
+
route-level tests absent. This release closes that hole and four more like it,
|
|
29
|
+
adds five languages, and makes the map answer faster than it could before.
|
|
30
|
+
|
|
31
|
+
**Nothing you have to do.** The index upgrades itself. Engine `graph@5` re-reads
|
|
32
|
+
every record the first time you run `orc graph update` after this release; a
|
|
33
|
+
Django-sized repository takes about 14 s once, and every update after that is
|
|
34
|
+
small again. The graph is still **off by default**: `orc config set code_graph on`.
|
|
35
|
+
|
|
36
|
+
**A URL is now an edge.**
|
|
37
|
+
|
|
38
|
+
- `request(app).get("/orders/search")`, `client.post("/api/orders/")` and
|
|
39
|
+
`httptest.NewRequest("GET", "/p")` reach the route they resolve to. The card
|
|
40
|
+
prints `← reached via GET /orders/search tests/orders.test.js:27 ROUTE`,
|
|
41
|
+
`orc graph impact` follows it, `orc graph changes` counts it, and the `tests`
|
|
42
|
+
line names the test file.
|
|
43
|
+
- A decorated handler keeps its own symbol and gains a `<METHOD> <path>` alias,
|
|
44
|
+
with the class or router prefix folded in — `@Controller("orders")` plus
|
|
45
|
+
`@Get(":id")` is `GET /orders/:id`. A mount from another file (`app.use`,
|
|
46
|
+
`include_router`, `register_blueprint`, Django `include`) is applied when the
|
|
47
|
+
card is read. `ctx "GET /orders/:id"` and `ctx OrdersController.find` both
|
|
48
|
+
answer.
|
|
49
|
+
- A URL whose prefix is built at run time (`BASE + "/p"`) matches by its tail.
|
|
50
|
+
Two routes that match one URL are `AMBIGUOUS`, with both listed. **The graph
|
|
51
|
+
still never guesses.** `ROUTE` is a new state word beside `LOCAL`, `IMPORT`
|
|
52
|
+
and `UNIQUE`.
|
|
53
|
+
|
|
54
|
+
**Four more ways the map used to lose a caller.**
|
|
55
|
+
|
|
56
|
+
- **An instance alias.** `const svc = new OrderService(); svc.run()` now links to
|
|
57
|
+
`OrderService.run`. An alias head is a class name, so `router.get` with
|
|
58
|
+
`router = Router()` is `UNRESOLVED (external)` — not a list of every `get` in
|
|
59
|
+
the repository.
|
|
60
|
+
- **An inherited member.** `this.ok()` in a subclass finds `Base.ok`, and
|
|
61
|
+
`super.m()` skips the class's own `m`. The edge carries the state the base
|
|
62
|
+
class resolved with, plus `inherited`.
|
|
63
|
+
- **A barrel re-export.** An import searches the file it names first, then the
|
|
64
|
+
files that file re-exports, three deep. A barrel that defines the name itself
|
|
65
|
+
wins over one that passes it on.
|
|
66
|
+
- **A guess we removed.** A bare call with no receiver (`get("/p")`) no longer
|
|
67
|
+
resolves to the only method in the repository with that name. In v1.8.1 every
|
|
68
|
+
supertest `.get(...)` was recorded as a caller of some class method. That was
|
|
69
|
+
an invented edge, and it is gone.
|
|
70
|
+
|
|
71
|
+
Measured on two real repositories, v1.8.1 to v1.8.2:
|
|
72
|
+
|
|
73
|
+
| | django/django | nestjs/nest |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| confident edges | 65,379 → **72,955** | 7,288 → **9,426** |
|
|
76
|
+
| `UNIQUE` guesses | 23,866 → **6,442** | 1,957 → **275** |
|
|
77
|
+
| `AMBIGUOUS` hints | — | 81,485 → **33,906** |
|
|
78
|
+
| routes found | **656** | **344** |
|
|
79
|
+
| first build | 12.5 → 13.7 s | 3.1 → 4.0 s |
|
|
80
|
+
|
|
81
|
+
**Five more languages.** Ruby, Rust, Kotlin, Vue and Svelte single file
|
|
82
|
+
components (the `<script>` block, at the file's own line numbers) and C / C++.
|
|
83
|
+
The measurement that matters is how much of a real repository the parser could
|
|
84
|
+
not finish: rubocop **2.4%**, tokio **0.3%**, ktor **1.4%**, primevue **0.5%**,
|
|
85
|
+
sveltejs/svelte **0%**, abseil-cpp **1.7%**, redis **4.5%**.
|
|
86
|
+
|
|
87
|
+
**Borrowed parsers, where your project already has the tool.** Python already
|
|
88
|
+
used the `ast` of a Python on PATH. TypeScript and JavaScript now use your own
|
|
89
|
+
`node_modules/typescript`, and Go uses the `go` on PATH. ORC still has zero
|
|
90
|
+
dependencies, the record names the rung that read it (`extractor:
|
|
91
|
+
typescript@5.9.3`), and a failure falls back file by file. `ORC_GRAPH_NO_BORROW=1`
|
|
92
|
+
forces the heuristic everywhere.
|
|
93
|
+
|
|
94
|
+
> **This one missed its gate and ships anyway, on the maintainer's call.** The
|
|
95
|
+
> gate was a 10-point rise in the share of calls resolved with confidence. It
|
|
96
|
+
> measured **+1.0** on nestjs/nest, **−0.3** on vuejs/core and **−0.3** on hugo.
|
|
97
|
+
> The gate measured the wrong thing: that share is held down by calls into
|
|
98
|
+
> packages outside the repository, which no parser can resolve. What did move is
|
|
99
|
+
> INVENTED edges — `UNIQUE` guesses fell 36–40% and `IMPORT` facts rose. The
|
|
100
|
+
> borrow is more correct, not more complete. It costs +0.24 s (TypeScript) and
|
|
101
|
+
> +0.70 s (Go) on a one-file update. There is no new config key, on purpose.
|
|
102
|
+
|
|
103
|
+
**Fewer round trips.**
|
|
104
|
+
|
|
105
|
+
- **`orc graph ctx … --source [N]`** appends the target's own lines to the card
|
|
106
|
+
(80 by default, 200 at most), charged to the same budget. The card and the
|
|
107
|
+
range arrive in one call.
|
|
108
|
+
- **`orc graph ctx --for-slice <files…>`** prints only the OUTSIDE view of each
|
|
109
|
+
declared file: who calls into it and from which line, who imports it without
|
|
110
|
+
calling, which routes it answers, which tests cover it. No symbol table. An
|
|
111
|
+
executor reads its own files in full anyway, so a file card repeated what it
|
|
112
|
+
was about to read — on every later turn of that agent. The outside view is
|
|
113
|
+
30–51% smaller than the card it replaces.
|
|
114
|
+
- **`orc graph update --notes-pending`** answers the update and the notes batch
|
|
115
|
+
in one process and one lock.
|
|
116
|
+
- **A card prints one-letter states with a legend only when that is smaller**
|
|
117
|
+
than the words. A three-row card keeps the words. Always-short made small
|
|
118
|
+
cards bigger, which is the opposite of the point.
|
|
119
|
+
- **A card that hid nothing prints no footer.**
|
|
120
|
+
|
|
121
|
+
**The hook learned two more moments.** A shell search (`grep`, `rg`, `git grep`,
|
|
122
|
+
`findstr`, `Select-String`, `ag`, `ack`) is the same question as a Grep, and now
|
|
123
|
+
gets the same answer. And with `orc config set code_graph_hooks on,read`, a
|
|
124
|
+
whole-file read of a file with many symbols gets one line naming its six most
|
|
125
|
+
reached symbols and their ranges, so the NEXT read can ask for a range. **The
|
|
126
|
+
read always runs.** The hook never blocks a tool call and never rewrites one.
|
|
127
|
+
|
|
128
|
+
**Doc notes — the author's own sentence, for free.** The parser now takes the
|
|
129
|
+
first sentence of a docstring, a JSDoc block, a `///` run or a `#` block and
|
|
130
|
+
prints it on the card as `doc <sentence> (parser · current)`. It costs no model
|
|
131
|
+
tokens, and it is re-extracted with the body, so it cannot go stale on its own.
|
|
132
|
+
A comment can still lie, so a CURRENT model note outranks it: the order is
|
|
133
|
+
current note → doc → stale note.
|
|
134
|
+
|
|
135
|
+
> **We expected this to cover most of a repository. It does not.** The plan said
|
|
136
|
+
> more than 60% of symbols would carry a doc. Measured: **19.9%** on django
|
|
137
|
+
> (30.6% of non-test source), **7.1%** on nest (9.0%). The extractor is right —
|
|
138
|
+
> the comments are simply not there. The number in this file is the measured
|
|
139
|
+
> one.
|
|
140
|
+
|
|
141
|
+
**`orc graph gain` — what the map put in, and an estimate of what it kept out.**
|
|
142
|
+
Every read appends one line to a local ledger. The command adds them up and
|
|
143
|
+
keeps three kinds of knowing apart, because merging them produces a number
|
|
144
|
+
nobody can check:
|
|
145
|
+
|
|
146
|
+
- **paid** — the tokens the graph put into a context. Recorded, exact.
|
|
147
|
+
- **avoided** — what searching would have cost for the same question. **An
|
|
148
|
+
estimate**, always a range, never one number.
|
|
149
|
+
- **measured** — `--measured` reads your own runs with the graph on against your
|
|
150
|
+
runs with it off, and prints nothing until there are three of each.
|
|
151
|
+
|
|
152
|
+
It never prints a percent of a session, it never blocks a read, and `orc stats`
|
|
153
|
+
reports `graph: null` when there is no ledger — never a confident zero.
|
|
154
|
+
|
|
155
|
+
**`orc graph map` — the question you ask before you know a file name.** It ranks
|
|
156
|
+
every indexed file by how much of the repository's own call and import traffic
|
|
157
|
+
flows through it, and prints the top files with their most important symbols and
|
|
158
|
+
line ranges, inside a token budget. `--focus src/orders/service.js,createOrder`
|
|
159
|
+
re-ranks the whole repository around those files or names; it never filters it.
|
|
160
|
+
A test file ranks lower (by ten), a file whose every symbol is private ranks
|
|
161
|
+
lower (by half), and an edge is weighted by the square root of its call count, so
|
|
162
|
+
one import used in a loop does not outrank ten separate callers. **Rank is a hint
|
|
163
|
+
about where to look first, never proof that a file matters to this change** — the
|
|
164
|
+
card says so itself.
|
|
165
|
+
|
|
166
|
+
> **`map` is wired to PLANNING only, and that was a measurement, not a
|
|
167
|
+
> preference.** The gate was three answerable planning calls per run. Replaying
|
|
168
|
+
> real transcripts measured **0.39** (16 sweeps over 41 main windows), so the
|
|
169
|
+
> plan's own fallback applied and the analyst and `/orc-quick` wiring was
|
|
170
|
+
> removed again. The honest caveat: those transcripts drive lanes over a
|
|
171
|
+
> fourteen-file toy app, where a planner has nothing to sweep. It will be
|
|
172
|
+
> re-measured on a real repository.
|
|
173
|
+
|
|
174
|
+
**A one-symbol card is about twice as fast.** Working out who calls a symbol used
|
|
175
|
+
to mean parsing the whole index. The resolution cache is now also written as
|
|
176
|
+
shards, one file per name prefix, and a one-symbol `ctx` reads only the shards it
|
|
177
|
+
needs. On django: **881 → 480 ms** for the whole command, **361 → 50 ms** for the
|
|
178
|
+
work inside the process. The floor is Node's own start-up, about 300 ms on the
|
|
179
|
+
test machine.
|
|
180
|
+
|
|
181
|
+
The shards answer exactly what the full index answers, **or they decline**. 577
|
|
182
|
+
cards on django and nest were compared with and without them: **0 different.**
|
|
183
|
+
The fast path steps aside for a path, a URL, a `file:line`, a name that is not
|
|
184
|
+
exactly one symbol, `--for-slice`, a file card and any multi-target call, and
|
|
185
|
+
every answer says which path produced it. The cost is disk: django's shards are
|
|
186
|
+
**30 MB**, taking `.claude/orc/graph` from about 87 MB to about 117 MB. The
|
|
187
|
+
update pays nothing measurable.
|
|
188
|
+
|
|
189
|
+
**Also in this release**
|
|
190
|
+
|
|
191
|
+
- **`code_graph_ignore`** — extra paths the graph never indexes, as a
|
|
192
|
+
comma-separated list of globs (`vendor/**,*.gen.ts`). The engine already
|
|
193
|
+
skipped `node_modules`, root `dist/` and `build/`, caches, bundles, `.d.ts`
|
|
194
|
+
and generated files; this adds to that list. A skipped file is reported
|
|
195
|
+
`excluded` by `orc graph coverage`, never in silence.
|
|
196
|
+
- `code_graph_hooks` gains the value `on,read` (see the hook above). `on` and
|
|
197
|
+
`off` behave as before.
|
|
198
|
+
- `orc graph gain` also appears on the `orc ui` Knowledge panel and in one ship
|
|
199
|
+
line, marked an estimate in both places.
|
|
200
|
+
|
|
201
|
+
**Limits we know about**
|
|
202
|
+
|
|
203
|
+
- **Fixed since v1.8.1, with its new limit stated:** a caller that reaches a
|
|
204
|
+
symbol through a URL is now an edge. A caller that reaches it through a job
|
|
205
|
+
runner, a string dispatch, reflection, or a URL assembled at run time from
|
|
206
|
+
parts the parser cannot see is still not an edge and never will be. The file
|
|
207
|
+
still reads as fully parsed, and the card is still silent. **A card's silence
|
|
208
|
+
is not proof of absence.**
|
|
209
|
+
- TypeScript and Go are exact only where the project has the tool. Everything
|
|
210
|
+
else is a heuristic, which is why a card can say `coverage partial`.
|
|
211
|
+
- Java, PHP, Swift, Scala and Dart have no borrowed parser. Ruby's own parser
|
|
212
|
+
(`Prism`) was gated on the heuristic missing more than 5% of a real
|
|
213
|
+
repository. It missed 2.4%, so it was not built.
|
|
214
|
+
- The status line component compares HEAD with the index. Only
|
|
215
|
+
`orc graph status` sees uncommitted edits.
|
|
216
|
+
- The graph hook's delivery on `SubagentStart` is confirmed in a live session.
|
|
217
|
+
The other delivery events are still unconfirmed, and the hook stays silent and
|
|
218
|
+
free if they never are.
|
|
219
|
+
- **It is still NOT a token optimisation, and that is still measured, not
|
|
220
|
+
guessed.** `Grep` and `Glob` results are 0.06% of what a session adds to its
|
|
221
|
+
context, and a perfect locator would save 0.1% of a run. Turn the map on for
|
|
222
|
+
the cards: what calls what, what a change would touch, where the parser could
|
|
223
|
+
not finish. `orc graph gain` reports an estimate and says the word "estimate"
|
|
224
|
+
every time.
|
|
225
|
+
|
|
226
|
+
**How to check it.** `orc config set code_graph on`, then `orc graph update`,
|
|
227
|
+
then `orc graph map` to see the repository ranked, and
|
|
228
|
+
`orc graph ctx <a route or a function>` to see a card. Run `orc update` in your
|
|
229
|
+
project to get the lane changes.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
13
233
|
### v1.8.1 — the guard that only failed on Windows _(2026-09-16)_
|
|
14
234
|
|
|
15
235
|
**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
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|

|
|
14
14
|

|
|
15
15
|
|
|
16
|
-
**Versi terbaru: v1.8.
|
|
16
|
+
**Versi terbaru: v1.8.2** · diperbarui 21-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
|
|
|
@@ -411,30 +411,51 @@ Peta lokal tentang bagaimana kode Anda saling terhubung. **Default-nya mati.**
|
|
|
411
411
|
```bash
|
|
412
412
|
orc config set code_graph on # lane kode membuat dan memakai peta (gratis)
|
|
413
413
|
orc config set code_graph_notes wave # opsional: catatan satu kalimat (memakai token)
|
|
414
|
+
orc graph map # peringkat repositori, sebelum Anda tahu nama berkasnya
|
|
414
415
|
orc graph ctx OrderService.create # kartu: pemanggil, yang dipanggil, efek SQL/HTTP/env
|
|
416
|
+
orc graph ctx "GET /orders/:id" # route juga satu simbol
|
|
415
417
|
orc graph changes # apa yang diubah diff INI, dan seberapa berisiko
|
|
416
418
|
orc graph cochange src/orders.js # apa yang biasanya berubah bersama berkas ini
|
|
417
419
|
orc graph coverage src/orders.js # berapa banyak yang benar-benar dibaca parser
|
|
420
|
+
orc graph gain # apa yang dimasukkan peta, dan perkiraan apa yang ditahannya
|
|
418
421
|
```
|
|
419
422
|
|
|
420
423
|
- **Strukturnya gratis.** CLI mem-parse kodenya. Tanpa model, tanpa dependency.
|
|
421
424
|
Fungsi, method, class dan handler route (`GET /orders/:id`); middleware yang
|
|
422
425
|
dikirim lewat nama menjadi tautan `used by`.
|
|
426
|
+
- **Bahasanya:** JavaScript, TypeScript, Python, Go, Java, C#, PHP, Ruby, Rust,
|
|
427
|
+
Kotlin, C / C++, dan blok `<script>` komponen Vue atau Svelte. Jika proyek
|
|
428
|
+
Anda sudah punya alatnya, ORC meminjamnya dan hasil parse-nya tepat — `ast`
|
|
429
|
+
milik Python, `node_modules/typescript` milik Anda, dan `go` di PATH. ORC
|
|
430
|
+
sendiri tetap tanpa dependency. `ORC_GRAPH_NO_BORROW=1` mematikannya.
|
|
431
|
+
- **URL adalah satu tautan.** Test yang memanggil
|
|
432
|
+
`request(app).get("/orders/search")` adalah pemanggil route itu, dan kartunya
|
|
433
|
+
menyebutkannya. Begitu juga alias instance
|
|
434
|
+
(`const svc = new OrderService(); svc.run()`), method warisan (`this.ok()` →
|
|
435
|
+
`Base.ok`), dan nama yang di-re-export lewat berkas barrel.
|
|
423
436
|
- **Update-nya kecil.** Git sudah menghitung hash setiap file. Hanya file yang
|
|
424
437
|
hash-nya berubah yang di-parse ulang — perubahan dari teman satu tim diperbaiki
|
|
425
438
|
sendiri di preflight berikutnya.
|
|
426
439
|
- **Setiap tautan menyebut seberapa yakin:** `LOCAL`, `IMPORT`, `UNIQUE`,
|
|
427
|
-
`AMBIGUOUS` (semua kandidat ditulis) atau `UNRESOLVED`. Graf tidak
|
|
440
|
+
`ROUTE`, `AMBIGUOUS` (semua kandidat ditulis) atau `UNRESOLVED`. Graf tidak
|
|
441
|
+
pernah menebak.
|
|
428
442
|
- **Kartu punya batas token.** Kartu tidak pernah melewatinya, dan menyebut apa
|
|
429
|
-
yang disembunyikan. `--
|
|
430
|
-
|
|
443
|
+
yang disembunyikan. `--source [N]` menambahkan baris milik targetnya ke
|
|
444
|
+
panggilan yang sama. `--for-slice` hanya mencetak tampak LUAR satu berkas yang
|
|
445
|
+
memang akan dibaca penuh oleh agent. `--format tree` menulis nama kolom satu
|
|
446
|
+
kali saja, bukan di setiap baris.
|
|
447
|
+
- **`orc graph map` menjawab "berkas mana yang penting di sini"** sebelum Anda
|
|
448
|
+
tahu nama berkasnya, di dalam satu batas token. `--focus` menyusun ulang
|
|
449
|
+
peringkat seluruh repositori di sekitar berkas atau nama yang sudah disebut
|
|
450
|
+
permintaan Anda. **Peringkat adalah petunjuk tentang di mana harus melihat
|
|
451
|
+
lebih dulu**, bukan bukti bahwa satu berkas penting untuk perubahan ini.
|
|
431
452
|
- **Graf menunjukkan letak kode. Graf tidak menggantikan membaca kode.** Agent
|
|
432
453
|
tetap membaca rentang barisnya sebelum bertindak. Kepala kartu menulis
|
|
433
454
|
`coverage partial 327-466` jika parser tidak selesai membaca satu berkas —
|
|
434
455
|
**tidak adanya celah yang tercatat bukan bukti bahwa semuanya lengkap.** Kartu
|
|
435
|
-
|
|
436
|
-
sampai lewat
|
|
437
|
-
**diamnya satu kartu bukan bukti bahwa tidak ada apa-apa.**
|
|
456
|
+
menulis pemanggil yang MENYEBUT nama simbolnya atau yang sampai lewat URL:
|
|
457
|
+
pemanggil yang sampai lewat job runner atau dispatch lewat string bukan
|
|
458
|
+
tautan, jadi **diamnya satu kartu bukan bukti bahwa tidak ada apa-apa.**
|
|
438
459
|
- **Setiap jawaban membawa `generation`** — angka yang naik setiap kali peta
|
|
439
460
|
berubah. Kartu yang dikutip lagi nanti tetap bisa ditempatkan pada waktunya.
|
|
440
461
|
- **Peta tetap segar lewat tiga jalan, dan hanya satu yang perlu diingat orang.**
|
|
@@ -444,9 +465,11 @@ orc graph coverage src/orders.js # berapa banyak yang benar-benar dibaca pa
|
|
|
444
465
|
membangunnya di preflight dan memperbaruinya setelah setiap perubahan. Lane
|
|
445
466
|
lain tidak pernah memanggilnya. **Tidak ada yang berjalan dengan pewaktu dan
|
|
446
467
|
tidak ada yang berjalan di latar belakang.**
|
|
447
|
-
- **Hook itu juga memberi pekerja titik acuan yang tadinya harus dicari sendiri
|
|
448
|
-
|
|
449
|
-
|
|
468
|
+
- **Hook itu juga memberi pekerja titik acuan yang tadinya harus dicari sendiri**
|
|
469
|
+
— untuk Grep, Glob, dan pencarian lewat shell (`grep`, `rg`, `git grep`,
|
|
470
|
+
`findstr`) — dan semua yang diberikannya ditandai sebagai data repositori,
|
|
471
|
+
bukan perintah. Matikan dengan `orc config set code_graph_hooks off`; petanya
|
|
472
|
+
tetap bekerja.
|
|
450
473
|
|
|
451
474
|
Kontraknya: `templates/skills/_shared/code-graph.md`. Hook-nya:
|
|
452
475
|
`templates/hooks/README.md`.
|
|
@@ -457,7 +480,11 @@ Kontraknya: `templates/skills/_shared/code-graph.md`. Hook-nya:
|
|
|
457
480
|
> Pencari sempurna — setiap pembacaan berkas penuh menjadi pembacaan rentang —
|
|
458
481
|
> akan menghemat **0,1% dari satu sesi**. Nyalakan peta ini karena Anda ingin
|
|
459
482
|
> kartunya: apa memanggil apa, apa yang akan tersentuh oleh satu perubahan, di
|
|
460
|
-
> mana parser tidak selesai. Bukan demi angka.
|
|
483
|
+
> mana parser tidak selesai. Bukan demi angka. `orc graph gain` memakai kejujuran
|
|
484
|
+
> yang sama: apa yang DIMASUKKAN peta itu tercatat, apa yang ditahannya adalah
|
|
485
|
+
> **perkiraan** yang dicetak sebagai rentang, dan angka terukur baru muncul jika
|
|
486
|
+
> proyek Anda sendiri sudah punya tiga run dengan peta menyala dan tiga dengan
|
|
487
|
+
> peta mati.
|
|
461
488
|
|
|
462
489
|
## `orc ui` — panel kendali
|
|
463
490
|
|
|
@@ -656,7 +683,8 @@ templates/
|
|
|
656
683
|
bin/cli.js pemasang, penyunting pengaturan, penyusun alur, pembaca status
|
|
657
684
|
pekerjaan, dan separuh pasti dari setiap lane. Setiap pembacaan
|
|
658
685
|
bisa menjawab --json
|
|
659
|
-
bin/graph*.js graf kode: penyimpanan, ekstraksi, resolusi
|
|
686
|
+
bin/graph*.js graf kode: penyimpanan, ekstraksi, resolusi + cache dan shard-nya,
|
|
687
|
+
sinyal, catatan, peta berperingkat, pengukur gain
|
|
660
688
|
bin/webui/ `orc ui` — panel kendali lokal: css/ + js/ + i18n/<bahasa>/ +
|
|
661
689
|
fixtures/, satu berkas per lapisan dan per panel. Nol dependensi
|
|
662
690
|
bin/mockrun-catalog.js katalog contoh jalannya (diturunkan dari berkas di disk)
|
|
@@ -732,67 +760,58 @@ Bacalah sebagai catatan putaran itu, bukan sebagai audit terkini:
|
|
|
732
760
|
**Riwayat lengkap: [CHANGELOG.md](CHANGELOG.md)** — atau `orc changelog`, yang
|
|
733
761
|
hanya mencetak yang lebih baru dari versi yang Anda punya.
|
|
734
762
|
|
|
735
|
-
### v1.8.
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
`orc ui`, dan komponen status line `graph`.
|
|
782
|
-
|
|
783
|
-
**Batas yang kami tahu.** TypeScript dibaca dengan pencocokan pola, bukan dengan
|
|
784
|
-
compiler TypeScript. `x = new Service(); x.run()` tampil sebagai `AMBIGUOUS`.
|
|
785
|
-
Pemanggil yang tidak pernah menyebut nama simbolnya — tes route HTTP, penjalan
|
|
786
|
-
job — bukan tautan, jadi baca kartu sebagai titik awal, bukan sebagai daftar
|
|
787
|
-
lengkap yang akan terdampak.
|
|
788
|
-
**Ini bukan optimasi token, dan itu sudah diukur.** Pencarian hanya 0,06% dari
|
|
789
|
-
yang ditambahkan satu sesi ke konteksnya; pencari sempurna pun hanya menghemat
|
|
790
|
-
0,1% dari satu run. Peta ini tidak memakai token model untuk dibangun dan waktu
|
|
791
|
-
baca di atas nyata — nyalakan demi kartunya, bukan demi penghematan.
|
|
763
|
+
### v1.8.2 - peta yang menemukan apa yang tidak bisa ditemukan grep _(21-09-2026)_
|
|
764
|
+
|
|
765
|
+
v1.8.0 merilis graf kode dengan satu lubang yang sudah diketahui: kartu hanya
|
|
766
|
+
menulis pemanggil yang MENYEBUT nama simbolnya, jadi test yang sampai ke satu
|
|
767
|
+
route lewat URL bukan pemanggil dan kartunya diam soal itu. **Sekarang URL
|
|
768
|
+
adalah satu tautan** — begitu juga alias instance
|
|
769
|
+
(`const svc = new OrderService(); svc.run()`), method warisan, dan nama yang
|
|
770
|
+
di-re-export lewat barrel. Panggilan tanpa penerima tidak lagi diarahkan ke
|
|
771
|
+
satu-satunya method di repositori yang namanya sama; tebakan itu adalah tautan
|
|
772
|
+
karangan dan sudah dihapus. Di django, tautan yang pasti naik dari 65.379 ke
|
|
773
|
+
72.955 dan tebakan `UNIQUE` turun dari 23.866 ke 6.442.
|
|
774
|
+
|
|
775
|
+
**Lima bahasa baru** — Ruby, Rust, Kotlin, C / C++ dan blok `<script>` komponen
|
|
776
|
+
Vue atau Svelte. **Parser pinjaman** jika proyek Anda sudah punya alatnya:
|
|
777
|
+
`node_modules/typescript` milik Anda dan `go` di PATH bergabung dengan `ast`
|
|
778
|
+
milik Python. ORC sendiri tetap tanpa dependency.
|
|
779
|
+
|
|
780
|
+
**Lebih sedikit bolak-balik.** `ctx --source [N]` menambahkan baris target ke
|
|
781
|
+
kartunya. `ctx --for-slice` hanya mencetak tampak luar satu berkas yang memang
|
|
782
|
+
akan dibaca penuh oleh agent — 30–51% lebih kecil dari kartu yang digantikannya.
|
|
783
|
+
`update --notes-pending` menjawab keduanya dalam satu panggilan. Hook sekarang
|
|
784
|
+
juga menjawab pencarian lewat shell, dan `code_graph_hooks on,read` menyebut
|
|
785
|
+
enam simbol paling banyak dijangkau di satu berkas besar supaya pembacaan
|
|
786
|
+
berikutnya bisa meminta satu rentang saja.
|
|
787
|
+
|
|
788
|
+
**`orc graph map`** memberi peringkat repositori sebelum Anda tahu nama
|
|
789
|
+
berkasnya, di dalam satu batas token, dengan `--focus`. Peringkat adalah
|
|
790
|
+
petunjuk tentang di mana harus melihat lebih dulu, bukan bukti. **Kartu satu
|
|
791
|
+
simbol kira-kira dua kali lebih cepat** — cache resolusinya sekarang dipecah
|
|
792
|
+
menjadi shard, jadi django turun dari 881 ke 480 ms, dan shard menjawab persis
|
|
793
|
+
sama dengan indeks penuh atau menolak menjawab (577 kartu dibandingkan, 0
|
|
794
|
+
berbeda).
|
|
795
|
+
|
|
796
|
+
**`orc graph gain`** melaporkan apa yang dimasukkan peta — tercatat — dan
|
|
797
|
+
perkiraan, selalu sebagai rentang, tentang apa yang ditahannya. Angka tunggal
|
|
798
|
+
tidak pernah dicetak, dan penghematan yang tidak bisa dibuktikan tidak pernah
|
|
799
|
+
diklaim.
|
|
800
|
+
|
|
801
|
+
**`code_graph_ignore`** adalah kunci baru: glob tambahan yang tidak pernah
|
|
802
|
+
diindeks graf.
|
|
803
|
+
|
|
804
|
+
Dua gate di rilis ini tidak tercapai, dan CHANGELOG menyebutkannya lengkap
|
|
805
|
+
dengan angkanya: parser pinjaman tetap dirilis atas keputusan pemelihara
|
|
806
|
+
walaupun gate tingkat kepastian mengukur +1,0 / −0,3 / −0,3, dan `orc graph map`
|
|
807
|
+
hanya dihubungkan ke perencanaan karena pengukuran ulang transkrip mendapat 0,39
|
|
808
|
+
panggilan perencanaan yang bisa dijawab per run, terhadap gate tiga.
|
|
792
809
|
|
|
793
810
|
<details>
|
|
794
|
-
<summary><strong>Rilis sebelumnya</strong> —
|
|
811
|
+
<summary><strong>Rilis sebelumnya</strong> — 118 rilis, hanya judulnya. Teks lengkapnya (dalam bahasa Inggris) ada di <a href="CHANGELOG.md">CHANGELOG.md</a>.</summary>
|
|
795
812
|
|
|
813
|
+
- **v1.8.1** — the guard that only failed on Windows · _2026-09-16_
|
|
814
|
+
- **v1.8.0** — the code graph: a map of the code that stays fresh · _2026-09-16_
|
|
796
815
|
- **v1.7.1** — the rules card now reaches the agent · _2026-09-14_
|
|
797
816
|
- **v1.7.0** — the rules that keep the slop out · _2026-09-13_
|
|
798
817
|
- **v1.6.0** — the rule that can finally say no · _2026-09-07_
|