• Joined on 2026-03-27
mathias pushed to feat/33-audio-upload-transcript at mathias/tapir 2026-10-02 15:37:15 +00:00
6e50a97b6d docs(adr): third review -- the hang-up path, the client-read marker, the note kept visible
815ee98d4c test(web): the title input that proves a bidi character is dropped, not replaced
067620d06a chore(web): regenerate uploads_templ.go
91e475807c fix(web): a finished upload's record opens when a step carries a note (third review)
6d044ba403 fix(web): a client that hangs up is logged at INFO and not answered; the 400 follows the marker, not io.ErrUnexpectedEOF; hasNote (third review)
Compare 12 commits »
mathias commented on pull request mathias/tapir#39 2026-10-02 15:24:51 +00:00
feat: upload audio, get a private Swedish transcript, discuss it (#33, ADR-033)

Second adversarial pass (head aa54089): BLOCK (narrow) -- and what was done about it

Reviewer's report, reproduced by execution in a scratch copy; worktree untouched (git status…

mathias commented on issue mathias/tapir#34 2026-10-02 15:24:51 +00:00
DECISION NEEDED: ffmpeg + ffprobe in the runtime image (blocks enabling audio upload)

Correction to my earlier comment here. I wrote that CI builds the image on the PR. It does not: the image job has if: github.event_name != 'pull_request'. I then built the Dockerfile myself…

mathias pushed to feat/33-audio-upload-transcript at mathias/tapir 2026-10-02 15:24:39 +00:00
08ffc2ff62 test(web): Go escapes for the bidirectional characters, which staticcheck ST1018 requires -- task check does not gate lint (#41)
e70e56a531 test(web): the render tool shows a step note
b46a0dd0c9 docs(adr): second review -- the note instead of a refusal, room before spooling, the callable chat model, and the image that was actually built (ADR-035 decision 8)
fe6c0fae3a test(acceptance): follow the renamed scenario
2a616c6ae1 docs(use-cases): a short recording is noted, not refused
Compare 33 commits »
mathias opened issue mathias/tapir#46 2026-10-02 14:53:02 +00:00
Audio upload hardening follow-ups the first adversarial review could not verify or did not fix
mathias pushed to feat/33-audio-upload-transcript at mathias/tapir 2026-10-02 14:52:30 +00:00
aa54089230 docs(claude): errors are logged and shown as kinds, and what carries transcript text must be local (ADR-035)
8749ffe6a9 docs(homelab): the engine timeout, a local chat model, ffmpeg in the image, and 31B with Low Power Mode off
67879f85eb test(acceptance): map the hardening scenarios, and follow the two tests renamed in the review
08b7654d06 docs(use-cases): scenarios for the review's hardening (ADR-035 decision 8) -- the coverage gate is red until mapped
f03b0213d0 docs(adr): record the owner's decisions on #34, #35 and ADR-034, and the adversarial review's hardening (ADR-035 decision 8)
Compare 78 commits »
mathias commented on pull request mathias/tapir#39 2026-10-02 14:36:53 +00:00
feat: upload audio, get a private Swedish transcript, discuss it (#33, ADR-033)

Adversarial review of head 7029dd1 (skills:pr-gatekeeper): BLOCK

Run at the owner's request, review only. The reviewer reproduced findings by execution in a scratch copy and did not…

mathias opened issue mathias/tapir#45 2026-10-02 14:23:40 +00:00
DECISION NEEDED: evaluate berget.ai models as the reconciler? It means sending private transcript text to a cloud API
mathias commented on issue mathias/tapir#34 2026-10-02 14:23:26 +00:00
DECISION NEEDED: ffmpeg + ffprobe in the runtime image (blocks enabling audio upload)

Decision (Mathias, 2026-10-02): option A, static ffmpeg + ffprobe in the distroless image. Implementation follows in PR #39 once the adversarial review of it has reported; this closes on…

mathias closed issue mathias/tapir#40 2026-10-02 14:23:21 +00:00
Add iguana/pianissimo as a second local transcription backend (middle tier, or run both)
mathias commented on issue mathias/tapir#40 2026-10-02 14:23:21 +00:00
Add iguana/pianissimo as a second local transcription backend (middle tier, or run both)

Decision (Mathias, 2026-10-02): superseded by ADR-034. The two-engine mode (pianissimo + kb-whisper, reconciled by a local model) is this issue's option B, built. A first check on the real…

mathias commented on issue mathias/tapir#35 2026-10-02 14:23:19 +00:00
DECISION NEEDED: berget fallback for private audio — default on or off?

Decision (Mathias, 2026-10-02): berget fallback stays enabled by default, option A. The code already ships that way, so no change is needed. The mitigations in the PR stand: the serving…

mathias closed issue mathias/tapir#35 2026-10-02 14:23:19 +00:00
DECISION NEEDED: berget fallback for private audio — default on or off?
mathias commented on pull request mathias/tapir#39 2026-10-02 07:06:57 +00:00
feat: upload audio, get a private Swedish transcript, discuss it (#33, ADR-033)

Update to my note above: CI run 8801 for head 7029dd1 has completed with conclusion success (checked live, https://git.d-ma.be/mathias/tapir/actions/runs/8801). Note that CI is not a lint…

mathias commented on pull request mathias/tapir#39 2026-10-02 07:06:33 +00:00
feat: upload audio, get a private Swedish transcript, discuss it (#33, ADR-033)

Added to this PR (2026-10-02): progress, logging and judged spots. ADR-035 is Proposed; merge = acceptance. Closes #42, #43, #44.

Prompted by the first real run (63.6 min of audio, 21 min 49…

mathias commented on issue mathias/tapir#44 2026-10-02 07:06:33 +00:00
Reconcile: store every adjudicated spot, and keep saved segments in step with the merged text

Built on PR #39 (head 7029dd1), per ADR-035. Closes on merge.

Done: (1) every judged spot is stored with its verdict and the 8 words before it, capped at 2,000 (option MaxContested); the page…

mathias commented on issue mathias/tapir#43 2026-10-02 07:06:33 +00:00
Upload worker logs nothing until the job ends: no start, phase, engine or adjudication lines

Built on PR #39 (head 7029dd1), per ADR-035. Closes on merge.

Done: the worker, ensemble and reconciler log through the same progress.Tracker that writes the page's phases. One INFO line per…

mathias commented on issue mathias/tapir#42 2026-10-02 07:06:33 +00:00
Upload page: show progress, so the user can tell running from hung or crashed

Built on PR #39 (head 7029dd1), per ADR-035 (Proposed). Closes on merge.

Done: the page shows real phases (received, audio, each engine, comparing, deciding n of N, saving) as a step log in…

mathias pushed to feat/33-audio-upload-transcript at mathias/tapir 2026-10-02 07:06:07 +00:00
7029dd1d7f test(e2e): a finished job's phases are all closed and it was reporting while it ran (ADR-035)
c977618979 docs(claude): the progress tracker, the two timestamps, and the log's privacy rule (ADR-035)
0763e6238b docs(data-model): progress, progress_at, alive_at, and every judged spot stored (ADR-035)
6722433eb0 test(acceptance): map the progress, log and judged-spot scenarios to their covering tests
ac75971030 docs(use-cases): scenarios for progress, the log and the judged spots (ADR-035) -- the coverage gate is red until they are mapped
Compare 43 commits »
mathias opened issue mathias/tapir#44 2026-10-02 06:01:39 +00:00
Reconcile: store every adjudicated spot, and keep saved segments in step with the merged text