Commit Graph

  • fe6c0fae3a test(acceptance): follow the renamed scenario mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 2a616c6ae1 docs(use-cases): a short recording is noted, not refused mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • bcec4f6e86 docs(homelab): engine timeout 20m mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • be20adc76b chore(fixtures): an obviously invented context phrase (second review F10 residual) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 1b97851a39 chore(fixtures): an obviously invented context phrase (second review F10 residual) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • b59b1a22dd test(web): joiners and variation selectors survive the title cleaning mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 22c0317c71 fix(web): a body cut off mid-file is a 400; bidirectional controls are stripped from a title (second review) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 9a2f24b3c9 fix(uploads): refuse a full queue before spooling, probing or creating a row (second review) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 3f5b9345a0 feat(uploads): HasRoom -- say before spooling whether a submit would be accepted (second review) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 16db156406 fix(config): the engine timeout defaults to 20 minutes so two wedged engines leave the job time for a fallback (second review) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 471425cd4c fix(cmd): the configured upload chat model is in the shared chat service's list, so it is no longer silently swapped (second review finding 2) mathiasandClaude Sonnet 5.5 2026-10-02 17:22:41 +02:00
  • 8f79132fcb test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • b1f9d5f4b7 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • 5bd2e3d3d0 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • b8a6e2f6f5 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • 335ad0cd85 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • 59bc373068 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • d505f64c99 test: second review -- the upload chat model outside the chain, room checked before spooling, a cut-off body is a 400, bidi controls in titles, the ensemble's deadline wiring, an honest test name (red) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:38 +02:00
  • dbe37e5756 feat(web): style for a step note mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 0962b6f639 chore(web): regenerate uploads_templ.go mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 9314454ab1 feat(web): show a step's note under it, escaped (second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 9c8ac0f9fb fix(web): no message for the removed incomplete kind (second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • f7284ccdc9 fix(uploads): a file much shorter than it claimed is transcribed and noted, not refused; the tolerances are named (second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 4943c80dbd feat(progress): Annotate -- a note on a step, saved at once (second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 8eca8f721b feat(domain): ProgressStep.Note; UploadErrIncomplete removed -- a short file is noted, not refused (second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:20:02 +02:00
  • 406c0232c1 test: a shortfall is noted on the audio step, not refused; the 80%, two-minute and 30-second tolerances are pinned (red; second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:19:32 +02:00
  • ac530de91a test: a shortfall is noted on the audio step, not refused; the 80%, two-minute and 30-second tolerances are pinned (red; second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:19:32 +02:00
  • a90107b73b test: a shortfall is noted on the audio step, not refused; the 80%, two-minute and 30-second tolerances are pinned (red; second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:19:32 +02:00
  • 0ef83f2ccb test: a shortfall is noted on the audio step, not refused; the 80%, two-minute and 30-second tolerances are pinned (red; second review finding 1) mathiasandClaude Sonnet 5.5 2026-10-02 17:19:32 +02:00
  • 71cd50aa88 fix(docker): install xz in the ffmpeg stage -- the golang image has none; found by building the image, which CI does not do on a pull request (second review) mathiasandClaude Sonnet 5.5 2026-10-02 17:19:06 +02:00
  • aa54089230 docs(claude): errors are logged and shown as kinds, and what carries transcript text must be local (ADR-035) mathiasandClaude Sonnet 5.5 2026-10-02 16:50:56 +02:00
  • 8749ffe6a9 docs(homelab): the engine timeout, a local chat model, ffmpeg in the image, and 31B with Low Power Mode off mathiasandClaude Sonnet 5.5 2026-10-02 16:50:56 +02:00
  • 67879f85eb test(acceptance): map the hardening scenarios, and follow the two tests renamed in the review mathiasandClaude Sonnet 5.5 2026-10-02 16:50:43 +02:00
  • 08b7654d06 docs(use-cases): scenarios for the review's hardening (ADR-035 decision 8) -- the coverage gate is red until mapped mathiasandClaude Sonnet 5.5 2026-10-02 16:50:35 +02:00
  • f03b0213d0 docs(adr): record the owner's decisions on #34, #35 and ADR-034, and the adversarial review's hardening (ADR-035 decision 8) mathiasandClaude Sonnet 5.5 2026-10-02 16:50:22 +02:00
  • cb22832413 feat(docker): static ffmpeg and ffprobe in the distroless image, pinned by version and sha256 (#34 option A) mathiasandClaude Sonnet 5.5 2026-10-02 16:50:02 +02:00
  • 5d4324c2a2 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • 6596e83cd5 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • bc90e3aec7 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • 1a57489d04 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • ede6c0e5ea chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • 5928925589 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • e5bba3cd23 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • 2df8a7eb20 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • 6e7c772b31 chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • a2027c9f9b chore(fixtures): invented text in place of words that may come from the private recording; the research note no longer names the private file (adversarial review F10) mathiasandClaude Sonnet 5.5 2026-10-02 16:49:54 +02:00
  • e38ea3175d test: assertions the adversarial review found missing -- log lines, immediate saves, snapshot isolation, store and temp-file failures, bounded snippet, identical list (review F9) mathiasandClaude Sonnet 5.5 2026-10-02 16:48:58 +02:00
  • cdb709b9e2 test: assertions the adversarial review found missing -- log lines, immediate saves, snapshot isolation, store and temp-file failures, bounded snippet, identical list (review F9) mathiasandClaude Sonnet 5.5 2026-10-02 16:48:58 +02:00
  • 0d8bf0f94c test: assertions the adversarial review found missing -- log lines, immediate saves, snapshot isolation, store and temp-file failures, bounded snippet, identical list (review F9) mathiasandClaude Sonnet 5.5 2026-10-02 16:48:58 +02:00
  • 5b3e550d9b test: assertions the adversarial review found missing -- log lines, immediate saves, snapshot isolation, store and temp-file failures, bounded snippet, identical list (review F9) mathiasandClaude Sonnet 5.5 2026-10-02 16:48:58 +02:00
  • cb0ed8642a test: assertions the adversarial review found missing -- log lines, immediate saves, snapshot isolation, store and temp-file failures, bounded snippet, identical list (review F9) mathiasandClaude Sonnet 5.5 2026-10-02 16:48:58 +02:00
  • b8a4778513 test(web): a malformed multipart header is a 400 whose text is not logged; the file-name case no longer demands a 303 mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • 9b82c06d92 fix(web): 429 for a busy queue; a non-UUID id and a malformed or odd-byte title are 4xx or cleaned, never 500 (review F6, F7) mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • 93b4dbec1e feat(uploads): a full queue is a busy rejection, the row failed honestly (review F6) mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • f9ad85cac4 feat(uploads): a bounded queue, in total and per user (review F6) mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • a1d6754ae9 feat(uploads): ReasonBusy, a rejection that is the user's to retry (review F6) mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • e4584fb2ac feat(domain): UploadErrBusy -- the queue was full (review F6) mathiasandClaude Sonnet 5.5 2026-10-02 16:47:49 +02:00
  • 019ee636c8 test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7) mathiasandClaude Sonnet 5.5 2026-10-02 16:46:13 +02:00
  • 0da24d42f4 test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7) mathiasandClaude Sonnet 5.5 2026-10-02 16:46:13 +02:00
  • 2891ffabae test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7) mathiasandClaude Sonnet 5.5 2026-10-02 16:46:13 +02:00
  • aa0322095b test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7) mathiasandClaude Sonnet 5.5 2026-10-02 16:46:13 +02:00
  • a7e2cc43c0 test(cmd): the built worker refuses audio longer than the configured maximum (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • fdcdee7413 test(cmd): the uploads store double records the kind a job failed with mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • dc100d1cd4 test(web): the job carries the claimed duration mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 6b83d72655 fix(cmd): the converter is capped and the worker measures, at the configured maximum (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 07050cf9b6 feat(web): say in words why a recording was refused for its real length (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 16cd246241 feat(uploads): the worker measures the converted audio against the limit and the claim (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 132f46b047 feat(uploads): the job carries the duration the file claimed (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 12576aa129 feat(audio): MaxSeconds caps the converted length, so a header that lies cannot become hours of WAV (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • ba39864b2b feat(domain): UploadErrTooLong and UploadErrIncomplete -- the two ways a file's claimed length can be wrong (review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:45:25 +02:00
  • 741eccb575 test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:43:46 +02:00
  • 5640d95f40 test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:43:46 +02:00
  • 8f62d053ee test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:43:46 +02:00
  • 52351c2cc1 test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:43:46 +02:00
  • 29b3b725d1 test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2) mathiasandClaude Sonnet 5.5 2026-10-02 16:43:46 +02:00
  • 7a468fdc09 fix(cmd): every local engine call carries its own deadline (review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:42:46 +02:00
  • c9b7df9f95 feat(config): TAPIR_TRANSCRIBE_ENGINE_TIMEOUT, default 25 minutes (review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:42:46 +02:00
  • c8ec468e47 feat(transcribe): WithTimeout -- each engine call gets its own deadline so a wedged engine fails while the job lives (review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:42:46 +02:00
  • 81a60d5fd4 test: a per-engine deadline so a wedged primary reaches the fallback (red; adversarial review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:41:38 +02:00
  • c8c7356f19 test: a per-engine deadline so a wedged primary reaches the fallback (red; adversarial review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:41:38 +02:00
  • 8d1b7d887f test: a per-engine deadline so a wedged primary reaches the fallback (red; adversarial review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:41:38 +02:00
  • 21b337702a test: a per-engine deadline so a wedged primary reaches the fallback (red; adversarial review F4) mathiasandClaude Sonnet 5.5 2026-10-02 16:41:38 +02:00
  • d16c2998d0 test(reconcile): the stored reason is a kind -- the old assertion encoded the leak the review found mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • fb79dbb045 fix(uploads.go): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • a2587eae9b fix(worker.go): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • 0b35278cdf fix(transcribe): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • 16a8833f79 fix(reconcile.go): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • 03a122c9f5 fix(tracker.go): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:55 +02:00
  • 31f5a74d2a test(web): the upload routes' error paths log a kind, not the text (red; review F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:10 +02:00
  • 166ff849c0 test(uploads): a failure logs a kind, never the error text or the spool path (red; review F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:10 +02:00
  • e9863c2e12 test(progress): a keyed failure logs its kind, not the error's text (red; review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:10 +02:00
  • 8f3300b377 test(transcribe): a failed engine's reason is a kind, not its error text (red; review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:10 +02:00
  • f6c3f2af23 test(reconcile): the skipped reason carries a kind, not the model's text (red; review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:40:10 +02:00
  • 2d1b08458b feat(transcribe): StatusError.HTTPStatus -- its code, never its snippet, becomes the kind (review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:38 +02:00
  • 2608ad2f09 feat(llm): HTTPError -- a status code to branch on, a bounded body in the text (review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:38 +02:00
  • 81f3d7ffc6 test(transcribe): a StatusError exposes its code as a kind, not its snippet (red; adversarial review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:25 +02:00
  • 8c82d67b12 test(llm): a non-200 is an HTTP status error whose kind carries no body, and the body is bounded (red; adversarial review F3) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:25 +02:00
  • d8eea66c4c feat(errkind): Of -- a kind from a fixed vocabulary, never the error's text (review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:10 +02:00
  • dc0c64ddeb test(errkind): an error reduced to a safe kind, never its text (red; adversarial review F3, F5) mathiasandClaude Sonnet 5.5 2026-10-02 16:39:04 +02:00
  • 99ac5580e0 test(web): the upload chat helper says which models are offered mathiasandClaude Sonnet 5.5 2026-10-02 16:38:30 +02:00