π Marco Launch Cockpit
Overnight no-mock sprint in motion Β· Monday target 2026-06-08 (~2 days) Β· outreach LOCKED off
mainπ What Marco needs to do
π Workstream progress
main Β· proof: LIVE: DMARC/SPF/DKIM verified; RESEND_WEBHOOK_SECRET set + Svix reply capture verified on prod (7bb3ebb); Anna sender (13f5c23); 2 controlled test sends; lead backup (9,304). Β· upd 2026-06-05main Β· proof: LIVE /agents + /agents/team (200); 19-role roster, CEO id=alex (cf43476). Β· upd 2026-06-05main Β· proof: LIVE /agents/inbox + Actions tab + /api/actions/{create,list,update}; createβassignβstatusβupdate verified on prod (2026-06-05). Β· upd 2026-06-05main Β· proof: LIVE /airbnb-leads; dedicated Airbnb_STR_Leads tab (19 cols) created; import maps + dedupes (duplicate_key) into it + feeds Camila; smoke test passed (2026-06-05). Β· upd 2026-06-05main Β· proof: LIVE: /permits reads mll_solar_permits (2d2793e); shows 200 of ~2,036; 17/17 tests; read-only Β· upd 2026-06-05main Β· proof: LIVE /partners/map; Partners CRM CONNECTED (22,620 partners, 2,500 markers). NEW 2026-06-05: visual TRADE grouping β per-trade chips with counts + colored icon badges (roofer/HVAC/electrician/general/pool/solar/other), filter by trade, color-pins-by-trade. Β· upd 2026-06-05main Β· proof: Done 2026-06-05: backed up all 9,304 leads to Leads_Backup_2026-06-05_1753, flagged 133 duplicates (pipeline_status=duplicate; NOTHING deleted), 69 groups in Leads_Dedupe_Report, 9,171 kept (winner = most-enriched). Outreach now SKIPS duplicates. Β· upd 2026-06-05local Β· proof: Created 2026-06-06: ~/lgcy-ai-backups/lgcy-ai-operating-archive-2026-06-06 β sanitized repo snapshot (303 files, secrets redacted) + 11 docs (system/deploy/bugs/agents/data/camila/no-mock/exit/runbook/sensitive/monday). Secret scan CLEAN; redacted a committed Google-key TEMPLATE (no real key body). Outreach verified LOCKED off. 10 overnight-sprint backlog tasks filed to Action Inbox. Β· upd 2026-06-06main Β· proof: NEW 2026-06-06: /reports + /api/reports LIVE β pull real reports (lead totals/segments/dedupe/scores, permit by-year + battery + valuation, partner by-trade, Camila scoring, outreach-lock, Monday readiness, mistakes log). Real data only; never invents phone/email. Β· upd 2026-06-06main Β· proof: INSTALLED 2026-06-06 (lib/owner-governor, owner-audit-log, owner-guards): hard-deny secrets/suppression/fake-data; EXACT owner-approval-phrase required for sends; paid calls gated. Wired into outreach/send, outreach/send-approved, outreach/send-sms, partners/send (approval-gated) + leads/enrich, leads/solar-enrich (paid-gated) + leads/import (audited). Self-test /api/owner-governor/test = 8/8. Β· upd 2026-06-06main Β· proof: LIVE 2026-06-06: /permits/enrichment + /api/permits/enrichment. Table permit_crm_enriched_leads (40 cols). Matching tiers, enrichment_score 0-100, dedupe, email_outreach_ready + phone review_required, CSV export. Self-test 10/10; preview 0 writes; Owner-Governor enforced. PV permits = Camila LEARNING data (PV->CRM overlap 0); PROSPECT permits = outreach targets (roof/electrical/EV/pool/HVAC/ADU/new-construction) per docs/permit-prospect-strategy.md. No sends. Β· upd 2026-06-06main Β· proof: CORRECTED (Apify, not AWS Amplify) 2026-06-06: dedicated actor folder actors/permit-crm-public-data-normalizer (package.json, Dockerfile, .actor/actor.json, .actor/input_schema.json, src/main.js β normalize-only, dry_run default, output to dataset). /api/apify/test enhanced (free /users/me; token_exposed=false, actor_run_executed=false, paid_call_executed=false). Owner-Governor: APIFY_TEST_CONNECTION/LIST allowed, APIFY_ACTOR_RUN/DATASET_IMPORT/ENRICHMENT_RUN approval-gated; /api/apify/search paid run now governor-gated. No actor run, no paid call. Β· upd 2026-06-06main Β· proof: Deployed to main (78dd9bd); synced to 2026-06-05 truth. Β· upd 2026-06-05feat/scheduling-portal Β· proof: Branch exists locally (unmerged) Β· upd 2026-06-04feat/partner-map Β· proof: Map + contractors API built (awaiting review) Β· upd 2026-06-04feat/commercial-solar-outreach Β· proof: UX rebuild committed Β· upd 2026-06-04main Β· proof: CORRECTED 2026-06-06: camila_solar_positive_permits re-filtered to PV-ONLY = 13,982 Photovoltaic approvals (~13,099 unique homes); removed 2,429 sub-permits (electrical/mechanical/combination-building) that the first pass over-counted as "16,411". By APPLICATION year: 2022=0 + 2023=57 (PARTIAL β those PV approvals are in SD 2022/23 issue-files that return HTTP 403), 2024=6157, 2025=5962, 2026=1806 (year in progress). YEAR + MONTH charts live (/agents/camila); APN 100%. ENRICHMENT PARKED β 0 enriched property records (beds/baths/sqft need SanGIS registration). Positive-only; no prediction. Β· upd 2026-06-06π How βLaunch Completionβ is calculated
Proof scope: Overnight: freed ~9.3GB disk; Camila positive-only baseline + by-year bar graph LIVE; Report Agent v1 LIVE; 11-doc operating archive created; dedupe/scoring/partner-grouping verified. OUTREACH_ENABLED OFF β 0 sends. Parked (Action Inbox): SD 2023 permit backfill, property enrichment, autonomous execution. Statuses are set from real proof only β rows without proof are BLOCKER or UNKNOWN, never green.
Executive Readiness
Launch queue (5/5) live on production.
Email auth + webhook/reply capture + kill switch + lead backup DONE. First batch NOT sent β awaiting Marco go.
Outbound ready; no automated end-to-end money loop yet.
Critical Blockers
P0 / P17 verified4 partial1 blocker| P | Blocker | Status | Owner | Next action | Proof | Approval |
|---|---|---|---|---|---|---|
| P0 | DMARC for marcoruta.com | VERIFIED | Marco (DNS) | Done | DMARC TXT live (verified 2026-06-05) | β |
| P0 | SPF authorizes Resend | VERIFIED | Marco (DNS) | Done | SPF includes Resend (verified 2026-06-05) | β |
| P0 | DKIM verified in Resend | VERIFIED | Marco (DNS) | Done | Resend domain verified, DKIM CNAMEs live (2026-06-05) | β |
| P0 | RESEND_WEBHOOK_SECRET + Svix verification | VERIFIED | Alex | Done | Secret set in prod; signed Svix event β 200, tampered β 401 (2026-06-05, commit 7bb3ebb) | β |
| P1 | Inbound reply capture | VERIFIED | Alex | Done (verification fixed) | Svix verifier accepts real Resend events on prod (2026-06-05) | β |
| P1 | Lead/CRM data backup | VERIFIED | Alex | Done | leads-backup-2026-06-05.json β 9,304 leads (11.74 MB) | β |
| P1 | Agent faces missing on production site | PARTIAL | Alex | Compare /agents prod vs staging, fix assets | Agent Company deployed; live faces not re-verified | β |
| P1 | Booking PR not opened/merged | BLOCKER | Marco approves merge | Open PR from feat/scheduling-portal-clean | Branch exists (unmerged) | MARCO |
| P1 | Full production env NAME table (Vercel read) | PARTIAL | Marco (Vercel read) | Marco reads Vercel env names for the full table | Behaviorally verified in prod 2026-06-06: admin login + PORTAL_PASSWORD set, outreach gate fail-closed (0 sends), Svix webhook + Sheets working. Full Vercel NAME table still needs Marco Vercel read. | β |
| P0 | Rollback plan | VERIFIED | Alex | Optional: fill deployment IDs | Runbook committed: docs/rollback-plan.md (ac860c4); code-grounded kill switch | β |
| P1 | Campaign Engine is a MOCK prototype (openly labeled) | PARTIAL | Alex | Creation now files REAL Action Inbox tasks; lead/outreach/reply pipelines stay MOCK projections until a connector is approved (outreach stays OFF) | New 2026-06-06: /agents/campaigns "New campaign" creates real campaign + agent tasks in the Action Inbox; pipelines still labeled MOCK | β |
| P2 | Improve Agents tabs mostly static/mock content | PARTIAL | Alex | Wire Mistakes/Needs-info/Lessons tabs to the real /mistakes + Action Inbox, or label static; Action Inbox task filed | Static; the REAL mistake/work log is the separate /mistakes page | β |
Email Infrastructure
11 verified2 partial| Field | Status | Value | Proof |
|---|---|---|---|
| Sending domain | VERIFIED | marcoruta.com (verified) | Resend domain verified (2026-06-05) |
| DMARC | VERIFIED | Live | DMARC TXT published (2026-06-05) |
| SPF | VERIFIED | Authorizes Resend | include:_spf.resend.com live (2026-06-05) |
| DKIM | VERIFIED | Verified | Resend DKIM CNAMEs verified (2026-06-05) |
| From name | VERIFIED | Configured | SEND_FROM_NAME present |
| From email | VERIFIED | Configured | SEND_FROM_EMAIL present |
| Outreach sender | VERIFIED | Anna <anna@marcoruta.com> | Assigned setter (not owner); writes/signs as Anna; OUTREACH_FROM_* (13f5c23) |
| Reply-to | PARTIAL | Default | No dedicated var; replies captured via webhook |
| Inbound routing | VERIFIED | Reply capture verified | Svix events accepted on prod (2026-06-05) |
| Webhook secret | VERIFIED | Set in prod | Signed Svix β 200, tampered β 401 (2026-06-05) |
| CAN-SPAM address | VERIFIED | Configured | SEND_PHYSICAL_ADDRESS present |
| Outbound deliverability | VERIFIED | Proven | Two controlled test sends, messageId recorded (2026-06-05) |
| Unsubscribe | PARTIAL | Route exists (/api/unsubscribe) | List-Unsubscribe + footer applied; end-to-end unproven |
Production vs Staging Proof
Agent pages5 verified| Page | Status | Proof |
|---|---|---|
/agents | VERIFIED | LIVE on prod (200) β Agent Company deployed (cf43476) |
/agents/team | VERIFIED | LIVE on prod (200) |
/agents/war-room | VERIFIED | LIVE on prod (200) β 2026-06-05 |
/agents/onboarding | VERIFIED | LIVE on prod (200) β 2026-06-05 |
/agents/learning | VERIFIED | LIVE on prod (200) β 2026-06-05 |
Lead Quality Gate
15 blockerCampaign Safety Gates
11 verified2 partial1 blockerBranch / PR Tracker
2 verified2 partial| Branch | Purpose | Status | Proof |
|---|---|---|---|
main | Production (launch queue + Svix webhook + Anna sender + Airbnb/STR) | VERIFIED | Deployed 2026-06-05; /agents, /airbnb-leads, /permits, /partners/map all 200 |
fix/svix-webhook-verifier | Resend/Svix reply capture | VERIFIED | Merged to main (7bb3ebb); verified on prod |
feat/marco-launch-cockpit | Live-status cockpit | PARTIAL | Built; not merged to main |
feat/scheduling-portal-clean | Booking / scheduling portal | PARTIAL | Branch exists; PR not opened |
Env Var Tracker
local .env.local (names only)10 verified2 partial3 blocker| Variable | Local | Note |
|---|---|---|
RESEND_API_KEY | PRESENT | Present (send) |
RESEND_WEBHOOK_SECRET | PRESENT | Set in prod β verified via signed Svix 200 (2026-06-05) |
SEND_TEST_MODE | PRESENT | Present |
SEND_TEST_EMAIL | CHECK | Used for test sends; confirm in prod before batch |
OUTREACH_ENABLED | CHECK | Unset = OFF by design (master gate fail-closed). Flip to true only on Marco go. |
ANTHROPIC_API_KEY | PRESENT | Present |
GOOGLE_SHEET_ID | PRESENT | Present |
GOOGLE_SERVICE_ACCOUNT_EMAIL | PRESENT | Present |
GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY | PRESENT | Present |
SEND_PHYSICAL_ADDRESS | PRESENT | Present (CAN-SPAM) |
SEND_FROM_EMAIL | PRESENT | Present |
SEND_FROM_NAME | PRESENT | Present |
BLOB_READ_WRITE_TOKEN | MISSING | Missing β only needed for Blob avatar uploads |
TELEGRAM_BOT_TOKEN | MISSING | Missing β needed for reply/approval alerts |
TELEGRAM_CHAT_ID | MISSING | Missing |
Launch Tests
9 verified4 unknownProof Standard
Every blocker and test carries: Status Β· Owner Β· Proof required Β· Current proof Β· Next action Β· Risk.
- VERIFIED Β verified with recorded proof
- PARTIAL Β configured but not proven end-to-end
- BLOCKER Β known blocker, not done
- UNKNOWN Β cannot be verified from inside the app today