refactor(#363): TrackingTodoWriter -> TrackingCandidateWriter (Phase 2 von #360) #364

Merged
admin-mrrm merged 1 commit from refactor/363-tracking-candidate-writer into main 2026-05-20 21:45:35 +02:00
Owner

Summary

Phase 2 von Epic #360 (Day-Planner). Stellt die Tracking-Source vom Direct-Write auf das Candidate-Pattern aus ADR 0001 um — damit die letzte direct-write Source aufgeloest ist, bevor #178 (Mail->Todo) implementiert wird.

  • Neuer TrackingCandidateWriterService schreibt Candidates mit source='tracking', sourceRef='<trackingId>:<statusKey>', completionPolicy='manual'
  • Idempotent via ON CONFLICT DO NOTHING auf UNIQUE(owner_sub, source, source_ref)
  • Verschiedene Statuses fuer dasselbe Paket erzeugen verschiedene Candidates (OutForDelivery + Delivered = zwei Rows)
  • TrackingSyncService ruft den neuen Writer (mit trackingId)
  • Alter TrackingTodoWriterService + ensureTodoList-Logik geloescht; ListsModule aus TrackingModule entfernt

Verhaltens-Aenderung (User-sichtbar)

Die Pakete-Liste bekommt keine neuen Items mehr. Bestehende Items bleiben unangetastet (keine Migration). Phase 5 (Planner v0) + nachfolgende Tagesplan-UI liefern die User-sichtbare Darstellung der neuen Candidates. Bis dahin: Candidates sind nur per DB einsehbar.

Test plan

  • pnpm typecheck -> gruen
  • pnpm lint -> gruen
  • pnpm test (Unit, 366 Tests) -> gruen
  • pnpm test:integration (60 Tests) -> gruen
  • Smoke auf dev-neu: ein Status-Wechsel triggert genau einen Candidate in der DB

Closes #363

## Summary Phase 2 von Epic #360 (Day-Planner). Stellt die Tracking-Source vom Direct-Write auf das Candidate-Pattern aus ADR 0001 um — damit die letzte direct-write Source aufgeloest ist, bevor #178 (Mail->Todo) implementiert wird. - Neuer `TrackingCandidateWriterService` schreibt Candidates mit `source='tracking'`, `sourceRef='<trackingId>:<statusKey>'`, `completionPolicy='manual'` - Idempotent via `ON CONFLICT DO NOTHING` auf UNIQUE(owner_sub, source, source_ref) - Verschiedene Statuses fuer dasselbe Paket erzeugen verschiedene Candidates (OutForDelivery + Delivered = zwei Rows) - `TrackingSyncService` ruft den neuen Writer (mit trackingId) - Alter `TrackingTodoWriterService` + `ensureTodoList`-Logik geloescht; `ListsModule` aus `TrackingModule` entfernt ## Verhaltens-Aenderung (User-sichtbar) Die `Pakete`-Liste bekommt **keine neuen Items mehr**. Bestehende Items bleiben unangetastet (keine Migration). Phase 5 (Planner v0) + nachfolgende Tagesplan-UI liefern die User-sichtbare Darstellung der neuen Candidates. Bis dahin: Candidates sind nur per DB einsehbar. ## Test plan - [x] `pnpm typecheck` -> gruen - [x] `pnpm lint` -> gruen - [x] `pnpm test` (Unit, 366 Tests) -> gruen - [x] `pnpm test:integration` (60 Tests) -> gruen - [ ] Smoke auf `dev-neu`: ein Status-Wechsel triggert genau einen Candidate in der DB Closes #363
refactor(#363): TrackingTodoWriter -> TrackingCandidateWriter (Phase 2 von #360)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
17da05a493
Stellt die Tracking-Source vom Direct-Write (lists/list_items) auf das
Candidate-Pattern aus ADR 0001 um. Damit ist die letzte Direct-Write-Source
abgelöst und #178 (Mail->Todo) kann ab Phase 3 das Pattern erzwingen.

- Neuer TrackingCandidateWriterService schreibt Candidates (source='tracking',
  sourceRef='<trackingId>:<statusKey>', completionPolicy='manual')
- Idempotent via ON CONFLICT DO NOTHING auf UNIQUE(owner_sub, source, source_ref)
- Verschiedene Statuses pro Tracking erzeugen verschiedene Candidates
- TrackingSyncService ruft jetzt den Candidate-Writer (mit trackingId)
- Alte TrackingTodoWriterService + ensureTodoList-Logik geloescht; die
  'Pakete'-Liste bekommt keine neuen Items mehr. Bestehende Items bleiben
  unangetastet (keine Migration noetig). User-sichtbare Darstellung folgt
  in Phase 5 (Planner v0) + Tagesplan-UI.
- ListsModule-Import aus TrackingModule entfernt (war nur fuer den alten Writer)

Closes #363

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
admin-mrrm deleted branch refactor/363-tracking-candidate-writer 2026-05-20 21:45:35 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!364
No description provided.