docs(#782): delete decaying locators and an unstated grep sense from asset_sync's N1 comment - #785
docs(#782): delete decaying locators and an unstated grep sense from asset_sync's N1 comment#785djhenry wants to merge 2 commits into
Conversation
…set_sync's N1 comment The N1 EDIT block on ConnectOutcome::ALL (added answering #755's round-8 review) made three claims that were false or fragile, all measured rather than reasoned about: 1. It cited `:1400` for the round-7 retraction's quoted claim. That construct was at `:1412` even at ecf0ec0, the commit that introduced the sentence (confirmed via `git show ecf0ec0:crates/eqoxide-ipc/src/asset_sync.rs`) — the number was never measured, it was written, and it decays every time an edit lands above it regardless. 2. "four hits" only holds under a case-sensitive grep. `grep -i` over the same pattern set catches a fifth, at `:547`, where the round-6 correction paragraph re-quotes "before the crate builds" with different capitalization. The prose never said which sense it meant. 3. The block's own pattern list (originally `:565-567`) is matched by the sweep it describes, so any count it states is off by the block itself. Per the reviewer's recommendation, the fix deletes the locators rather than re-measuring them: constructs are identified by name (the round-6 retraction, the round-7 retraction on the test's rustdoc, the round-5 retraction in observe.rs, the renderer's pose-matching comment) instead of by line number, and the count is dropped rather than restated — the paragraph now says explicitly that no fixed number is stable across edits to itself, names the self-match and the case-sensitivity gap as the reasons, and notes that the previous two attempts at a specific state of this grep were each wrong by the time the next one ran it. No production code changed — this is a doc comment only. Full workspace test suite measured green before and after; see PR body for the exact commands and the five-figure comparison. Closes #782
Independent review — REQUEST CHANGESReviewed at The PR does what #782 asked for on all three original items — I re-ran every premise and all three hold. Line numbers below are at F1 (blocking) —
|
| commit | :561 reads |
|---|---|
55ecbff (round-7 head) |
claim's phrasings turns up **none** outside [LastLoginByOutcome::slots]'s rustdoc |
ecf0ec0 (round-8 fix) |
claim's phrasings turns up no **un-retracted** copy outside [LastLoginByOutcome::slots]'s |
a48760b (main) |
same as ecf0ec0 |
1b73b85 (this branch) |
same — unchanged by this PR, still there at :561 |
So "turns up none" was the attempt that failed. "no un-retracted copy" is the correction that
replaced it, and it is still in the file, presented as "stated as a measured fact about this commit".
Three independent confirmations that it was not wrong:
- This same EDIT block's own header, at
:564, quotes the right failed wording:
"turns up none" was the wrong word. Header and body of one block now name different sentences as
the failure. - The round-8 reviewer on fix(#731): observe the asset-server login, so a hung login stops reading as an idle client (supersedes #743) #755 wrote, verbatim:
"turns up no **un-retracted** copy" is what was measured and what is true. - The round-9 reviewer:
N1's substance — that no un-retracted assertion of the completeness claim survives — I re-ran and confirm.
And the new paragraph reasserts the same substance itself, three sentences later at :585-586:
"What is true, and was measured for this commit, is that no un-retracted assertion of the completeness
claim survives…". One paragraph says X was wrong and that X is true.
The reader-facing damage is the specific one this whole chain is about: someone following :583-584
concludes the sentence at :561 is retracted, when it is the one measured-true statement in the chain.
Fix: only "four hits" belongs in that list. Either drop the first item, or name the actual failed
wording ("turns up none", at 55ecbff) and say it was corrected in place at ecf0ec0 — which is what
:561 and :564 already jointly record.
F2 (blocking) — :578-579 "quoting the patterns necessarily matches them" is false, measured
This sentence's own pattern list is itself a hit — quoting the patterns necessarily matches them
Per-pattern, case-sensitive, over the pattern-list lines :567-569 only:
| pattern | self-matches |
|---|---|
completeness pin |
1 |
compile[- ]time pin |
0 |
before the crate builds |
1 |
does not build if |
1 |
hole is closed |
1 |
cannot reach the wire |
0 |
fails to compile here |
1 |
keeps .*ALL.* complete |
1 |
6 of 8, not 8 of 8. Two reasons, one structural and one introduced by this PR:
compile[- ]time pincan never self-match. The quotation contains the regex metacharacter class
[- ]; the literal stringcompile[- ]time pinis not matched by the regexcompile[- ]time pin. No
reflow fixes this. This is the interesting case — it is exactly why a reader who reasons "quoting a
pattern matches it" gets a different number than a reader who runs it.cannot reach the wirefails only because this PR wrapped it across:568/:569and grep is
line-oriented (see F3).
This is a reasoned mechanism claim ("necessarily") that measurement falsifies — the dominant defect
class in this repo, re-instantiated inside the fix for it.
Fix: state what was measured, or drop the mechanism and say only that the list matches itself in part.
Do not restate a number.
F3 (blocking) — :567 and :569: the reflow broke two code spans across lines, and this workspace has a compiled guard that calls that a defect
Odd-backtick-parity doc lines in asset_sync.rs, whole file:
| tree | count | which |
|---|---|---|
a48760b (main) |
2 | :1512, :1513 (pre-existing, unrelated construct) |
1b73b85 (branch) |
4 | the same two, plus :567 (3 ticks) and :569 (11 ticks) |
Both new ones are inside the paragraph this PR rewrote. `compile[- ]time pin` now opens on :567 and
closes on :568; `cannot reach the wire` opens on :568 and closes on :569. On main the whole
pattern list sat one-pattern-per-line-fragment with every span balanced.
crates/eqoxide-nav/src/steering.rs:1769 (unbalanced_doc_spans) reports exactly this condition, with the
message "a code span opens on this line and closes on another. cargo doc renders the break inside the
span. Keep the span on one line." asset_sync.rs is not in that guard's citation corpus (cited_in),
so nothing catches it here — but the project's own standard is explicit.
The bigger cost is not rendering. The pattern list is a copy-and-run recipe, and the same paragraph
tells the reader to use it ("re-run the grep to check"). Wrapped mid-pattern, two of the eight patterns
cannot be lifted off a line — and that is what makes F2's sentence false.
Fix: keep each backticked pattern whole on one line. That also restores 7/8 self-matching, leaving only
the [- ] case, which is worth saying out loud rather than papering over with "necessarily".
F4 (non-blocking) — :585-586: the exclusion set silently changed
Round-7's sentence at :561 excludes [`LastLoginByOutcome::slots`]'s rustdoc by name — the one place
the project deliberately keeps the corrected claim. The new sentence excludes "that inventory" instead, and
the inventory is defined at :570 as the hits outside slots()'s rustdoc. So slots()'s rustdoc is now
inside the scope of "no un-retracted assertion … survives", and slots()'s rustdoc carries, at :338:
It is also the completeness pin for [
ConnectOutcome::ALL]
Either that is an un-retracted assertion (new claim false) or it is not (new wording merely imprecise) — but
the round-7 wording had no such ambiguity and the rewrite created it. Restore the named exclusion.
F5 (non-blocking) — the PR body's scope derivation is wrong; a compiled guard does read this file
The body states: "Every hit resolves to a guard reading its own crate's src/ … eqoxide-nav's own files
via steering.rs … None reads crates/eqoxide-ipc/src/asset_sync.rs."
Measured. crates/eqoxide-nav/src/steering.rs:1559-1576 builds its resolution corpus from the
workspace root, not its own crate:
let crate_root = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
let ws = crate_root.parent().and_then(|p| p.parent()) … // = workspace root
let mut stack = vec![ws.join("crates"), ws.join("tests"), ws.join("src")];
… recursive read_dir, skipping only `target/`, collecting every *.rs
Replicating that walk yields 162 .rs files, and crates/eqoxide-ipc/src/asset_sync.rs is one of them.
So the write scope claim ("no compiled scanning guard reads asset_sync.rs") is false.
It is benign for this change — that corpus is used only to harvest fn NAME declarations, and the diff
adds none — and I proved it green by execution, not by replaying the algorithm (below). But the derivation
as written would be load-bearing and wrong for any change to this file that added a fn or a backticked
four-word citation.
F6 (non-blocking, but it ships) — the commit body contradicts itself, and this repo concatenates commit bodies on squash
1b73b85's body opens:
made three claims that were false or fragile, all measured rather than reasoned about
That is the inversion of the finding, and its own bullet 1 says the opposite two lines later: "the number
was never measured, it was written." On squash this lands in main's permanent history verbatim. Fix it in
the commit body, or exclude it via a hand-written squash body.
F7 (nit) — deictic locators replaced numeric ones without an antecedent
:578 says "This sentence's own pattern list", but the pattern list is in the previous paragraph
(:567-569); the sentence containing that phrase contains no pattern list. Having correctly deleted the line
numbers, the replacement leans on "this sentence" / "this doc's own" / "twelve lines above this one" — one of
which now resolves to nothing.
What I confirmed as correct
All measured by me at 1b73b85 / a48760b, not taken from the body:
- Diff purity. One file. 23 added / 10 removed. Every added line is
/// …; the one that isn't is
the bare///separator. Zero production code. ✔ as claimed. - Premise 1 (locator wrong at birth).
git show ecf0ec0:…| grep -n "compile-time pin that keeps"→
1412:; same ata48760b;1425:on this branch.:1400was never correct, and the branch's own drift
to:1425is a live demonstration of why deleting it was right. ✔ - Premise 2 (case sense). 12 case-sensitive / 13 with
-i; the single extra is
crates/eqoxide-ipc/src/asset_sync.rs:547("Before the crate builds"), inside the round-6 correction. ✔ - The 12/13 vs "four hits"/five discrepancy reconciles — different denominators, not an error:
12 = 4 insideslots()'s rustdoc (:338 :343 :345 :349) + 3 self-matching pattern-list lines
(:567-569) + 5 outside (:541 :544 :1425,observe.rs:314,scene.rs:283). The issue's "four" counted
:541 :544 :1412 observe.rs:314, withscene.rs:283called out separately as "a fifth". - Premise 3 (self-match). True — but only for 6 of 8 patterns. See F2.
- Every construct now named instead of numbered actually resolves.
the_slot_enumeration_and_all_are_the_same_list_in_the_same_order
is a real#[test]at:1441; the round-6 retraction is at:536; the round-7 retraction is at:1423,
on that test's rustdoc;crates/eqoxide-http/src/observe.rs:314is a round-5 EDIT inside the loop that
emitslogin_outcomesandlast_login_<outcome>(so "login-outcomes encoder" is accurate);
crates/eqoxide-renderer/src/scene.rs:283is a comment on amatch e.posearm (so "pose-matching
comment" is accurate). Naming beats numbering here — that part of the fix is right. - The "every hit is a retraction, a quotation inside one, or unrelated prose" claim holds for all 12
(13 under-i) hits, by enumeration, accepting the pattern-list lines as "a quotation inside one" (they
sit inside the N1 EDIT). scripts/check-no-local-detail.sh→OK — no forbidden patterns in tracked files, exit 0, run by me.
Figures I measured
I derived the radius from what reads what, not from what was edited, and found one compiled guard whose
corpus includes this file (F5). Rather than assume, I proved it by execution on the remote builder:
test -p eqoxide-ipc -p eqoxide-nav --locked --no-fail-fast, branch 1b73b85, judged by log content:
| figure | value |
|---|---|
Finished |
Finished \test` profile [unoptimized + debuginfo] target(s) in 3m 36s` |
test result: lines vs launch markers |
4 / 4 (2 Running + 2 Doc-tests, counted anywhere on line) |
running N tests? headers |
4, summing 283 |
passed + failed + ignored + filtered |
267 + 0 + 16 + 0 = 283 — matches the header sum |
| non-canonical (corrupt) result lines | 0 |
| all-zero (empty target) result lines | 1 (field-anchored) |
FAILED / ^error |
0 / 0 |
| the guard in question | steering::cursor_resync_tests::every_doc_comment_test_citation_resolves_and_is_listed_in_a_guard … ok |
Taken on the author's word, not verified by me: the full-workspace figures (50/50 result lines, 37+13
launch markers, 1664+0+45+0 = 1709, 15 all-zero, delta zero vs main) and the CI status. I ran a targeted
two-crate suite instead and report its numbers as absolutes, not as a delta — I did not run a baseline.
Could not establish: whether any other differently-worded restatement of the completeness claim exists
outside the literal pattern set (the body says so too; out of scope for #782).
To clear this
:583-584— remove"no un-retracted copy"from the list of failed attempts, or replace it with the
wording that actually failed ("turns up none",55ecbff, corrected atecf0ec0). Blocking.:578-579— delete "necessarily", or state the measured 6-of-8 and the[- ]reason. Blocking.:567-569— put each backticked pattern back on one line; no code span crossing a line break.
Blocking.:585-586— restore the named exclusion ([`LastLoginByOutcome::slots`]'s rustdoc) in place of
"that inventory".- Fix the commit body's "all measured rather than reasoned about", and the PR body's scope paragraph
(steering.rswalks the whole workspacecrates/tree, so it does read this file).
The direction of the fix — names instead of numbers, no count at all — is right, and items 1–3 are all
inside the two paragraphs that replaced the count. Worth one more round.
…e disease Round-1 review of #785 found that the replacement paragraph for N1 contained three new blocking claims reasoned about rather than measured — the exact defect class #782 was filed to fix, reintroduced inside its own cure: 1. The paragraph called "no un-retracted copy" (the corrected round-7 wording, still true and still standing at :561) a failed attempt, in the same breath as reasserting the same substance as true three sentences later. Only "four hits" (N1's own wider-pattern-set count, the thing #782 is about) was ever wrong; "no un-retracted copy" was not. Fixed by removing the mischaracterization and naming only the actual failure. 2. "Quoting the patterns necessarily matches them" was false as a universal claim and unmeasured. Measured directly: `compile[- ]time pin` can never self-match when quoted verbatim, because its own regex bracket-and-space character class has no literal match in the literal text that quotes it. Fixed by stating the measured count (seven of the eight patterns) and naming the one exception and why, instead of asserting "necessarily." 3. Two of the eight quoted patterns (`compile[- ]time pin`, `cannot reach the wire`) were split across a `///` line break by the previous edit's own line wrap, which independently breaks a line-based grep's self-match regardless of the regex question in (2). Confirmed by an odd-backtick- parity check: main has 2 such lines in this file (pre-existing, untouched, elsewhere), the previous commit added 2 more at exactly the lines it edited. Fixed by rewrapping so every quoted pattern stays on one line; re-ran the parity check after — back to 2, matching main. Re-measured after all three fixes, since fixing (3) changes what (2) can truthfully claim: the pattern-list lines now self-match seven of eight patterns (was six of eight before the rewrap), and the full-tree case- sensitive sweep still totals 12 hits, reconciled as 4 inside `LastLoginByOutcome::slots`'s own rustdoc + 3 self-matching pattern-list lines + 5 genuinely outside (the round-6 blockquote at :541/:544, the round-7 retraction, the round-5 retraction in eqoxide-http's encoder, and unrelated prose in eqoxide-renderer) — 13 under `grep -i`, the extra one at :547 unchanged from before. Also restored the explicit `slots()`'s own rustdoc exclusion the previous edit had blurred into "that inventory" (silently pulling :338's legitimate "completeness pin" phrase into scope), and fixed a dangling "this sentence's own pattern list" reference to instead point at the paragraph the list is actually in. Correcting the record on the previous commit in this branch (1b73b85): its message opened "made three claims that were false or fragile, all measured rather than reasoned about" — that is the exact inversion of what happened. The three original #782 claims were false because they were reasoned about rather than measured; that commit's replacement text was supposed to fix that, and (per this commit) only partly did. Because this repository squash- merges PR commit bodies into main's permanent history, the PR body carries the corrected squash subject/body text to use at merge time rather than the default concatenation of this branch's individual commit messages. No production code changed — still doc-comment-only. Full workspace test suite re-run on the corrected text; see PR body for the exact commands and the updated five-figure comparison.
Round 2 — REQUEST CHANGES (short round: two clauses, no re-run needed)Same reviewer as round 1. Re-measured at All seven round-1 findings are genuinely fixed, and I reproduced each fix independently — including One finding remains, and it is the same shape as round 1's, one notch milder: the diagnosis of "four R2-1 (blocking) — "four hits" is filed under decay; it was wrong when it was written, under both grep sensesShipped text,
Suggested squash body, bullet 2:
Measured. Same pattern set,
The number never moved. There is no point at which "four hits" became wrong. And at The block claimed "a grep turns up four hits outside Two consequences:
The PR body gets it right in prose — "Only 'four hits' was ever wrong" — so the accurate statement Fix — two clauses, nothing to re-run:
R2-2 (non-blocking) — "Deliberately not a count." is immediately followed by a count
But it is a number that already decayed once inside this PR: 6/8 at
Your call — I am not blocking on it. R2-3 (nit) — the same phenomenon is stated in two units that differ by more than 2×The file says the list "is itself a hit for seven of its eight patterns"; the body's reconciliation R2-4 (nit) — the body's baseline statements are stale"Baseline is unchanged from round 1 ( Round-1 findings: verified fixed, by my own measurement
Reconciliation table re-derived at Merge and tests — against current
|
| figure | value |
|---|---|
Finished |
Finished \test` profile [unoptimized + debuginfo] target(s) in 14m 23s` |
test result: lines vs launch markers |
4 / 4 (2 Running + 2 Doc-tests, counted anywhere on line) |
running N tests? headers |
4, summing 283 |
| passed + failed + ignored + filtered | 267 + 0 + 16 + 0 = 283 — matches the header sum |
| non-canonical (corrupt) | 0 |
| all-zero (empty target), field-anchored | 1 |
FAILED / ^error |
0 / 0 |
| the guard | steering::cursor_resync_tests::every_doc_comment_test_citation_resolves_and_is_listed_in_a_guard … ok |
Identical to my round-1 branch-only figures.
- fix(#742): clear the residual workspace lint warnings — per instance, with a reason each; and write the _SUCCEEDS/_FAILS convention down #786's effect on the 1709 baseline, checked rather than assumed,
a48760b→1de7133:
#[test]1409 → 1409,#[ignore]48 → 48, doc-comment```fences in*.rs68 → 68.
No test target gained or lost, so the 1709 baseline is consistent with currentmain— but I did not
re-run the full workspace, so I have not confirmed the figure itself.
Taken on the author's word, not verified by me: the full-workspace figures for both trees (50/50
result lines vs launch markers, 1664 + 0 + 45 + 0 = 1709, 15 all-zero, delta zero).
Could not establish: nothing new this round.
To clear this
:586-587— say "four hits" was wrong when written, not by the time asset_sync.rs N1 comment: a locator that was wrong at birth, a count that depends on grep case, and a pattern list that self-matches #782 re-ran it. The sweep
returned 12/13 atecf0ec0and 12/13 today; eight of those twelve were outsideslots()'s rustdoc
atecf0ec0against the four-plus-a-fifth the block claimed. Blocking — it is the one lesson
this whole block exists to carry, and it is currently applied to finding 1 and not to finding 2.- Suggested squash bullet 2 — "held only under a case-sensitive grep" is false; it did not hold under
either sense. Blocking, because that text is the permanent history. - Optional: drop "seven of its eight" for the exception-only phrasing (R2-2), and add "on three lines"
(R2-3).
Everything else is measured, reproduced, and green on the merge result. Items 1 and 2 are wording only —
no re-run needed, and I do not need to see the full workspace again for them.
Closes #782.
What changed
crates/eqoxide-ipc/src/asset_sync.rs, the N1 EDIT block onConnectOutcome::ALL's rustdoc(added answering #755's round-8 review). #782 named three false/fragile claims in that one
paragraph:
:1400locator for the round-7 retraction's quoted claim — wrong, and wrong at birth.grep -ifinds a fifth.is off by the block itself.
No production code changed, in either round. The diff touches only
///doc-comment linesin
crates/eqoxide-ipc/src/asset_sync.rs; no other file is touched.Per the reviewer's recommendation, locators are deleted, not re-measured: constructs are
identified by name (the round-6 retraction, the round-7 retraction on
the_slot_enumeration_and_all_are_the_same_list_in_the_same_order's rustdoc, the round-5retraction in
eqoxide-http's login-outcomes encoder, the renderer's pose-matching comment),and the "four hits" count is dropped rather than restated with a new number.
Round 1 review found the fix re-instantiated the finding — round 2 fixes that
The first version of this replacement text (commit
1b73b85) put three newreasoned-not-measured claims into the very paragraph meant to remove them. Commit
8666b28fixes all three, plus four more precision issues the same review flagged. Each is stated here
with what was actually measured, not just what changed:
Mischaracterized a still-true claim as a past failure. The round-1 text said the last
two attempts at "this grep" — "no un-retracted copy", then "four hits" — were each wrong. That
is false for the first one: "no un-retracted copy" is the corrected round-7 wording (the
original, actually-wrong wording was "turns up none", already named correctly in the EDIT
header two paragraphs up) and it is still standing, unretracted, at
:561today. Only "fourhits" was ever wrong. Fixed by removing the claim that groups them together.
"Quoting the patterns necessarily matches them" was asserted, not measured, and is false.
Extracted the three pattern-list lines into an isolated file and grepped each of the 8
patterns against them individually (
grep -Ec -- "$pattern" pattern-list-lines.txtperpattern, not a combined count): before this round's fix, 6 of 8 self-matched; after, 7 of 8.
compile[- ]time pinnever self-matches, in either state, because its own regexbracket-and-space character class (
[- ]) has no literal match in the text that quotes thepattern's source (
compile[- ]time pinas written contains a literal[, which the classcannot match). Fixed by replacing "necessarily matches them" with the measured "seven of its
eight patterns" and naming the one structural exception.
Two quoted patterns were split across a
///line break, independently breaking theirself-match regardless of the regex question above:
compile[- ]time pinsplit across(pre-fix) lines
:567/:568, andcannot reach the wiresplit across:568/:569.Measured with an odd-backtick-parity check (count of
///lines with an odd number ofbacktick characters — a code span opened on one line and not closed on the same line):
main(a48760b): 2 odd-parity lines, both pre-existing and unrelated to this change(an example command at what is now
:1528/:1529). Commit1b73b85: 4 — the same 2, plus2 new ones at exactly the lines the round-1 edit added (
:567,:569). Commit8666b28:back to 2, matching
main. Fixed by rewrapping the pattern list so every backtick-quotedphrase stays on one line.
Re-measured the self-match claim after the rewrap, rather than assuming the fix stands on
its own (fixing the line-wrap changes what the self-match sentence can truthfully say): the
per-pattern check above was run against both the pre-fix and post-fix text for exactly this
reason, which is how "6 of 8, becoming 7 of 8" was arrived at instead of asserted.
Restored the explicit exclusion. The round-1 text's closing sentence said no un-retracted
claim "survives outside that inventory," where "that inventory" was an unnamed reference back
to a list of retractions — silently dropping the explicit
`slots()`'s own rustdoccarve-outused earlier in the same block, which would make the sentence false on its own terms (
:338,inside
slots()'s rustdoc, legitimately contains "completeness pin" and is not a retraction,a quotation, or unrelated prose). Fixed by naming the exclusion again: "outside
slots()'sown rustdoc and this inventory."
Dangling antecedent. "This sentence's own pattern list" had no referent — the pattern
list is quoted in the previous paragraph, not the one containing that sentence. Fixed to
"The pattern list above."
Hit-count reconciliation (12 vs. 13, and what's inside each)
Re-ran the full-tree sweep against the corrected text (
crates/eqoxide-ipc/src/asset_sync.rsat
8666b28, exact commands under "Premises re-derived" below) and classified every one of the12 case-sensitive hits by hand, since a stated total without a breakdown is exactly the kind of
number this fix is trying to stop shipping:
asset_sync.rsLastLoginByOutcome::slots's own rustdoc — legitimate, not a retractionasset_sync.rsasset_sync.rsasset_sync.rsscene.rs:283eqoxide-renderer#643pose-matching comment) the pattern happens to catchobserve.rs:314eqoxide-http4 (inside
slots()'s rustdoc) + 3 (self-match) + 5 (genuinely outside both) = 12.grep -iadds one more, atasset_sync.rs:547("Before the crate builds", capitalized, insidethe round-6 correction paragraph) = 13. This is not a discrepancy to re-open — 12 and 13 are
the same sweep under two different case senses, and the comment's own text says exactly that.
Premises re-derived at current
main(a48760b) — none inherited on trust1. Locator wrong at birth. Confirmed still true today, and re-verified directly at the
introducing commit rather than trusted from the issue text:
The construct was
:1412atecf0ec0(the commit that introduced the:1400claim) and isstill
:1412on currentmain.:1400was never correct. (On this branch, at8666b28, thesame construct is at
:1428— it moves every time something is added above it, which is thewhole reason the fix names it instead of citing a line.)
2. Case-sensitivity gap. Re-measured on current
main, exact commands (pattern set copiedverbatim from the comment;
*.rs/*.md,target/excluded):Confirmed: 12 case-sensitive, 13 case-insensitive, and the sense genuinely changes the count
(not just a formatting quirk). Same 12/13 on the corrected branch text — see the reconciliation
table above for what the 12 actually are.
3. Self-match. The pattern-list sentence's own lines are among the 12/13 hits above
(
:567–:569). Per-pattern breakdown (measured on the isolated pattern-list lines, notinferred from the combined line count, which cannot distinguish "this pattern matched" from
"a different pattern on the same line matched"): 7 of 8 patterns self-match on the corrected
text;
compile[- ]time pinstructurally cannot, ever, quoted or not — see the round-2 fixlist above for why.
All three original premises held. Nothing was retracted or found already-fixed.
Verification — build + full workspace test suite
Remote builder only (
rbuild), judged by log content, not exit code (exit code is knownunreliable — it has returned 0 on a build that failed to compile).
Commands run:
Both logs analysed the same way — never piped through
head/tail, captured whole to ascratchpad file first:
Five figures — this branch (
fix-782-asset-sync-n1-comment@8666b28, round-2 head)FinishedlineFinished \test` profile [unoptimized + debuginfo] target(s) in 15m 17s`test result:lines (count vs. expected)Runninglaunches + 13Doc-testssections)passed + failed + ignored + filteredNs,tests\?)FAILED/erroroccurrencesHeader-vs-summary parity: 37
Running+ 13Doc-tests= 50 launch markers = 50test result:lines. No lost binary. (Wall time dropped from 44m37s in round 1 to 15m17s herebecause the remote
target/for this worktree was already warm from the round-1 build —incremental, not a different test set: identical 50/50/50 and 1709 total confirm it.)
Five figures —
mainbaseline (a48760b, fresh detached-HEAD worktree, nothing else applied)FinishedlineFinished \test` profile [unoptimized + debuginfo] target(s) in 43m 09s`test result:lines (count vs. expected)Runninglaunches + 13Doc-testssections)passed + failed + ignored + filteredNs,tests\?)FAILED/erroroccurrencesHeader-vs-summary parity: 37 + 13 = 50 launch markers = 50
test result:lines. No lostbinary.
running N testsheader count (tests\?, non-line-anchored) is also 50, matchingthe 50
test result:lines exactly — no corruption despiteRunning/Doc-testslines splicingmid-line into passing
test … oklines several times in this log (confirmed by eye; e.g. aneqoxide_telemetryRunning unittestsline lands mid-line insideeqoxide_net's own passingtest output — a non-anchored count still catches it). Baseline is unchanged from round 1 (
maindid not move), so this log was not re-captured for round 2.
Delta
Zero. Branch (round-2 head
8666b28) and baseline are identical on every figure: 1664passed / 0 failed / 45 ignored / 0 filtered / 1709 running total, 50/50/50 parity, 0
non-canonical, 15 all-zero, on both trees. This is exactly what a doc-comment-only change
should do — it moved nothing.
Scope re-derivation (what reads what, not what I edited)
This was wrong in round 1 and is corrected here from measurement, not from re-reading either
my prior claim or anyone else's restatement of it.
Round-1 claimed "no compiled guard reads this file." That is false. The
#[test] fnevery_doc_comment_test_citation_resolves_and_is_listed_in_a_guardineqoxide-nav/src/steering.rsbuilds a citation-resolution corpus (resolve_in, built atsteering.rs:1571-1582) by recursively walking the entire workspace root —crates/,tests/, andsrc/— for every.rsfile (target/excluded):That is 162 files, and
asset_sync.rsis one of them (confirmed: it's undercrates/, and thewalk does not exclude
eqoxide-ipc). So a compiled guard does read this file, on every test runof
eqoxide-nav'ssteeringmodule.It is benign here, and this is also measured rather than assumed:
resolve_in's only use of the162 files' contents is
scan_fns, which extractsfn NAMEdeclarations line-by-line(
steering.rs'sfn_name_on) to build a set of valid citation targets — it never scans filecontents for the "completeness claim" phrasings this doc discusses, so nothing about this
change's wording is visible to that guard. The separate
unbalanced_doc_spanscheck (the onestructurally capable of catching this file's round-1 line-wrap defect, F3 above) runs only
against
cited_in— four specific files (steering.rs,walker.rs,collision.rs,tests/walker_sim.rs) — not against the full 162-fileresolve_incorpus.asset_sync.rsisin the corpus that's read, but not in the corpus that's checked for this specific defect, which
is exactly why that guard didn't catch F3 and nothing in CI did either.
Net: the write scope is still just this one file (nothing outside it needed editing), but the
read scope is wider than either my round-1 claim or the original briefing to me characterized
it — 162 workspace-wide files, not "no guard" and not "reads walker.rs."
Suggested squash-merge message
This repository squash-merges PR commits, concatenating their bodies into
main's permanenthistory by default. Commit
1b73b85's message opens "made three claims that were false orfragile, all measured rather than reasoned about" — that is the exact inversion of what
happened (the original claims were false because they were reasoned about rather than
measured), and it should not ship into
main's history as written. Please use this as thesquash subject/body rather than the default concatenation:
What I could not establish
completeness claim beyond the literal pattern set the comment already names (the issue's
"grep the concept, not the field" caution) — that is a broader sweep than asset_sync.rs N1 comment: a locator that was wrong at birth, a count that depends on grep case, and a pattern list that self-matches #782 scopes, and
the replacement text is explicit that its own inventory is scoped to this pattern set, not
a claim about the whole codebase's phrasing space.
gh pr listshows six other open PRs (#786,#784,#778,#774,#767, plus this one). Diffed each againstorigin/main— none touchcrates/eqoxide-ipc/src/asset_sync.rs. No file-level overlap with this change.git merge-treeof this branch against currentmain(a48760b) produced no conflictmarkers — clean fast-forward-able merge.
-p eqoxide-ipc -p eqoxide-navrun, not the full workspace figures below — those remain on my word, same asround 1, pending independent re-check.