summaryrefslogtreecommitdiff
path: root/docs/superpowers/specs/2026-09-02-pull-based-punch-list-design.md
diff options
context:
space:
mode:
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.md18
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