Skip to content

Bug-hunt round 40: transcribe float forms, offset carve-out, findings-unreadable state, truncation marker - #60

Merged
REPPL merged 6 commits into
mainfrom
bughunt-40
Aug 9, 2026
Merged

Bug-hunt round 40: transcribe float forms, offset carve-out, findings-unreadable state, truncation marker#60
REPPL merged 6 commits into
mainfrom
bughunt-40

Conversation

@REPPL

@REPPL REPPL commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Round 40 of the automated bug-hunt loop. Zero substantive findings; five confirmed nitpicks; three refuted. Each candidate was reviewed by two independent adversarial refuters; a finding survives only if both fail to kill it.

Confirmed (nitpicks)

  1. docs/reference/session-directory.md:76 — the transcript.jsonl example showed "t0":16.0,"t1":21.0 and a word "t":16.0. transcribe writes transcript.jsonl via encoding/json, which marshals float64(16) as 16, never 16.0 — and the same page's timeline.jsonl example for the identical utterance (line ~108) already renders it correctly as "t":16. Same class round 39 fixed for findings.jsonl on this page.
  2. .abcd/development/brief/05-internals/02-schemas.md:47 — sibling case: "t1":131.90, a form transcribe's round-to-2dp plus encoding/json never emits (it writes 131.9).
  3. docs/reference/cli.md:61 — the -offset flag row said derivation happens "with -audio" without qualification, but transcribe.go's resolveOffset only derives when -audio names a file other than the session's own audio.wav; -audio audio.wav takes the sidecar path instead. The row's own neighbouring prose (lines 63, 71) already states this carve-out for two other behaviours, just not for offset derivation.
  4. docs/reference/cli.md:100 and docs/reference/session-directory.md:159 — both described the report's Findings section as having only two states (present, absent). A third, real state was undocumented: findings.jsonl present but unreadable, where report (internal/report/report.go:166) still exits 0 and renders a "Findings unavailable" notice instead — already named in CHANGELOG.md, now documented on both reference pages.
  5. internal/record/recorders.gooutputTail's truncated-tail prefix was ASCII "...", while its two siblings doing the identical job (lockedBuffer.tail, transcribe's tail) both use "…" — the sole ASCII truncation marker left in the non-test tree. Fixed to match; TestOutputTail updated and confirmed to fail against the prior code and pass after. (ASCII ... still appears inside internal/cli/cli.go's usage line and -compute_type help string, where cli.md renders the same list with — noted as a candidate for a later round, not changed here.)

Considered and rejected

  • A claim that analyze.EmitRequest reintroduces HTML-escaping relative to timeline.jsonl, breaking validation when an agent copies a quote/ui.selector containing &/</>. Both refuters built the CLI and reproduced that the escaping is JSON-transparent (validation decodes both forms identically), and that findings.jsonl itself is already written with the same escaping convention via a plain encoder — the claimed consequence does not occur.
  • session-directory.md's mode field documented default A with no assigning code anywhere. Split refuter verdict, discarded per the loop's tie-breaking rule: for an optional field, "default" in a schema table states what a reader should assume when the field is absent, not a claim that ingest materialises the value — sibling specs use the identical phrasing deliberately.
  • internal/demo/demo.go's session.EncodedLen error branch being unreachable dead code. True but not a defect — it is one of three identical, mandatory error handlers on the same shared, error-returning API; removing it would be the actual regression.

Housekeeping

A stale bughunt-33 branch was found pushed to origin with no open PR. Investigation showed every fix in it had already landed on main independently, worded differently, via other rounds, so it was left unopened rather than turned into a PR that would revert improved wording. This session's tools could not delete the branch (git push --delete was rejected); it's safe leftover cruft for manual cleanup.

Testing

gofmt -l ., go vet ./..., go build, go test ./..., go test -race ./..., and the merge/report pipeline smoke all pass. No go.mod change.

Round 40; decision log entry in .abcd/work/DECISIONS.md.

claude added 6 commits August 9, 2026 11:31
docs/reference/session-directory.md's transcript.jsonl example wrote
"t0":16.0/"t1":21.0 and a word "t":16.0, contradicting the same page's
timeline.jsonl example two tables down, which correctly renders the
identical utterance as "t":16/"t1":21. transcribe writes transcript.jsonl
via encoding/json, which marshals float64(16) as 16, never 16.0 — the
same class round 39 fixed for findings.jsonl on this page.

The internal brief's schemas.md carried the sibling case: "t1":131.90,
a form transcribe's round-to-2dp plus encoding/json never emits (it
writes 131.9).

Assisted-by: Claude:claude-sonnet-5
The -offset flag row said "with -audio, derived from the recording's
creation time" without qualification, but transcribe.go only derives
when -audio names a file other than the session's own audio.wav
(resolveOffset's external check); -audio audio.wav takes the sidecar
path instead, same as no -audio at all. The Behaviour prose two lines
down already states this carve-out for conversion-skipping, and the
provenance-writing paragraph states it again for the sidecar — the flag
row was the one place a reader would hit first without it.

Assisted-by: Claude:claude-sonnet-5
cli.md's testimony report entry and session-directory.md's report.md
section both described only two Findings-section states: findings.jsonl
present, or absent. A third, user-visible state exists and was
undocumented: findings.jsonl present but unreadable, where report (see
internal/report/report.go's renderFindings) still exits 0 and renders a
"Findings unavailable: findings.jsonl could not be read" notice instead
of the error. CHANGELOG.md already names this outcome; the reference
pages now do too.

Assisted-by: Claude:claude-sonnet-5
outputTail prefixed a truncated ffmpeg-output tail with ASCII "...",
while its two siblings doing the identical job — lockedBuffer.tail and
transcribe's tail — both use the ellipsis character "…". The mismatch
was the only ASCII "..." literal left in the non-test Go tree.

TestOutputTail asserted the old ASCII prefix; updated it to expect "…"
and confirmed it fails against the prior code and passes after this fix.

Assisted-by: Claude:claude-sonnet-5
Assisted-by: Claude:claude-sonnet-5
The entry said the old "..." was the sole ASCII ellipsis literal left in
the non-test tree. Strictly it was the sole ASCII truncation marker:
internal/cli/cli.go still prints ASCII ... in its usage line and the
-compute_type help string, where cli.md renders the same list with an
ellipsis character. Noted as a candidate for a later round.

Assisted-by: Claude:claude-opus-5
@REPPL
REPPL merged commit abc07f2 into main Aug 9, 2026
6 checks passed
@REPPL
REPPL deleted the bughunt-40 branch August 9, 2026 15:00
@REPPL REPPL mentioned this pull request Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants