Skip to content

v0.6.10

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Nov 08:24
· 55 commits to main since this release
ac86964

[0.6.10] — 2026-11-08

Seventy-one merged pull requests since 0.6.9 (#433 to #570). What a user sees (each entry below states its own measurement and its floors):

  • More complete answers: on our fixed in-sample questions (the same 163 everyday, 39 multi-file and 56 large-repository questions, commands and grader as the README answers table, one call each, no cache), everyday answers complete 129 → 132 of 163 (27 partial, 4 none), multi-file 12 → 19 of 39, large repositories 23 → 30 of 56; required items delivered 1,142 → 1,152, 84 → 114 and 148 → 164; no everyday answer stated something wrong (read in source). Answers are larger: everyday answers total 2.37 MB against 1.95 MB (median 10.7 KB against 10.6 KB), multi-file 722 KB against 536 KB, large repositories 1.97 MB against 1.38 MB, so bytes per complete answer rise from 15.1 to 18.0 KB (everyday) and from 60 to 66 KB (large repositories). One everyday question that read complete in 0.6.9 reads none in 0.6.10 (textual-09; hono-17 stays complete under the rule for exports flagged as public API; the README footnote says why). A grader input lost in a cleanup was restored (GRADER-FIX-1107), so the 0.6.9 and 0.6.10 columns are graded by the same scripts. In-sample questions, so progress between releases, not held-out performance; measured on main just before #570 (the --for anchor-choice change), which these figures do not include.
  • Faster and lighter, as percent changes (each figure is that pull request's own measurement against the build just before it, on one machine; the changes were not measured together, and absolute seconds and megabytes come with the 0.7.0 table, measured on one other machine):
    • Warm --deps and --for on large trees use 35 to 67 % less CPU: vscode --deps -67 %, cockroach --for -57 %, envoy --deps -35 % (#542); a warm TypeScript --deps uses a further 22 % less CPU on vscode (#554). Cold runs gain less: instructions -14 % on vscode, -12 % on cockroach, -4 % on envoy.
    • Peak memory: on macOS the peak footprint of an index is about halved, -49 % on envoy, -47 % on cockroach, -48 % on vscode (#497); a warm run's peak is 30 to 40 % lower (-37 % on envoy, -40 % on terraform, -36 % on cpython) and sits at or under the cold run's (#556); the include closure of a large tree is held in an eighth of the memory, vscode's 32.5 MB of sorted vectors becoming 3.74 MB (-88 %, #505).
    • A file the nesting guard refuses no longer makes every warm run rewrite the whole cache: on envoy a 146 MB write per run is gone (#553; user CPU about 10 % lower, inside that measurement's noise).
  • Fewer false edges and more honest answers: --arch, --deps, --cochange, --impact and --export=cc.json stop reporting coupling from edges the index never had; --deps stops calling every deep graph tangled; a "not found" from an index the memory guard cut no longer reads as proof of absence; unused is printed only when the scan can prove it; a --path chain stitched from calls bound by name alone is no longer printed as the plain answer; a Rust prelude call, a macro with no in-tree binding, and a Python call to a builtin or third-party name no longer bind a same-named definition; --for reads confidence="high" on a name-exact route only when the anchor heads the rows, and hedges a second-hop caller reached only by name.
  • --for reaches more of what a task needs: registration rows and the registry key to what is registered under it (Python signals, TypeScript providers, computed-key registrars and their readers); the sites of a literal, a --flag and its default, a table or registration identifier; the family of an add-a-new-X task and the manifest lines that list a file; the doc sections for a prose question about the docs; re-export hops, alias chains and namespace re-exports; both sides of a missing path from A to B; the callers of the one function a sentence asks about; the implementations that can run at an interface call; the match arm that holds a literal; the one namesake a path word picks, while a test-only anchor among several no longer commits the route; Cargo [[bin]] and package.json bin / main entries; and <syms>, the shown files' other symbols.
  • New and changed verbs: --path and --connect hops print the call site, the call and the callee's signature; --impact sums up the importers a cut listing hides and --impact=<path> lists a file's importers; --defs prints an alias's target and --uses lists the sites written through an alias; reST and Sphinx documents become real units and --recall serves the best-matching part of an HTML page; ripwire wrap claude routes edits through a ranged Read and Claude Code's native Edit.
  • Language specifics: C++ pointers to member functions, using and namespace aliases and function-pointer typedefs; C / C++ quote includes resolve at the include roots a build passes; Rust crate::, super::, self:: and mod x; resolve in the includer's own crate; Python import a.b as c, from-imported submodule calls and src layouts; TS/JS run= runs from the package directory.
  • Contributors: a committed filename can no longer be read as commit metadata in git log framing (@pt-act, #433, #469); a TS/JS test in a subdirectory package gets a runnable run= hint (@llvm-x86, with @rainhuang0220's #330: #335, #442) and --for shows a Cargo [[bin]] and a package.json bin / main entry (@llvm-x86: #459, #460, folded into #511); langfacts slice 6c, Windows warm runs that leave the cache directory's ACL alone and shell test scripts named test-*.sh read as tests (@lennix1337: #471, #468, #496); an aliased Python import a.b as c is a file edge again, and C / C++ include roots with the foreign-qualifier veto (@jflowers: #530, #524, #526, #478); the installer hardening list of #293 (@s0undt3ch: #482); reports that led to fixes: reST and Sphinx documents (@muayyad-alsadi, #409), --for on a file name (@pguerrerolinares, #466), the router skill's language list (@gucliti, #521).
  • Upgrade: caches rebuild once (kParserVer 301, kCacheVersion 49); quality snapshots of the older scheme are not used (scheme 25).
  • Thanks: @pt-act (#433, #469), @llvm-x86 (#442, #459, #460), @lennix1337 (#436, #447, #471, #472), @jflowers (#478, #524, #526, #530), @s0undt3ch (#293), @muayyad-alsadi (#409), @pguerrerolinares (#466), @gucliti (#521) and @rainhuang0220 (#330).

Every entry of this release, with its measurement and its floors, is in CHANGELOG.md.

What's Changed

  • Train 41b: C/C++ member-function pointers and struct-field slots join field calls by @joyful-ii-V-I in #465
  • README: answer quality by release (0.6.5 to 0.6.9) by @joyful-ii-V-I in #467
  • Train 42a: partial-index disclosure, interface dispatch in --for, manifest listings by @joyful-ii-V-I in #470
  • gitmine: a committed filename can no longer be read as commit metadata (#433 by @pt-act) by @joyful-ii-V-I in #469
  • gitmine: a committed filename can no longer be read as commit metadata (git log framing) by @pt-act in #433
  • README: move the Trendshift badge up under the tagline by @joyful-ii-V-I in #474
  • README: release-progress table moves into Measured; four size rows by @joyful-ii-V-I in #475
  • fix(cache): skip chmod when the Windows cache dir is already 0700 (#436 by @lennix1337) by @joyful-ii-V-I in #468
  • fix(test-gate): a TS/JS test in a subdirectory package gets a runnable run= hint (#335) by @llvm-x86 in #442
  • Train 42b: smart-pointer receivers, re-export hops and literal sites in --for, Claude Code edit route by @joyful-ii-V-I in #476
  • test-gate: the #330 default-include check, a subshell run= and the #442 follow-ups by @joyful-ii-V-I in #480
  • Train 43a: honest --path chains and file subjects in --for by @joyful-ii-V-I in #481
  • fix(install): harden skills/install.sh with the installer list from #293 by @joyful-ii-V-I in #482
  • Train 43b: registries, dotted-string imports, base-class hooks and declarations in --for by @joyful-ii-V-I in #483
  • Train 44: Python import edges, honest coupling without file edges, and more --for literal anchors by @joyful-ii-V-I in #485
  • langfacts: slice 6c per-language receiver and comment columns (Fixes #447) by @lennix1337 in #471
  • docs(contributing): refresh the common-code map, add slices #487-#490 by @joyful-ii-V-I in #491
  • isTestPath: read shell test-*.sh / *-test.sh and .e2e-spec. / .perf-spec. as tests (lands the filter part of #472) by @joyful-ii-V-I in #496
  • UNUSED-IN-FILE: --for unused cue on a file carries a per-def verdict table by @joyful-ii-V-I in #503
  • SUBJECT-ANCHOR: --for anchors the symbol a subject names by @joyful-ii-V-I in #502
  • Merging main stops conflicting on the gate list and generated counts by @joyful-ii-V-I in #508
  • TABLE-CONST: --for on a table or registration task reaches the identifier's table rows by @joyful-ii-V-I in #507
  • RULE3-MEMBER-GUARD: Rust/Python Rule 3 calls need a written binding to read as proven by @joyful-ii-V-I in #504
  • ep-manifest: Cargo.toml [[bin]] and package.json bin/main on --for (fold of #459 + #460, @llvm-x86) by @joyful-ii-V-I in #511
  • feat(ep-manifest): Cargo.toml [[bin]] on --for (fixes #450) by @llvm-x86 in #459
  • feat(ep-manifest): package.json bin/main on --for (#451) by @llvm-x86 in #460
  • recall: hand-written reference pages stop being demoted as generated by @joyful-ii-V-I in #510
  • history: bound the git walks and stop hanging on blobless clones by @joyful-ii-V-I in #498
  • deps/impact: four false claims fixed (shape, Rust mod containment, path selector, rollup) by @joyful-ii-V-I in #509
  • --for: TS/JS namespace re-exports, a proven qualifier, and a fallback ladder for an unresolved name by @joyful-ii-V-I in #512
  • Generated docs: published totals come from one dated snapshot, so open PRs stop conflicting on them by @joyful-ii-V-I in #514
  • FILE-GRAPH-CSR: flat file graph and a hybrid closure store built by an SCC fold by @joyful-ii-V-I in #505
  • DOCS-REST: reST and Sphinx documents become real units (#409) by @joyful-ii-V-I in #506
  • SHORT-KEY-SENTENCE: the ladder for one unresolved code-shaped name inside a sentence by @joyful-ii-V-I in #517
  • Edges: a Rust prelude call or a macro with no in-tree binding is not a call into the tree by @joyful-ii-V-I in #515
  • merge_main.sh: skip RST underlines identical to main; refuse a kParserVer both sides bumped by @joyful-ii-V-I in #518
  • Python: a call through a from-imported submodule is a call (--callers stops reading zero) by @joyful-ii-V-I in #513
  • macOS: freed large blocks leave the process (peak footprint about halved); an over-cap run says so by @joyful-ii-V-I in #497
  • Router skill: current language list, --help as source of truth, drift gate (fixes #521) by @joyful-ii-V-I in #523
  • selfcheckcheck: bound the per-site scan windows (251 s -> 14 s locally, output byte-identical) by @joyful-ii-V-I in #525
  • C/C++ quote includes resolve at the repo's include roots (file graph); call narrow unchanged until CPP-EXTQUAL-VETO (C-ROOT-INCLUDE) by @joyful-ii-V-I in #524
  • C++ alias forms become definitions; --defs prints their target (INDEX-ALIAS-CONST) by @joyful-ii-V-I in #520
  • orders literal sites by nearness to the answer and cuts far ones that do not fit (LIT-SITE-DECOY) by @joyful-ii-V-I in #522
  • C/C++ call narrow reads the include roots, behind a foreign-qualifier veto by @joyful-ii-V-I in #526
  • --for prints the callers of the one function a sentence asks about (SUBJECT-CALLERS-NATURAL) by @joyful-ii-V-I in #527
  • Qualified endpoints: --connect counts the qualified definitions, --edit-check keeps the named owner's by @joyful-ii-V-I in #528
  • --dead-code=PATH lists exported functions no non-test caller reaches, labelled apart (DEAD-CODE-SCOPE) by @joyful-ii-V-I in #529
  • --path and --connect hops print the call site, the call and the callee's signature (HOP-CONTEXT) by @joyful-ii-V-I in #535
  • A hop that meets an alias name continues to its target (XF-ALIAS-HOP) by @joyful-ii-V-I in #537
  • --for table block reaches registration rows (REGISTRAR-2) by @joyful-ii-V-I in #539
  • ci(style): run the advisory clang-tidy nightly, not on every PR (saves ~1 h 55 min per PR) by @joyful-ii-V-I in #549
  • perf(cache): a refused file no longer rewrites the whole cache on every warm run by @joyful-ii-V-I in #553
  • --for file tail walks the file page's first 160 rows, not 40 (FOR-TAIL-WIDE) by @joyful-ii-V-I in #536
  • perf(graph): hoist the by-name ladder's call-invariant reads out of the candidate loop by @joyful-ii-V-I in #542
  • Python: an aliased import a.b as c records the module a.b as its Include target (#478 gap 2) by @jflowers in #530
  • perf(resolve): one normalization per TS probe list, a per-build (directory, specifier) memo by @joyful-ii-V-I in #554
  • for: name the shown files' other symbols (, K-WRONGSYM) by @joyful-ii-V-I in #555
  • ingest: a warm run decodes each cached record in its parse worker (warm peak −30–40 %) by @joyful-ii-V-I in #556
  • resolve: Rust file edges resolve in the includer's own crate and module (RUST-ROOTS-A) by @joyful-ii-V-I in #557
  • for: registration rows without a cue word, match-arm excerpts, --flag definitions with their default by @joyful-ii-V-I in #560
  • recall: serve 6 docs by default, and the best-matching part of a long HTML page by @joyful-ii-V-I in #558
  • for: an add-a-new-X task names X's family and where siblings are registered (EXEMPLAR) by @joyful-ii-V-I in #559
  • for: second-hop callers inherit the first hop's by-name hedge by @joyful-ii-V-I in #563
  • for: a header declaration folds only into a definition whose file answers its header (K-DECL-IDENT) by @joyful-ii-V-I in #566
  • rust, toml, naming: CodeRabbit follow-ups from train #562 (use-tree depth, multi-line TOML strings, rename-miner headers) by @joyful-ii-V-I in #567
  • for: a prose question about the docs ends with the top-ranked doc sections (<doc_body>) by @joyful-ii-V-I in #561
  • for: confidence reads high on a name-exact route only when the anchor heads the rows (FRAME-HIGH-CONFIDENCE) by @joyful-ii-V-I in #568
  • for: show both sides of a missing path (path_gap) by @joyful-ii-V-I in #564
  • REG-READER: computed-key registrar writes and their readers in --for by @joyful-ii-V-I in #569
  • ANCHOR-NS: no commit to a sourceless anchor; namesake by path word by @joyful-ii-V-I in #570
  • release: 0.6.10 by @joyful-ii-V-I in #574

New Contributors

Full Changelog: v0.6.9...v0.6.10