Build Log
Closing the Owner Loop's Isolation Gap
September 6, 2026
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.
Timeline
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