Commit Graph
4 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5 dfb00aaa86 Correct a Task 4 expectation that contradicted its own rule
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) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 ee43270b2b Move the rename-stability test to where it can fail
Task 2's version called occurrenceId twice with identical arguments, which
any pure function satisfies — occurrenceId never takes a title, so it could
not fail the thing it claimed to pin. Task 5 passes the whole rule into
asOccurrenceEvent, so a rename is a real input there and the assertion has
something to bite on.

Found by the Task 2 review.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 5acd64996b Move the movesOccurrences tests to the task that writes it
Pre-flight scan finding. The function is implemented in Task 2 and its four
tests sat in Task 4's block, so Task 2 would have shipped untested code and
Task 4 would have tested a function it did not write. Task 2's stated count
of 23 already assumed the corrected placement.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-28 05:04:39 +02:00
Lucas WintherandClaude Opus 5 c07e37a4a7 Plan recurring custom events, task by task
Eleven tasks from the design, each with its own test cycle and commit.
Ordered so the schema field lands before anything derives from it and the
store migration is proved before a single row is expanded.

Three things the plan had to settle that the spec left to the implementer.
The overlap check is one exported predicate, because a form that restates
its schema's rule drifts from it and starts refusing saves that would
succeed. The timeline's expansion needs App to pass the same four scope
filters the lists use, so the predicate is extracted rather than copied.
And custom-ui.test.tsx renders statically with no testing-library in the
project at all, so anything needing a click is stated as a pure function
and tested directly rather than through a harness that does not exist.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-27 02:10:05 +02:00