Build Log · August 13, 2026

Identity Attribution, Announcements Rebuild, and Leadership Dashboard Reorg

Shipped person-level identity attribution across the whole member app, rebuilt Announcements end-to-end, reorganized the entire coordinator dashboard around real workflows, then closed the gaps a self-audit found — all live in production.

  • Forge
  • Rounds
  • medinaCHF
  • Identity Model
  • Admin Dashboard
  • Council/Crucible
production commits shipped
9

production commits shipped

tables gained real adult-level attribution
10

tables gained real adult-level attribution

new coordinator pages/routes
4

new coordinator pages/routes

brief gaps found and closed via self-audit
4

brief gaps found and closed via self-audit

Timeline

  1. Start

    Real production bug: photo upload 413

    Server Actions 1MB body-size cap, traced via Vercel logs, fixed and deployed

  2. +1hr

    Community 500 diagnosed and fixed

    Missing 'use client' on two components with real onClick handlers

  3. +2hr

    Identity model — Council reviewed before building

    Crucible architect+qe personas caught a real design flaw (silent isPrimary fallback = false attribution) before any schema was written

  4. +4hr

    Identity model shipped across 10 tables

    FK-backed adultId + name snapshots, requireMember() widened, shared honest-fallback resolver

  5. +6hr

    Announcements rebuilt end-to-end

    Simplified urgency, event linking, admin detail view, acknowledgement tracking

  6. +9hr

    Full Leadership Dashboard reorganization

    New Current Members + Group Insights pages, nav grouped by workflow, Guide rewritten

  7. +10hr

    Self-audit against both briefs, gaps closed

    Found 4 real gaps by re-reading the actual code against Courtney's numbered items, fixed all 4

  8. +11hr

    Nav redesigned again after live visual feedback

    First version technically grouped but still read as a flat list — rebuilt as a real two-tier tab bar

What shipped

  • Fixed a real production bug: Server Actions default 1MB body-size cap was rejecting phone-camera photo uploads (Courtney's Samsung S23 report) — raised to 5MB to match the app's own file-size validation

  • Fixed a real production 500 on /member/community — two components had real onClick handlers but were missing 'use client'

  • Shipped a Council-reviewed identity-attribution model: FK-backed adultId + point-in-time name-snapshot columns across rsvps, communityPosts, communityComments, pollVotes, standalonePollVotes, standalonePolls, planningOpportunities, planningClaims, ideaInterest, and eventPlanners — every member action now attributes to the acting person, not just their household

  • Fixed a real data-integrity bug found while building the identity model: one production family had two adults both marked isPrimary — repaired live before adding the uniqueness constraint that would have made it unfixable via the UI

  • Rebuilt Announcements top to bottom: simplified urgency terminology with real behavior explanations, event linking, a real admin detail view (Edit/Archive/Delete/View as Member/View Acknowledgements), acknowledgement progress tracking, edit-after-acknowledgement warning

  • Reorganized the entire Leadership (coordinator) dashboard around three real workflows: new Current Members directory, new Group Insights page (age bands + location analytics), Membership Progress clarity, Saved Responses (renamed from Answer Library) with simplified language, Website Inquiries renamed with clarified status labels, Guide rewritten from a 9-section screenshot manual to 5 short workflow sections

  • Self-audited both client briefs against the actual shipped code (not the commit messages) and found + closed 4 real gaps: Home's acknowledgement banner was scoped to Urgent-class only, the Our Year Together/Events & Planners overlap was never evaluated, Events & Planners had no missing-planner/missing-details flags, and Application status labels still leaked raw backend enum values in the review-history trail

  • Redesigned the coordinator nav a second time after seeing it live — the first grouped version technically had the right structure but still read as a flat wrapping list; rebuilt as a real two-tier tab bar (5 workflow tabs, then that tab's own items), and fixed a stale 'Coordinator' label in a completely separate component (SiteHeader) that the earlier brand rename had missed

  • Fixed a real OS-level bug in forgekit-os/scripts/crucible.mjs: GPT-5.2/5.3-chat-latest were both deprecated (3rd recurrence of this exact class of failure), and the GPT-5.6 replacement model defaults to real internal reasoning that silently consumes the entire token budget with zero visible output unless reasoning_effort is explicitly set to 'none' — found by running a real Council review, not discovered abstractly