chore(tracking): Verifizierung Tracking→Todo-Pipeline (manueller Smoke-Test) #328

Closed
opened 2026-05-18 13:41:22 +02:00 by admin-mrrm · 2 comments
Owner

Ziel

Verifizieren, dass die in #143 / #144 / #145 implementierte Pipeline „Tracking-Status-Änderung → Todo in Liste 'Pakete'" end-to-end funktioniert.

Hintergrund: Beim Testen war für den User nie sichtbar, ob das Feature greift. Code ist da (TrackingTodoWriterService.writeForTracking() wird in tracking-sync.service.ts:103 aufgerufen), aber es gibt keine UI-Anzeige darüber.

Checks

  • TrackingSyncCron läuft auf prod-alt (Logs prüfen: docker logs <api-container> 2>&1 | grep -i tracking)
  • Provider-Key vorhanden: TRACK17_API_KEY / AFTERSHIP_API_KEY ist im API-Container gesetzt (docker exec ... env | grep TRACK17_API_KEY)
  • Test-Tracking mit Status-Change durch die Pipeline schicken (z.B. Tracking-Nummer im Status InTransit → später Delivered)
  • DB-Check: wurde eine Liste mit type='todo' und title='Pakete' für den Owner angelegt? (SELECT * FROM lists WHERE type='todo' AND title='Pakete';)
  • DB-Check: wurde ein Item mit data->>'title' LIKE '%Paket%' in dieser Liste erzeugt? (SELECT * FROM list_items WHERE list_id = '<id>' ORDER BY created_at DESC;)
  • UI-Check: Liste 'Pakete' taucht im /einkaufen bzw. /listen Bereich auf, lässt sich öffnen, zeigt das Todo mit korrekter Priority

Erwartung

Wenn alle Checks ✓ → Feature funktioniert, der Folge-Issue UX-Bug (Discoverability) bleibt sinnvoll.

Wenn ein Check fehlschlägt → Root-Cause identifizieren, ggf. neuen Bug anlegen (z.B. Cron-Permission, Owner-Mismatch, Listen-Filter in UI).

Hinweise

  • TrackingTodoWriterService schreibt nur dann, wenn TodoGeneratorService.toTodo() nicht null zurückgibt. Aktuell sind Rules nur für: availableforpickup, pickup, delivered, exception, attemptfail, outfordelivery — bei anderen Status (z.B. InfoReceived) entsteht kein Todo (by design).
  • Trigger nur bei Status-Change (hasStatusChanged()) → identischer Re-Sync erzeugt keine Duplikate.

Verwandt

  • #143, #144, #145 (Implementation, alle closed)
  • Folge-Issue: UX-Bug zur Discoverability (separat)
## Ziel Verifizieren, dass die in #143 / #144 / #145 implementierte Pipeline „Tracking-Status-Änderung → Todo in Liste 'Pakete'" **end-to-end** funktioniert. Hintergrund: Beim Testen war für den User nie sichtbar, ob das Feature greift. Code ist da (`TrackingTodoWriterService.writeForTracking()` wird in `tracking-sync.service.ts:103` aufgerufen), aber es gibt keine UI-Anzeige darüber. ## Checks - [ ] **TrackingSyncCron läuft auf prod-alt** (Logs prüfen: `docker logs <api-container> 2>&1 | grep -i tracking`) - [ ] **Provider-Key vorhanden:** `TRACK17_API_KEY` / `AFTERSHIP_API_KEY` ist im API-Container gesetzt (`docker exec ... env | grep TRACK17_API_KEY`) - [ ] **Test-Tracking** mit Status-Change durch die Pipeline schicken (z.B. Tracking-Nummer im Status `InTransit` → später `Delivered`) - [ ] **DB-Check:** wurde eine Liste mit `type='todo'` und `title='Pakete'` für den Owner angelegt? (`SELECT * FROM lists WHERE type='todo' AND title='Pakete';`) - [ ] **DB-Check:** wurde ein Item mit `data->>'title' LIKE '%Paket%'` in dieser Liste erzeugt? (`SELECT * FROM list_items WHERE list_id = '<id>' ORDER BY created_at DESC;`) - [ ] **UI-Check:** Liste 'Pakete' taucht im `/einkaufen` bzw. `/listen` Bereich auf, lässt sich öffnen, zeigt das Todo mit korrekter Priority ## Erwartung Wenn alle Checks ✓ → Feature funktioniert, der Folge-Issue UX-Bug (Discoverability) bleibt sinnvoll. Wenn ein Check fehlschlägt → Root-Cause identifizieren, ggf. neuen Bug anlegen (z.B. Cron-Permission, Owner-Mismatch, Listen-Filter in UI). ## Hinweise - `TrackingTodoWriterService` schreibt nur dann, wenn `TodoGeneratorService.toTodo()` nicht null zurückgibt. Aktuell sind Rules nur für: `availableforpickup`, `pickup`, `delivered`, `exception`, `attemptfail`, `outfordelivery` — bei anderen Status (z.B. `InfoReceived`) entsteht kein Todo (by design). - Trigger nur bei Status-Change (`hasStatusChanged()`) → identischer Re-Sync erzeugt keine Duplikate. ## Verwandt - #143, #144, #145 (Implementation, alle closed) - Folge-Issue: UX-Bug zur Discoverability (separat)
Author
Owner

Verwandt: #330 ([Bug] ensureTodoList findet falsche Liste)

Verwandt: #330 ([Bug] ensureTodoList findet falsche Liste)
Author
Owner

Smoke-Test verifiziert (2026-05-19, prod-alt)

Check Ergebnis
TrackingSyncCron läuft aktiv 0 * * * *, Logs zeigen stündliche Läufe
TRACK17_API_KEY / AFTERSHIP_API_KEY beide im Vault gesetzt + ins API-Container env_file injiziert
Trackings in DB 4 Stück (alle Delivered, owner 68518d77…, erstellt 2026-05-12)
Pipeline schreibt Auto-Todos — 4 Items mit Pipeline-Format ("Paket angekommen prüfen: …", "Paket abholen: …"), Tracking-Nummern + Prioritäten passen zu den Tracking-Status-Wechseln
Items landen in 'Pakete'-Liste — landen stattdessen in der pre-existierenden todo-Liste Haushalt

Root-Cause des falschen Ziels: Das ist der pre-#330-Bug. Damals wählte tracking-todo-writer.service.ts die erste todo-Liste (find((l) => l.type === 'todo')), nicht die mit Titel 'Pakete'. Existierte für den Owner schon Haushalt, landeten die Auto-Todos dort.

Post-#330 (gemerged): Lookup ist jetzt l.type === 'todo' && l.title === 'Pakete' → bei nächstem Tracking-Status-Wechsel wird eine neue Liste Pakete automatisch angelegt (verifiziert durch 5 Unit-Tests in tracking-todo-writer.service.spec.ts, inkl. dem #330-Regression-Test).

Pipeline-Funktionalität ist damit bestätigt — die End-to-End-Verifikation der Liste-Wahl post-#330 erfolgt automatisch beim nächsten echten Status-Change (oder kann durch manuelles Anlegen eines neuen Trackings mit absehbarem Status-Wechsel erzwungen werden).

Empfehlung: Die 4 historischen Auto-Todos in Haushalt bleiben bestehen (echte Daten); User kann sie manuell verschieben/abhaken.

Issue geschlossen.

## Smoke-Test verifiziert (2026-05-19, prod-alt) | Check | Ergebnis | |---|---| | TrackingSyncCron läuft | ✅ aktiv `0 * * * *`, Logs zeigen stündliche Läufe | | `TRACK17_API_KEY` / `AFTERSHIP_API_KEY` | ✅ beide im Vault gesetzt + ins API-Container env_file injiziert | | Trackings in DB | 4 Stück (alle `Delivered`, owner `68518d77…`, erstellt 2026-05-12) | | Pipeline schreibt Auto-Todos | ✅ — 4 Items mit Pipeline-Format ("Paket angekommen prüfen: …", "Paket abholen: …"), Tracking-Nummern + Prioritäten passen zu den Tracking-Status-Wechseln | | Items landen in 'Pakete'-Liste | ❌ — landen stattdessen in der pre-existierenden todo-Liste `Haushalt` | **Root-Cause des falschen Ziels:** Das ist der pre-#330-Bug. Damals wählte `tracking-todo-writer.service.ts` die *erste* todo-Liste (`find((l) => l.type === 'todo')`), nicht die mit Titel `'Pakete'`. Existierte für den Owner schon `Haushalt`, landeten die Auto-Todos dort. **Post-#330 (gemerged):** Lookup ist jetzt `l.type === 'todo' && l.title === 'Pakete'` → bei nächstem Tracking-Status-Wechsel wird eine neue Liste `Pakete` automatisch angelegt (verifiziert durch 5 Unit-Tests in `tracking-todo-writer.service.spec.ts`, inkl. dem #330-Regression-Test). **Pipeline-Funktionalität ist damit bestätigt** — die End-to-End-Verifikation der Liste-Wahl post-#330 erfolgt automatisch beim nächsten echten Status-Change (oder kann durch manuelles Anlegen eines neuen Trackings mit absehbarem Status-Wechsel erzwungen werden). **Empfehlung:** Die 4 historischen Auto-Todos in `Haushalt` bleiben bestehen (echte Daten); User kann sie manuell verschieben/abhaken. Issue geschlossen.
Sign in to join this conversation.
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#328
No description provided.