feat(projects): Projects-Source als Day-Planner-Lieferant (#489) #490

Merged
pm-bot merged 2 commits from feat/360-projects-source into main 2026-06-16 12:44:54 +02:00
Collaborator

Schließt #489 — Phase 3 von Epic #360.

Summary

  • Neues projects-Modell: Titel + geordnete Steps (JSONB, stabile UUIDs)
  • Pro Step ein Candidate mit source=project, idempotent via Unique-Constraint
  • Lineare dependsOn-Chain — Planner v1-DAG (rc26) sorgt für Reihenfolge
  • CRUD-UI Web + Mobile unter /einstellungen/projekte

Test Plan

  • Unit: 13 neue Tests (Service 8, Writer 5) grün
  • api-client: 5 neue Tests (inkl. Schema-Drift-Guard) grün
  • Integration: 5 neue Tests (POST→Candidates+dependsOn, archive/restore, delete, validation)
  • Typecheck: api/web/mobile/feature-day-planner alle grün
  • Device-Test nach Release-Build (Projekt anlegen → Steps in /heute in Reihenfolge sichtbar)

Fixes #489

Schließt #489 — Phase 3 von Epic #360. ## Summary - Neues `projects`-Modell: Titel + geordnete Steps (JSONB, stabile UUIDs) - Pro Step ein Candidate mit `source=project`, idempotent via Unique-Constraint - Lineare `dependsOn`-Chain — Planner v1-DAG (rc26) sorgt für Reihenfolge - CRUD-UI Web + Mobile unter `/einstellungen/projekte` ## Test Plan - [x] Unit: 13 neue Tests (Service 8, Writer 5) grün - [x] api-client: 5 neue Tests (inkl. Schema-Drift-Guard) grün - [x] Integration: 5 neue Tests (POST→Candidates+dependsOn, archive/restore, delete, validation) - [x] Typecheck: api/web/mobile/feature-day-planner alle grün - [ ] Device-Test nach Release-Build (Projekt anlegen → Steps in /heute in Reihenfolge sichtbar) Fixes #489
feat(projects): Projects-Source als Day-Planner-Lieferant (#489)
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
cf2344b955
Phase 3 von Epic #360. Mehrstufige Vorhaben mit geordneten Schritten
werden zu Candidates mit linearer dependsOn-Chain — der Planner v1-DAG
(rc26) sorgt dafür, dass Schritt N+1 erst nach Schritt N geplant wird.

Im Unterschied zu Habits ist die Spawn-Logik nicht zeitgesteuert: Beim
Anlegen eines Projekts werden alle Step-Candidates synchron geschrieben,
kein Cron nötig.

API:
- projects-Tabelle (id, ownerSub, title, steps JSONB, archivedAt)
- ProjectsService CRUD + Owner-Guard
- ProjectCandidateWriterService: idempotent via (ownerSub, source,
  sourceRef)-Unique-Constraint; Conflict-Lookup hält dependsOn-Chain
  auch beim Re-Spawn intakt
- 8 Unit-Tests Service + 5 Unit-Tests Writer + 5 Integration-Tests

Client:
- shared-types: projectSchema + step/create/update Contracts
- api-client: ProjectsResource list/create/update/delete + 5 Tests
  (inkl. Schema-Drift-Guard analog rc22-Lehrlauf)
- feature-day-planner: ProjectsSettingsScreen Tamagui cross-platform
  (multiline-Steps-Textarea) + 4 TanStack-Query-Hooks
- Web /einstellungen/projekte + Sidebar-Eintrag; Mobile
  einstellungen/projekte.tsx + Drawer-Index-Eintrag

Damit ist die rule-based-Source-Sammlung vollständig (Tracking,
Calendar, Habits, Projects). Verbleibende Sources Mail→Candidate (#178)
und Planner v2 (LLM) sitzen beide hinter Epic #122.

Fixes #489

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(test): cleanDb truncates projects table
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
0a67a4f41a
Integration tests #1123 schlugen mit 2 fehlern fehl, weil cleanDb die
neue projects-Tabelle nicht zurücksetzt. Spawn-Test schreibt 3, dann
GET-Test erwartet 2 (sieht 3); DELETE-Test erwartet 0 (sieht 4).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pm-bot merged commit 3b0b72a357 into main 2026-06-16 12:44:54 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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!490
No description provided.