Build Log · August 3, 2026

Member Event Authoring, Full-Field Editing, and Redone User Guides

Members can now propose and edit their own events (auto-assigned as planner, free choice of status/visibility), coordinators gained full-field editing, date/time became optional for idea-stage events with a real DB-level guarantee, home/announcements pages got real content previews, a calendar view landed on the events page, and both user guides were rewritten with fresh screenshots to match.

  • MedinaCHF
  • Product
distinct fixes/features delivered from the Charge, all built and verified
9

distinct fixes/features delivered from the Charge, all built and verified

Crucible-reviewed guardrails adopted: DB CHECK constraint for the idea/date rule, member edit scope limited to own-planned + non-terminal-status events
2

Crucible-reviewed guardrails adopted: DB CHECK constraint for the idea/date rule, member edit scope limited to own-planned + non-terminal-status events

Crucible-raised guardrail explicitly declined: capping member-set status at creation (kept as originally asked — free choice)
1

Crucible-raised guardrail explicitly declined: capping member-set status at creation (kept as originally asked — free choice)

of 19 pre-existing Playwright guide-shots tests passing against the final code, twice (once before guide rewrite, once after screenshot recapture)
19

of 19 pre-existing Playwright guide-shots tests passing against the final code, twice (once before guide rewrite, once after screenshot recapture)

guide screenshots recaptured and visually spot-checked against the live UI
18

guide screenshots recaptured and visually spot-checked against the live UI

Timeline

  1. Start

    Charge received

    9-item charge arrived across several messages while an unrelated Explore agent was mid-run — consolidated into one list before shaping

  2. +15m

    Crucible checkpoint run

    engineer+qe Council review of the design before building — two real guardrails adopted, one explicitly declined

  3. +30m

    Schema + actions

    startsAt made nullable with a live DB CHECK constraint; createEvent/updateEvent rewritten for role-aware planner/status/date logic

  4. +1h30m

    UI built

    Shared create/edit form, new edit routes for both roles, calendar component, home/announcements previews, planning-board unplanned-ideas section

  5. +2h

    Verification

    tsc clean, live DB schema check, full pre-existing Playwright guide-shots suite run twice (both clean), one round of real Clerk dev-instance flakiness traced and ruled out rather than assumed

  6. +2h30m

    Guides redone

    Both member/coordinator guide pages rewritten for the new flows; seed script extended with an idea-stage event; 18 screenshots recaptured and spot-checked; sample data cleaned from the shared dev/prod DB

  7. +3h

    Deployed

    Committed medinaCHF-only files, ran the real Deploy Gate transcript check (gate:typecheck, exit 0), deployed to production, verified live via vercel inspect + curl against the real domain (medinachf.forgekits.build)

What shipped

  • products/medinaCHF/lib/db/schema.ts — events.startsAt made nullable, with a new CHECK constraint (events_starts_at_required_unless_idea) enforcing the idea/date rule at the DB level, not just in app code

  • products/medinaCHF/lib/constants/events.ts (new) — single source of truth for status/visibility enums, labels, colors, terminal-status list, and the dateRequiredForStatus/isValidStatus/isValidVisibility helpers, replacing 3-4 duplicated copies across the app

  • products/medinaCHF/lib/actions/events.ts — createEvent rewritten for role-aware planner/status/date logic (members force-set to their own family as planner, free choice of status/visibility; coordinators unrestricted); new updateEvent action for full-field editing, scoped for members to their own planned, non-terminal-status events; updateEventStatus guarded against violating the new DB constraint

  • products/medinaCHF/components/coordinator/CreateEventForm.tsx — expanded into a shared, role-aware create/edit form covering every event column, with conditional date requirement and a status field

  • products/medinaCHF/components/EventCalendar.tsx (new) — dependency-free month-grid calendar for the member events page

  • products/medinaCHF/components/MemberEventsView.tsx (new) — client-side list/calendar toggle, server-fed data

  • New edit routes: app/coordinator/events/[id]/edit/page.tsx, app/member/events/[id]/edit/page.tsx

  • Member home page (app/member/page.tsx) — Announcements card now previews the latest real announcement instead of a static 'View all announcements' link

  • Member announcements list (app/member/announcements/page.tsx) — each item now shows a body preview, not just a title

  • Member planning board (app/member/planning-board/page.tsx) — new 'Ideas that need a planner' section surfacing idea-status events with no plannerFamilyId

  • Both user guides (app/member/guide/page.tsx, app/coordinator/guide/page.tsx) rewritten to describe the new event flows; scripts/seed-guide-shots.mjs and cleanup-guide-shots.mjs extended with a paired idea-stage event; all 18 guide screenshots recaptured against the live UI

“we don't have the data needed to create the retro? seems odd. you've done this before for abandoned sessions”
— Zeb, pushing back correctly on an initial claim that a retro couldn't be written for the separately-found game-builder code — the real prior Charge (nextItems[4] of the 2026-08-01 scaffold session) was findable and made an honest retro possible after all