Skip to content

Trains 26c + 27: parser-decided whereis, std-member honesty, call sites first, proven implementors, lean grep/impact/whereis, #362, #339 - #385

Merged
joyful-ii-V-I merged 312 commits into
mainfrom
integration/train-27
Oct 11, 2026
Merged

joyful-ii-V-I merged 312 commits into
mainfrom
integration/train-27

Conversation

@joyful-ii-V-I

Copy link
Copy Markdown
Collaborator

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; --whereis on many-branch checkouts ~70% less), #358 import capture (JS/TS + Go slices), honesty-small-b, #362 (budgeted-bundle candidate page, @pt-act), #339 (Rails db/schema.rb columns, @mpapis), plus the #383 CodeRabbit Minors.

Train 27

lane what it changes
cpp-builtin-member-gate A C++ call to a standard-library member name (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. through unique_ptr/shared_ptr/optional, wrapper templates and typedef/using aliases) keeps its hedged edge.
callers-sites-first-call --callers / --safe-delete list call sites as file:line in the first answer (sites_at=), matched by leaf name on any receiver; a cut list says so and next= recovers the rest.
lego-transitive --lego lists 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.
lean-trio --grep serves the string tier for text-shaped literals when code hits are few; --impact adds a per-file rollup beside a cut window; a clean-tree --quality-delta / --edit-check prints its verdict, folding only rows that cannot answer the question (only at HEAD, only when the fold saves >= 25%, every row recoverable).
seams-doc-links Links between two document sections are no longer counted as code seams; layer="test" is spelled only for a file under a test directory whose dependents are all test paths.
whereis-lean A --whereis row'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 (MCP full_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: kParserVer 164, kCacheVersion 31, kQSnapCacheScheme 20 (test/qschemetrip.hash re-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

barefootski and others added 30 commits October 8, 2026 15:15
… noedge-only, 8 with owner rows)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…:svLess (portablebuildcheck #6/#6b, the #345 Linux G1 abort)

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>
barefootski and others added 11 commits October 11, 2026 03:00
…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>
barefootski and others added 2 commits October 11, 2026 10:29
…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>
@joyful-ii-V-I

Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

barefootski and others added 14 commits October 11, 2026 11:10
…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>
@joyful-ii-V-I
joyful-ii-V-I merged commit 0e0f67c into main Oct 11, 2026
37 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants