feat(planner): v1 dependsOn DAG ordering (#483) #484

Merged
pm-bot merged 2 commits from feat/planner-v1-depends-on into main 2026-06-16 07:02:45 +02:00
Collaborator

Phase 7 von Day-Planner Epic #360 — Planner v1 regelbasiert.

Was sich ändert

Der Slot-Planner respektiert jetzt das dependsOn[]-Feld der Candidates. Bisher nur vom Schema gepflegt (Phase 1), vom Planner ignoriert.

Algorithmus

  1. Kahn-Topologische-Sortierung liefert Generationen — Knoten ohne offene Deps zuerst.
  2. Generation-by-Generation angewandt: innerhalb einer Gen greift unveränderte v0-Logik (Location-Bucket + Priority-Sort + Event-Skip).
  3. Cascade-Overflow: wenn ein Dep wegen latestAt/Tagesende in overflow geht, fällt der Dependent ebenfalls in overflow.
  4. Cycle-Detection: was nach Kahn übrig bleibt = Zyklus → overflow, kein Crash.
  5. Externe Deps (already-done, obsolete, nicht im pending-Pool): als satisfied behandelt.

Tests

5 neue slot-plan.spec.ts Cases:

  • dependsOn überschreibt id-sort (aaa→zzz)
  • transitive c→b→a
  • cascade overflow
  • externe Deps als satisfied
  • Cycle a↔b ⇒ beide overflow, c bleibt placed

17/17 slot-plan grün; 464/464 API grün.

Out-of-Scope (v1, Folge-Issues)

  • Habit-Context (braucht Habit-Source — Phase 4 von #360)
  • plannedAfter/Before (Planner-Output, kein -Input)
  • Transit-Time zwischen Buckets
  • Time-of-Day Affinity

Closes #483.

Phase 7 von Day-Planner Epic #360 — Planner v1 regelbasiert. ## Was sich ändert Der Slot-Planner respektiert jetzt das `dependsOn[]`-Feld der Candidates. Bisher nur vom Schema gepflegt (Phase 1), vom Planner ignoriert. ## Algorithmus 1. **Kahn-Topologische-Sortierung** liefert Generationen — Knoten ohne offene Deps zuerst. 2. **Generation-by-Generation** angewandt: innerhalb einer Gen greift unveränderte v0-Logik (Location-Bucket + Priority-Sort + Event-Skip). 3. **Cascade-Overflow**: wenn ein Dep wegen latestAt/Tagesende in overflow geht, fällt der Dependent ebenfalls in overflow. 4. **Cycle-Detection**: was nach Kahn übrig bleibt = Zyklus → overflow, kein Crash. 5. **Externe Deps** (already-done, obsolete, nicht im pending-Pool): als satisfied behandelt. ## Tests 5 neue `slot-plan.spec.ts` Cases: - dependsOn überschreibt id-sort (aaa→zzz) - transitive c→b→a - cascade overflow - externe Deps als satisfied - Cycle a↔b ⇒ beide overflow, c bleibt placed 17/17 slot-plan grün; 464/464 API grün. ## Out-of-Scope (v1, Folge-Issues) - Habit-Context (braucht Habit-Source — Phase 4 von #360) - plannedAfter/Before (Planner-Output, kein -Input) - Transit-Time zwischen Buckets - Time-of-Day Affinity Closes #483.
Slot-plan now respects candidates.dependsOn[]:
- Kahn topological generations order placements
- Cascade overflow when a dep overflows
- Cycle members marked overflow (no deadlock)
- External deps (not in pending pool) treated as satisfied

Phase 7 of Day-Planner Epic #360.
chore(release): v0.6.6-rc26
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
60a1f924fd
pm-bot merged commit efc1970c74 into main 2026-06-16 07:02:45 +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!484
No description provided.