Skip to content

v0.6.7

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Oct 23:07
· 296 commits to main since this release
0e0f67c

ripwire 0.6.7: more complete answers, faster calls, fewer bytes. Caller rows now name their call sites, --lego
walks the whole subclass tree, and --whereis labels other branches' definitions with the parser. A warm CLI call costs
faster, and --whereis is about three times faster: --whereis=lego on this repository takes 4.7 s instead of 13.3 s and returns
18,616 bytes instead of 56,075 (0.6.5 vs 0.6.7, same checkout).

Read this first: the routing default changed (#381)

An install with no ~/.ripwire/meter.conf now splits sessions (arm=auto): about half get no routing hints and no
SessionStart primer, so the treatment-versus-control comparison has a control group. Put arm=treatment in
~/.ripwire/meter.conf to keep the old behaviour. Prompts starting with <channel or <agent-message are now treated
as harness events. Thanks @ahmedibrahim085.

Complete answers

  • --callers / --safe-delete rows carry sites_at=, the call sites as file:line, so the first answer holds the lines to edit --callers=escapeXml on this repository: the 40 caller rows of its first answer, of 142 callers, carry 79 call lines (0.6.5: none).
  • --lego lists implementors below a direct one (via=, depth=). A two-level formatter hierarchy fixture: 5 of 5 implementors (was 2).
  • --whereis labels another ref's rows by parsing the blob. --whereis=escapeXml on this repository: 2 rows, both the declaration (was 60 rows, 54 of them call sites).
  • --for gives the function a question names its own call-hop row. On 32 --for questions over 8 public repos, 8 answers gain it and 23 are byte-identical (+1.4% bytes in total).
  • The default map lists directories and entry points it used to cut. tmux input.c, key-bindings.c and main now appear (+7.0% median bytes).
  • --impact rolls its reach up per file. tmux --impact=grid_set_cell names input.c and window-client.c (was neither).

Faster

  • A warm --callers call on a 3,100-file snapshot went from 319 to 269 ms, every answer byte-identical (about 8–10% on this repository against 0.6.5).
  • --whereis on a checkout with 139 local branches: 12.3 s → 3.7 s; --whereis=lego on this repository's 596 refs: 13.3 s → 4.7 s (vs 0.6.5).
  • Memory, plainly: --whereis now parses other branches' files to tell definitions from call sites, so its peak is about 1.0 GB, up from 0.6 GB in 0.6.5 (--whereis=lego, 596 refs). Within this release it was cut from 1.42 GB by reading back only the files it parses.

Smaller answers, same rows

  • --whereis=lego: 56,075 → 18,616 B against 0.6.5 (129,314 B mid-cycle), every row kept. A long line's t= is a 200-byte preview, and next= replays it whole.
  • --expand / --outline drop the ride-along map once every definition is served. --expand=subtokens: 26,791 → 5,317 B.
  • --grep=split-window on tmux: 16,108 → 5,453 B, with the defining line first.
  • A clean-tree --quality-delta prints its verdict, not its acks: 14,594 → 978 B on this repository.

Honest answers

  • A C++ call named like a standard member (empty, size, find, …) binds no in-tree namesake unless a rule ties its receiver to one. On this repository's map, top-20 rows carrying such a name: 14 → 0.
  • A call bound by name alone keeps its rows and says so (via="name"), and typed receivers resolve. Cost: +2.04% bytes over 210 calls on eight public repositories.
  • The cross-branch verbs, --whereis and the git history walk refuse or disclose when git could not be read. They no longer answer hits="0" or a silent empty churn.
  • A compact --for answer fits an explicit --token-budget wherever the full dialect does, and says why where it cannot.
  • --seams no longer reports doc-to-doc links as untested seams. They are counted in doc_links= (53 on this repository).

Imports and languages

  • JS/TS and Go import edges come from the shared @import.path capture (#358), with output byte-identical. The C-family slice is from @lennix1337 (#368).
  • Ruby calls resolve by Ruby's method lookup: mixins, class objects, self, built receivers, RSpec targets and Rails callbacks (#373, #325, #338, thanks @andriytyurnikov).
  • A Rails db/schema.rb renders its columns as definitions (#339, thanks @mpapis).

MCP and paging

  • --for / --pack-task under a budget take a resumable --limit/--offset window, and MCP explore gains limit/offset (#362, thanks @pt-act; issue #294).
  • A memory guard on every root gives a disclosed partial answer instead of unbounded growth (#350, thanks @KilimcininKorOglu).

Fixed before release

  • C++: a call on an element of a standard container whose element type is in-tree (m[k].empty(), .at(), .front(), .back()) keeps its by-name edge instead of being declined as a standard member (ninja ParseRule's bindings_["rspfile"].empty()).
  • --impact with a name that matches more than one definition: a file row whose symbols were matched by name alone says so (via="name" / by_name=), instead of reading as a proven dependant.

Thanks

Code: @andriytyurnikov, @lennix1337, @mpapis, @pt-act, @llvm-x86 (#342/#351: the Linux sanitizer path builds again).
Reports: @ahmedibrahim085 (#381), @KilimcininKorOglu (#350), @toasterbook88 (#353, --scan-skills net-exfil grading).
Want to help? CONTRIBUTING.md now maps each feature family to its one shared handler, with slices you can claim.

Versions and caches

The parser version is now 167 and the cache version 31, so caches and quality snapshots from earlier builds are rebuilt once on first run.

Full notes: CHANGELOG.md, section 0.6.7.