mathias and Claude Sonnet 5.5
be20adc76b
chore(fixtures): an obviously invented context phrase (second review F10 residual)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:22:41 +02:00
mathias and Claude Sonnet 5.5
b59b1a22dd
test(web): joiners and variation selectors survive the title cleaning
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:22:41 +02:00
mathias and Claude Sonnet 5.5
22c0317c71
fix(web): a body cut off mid-file is a 400; bidirectional controls are stripped from a title (second review)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:22:41 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:20:38 +02:00
mathias and Claude Sonnet 5.5
dbe37e5756
feat(web): style for a step note
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:20:02 +02:00
mathias and Claude Sonnet 5.5
0962b6f639
chore(web): regenerate uploads_templ.go
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:20:02 +02:00
mathias and Claude Sonnet 5.5
9314454ab1
feat(web): show a step's note under it, escaped (second review finding 1)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:20:02 +02:00
mathias and Claude Sonnet 5.5
9c8ac0f9fb
fix(web): no message for the removed incomplete kind (second review finding 1)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:20:02 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:19:32 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 17:19:32 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:49:54 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:49:54 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:48:58 +02:00
mathias and Claude Sonnet 5.5
b8a4778513
test(web): a malformed multipart header is a 400 whose text is not logged; the file-name case no longer demands a 303
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:47:49 +02:00
mathias and Claude Sonnet 5.5
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)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:47:49 +02:00
mathias and Claude Sonnet 5.5
019ee636c8
test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:46:13 +02:00
mathias and Claude Sonnet 5.5
0da24d42f4
test: a bounded queue answered as 'busy', and bad input answered with a 4xx (red; adversarial review F6, F7)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:46:13 +02:00
mathias and Claude Sonnet 5.5
dc100d1cd4
test(web): the job carries the claimed duration
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:45:25 +02:00
mathias and Claude Sonnet 5.5
07050cf9b6
feat(web): say in words why a recording was refused for its real length (review F2)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:45:25 +02:00
mathias and Claude Sonnet 5.5
5640d95f40
test: the duration limit is checked against what is converted, not what the header claims (red; adversarial review F2)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:43:46 +02:00
mathias and Claude Sonnet 5.5
fb79dbb045
fix(uploads.go): an error reaches the log, the row and the page as a kind, never its text (adversarial review F3, F5)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:40:55 +02:00
mathias and Claude Sonnet 5.5
31f5a74d2a
test(web): the upload routes' error paths log a kind, not the text (red; review F5)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:40:10 +02:00
mathias and Claude Sonnet 5.5
99ac5580e0
test(web): the upload chat helper says which models are offered
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:38:30 +02:00
mathias and Claude Sonnet 5.5
ef815edded
fix(web): upload chat offers and accepts local models only and fails closed; a forged cloud model is replaced before anything is sent (review F1)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:38:30 +02:00
mathias and Claude Sonnet 5.5
4933504982
feat(web): App.UploadChatModels -- the models upload chat offers and accepts (review F1)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:38:30 +02:00
mathias and Claude Sonnet 5.5
7fe746173d
test(web): the upload chat offers and accepts local models only, and fails closed (red; adversarial review F1)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 16:37:49 +02:00
mathias and Claude Sonnet 5.5
02a065b826
test(web): opt-in renderer of every progress state for a screenshot review (TAPIR_SHOT_DIR)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:03:55 +02:00
mathias and Claude Sonnet 5.5
105777f1aa
fix(web): the spinner sits in the same mark column as the other glyphs; a lost job's running phase gets a warning mark (screenshot review)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:03:55 +02:00
mathias and Claude Sonnet 5.5
18d8050a2b
fix(web): the progress bar ends at the time column and the lost mark is error-coloured (screenshot review)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:03:55 +02:00
mathias and Claude Sonnet 5.5
c06d285a3a
test(web): the lost job's running phase carries a warning mark (red; found in the screenshot review)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:03:32 +02:00
mathias and Claude Sonnet 5.5
cd7595a048
feat(web): a spot shows the words before it, and an empty list shows no section (ADR-035)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:01:21 +02:00
mathias and Claude Sonnet 5.5
24d1a99ed0
feat(web): list only the spots to check, in order and capped (ADR-035)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:01:21 +02:00
mathias and Claude Sonnet 5.5
8cb0b0a12d
test(web): the kept-spot assertion looks for what the page actually renders (red)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:56 +02:00
mathias and Claude Sonnet 5.5
6dfd53ac71
test(web): the page lists only changed and uncertain spots, with the words before each, though every judged spot is stored (red)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:49 +02:00
mathias and Claude Sonnet 5.5
d62331b5f9
test(web): the quiet note is capitalised as the page writes it
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:23 +02:00
mathias and Claude Sonnet 5.5
a7668b670e
feat(web): the upload page shows the job's phases, a bar only where the count is real, and says when the service is lost (ADR-035)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:23 +02:00
mathias and Claude Sonnet 5.5
89c9dd6705
feat(web): tell running from quiet from lost; poll every two seconds (ADR-035)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:23 +02:00
mathias and Claude Sonnet 5.5
d1dcb131f2
feat(web): progress styles in tapir's own tokens -- a mono step log, a CSS spinner that respects reduced motion (ADR-035)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 09:00:23 +02:00
mathias and Claude Sonnet 5.5
d0f2dcf838
test(web): the page shows real phases, tells running from quiet from lost, and never invents a percentage (red)
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-02 08:57:58 +02:00
mathias and Claude Sonnet 5.5
6fb7a52980
feat(web): say what reconciliation did, and never claim a second opinion that was not there
...
CI / Lint / Test / Vet (pull_request) Successful in 21s
CI / Build & Import (pull_request) Skipped
CI / Deploy via GitOps (pull_request) Skipped
Reconciled: the two engines, the deciding model and the exact counts; the contested
spots (changed or uncertain) listed with a minute mark and both readings, the first
50 shown and the rest counted from the exact totals. Single-engine and
model-unavailable results say why. A nil reconciliation renders nothing. Readings are
escaped. Mutation-checked: the cap, the minute rounding and the 'more' count.
uploads.go and the templ pair are one commit: the helpers and the template need each other.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 23:23:39 +02:00
mathias and Claude Sonnet 5.5
d6ba11d288
test(web): the page says what reconciliation did, plainly, and never claims more (red)
...
Reconciled: who the two engines and the deciding model were, and the counts
(differences, settled automatically, decided by the model, uncertain). The contested
spots are listed with a minute mark, both readings and which was used, uncertain ones
marked, readings escaped, and a very long list shortened with its true count. A
single-engine transcript makes no claim of a second opinion; one-engine and
model-unavailable cases say why.
Red: the page renders none of this yet.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 23:23:00 +02:00
mathias and Claude Sonnet 5.5
206fc2f5ca
feat(web): log upload rejections by reason only
...
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 19:28:10 +02:00
mathias and Claude Sonnet 5.5
5368d5f8c2
test(web): a rejected upload is logged with its reason, never the filename or title (red)
...
Rejections are synchronous and leave no row, so an operator could not tell 'the
user never retried' from 'the page refused it' (it happened during the first
real-recording trial). The reason is operational; the filename and title are
the user's private content.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 19:28:06 +02:00
mathias and Claude Sonnet 5.5
cca0a7461b
feat(web): tell the user when a video track was ignored, in every state
...
A Teams meeting with the camera off is still a video file. It is accepted, only
its audio is transcribed, and the page says so in queued, transcribing, done and
failed -- not just at the end.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 18:43:14 +02:00
mathias and Claude Sonnet 5.5
5175496809
test(web): match the notice's real casing
...
My assertion expected a lowercase 'only'; the sentence begins 'Only'. The user
facing wording is unchanged.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 18:43:14 +02:00
mathias and Claude Sonnet 5.5
7aec2538be
test(web): a video file is accepted and the user is told the video was ignored (red)
...
Video with no audio is rejected for having none. A file with a video track is
accepted and marked had_video; every state of its page (queued, transcribing,
done, failed) says only its audio was used and the video was discarded, and a
plain audio file shows no such notice.
Red: the had_video column does not exist.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 18:42:33 +02:00
mathias and Claude Sonnet 5.5
6c39ab86cf
feat(web): chat over an upload opens with App.UploadChatModel
...
The Chatter's own default is the summarizer's (koala/phi4-mini, 8,192-token
context), which answers HTTP 400 on an hour of speech. Empty keeps the old
behaviour.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 17:07:33 +02:00
mathias and Claude Sonnet 5.5
4b6ac2a213
test(web): chat over an upload opens with the upload chat model (red)
...
Red: App.UploadChatModel is undefined.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 17:07:20 +02:00
mathias and Claude Sonnet 5.5
4fdb212cef
feat(web): chat with an uploaded transcript, reusing the ADR-027 path (ADR-033)
...
GET/POST /uploads/{id}/chat, mounted only when both an Uploader and a Chatter
are wired. The row comes from the user-scoped private store, so another user's
upload is a 404 before any model is involved. The owner's transcript goes to
the SAME Chatter with App.UploadChatMaxChars instead of the 18,000-char caption
default. The chat panel is shared, not forked: chatView gains PostURL/Subject
(empty = a YouTube video, so existing callers are unchanged). The done card
links to chat only when chat is wired.
Mutation-checked: dropping the upload budget, ignoring the done-status guard,
or scoping the lookup to the wrong user each turn tests red.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 16:58:25 +02:00
mathias and Claude Sonnet 5.5
a39f58b730
test(web): match the HTML-escaped tail of the inline chat error
...
templ escapes the apostrophe in "couldn't", so the assertion could never match
the rendered page. A test defect, not a loosening: the failure must still be
shown inline with the conversation kept.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com >
2026-10-01 16:58:25 +02:00