Skip to content

Implement Multi-Day Event attendance via per-day Check-in Posts - #49

Merged
rachmo merged 1 commit into
mainfrom
feat/multiday-event-attendance
Aug 19, 2026
Merged

Implement Multi-Day Event attendance via per-day Check-in Posts#49
rachmo merged 1 commit into
mainfrom
feat/multiday-event-attendance

Conversation

@rachmo

@rachmo rachmo commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Closes #32. A Multi-Day Event now gets real Attendance Tracking by generating one synthetic Multi-Day Child Event per calendar day of its span (ordinary all_day Events), reusing the existing Check-in Post / Reaction Cutoff / Event Attendance Report machinery unmodified:

  • Every Child's Check-in Post is front-loaded to a shared time (checkin_offset_multiday_days, default 2 days before the span's first day) — one batch of posts, not staggered — while each Child's own Reaction Cutoff still lands independently at the end of its own day
  • The Multi-Day Event parent row is untouched: it keeps driving the Weekly Summary Post exactly as before, and Children never appear there separately
  • Child identity is keyed by calendar date, not by offset from the current span's start — a span shift reconciles only the days that actually entered or left the span, without misattributing one day's collected attendance to another
  • Reconciliation never touches an already-finalized Child; a Multi-Day Event edited down to a non-multi-day span cleans up its previously-generated Children
  • Multi-Day Children are excluded from the No Response Alert's streak query (one missed competition shouldn't read as three missed meetings) but count normally toward Season hours/attendance %

Went through /code-review (8 finder angles + independent verification) before this PR — 8 confirmed issues (finalized-Child protection, orphaned Children on a meeting-type edit, positional vs. date-keyed identity, a DST-unsafe date computation, spurious edit-broadcast noise, a triplicated code pattern, and a stale doc citation) were all fixed and re-verified.

Companion to the docs branch docs/multiday-event-attendance (#48) — domain docs and code are kept on separate branches/PRs per this repo's convention.

Test plan

  • npm run typecheck
  • npm test (198/198 passing, including new coverage for child generation, span-shift reconciliation, and the day-suffix title-diffing fix)
  • npm run format:check
  • npm run build

A Multi-Day Event now generates one synthetic Multi-Day Child Event per
calendar day of its span (ordinary all_day Events), reusing the existing
Check-in Post / Reaction Cutoff / Event Attendance Report machinery
unmodified. Every Child's Check-in Post is front-loaded to a shared time
(checkin_offset_multiday_days, default 2 days before the span's first day),
while each Child's own Reaction Cutoff still lands independently at the end
of its own day. The Multi-Day Event parent row is untouched — it keeps
driving the Weekly Summary Post exactly as before.

Child identity is keyed by calendar date (not by offset from the current
span's start), so a span shift reconciles only the days that actually
entered or left the span rather than reassigning every day's already-
collected attendance. Reconciliation never touches an already-finalized
Child, and a Multi-Day Event edited down to a non-multi-day span cleans up
its previously-generated Children. Multi-Day Children are excluded from the
No Response Alert's streak query (one missed competition isn't three missed
meetings) but still count normally toward Season hours/attendance %.

Closes #32.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@rachmo
rachmo merged commit 41c8338 into main Aug 19, 2026
1 check passed
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.

Multi-Day Event attendance via per-day Check-in Posts

1 participant