Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
245 commits
Select commit Hold shift + click to select a range
c758e71
test: receiverevidencecheck — a call bound by name alone never shows …
joyful-ii-V-I Oct 4, 2026
c8e2a9c
test: receiverevidencecheck — gates review changes before the fix lands
barefootski Oct 4, 2026
c699a1c
resolve: a call bound by name alone keeps its rows, marked via="name"…
barefootski Oct 4, 2026
344259e
resolve: receiver-evidence fix round — qualified calls, free function…
barefootski Oct 4, 2026
4cdf6b8
resolve: leave Ruby's own method lookup alone; its mixin arm states t…
barefootski Oct 4, 2026
89b1cc6
resolve: receiver-evidence fix round 2 — gates the discovery suite named
barefootski Oct 4, 2026
a4b2c12
resolve: a language's own method lookup can prove a name-ladder survivor
barefootski Oct 4, 2026
7942b37
value references: prototype parameters, self references, per-site cal…
joyful-ii-V-I Oct 4, 2026
f0071cd
go.mod: a quoted replace names the same module as the bare one
joyful-ii-V-I Oct 4, 2026
e14b455
falseedgecheck: pin the unresolved counts the census arms rely on
joyful-ii-V-I Oct 4, 2026
f239515
kParserVer 143 -> 145, kQSnapCacheScheme 17 -> 18; CHANGELOG and the …
joyful-ii-V-I Oct 4, 2026
8d3ea27
recallshapecheck: RD4 calls its two slots in reverse order
joyful-ii-V-I Oct 4, 2026
635b275
--dead-code help and ARCHITECTURE: a self-stored function, the depth …
joyful-ii-V-I Oct 4, 2026
7ec3682
profilePmc: PMC_DIAG speaks std::format, so -DPROFILE_PMC_VERBOSE=1 b…
barefootski Oct 4, 2026
dc9a365
test: forspinecheck + forsigspancheck — --for caller spine, e= end li…
barefootski Oct 4, 2026
eefa763
fix(go): a named type's t= comes from its written form, never a blank…
barefootski Oct 4, 2026
025cea9
--dead-code help: name the depth disclosure without claiming a cap fo…
joyful-ii-V-I Oct 4, 2026
a379f40
value references: quality-delta follow-ups
joyful-ii-V-I Oct 4, 2026
05a9912
profilePmc: release the hardware counters on teardown
barefootski Oct 4, 2026
5010325
FE-B fix round 3: first-screen via legend, zero-weight extras, parity
barefootski Oct 4, 2026
975ca8b
falseedgecheck: a quoted replace into a sibling root keeps its cross-…
joyful-ii-V-I Oct 4, 2026
00b94b5
test: qschemetrip re-pinned for kParserVer 145 / kCacheVersion 29 (lo…
barefootski Oct 4, 2026
523e0cc
buildGraph: memoize Rule 3's include narrow per (caller file, name's …
barefootski Oct 4, 2026
cd02c90
--for/--metrics/--exemplar: run the 18-month history walk beside the …
barefootski Oct 4, 2026
6be99a5
test(gate): countfloorcheck — a count the index cannot vouch for is a…
barefootski Oct 4, 2026
a45f9b5
fix(honesty): mark a count the index cannot vouch for as a floor; saf…
barefootski Oct 4, 2026
cb044ec
resolve: the map's <c> rows carry via="name" too, with its MCP and JS…
barefootski Oct 4, 2026
d8c402b
whereis: list the definitions, count the references (lean default)
barefootski Oct 4, 2026
8a38c1a
for: omit zero cx=/ccx=/in= on lens rows; the legend says absent = 0
barefootski Oct 4, 2026
9fa1f68
map: a row's bare callees as one comma-joined calls= attribute
barefootski Oct 4, 2026
e7dc38c
mcp: the legend session opens on its first answer (ref posture by def…
barefootski Oct 4, 2026
26a7ea0
test(gate): mcpreloadasancheck - one MCP session rebuilt in place 20 …
joyful-ii-V-I Oct 4, 2026
8bdce27
test: whereis listing arms (LEAN L1-L10) and listing=all twins in cro…
barefootski Oct 4, 2026
62d2f85
for: the via clause rides on the sections' own node sets, not the row…
barefootski Oct 4, 2026
04d6fdc
mcp: --mcp-legend=inline keeps the pre-lane posture; core marked serv…
barefootski Oct 4, 2026
874eb65
for: the zero reading is exempt from the sig ledger
barefootski Oct 4, 2026
4f149b8
legend: shorter whereis/map readings; mcp whereis listing twin arms; …
barefootski Oct 4, 2026
df5822a
test(countfloorcheck): F2 — a declined call from a caller that also b…
barefootski Oct 4, 2026
e2a4977
legend pins for the new definitions; docs and skill text for the wher…
barefootski Oct 4, 2026
783fbe2
test(gate): mcpreloadasancheck waits for the sanitizer report to fini…
joyful-ii-V-I Oct 4, 2026
d6acc95
resolve: the two sides of a JS/TS class lookup; a fallback hook only …
barefootski Oct 4, 2026
eb55312
refactor: split writeWhereisPage's root and rows, sigRowHead's tail (…
barefootski Oct 4, 2026
0b8e0f1
refactor(count-floor): split callerFloors and the safe-delete floor/l…
barefootski Oct 4, 2026
53c93fb
CHANGELOG: leaner answers
barefootski Oct 4, 2026
4d3cf0b
refactor(count-floor): table-shaped armed languages and risk readings…
barefootski Oct 4, 2026
1e37e1d
refactor(count-floor): the lego clause probe is a shared prefix const…
barefootski Oct 4, 2026
63727cc
test: selectorhonestycheck §A7 reads listing=all; default-listing twin
barefootski Oct 4, 2026
a2cc8df
test(gate): mcpreloadasancheck symbolizes with llvm-symbolizer when i…
joyful-ii-V-I Oct 4, 2026
afe2ea3
fix(path): an unreached to= is "no path" only when the search met no …
barefootski Oct 4, 2026
26a3abf
test: rubysettercheck counts symbol rows, not a map <c n="name" via="…
barefootski Oct 4, 2026
8409b45
docs: CHANGELOG for the Go kinds and the path gaps; dictv from the bi…
barefootski Oct 4, 2026
4a1bbc8
fix(count-floor): present-only full grep floor clause; shorter safe-d…
barefootski Oct 4, 2026
09c49f0
map: withdraw the comma-joined callee list (deferred); bundleidcheck …
barefootski Oct 4, 2026
173c947
refactor: one unreached-path clause for both transports; kind tables …
barefootski Oct 4, 2026
743d306
CHANGELOG: FE-B states its measured cost, not a pointer to a report
barefootski Oct 4, 2026
d14e3fd
refactor: the gap sum is carried, not recomputed; the split kinds are…
barefootski Oct 4, 2026
a6cb974
quality: ack five lexical clone matches on one-line helpers
barefootski Oct 4, 2026
c3bcc1a
chore(quality): ack emitGrepEncRows signature change (single same-fil…
barefootski Oct 7, 2026
36bc144
test(donelegendcheck): re-pin sd_uses 3800 -> 4100 for sites_l=, with…
barefootski Oct 7, 2026
5e08bf8
test(countfloorcheck): L2 — a bound Rust impl and a reopened Ruby cla…
barefootski Oct 7, 2026
09b38b0
fix(count-floor): safeDeleteRiskSentence's ASSUME names the end itera…
barefootski Oct 7, 2026
9fe6018
fix(count-floor): an inherit clause is bound when the graph listed it…
barefootski Oct 7, 2026
668c6a0
CHANGELOG: drop the withdrawn map callee join; totals at the current …
barefootski Oct 7, 2026
a433bd4
test(printf parity): re-pin safe_delete and help_all for sites_l= and…
barefootski Oct 7, 2026
5d65c18
test: docdemotecheck re-pins (f)/(h) goldens for the --for zero spelling
barefootski Oct 7, 2026
c61a3e6
cli: count the two new closed-value flag arms in the tripwire
barefootski Oct 7, 2026
6542c18
test: forlenscheck reads the --for zero spelling; strict ccx arm on a…
barefootski Oct 7, 2026
2d28d6d
fix(impact): a long selector's cut import tier keeps its importers_next=
barefootski Oct 7, 2026
c70fc81
docs(skills): ripwire-handoff passes --for the flag it reads
barefootski Oct 7, 2026
0c429a2
feat(lint): a floored rule names the call that counts the rest
barefootski Oct 7, 2026
cd76281
feat(for): a capped <sigs> names the call that serves it uncut
barefootski Oct 7, 2026
9293ab0
test: pathgapcheck (M) reports its verdict from the helper's own exit…
barefootski Oct 7, 2026
d6d6e69
fix: the Go t=type legend clause says the form is WRITTEN, not underl…
barefootski Oct 7, 2026
1cf71ab
test: mcpincrementalcheck runs its byte-identity arms on --mcp-legend…
barefootski Oct 7, 2026
d42ab08
test: printf parity re-pins help and help_all for the two new flags
barefootski Oct 7, 2026
05edaf1
README: 187 long flags (--whereis-listing=, --mcp-legend=)
barefootski Oct 7, 2026
c71a27c
test(gate): mcpreloadasancheck scopes the zero-quarantine setting to …
barefootski Oct 7, 2026
30ca996
test(gate): mcpreloadasancheck exits 2 when RIPWIRE_ASAN_BIN names no…
barefootski Oct 7, 2026
0891c53
test(gate): mcpreloadasancheck keeps its sanitizer reports where CI's…
barefootski Oct 7, 2026
3011856
test(gate): say in the gate header and the CI step that LeakSanitizer…
barefootski Oct 7, 2026
530d8d5
docs(changelog): mcpreloadasancheck entry states what is compared, wh…
barefootski Oct 7, 2026
dfe3024
test: shapingflagcheck probes the two new closed-value flags with a v…
barefootski Oct 7, 2026
08e2709
test: shapingflagcheck keeps fprobeFor's length (quality-delta)
barefootski Oct 7, 2026
de08656
test(compactlegendcheck): twin for the safe-delete 720 -> 820 re-pin …
barefootski Oct 7, 2026
a169a38
feat(for): the <sigs> continuation carries its resume index; MCP gets…
barefootski Oct 7, 2026
d4da24e
chore(lint): register --lint-max-per-rule on every surface that count…
barefootski Oct 7, 2026
7880d16
docs(changelog): every disclosed cut names the call that recovers it
barefootski Oct 7, 2026
a9d8a0a
refactor(for): one report-based reading of a <sigs> cut's legend clauses
barefootski Oct 7, 2026
91b2d93
skillscan: cut a finding's excerpt on a UTF-8 boundary, ellipsis only…
barefootski Oct 7, 2026
1d40cb2
skillscan: dedupe per-line / joined-body findings keeping the worst s…
barefootski Oct 7, 2026
efd8f60
rubyrecvnarrowcheck: absence arms read only off a run that succeeded
barefootski Oct 7, 2026
9a14723
docs: label --help-task 0.907/0.918/1.000 as tuning-corpus figures; s…
barefootski Oct 7, 2026
aef1683
test: the <sigs> tag shapes and the fixed-buffer census admit the con…
barefootski Oct 7, 2026
f526358
Detect a hanging ASan runtime at configure time; ASan-harness gates p…
barefootski Oct 7, 2026
9f1dee4
fix(for): under a hard ceiling the <sigs> continuation is terse and p…
barefootski Oct 7, 2026
d850136
docs(changelog): the hard-ceiling continuation is terse and paid from…
barefootski Oct 7, 2026
75f0e0f
test(countfloorcheck): R — a recursive function's self-call is not ev…
barefootski Oct 7, 2026
d974bce
fix(count-floor): a recursive call is bound to the definition itself,…
barefootski Oct 7, 2026
36a9dfd
docs(changelog): count-floor — recursion counts as bound; MCP for now…
barefootski Oct 7, 2026
2ea8929
serialize: packSignatures takes its row spelling as a named SigRowSpe…
barefootski Oct 7, 2026
a0b8e51
refactor(for): the <sigs> continuation request rides SigsCutReport, n…
barefootski Oct 7, 2026
e8cf79a
WIP: a charged <sigs> continuation is paid from the rows, byte for byte
barefootski Oct 7, 2026
67a5dcc
test: drop forspinecheck — the caller spine fails its own offline kil…
barefootski Oct 4, 2026
5272733
--for: <d> rows carry e= (where the definition ends); code ranks abov…
barefootski Oct 4, 2026
051613d
--for: code above docs is a reorder of the shown set, never an eviction
barefootski Oct 4, 2026
29bb986
--for: e= is charged under an explicit ceiling; re-pin three --for by…
barefootski Oct 4, 2026
e558568
--for: no e= under an explicit ceiling tighter than the default sig b…
barefootski Oct 4, 2026
46660b1
--for: a hop slot needs a proven callee edge (written against FE-B's …
barefootski Oct 4, 2026
290bfc7
serialize.h: reorderDocsAfterCode's counting split out (shownDocsAbov…
barefootski Oct 4, 2026
3b02acc
graph.h: graphNameOnlyBits moved to the end of the file
barefootski Oct 7, 2026
0d743ac
test: gates that read --for rows accept e=; by-design re-pins for the…
barefootski Oct 7, 2026
97c6f19
fix(for): a charged <sigs> continuation at the floor ships and is lab…
barefootski Oct 7, 2026
9143c7a
--for: RIPWIRE_FOR_ENDLINES=always|auto|never, an experimental switch…
barefootski Oct 7, 2026
d6dda9e
Merge train 26a (cd87e30e: main 255dc199 + #373 Ruby method lookup) i…
barefootski Oct 7, 2026
069a8dd
resolve (assumes #373): Ruby's own method lookup is proof, never via=…
barefootski Oct 4, 2026
07c1777
model (assumes #373): the Ruby typed receiver rides explicit Referenc…
barefootski Oct 4, 2026
c2de8a1
CHANGELOG: FE-B on train 26a — Ruby lookup proofs are answers; kParse…
barefootski Oct 7, 2026
9d0ad7a
test: re-pin estcalib for-named (o200k) for the e= rows, with an e=-f…
barefootski Oct 7, 2026
d21998f
test: qschemetrip re-pinned for kParserVer 150 / kCacheVersion 29 on …
barefootski Oct 7, 2026
3b709a2
test: the <sigs> floor twin — at the rank 1..4 floor next= ships, lab…
barefootski Oct 7, 2026
e6a0b2e
resolve: a Go module alias proves its package by import path, nested …
barefootski Oct 7, 2026
f981b1d
fix(asan-probe): say hang only on a timeout; re-probe when the ASan r…
barefootski Oct 7, 2026
868f99e
route: skip <channel>/<agent-message> harness events, default arm to …
barefootski Oct 7, 2026
832c0ba
refactor: one innermost-enclosing-function walk for FE-A and FE-B; go…
barefootski Oct 7, 2026
bcb1da3
chore(quality): ack lane FE-B's quality-delta footprint vs train 26a …
barefootski Oct 7, 2026
81abd32
test(quality): a red gate for the defect-shape --quality-delta kind —…
barefootski Oct 7, 2026
9f59d94
test: pin the primer positive control to an explicit treatment arm (#…
barefootski Oct 7, 2026
5a8e823
test(compactlegend): the P4 floor twin's PASS line reads as one sente…
barefootski Oct 7, 2026
dd6e4c8
test(estcalib): re-pin for-budgeted — the document now carries its <s…
barefootski Oct 7, 2026
50790a1
test(quality): gates (review) — the defect-shape gate takes the early…
barefootski Oct 7, 2026
7acae5a
value references: --uses and --path disclose the depth cut (CLI and MCP)
barefootski Oct 7, 2026
d5c08fa
bench: split routing_ab_report main (quality-delta) and gate a malfor…
barefootski Oct 7, 2026
e6758ae
defectshape.h: the four defect-shape scanners (format-arity, utf8-cut…
barefootski Oct 7, 2026
c84b042
quality: the defect-shape kind — sites in the snapshot, a row per new…
barefootski Oct 7, 2026
9043888
surfaces: twelve kinds and the format-arity exception on every surfac…
barefootski Oct 7, 2026
c577d46
docs: regenerate LIMITS and re-anchor the showcase seed after the hoists
barefootski Oct 7, 2026
2f8ee9e
whereis: the default listing is the shorter of the defs page and the …
barefootski Oct 7, 2026
1c08714
showcase capture: blocks for --whereis-listing=all and --mcp-legend=i…
barefootski Oct 7, 2026
3ef120e
defect-shape: precision rounds measured on this tree as all-new (vacu…
barefootski Oct 8, 2026
fddd96c
resolve: a Go module alias proves a package by its exact import path …
barefootski Oct 8, 2026
8e5b8fb
refactor: FE-B's via column, base walk and scope walk go through shar…
barefootski Oct 8, 2026
b2e951f
refactor: FE-B's columnar flag column, <calls> via charge and go.mod …
barefootski Oct 8, 2026
1a38580
refactor: emitCalleeCallsBlock reads the via attribute once (its leng…
barefootski Oct 8, 2026
a08aa76
whereis: say which pages the default compares, and restate the measur…
barefootski Oct 8, 2026
98ee450
showcase capture: regenerated with test/showcase_capture.py
barefootski Oct 8, 2026
75cc958
showcase capture: the generator catches up with the hand-edited capture
barefootski Oct 8, 2026
1aeff33
--for: no code-above-docs reorder (and no docs_after_code note) under…
barefootski Oct 8, 2026
d953795
showcase capture: regenerated from the caught-up generator
barefootski Oct 8, 2026
f4253d4
serialize.h: name why the e= legend's example list stays as is (a cos…
barefootski Oct 8, 2026
a87f236
compactlegend: one delivered-bytes helper for whereis and from-trace
barefootski Oct 8, 2026
19b6b8a
CHANGELOG, ARCHITECTURE: name the quality-delta exception without a f…
barefootski Oct 8, 2026
d8e1d95
route: void the 2026-09-02 A/B window, restart the readout clock, fix…
barefootski Oct 8, 2026
82346c9
map: N same-named via="name" rows of one symbol print once, with x="N"
barefootski Oct 8, 2026
fd1176e
defect-shape: count past comparisons, re-pin what the new kind moves,…
barefootski Oct 8, 2026
89422ab
fix(for): never drop rows to pay for a <sigs> next= that cannot make …
barefootski Oct 8, 2026
b3afe7c
fix(lint): SARIF findingsNext keeps --sarif; --lint-max-per-rule help…
barefootski Oct 8, 2026
a1bd5f0
docs: TUNING.md regenerated; showcase captures --lint-max-per-rule an…
barefootski Oct 8, 2026
d415b0f
resolve: Java/C#/Kotlin/Swift declared receivers prove their class again
barefootski Oct 8, 2026
b1e9264
refactor: the bare-field rule reads implicitReceiverLang (no second l…
barefootski Oct 8, 2026
90557fb
fix(mcp for): paid pass first, unpaid when the paid answer still land…
barefootski Oct 8, 2026
481149c
style: graphlegend.h's zero-reading constants to .clang-format
barefootski Oct 8, 2026
95d4f55
refactor(mcp for): the assembly pass is a free function (assembleMcpF…
barefootski Oct 8, 2026
6381b84
defect-shape: three sanitizer finds — an out-of-range token read, two…
barefootski Oct 8, 2026
6e57947
test: crossrefcheck sources the hermetic git helper
barefootski Oct 8, 2026
219aaaa
lean answers: the surfaces and pins the full suite found behind the lane
barefootski Oct 8, 2026
a9c68cc
fix: CI reds of fix round 1 (gate readers for x=, identity, a throwin…
barefootski Oct 8, 2026
45a2eeb
fix(for): the retry self-check reads the optional without a call (sel…
barefootski Oct 8, 2026
7d2f2e2
defect-shape: reuse the house helpers and keep touched functions unde…
barefootski Oct 8, 2026
1f7f635
quality: computeDelta hands the defect-shape rows to appendDefectShap…
barefootski Oct 8, 2026
a584b8b
--for: no code-above-docs reorder (or its note) under a body ceiling …
barefootski Oct 8, 2026
3644a76
defect-shape: what the full CI suite found outside the quality-delta …
barefootski Oct 8, 2026
6391658
test: forsigspancheck (T) body ceiling: pydocs ceiling 1660 (the comm…
barefootski Oct 8, 2026
f890d6a
test(partitioncheck): pin P10's corpus to a fixed commit
barefootski Oct 8, 2026
45abf6f
fix(for): pay for a <sigs> next= in rows only when that is what makes…
barefootski Oct 8, 2026
c792035
whereis: the default serves the page that lists more definitions, the…
barefootski Oct 8, 2026
4acbcd2
test(for): forrankordercheck (11) — no row is paid where every row + …
barefootski Oct 8, 2026
afdcf5c
resolve: a binding is read where its language scopes it; a type param…
barefootski Oct 8, 2026
72d8cc7
acks: restore main's A6 api-surface line removed in fix round 1
barefootski Oct 8, 2026
c5feeca
refactor: kindIn names a node-kind set once; B4 fixtures reshaped off…
barefootski Oct 8, 2026
3cf2122
refactor: identifier kinds as one table; a type parameter scope answe…
barefootski Oct 8, 2026
7cb6d8e
skills: the quality-bar trigger text keeps its scope guard ("single-l…
barefootski Oct 8, 2026
398899e
docs: regenerate the showcase capture and COMMANDS.md for the definit…
barefootski Oct 8, 2026
11124e7
refactor: identifierText reads an identifier of any grammar's spellin…
barefootski Oct 8, 2026
81e69e2
refactor: one site builder for a binding's span; GoPackagePaths reads…
barefootski Oct 8, 2026
fc7aeee
resolve: a statically typed reassignment keeps its declared type (Go,…
barefootski Oct 8, 2026
bca85f8
whereis: keep the definitions-first ENSURES to accessor reads; exempt…
barefootski Oct 8, 2026
52ac826
defect-shape fix round 1: format-arity skips what it cannot count, ac…
barefootski Oct 8, 2026
a2106c6
test(for): P1 exempts only a default whose header is larger than full…
barefootski Oct 8, 2026
f59dd50
Merge lane/honesty-small-068 (d6d6e695) into train 26b
barefootski Oct 8, 2026
81c661e
Merge lane/count-floor-068 (36a9dfdd) into train 26b
barefootski Oct 8, 2026
e0b22ca
test: countfloorcheck (GO) — Go t="type" and t="functype" floor like …
barefootski Oct 8, 2026
550feb6
docs: name the two honesty-small floors; kParserVer 156 in the versio…
barefootski Oct 8, 2026
1118db1
Merge lane/partition-date-068 (f890d6a4) into train 26b
barefootski Oct 8, 2026
d9304ce
Merge lane/asan-toolchain-probe-068 (f981b1d0) into train 26b
barefootski Oct 8, 2026
198e1aa
Merge lane/cr-siblings-068 (efd8f60d) into train 26b
barefootski Oct 8, 2026
df2199e
Merge lane/evals-heldout-068 (9a14723b) into train 26b
barefootski Oct 8, 2026
6b95728
Merge lane/route-channel-381 (d8e1d95a) into train 26b
barefootski Oct 8, 2026
27feb12
fix(hooks): the prompt hooks' lead strip is the six ASCII bytes, in e…
barefootski Oct 8, 2026
5a7bad2
Merge lane/asan-reload-068 (530d8d57) into train 26b
barefootski Oct 8, 2026
ab4b4c7
defect-shape: the macro-name lookup orders string_view with rw::sortu…
barefootski Oct 8, 2026
fad8f00
Merge lane/perf-hoist-068 (c577d46b) into train 26b
barefootski Oct 8, 2026
7036994
Merge lane/train25-cr2-followup (19b6b8a3) into train 26b
barefootski Oct 8, 2026
31fc0ef
Merge lane/for-spine-span-068 (63916580) into train 26b
barefootski Oct 8, 2026
118251e
test: re-pin fixedbufsweep and selfcheckcheck for two merged lanes
barefootski Oct 8, 2026
99fb978
docs: name every reader the value-ref depth disclosure does not reach…
barefootski Oct 8, 2026
ef25ea0
docs(CONTRIBUTING): six more pre-review checks — entity keys, capabil…
barefootski Oct 8, 2026
864e4fb
Merge lane/fe-b-receiver-evidence (fc7aeee6) into integration/train-26b
barefootski Oct 8, 2026
15f64e0
fix(for): a hop the hop-slot rule drops no longer makes the header de…
barefootski Oct 8, 2026
a2b0caf
train 26b: receiver-evidence merge conditions — CHANGELOG floor claus…
barefootski Oct 8, 2026
bbe15da
test(receiverevidence): read a hop the hop-slot rule drops through --…
barefootski Oct 8, 2026
f83e404
Merge lane/lean-answers-068 (bca85f8b) into integration/train-26b
barefootski Oct 8, 2026
e9d568e
test: re-pin the four --for goldens and the compact-legend for pin on…
barefootski Oct 8, 2026
ec5a102
train 26b: lean-answers review nits — cli.h field comment, MCP skill …
barefootski Oct 8, 2026
f6a50ae
docs(CONTRIBUTING): two more pre-review checks — gates fail closed, c…
barefootski Oct 8, 2026
69ab8b5
fix(for): a row the code-above-docs reorder moves keeps the lens row …
barefootski Oct 8, 2026
f0e5a4c
test(docdemote): re-pin the routed golden with the moved rows' zero e…
barefootski Oct 8, 2026
5a8db32
test(pathgap): the MCP arm runs both legend postures
barefootski Oct 8, 2026
9a84414
docs(path): a call bound by name alone is named among the calls a pat…
barefootski Oct 8, 2026
1a4f5d2
test(compactlegend): re-anchor the ten-verb loop bill 7,700 -> 7,800 …
barefootski Oct 8, 2026
41854f8
refactor(path): one helper answers whether a path runs through a name…
barefootski Oct 8, 2026
2164c66
refactor(path): pathHasNameOnlyHop reads as adjacent_find over the hops
barefootski Oct 8, 2026
53f31d3
test(mcpreloadasan): the reload session runs the inline legend postur…
barefootski Oct 8, 2026
d82e4cf
test(mcpreloadasan): a memory refusal on any call after the release i…
barefootski Oct 8, 2026
6afa5c5
Merge lane/knob-honesty-068 (a2106c60) into integration/train-26b
barefootski Oct 8, 2026
59165d7
test: compactlegendcheck and forrankordercheck take BIN as $1; four b…
barefootski Oct 8, 2026
93d2fcf
test(forrankorder): (10) over-either-way MCP budget re-pinned 3000 ->…
barefootski Oct 8, 2026
f51c2d7
Merge lane/cr-qd-kinds-068 (ab4b4c7d) into integration/train-26b
barefootski Oct 8, 2026
7dd380a
test(pathgap): a call bound by name alone hides a same-language names…
barefootski Oct 8, 2026
f1e5c2e
fix(path): a call bound by name alone with an unlisted namesake is a …
barefootski Oct 8, 2026
18b123a
docs/test: the train 26b final regeneration, once, from the merged bi…
barefootski Oct 8, 2026
e97b4ad
fix(path): the name-gap lookup orders string_view names with rw::sort…
barefootski Oct 8, 2026
7608d1f
test(lego): the on-task lego arms read a fixture-only corpus (--exclu…
barefootski Oct 8, 2026
4ab1fee
test(crossref): the past-the-end whereis arms read the absence of <mo…
barefootski Oct 8, 2026
2f19d91
docs(path): pathgaps.h counts five gap populations, not four, since t…
barefootski Oct 8, 2026
18224dc
docs(safe-delete): runSafeDelete's contract comment names the fourth …
barefootski Oct 8, 2026
5301021
test(path): (N7) a via=name namesake the search reached anyway is not…
barefootski Oct 8, 2026
4215e4b
fix(path): a via=name namesake the search reached is not a name gap
barefootski Oct 8, 2026
6f28768
test(loopconservationcheck): inherited merge tombstones; same window …
barefootski Oct 9, 2026
8c086c6
coderabbit: exclude gate fixture trees (test/*fix/**) from review
barefootski Oct 9, 2026
8a0e089
graphlegend: no double hyphen in the --impact via="name" clause (CR 5…
barefootski Oct 9, 2026
b7aead1
mcp: read whereis `listing` before the shared shape gate (CR 54680034…
barefootski Oct 9, 2026
140a6f3
lint: bound --lint-max-per-rule so the scaled budgets stay representa…
barefootski Oct 9, 2026
00076e3
lsp: reject an empty hover-word slot at compile time (CR 5468003465 n…
barefootski Oct 9, 2026
93aeab1
test: lintbudgetcheck 64-bit ceiling twin for --lint-max-per-rule (CR…
barefootski Oct 9, 2026
4a0e470
fix: base-class receiver is a keyword per language, never a local spe…
barefootski Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
# - No re-review on every push: each fix commit used to start a new pass over a new diff.
# - No automatic reply inside review threads: every in-thread answer used to wake another pass.
# - Vendored parsers and generated/pinned files are excluded; a review of them cannot change them.
# - Gate fixture trees (test/*fix/) are excluded: they are inputs, and a train carrying many of them
# went over the 300-file review limit (the whole review was skipped).
# - No docstring-coverage pre-merge check: the house style documents contracts where they bite, not every symbol.
# CodeRabbit reads this file from the PR's head branch, so a fork PR picks it up once it merges main.
reviews:
Expand All @@ -17,6 +19,7 @@ reviews:
- "!docs/captures/**"
- "!test/*.hash"
- "!test/printf_parity.manifest"
- "!test/*fix/**" # gate fixture trees (inputs a gate parses); keeps a train PR under the 300-file review limit
path_instructions:
- path: "src/**"
instructions: >-
Expand Down
6 changes: 6 additions & 0 deletions .github/pargates-shard-weights.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
"constcheck.sh": 2.7,
"contextratiocheck.sh": 2.8,
"coplintcheck.sh": 0.9,
"countfloorcheck.sh": 14.0,
"cppbenchcheck.sh": 170.6,
"cppoperatorcheck.sh": 5.5,
"cppqualcheck.sh": 36.1,
Expand All @@ -112,6 +113,7 @@
"deckclaimcheck.sh": 0.1,
"deeptailcheck.sh": 1.0,
"defaultceilingcheck.sh": 20.1,
"defectshapecheck.sh": 14.2,
"defoverdeclcheck.sh": 1.4,
"degradedhintcheck.sh": 2.5,
"dependencypincheck.sh": 2.0,
Expand Down Expand Up @@ -197,6 +199,7 @@
"forrankordercheck.sh": 77.9,
"forrootlegendcheck.sh": 8.6,
"forsectioncollapsecheck.sh": 5.2,
"forsigspancheck.sh": 6.0,
"freshclonecheck.sh": 170.8,
"freshnesscheck.sh": 4.4,
"g1configcheck.sh": 0.8,
Expand All @@ -209,6 +212,7 @@
"gitstampcheck.sh": 84.3,
"goinstcheck.sh": 0.2,
"gointerfacecheck.sh": 0.4,
"gokindcheck.sh": 0.6,
"graphlegendbudgetcheck.sh": 2.5,
"graphqueryrefusecheck.sh": 1.9,
"grepandcheck.sh": 8.8,
Expand Down Expand Up @@ -386,6 +390,7 @@
"pargatescheck.sh": 8.9,
"parsehealthcheck.sh": 1.9,
"partitioncheck.sh": 7.2,
"pathgapcheck.sh": 1.5,
"patterncheck.sh": 5.0,
"perfharnesscheck.sh": 8.6,
"phpcheck.sh": 2.4,
Expand Down Expand Up @@ -463,6 +468,7 @@
"recalltablecheck.sh": 0.2,
"recalltotalcheck.sh": 24.7,
"receiptpostcheck.sh": 20.4,
"receiverevidencecheck.sh": 36.0,
"redactcheck.sh": 2.2,
"redactfixcheck.sh": 0.3,
"refusaltailcheck.sh": 3.4,
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -723,6 +723,16 @@ jobs:
- name: Sanitizer-only class — crashsweepcheck far-future timestamp and fixed-name shapes (test/crashsweepcheck.sh)
run: RIPWIRE_BIN=asan/ripwire RIPWIRE_ASAN_BIN=asan/ripwire bash test/crashsweepcheck.sh

# A lifetime class only a sanitizer shows: one long-lived `--mcp` session rebuilt in place (a chmod, a new non-source
# file, an edit, a root switch, a memory release) and queried again each time. A cached ValueRefIndex once outlived
# the index it pointed into (heap-use-after-free) and no single-query gate could see it. The gate drives that session
# on this binary for 20 cycles and checks every answer against a one-shot CLI run; one binary plays both roles.
# LeakSanitizer is off in this step on BOTH legs (the gate sets detect_leaks=0 for its own processes; its subject is
# lifetime, not leaks, and the Linux leg has not yet shown a clean exit-time leak set for it).
# A failure leaves the gate's sanitizer reports in /tmp/asanlog-mcpreload.* for the upload step below.
- name: Sanitizer-only class — MCP index reloads under ASan (test/mcpreloadasancheck.sh)
run: RIPWIRE_BIN=asan/ripwire bash test/mcpreloadasancheck.sh

- name: det-gate — 2-run byte-identical diff (ASan binary)
run: |
./asan/ripwire test/fixture --no-cache >/tmp/run_a.xml
Expand Down
90 changes: 75 additions & 15 deletions .ripwire_quality_acks

Large diffs are not rendered by default.

390 changes: 382 additions & 8 deletions CHANGELOG.md

Large diffs are not rendered by default.

79 changes: 72 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1015,13 +1015,78 @@ if(WIN32)
endif()

if(RIPWIRE_ASAN)
# AppleClang 17's ASan runtime hangs in its own start-up on macOS 26 (Darwin 25), before main, so every
# sanitizer run times out. CI's Xcode 26.6 AppleClang 21 is unaffected. A warning, not an error: the
# tree still builds, and CONTRIBUTING's sanitizer section has the Homebrew LLVM 22 recipe.
if(APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 21
AND CMAKE_HOST_SYSTEM_VERSION VERSION_GREATER_EQUAL 25)
message(WARNING "RIPWIRE_ASAN: AppleClang ${CMAKE_CXX_COMPILER_VERSION} on macOS 26 is known to hang in "
"ASan start-up before main. Configure this tree with Homebrew LLVM 22 (CONTRIBUTING.md, Sanitizer build).")
# Some macOS toolchains ship an ASan runtime that deadlocks in its own start-up, before main (Apple clang 17.0.0 /
# Command Line Tools 26.3 on macOS 26.7: libSystem's malloc init enters AsanInitFromRtl, whose shadow-memory
# set-up allocates through dyld and re-enters it). Every sanitizer binary and every ASan gate then just hangs, and
# the contributor sees only timeouts. So on Apple, with ASan on, run an empty -fsanitize=address program once, under
# a timeout, and stop with the fix if it does not finish. Nothing here runs without RIPWIRE_ASAN or off Apple, and a
# pass is cached per (compiler, version, host OS) so a reconfigure does not pay for it again and prints nothing new.
if(APPLE AND CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_CROSSCOMPILING
AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(RIPWIRE_ASAN_PROBE_TIMEOUT 10 CACHE STRING "seconds the configure-time ASan start-up probe may take (macOS)")
# CMake never re-detects CMAKE_CXX_COMPILER_VERSION (or the host OS version) in an existing build tree, and a Command
# Line Tools/Xcode update replaces the compiler behind the same /usr/bin/c++. So the key also carries the ASan
# runtime the compiler links today (its path and modification time): an in-place toolchain update re-runs the probe.
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1} -print-file-name=libclang_rt.asan_osx_dynamic.dylib
OUTPUT_VARIABLE _ripwire_asan_rt OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
set(_ripwire_asan_rt_stamp "")
if(EXISTS "${_ripwire_asan_rt}")
file(TIMESTAMP "${_ripwire_asan_rt}" _ripwire_asan_rt_stamp "%s" UTC)
endif()
set(_ripwire_asan_probe_key
"${CMAKE_CXX_COMPILER}|${CMAKE_CXX_COMPILER_VERSION}|${CMAKE_HOST_SYSTEM_VERSION}|${CMAKE_OSX_SYSROOT}|${CMAKE_EXE_LINKER_FLAGS}|${_ripwire_asan_rt}@${_ripwire_asan_rt_stamp}")
if(NOT "${_ripwire_asan_probe_key}" STREQUAL "${_RIPWIRE_ASAN_PROBE_PASSED}")
set(_ripwire_asan_probe_dir "${CMAKE_BINARY_DIR}/CMakeFiles/ripwire_asan_probe")
file(MAKE_DIRECTORY "${_ripwire_asan_probe_dir}")
file(WRITE "${_ripwire_asan_probe_dir}/probe.cpp" "int main() { return 0; }\n")
set(_ripwire_asan_probe_cmd ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1})
if(CMAKE_OSX_SYSROOT)
list(APPEND _ripwire_asan_probe_cmd -isysroot "${CMAKE_OSX_SYSROOT}")
endif()
if(CMAKE_OSX_ARCHITECTURES)
foreach(_ripwire_asan_probe_arch IN LISTS CMAKE_OSX_ARCHITECTURES)
list(APPEND _ripwire_asan_probe_cmd -arch "${_ripwire_asan_probe_arch}")
endforeach()
endif()
separate_arguments(_ripwire_asan_probe_ldflags NATIVE_COMMAND "${CMAKE_EXE_LINKER_FLAGS}")
execute_process(
COMMAND ${_ripwire_asan_probe_cmd} ${_ripwire_asan_probe_ldflags} -fsanitize=address
"${_ripwire_asan_probe_dir}/probe.cpp" -o "${_ripwire_asan_probe_dir}/probe"
RESULT_VARIABLE _ripwire_asan_probe_build_rc
OUTPUT_VARIABLE _ripwire_asan_probe_build_out ERROR_VARIABLE _ripwire_asan_probe_build_out)
if(NOT _ripwire_asan_probe_build_rc EQUAL 0)
message(FATAL_ERROR "RIPWIRE_ASAN: ${CMAKE_CXX_COMPILER} could not build an empty -fsanitize=address program "
"(${_ripwire_asan_probe_build_rc}):\n${_ripwire_asan_probe_build_out}\n"
"This toolchain has no usable AddressSanitizer runtime. Install the Command Line Tools/Xcode that ship one, or "
"configure with Homebrew LLVM (CONTRIBUTING.md, Sanitizer build):\n"
" cmake -S . -B asan -DRIPWIRE_ASAN=ON -DCMAKE_C_COMPILER=$(brew --prefix llvm@22)/bin/clang "
"-DCMAKE_CXX_COMPILER=$(brew --prefix llvm@22)/bin/clang++")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} -E env ASAN_OPTIONS=detect_leaks=0 "${_ripwire_asan_probe_dir}/probe"
TIMEOUT ${RIPWIRE_ASAN_PROBE_TIMEOUT}
RESULT_VARIABLE _ripwire_asan_probe_run_rc
OUTPUT_QUIET ERROR_QUIET)
if(NOT _ripwire_asan_probe_run_rc EQUAL 0 AND NOT _ripwire_asan_probe_run_rc MATCHES "timeout")
message(FATAL_ERROR "RIPWIRE_ASAN: an empty program built with ${CMAKE_CXX_COMPILER} -fsanitize=address exited "
"(${_ripwire_asan_probe_run_rc}) instead of returning 0: this toolchain's AddressSanitizer runtime fails at "
"start-up. Update the Command Line Tools / Xcode, or configure with Homebrew LLVM (CONTRIBUTING.md, Sanitizer "
"build).")
elseif(NOT _ripwire_asan_probe_run_rc EQUAL 0)
message(FATAL_ERROR "RIPWIRE_ASAN: an empty program built with ${CMAKE_CXX_COMPILER} -fsanitize=address did not "
"run to completion within ${RIPWIRE_ASAN_PROBE_TIMEOUT} s (${_ripwire_asan_probe_run_rc}). This toolchain's "
"AddressSanitizer runtime deadlocks in its own start-up, before main, on this macOS (seen with Apple clang "
"17.0.0 / Command Line Tools 26.3 on macOS 26.7), so every sanitizer binary and gate would hang. Either "
"update the Command Line Tools / Xcode (softwareupdate, or Xcode's Settings > Components), or configure with "
"Homebrew LLVM, which carries a runtime that starts:\n"
" brew install llvm@22\n"
" cmake --fresh -S . -B asan -DRIPWIRE_ASAN=ON -DCMAKE_C_COMPILER=$(brew --prefix llvm@22)/bin/clang "
"-DCMAKE_CXX_COMPILER=$(brew --prefix llvm@22)/bin/clang++\n"
"(CONTRIBUTING.md, Sanitizer build, has the matching linker flags.) Raise RIPWIRE_ASAN_PROBE_TIMEOUT only if "
"this host is simply very busy.")
endif()
set(_RIPWIRE_ASAN_PROBE_PASSED "${_ripwire_asan_probe_key}" CACHE INTERNAL "ASan start-up probe passed for this toolchain")
endif()
endif()
set(_ripwire_windows_clangcl_asan OFF)
set(_ripwire_no_omit_frame_pointer -fno-omit-frame-pointer)
Expand Down
35 changes: 34 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ LSAN_OPTIONS=suppressions=lsan_suppressions.txt ./asan/ripwire <dir> >/dev/null
**macOS 26 with the Command Line Tools' AppleClang 17: ASan hangs before `main`.** Every
`-fsanitize=address` binary, even an empty `main`, hangs in ASan's start-up (shadow-memory set-up
walking the dyld shared cache), so each ASan gate just times out. CI's Xcode 26.6 AppleClang 21 is
not affected, and CMake warns when it sees the affected pair. Configure the sanitizer tree with
not affected, and an `-DRIPWIRE_ASAN=ON` configure on macOS now runs an empty ASan program once under a
10 s timeout and stops with the fix if it hangs (the two fixes: update the Command Line Tools/Xcode, or use
Homebrew LLVM 22 as below), while the gates that compile their own ASan harness prefer `llvm@22`'s `clang++`
when it is installed (an explicit `CXX` wins) and otherwise SKIP by name. Configure the sanitizer tree with
Homebrew LLVM 22 instead, linking its own libc++ so the headers and the dylib are one release
(Homebrew clang otherwise links the system libc++ against its libc++ 22 headers):

Expand Down Expand Up @@ -842,6 +845,36 @@ round. Each takes minutes to check; each miss costs a review round.
claim; a dedup or merge of findings keeps the most severe row, not the first; a substring match on a
name is whole-word or bounded (probe `catalog` and `dialog` for `log`); a per-tag or per-file cap
cannot make the result depend on file order.
14. **A gate fails closed.** A shell gate checks that a value is present and numeric before it compares it, so an
erroring comparison never falls through to PASS; it SKIPs a case only for a named, expected missing premise and
FAILs on any other; an absence ("no row X", "nothing skipped") is read only off a command that succeeded and
produced its root or rows; when one harness call is added to sibling gates, diff the call sites so every arm
runs. A wrapper records the runner's own exit status right after it, and a reported `rc=0` is checked against
the log's failure count.
15. **Claims match every surface.** A comment, legend or doc that says a case is handled names the arm that proves
it, or the claim goes. After a behaviour change, search every surface that describes it (CLI help, MCP tool
descriptions, legends, docs) for sentences the change made false, and re-check size ceilings such as the MCP
tool list. A count over a set (overloads, roots, shards) counts distinct entities; probe two members that meet
the same one. An external read on an answer path tells "could not read" from "read, empty" and discloses the
failure, never "none".
16. **A match key names the real entity.** A filter, dedup or match identifies owner + name in its binding
scope, never file + name; probe two owners of one name in one file, and a bare name beside a same-named
class member.
17. **A gate detects what it needs and skips by name.** A gate that needs a sanitizer, a tool or a locale
checks for it itself and SKIPs naming it when absent; a guard on machine state exits rather than printing;
a new row or attribute name does not match the name patterns existing gates grep for.
18. **After any merge, count format placeholders against arguments** at every format call either side
touched: two sides adding the same `{}` merge cleanly and silently drop an argument. Never edit a tree
while its suite runs.
19. **Commit before you mutate.** Commit the fix before a mutation test, and undo a mutation by restoring the
committed file, never by checking out over uncommitted work; a build's `built_from` matches the commit it
claims.
20. **A text cap cuts on a UTF-8 boundary** and adds the ellipsis only when bytes were dropped; probe a
multibyte character straddling the cap, a text of exactly the cap, and the same slot in every language
that writes it.
21. **A derived cache dies with its parent.** A cached object that points into a rebuilt structure is dropped
wherever that structure is reassigned, never kept on a content stamp; probe a rebuild that keeps the
stamp (a chmod, a new non-source file) under the sanitizer build.

**The gate count is a build product.** It is stated in `README.md`, `docs/EVALS.md` and
`present/deck5_ripwire_build.js` — eight sites — and every one of them is written by
Expand Down
6 changes: 6 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,12 @@ rm -rf "$h/substitution.jsonl" "$h/routing.jsonl" "$h/routing-pending" "$h/meter
rmdir "$h" 2>/dev/null || true
```

`meter.conf` is optional and the installer never writes it. With no `meter.conf` (and no `RIPWIRE_METER_ARM`
in the environment) the hooks assign each session to the `treatment` or `control` arm of the router and
meter A/B by a stable hash of the session id (about half each), so a default install has a control group. Control sessions
get the same logging and no injected advice. To force every session onto one side, write `arm=treatment` or
`arm=control` into `$h/meter.conf` (or set `RIPWIRE_METER_ARM`); `arm=auto` spells out the default.

**4. The MCP server** (only if you added it).

- Claude Code: `claude mcp remove ripwire`.
Expand Down
Loading
Loading