Skip to content

Fix SNOOZED marker on the UIKit timeline (D-058/D-060 regression)#132

Merged
Considus merged 1 commit into
mainfrom
fix/snoozed-timeline-and-reorder-coverage
Jul 17, 2026
Merged

Fix SNOOZED marker on the UIKit timeline (D-058/D-060 regression)#132
Considus merged 1 commit into
mainfrom
fix/snoozed-timeline-and-reorder-coverage

Conversation

@Considus

Copy link
Copy Markdown
Owner

The bug

The Take label lane picks its word from isSnoozed ? "SNOOZED" : "OVERDUE". The Pillar 2 rewrite (PR #130) never wired snooze through to the new timeline — TimelineReadCell didn't take isSnoozed, and UIKitTimeline never received the snoozed set at all — so every snoozed overdue Take read "OVERDUE" (regression against D-058/D-060).

Snooze isn't derivable from a Take — it lives in vm.snoozedReminderIDs — which is exactly why the rebuild dropped it. Found while re-anchoring the code-anchored Feature Register after the M7 merge (the "Overdue / snoozed states" row pointed at TakeRowView.isSnoozed, which now only renders the pinned Obie).

The fix

Thread snoozedIDs from DailiesViewUIKitTimelineTimelineSwipeCellTimelineReadCellTakeCardSurface, with its own reconfigure trigger: a snooze doesn't change the Take's value, so the value-diff that reconfigures cells couldn't see it (a snoozed card would keep saying OVERDUE until something else touched that Take). The collection now diffs the snoozed set — the same pattern the month-filter restyle uses.

Scope note

This was originally part of a larger local pass that also restored the reorder-maths test coverage and re-anchored the Feature Register. PR #131 landed the reorder work independently while this was in flight — its reorderTarget extraction and BlockEditorReorderGeometryTests are byte-identical to what that pass produced, so this PR is scoped to the SNOOZED fix alone. The register (non-git docs) is already re-anchored.

Verification

Owner-verified on device: a snoozed Take reads SNOOZED, and flips the moment it's snoozed with no further edit. 357 Core tests pass; app + device builds clean.

🤖 Generated with Claude Code

The label lane picks its word from `isSnoozed ? "SNOOZED" : "OVERDUE"`, but the rewritten
timeline never wired snooze through: `TimelineReadCell` didn't pass isSnoozed and
`UIKitTimeline` never received the snoozed set — so every snoozed overdue Take read
"OVERDUE". Snooze isn't derivable from the Take (it lives in `vm.snoozedReminderIDs`),
which is exactly why the rebuild dropped it — found while re-anchoring the Feature Register
after the M7 merge.

Thread `snoozedIDs` from DailiesView → UIKitTimeline → the cells, with its OWN reconfigure
trigger: a snooze doesn't change the Take's value, so the value-diff that reconfigures
cells couldn't see it (same shape as the month-filter restyle). Diff the set instead.

Owner-verified on device: a snoozed Take now reads SNOOZED, and flips the moment it's
snoozed without needing another edit to that Take.

(The reorder-coverage + register-anchor work from the same local pass is already on main
via PR #131 — its `reorderTarget` extraction and test file are byte-identical to what that
PR landed, so nothing to add here.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Considus
Considus merged commit b1a5da4 into main Jul 17, 2026
4 checks passed
@Considus
Considus deleted the fix/snoozed-timeline-and-reorder-coverage branch July 17, 2026 22:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant