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)
mathiasandClaude Sonnet 5.52026-10-02 16:38:30 +02:00
4933504982
feat(web): App.UploadChatModels -- the models upload chat offers and accepts (review F1)
mathiasandClaude Sonnet 5.52026-10-02 16:38:30 +02:00
e121ef241d
fix(cmd): wire the local-only chat models into the upload routes (review F1)
mathiasandClaude Sonnet 5.52026-10-02 16:38:30 +02:00
5ae9212869
feat(cmd): uploadChatModels -- the chat switcher for a private recording is local models only (review F1)
mathiasandClaude Sonnet 5.52026-10-02 16:38:30 +02:00
a9a2a9270f
fix(config): a strict shape for a local model alias; the upload chat model must be local (adversarial review F1, F8)
mathiasandClaude Sonnet 5.52026-10-02 16:38:30 +02:00
7fe746173d
test(web): the upload chat offers and accepts local models only, and fails closed (red; adversarial review F1)
mathiasandClaude Sonnet 5.52026-10-02 16:37:49 +02:00
4b16e33715
test(cmd): the upload chat switcher never offers a cloud model (red; adversarial review F1)
mathiasandClaude Sonnet 5.52026-10-02 16:37:49 +02:00
896ce6a952
test(config): a strict shape for a local model alias, and the upload chat model must be local (red; adversarial review F1, F8)
mathiasandClaude Sonnet 5.52026-10-02 16:37:49 +02:00
7029dd1d7f
test(e2e): a finished job's phases are all closed and it was reporting while it ran (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:05:36 +02:00
c977618979
docs(claude): the progress tracker, the two timestamps, and the log's privacy rule (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:04:32 +02:00
0763e6238b
docs(data-model): progress, progress_at, alive_at, and every judged spot stored (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:04:32 +02:00
6722433eb0
test(acceptance): map the progress, log and judged-spot scenarios to their covering tests
mathiasandClaude Sonnet 5.52026-10-02 09:04:23 +02:00
ac75971030
docs(use-cases): scenarios for progress, the log and the judged spots (ADR-035) -- the coverage gate is red until they are mapped
mathiasandClaude Sonnet 5.52026-10-02 09:04:19 +02:00
02a065b826
test(web): opt-in renderer of every progress state for a screenshot review (TAPIR_SHOT_DIR)
mathiasandClaude Sonnet 5.52026-10-02 09:03:55 +02:00
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)
mathiasandClaude Sonnet 5.52026-10-02 09:03:55 +02:00
18d8050a2b
fix(web): the progress bar ends at the time column and the lost mark is error-coloured (screenshot review)
mathiasandClaude Sonnet 5.52026-10-02 09:03:55 +02:00
c06d285a3a
test(web): the lost job's running phase carries a warning mark (red; found in the screenshot review)
mathiasandClaude Sonnet 5.52026-10-02 09:03:32 +02:00
f74fbbc40e
test(cmd): the uploads store double has the progress methods the worker now needs
mathiasandClaude Sonnet 5.52026-10-02 09:01:37 +02:00
cd7595a048
feat(web): a spot shows the words before it, and an empty list shows no section (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:01:21 +02:00
8cb0b0a12d
test(web): the kept-spot assertion looks for what the page actually renders (red)
mathiasandClaude Sonnet 5.52026-10-02 09:00:56 +02:00
6dfd53ac71
test(web): the page lists only changed and uncertain spots, with the words before each, though every judged spot is stored (red)
mathiasandClaude Sonnet 5.52026-10-02 09:00:49 +02:00
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)
mathiasandClaude Sonnet 5.52026-10-02 09:00:23 +02:00
89c9dd6705
feat(web): tell running from quiet from lost; poll every two seconds (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:00:23 +02:00
d1dcb131f2
feat(web): progress styles in tapir's own tokens -- a mono step log, a CSS spinner that respects reduced motion (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 09:00:23 +02:00
d0f2dcf838
test(web): the page shows real phases, tells running from quiet from lost, and never invents a percentage (red)
mathiasandClaude Sonnet 5.52026-10-02 08:57:58 +02:00
a97598586c
test(reconcile): a span across a segment edge leaves neither segment holding a replaced word -- a mutation that skipped this survived
mathiasandClaude Sonnet 5.52026-10-02 08:56:53 +02:00
976aeb71c6
feat(reconcile): report the comparison and deciding phases, store every judged spot, merge the words into the segments (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:56:53 +02:00
9297f728c2
test(reconcile): every judged spot with its left context; segments rewritten per segment, or left alone when they do not line up (red)
mathiasandClaude Sonnet 5.52026-10-02 08:55:43 +02:00
520ab666f8
test(reconcile): the comparison and the deciding phase report real counts, and a shutdown is neither done nor failed (red)
mathiasandClaude Sonnet 5.52026-10-02 08:55:43 +02:00
0b7bf08c95
test(reconcile): kept spots are stored, segments carry the merged words, the cap is an option -- three old assertions changed on purpose (red)
mathiasandClaude Sonnet 5.52026-10-02 08:55:43 +02:00
aefc8103f7
feat(transcribe): the ensemble declares and reports its phases; a failed engine shows failed, a shutdown does not (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:54:31 +02:00
f064dec185
test(transcribe): the ensemble declares and reports its phases; a failed engine is shown failed, a shutdown is not (red)
mathiasandClaude Sonnet 5.52026-10-02 08:54:07 +02:00
5f279d7e71
feat(progress): keyed Fail for a soft failure, Note for the operator, FailRunning for the job's own (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:53:43 +02:00
a6b8a2b744
test(progress): a keyed soft failure that logs why, a note that costs no write, and FailRunning for the job's own failure (red)
mathiasandClaude Sonnet 5.52026-10-02 08:53:33 +02:00
9393c27cdb
test(uploads): the worker waits for its heartbeat to finish -- a mutation that skipped the wait survived until now
mathiasandClaude Sonnet 5.52026-10-02 08:53:10 +02:00
538ed93ccd
test(uploads): a slow heartbeat write, so one is in flight when the job ends
mathiasandClaude Sonnet 5.52026-10-02 08:53:10 +02:00
27a88a0a1f
feat(uploads): the worker reports real phases, beats on its own, and logs each one (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:53:10 +02:00
eb4d4b67e6
test(uploads): the worker reports real phases, beats on its own, and logs them in order without the transcript (red)
mathiasandClaude Sonnet 5.52026-10-02 08:52:20 +02:00
3f66c35497
test(uploads): the worker's store double records progress saves and heartbeats
mathiasandClaude Sonnet 5.52026-10-02 08:52:20 +02:00
f8526d4549
feat(store): SaveProgress and Heartbeat; Get returns the phases and both timestamps (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:51:39 +02:00
256e5b1a66
test(store): progress and heartbeat on an upload row -- round trip, alive is not progress, another user's write changes nothing (red)
mathiasandClaude Sonnet 5.52026-10-02 08:51:04 +02:00
8ec43ad393
test(progress): read the log buffer safely while the heartbeat writes to it
mathiasandClaude Sonnet 5.52026-10-02 08:50:39 +02:00
4bfe578a05
feat(progress): Tracker -- one writer for the page and the log, throttled counts, a heartbeat of its own (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:50:39 +02:00
c9ebe526cc
feat(domain): progress steps and the two timestamps that tell alive from progressing (ADR-035)
mathiasandClaude Sonnet 5.52026-10-02 08:50:39 +02:00
7bf5f6b8b7
test(progress): a tracker that shows the plan, times each step, throttles counts and heartbeats on its own (red)
mathiasandClaude Sonnet 5.52026-10-02 08:49:44 +02:00
7e9f5d7ca5
docs(adr): ADR-035 -- progress as real phases, the same transitions in the log, every judged spot kept (#42#43#44)
mathiasandClaude Sonnet 5.52026-10-02 08:49:06 +02:00
1a89eb3868
docs(adr-034): record the first blind check; bar ambiguity and the unanswered second condition
mathiasandClaude Sonnet 5.52026-10-02 08:01:31 +02:00
2e9d76dad0
docs(research): first blind check of two-engine reconcile on a real recording (aggregates only)
mathiasandClaude Sonnet 5.52026-10-02 08:01:31 +02:00
e3aa661cf2
docs(research): Low Power Mode confirmed as the cause of slow gemma4-31b (22.3 vs 7.9 tok/s decode)
mathiasandClaude Sonnet 5.52026-10-02 07:13:10 +02:00
7ae888a468
docs(claude): two-engine reconciliation, and that task check does not gate lint (#41)
mathiasandClaude Sonnet 5.52026-10-01 23:27:47 +02:00
b9e0dfa1c9
docs(homelab): two-engine mode, its settings and why every model must be local
mathiasandClaude Sonnet 5.52026-10-01 23:27:47 +02:00
6fb7a52980
feat(web): say what reconciliation did, and never claim a second opinion that was not there
mathiasandClaude Sonnet 5.52026-10-01 23:23:39 +02:00
d6ba11d288
test(web): the page says what reconciliation did, plainly, and never claims more (red)
mathiasandClaude Sonnet 5.52026-10-01 23:23:00 +02:00
5bd41077af
test(store): the reconciliation survives the round trip, and its absence stays absent (red)
mathiasandClaude Sonnet 5.52026-10-01 23:21:36 +02:00
34bc8dbdee
feat(transcribe): Ensemble -- two local engines, a local reconciler, fail-soft at every step
mathiasandClaude Sonnet 5.52026-10-01 23:21:17 +02:00
8778376aa6
test(transcribe): a shutdown in the middle of either engine stops the job
mathiasandClaude Sonnet 5.52026-10-01 23:21:17 +02:00
ad39b6154c
test(transcribe): two engines, then a reconciler -- and every way it can fail softly (red)
mathiasandClaude Sonnet 5.52026-10-01 23:20:40 +02:00
f25acebe4c
feat(reconcile): merge two transcripts with a model choosing between disagreements
mathiasandClaude Sonnet 5.52026-10-01 23:20:12 +02:00
5e54c9beff
feat(reconcile): LLM adjudicator with the measured prompt, plus an order-checked wrapper
mathiasandClaude Sonnet 5.52026-10-01 23:18:11 +02:00
2bfe84ee64
test(reconcile): a number or word that merely starts with 1 or 2 is not an answer
mathiasandClaude Sonnet 5.52026-10-01 23:18:11 +02:00
481321a75c
test(reconcile): the adjudicator sends the measured prompt and maps answers back (red)
mathiasandClaude Sonnet 5.52026-10-01 23:17:42 +02:00
2600e6c45a
feat(reconcile): find disputes, resolve trivial ones without a model, give context
mathiasandClaude Sonnet 5.52026-10-01 23:17:21 +02:00
4e43327792
test(reconcile): finding disputes, resolving the trivial ones, and their context (red)
mathiasandClaude Sonnet 5.52026-10-01 23:16:55 +02:00
92a39da45c
feat(reconcile): minimal word-level diff (Myers) with a bounded edit distance
mathiasandClaude Sonnet 5.52026-10-01 23:16:31 +02:00