From dfb00aaa863be9e327547e591e910b304e2610ab Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Thu, 27 Aug 2026 02:37:17 +0200 Subject: [PATCH] Correct a Task 4 expectation that contradicted its own rule MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "ancient anchor" test expected three occurrences and omitted 31 August. With a daily rule anchored at 09:00 and no stated end, the 31st runs to 09:00 on the 1st — inside a window that opens at midnight on the 1st. The brief's own rule is that an occurrence overlapping either edge is included, so four is right and three was the plan disagreeing with itself. Found by the Task 4 implementer, which corrected the test and left the implementation alone. Verified by running occurrencesOf directly. Co-Authored-By: Claude Opus 5 (1M context) --- .../superpowers/plans/2026-08-27-recurring-custom-events.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/superpowers/plans/2026-08-27-recurring-custom-events.md b/docs/superpowers/plans/2026-08-27-recurring-custom-events.md index eaa7037..5811c2a 100644 --- a/docs/superpowers/plans/2026-08-27-recurring-custom-events.md +++ b/docs/superpowers/plans/2026-08-27-recurring-custom-events.md @@ -850,6 +850,10 @@ describe("occurrencesOf", () => { day("2026-09-04T00:00:00"), ); expect(got.map((o) => o.id)).toEqual([ + // The 31st opens at 09:00 and, having no stated end, runs to 09:00 on the + // 1st — which is inside a window that opens at midnight. Half off the + // left edge is still on the board, so it counts. + "myevent:k3f9qa2m01#2026-08-31", "myevent:k3f9qa2m01#2026-09-01", "myevent:k3f9qa2m01#2026-09-02", "myevent:k3f9qa2m01#2026-09-03", @@ -1035,7 +1039,7 @@ export function nextOccurrences( - [ ] **Step 4: Run tests and typecheck** Run: `bun test test/recurrence.test.ts` -Expected: PASS, 35 tests. +Expected: PASS, 34 tests. Run: `bun run typecheck` Expected: exit 0.