docs: drop finished work from TODO.md and rehome the PIT exclusion rationale - #201
Conversation
…tionale
TODO.md's own header says completed work belongs in git history and
crossrepostatus.md, not in the file -- and the longest entry in it was a
33-line item that opened by declaring itself finished ('Still out ... nothing,
as it turns out'). It is deleted.
What it carried that is not history: the reason two classes can never reach
100% mutation coverage. Those survivors are equivalent mutants, unkillable
through the public API rather than merely untested, so without the write-up
the next person re-attempts an impossible target. Compressed and moved into
CLAUDE.md's PIT section, where guidance for working in this repo belongs.
The @VisibleForTesting entry claimed 'No usages currently in any module',
which reads as 'nothing to do' -- the audit is about members that exist and
are unannotated, and there are ten of them. It now names them and states the
decision it needs (project-local marker annotation, for which
support.ConvertToRecord is precedent, vs. recording that the convention is not
adopted here), so it can be closed rather than re-audited.
Header now states the rule outright: finished items are deleted, not
annotated.
Review SummaryThis is a clean documentation-only change that appropriately consolidates finished work and preserves important technical guidance. What's Good ✓
No Issues Found
Looks good to merge. ✓ |
Summary
TODO.md's own header said completed work belongs in git history andcrossrepostatus.md, not in the file — and the longest entry in it opened by declaring itself finished ("Still out … nothing, as it turns out", 33 lines). It is deleted; the file goes from 102 to 51 lines with 7 genuinely open bullets.CLAUDE.md's PIT section, where guidance for working in this repo belongs.Why that rationale had to survive
Both classes' survivors are equivalent mutants — unkillable through the public API, not merely untested. Without the write-up the next person re-attempts an impossible target:
document.AiMdHeaderCodec— the colon guard inreadis reached only afterstartsWith(HEADER_FIELD_PREFIX), socolonIndexis either-1or>= 2. The< 0boundary mutant differs only at the unreachable0; the+1 → -1mutant only at an empty field key, whichvalues.put("", value)swallows because no header field is keyed"".support.AiSourceChunker(28/34) — its three observable boundaries are pinned (maxChars == 1, theend < lengthguard, thelastNewline > posguard), but six mutants have no observable effect at all: the ArrayList capacity hint,return chunksvsemptyList()on empty input, two clamps the surroundingMath.maxabsorbs, the loop head theend >= lengthbreak already guarantees, andselect'stotal <= maxChunks, where the equality branch computes the identity mapping.Reaching 100 % on either would mean exposing internals or deleting a deliberately defensive guard.
The
@VisibleForTestingentry was misleading and is sharpenedIt claimed "No usages currently in any module", which reads as "nothing to do". The audit is about members that exist and are unannotated, and there are ten: four on
LlamaCppJniAiGenerationProviderplus its two static mappers, two onAiMdDocumentCodec,AiPromptPreparationSupport.trimSourceAtLineBreak, and the three mojos'build*Configuration(). It now names them and states the decision it needs — a project-local marker annotation (support.ConvertToRecordis precedent) versus recording that the convention is not adopted here — so it can be closed rather than re-audited forever.Test plan
TODO.md+CLAUDE.mdonly — no source, test or build file touchedmain(which has since taken feat!: send enable_thinking only when it was actually set #199 and fix(build): make srcmorph/pom.xml parseable again #200); verified the file no longer mentionsenable_thinking,flashAttnor the PIT-scope item, all three of which are now closedmainpins the unpublishednet.ladenthin:llama:5.2.0, so every srcmorph PR fails at dependency resolution until that release lands. Unrelated to this change.Related issues / PRs
Part of a four-repo pass; siblings are the matching
claude/todo-cleanupbranches injava-llama.cpp,BitcoinAddressFinderandstreambuffer. Each file's header now states the rule outright: finished items are deleted, not annotated.Checklist
CONTRIBUTING.mdandCODE_OF_CONDUCT.mdGenerated by Claude Code