diff --git a/.abcd/work/DECISIONS.md b/.abcd/work/DECISIONS.md index 5494f74..fe1f50a 100644 --- a/.abcd/work/DECISIONS.md +++ b/.abcd/work/DECISIONS.md @@ -1581,3 +1581,33 @@ Architecture-shaping decisions graduate to an ADR under name the qualifier that actually distinguishes them. Rescoped the CHANGELOG bullet's subject to `analyze`, true of it, without altering the historical record's substance. +- 2026-08-16 — Bug-hunt round 47: one confirmed nitpick, four refuted, two + discarded on split verdicts. Round 46's `install.sh` ffprobe-install fix + and the `curl -fL` model-download recipe fix had no `CHANGELOG.md` entry + anywhere (the round's only edit to that file was an unrelated rescope of + an existing `[0.2.0]` bullet); matching this repo's established practice + of backfilling exactly this gap (round 27's own entry, and round 31's + PR #47 backfilling round 30's fix), a bullet was added to `[Unreleased]`'s + "Checks and installer:" group. Four candidates + were refuted: `record`'s Ctrl+C handling during macOS device probing (the + ordering is a documented, tested, deliberate fix for a worse defect, and + the claimed misdiagnosis is a pre-existing gap unrelated to the probe + window); `demo`'s case-sensitive `loopbackHost` "localhost" match (no real + caller — browser and Node URL parsers lowercase hosts before any header is + written); `WriteFileAtomicNoFollow` replacing a non-regular file its + sibling refuses (already adjudicated refuted in round 30 — `rename(2)` + never opens the target, so the hazard the sibling's stricter check guards + against is absent by construction; a planted FIFO/socket carries no real + threat and the sidecar's own repair path depends on the replace + succeeding); and the `[0.4.0]` CHANGELOG entry's `audio.wav` file-mode + claim being made stale by round 45's existing-file mode preservation (both + refuters held that a released section's entry is only corrected when it + was already wrong at release time — round 46's own precedent for editing a + released entry — and this one was true on the day it was written). Two + candidates were discarded on split verdicts (per the loop's tie-breaking + rule): `transcribe-a-recording.md` omitting `ffprobe` as a dependency + (Homebrew's `ffmpeg` formula bundles it, narrowing the exposed population + to the tutorial's no-Homebrew macOS path); and the same macOS `install.sh` + branch lacking a residual-gap warning message (round 46's own commit + called the branch "untouched" as a considered decision, but the + message-only fix was judged separately fixable by the other refuter). diff --git a/CHANGELOG.md b/CHANGELOG.md index 12111f8..7501de8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -284,6 +284,18 @@ Checks and installer: `--help` works through the documented pipe invocation; `--dir`/`--version` without a value are refused cleanly; the whisper.cpp model recipe downloads into a directory `-model NAME` actually searches. +- `install.sh`'s Linux local-ffmpeg branch now installs `ffprobe` alongside + `ffmpeg` from the same tarball: `transcribe -audio`'s offset derivation + shells out to `ffprobe` to read a recording's `creation_time` tag, and + without it on PATH external-recording offset derivation fell back to 0, + reported with the same provenance as a genuinely missing or unreadable tag + (the macOS local-install branch still lacks `ffprobe`, a residual gap). + The whisper.cpp model-download recipe, printed by `resolveModel` and + mirrored in the how-to guide, now uses `curl -fL` instead of `curl -L`: + without `-f`, an HTTP error response for a moved or withdrawn model asset + used to be written into the destination `.bin` file at exit 0, a + "successful" download whisper-cli only rejects later, confusingly, at + load time. Documentation: