Repository navigation
Systemic TC18.txt citation-drift in src/*.rs doc comments (17 files, ~57% of checked citations) — mirrors c-RCP#434 #164
Description
Summary
Modeled directly on c-RCP's own issue #434 ("Systemic TC18.txt citation-drift affects near-every section's .fusa-reqs.json "tc18" fields"), which found and fixed the identical root cause in a sibling repo: a TC18.txt re-extraction/rebaseline event shifted line numbers by roughly 350-450 lines across most of the document, and in places renumbered tables/figures outright.
A systematic audit of rust-RCP (mirroring c-RCP #434's own method: mechanically relocate each citation's quoted text in current TC18.txt, then hand-verify a sample) found the two citation layers are in opposite states:
.fusa-reqs.jsonis essentially clean — 261 of 628 requirements carry atc18field, and only one genuine drift (REQ-CMP-003, ~20-24 lines) plus one completeness gap (REQ-LIN-008missing a line number on its second quote) were found after hand-verifying ~25 flagged candidates. Both already fixed in fix: correct REQ-CMP-003/REQ-LIN-008 .fusa-reqs.json citation gaps #163. This matches evidence that an earlier[c-RCP-18-tracker Part 1]-equivalent PR series (docs(fusa): [c-RCP-18-tracker Part 1] propagate tc18_master_id for REQ-WIRE-*/REQ-NTSCF-*/REQ-TSCF-*/REQ-ABB-*/REQ-GBB-*/REQ-BMI-* #141-docs(fusa): [c-RCP-18-tracker Part 1] final scope sweep — propagate tc18_master_id for remaining prefixes, close out Part 1 #151, thetc18_master_idpropagation batches) already swept this file's citations clean before this session's own ISELED/MDIO/etc. work landed.src/*.rsdoc comments (//!////"Provenance note" prose, not.fusa-reqs.json) were never part of that earlier sweep and are systemically drifted — the same pattern c-RCP #434 found, just in a different location within this repo.
Scope confirmed (17 of 55 source files carry TC18 citations; the other 38 have none and are clean by construction)
Of 101 lineref citations checked in doc comments, only 7 (7%) are clean; 58 (57%) show a confirmed >5-line drift, the large majority clustering at ~370-420 lines — same order of magnitude as c-RCP's own rebaseline shift. 14 of 17 affected files independently hand-verified (not just script-flagged).
acf.rs(REQ-ABB, REQ-BMI, REQ-ECHO, REQ-EVT, REQ-GBB, REQ-RESP): worst offender — 0 clean / 13 drift / 3 not-found / 2 unpaired, drift ranging ~70 to ~400 lines. Concrete proof case:REQ-EVT-001's.fusa-reqs.jsoncitation correctly saysTC18.txt L4069-4071for "event bits evt[2:0]...";acf.rs's own doc comment for the exact same phrase (theEvtstruct) still saysTC18.txt lines 3672-3673— off by ~399 lines. Two independently-maintained citations for the identical fact, one fixed, one not.avtp.rs(REQ-HVSEL, REQ-NET, REQ-NTSCF, REQ-SID, REQ-TSCF, REQ-WIRE): all 4 citations drifted (~394 lines).can.rs(REQ-CAN): 0 clean — 8 drift, 2 not-found, 2 unpaired (~416-line drift confirmed).discovery.rs(REQ-DISC): all 11 citations drifted, but by a smaller, distinct ~63-line shift — not the same ~400-line pattern, worth checking separately in case it's a different root cause.e2e.rs(REQ-CRC): 8 citations, all problematic — 2 confirmed ~416-line drift, plus 6 "not found" that are partly genuine RC4→RC5 content rewording (TC18.txt itself carries aCommented [BE39]: 051RC4 - text and figure updatedmarker at the relevant spot), not just a line-number shift — this file needs closer reading, not a mechanical line-number swap.gpio.rs(REQ-GPIO): 0 clean — 4 drift, 2 not-found (~408-line drift confirmed).i2c.rs(REQ-I2C): 1 citation, drifted ~411 lines.iseled.rs(REQ-ISELED): mostly script artifacts (self-referential "Provenance note" text quoting its own old, now-corrected citation) from this session's PR feat: implement Table 30 Row-2 evt[2:0] validation — ISELED (7th endpoint type) #161 fix — not new drift, but confirm before assuming fully clean.lifecycle.rs(REQ-LIFE): 0 clean — 3 not-found, 2 drift (~376-line drift confirmed).lin.rs(REQ-LIN): 0 clean — 3 drift, 1 unpaired (~416-line drift confirmed), separate from the correct LIN-specific Table-30 addition from PR feat: implement Table 30 Row-2 evt[2:0] validation — LIN (4th endpoint type) #158.mdio.rs(REQ-MDIO): mostly script artifacts likeiseled.rs, but one genuinely still-stale citation confirmed: line 130 cites "Table 57 (TC18.txt line 5676)," directly contradicting this same file's own later correction note (lines 316-320) that the real table is Table 60 at line 6088. Even the file this session's PR feat: implement Table 30 Row-2 evt[2:0] validation — MDIO (8th and last endpoint type) #162 touched isn't fully clean.pwm.rs(REQ-PWM, REQ-PWMI): 0 clean — 2 drift (~408 lines).request.rs(REQ-BUNDLE, REQ-CANCEL, REQ-CHAIN, REQ-CMP, REQ-CRC, REQ-E2EENF, REQ-ERRH, REQ-OVRFLW, REQ-PRIO, REQ-RLC, REQ-SAFEACT, REQ-SAFEMEAS, REQ-SAFETY, REQ-SEQ, REQ-SEQENF, REQ-TIME, REQ-TRIG): 1 clean, 2 drift (~81 lines — again a smaller, distinct shift).timestamp.rs(REQ-TS): all 3 citations drifted (~375 lines).evtgroup.rs/uart.rs: mostly clean — recently-written citations from this session's own "Table 30 Row-2" PR series (feat: implement Table 30 Row-2 evt[2:0] validation — pilot (shared predicate + I2C dispatch wiring) #155-feat: implement Table 30 Row-2 evt[2:0] validation — MDIO (8th and last endpoint type) #162), not part of the original drift.
Recommended remediation
Same as c-RCP #434's own successful approach: not per-citation manual edits — a single bulk/automated correction pass, but scoped to src/*.rs doc comments specifically (the .fusa-reqs.json layer does not need this treatment; see #163).
- For each flagged citation, re-locate its quoted spec text in current
TC18.txtand replace the line range (and table/figure number, where cited). - Spot-check a sample against a fresh PDF extraction directly, not just
TC18.txt(TC18.txtis itself one extraction of the real spec). - Do not assume uniform drift within a file — c-RCP #434's own closing note recorded a real instance of a claimed "whole ID-range is stale" finding turning out true for most but not all entries in that range; verify each citation individually.
discovery.rs's andrequest.rs's smaller, distinctly-sized drifts (~63 and ~81 lines respectively, vs. the dominant ~370-420-line pattern) may indicate a different or partial root cause — investigate separately rather than assuming one single shift value applies everywhere.e2e.rs's "not found" citations need closer reading (possible genuine RC4→RC5 content rewording, not just a line shift) before blindly relocating them.- Skip
iseled.rs/mdio.rs's self-referential "Provenance note" artifacts (already-fixed session work describing its own fix history) — but DO fixmdio.rs:130's genuine remaining stale citation.
Verification expectations
Doc-comment-only change (no behavior change) — full cargo build/cargo test should be unaffected; bash scripts/api-snapshot-check.sh unaffected (no public-API change); rsfusa check/rsfusa trace unaffected (citation text isn't itself trace-relevant, only the //fusa:req tags are, and those aren't touched by this fix).
References
- c-RCP issue #434 (closed) — the sibling-repo precedent this issue mirrors exactly
- fix: correct REQ-CMP-003/REQ-LIN-008 .fusa-reqs.json citation gaps #163 (this repo) — the small, already-fixed
.fusa-reqs.json-layer companion to this issue - Investigation scripts/raw results referenced in the audit that produced this issue (session-local, not committed — a fresh re-audit script should be written for the actual fix pass rather than assuming the investigation's own script is fix-ready)
Activity
docs: fix TC18.txt citation drift in acf.rs/avtp.rs/can.rs doc commen…
docs: fix TC18.txt citation drift in gpio.rs/i2c.rs/lifecycle.rs/lin.…
docs: fix TC18.txt citation drift in discovery.rs/request.rs + mdio.r…
docs: fix TC18.txt citation drift in e2e.rs (issue #164 batch 4, fina…
SoundMatt commentedon Aug 20, 2026
Closed by PRs #165, #166, #167, #168 — all 17 flagged files fixed (acf.rs, avtp.rs, can.rs, gpio.rs, i2c.rs, lifecycle.rs, lin.rs, pwm.rs, timestamp.rs, discovery.rs, request.rs, mdio.rs, e2e.rs), each independently re-verified citation-by-citation against the canonical TC18.txt before merge, including catching genuine table/figure renumbers (not just line drift) in most files. e2e.rs's two citations that could not be cleanly resolved (the old spec text appears genuinely removed under the RC4/RC5 revision, not just relocated) are split out to a dedicated follow-up: #169.