plan: open-backlog execution order (2026-08-16) #100

Closed
opened 2026-08-16 14:27:32 +00:00 by nalum · 0 comments
Owner

Tracking issue for the current open backlog (2026-08-16, decisions settled same day). The order below is the plan: quick notification kinds first while the PR #90 pattern is fresh, then the scheduler seam and the tickers that build on it, small Android parity and CI in between, and the repeat-rule work last because it is the largest and wants #94's move-notification hook in place.

All design decisions are made — recorded as comments on each issue. Summary: #92 and #95 closed as won't-do; #93 accepts per-step noise; unassigned jobs with deadlines broadcast to everyone (#91/#99); #99 is a distinct JOB_OVERDUE firing daily until done; #98 uses per-event lead times (plus whole-family birthday broadcasts and a day-before nudge for deadline-type events), which widens #97 to arbitrary next-fire times; #77 edits the full rule for the whole series and keeps surviving overrides.

Cluster A — notification kinds (PR #90 follow-ups)

Each kind carries the usual plumbing: proto enum, notify method, en+ga messages, webhook decorator, web push-preference checkbox + PUSH_KINDS entry, Android channel.

  • #92 MEMBER_JOINED — closed won't-do: joins do not need a notification.
  • #94 EVENT_MOVED (PR #101) — before/after diff in EventService/Update; fire only when the when changes.
  • #93 STEP_ADDED (PR #101) — emission at ItemService/Create when the parent job's owner is not the actor. Decided: accept the noise, no dedup.
  • #95 shared-list activity — closed won't-do at the design gate.

Cluster B — reminder tickers (reminders audit)

  • #97 shared reminder scheduler seam (PR #101) — extract the meal ticker's loop, generalised to arbitrary next-fire instants (per-event lead times for #98) with daily-wall-clock as one consumer shape; #91/#98/#99 consume it.
  • #91 JOB_DUE (PR #101) — day-of deadline nudge on the seam. Decided: unassigned jobs broadcast to everyone.
  • #99 JOB_OVERDUE (PR #101) — distinct kind, fires daily until the job is done; unassigned broadcast. Extends #91's ticker, possibly the same PR.
  • #98 EVENT_REMINDER (PR #103) — per-event lead time (new field on the event, both editors); birthdays broadcast to the whole family; deadline-type events get an extra day-before nudge.

Cluster C — Android parity

  • #78 delete event / series (PR #102) — deleteEvent through the offline queue, danger action + two-step confirm, matrix-gated. No server change.
  • #83 confetti parity + vibration (PR #102) — port the web confetti parameters, add haptics, respect reduced motion.

Cluster D — CI

  • #76 JaCoCo coverage in the Android report (PR #102) — independent, fits anywhere as a filler item.

Cluster E — recurrence

  • #77 edit an event's repeat rule (ADR-0032, PR #104) — ADR first. Decided: full rule + until editable for the whole series, re-derived from the series start; "from here forward" deferred; overrides and cancelled slots kept where their dates survive, orphans dropped. Do after #94 so a rule change can fire EVENT_MOVED. Likely a stacked ADR+server / web / Android chain.

Order

#94 → #93 → #97 → #91 → #99 → #98 → #77, with #78/#83/#76 slotting in anywhere. Clusters are independent stacks; within a cluster the order above is the dependency order. Bottom-first merges, fast-forward, per the usual stacked-PR flow.

Status 2026-08-16 (evening)

Everything above is built and stacked as PRs #101 → #102 → #103 → #104 (merge bottom-first; Forgejo retargets down the chain). Every item was verified against the live deploy except the Android-only UI (#78 delete flow, #83 confetti, the #98/#77 sheet controls), which awaits a connected device. PR #102 also carries an events.update offline-replay fix found during #78.

Tracking issue for the current open backlog (2026-08-16, decisions settled same day). The order below is the plan: quick notification kinds first while the PR #90 pattern is fresh, then the scheduler seam and the tickers that build on it, small Android parity and CI in between, and the repeat-rule work last because it is the largest and wants #94's move-notification hook in place. All design decisions are made — recorded as comments on each issue. Summary: #92 and #95 closed as won't-do; #93 accepts per-step noise; unassigned jobs with deadlines broadcast to everyone (#91/#99); #99 is a distinct JOB_OVERDUE firing daily until done; #98 uses per-event lead times (plus whole-family birthday broadcasts and a day-before nudge for deadline-type events), which widens #97 to arbitrary next-fire times; #77 edits the full rule for the whole series and keeps surviving overrides. ## Cluster A — notification kinds (PR #90 follow-ups) Each kind carries the usual plumbing: proto enum, notify method, en+ga messages, webhook decorator, web push-preference checkbox + PUSH_KINDS entry, Android channel. - [x] ~~#92 MEMBER_JOINED~~ — closed won't-do: joins do not need a notification. - [x] #94 EVENT_MOVED (PR #101) — before/after diff in `EventService/Update`; fire only when the *when* changes. - [x] #93 STEP_ADDED (PR #101) — emission at `ItemService/Create` when the parent job's owner is not the actor. Decided: accept the noise, no dedup. - [x] ~~#95 shared-list activity~~ — closed won't-do at the design gate. ## Cluster B — reminder tickers (reminders audit) - [x] #97 shared reminder scheduler seam (PR #101) — extract the meal ticker's loop, generalised to arbitrary next-fire instants (per-event lead times for #98) with daily-wall-clock as one consumer shape; #91/#98/#99 consume it. - [x] #91 JOB_DUE (PR #101) — day-of deadline nudge on the seam. Decided: unassigned jobs broadcast to everyone. - [x] #99 JOB_OVERDUE (PR #101) — distinct kind, fires daily until the job is done; unassigned broadcast. Extends #91's ticker, possibly the same PR. - [x] #98 EVENT_REMINDER (PR #103) — per-event lead time (new field on the event, both editors); birthdays broadcast to the whole family; deadline-type events get an extra day-before nudge. ## Cluster C — Android parity - [x] #78 delete event / series (PR #102) — `deleteEvent` through the offline queue, danger action + two-step confirm, matrix-gated. No server change. - [x] #83 confetti parity + vibration (PR #102) — port the web confetti parameters, add haptics, respect reduced motion. ## Cluster D — CI - [x] #76 JaCoCo coverage in the Android report (PR #102) — independent, fits anywhere as a filler item. ## Cluster E — recurrence - [x] #77 edit an event's repeat rule (ADR-0032, PR #104) — ADR first. Decided: full rule + until editable for the whole series, re-derived from the series start; "from here forward" deferred; overrides and cancelled slots kept where their dates survive, orphans dropped. Do after #94 so a rule change can fire EVENT_MOVED. Likely a stacked ADR+server / web / Android chain. ## Order #94 → #93 → #97 → #91 → #99 → #98 → #77, with #78/#83/#76 slotting in anywhere. Clusters are independent stacks; within a cluster the order above is the dependency order. Bottom-first merges, fast-forward, per the usual stacked-PR flow. ## Status 2026-08-16 (evening) Everything above is built and stacked as PRs #101 → #102 → #103 → #104 (merge bottom-first; Forgejo retargets down the chain). Every item was verified against the live deploy except the Android-only UI (#78 delete flow, #83 confetti, the #98/#77 sheet controls), which awaits a connected device. PR #102 also carries an events.update offline-replay fix found during #78.
nalum added reference main 2026-08-16 14:43:36 +00:00
nalum changed reference from main to v1.5.0 2026-08-16 14:43:58 +00:00
nalum closed this issue 2026-08-16 19:45:09 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app#100
No description provided.