✓ Data verified· as of Jun 12, 5:37 AM
Roadmap
Single source of truth · parsed from
PULSE_Roadmap_LIVE.md · last updated 2026-05-04 · built May 27, 5:52 PMOperating posture
FHG operational takeover is official.
Phase 1 Deliverables — 4/7 shipped
Success: shipped 100 · partial 60 · pending 30 (v1 heuristic)
Avg score
83
Shipped
4
In flight
3
Pending
0
#1
LIVERoutines module (/admin/routines)
15 leadership routines, click-to-complete, lazy run creation, CT scheduling
100
#2
LIVEUpdates module (/admin/updates)
Daily/weekly/monthly tabs, Kevin-only entry form
100
#3
LIVEPM Agent Gate 3 Phase 1
Endpoints + manual UI + Gmail rewire + Avid auto-close demo + /dashboard/pm ViewId
100
#4
IN FLIGHTObservability module
tracedCall() + D1 plumbing live. CoVe wired to council-runner in observation mode. /admin/observability dashboard still pending
60
#5
IN FLIGHTInjection Defense
Sandbox + pattern classifier + real CoVe verifier (gpt-4.1). Narrative-guard sanitize wired. PULSE_COVE_ENFORCE=1 pending observation
60
#6
IN FLIGHTData Integrity Guard
Source-of-truth rule live. Blackburn baseline seeded. BFC sheet sync blocked on Google Admin scope
60
#7
LIVECard UI shared spec (docs/card-spec.md)
4-zone card API used by routines, updates, PM Agent
100
Building Now — This Week
Theme: Day 1 as Freedom. Team onboarding live, roadmap tracker goes live (D1-backed), close open project roadblocks, Q2 plan Week 1 kickoff.
📌 CARRY-FORWARD — EOD Mon May 4 → resume Tue May 5
- Review + send budget email draft — Gmail draft r-3681144567022881639 to Cameron/Alan/Chelsey, cc Kassidy. Subject: "2026 Budget — new consolidated template ready, please fill". Already drafted with per-person ownership of GL ranges; Kevin reviews + sends.
- Review + merge PR #12 — sync-bfc-sheets parses consolidated layout + plist sets BFC_BUDGET_2026_SHEET_ID + create-budget-sheet-2026.js auto-places into Shared Drive. Gate 2 PASS. Note: includes one unrelated commit d579280 (Phase 2 Reports scaffold) that came along on rebase — merge as-is or split that commit before merging.
- Post-merge: launchctl reload on Mac Mini — copy plist to ~/Library/LaunchAgents/, unload + load to pick up new BFC_BUDGET_2026_SHEET_ID env var. Otherwise tomorrow's 00:30 CT sync runs without the budget Sheet ID.
- Investor packet generator — build brief — Kevin got off investor call today, sees big leverage. Two open Qs before sketch: (a) full active investor list + where it lives (D1 / Cameron's CRM / contact sheet), (b) cycle (quarterly vs monthly) + which existing file in Investor Reports 3-28-26/ represents the format to standardize on. Drive scope unlock today (drive.file + drive.metadata.readonly) makes per-investor folder routing + pre-shared multi-doc atomic delivery now possible.
- DWD scopes added to pulse-email-scanner@pulse-auth-491012.iam.gserviceaccount.com (Client ID 107396214728401193893): drive.file + drive.metadata.readonly. Any future PULSE script can now create files, search Shared Drive folders by name, move files into them, and share with leadership — no manual touch. Pattern lives in scripts/create-budget-sheet-2026.js lines ~362–417 (folder search → move → share).
Thu May 1 — FHG Takeover Day
- Leadership training program auto-starts (28-day onboarding, 7 leaders)
- Roadmap tracker wired to D1 (replaces mock data on /admin/roadmap-preview → /admin/projects)
- Update narrative roadmap (this file — 11 days stale)
- Inbox/PM/Council architecture design awaiting Kevin sign-off (8 open decisions)
Fri May 2
- Q2 Plan Week 1 items: Morning Huddle prototype, Leadership Scorecard design
- Verify training program Day 1 emails + Slack tips sent correctly
- Close open autopilot briefs (5 ready, 4 draft on Drive)
Sat-Sun — Buffer
Mon May 5 — Q2 Kickoff
- Morning Huddle v1 live
- Resolve Kassidy's 1-year goal, Alan's personal priority (open Q2 plan questions)
- Phones: FDCPA compliance review status check (Travis)
Tue-Wed May 6-7
- Leadership Scorecard D1 schema + API
- RM license field capabilities check (Q2 plan dependency)
- Routines expansion scoping
Thu May 7 — Refacing day (in flight)
- Meetings tab fixes — save persistence (useEffect draft-stomp on sibling save), WWW slot pre-fill wiring, meeting-card date rendering, canonical Petra agenda subtexts on all 5 weekly boxes, empty-correction skip in override read loop (lets users revert to live by saving empty)
- Sidebar refactor (lib/roles.ts) — TEAM_NAV (6 items: Inbox/Meetings/Petra/Operations/Maintenance/Reports), OWNER_NAV (Kevin + Cameron get +Home +Admin), Petra coach-admin retains broad nav. NAV_ITEMS coach.label → 'Petra'.
- Inbox-first landing (middleware.ts) — Chelsey/Kassidy/Dionna/Travis/Krisha → Inbox, Cameron/Alan → Reports, Kevin → Home, Petra → Coach.
- Admin sub-nav extended — Council, Roadmap, Finance, Bookkeeping, CapEx, Compliance, Investments now reachable from /dashboard/admin strip.
- 8 PULSE Coach prompt templates at next/src/lib/coach-prompts/{role}.md — specs only, no cron yet. Single Sonnet 4.6 daily; Opus 4.7 on quarterly + hard delegation.
- Finance protocol routines — 10 rows in D1 migration (finance-protocol-routines-2026-05-07.sql + rollback). 5 daily/weekly fire on existing engine; 5 monthly use D-2/D-1/D0/D+1/D+3 close-relative encoding (engine extension queued).
- + 7 more
Key Dates — Next 14 Days
| May 1 | FHG operational takeover (formal) | ✅ TODAY — BFC agreement ends |
| May 1 | Leadership training program starts | ✅ Auto-started — 28-day program |
| May 5 | Q2 Plan Week 1 kickoff | 🟡 Monday |
| TBD | Payroll migration (OneDigital PEO) | Final handoff item |
| Jul 15 | Q2 Plan ends | 🟡 11 weeks |
1.
[Operations]
Phone system rollout to remaining 28 communities (after Apr 21-22 pilot)
2.
[Marketing]
Marketing agent for Kevin (fills leadership seat gap)
3.
[CapEx]
CAPEX agent for Alan (fills leadership seat gap)
4.
[Maintenance]
Work Orders + Receipts — once RM permissions ticket clears
5.
[Finance]
RM Loans + Budgets — awaiting Sastry at RM support (403)
6.
[Platform]
Home KPIs wired to live D1 data
7.
[Platform]
Inbox Phase 3 — stop dual-write (follows once V2 soaks ≥3 days clean)
8.
[Platform]
pulse@ reply feature (gmail.send scope + reply logic)
9.
[Leadership]
Onboarding answers Phase 2
10.
[Quality]
Response-monitor tracker (last P1 gap)
11.
[Quality]
P2 gap analysis — 13 remaining
12.
[Quality]
P3 gap analysis — 12 remaining
13.
[Infra]
Single-machine ownership for scheduled work (Level 2 — this week, ~2.5 hr) — (a) Disable iCloud Documents+Desktop sync on BOTH machines via System Settings → Apple ID → iCloud → iCloud Drive → Options → uncheck "Desktop & Documents Folders" → choose "Keep a Copy". This is the root cause of ~/Documents/pulse being silently iCloud-synced between laptop and Mac Mini, producing 329 duplicate node_modules + sync-conflict * 2* files. (b) Delete laptop's ~/Documents/pulse ghost copy (only after iCloud unlink confirmed — otherwise propagates to Mac Mini). Laptop primary repo stays at ~/pulse. (c) Mac Mini owns ALL com.freedomgp.pulse.* launchd jobs; launchctl unload every PULSE plist on the laptop; laptop becomes editor-only per original CLAUDE.md rule. (d) Mac Mini hourly git fetch && git pull --ff-only origin main || slack 'drift detected'. (e) Add [[ $(hostname) == "Kevins-Mac-mini.local" ]] || exit 1 guard to top of every agent script. (f) Nightly drift Slack alert (HEAD vs git ls-remote). _Why:_ May 4 audit found Mac Mini 265 commits behind, dirty tree, gate-blocked Builder burning ~$1-3/night on runs that can't deploy. Root cause: iCloud Documents sync was silently active (despite belief it was nuked) + both machines running identical launchd plists + no drift detection.
14.
[Infra]
Move scheduled agents off Mac Mini to GitHub Actions / CF Workers Cron (Level 3 — deferred, ~8 hr) — kills the "which machine" question entirely. Mac Mini stays only for things that need a local process (RM API session-bound calls). Adds free reproducibility (CI logs, version-pinned env). _Trigger to revisit:_ Level 2 holds up for 30 days OR we add 3+ new scheduled agents OR Mac Mini hardware fails.
15.
[Platform]
Inbox fetchInbox AbortController — GPT-4o review flagged race condition: rapid Just-me/Everyone toggling or rapid role-switch can apply a stale fetch result on top of a fresh one. Not normal use, but a 30-min hardening pass. Wrap fetch in AbortController + request counter; latest wins.
16.
[Quality]
Auto-fix agent — was dead 2026-05-14 → 2026-05-26 (plist ProgramArguments resolved to MODULE_NOT_FOUND for 12 days; /tmp/pulse-logs-autofix-agent-error.log last failure 2026-05-26 13:47). Restored as of 2026-05-27 09:09 — all 4 sources polling, returning 0 candidates. _Three follow-ups Kevin queued 2026-05-27:_ (a) Backfill the outage window — re-query Sentry/Langfuse/pulse_issues/GH Actions for 2026-05-14 → 2026-05-26 and re-feed missed candidates (currently nothing in pulse_autofixes for that range). (b) Validate Sentry filter isn't too narrow — current scope is TypeError/ReferenceError/SyntaxError/RangeError/AssertionError in scripts/ or next/src/ (per autofix_phase2_shipped.md); confirm against actual Sentry issue list before extending quarantine past 2026-05-21. (c) Surface liveness on /admin/auto-fixes — header strip showing "Last successful poll: <ts> · last 4 sources: sentry 0 / d1 0 / gh 0 / langfuse 0" so dormancy stops looking like brokenness. Add a "stale > 30min" red banner. _Effort:_ ~1 hr (a) + ~30 min (b) + ~45 min (c).
17.
[Quality]
Ingestion-side department/community tagging — May 27 backfill closed the historical hole, but new pm_tasks from meetings and manual sources still arrive untagged. Harden the ingestors (gmail, meetings, manual, slack) to populate department from owner default + title keywords and community_id from title regex at write time. Reuse the heuristics from scripts/backfill-pm-tasks-tags-2026-05-27.mjs. _Effort:_ ~2 hr. _Trigger to revisit:_ untagged % climbs back above 30% on a sample of newly-created tasks.
Editing the roadmap
This page is a read view. To add an idea, move something to On Deck, or mark shipped, edit
01 - Corporate/Pulse/PULSE_Roadmap_LIVE.md from Claude Code, the Claude mobile app, or Cowork desktop. Changes land the next build.