Jonathan
ec1fc568ba
fix: scope slskd download polling to enqueued files and raise on timeout
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 22:52:03 +02:00
Jonathan
7b4b7ef1aa
feat: add real slskd Soulseek client and opt-in live test
2026-07-10 22:45:36 +02:00
Jonathan
b5931a7b66
feat: add SoulseekAdapter with injectable client seam
2026-07-10 22:40:53 +02:00
Jonathan
9804f3bb90
docs: add Soulseek adapter plan (slice 1, plan 3d)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 22:39:34 +02:00
Jonathan
7510e7718b
test: verify real QobuzAdapter flows through the pipeline and outranks YouTube
2026-07-10 22:16:03 +02:00
Jonathan
71143dc15d
feat: config-aware registry gating Qobuz on credentials; wire config into worker
2026-07-10 22:13:11 +02:00
Jonathan
085193aa82
fix: run Qobuz login inside try/finally and reuse a single streamrip config
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 22:11:25 +02:00
Jonathan
707038da64
feat: add real streamrip Qobuz client and opt-in live test
2026-07-10 22:05:36 +02:00
Jonathan
0091c4f5e7
feat: add QobuzAdapter with injectable client seam
2026-07-10 21:59:57 +02:00
Jonathan
50931c0cf5
docs: add Qobuz adapter plan (slice 1, plan 3c)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 21:58:44 +02:00
Jonathan
f3d718d9c0
test: verify real YouTubeAdapter flows through the pipeline
2026-07-10 21:33:05 +02:00
Jonathan
4b2b2888ca
feat: wire real YouTube adapter into the registry
2026-07-10 21:29:26 +02:00
Jonathan
a93c248aaf
feat: add real yt-dlp client and opt-in live test; ffmpeg in worker image
2026-07-10 21:24:05 +02:00
Jonathan
5a3e64b057
feat: add YouTubeAdapter with injectable client seam
2026-07-10 21:19:27 +02:00
Jonathan
da1ed5caba
docs: add YouTube adapter plan (slice 1, plan 3b)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 21:18:09 +02:00
Jonathan
feaff42010
feat: add worker config reader with secret decryption
2026-07-10 20:07:49 +02:00
Jonathan
c90e055343
feat: add worker AES-256-GCM crypto matching the web envelope
2026-07-10 20:03:28 +02:00
Jonathan
69a8835c86
feat: add settings page for credentials
2026-07-10 19:58:46 +02:00
Jonathan
1b11fa37bd
feat: add config API with encrypted secret storage
2026-07-10 19:54:27 +02:00
Jonathan
91ea32c4b8
feat: add web AES-256-GCM secret crypto and LYRA_SECRET_KEY plumbing
2026-07-10 19:50:16 +02:00
Jonathan
45cf9e8527
feat: add Config schema
2026-07-10 19:46:17 +02:00
Jonathan
349f699bb6
docs: add configuration & secrets plan (slice 1, plan 3a)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 19:45:08 +02:00
Jonathan
d3bec2ee10
refactor: make adapter .tier the single source of truth for ranking
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 19:07:58 +02:00
Jonathan
fbd6a056a4
feat: wire adapter registry into worker loop
2026-07-10 18:59:28 +02:00
Jonathan
7c28eddd47
fix: persist all found candidates and guard duplicate adapter names
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 18:54:15 +02:00
Jonathan
71c7945da2
feat: replace fake pipeline with staged adapter-driven pipeline
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 18:45:01 +02:00
Jonathan
60f3cd0df9
feat: add Candidate and LibraryItem schema
...
Adds Candidate (per-job download candidates found by the pipeline)
and LibraryItem (per-request imported album, deduped on
artist+album) tables. LibraryItem.requestId is @unique since
Request.libraryItem is a one-to-one back-relation (required for
Prisma validation, matching the existing Job.requestId pattern).
2026-07-10 18:40:41 +02:00
Jonathan
991365e746
feat: add SourceAdapter contract and fake adapters
2026-07-10 18:35:52 +02:00
Jonathan
ffc4d1f483
feat: add candidate ranker with confidence gate
2026-07-10 18:31:09 +02:00
Jonathan
3888d2ab8a
feat: add confidence scoring
2026-07-10 18:26:52 +02:00
Jonathan
1c013dfdd1
feat: add domain types and quality ranking
2026-07-10 18:22:47 +02:00
Jonathan
b62b4145da
docs: add pipeline-core implementation plan (slice 1, plan 2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 18:19:06 +02:00
Jonathan
3459233fde
chore: map web to host port 8770 to avoid Quill on 3000
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 18:12:50 +02:00
Jonathan
7532e20d1e
fix: worker waits for schema before claiming; npm ci for reproducible builds
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 17:32:20 +02:00
Jonathan
52a0999f9b
chore: add restart policies and document prisma copy step
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 17:22:36 +02:00
Jonathan
3e44de093e
feat: add worker loop and production Dockerfiles
2026-07-10 17:16:24 +02:00
Jonathan
d441d0561f
feat: add fake acquisition pipeline
2026-07-10 17:04:41 +02:00
Jonathan
fc1229b885
test: clean worker test DB before each test to prevent flakiness
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 17:02:38 +02:00
Jonathan
49b69c592d
feat: add worker job-claim logic
2026-07-10 16:58:28 +02:00
Jonathan
8085ed719f
feat: add request form and live queue UI
2026-07-10 16:53:07 +02:00
Jonathan
fd9969ae17
test: cover 400 validation branches in request API
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:51:24 +02:00
Jonathan
15bb68bc49
feat: add request create/list API
2026-07-10 16:47:54 +02:00
Jonathan
ab4db641b0
feat: add Request and Job schema with migration
...
Adds the Prisma schema (Request/Job models, RequestStatus/JobState
enums), a Prisma client singleton at web/src/lib/db.ts, and the
init_request_job migration, applied and verified against Postgres.
Also publishes the db service's port (5432:5432) in docker-compose.yml
so host-run Prisma commands can reach localhost:5432 for local dev.
2026-07-10 16:43:22 +02:00
Jonathan
80e01b1c52
fix: bump next past known CVEs
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:39:57 +02:00
Jonathan
599cc76404
chore: scaffold web, worker, and compose stack
...
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-07-10 16:33:22 +02:00
Jonathan
d939f83ce3
chore: relax worker dep pins for local Python 3.14
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:28:34 +02:00
Jonathan
dcdb9752a2
Add walking-skeleton implementation plan (slice 1, plan 1)
...
Seven TDD tasks: monorepo + compose scaffold, Prisma Request/Job
schema, request API, live queue UI, worker claim logic, fake
pipeline, and worker loop + Dockerfiles with end-to-end verification.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:23:45 +02:00
Jonathan
3adefe929b
Add Lyra acquisition-engine design spec, README, gitignore
...
Initial design for slice 1 (acquisition engine): three-container
architecture (Next.js UI, Python worker, slskd), the six-stage
pipeline, source-adapter contract, data model, error handling, and
testing strategy.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-10 16:14:55 +02:00