Bug-hunt round 31: CHANGELOG entry for round 30's word-level SafeText filtering - #47
Merged
Conversation
Round 30 changed transcribe.mapSegments's per-word emptiness guard to compare the SafeText-rendered form, matching the segment-level guard documented in the round-27 entry, but the round's commit did not add a CHANGELOG bullet for the word-level sibling change. Assisted-by: Claude:claude-sonnet-5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Round 31 of the autonomous bug-hunt loop (state tracked on #24).
Confirmed finding (substantive)
CHANGELOG.mdhad no[Unreleased]entry for round 30's word-levelSafeTextfiltering change.Round 30 (
ad3106a) changedinternal/transcribe/transcribe.go:532—mapSegments's per-word emptiness guard now decides presence onsession.SafeText(word)(the rendered form) rather than the raw word, so a word that is entirely invisible-only Unicode (e.g. a zero-width space) is now dropped fromtranscript.jsonl/timeline.jsonl/the analysis request instead of surviving as a timestamped word with no visible content. This is a real, user-visible change to whattranscribewrites to disk. Only the sibling segment-level change from round 27 was documented inCHANGELOG.md; the word-level change landed with no bullet.Fix:
CHANGELOG.mdgains a bullet documenting the word-level guard, alongside the existing segment-level one. Direct precedent: round 27 explicitly back-filled the CHANGELOG entry round 26's evidence-anchor fallback should have carried.Both adversarial refuters independently confirmed this survives — see
.abcd/work/DECISIONS.md's round 31 entry for their reasoning.Considered and rejected (3)
docs/reference/session-directory.md:73'swordsrow omitting the same content-based drop cause from its listed omission causes. Split verdict on adversarial review (one refuter killed it as pre-existing — the empty-word drop predates round 30 by roughly 30 rounds, so round 30 introduced no fresh doc staleness; the other found it survives on the row's own precedent of documenting the equivalenttext-row cause). Discarded per the loop's "both must fail to kill it" rule.docs/reference/session-directory.md:127'squoterow "no normalisation" claim read againstinternal/analyze/validate.go'sSafeText-based comparison. Refuted by both reviewers:SafeTextis a rune-local, substring-preserving map (no case-folding, no whitespace-collapsing, no Unicode NFC/NFD), so it is not "normalisation" in the sense the row rules out — the row's own decision-log origin coordinates "no normalisation" with "not corpus-joined" as a matching-leniency claim, not a byte-purity one.internal/analyze/analyze.go:185's duplicate-finding-id error message printing the raw id instead of theSafeText-compared form, claimed inconsistent with three sibling checks. Refuted by both reviewers:%qalready escapes every characterSafeTextwould strip, so the raw form is the more diagnostic one for locating the offending bytes on the reported line, and the "three consistent siblings" premise doesn't hold on inspection (one sibling names no first occurrence either; another sibling in the same package also prints the raw form).Verification
gofmt -l .,go vet ./...,go test ./...,go test -race ./...all pass.merge/reportonexamples/sample-session) passes.Assisted-by: Claude:claude-sonnet-5