diff options
Diffstat (limited to 'docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md')
| -rw-r--r-- | docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md b/docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md index 15f333f..3a73206 100644 --- a/docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md +++ b/docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md @@ -16,15 +16,23 @@ Three defects and one design flaw: owning chain's status, so 4 of 8 visible chain tasks came from explicitly paused chains. *Fixed 2026-09-02 (3e26cd5).* -2. **Recurring tasks double-book.** The next instance materializes before the - current one is closed, so "Bills" occupies two rows (Sep 1 overdue + Oct 1), - as does "Bones's meds". Every monthly recurrence permanently costs two slots. - *Not yet fixed.* +2. **Skipped recurrences never retired.** The scheduler materializes the next + instance once the current one comes due, whether or not it was completed — + deliberately, so skipping one doesn't stall the series. But nothing retired + the occurrence it replaced, so every skipped occurrence stayed open forever as + a permanent overdue item ("Bills" and "Bones's meds" each sat in the list + twice). Per the intended semantics: an occurrence not done before its + successor arrives is *stale/abandoned*, not still owed — the newer one stands. + *Fixed 2026-09-03 (f295fd1): an `abandoned` flag, set when the successor is + created. Deliberately not `completed`, which would credit work never done.* 3. **Buckets never got a pool.** One bucket exists ("Yard Work", cycle 14d, pick 3) holding exactly 3 items. "Pick 3 of 3" makes the rotation a no-op — everything is always active. A duplicate free-standing "Yard work" task does - the same job in parallel. + the same job in parallel. *Pool populated 2026-09-03 to 22 items (3 active + + 19 dormant), so the rotation is real. The duplicate free-standing "Yard work" + recurring task is still there — deleting it ends its series, so it needs an + explicit call.* 4. **`due_date` is doing two incompatible jobs** — the design flaw underneath the complaint. It means both *"this is a hard deadline"* (Bills, meds, T-ball |
