|
|
020fbb891e
|
feat: always-on Insights — correlation analysis over viewing habits
CI / Check / Test (push) Failing after 9m16s
Conservative, live insights (ADR-0010) derived from each user's diary:
rating lift by genre (first-time watches only), genre seasonality vs a
uniform 1/12 month baseline, medium weekend-lift, and watch-time rhythm.
- domain: WatchRow model, InsightsQuery port, pure insights_analyzer with
all honesty thresholds (sample minimums, strength cutoffs, suppressions
for import noise), unit-tested
- adapters: thin Sqlite/Postgres fetch twins, reusing WrapUp's genre fetch
- application: get_insights use case, InsightsGroup in Deps
- composition/server: wiring through Repositories/DatabaseOutput
- presentation: GET /api/v1/insights handler, typed serde-tagged DTOs,
openapi doc
- spa: /insights route (shadcn cards), insights feature hook, profile
entry link, en locale strings
- server test: end-to-end seed sqlite → HTTP → rating lift + rhythm
Also records ADR-0010, defines "Insight" in the glossary, and includes
pre-existing worktree comment-stripping cleanups.
|
2026-10-12 19:29:54 +02:00 |
|
|
|
aadad3cfb0
|
feat: Jellyfin/Plex auto-import via watch queue
CI / Check / Test (push) Failing after 6m5s
Webhook ingestion from media servers — movies land in a pending
watch queue, user rates and confirms to create diary entries.
- domain: WatchEvent, WebhookToken models, MediaServerParser port
- adapters: jellyfin + plex parser crates, SQLite + Postgres repos
- application: ingest/confirm/dismiss/cleanup use cases, token mgmt
- presentation: webhook endpoints (bearer + query param auth),
watch queue + integrations settings HTML pages, OpenAPI docs
- worker: WatchEventCleanupJob (daily, 30d retention)
Movie resolution deferred to confirm — single canonical path
through log_review for enrichment, poster fetch, federation.
|
2026-06-02 17:34:16 +02:00 |
|