Repository navigation
Trains 26c + 27: parser-decided whereis, std-member honesty, call sites first, proven implementors, lean grep/impact/whereis, #362, #339 - #385
Merged
Conversation
… noedge-only, 8 with owner rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…leave out, plus program entries The default map prints the top-k ranked symbols, a few dozen files of a few hundred, and said nothing about the rest: subsystem files ranked just below the cut were silently absent, and a program's main (no in-repo caller, so PageRank's bottom) was never shown. The map scope now appends <inv listed= unlisted=> after the unchanged ranked rows: <entry> rows for program entries by name convention (a main nothing calls but its own module scope, or a __main__.py scope) with their callees, and <ls p= n= f=> rows naming the unshown code files per directory and counting tests, docs, config and test/doc/example trees. Present only when the ranked rows left out a file with code; never under --max-tokens, in=DIR or multi-root. JSON carries the same object; the compact legend reads it. Gate: test/mapinventorycheck.sh (fixture test/mapinvfix). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…or (K50) lowerAscii looped `for( const unsigned char c : text )` over a string_view of char, so every byte >= 0x80 converted implicitly; under the G1 stack (implicit-integer-sign-change, -fno-sanitize-recover=all) any accented letter, CJK or emoji in a prompt aborted the sanitizer build. The loop now narrows explicitly and lowers A-Z only. The same implicit shape sat in four more places that hand an unsigned char parameter to an algorithm over chars (taskroute.h hasMark and the FILE:LINE digit test, lsp.h's two header lowercasers, crossref.h's extension test); each takes char and narrows explicitly. Gate: taskroutecheck.sh K50 arms (red on the base sanitizer binary: 5 failures, rc=134; green on this one). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…2000 The CLI-first paste block and the aider repo-map line told agents to run --for="<your task>" --token-budget=2000. The explicit budget is a hard ceiling: across 40 --for questions on eight open-source repositories the answer fell from a 9.2 KB median to 4.6 KB and dropped signature rows on 35 and call-hop rows on 24 (each cut disclosed, capped="1" + next=). The recipe now names no budget. Only wrap text changes: the --for default and every other knob are untouched. wrapverbscheck section 8 asserts the recipe line exists and carries no --token-budget/--max-tokens; red on the base binary, green here. Also fixes the aider row in the help-wanted prompt. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…he sig trim (<sigs> unchanged) The header asks whether a <calls> row may carry via="name" over the compact hop ids AND the owner rows. When only an owner row answered yes, the via clause entered the header and was charged to the signature side, so <sigs> lost a row (or a doc) that the answer without owner rows kept. The clause is now part of the owner rows' exemption (ownerLegendExemptBytes), next to the qword clause, in both dialects and in the full-dialect cap. ownerhopcheck (S): where the owner rows alone switch the clause on (premise checked), <sigs>/<tail> are byte-identical to the RIPWIRE_NO_OWNER_HOP=1 answer, compact and full, default and --token-budget=3000; every (R) question also compares <sigs>/<tail>. Red before this change (7 FAIL). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… prefix only where an owner frees budget 90e28e1 widened (R) from "same calls" to "the A/B row's calls are a prefix of the head row's" on every question, but no fixture question needed it: QTS, QPY, QC, QCAP and QV all keep exactly the A/B calls. The exact assertion is back on all five (the twin of the old arm). The prefix rule runs only on a new fixture root (gain: fanout is a ranked hop in the A/B answer; as an owner row it moves out and push_batch goes from 5 to 12 names), with a premise that an owner moved and at least one row gained names, so the widened branch is exercised. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hod with a same-named free function Every next= the gate pinned was the FILE:NAME form, so ownerCalleesNext's scoped branch (the reason it exists: two same-named symbols in one file) was never asserted. New fixture root scope: free notify, Bus.notify and Store._notify in app/bus.py; the first cut owner is Bus.notify. The arm pins next="--callees=app/bus.py::Bus::notify", that pasting it resolves defs="1" (flush_queue, mark_dirty), and as a premise that the FILE:NAME form merges two definitions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… before it asserts the pairing is absent Dropping the old --token-budget presence arm left the --max-tokens loop as a negative check with no positive guard on its capture; a wrap that printed no --for line would have passed it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… not cached (K51) A `git log --name-only` that failed (an unreadable object, a bad ref, git not starting) came back as an empty stream and quality::gitRawCommitStreamCached stored it under the (repo, HEAD, window) key, so churn= and amp= read as "no change history" until HEAD moved, with no tell on any verb. RawCommitStream now says `unread` when git would not start or exited non-zero. A flagged walk is returned but never stored, so the next call walks again. main.cpp joins each root's walk through a DISCLOSE sink (historyread.h), and every document that prints churn= or amp= carries history_unread="1" on its root (the map, the ctx family: --for, --pack-task, --from-trace; --grep; the JSON twins) beside a comment that defines it. A walk that read an empty window (no commit yet) stays silent: read-and-empty is a measurement. Gate: qchurncheck.sh K51 arms (a git shim that dies on the walk, and a real removed commit object): red on the base binary (not disclosed, stored, not retried), green here, with a negative for the unborn repository. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e twins --no-inventory drops the default map's <inv> tier (the pre-tier shape; the ranked rows are identical either way). The tier gains two disclosed runaway guards far above every measured repo: at most 32 entries (entry_total=N past it) and at most 2000 file names (names_cut=N; later directories keep n= only). estchargecheck #2/#3 compared payload answers against the bare map as 'the same map'; the bare map now carries a tier the payload maps do not, so the comparison moves to the --no-inventory twin (same rows, premise asserted) and a new #2-tier arm keeps the old direction: the tiered map charges at least what its rows alone do. mapinventorycheck gains the row-identity, important- last and guard-boundary arms; the gate is registered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ot run (K75) --stray-content, --abi, --plan, --eval-stray and the MCP stray_content tool read every branch's content through one `git cat-file --batch` whose sha list is written under the cache directory. With TMPDIR naming a missing directory the list could not be written, every blob read as absent, and the answer was merged="1" for a branch holding unmerged work (--abi: exit 0, no drift). The failure was recorded in StreamBlobStats, which BlobStore and the abi sweep never read. BlobStore now keeps those stats and says unread(); the abi sweep reads its own. computeStrayContent and computeAbiCheck return ok=false with blobsUnread, and each host refuses by name: exit 1 and the cause (naming TMPDIR) on stderr, an MCP -32603, no document. The mechanism is the --whereis refusal's. Sweep of every other cache/temp writer behind an answer (TMPDIR missing vs good, --legend=full, 38 verbs): --merge-scout (arm ok="0" reason=tree_unavailable), --quality-delta REF (exit 1 naming the tree), --edit-check (status="no-baseline"), --edit-check --dry-run (refuses by name), --doctor (the cache row) and the compact-legend capture (stderr note, same answer) already disclose; slice-diff's temp root has a sink. --whereis has the same defect and its fix is on lane/cli-perf-068, not in this base. Gate: crossrefdegradecheck.sh K75 arms (red on the base binary: 5 failures, green here), with a control that the same repo answers on a good TMPDIR. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… @ dropped; the full dialect names the common-verb order The compact and full owner clauses said the row's name "equals" the question word; the match is on the folded name (_notify gets qword="notify", gateway matches "GATEWAY"). The full dialect now also states that a word on the short common-verb list (get, set, run, write, ...) ranks after the other owner words, the rule that decides which owners take the three rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erVer 144 to 149; ruby-lane interaction re-pins (callers 3->1, gauge 2->1, definitions-only held)
…, keep the tier-less twin at the old pin Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tcheck G2) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…finition is served A multi-definition name (and a single-definition --outline) carried the generic top-200 map beside bodies that already answered the request, and the inflated bundle flipped the whole-file comparison. When every requested definition is served the map now defaults to top-k=0: the root carries topk_default and a map_next pointer; when a byte budget cut some definitions the root names exactly those (unserved_total, unserved_next) instead. An explicit --top-k keeps the classic shape. The whole-file comparison prices the payload only. Gates: expandtopk0check gains the multi-def, bodies-cut, whole-file pricing, outline and near-miss arms (its explicit-top-k and ordinary-default twins kept); expandbodyfirstcheck and expandmodecheck (4d) reach the ride-along map through a composed payload now that the plain multi-def shape is lean. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
--expand/--outline no longer carry a ride-along map when every definition is served, so the navigate, orient, router and handoff skills and the README drop the advice to add --top-k=0 to --expand and the claim that an ambiguous bare name costs the whole map; they now say to orient once and follow map_next= only when that step was skipped. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… second copy of it (K50 follow-up) The explicit-narrowing fix made taskroute.h's loop byte-identical to queryshape.h's, which --quality-delta gates as a clone of a reused helper. A using-declaration replaces the copy. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…tline default Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…an its payload bundle Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nd lane Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ngs, generated docs The two runaway guards now disclose in the shared vocabulary (entries_capped/entries_total, names_capped/names_total) and are classified OUTPUT caps. The fixture gains a TS main called by its own module scope and a C# static Main; both are entries by the same rule. The orient skill names the tier and --no-inventory. Regenerated: LIMITS.md, COMMANDS.md, gate counts, README flag and cap counts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le) and a test-named guarded main Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he lean-default predicate Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…lity (an equivalent mutant) isTestSymbol already refuses a candidate def on a test path, and every test directory isTestPath recognizes is a rolled-up directory, so the clause could be deleted with no gate going red. It is gone rather than kept unguarded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nto entries / directory rows / ceiling quality-delta flagged the two new dir/basename helpers as clones of resolve.h includerDir and namesplit::afterLast; both now call those. The selection is three named steps instead of one 54-branch function. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… as a clone) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…id lookup asks for the map The lean multi-definition answer reaches the whole-file serving with topk_default and map_next on its root, so ripwire.expand-file/v1's compact prose pin moves 360 -> 510 and a twin keeps the old 360 B pin for the rest of that legend. The usesselector canonical-id lookup passes --top-k=200 to --outline (the map it reads is no longer the default). map_next's legend sentence is shortened. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e merged tree
From the merged binary (built_from=7f526800): printffmtparitycheck UPDATE_GOLDEN with
UPDATE_GOLDEN_EXPECT moved exactly {callers safe_delete callers_limit help help_all}. The three
verb labels are callers-sites-first-call's sites_at= rows and readings (the merged binary's bytes
equal the lane binary 5be5960's on all three; the lane's own pins predated its fix round's
wording); help/help_all carry the new flags' and the paging list's help text.
mcpmanifestcheck: 47,383 B; per-tool JSON bytes vs the train-26c head differ only in lego
(+184, limit/offset) and whereis (+90, full_text); the ceiling moves 47,240 -> 47,420 (37 B
headroom). CHANGELOG: both entries state the merged-tree figures (47,109 -> 47,293 -> 47,383) with
the lanes' own bases beside them; (1b) reads the last one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(showcasecapturecheck (D)) Neither new flag had a capture case, so (D) named both uncovered (showcase_coverage_check.py on the merged binary: 2/184). Each case sits right after the call it modifies, so (F) checks the pair differs: on this clean tree --quality-delta folds 147 stale acknowledgements to stale= / stale_by_kind= and --show-stale prints them; the --whereis-listing=all page previews 5 long t= lines and --whereis-full-text prints them whole. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ture, COMMANDS.md, dictv, deck counts From build/ripwire at 7f52680 (every train-27 lane merged; src unchanged since): - docs/captures/COMMANDS_showcase_2026-10-11.md captured (test/showcase_capture.py, 264 commands, clean tree @ 3d39afe): it covers --show-stale and --whereis-full-text (184/184 flags), re-derives the --at seed and records the live legend dictionary. - docs/COMMANDS.md rebuilt from it (docs/docs_commands_build.py: 187 flags, 171 samples). - CHANGELOG versions paragraph: the session legend dictionary is dictv=80b7e589253a8e76 entries=855 (`ripwire --legend-dict`). - deck: 191 long flags (--help=all: +--show-stale, +--whereis-full-text), 171 recorded invocations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…th merged) lean-trio and whereis-lean each added one flag; the README's two flag-count sentences said 190 (the whereis lane's count on its 26c base). readmedriftcheck (B) derives 191 from --help. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… notes state what the lane built - src/verbs_navigate.h runSafeDelete: the SafeDeleteLegendFlags aggregate is spelled with designated initializers. Two merged lanes each inserted a bool into it at a different position (stdDeclined, hasSitesAt/sitesCut); positionally, two adjacent bools could trade places and still compile. Same values, same order (the struct's), no behaviour change. - src/ingest_cache.h, CHANGELOG, qschemetripcheck's RE-PIN LOG: lego-transitive's branch built parser 157, 160 and 162, and wrote cache format 30 only at 162 (the notes said 160/162 and 160 / 162). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kinds-count) Both sentences still counted eleven (LINEAGE "three of --quality-delta's eleven kinds", EVALS "the ten measured kinds (eleven since 0.6.5)"); the defect-shape kind made twelve (--help, README, the quality-bar skill and EVALS' own kinds heading say twelve). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…under the 2026-10-11 capture
The re-capture records the same --recall run, so the same two prose lines ("a git log, an API response
dump…", "the git log, the --help text…") again follow a block that ends inside a truncated bash fence and
arm 9's fence tracker reads them as recipe text. Same content hashes as the 2026-10-08 entries; the
exemption is keyed by path + content hash, so the new capture needs its own two entries (the comment
above them said a regenerated capture re-keys them). Nothing walks git history there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e; the change-check skill names it CI run 38126114337 (train 27): helpbudgetcheck (I) — the flag's tier-1 summary ended on ',' (the help line wrapped mid-clause); agentsurfacecheck (A) and skillinstallcheck's flag-home arm (and releaseinstallcheck, which runs it) — the flag was on no agent surface. Lane-caused (whereis-lean; the same four gates are red on the lane head). The summary now ends after "(no preview, no t_bytes=)" with the rest of the entry unchanged, and the change-check skill's --whereis paragraph says what the preview is and that <t_cut next=> replays the page with --whereis-full-text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ers-sites-first-call x #339) CI run 38126114337: "defs-only: name callers" matched the two caller rows byte for byte without sites_at=, which every --callers row carries since callers-sites-first-call. The merged binary's rows are pinned whole (render_label: consumer_ambiguous.rb:8; lookup: pair_def_column.rb:15); the count, the via="name" hedge and the identities are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…anguage condition CI run 38126114337: J1's "gone" probe grepped src/ for `kindIs( t, "export_statement" )`, which lego-transitive's baseDeclOf (ingest_relations.h: `export class X` is the declaration a base clause binds to) now spells for a different purpose. The probe now matches the walk's own line, with its TypeScript/JavaScript condition: present in main 0852bc0's src (RED there, as before), absent from every tree since #358's JS/TS slice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…S.md for the --whereis-full-text summary From the binary built at aa01a7f's src: UPDATE_GOLDEN with UPDATE_GOLDEN_EXPECT="help help_all" moved exactly those two labels; docs/docs_commands_build.py rewrote the flag's entry (187 flags, 171 samples). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dialect does, and says why where it cannot Charging a stubbed lego/compose section at its served size (train 26c) removed the slack that had absorbed the compact header's uncharged bytes (its row ledger is capped at the full dialect's header charge), so the default answer went over budgets the full answer met, with a last-rung note blaming the header floor while the header fit. - a compact answer still over after paying for its sigs continuation pays the measured overrun from the rows too, and is served only when that fits (not on the detail + with-graph shape, which keeps its rows by ruling) - under a spent ceiling the compose/lego readings drop when those sections are stubs - shorter compact hops-cut clause and clause-drop note; the compact echo rung no longer claims an echo drop - the last-rung note blames the header floor only when the header alone is past the allowance, else names the rows and sections (both dialects) - residual, disclosed: at the rank 1..4 row floor a full answer that fits by a few tokens can still leave the larger compact header over Gates: compactlegendcheck (P1-B) green, new (P1-S) sweep over 1100..1700 in both dialects and (P1-S2) for the overrun payment; estchargecheck A7D gains a full-dialect twin, C3 re-pinned to a doc-less twin corpus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…slices, and the qualified-call known gap - "Refuse, don't guess" is the target rule, not yet true for every language: only Elixir, Rust and C++ std:: calls have a qualifier rule; any other language that sets Reference::qualifier falls through to the bare-name ladder when no qualifier::name definition exists (buildGraph). The same over-claim in prompts/add-a-language.md is corrected to match. - A per-family map: the shared mechanism today (file + function), its state (shared / partly / duplicated / none, with --clones evidence) and claimable S/M slices, including the language-neutral qualified-call resolver. - A definition of done for a common-code slice (claim first, byte identity on handled languages, the family's gates, the duplicate deleted, known-gap arms for wrong answers not fixed). - Languages without a grammar: imported (SCIP) vs parsed, and what an imported language does not get. Docs only; no source or test change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
@coderabbitai review |
…guage feature matrix Each family lists its forms (the catalogue the shared-code design is built from), and a short paragraph describes the language feature matrix: one fixture per (language, form) answering indexed? / resolves? / which verbs? / which code? — the feature spec for shared code, which a language PR can fill for its own row. Docs only; no source or test change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…"name" hedge The per-file rollup folded the symbol rows of every same-named definition into plain <rf> rows, dropping the via="name" hedge (reached only through a name-only edge). On a selector matching more than one definition, an rf row now carries via="name" when all its reached symbols are hedged and by_name=K when K are, in the XML, JSON and MCP forms, with a legend sentence that rides only then. A single-definition selector passes no hedge set and folds byte-identically. Gate: impactimportcheck #9g (Python, TypeScript, Go; single-definition and qualified near misses). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, Go interfaces) as one shared method-set check (#386) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tainer's element type StdMemberGate declined `rule->bindings_["rspfile"].empty()` (bindings_ a typedef of std::map<std::string, EvalString>): a subscript receiver carried no recorded type, so the in-tree EvalString::empty lost its hedged caller. One element access (`c[k]`, `c.at(k)`, `c.front()`, `c.back()`) of a one-hop container now records the container's shape (memberPath, parser version 166), and a std container's whole written text rides its type-alias record and a new "elem" field record. The gate reads the element type off that text and keeps the ladder's via="name" hedge when the element's cone holds a candidate; an element written in std (vector<string>, map<K, vector<T>>) stays declined. Gate: test/stdmembergatecheck.sh arm X (elem/), H/W/E arms moved. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ator[], a local hiding the field Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… pointer An empty proven set already means "no row hedged" to impactRowNameOnly, so the single-definition path passes kNoImpactHedge and the fold loop counts without a branch (quality-delta: impactFileRollup complexity back to its baseline). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ixture shapes no longer clone src stdTemplateArgClass / stdElementType are free functions beside the gate (quality-delta verbosity on the struct); three elem/ fixture bodies reshaped so they are no token clone of src or of wrap/ (same receiver shapes, same verdicts). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e lane) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lement-access receivers of std containers with an in-tree element type keep the hedged edge) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (gateexitcheck G2) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…9: --impact file rows keep the by-name hedge of a multi-definition selector) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Version 0.6.5 -> 0.6.7 in CMakeLists.txt; the CHANGELOG [Unreleased] section becomes [0.6.7] - 2026-10-11 with a fresh empty [Unreleased] above it, and gains entries for the map inventory tier, the lean grep/impact/quality-delta trio and the seams doc links, whose lanes merged without one. The README gets the 0.6.7 release-notes paragraph and "Latest" line, docs/EVALS.md the routing window start (2026-10-11), and the stale forward version labels (0.6.6, "0.6.7 work", 0.6.5 on 0.6.7 work) are fixed. kParserVer 166 -> 167 (and its mirror), above the cpp-subscript lane build's 166; test/qschemetrip.hash re-pinned for it. No logic changes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Capture re-recorded from a clean tree at 50dfd49 (the published --at seed moved when graph.h grew); COMMANDS.md regenerated from it. dictv unchanged (80b7e589253a8e76 entries=855), flag counts unchanged (191/187/171), LIMITS/ TUNING/gatecount unchanged by regeneration. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…h 0.6.5 (whereis memory is up: it now parses other branches) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR carries train 26c and train 27 together (26c's PR #384 is green but never received an automated review; its commits are the first part of this branch, and merging this PR merges #384).
Train 26c (see #384 for the per-lane table)
whereis definitions from the parser (and refs read from tree objects), owner hop, map inventory, lean expand, CLI speed (~¼ less per warm call;
--whereison many-branch checkouts ~70% less), #358 import capture (JS/TS + Go slices), honesty-small-b, #362 (budgeted-bundle candidate page, @pt-act), #339 (Railsdb/schema.rbcolumns, @mpapis), plus the #383 CodeRabbit Minors.Train 27
size,empty,find,push_back, …) on an unproven receiver no longer splits over in-tree definitions of that name; it is declined and listed (<stdm>). A receiver whose written type names an in-tree class (incl. throughunique_ptr/shared_ptr/optional, wrapper templates andtypedef/usingaliases) keeps its hedged edge.--callers/--safe-deletelist call sites as file:line in the first answer (sites_at=), matched by leaf name on any receiver; a cut list says so andnext=recovers the rest.--legolists transitive implementors through PROVEN extends/implements/include edges only; a name-only base is hedged (base_by="name"), a base the evidence puts elsewhere is left out and counted, and the walk's stop below an unproven direct row is disclosed (transitive_unwalked=). Ruby include/extend and JS factory classes are covered.--grepserves the string tier for text-shaped literals when code hits are few;--impactadds a per-file rollup beside a cut window; a clean-tree--quality-delta/--edit-checkprints its verdict, folding only rows that cannot answer the question (only at HEAD, only when the fold saves >= 25%, every row recoverable).layer="test"is spelled only for a file under a test directory whose dependents are all test paths.--whereisrow's line text over 300 B prints as a 200 B preview (cut on a UTF-8 boundary) only when that makes the page shorter;--whereis-full-text(MCPfull_text) replays the same page whole-line. Peak memory on the parse-guard path drops ~0.5 GB.Also: CONTRIBUTING gains "Feature families: one shared handler each" (the common-code plan in public form).
Pins:
kParserVer164,kCacheVersion31,kQSnapCacheScheme20 (test/qschemetrip.hashre-derived once). Generated docs regenerated once from the merged binary.Checked: every lane was reviewed (each needed at least one fix round) and signed; a pre-review pass over the conflict-resolved and new hunks; byte identity 32/32 against the 26c head outside the lanes' scope. One known red at this head —
compactlegendcheck(P1-B): under an explicit--token-budget, the compact answer can exceed both the budget and the full answer at some budgets (a 26c regression, bisected to the lego-charge merge); its fix lands on this branch before merge.🤖 Generated with Claude Code