Build Log · September 6, 2026

Closing the Owner Loop's Isolation Gap

Traced a real production incident (a consequential Owner Loop candidate leaking onto master unreviewed) to its exact root cause, fixed and proved it live, then processed a full backlog of real MedinaCHF coordinator requests through the repaired pipeline.

  • MedinaCHF
  • Alloy
  • Owner Loop
  • Production Incident
  • Bug Fix
real MedinaCHF owner requests shipped
5

real MedinaCHF owner requests shipped

root-cause bugs found and fixed
3

root-cause bugs found and fixed

production deploys
9

production deploys

notification system built + proven live
1

notification system built + proven live

Timeline

  1. Start

    MedinaCHF welcome-email edits finished, deploy blocked

    Deploy Gate stale-evidence error traced to a genuinely missing npm workspace entry for products/medinaCHF

  2. +1h

    Poll-authority question resolved by tracing real code

    Confirmed coordinator override was intentional, not a gap

  3. +2h

    Canvas app read-only access fixed end to end

    3 of 4 canvas apps had no working DB role at all; wired all 4 into Railway, verified live

  4. +3h

    First Owner Loop acceptance-boundary bug found

    d578d2e1 landed on master unreviewed despite its own record saying awaiting_human_acceptance

  5. +4h

    Root cause found and fixed: isolated-worktree commit

    Proven with a real scratch-repo reproduction before shipping

  6. +5h

    business_policy_semantics narrowed after 2 real false positives

    Zeb confirmed neither of two blocked requests actually needed his review

  7. +6h

    Fix proven live in production

    The next real candidate (421fcf85) stayed correctly isolated — confirmed via git ls-remote

  8. +7h

    Zeb's notification email built, wired, and delivery-confirmed

    Then found silently broken by a dotenvx stdout-banner leak into the GitHub secret itself

  9. +8h

    Briefing page fixed: dead cache, missing button, C-suite voice

    Rewrote the synthesis prompt after Zeb called the bullets meaningless

  10. End

    5 real coordinator UI/copy requests shipped and deployed

    Collapsible Recent Requests, email preview collapse, button rename — all verified against the real send path

What shipped

  • Fixed products/medinaCHF missing from the root npm workspaces array — deploy:medinachf was silently broken

  • Provisioned working read-only DB credentials for all 4 canvas apps (only 1 of 4 previously worked) and wired them into Alloy's Railway environment

  • Root-caused and fixed the Owner Loop acceptance-boundary isolation bug: commitPendingAcceptanceRecord() now commits via an isolated git worktree, never the runner's own HEAD

  • Built check-pending-acceptance-isolation.mjs — a mechanical sweep that would have caught the incident directly; found 2 more pre-existing leaked candidates on canvas-2

  • Built and delivery-confirmed a real email notification (sendZebEscalationEmail via a new shared lib/send-zeb-email.mjs) that fires the moment a candidate is parked awaiting acceptance — then found and fixed the actual reason it failed once in production (a dotenvx banner line corrupting the GitHub secret at creation time)

  • Narrowed business_policy_semantics's definition in the Charge template after 2 real requests were blocked for no real reason — added a concrete reversal-cost test

  • Fixed the Alloy Briefing page: it was bypassing its own cache-first design (2 real OpenAI calls per page load) and had a fully-built but never-rendered Refresh button

  • Rewrote the Briefing synthesis prompt's voice and added namedDevelopmentSummaries so bullets are human sentences, not raw internal claim strings

  • Shipped 5 real MedinaCHF coordinator UI requests: Idea Bank rename + publish flow, 7-day event-planning-credit rule, unified Ideas/Polls/Community leadership page, collapsible Recent Requests + email preview, member-detail button rename