clasp push when ready.PROCESS_QUICK_CAPTURE, DAILY_SEND — v2 uses AM_SEND/PM_SEND instead). Apps Script silently logs "Script function not found" every fire. Fix = delete the 2 orphan triggers.Mildred_Start staging tab nobody reads. Logged as design-level open loop — not killing anything yet.ebf7f80)| # | Fix | Location | Before | After |
|---|---|---|---|---|
| 1 | Time format → 12-hr AM/PM | Code.js:718 | "05/03/2026 07:43" | "Sun, May 3 2026 · 7:43 AM" |
| 2 | HIGH PRIORITY DEBT — balance shown absolute + Monthly Interest formula wired | Code.js:1636 | "−14.7k" / "$0.00" | "$14,710" / "$184" (real interest = balance × APR / 12) |
| 3 | URGENT PAYMENTS — "OVERDUE Nd" instead of negative days | Code.js:1642 | "−2" | "OVERDUE 2d" |
| 4 | CAMP TRACKER — sign-flipped Remaining | extractCampRows_ (lines 2940-2960) | Arievim "−$341.65" | Arievim "$341.65" (computed total − paid from notes regex; falls back to ABS of sheet balance) |
Net diff: 14 insertions, 5 deletions. All four are display-only — no formula changes, no trigger changes, no schema changes. Lowest possible blast radius.
7a35d0a)r5151767258847799706 — same teardown as a phone-readable emailclasp errors with invalid_grant, run clasp login first.MESSAGE_DRAFTS tab on BOS v1. You curate later.Voice Intake v0.1) without Wispr Flow as middleware.
EVENT_LOG tab on BOS v1, timestamped. Good for audit trail.quickRouteBusiness_ branch. Two options:
legacy-sheets/ folder. 2-min cleanup.misRunOpenSnapshot945 · misSendMorningBrief · misRunMiddayRefresh1200) fire 7 days/week with no weekday gate. Cosmetic — they generate quiet weekend emails, no harm. Add if (day === 0 || day === 6) return; at function entry if it bothers you.sendMildredBriefing() → email mildred@hookstreetcapital.com. Or fold into the Sunday Operations Summary that's already firing. DESIGN OPEN LOOPdocs/CURRENT_STATE.md). Pick one as master, retire the other.If you get the form/router right, every other system (Daily/Weekly/Operations Summary emails, Mildred briefing, Calendar) feeds from a single trustworthy intake. If you don't, you keep getting "Example: …" placeholders mixed with real items and the email becomes noise.
The mismatch I found today (form has 7 types, router handles 5 specifically) is a classic phase-lag bug: you updated the form (UI) without updating the routing code (engine). That happens because the form is in Google Forms (visual editor, easy to change in 2 minutes from your phone) while the router is in Apps Script (requires git + clasp + thinking). The asymmetric friction → form drifts ahead.
Insight: next time you change the form, add the corresponding router branch in the same session. Or: have the router fall back to a visible "Unknown type" tab instead of silently routing to Personal — that way you'd have caught this mismatch the first day a Message Draft submission disappeared into the wrong tab.
Per docs/CURRENT_STATE.md opening line (Apr 28 PM): "You do not have an intake problem. You have a routing and closure problem."
Today's Quick Capture finding is exactly that: intake works (form is fine, submissions are landing in the responses sheet). Routing is broken (orphan branches, missing branches). Closure is poisoned (the Sunday email surfaces placeholder rows that look real — destroying trust in the email).
Insight: don't add new intake mechanisms (Voice Intake v2, SMS commands, monday.com integrations) until the existing Quick Capture → Sunday email loop is clean. Adding intake when routing is broken just multiplies the silent-loss surface.
You probably stopped trusting the BUSINESS ITEMS section a while ago because it always shows the same fake rows. That mistrust likely bleeds onto the rest of the email — even the sections that ARE working (Camp Tracker, High Priority Debt) get less attention because the document feels stale.
Insight: if a section can't be made trustworthy in the next 2 weeks, delete it. Empty space beats placeholder noise. Better to have a 4-section email everybody trusts than an 8-section email half of which is fake.
The camp tracker sign-flip fix means the COLUMN now shows positive numbers. But if your Camp Agudah row in the obligations sheet has stale "Paid So Far" data, the email will still surface a stale "Remaining" calculation. Same with debt balances — if your Citi 2550 balance row hasn't been refreshed since April, the new Monthly Interest column will compute interest on stale data.
Insight: Sunday morning ritual could be: (1) refresh balance numbers from Chase + Citi mobile (5 min on phone) → (2) email fires at 7:43 AM with fresh inputs → (3) you read it Monday morning with confidence. Without (1), the email fires on stale data every week.
Apr 28's TRIGGER_REGISTRY.md was awaiting your screenshots since the day it was created. That blocked clean cleanup of the trigger chaos. Today you sent screenshots in 20 minutes, I diffed in 5, and now we know exactly what's clean (most things) and what's broken (BOS v2 orphans).
The inferred picture from Apr 28 was scarier than reality — multiple "100% error" claims, "5+ duplicate fires," "rogue Architect V11 Power Hour spam." The real picture is one sheet with two orphan triggers. Inferred audits invent monsters; real screenshots dispel them.
Insight: for any system where you suspect chaos but haven't actually verified, the highest-leverage move is the screenshot. Not the audit doc, not the architecture diagram, not the redesign — just the 30-second screenshot of what's actually running.
These probably contain code (menu functions, onOpen handlers, validation logic) that's invoked when you open the sheet but doesn't run on a schedule. Are they used as data sources by other sheets? Or are they dormant?
EXPLORE_CONNECTED_SHEETS at Code.js:361). Its bound script is probably just utility/menu code.Insight: none of these need cleanup right now. But when you do the next workspace audit, ask "is this still being read by anything?" If no, retire to Drive archive.
You said in this session: "She doesn't currently get one, I think. We're still trying to get this to work proper." Per docs/MILDRED_SCOPE.md + feedback_mildred_scope_model memory, the design model is OWN/FLAG/OFF-LIMITS — she sees broadly + flags + executes in her ownership.
The Mildred_Start tab built daily is the staging surface for her view. But there's no sendMildredBriefing() function emailing it to her. Both BOS v1 and v2 have MILDRED_START_BUILD triggers — they BUILD the tab but don't send.
Concrete suggestion for next session: add a MILDRED_BRIEFING_SEND function that reads the freshly-built Mildred_Start tab + emails it to her at 7:45 AM EDT (right after the 7:23 AM build). Pick BOS v1 as the source (more BOS context). Decommission BOS v2's MILDRED_START_BUILD trigger to stop the redundant daily build.
Reminder from earlier in this session: I searched the entire Rocket Money CSV (22,475 rows, 2020-04-29 → 2026-04-29) for any $199 transaction matching "Keap" or "Infusionsoft." Zero hits. Closest match was "I HAVE ADHD LLC" $199/mo on Chase 8412 from Nov 2023 → Mar 2024 (4 charges, then stopped).
If a Keap $199 charge is currently active, it's on a card not in this CSV. Quickest verification: search Gmail for "keap" OR "keap.com" OR "infusionsoft" — if a charge is active, there's almost certainly an email receipt. If nothing found, the charge probably doesn't exist (you may be misremembering the merchant name).
MILDRED_BRIEFING_SEND next session that reads BOS v1's Mildred_Start tab + emails it at 7:45 AM EDT? Or is the email-to-Mildred decision still upstream of code?docs/ files? I'll re-fetch before any final push.renderCompactSnapshot_, extractCampRows_, buildActionBumpers_, processFormResponses_, quickRouteBusiness_, quickRunCommand_, SHOW_SETUP_HELPPROCESS_QUICK_CAPTURE + DAILY_SEND do not exist)| Asset | Why blocked | Workaround when convenient |
|---|---|---|
| Recording (5).m4a (1.3 MB grocery convo with wife) | No audio transcription tool wired into this Claude Code session | (a) play locally + dictate gist back to me, (b) drop into Otter.ai / MacWhisper / iPhone Voice Memos transcript, paste text. I'll then ingest into Quick Capture / Grocery list. |
| Monthly Obligations.xlsx + v2.xlsx | Read tool doesn't parse .xlsx natively | Both are exports of the live Google Sheets I have indirect content for via docs/MAY_AUTOPAY_PREFUND_2026-05.md. Move both .xlsx files to archive/excel-exports/ — they're frozen, not live. |
| Live Chase / Citi balances for 5609, 5007, 5777, 1260, 7792, individual card limits | Not in the Sommerset image you sent | Drop a Chase summary screenshot or specific account balances when convenient. Useful for the CASH POSITIONS section in the Sunday email rebuild. |
| Direct deployment to Apps Script (clasp push) | Production system you read daily — needs your explicit confirmation per CLAUDE.md "Executing actions with care" | You run cd HookStreet-Business-OS/sheets && clasp push when ready |
| Area | State | Next step |
|---|---|---|
| Trigger inventory | ✅ Phase B complete | — |
| BOS v1 4 code fixes | ✅ Committed locally ebf7f80 | You: clasp push when ready |
| BOS v2 orphan triggers | 🚨 Awaiting deletes (you, 2 clicks) | You: open Triggers tab, delete 2 rows |
| Sheet input placeholders | 🟡 Stale "Example: …" rows still in tabs | You: open BOS v1, delete placeholder rows in 4 tabs |
| Quick Capture form router mismatch | 🟡 3 design decisions pending | You: answer Decision 1/2/3 in § 2d |
| Mildred briefing email | 🟡 Design limbo | Decide: wire MILDRED_BRIEFING_SEND next session? |
| Keap $199 mystery | 🟡 Not in CSV — verify via Gmail search | You: Gmail search "keap" |
| Audio transcription | — | You: re-upload as transcript |
| ZW_OS_GOOGLE_FIX_v2 retire | Low priority | You: move to Drive legacy folder when convenient |
| MIS weekend-firing gates | Cosmetic | Optional |
| Command Center decision (Sheet vs Next.js) | Open | Decide later |
7a35d0a on master · Working dir: C:\Users\ztrei\OneDrive\2. Hook Street\05. 2026 BHebf7f80 on master · BOS dir: HookStreet-Business-OS/Code.js:1050-1146