Hook Street Capital — Systems Architecture
Last updated: 2026-05-12 session 33 · Locked at the cross-workbook handoff. Living doc — overwrite when scope changes.
Purpose: Single doctrine page. What lives where. Who owns what surface. How the pieces talk.
The two-workbook split (locked 2026-05-12)
| Surface | Workbook | Scope | Owner | Migration target |
|---|---|---|---|---|
| Financial OS | Monthly Obligations.xlsx (31 tabs) |
Canonical financial-truth source. Debt, obligations, cashflow, STR signals, Wife_View, Sources_&_Provenance. Sam-only by default. | Sam | Google Sheets (new), bound Apps Script (new) |
| Operating OS | HookStreet_Operating_OS_v1.xlsx (12 tabs; recommended rename Hookstreet_Operations.xlsx) |
Forward-looking operating map. STR + Mildred + Hookstreet Services + briefings + action queue + calendar + people. Mildred reads CALENDAR_RAW + PEOPLE. | Sam | Google Sheets (new), same Apps Script project as Financial OS |
Rule: the two workbooks stay separate. Cross-references go through Apps Script reads, not formula links. Financial truth NEVER bleeds into Operating OS. Operating data NEVER bleeds into Financial OS.
The single Apps Script project (v3, post-migration)
ONE script project, bound to the new Financial OS Sheet, contains BOTH:
- Financial functions (~50 ported from v1
1_cgriwCQ...Code.js):sendFinancialDigest(renamed from v1DAILY_SEND),WEEKLY_SEND(with BIWEEKLY folded in),MONTHLY_SEND,WIFE_SEND,DEBT_SUMMARY_SEND, data extractors, email renderers, calendar parsers, alerting, utilities, logging. - Operating functions (4 from Operating OS
APPS_SCRIPTtab):syncCalendar,scanEmailForActions,sendOpsDigest(renamed fromsendDailyDigestto avoid colliding with Financial'ssendFinancialDigest),markDone.
Rule on rename collisions:
- Different scopes → different names (sendOpsDigest vs sendFinancialDigest)
- Same scope → one wins, drop the other (syncCalendar replaces v1's refreshCalendarSummary_; if Financial needs a calendar summary, build a derived view on top of CALENDAR_RAW)
Dropped from migration: ~68 of 118 v1 functions are utility/migration cruft. Don't carry forward. List in outputs/2026-05-12_00-10_audit_monthly-obligations-v1-vs-excel.html § Apps Script.
Sheet structure conventions (v3)
Tables for every Apps-Script-addressable range. Obligations[Balance] survives migration; B2:B44 does not.
| Workbook | Table count | Tables |
|---|---|---|
| Financial OS | 9 | Provenance, ActionList, Obligations, AmazonOrders, Installments, SavingsGoals, TripsTable, ArchiveLog, SnowballPlan |
| Operating OS | 7 | tbl_CalendarRaw, tbl_ActionTracker, tbl_WaitingOn, tbl_MeetingPrep, tbl_Projects, tbl_People, tbl_StaleArchive |
DASHBOARD tab in Operating OS is NOT a Table — has 5 sections (rows 4/12/19/34/48). Address by absolute range or named range only.
Purge before migration:
- All _xlfn.* named ranges (Excel-internal fallbacks; resolve to #REF! in Sheets)
- All v3_* orphan named ranges (broken refs from prior migration attempts)
Uniform format spec: title row A1 merged #2C3E50 white bold 14pt; subtitle row A2 merged #F4F1EA italic #5D6D7E 11pt; table-header row #34495E white bold; table style TableStyleMedium2 banded rows.
Tab color → audience → sharing mechanism
| Color | Audience | Mechanism | Notes |
|---|---|---|---|
| Grey | Sam-only | No share | Default for sensitive data |
| Yellow | Wife (Chanie) | Separate Sheet + IMPORTRANGE | Privacy fails closed, not open. Wife_View NEVER lives in same Sheet. |
| Blue | Mildred | Separate Sheet + IMPORTRANGE OR Protected Range | STR ops + Hookstreet Services + reimbursements only. NEVER family finances. |
| Green | All (visible to anyone Sam shares the Sheet with) | Standard share | Use sparingly |
| Purple | Meta / system | Internal | Usage_Guide, Cross_Workbook_Briefing, Claude logs |
Cross-system data flow (v3, post-migration)
[v1 Sheet 1L_rxCSOnc...] ← retire after 30-day parallel-shadow
↓
[Financial OS — new Sheet] ← canonical financial truth
↓ (read-only via Apps Script)
[Operating OS — new Sheet] ← reads cashflow signals + debt KPIs
↓ (sendOpsDigest 7 AM)
[Sam's inbox] ← morning ops digest
+
[Financial OS sendFinancialDigest 7 AM] → Sam's inbox
[Wife's separate Sheet] ← IMPORTRANGE from Financial OS Wife_View tab
↓
[Chanie's view] ← 5 calm KPIs, no debt detail
[Mildred's separate Sheet] (future) ← IMPORTRANGE from Operating OS subset
↓
[Mildred's view] ← STR vendor queue + reimbursements + her direct asks
The migration roadmap — COMPRESSED to THIS WEEK (locked 2026-05-12 session 34 PM)
Sam ask 5/12 PM voice: "No way it's gonna take six weeks. I'll be done like in a bit this week."
Original 6-7 week plan collapsed to Wed 5/13 → Tue 5/20 (8 days). Trade-off: 5-day verification window instead of 30. Higher cutover risk; Sam owns the trade-off explicitly.
| Day | Phase | What lands | Owner |
|---|---|---|---|
| Wed 5/13 | Phase 0 + Phase 1 start | Workbook lock (fix Chanie income to $30K+/mo · fix Jewish calendar dates · ack 6th zero-bal card). New Google Sheet "Hook Street Financial OS v3" + "Hook Street Operating OS v3". Port first 15 tabs. | Sam answers Q5 / Q8 · Claude builds |
| Thu 5/14 | Phase 1 complete | All 37 + 13 tabs ported. Named Tables (9 + 7). Tab colors. Sharing_Map → Protected Ranges. Wife_View as separate Sheet w/ IMPORTRANGE. | Claude · Sam spot-checks 3 KPIs |
| Fri 5/15 | Phase 2 — Apps Script v3 | Single bound project. ~50 v1 functions ported · 4 Operating OS functions integrated · renames (sendFinancialDigest / sendOpsDigest / syncCalendar replaces refreshCalendarSummary_) | Claude · Sam authorizes OAuth scopes once |
| Sat 5/16 | Phase 3 — Verification (compressed) | New triggers fire to sam+v3@hookstreetcapital.com. Diff against v1 output. Fix any drift same day. |
Auto · Sam glances at alias |
| Sun 5/17 | Phase 3 cont. | 5th day verification. Lock all triggers. Final diff. | Auto |
| Mon 5/18 | Phase 4 — Cutover | Disable v1 BOS triggers (clasp 1_cgriwCQ). Switch v3 to-line from sam+v3@ → sam@. First Morning Brief fires automatic 9:55 AM (matches Sam's "by next Monday" deadline). |
Claude executes · Sam confirms |
| Tue 5/19 | Phase 4 cont. + Mildred sync 10:38 AM | Mildred walkthrough of Operating OS v3 + STR_Brief. She starts using v3 immediately. | Sam + Mildred |
| Wed-Fri 5/20-22 | Phase 5 — Decommission | Archive v1 Sheet (rename ARCHIVED — Monthly Obligations v1 — 2026-05, revoke editor access, leave read-only). Delete v2 BOS triggers (clasp 1ROnmAAhtTYE). Final share audit. |
Claude · Sam confirms |
Total Sam-time: ~3 hrs across the week (Q5 answer · OAuth click · 3 spot checks · Mildred sync).
Total Claude-time: ~14 hrs (compressed from 18-20).
Acceptance test for cutover: 5 days of clean verification with zero KPI drift on the alias address. (Was: 30 days — Sam compressed.)
Code locations
| Surface | Local path | GitHub | Clasp script ID |
|---|---|---|---|
| Financial OS v1 (production until cutover) | HookStreet-Business-OS/sheets/src/Code.js |
zee78900/hookstreet-bos-sheets |
1_cgriwCQ... |
| Financial OS v2 (orphan, will retire) | HookStreet-Business-OS/sheets-v2/ |
not in git | 1ROnmAAhtTYE... |
| Financial OS v3 (TARGET, not yet built) | TBD | TBD | TBD (single project bound to new Sheet) |
| Operating OS v1 | inside HookStreet_Operating_OS_v1.xlsx APPS_SCRIPT tab |
not in git yet | not yet bound |
| Operating OS v3 | TBD | TBD | folded into Financial OS v3 single project |
| MIS production | MIS/MIS-v1-script/ |
zee78900/MIS |
1yBMztL4... |
| MIS sandbox | MIS/src/ |
zee78900/MIS |
1r9vWL1Ds... |
| CM Invoice (Mom's tool) | CM_Invoice_System/ |
zee78900/CM_Invoice_System |
1t4DzAQQ... |
| PWA endpoint | archive/2026-05-12_tilde-folder/~hookstreet-workspace/pwa-api-script/ |
(private workspace repo) | (separate clasp) |
Sources
- v1 vs Excel deep audit:
outputs/2026-05-12_00-10_audit_monthly-obligations-v1-vs-excel.html - Cross-workbook handoff:
docs/briefings/2026-05-12.md - Trading rules extracted:
docs/TRADING_RULES.md - v1 sharing audit:
outputs/v1-sharing-audit.json - 9 archived rows:
outputs/2026-05-12_v1-archived-rows.csv - v1 secrets grep:
outputs/v1-secrets-grep-result.md - MIS canonical architecture:
docs/MIS_FSE_ARCHITECTURE.md