This website requires JavaScript.
206fc2f5ca
feat(web): log upload rejections by reason only
mathias and Claude Sonnet 5.5
2026-10-01 19:28:10 +02:00
5368d5f8c2
test(web): a rejected upload is logged with its reason, never the filename or title (red)
mathias and Claude Sonnet 5.5
2026-10-01 19:28:06 +02:00
365dff5c85
docs(data-model): had_video
mathias and Claude Sonnet 5.5
2026-10-01 18:43:55 +02:00
adaaa9918f
test(acceptance): map the video-track scenarios to their covering tests
mathias and Claude Sonnet 5.5
2026-10-01 18:43:55 +02:00
364a28eecd
docs(use-cases): a video track is accepted and the user is told; no-audio is rejected
mathias and Claude Sonnet 5.5
2026-10-01 18:43:55 +02:00
1fa7ca3a8c
test(e2e): a video file (camera-off Teams meeting) is transcribed and the user is told
mathias and Claude Sonnet 5.5
2026-10-01 18:43:48 +02:00
cca0a7461b
feat(web): tell the user when a video track was ignored, in every state
mathias and Claude Sonnet 5.5
2026-10-01 18:43:14 +02:00
5175496809
test(web): match the notice's real casing
mathias and Claude Sonnet 5.5
2026-10-01 18:43:14 +02:00
f102199097
feat(uploads): Intake passes whether the file had a video track to the store
mathias and Claude Sonnet 5.5
2026-10-01 18:43:00 +02:00
01eab1ab6f
feat(uploads): a video track is no longer a reason to reject (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 18:43:00 +02:00
85cf89c86c
feat(store): CreateUpload records had_video; Get/List return it
mathias and Claude Sonnet 5.5
2026-10-01 18:42:50 +02:00
603d02e504
feat(domain): UploadedTranscript.HadVideo
mathias and Claude Sonnet 5.5
2026-10-01 18:42:40 +02:00
3c4d2880f3
feat(store): migration 018 -- uploaded_transcripts.had_video
mathias and Claude Sonnet 5.5
2026-10-01 18:42:33 +02:00
1157854441
test(cmd): fake store follows the CreateUpload signature (red)
mathias and Claude Sonnet 5.5
2026-10-01 18:42:33 +02:00
7aec2538be
test(web): a video file is accepted and the user is told the video was ignored (red)
mathias and Claude Sonnet 5.5
2026-10-01 18:42:33 +02:00
eb55c7d9d1
test(store): had_video is recorded on creation and survives done/failed (red)
mathias and Claude Sonnet 5.5
2026-10-01 18:42:13 +02:00
ab62cdaf1c
test(uploads): Accept records whether the file had a video track (red)
mathias and Claude Sonnet 5.5
2026-10-01 18:42:13 +02:00
6cbb7b2df0
test(uploads): a recording with a video track is accepted (red)
mathias and Claude Sonnet 5.5
2026-10-01 18:42:04 +02:00
1e192e53ef
docs(adr): ADR-033 accepts files with a video track, uses the audio, says so
mathias and Claude Sonnet 5.5
2026-10-01 18:41:49 +02:00
6ebb4e49e9
test(audio): opt-in live ffprobe check on hostile playlists and real audio
mathias and Claude Sonnet 5.5
2026-10-01 17:14:29 +02:00
291a360a83
feat(audio): restrict ffmpeg/ffprobe input to local files and audio demuxers
mathias and Claude Sonnet 5.5
2026-10-01 17:14:29 +02:00
4a0c51d877
test(audio): attacker-supplied input must not steer ffmpeg to other files or URLs (red)
mathias and Claude Sonnet 5.5
2026-10-01 17:13:54 +02:00
1c726a810e
docs(homelab): upload chat budget is 90000 and the chat model is gemma4-26b
mathias and Claude Sonnet 5.5
2026-10-01 17:08:33 +02:00
77fe6954e5
docs(adr): ADR-033 decision 8 -- chat budget and model from measurement
mathias and Claude Sonnet 5.5
2026-10-01 17:08:28 +02:00
4d3e2a471a
docs(research): chat over a long transcript -- what the offered models really hold
mathias and Claude Sonnet 5.5
2026-10-01 17:08:13 +02:00
548bfaee85
test(e2e): use the same wireUploads as serve
mathias and Claude Sonnet 5.5
2026-10-01 17:07:41 +02:00
ad2e3e0e8e
fix(cmd): serve now actually sets the upload chat budget and model
mathias and Claude Sonnet 5.5
2026-10-01 17:07:41 +02:00
e6738bcd3e
feat(cmd): wireUploads -- limits, chat budget and chat model into the web App
mathias and Claude Sonnet 5.5
2026-10-01 17:07:40 +02:00
3bb4e30f4c
test(cmd): wireUploads sets the budget and model, and never a typed-nil Intake (red)
mathias and Claude Sonnet 5.5
2026-10-01 17:07:33 +02:00
6c39ab86cf
feat(web): chat over an upload opens with App.UploadChatModel
mathias and Claude Sonnet 5.5
2026-10-01 17:07:33 +02:00
4b6ac2a213
test(web): chat over an upload opens with the upload chat model (red)
mathias and Claude Sonnet 5.5
2026-10-01 17:07:20 +02:00
af66419a44
feat(config): measured chat budget (90,000) and upload chat model (gemma4-26b)
mathias and Claude Sonnet 5.5
2026-10-01 17:07:20 +02:00
4b09dc8f36
test(config): chat defaults for uploads come from measurement, not a guess (red)
mathias and Claude Sonnet 5.5
2026-10-01 17:07:09 +02:00
8f16ab671a
docs(claude): audio upload supersedes the STT deferral for user-supplied audio only
mathias and Claude Sonnet 5.5
2026-10-01 17:02:11 +02:00
39aeda7c69
docs(homelab): speech-to-text endpoints, the ingress 413, and the upload knobs
mathias and Claude Sonnet 5.5
2026-10-01 17:02:05 +02:00
0fc25a24ed
docs(data-model): uploaded_transcripts, and fix the stale claim that transcripts is RLS'd
mathias and Claude Sonnet 5.5
2026-10-01 17:02:05 +02:00
07375f75de
test(acceptance): map audio_upload.feature scenarios to their covering tests
mathias and Claude Sonnet 5.5
2026-10-01 17:01:38 +02:00
f9d6df9f84
docs(use-cases): audio_upload.feature -- scenarios for #33 (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 17:01:20 +02:00
3464cdf876
test(e2e): opt-in live upload -> transcript -> grounded chat check
mathias and Claude Sonnet 5.5
2026-10-01 17:01:06 +02:00
4fdb212cef
feat(web): chat with an uploaded transcript, reusing the ADR-027 path (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:58:25 +02:00
a39f58b730
test(web): match the HTML-escaped tail of the inline chat error
mathias and Claude Sonnet 5.5
2026-10-01 16:58:25 +02:00
10ca45fc0a
test(web): chat over an uploaded transcript reuses the ADR-027 path (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:57:47 +02:00
c72d366935
feat(chat): per-request transcript budget so a long recording is not cut to its head (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:57:01 +02:00
ec29c5e761
style(chat): gofumpt the new test
mathias and Claude Sonnet 5.5
2026-10-01 16:57:01 +02:00
867afefb08
test(chat): a request may carry its own transcript budget (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:56:51 +02:00
1c5d85f5c6
feat(cmd): serve mounts audio upload when enabled (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:56:22 +02:00
9b3175db09
feat(cmd): buildUploads -- spool, sweep, fail interrupted rows, wire the chain (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:56:21 +02:00
eb9357a5de
test(cmd): start-up removes spooled audio left by a crash (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:56:11 +02:00
3e802adade
test(cmd): buildUploads wiring -- off by default, sweep first, private spool (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:55:51 +02:00
b8798dbd5d
feat(config): upload and transcription settings (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:55:32 +02:00
fb521f2b89
test(config): upload and transcription settings (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:55:11 +02:00
a8dadb8ca4
feat(uploads): in-process transcription worker, one job at a time (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:54:52 +02:00
3cfc95640e
test(uploads): a queued job at shutdown must never be started; timeout test fails fast
mathias and Claude Sonnet 5.5
2026-10-01 16:54:52 +02:00
52417e6b47
test(uploads): in-process transcription worker (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:47:22 +02:00
4352446f36
feat(audio): ffmpeg adapter -- always transcode to 16 kHz mono PCM (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:46:34 +02:00
3bc33fc34c
test(audio): ffmpeg transcode to 16 kHz mono PCM, always (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:46:14 +02:00
2227cfff7e
test(transcribe): opt-in live check against the real gateway
mathias and Claude Sonnet 5.5
2026-10-01 16:46:14 +02:00
cae423750c
feat(transcribe): gateway client with an iguana->berget fallback chain (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:44:34 +02:00
bb285d8757
test(transcribe): gateway client and iguana->berget chain (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:43:51 +02:00
e12a5e7e89
feat(web): upload routes -- form, multipart intake, honest status (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:42:58 +02:00
1bc98813fc
test(web): read the response body once; match the message's real case
mathias and Claude Sonnet 5.5
2026-10-01 16:42:40 +02:00
e1ed6ea6f4
test(web): upload routes -- form, multipart POST, rejections, owner-only, honest status (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:41:42 +02:00
f84389028d
feat(audio): ffprobe adapter implementing uploads.Prober (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:40:51 +02:00
0ab067c510
test(audio): ffprobe adapter -- cover art is not video, exit code vs missing binary (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:40:29 +02:00
1910d3dfb5
feat(uploads): Intake -- spool, probe, validate, queue; clean up on every failure (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:40:13 +02:00
b98e9df462
test(uploads): Accept -- size cap, probe verdicts, cleanup on every failure path (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:40:03 +02:00
e3e1f17c40
feat(uploads): validation policy for probed audio uploads (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:39:51 +02:00
f42b8e23fc
test(uploads): validation policy -- video, no-audio, too-long, unreadable (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:39:20 +02:00
836a501576
feat(store): Store API for private uploaded transcripts (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:38:25 +02:00
c29c0a7127
feat(domain): types for private uploaded transcripts (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:37:39 +02:00
4b557209c8
test(store): Store API for uploaded transcripts (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:37:30 +02:00
e36c4c1e0c
feat(store): migration 017 -- private RLS-scoped uploaded_transcripts (ADR-033)
mathias and Claude Sonnet 5.5
2026-10-01 16:36:50 +02:00
066ae6966a
test(store): isolation tests for the private uploaded_transcripts table (red)
mathias and Claude Sonnet 5.5
2026-10-01 16:36:22 +02:00
38b3f1cf33
docs(adr): ADR-033 upload audio -> private Swedish transcript -> chat (#33 )
mathias and Claude Sonnet 5.5
2026-10-01 16:35:04 +02:00
feb108def3
docs(research): measure the audio length ceiling before designing chunking (#33 )
mathias and Claude Sonnet 5.5
2026-10-01 16:33:34 +02:00
4bafd5f082
fix(web): views.templ imports the pre-rename gitea.d-ma.be host
mathias
2026-09-05 14:44:39 +02:00
e3e78e042b
style: apply gofumpt
mathias
2026-09-05 12:39:31 +02:00
6f1e0be09b
ci(deploy): refuse to patch a manifest with an empty IMAGE_TAG (infra#311)
mathias and Claude Opus 5
2026-08-25 17:25:24 +02:00
d45348ad2e
ci: call the shared build-image script instead of an inline copy (infra#309)
mathias and Claude Opus 5
2026-08-25 11:29:55 +02:00
1c2ad2990f
ci: build via buildctl instead of rootless buildah (infra#241)
mathias and Claude Opus 5
2026-08-17 12:07:51 +02:00
489b4bb2a1
chore(spike): recover the /bygge toolchain from tmpfs (#28 )
mathias and Claude Opus 5
2026-08-13 11:36:24 +02:00
21e7d6c74b
fix(ci): smoke test hung 14min — buildah run doesn't die under plain timeout
mathias
2026-07-26 06:17:18 +00:00
8814ba6673
ci(smoke): use buildah run instead of sudo k3s ctr for smoke test
mathias
2026-07-26 05:57:37 +00:00
4b557a4325
ci(deploy): add Flux GitOps deploy job, mirroring cobalt-dingo's pattern
mathias
2026-07-25 21:21:02 +00:00
72cb25111f
test(store): address migrations by version, not step count (#8 )
v0.15.2
mathias and Claude Opus 4.8
2026-07-02 14:49:02 +02:00
38f222c931
chore: rename Go module path gitea.d-ma.be → git.d-ma.be
v0.15.1
mathias and Claude Sonnet 4.6
2026-07-02 14:37:33 +02:00
e042b6d26d
chore: add .mcp.json (brain + gitea) — wire tapir for the single-harness workflow
mathias
2026-07-02 07:00:53 +00:00
c85a32e770
Merge pull request 'LANGUAGE.md: fix LiteLLM gateway never-say (stale endpoints, not piguard)' (#21 ) from language-md-litellm-fix into main
mathias
2026-06-16 15:45:45 +00:00
b246c0e688
fix(language): LiteLLM gateway never-say — stale endpoints, not piguard
mathias
2026-06-16 15:35:31 +00:00
c7896cb3cc
Merge pull request 'LANGUAGE.md pilot: hand-written vocabulary + caveman rubric (Phase 1)' (#19 ) from language-md-pilot into main
mathias
2026-06-16 15:22:14 +00:00
b79fb892c8
docs(claude): point to LANGUAGE.md + caveman rubric
mathias and Claude Opus 4.8
2026-06-12 22:54:57 +02:00
c315e3e003
feat(language): add hand-written vocabulary + caveman rubric pilot
mathias
2026-06-12 20:52:23 +00:00
64e3368f5f
feat(web): charm-reader visual refresh with light/dark theme toggle (ADR-032, #17 )
v0.30.0
mathias and Claude Opus 4.8
2026-06-12 12:54:06 +02:00
b01f8d5783
docs(bdd): visual_theme.feature scenarios (@pending until TDD, #17 )
mathias
2026-06-12 12:29:31 +02:00
8ca767c144
docs(adr): ADR-032 visual refresh — light(B)+dark(C) charm-reader themes + sketches (issue #17 )
mathias
2026-06-12 11:54:54 +02:00
f98b640531
feat(web): inline-expand summary + Q&A in the list (ADR-031, #16 )
v0.29.0
mathias and Claude Opus 4.8
2026-06-12 10:47:47 +02:00
607a8cbe8d
docs(bdd): inline_expand.feature scenarios (@pending until TDD, #16 )
mathias
2026-06-12 10:38:40 +02:00
54d60e53b9
docs(adr): ADR-031 inline-expand summary + Q&A in the list (issue #16 )
mathias
2026-06-12 10:37:55 +02:00
9298e0c686
docs(homelab): TAPIR_METRICS_ADDR + key metric series (ADR-030, #15 )
mathias
2026-06-12 08:50:36 +02:00
cd461b95f8
feat(observability): instrument AI + HTTP paths, serve /metrics on a side port (ADR-030, #15 )
v0.28.0
mathias and Claude Opus 4.8
2026-06-12 08:49:51 +02:00