Location: crates/mds-core/src/lint/rules/unreachable_branch.rs:135,164,193 (+ crates/mds-core/src/ast.rs:193)
unreachable-branch findings for @elseif clauses anchor to the enclosing @if offset rather than the offset of the offending @elseif branch, so the diagnostic caret points at the wrong location. The rule has no per-branch offset available: IfBlock.elseif_branches (crates/mds-core/src/ast.rs:193) carries no offset for each branch.
Deferred From: PR #171 (Closes #61) — mds lint release gate — cycle-2 review (I-28)
Review: .devflow/docs/reviews/feat-mds-lint-61/2026-07-12_0020/resolution-summary.md
Reason for Deferral:
The real fix adds a per-branch offset to the shared IfBlock.elseif_branches AST node (ast.rs:193), which ripples through the parser and every Node consumer (resolver / validator / build), for a cosmetic caret improvement. That blast radius exceeds the lint release gate.
Acceptance Criteria:
Location: crates/mds-core/src/lint/rules/unreachable_branch.rs:135,164,193 (+ crates/mds-core/src/ast.rs:193)
unreachable-branchfindings for@elseifclauses anchor to the enclosing@ifoffset rather than the offset of the offending@elseifbranch, so the diagnostic caret points at the wrong location. The rule has no per-branch offset available:IfBlock.elseif_branches(crates/mds-core/src/ast.rs:193) carries no offset for each branch.Deferred From: PR #171 (Closes #61) — mds lint release gate — cycle-2 review (I-28)
Review: .devflow/docs/reviews/feat-mds-lint-61/2026-07-12_0020/resolution-summary.md
Reason for Deferral:
The real fix adds a per-branch offset to the shared
IfBlock.elseif_branchesAST node (ast.rs:193), which ripples through the parser and everyNodeconsumer (resolver / validator / build), for a cosmetic caret improvement. That blast radius exceeds the lint release gate.Acceptance Criteria:
IfBlock.elseif_branchescarries a per-branch source offset, populated by the parserunreachable-branch@elseiffindings anchor to the offending branch offset, not the enclosing@ifNodeconsumers (resolver, validator, build) updated for the new field; no behavior change outside diagnostics@elseif; all Rust tests pass