My round-3 fix has the same defect it fixed, mirrored. bareAbovePointer
cut back to the previous FULL STOP, not the previous clause, so anything
sharing the reference's sentence ahead of it was swallowed:
"Ship Tuesday, as shown above." bare=true
"OK. The verdict is guilty, as detailed above." bare=true
"The answer is sixty minutes, as computed above." bare=true
All three read as pure pointers and were replaced by an earlier turn.
The comment called it a clause cut; the code cut a sentence. It survived
a round because every case I had written put the answer AFTER the
pointer — I fixed the direction I had thought of and tested only that.
clauseBoundaryChars now includes , ; : and the em dash.
Three more, all real:
- pointsAbove and bareAbovePointer each did their own FindStringIndex
plus offset check, so the two could disagree about what a pointer is.
One aboveRefLoc now answers that.
- fillerWords was extracted to stop drift while its separator class was
still copy-pasted beside it — the same defect one token over. fillerSep
shares it too.
- A missing blank comment line ran two paragraphs together.
The padded 96-byte "bare pointer" fixture is gone rather than bent a
third time. Its premise does not survive the rule: a genuinely bare
pointer is its own clause and nothing else, so it is SHORT, and the two
recovery bars cannot disagree about a short terminal. I had twice
reshaped that string to keep a case alive whose scenario the code no
longer admits. The modeBackRef path stays covered by the bare-pointer
cases in TestIsWeakFinal and the "(Already answered above.)" end-to-end.
Break-check: fifteen mutations including a regression to the sentence
cut, each killed by a named test; the harness now also fails a mutation
that only breaks the build.