Morning QA

every card waiting on your input · single source = brain public.tasks + gates · generated 2026-08-04 10:49 UTC · preview build
The morning QA block (~1 hour, your sharpest focus). One surface, every card waiting on you. Per card, three moves:
  1. 80/20 first — should this exist at all? Kill before you polish.
  2. Dump context — voice/type a brain dump onto the card (capture context).
  3. Verdictapprove / redo / kill.
Every command below is one-click copyable — paste into your terminal / Claude. A static page can't write the brain; verdict.py does.
5
QA queue
60
Decisions
5
Your lane
5
Aging >48h

1 · QA queue

5every parked card — dump context, then rule: approve / redo / kill
Decide: relight the B2B ad stack (deliberately paused since Jul 22-23)aging
80/20 first: Should this exist at all? Kill it before you polish it.
Done when: Truth as of Aug-2: the B2B stack (R4 / R2 / CTRL + AO 4-magnet) is not broken - Akash paused it deliberately Jul 22-23 during the rail freeze. Meta insights sync healed Jul-27, standing order is ask-before-relight. The old framing ('stopped spending Jul 21' as a failure) was stale. Separately, the CL Dallas client campaign (B2C) is LIVE since Aug-1 at $150/day - that one needs nothing. The decision on this card: relight the B2B stack or keep it dark while outbound rebuilds.
No proof note/url attached yet.
akashWaitingneeds: Akash re-enables the paused campaign (spend/activation decision).waiting 7dverdict: keep
No activity-trail entries yet.
(a) Dump context — voice/type your brain dump
capture context "decide: relight" "…your context / what you were thinking…"
(b) Verdict — pick one
verdict "decide: relight" approve
verdict "decide: relight" redo "what to change"
verdict "decide: relight" kill "why it should not exist"
Approve moving the sign-up question higher on the landing pageaging
80/20 first: Should this exist at all? Kill it before you polish it.
Done when: At least one form question shows without scrolling on both phone and desktop, after Akash approves the preview. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Visual LP change needs Akash's preview approval. * Internal id: ec792356-ab4e-4143-9827-7ea18fcb9677
No proof note/url attached yet.
akashWaitingneeds: Visual LP change needs Akash's preview approval.waiting 7dverdict: keep
No activity-trail entries yet.
(a) Dump context — voice/type your brain dump
capture context "approve moving" "…your context / what you were thinking…"
(b) Verdict — pick one
verdict "approve moving" approve
verdict "approve moving" redo "what to change"
verdict "approve moving" kill "why it should not exist"
Approve small fixes to the live application form so we can track where leads come fromaging
80/20 first: Should this exist at all? Kill it before you polish it.
Done when: The tracking fields fill in on more than 9 of every 10 new applications. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Editing the one live application form needs Akash's okay. * Internal id: 14a06961-0d98-4038-a3ee-998494ad5e04
No proof note/url attached yet.
akashWaitingneeds: Editing the one live application form needs Akash's okay.waiting 7dverdict: keep
No activity-trail entries yet.
(a) Dump context — voice/type your brain dump
capture context "approve small" "…your context / what you were thinking…"
(b) Verdict — pick one
verdict "approve small" approve
verdict "approve small" redo "what to change"
verdict "approve small" kill "why it should not exist"
Turn on call recording in the CRM (needed to coach setters)aging
80/20 first: Should this exist at all? Kill it before you polish it.
Done when: A test call records and can be played back. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: GHL UI setting change - workflow-builder/UI work is Akash-only. * Internal id: ef46964c-a5ab-4099-9502-1e22366076f6
No proof note/url attached yet.
akashWaitingneeds: GHL UI setting change - workflow-builder/UI work is Akash-only.waiting 7dverdict: keep
No activity-trail entries yet.
(a) Dump context — voice/type your brain dump
capture context ef46964c "…your context / what you were thinking…"
(b) Verdict — pick one
verdict ef46964c approve
verdict ef46964c redo "what to change"
verdict ef46964c kill "why it should not exist"
Confirm the job value for each trade (this sets the target cost per lead)aging
80/20 first: Should this exist at all? Kill it before you polish it.
Done when: Each trade has a confirmed job value on record, with no made-up default. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Akash must confirm each trade's ticket; unknowns stay 'unknown'. * Internal id: 605b41fe-b301-4892-b66d-69250a0a3b64
No proof note/url attached yet.
akashWaitingneeds: Akash must confirm each trade's ticket; unknowns stay 'unknown'.waiting 7dverdict: keep
No activity-trail entries yet.
(a) Dump context — voice/type your brain dump
capture context 605b41fe "…your context / what you were thinking…"
(b) Verdict — pick one
verdict 605b41fe approve
verdict 605b41fe redo "what to change"
verdict 605b41fe kill "why it should not exist"

2 · Decisions & approvals

60audit + gate items (excludes the waiting cards above) — ★ = 80/20 default
1 Monday cash check-in MISSED its deadline - no completion heartbeat for monday-cash-check in the last 8h. Fix: work the Monday cash-check card on the agent board, or run the legacy monday-cash-check steps.needs you
Why it's a must
  • Source gate: sp-weekend-checkin-missed · severity critical
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
2 CASH TRIPWIRE: total cash $1,150.57 is under $1,500 - turn Meta ads OFF today.needs you
Why it's a must
  • Source gate: sp-cash-tripwire · severity critical
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
3 Lead stuck in NEEDS-REVIEW with no hand-off: Rhonda Darden (+15624802676) — lead is 23.6h old and still unhandled. The needs-review branch notifies nowhere; open the contact card and push the transfer.needs you
Why it's a must
  • Source gate: sp-lead-needs-review · severity critical
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
4 Lead stuck in NEEDS-REVIEW with no hand-off: Fiona McNamara (+12149912554) — lead is 18.4h old and still unhandled. The needs-review branch notifies nowhere; open the contact card and push the transfer.needs you
Why it's a must
  • Source gate: sp-lead-needs-review · severity critical
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
5 Lead stuck in NEEDS-REVIEW with no hand-off: Bobi Boyd Williams (+12142130975) — lead is 17.8h old and still unhandled. The needs-review branch notifies nowhere; open the contact card and push the transfer.needs you
Why it's a must
  • Source gate: sp-lead-needs-review · severity critical
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
6 Hand-off is running slow: it takes 110996.8 seconds (p95) to get a ready lead out the door, against a 60-second target. Last 7 days, 11 sends, typical 629.6s, worst 183893.9s. Check the instant push rail (trigger -> pg_net -> drain).reference only
Why it's a must
  • Source gate: sp-transfer-latency-p95 · severity warning
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
7 Daily huddle + weekly scorecard render looks dead — last ran Aug 02 10:31 UTC (26.5h ago), expected within 26h. Trigger: launchd com.stpierre.scorecard-huddlereference only
Why it's a must
  • Source gate: scorecard-huddle · severity stale
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
8 Finance / cockpit / sales / CX HTML render chain looks dead — last ran Aug 02 10:49 UTC (26.2h ago), expected within 26h. Trigger: launchd com.stpierre.finance-room-renderreference only
Why it's a must
  • Source gate: finance-room-render · severity stale
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
9 Credential NOT COVERED by the health check: n8n/stpierre/capture-ios-webhook-secret (header_auth_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:n8n/stpierre/capture-ios-webhook-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
10 Credential NOT COVERED by the health check: linear/stpierre/api-key (api-key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/api-key · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
11 Credential NOT COVERED by the health check: linear/stpierre/webhook-signing-secret (hmac_signing_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/webhook-signing-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
12 Credential NOT COVERED by the health check: stpierre-pipeline-ops/stpierre/ops-key (shared_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:stpierre-pipeline-ops/stpierre/ops-key · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
13 Credential NOT COVERED by the health check: dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) (webhook_url). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
14 Credential NOT COVERED by the health check: dripjobs/levelking/dan-portal-login (password). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking/dan-portal-login · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
15 Credential NOT COVERED by the health check: dripjobs/levelking/DripJobs API key (Level King Pro) (api_key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking/DripJobs API key (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
16 ZZ LiveFire Test was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
17 Akash SelfTest InstantUnpark was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
18 Akash SelfTest QcClean was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
19 ZZ InstantSend Test was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
20 ZZ TriggerProof Test was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
21 ZZ Retest2 Proof was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
22 Akash SelfTest Lane2Unblock was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
23 Akash SelfTest E2E was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
24 Akash SelfTest was already handed to the client on the ghl_sms rail — nothing re-sent.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
25 Hand-off is running slow: it takes 161345.4 seconds (p95) to get a ready lead out the door, against a 60-second target. Last 7 days, 12 sends, typical 10693.6s, worst 183893.9s. Check the instant push rail (trigger -> pg_net -> drain). Heads up: ready_to_transfer stage events are not live yet (WS1), so this measures transfer-seed -> sent and still includes leads rescued out of the old parked backlog.reference only
Why it's a must
  • Source gate: sp-transfer-latency-p95 · severity warning
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
26 Credential NOT COVERED by the health check: dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) (webhook_url). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
27 Credential NOT COVERED by the health check: stpierre-pipeline-ops/stpierre/ops-key (shared_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:stpierre-pipeline-ops/stpierre/ops-key · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
28 Credential NOT COVERED by the health check: linear/stpierre/webhook-signing-secret (hmac_signing_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/webhook-signing-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
29 Credential NOT COVERED by the health check: dripjobs/levelking/DripJobs API key (Level King Pro) (api_key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking/DripJobs API key (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
30 Credential NOT COVERED by the health check: n8n/stpierre/capture-ios-webhook-secret (header_auth_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:n8n/stpierre/capture-ios-webhook-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
31 Credential NOT COVERED by the health check: linear/stpierre/api-key (api-key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/api-key · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
32 Drain re-created the GHL contact for +14143085477 (route akash-any). Stored id was dead; new id a7ORok7tJoegPnov4o0r. This is the create-on-miss path that caused the 2026-07-31 fixture runaway — confirm the contact is not being deleted repeatedly.reference only
Why it's a must
  • Source gate: sp-lead-transfer-contact-healed · severity warning
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
33 Nightly transcript reconcile: backfilled 53 rows the message_echoes event path missed (outbound 53 / inbound 0), 0 fetch-or-store errors, across 9 active leadsreference only
Why it's a must
  • Source gate: sp_client_messages · severity warn
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
34 Mike Yeo is already with the client via the imessage rail — the sweep did not re-send.reference only
Why it's a must
  • Source gate: lead-transfer · severity info
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
35 Credential NOT COVERED by the health check: dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) (webhook_url). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking-webhook/DripJobs inbound lead webhook URL (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
36 Credential NOT COVERED by the health check: linear/stpierre/webhook-signing-secret (hmac_signing_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/webhook-signing-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
37 Credential NOT COVERED by the health check: dripjobs/levelking/DripJobs API key (Level King Pro) (api_key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:dripjobs/levelking/DripJobs API key (Level King Pro) · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
38 Credential NOT COVERED by the health check: linear/stpierre/api-key (api-key). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:linear/stpierre/api-key · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
39 Credential NOT COVERED by the health check: n8n/stpierre/capture-ios-webhook-secret (header_auth_secret). Add a probe or a no-probe rule in 01-Projects/CommandCenter/credential-health/probe_spec.pyreference only
Why it's a must
  • Source gate: credential-coverage:n8n/stpierre/capture-ios-webhook-secret · severity P2
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
40 Nightly transcript reconcile: backfilled 2 rows the message_echoes event path missed (outbound 2 / inbound 0), 0 fetch-or-store errors, across 1 active leadsreference only
Why it's a must
  • Source gate: sp_client_messages · severity warn
A Kill / dismiss — this gate does not need to exist right now★ my pick
  • Why: 80/20 first move: clear noise before acting
B Act on it — resolve the underlying gate
  • Why: only if it moves a real metric today
C Defer — leave unresolved, revisit next sweep
41 n8n own-account migration prepared. Real inventory is 74 workflows (59 active), NOT 83 - that figure is stale. 37 SP-named, 3 EyeFly (all already off, leave behind), 33 shared plumbing, 1 archived. Only 9 distinct credentials to remap (one Postgres login accounts for 220 of the uses), but 23 workflows are webhook-triggered so their external senders (GHL, Linear, Fathom, iOS capture, CF workers) must be re-pointed. BINDING CONSTRAINT surfaced: 59 simultaneously-active workflows exceeds standard n8n Cloud active-workflow caps - Enterprise or self-host are the only real options. 4-wave plan with lead-flow last in a quiet window saved to Projects/Infrastructure-Migration-2026/n8n-own-account-migration-plan-2026-08-02.mdreference only
Why it's a must
  • Decision-log event · info
42 Shipped reusable free-space preflight .codex/references/freespace_guard.py (import require_free() or run as CLI; aborts with a clear short-by message). Wired into storage-auto-archive.sh LIVE mode only (needs 5GB; dry-run exempt) and into a new sanctioned wrapper ~/Library/StPierreLaunchd/git-repack-guarded.sh which refuses to repack unless BOTH >=10GB free AND >=1.5x the current pack size, runs in the foreground, and cleans up orphan temp packs. Repack itself NOT run - stays deferred per instruction (gate is now satisfied at 26GB free).reference only
Why it's a must
  • Decision-log event · info
43 INCIDENT (self-resolved, no loss): mid-session the entire workspace enumerated as EMPTY - /Users/akash/Documents/Claude listed only .git, then nothing. Confirmed in BOTH sandboxed and unsandboxed views. Root cause: Documents is under the iCloud Drive file provider; the Mac was at 4.6GB free, so macOS dematerialised local copies to reclaim space (dir enumeration returns empty while direct-path reads still resolve). Files were intact the whole time and re-materialised on access; free space rose 4.6GB -> 26GB as ~21GB of local copies were evicted. iCloud is ALSO quota-exceeded (CKErrorDomain 25 'Quota exceeded'), so uploads are failing. HAZARD FLAGGED: git-snapshot.sh runs 'git add -A' daily as sole committer - if it fires during a dematerialised window it would commit a mass deletion. Did not touch iCloud settings (Akash's toggle).reference only
Why it's a must
  • Decision-log event · warn
44 Drive offload verification COMPLETE - zero data loss. Audited all three eviction sets against live Drive (md5 + byte size + not-trashed): Jul-28 media sweep 260/260 evicted files verified; Aug-2 interrupted vault sweep 23/23 verified, 0 errors; Aug-2 launchd auto-archive 22/22 verified. 305 locally-deleted items, every one has a checksum-matched Drive copy. 11 files (65MB, seven-ad-blueprint dist/assets) are uploaded+verified but not yet evicted - safe, listed for later eviction. Did NOT resume uploads.reference only
Why it's a must
  • Decision-log event · info
45 RATIFIED: the 30-minute follow-up robot (n8n hulsPXFVJaIlF5Kv 'SP Messenger Chase Cadence + Re-engage Reconciler', schedule trigger 'Every 30 min') STAYS ON. It is active with a live GHL-FB send path and remains guarded by: 3-touch cap, 3h outbound anti-stacking, 166h staging window / 168h close, 72h customer-deferral suppression, verbal-decline stamping, dnd/manual-hold respect, and a send-leg live-thread recheck before every send. Follow-up booked: a read-through + wording pass on its canned messages, due Monday 2026-08-03.reference only
Why it's a must
  • Decision-log event · info
46 JOHN MCLAUGHLIN cannot be added to the re-engagement nudge list — BLOCKED, and it surfaced a real missed lead. He has no sp_client_leads row at all; he exists only as GHL conversation iyEebW932YC3eXLftZOT / contact vRbD7ysaUQc3ZzPycGCk on Dan's page 'DFW Concrete Leveling & Repair' (1308868515634109). No phone, no email, no meta_psid. His Meta human_agent 7-day window CLOSED 2026-07-31 00:08Z, so no rail — bot or human paste — can message him now. THE REAL MISS: the bot asked 'Do you have any questions?', he replied 'No' (i.e. no questions — NOT 'not interested'), the bot signed off, and 21 seconds later he sent a PHOTO that nobody ever opened (conversation still shows needs_reply=true, unreadCount=2). Deliberately did NOT mint a lead row: it would add a disqualified lead to Dan's counts and still be unsendable. Created a [ready] task for Akash to open the image and decide instead. No nudge staged, no message sent.reference only
Why it's a must
  • Decision-log event · warning
47 Re-engagement list for the 3 named leads — 2 already covered, 1 unreachable. (a) MEI FLOWER: already ON the list — metadata.reengage.class='reengage_draft', 2 nudges staged (t1+t2, delivery_status='scheduled'), meta_psid present; the 168h 'Close: window expired' node covers her and fires 2026-08-05 05:54Z if she stays quiet. No action needed. (b) TWYLER WEBSTER: unreachable on every rail — no phone, no email, no meta_psid, ZERO messages ever; already auto-closed terminal 2026-08-02 14:15Z (qualification_state=disqualified, stage=dnd_unqualified, metadata.stage_autoclose by sp_lead_stage_advance). He is the exact 'unreachable_no_channel' class the handoff-2128 7-day closer was built for; a nudge is physically impossible (no channel exists). (c) JOHN MCLAUGHLIN: NOT addable — see separate decision. Mechanic reused, nothing rebuilt.reference only
Why it's a must
  • Decision-log event · info
48 Chase cadence ALREADY covers parked-transfer leads — no workflow edit made or needed. n8n hulsPXFVJaIlF5Kv 'Stage chase touch 1 (phone ask)' blocks only IN-FLIGHT transfers (status IN ('pending','claimed') AND last_error IS NULL); a transfer parked with last_error='awaiting_enrichment_no_contact_info' therefore does NOT suppress the chase — that exclusion was written deliberately on 2026-08-01 send-leg arming ('those leads are exactly the ones the chase exists to unstick'). Verified live by running the staging predicate read-only: 6 leads eligible right now, including Pam Santone and Chazz Michael Michaels, both of whom hold awaiting_enrichment_no_contact_info parked transfers. Same guarded rail, same caps (3-touch, 3h spacing, 166h window, send-leg live-thread recheck). Akash's go-all also releases handoff 2128's 'awaiting-akash' gate on this exact question.reference only
Why it's a must
  • Decision-log event · info
49 City-field bridge fix was ALREADY LIVE — no re-apply needed. patch_bridge_cityzip.py self-aborted with 'already patched'. Live n8n jTTms4dkSsa60TfI node 'Enrich Qualified Lead' jsCode sha256:16=ee33a87bfd6b4b6c is byte-identical to the intended enrich_node.js, and contains sanCity + cfZip + both Jordan custom-field ids (Location 51xfRUZELcqueWYJAnqQ, Zip Code HNsM3wlNbvCbx0dvBc15). Original apply is change_ledger 92484 (2026-08-01 20:13:37Z, actor ws2-cityzip-agent, readback verified). Workflow active=True, 10 nodes. Rollback path unchanged and still valid.reference only
Why it's a must
  • Decision-log event · info
50 Zero-park remainder CLOSED as a no-op. unpark_enriched_leads.py dry-run returned 0 candidates; --fire re-run also 0 (script exits before any write). Verified independently: all 10 sp_client_lead_transfers rows with last_error='awaiting_enrichment_no_contact_info' belong to leads with BOTH phone_e164 IS NULL and postal_code IS NULL, so none can pass the C4 gate. The park is the designed hand-off to the chase cadence (confirmed handoff 2128 finding 2), not a defect. Parked counts unchanged before/after: 10 awaiting_enrichment_no_contact_info, 3 qc_failed_needs_review.reference only
Why it's a must
  • Decision-log event · info
51 FOUND MID-SESSION: the workspace was moved from ~/Documents/Claude to ~/Workspace/Claude at ~12:19 local on 2026-08-02 by a concurrent process. Nothing was lost - 32GB and full git history are intact at the new path - but 13 launchd jobs hard-coded the old path and died silently, including the database backup and the ops escalator (the rail that carries alarms to Akash's phone). Repaired the two in this lane and made them resolve the workspace at run time so the next move cannot kill them. The other 11 jobs are still pointing at an empty folder and need an owner.reference only
Why it's a must
  • Decision-log event · critical
52 Both backups now have a freshness alarm, reusing the existing ops escalator (Telegram HQ Alerts) — no new channel, no polling loop. New surface workspace-git-snapshot (30h) graded off the newest COMMIT, not off whether the job ran, which is why Jul 20 - Aug 2 went unnoticed. Fixed a masking bug: a failed backup used to write a heartbeat, and both graders read max(ran_at) and ignore status, so a backup failing every night would have shown green forever. Failure now writes no heartbeat and the silence takes the rail red.reference only
Why it's a must
  • Decision-log event · info
53 Database backup now runs twice a day, 02:30 and 14:30 local, 12h apart. Retention raised 14 -> 28 objects so the history window stays ~2 weeks. Sunday weekly copy gated to the early run only, otherwise the weekly shelf would fill twice as fast and hold half the history. Verified end to end: 261,002,773 bytes, 406 tables, canary tables present, uploaded to R2. Freshness limit tightened 26h -> 20h.reference only
Why it's a must
  • Decision-log event · info
54 Point-in-time recovery: NO for now. Nightly-plus-source-system-replay already covers the risk, and PITR carries a standing cost and a plan dependency for a failure mode we have never hit. Twice-daily backups are the cheap middle ground: worst-case data loss drops from ~24h to ~12h for the price of one more launchd calendar entry. Revisit if the business starts writing data that cannot be replayed from GoHighLevel, Meta, Plaid or DripJobs.reference only
Why it's a must
  • Decision-log event · info
55 EyeFly's four sync jobs: RETIRED NONE — all four stay ON. The verify step killed the retirement. (1) 'GHL Conversations Sync (daily)' 4jXyhVki07PZRykP writes public.ghl_conversations, which is read by the live client-facing RPCs public.get_client_report and public.get_client_leads; 26 active EyeFly clients hold live report_tokens and rows were written this morning (2026-08-02 11:01 UTC, 4052 rows/24h). (2) 'GHL Convo Classifier' lfO1vTdeVfLhpVK1 sets is_qualified / disqualification_reason on those same rows, which IS the qualified/lost/pending status column get_client_leads returns to the client (1096 of 1181 recent convos classified). (3) 'GHL CV Audit' WfOeVfeen72kEKmo fails the test twice: its ops_anomalies output is surfaced to clients as anomalies_count in get_client_report, AND its scope is not EyeFly-only — it covers Level King (hickory-creek-tx-cl-level-king-pro, GHL location 6c4MSgjdfngrPhwWD2cb), St. Pierre's own live client, whose custom values Jordan's merge tags depend on. (4) 'GHL Sync Health Monitor' y9uXCZSn6ROh5Mmo is internal-only (taskos_events), so it is technically safe to retire — but it is the ONLY watchdog over job (1), which must stay on, so retiring it would leave a client-facing rail unwatched. Kept on and flagged instead. Nothing was disabled; no rollback needed.reference only
Why it's a must
  • Decision-log event · warn
56 CORRECTED the 2026-08-01 change-log reason for the pipeline-snapshot deactivation. change_ledger 92359/92360 said the job 'returns 0 clients'; n8n execution 22381 proves it returned 29 clients and 498 pipeline rows and lost them at a broken connection feeding splitInBatches, finishing green. Ledger treated as append-only: filed correcting row 92661 carrying both original why texts verbatim in before_image, and added a non-destructive metadata.correction pointer on 92359 and 92360 so anyone reading them directly is sent to the correction before attempting a repair. No original text rewritten, no system state changed.reference only
Why it's a must
  • Decision-log event · info
57 RETIRED the GHL pipeline-snapshot rail (decision from session handoff 2123, executed under Akash's 2026-08-02 go-all). Executed exactly as scoped: (1) both n8n writers left deactivated and verified off (HJ4ijC2AzMmFiVxd, aHHErBzrRGjO25q1); (2) the ghl-pipeline-review skill SOURCE moved to .agents/skills/_archive-2026-08-02/ with a retired banner and an archive README — runtime copies must be dropped via the skill-creator packaging flow, NOT hand-edited; (3) the freshness watchdog stopped flagging the table in both places it was watched — taskos-hygiene SKILL.md KPI_FRESHNESS_WHITELIST and live n8n workflow VXv7dJc4OdXOPGX0 'n8n-ghl-sync-eval', which had written a guaranteed 'fail' row to eval_results every day since mid-May (ledger 92658); (4) the EyeFly dashboard funnel marked retired at the RPC layer — public.get_sales_pipeline_counts now returns {retired:true, note} instead of May-12 numbers (ledger 92659), and both local dashboard HTMLs render that note. public.ghl_pipeline_snapshots left intact at 476 rows. All four steps reversible; rollback recipes in the ledger rows.reference only
Why it's a must
  • Decision-log event · info
58 Withdrew the page-registry claim that the ads dashboard refresh had been dead ~4 days. Checked the live page: it carried a 2026-08-02 12:31 UTC build stamp, about an hour old, and it rebuilds daily on the 06:45 chain. The numbers look thin because most ad sets are paused by choice, not because the refresh is broken. Corrected the Rev note and the ads row in deployed-pages.md.reference only
Why it's a must
  • Decision-log event · info
59 stpierre-cockpit.pages.dev now forwards to the command home instead of serving a stale copy of the cockpit. Redirect, not delete - old bookmarks (including the stpierre-hq and stpierre-command-center stubs that point here) keep working, and the live cockpit view is untouched at rooms.stpierre.ai/cockpit.reference only
Why it's a must
  • Decision-log event · info
60 Named the 8 dashboards that stay (this was STP-72): command home, Dan's portal (client.stpierre.ai), the client portal pipeline view (stpierre-pipeline-ops, key-gated), weekly scorecard, ads dashboard, sales CRM, finance room, blueprint page. Recorded in brain.dashboards - each of the 8 tagged 'canonical-8', with rows created for Dan's portal, the finance room and the blueprint page which had none - and written up as a table at the top of 02-Areas/Team/Internal Docs/deployed-pages.md.reference only
Why it's a must
  • Decision-log event · info

3 · Human-execute lane today

5your cards to run — Collins lane is read-only
Akash — your cards
Decide: relight the B2B ad stack (deliberately paused since Jul 22-23)
Done when: Truth as of Aug-2: the B2B stack (R4 / R2 / CTRL + AO 4-magnet) is not broken - Akash paused it deliberately Jul 22-23 during the rail freeze. Meta insights sync healed Jul-27, standing order is ask-before-relight. The old framing ('stopped spending Jul 21' as a failure) was stale. Separately, the CL Dallas client campaign (B2C) is LIVE since Aug-1 at $150/day - that one needs nothing. The decision on this card: relight the B2B stack or keep it dark while outbound rebuilds.
akashWaitingneeds: Akash re-enables the paused campaign (spend/activation decision).7d old
80/20 + verdict
verdict "decide: relight" kill "not worth doing"
Approve moving the sign-up question higher on the landing page
Done when: At least one form question shows without scrolling on both phone and desktop, after Akash approves the preview. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Visual LP change needs Akash's preview approval. * Internal id: ec792356-ab4e-4143-9827-7ea18fcb9677
akashWaitingneeds: Visual LP change needs Akash's preview approval.7d old
80/20 + verdict
verdict "approve moving" kill "not worth doing"
Approve small fixes to the live application form so we can track where leads come from
Done when: The tracking fields fill in on more than 9 of every 10 new applications. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Editing the one live application form needs Akash's okay. * Internal id: 14a06961-0d98-4038-a3ee-998494ad5e04
akashWaitingneeds: Editing the one live application form needs Akash's okay.7d old
80/20 + verdict
verdict "approve small" kill "not worth doing"
Turn on call recording in the CRM (needed to coach setters)
Done when: A test call records and can be played back. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: GHL UI setting change - workflow-builder/UI work is Akash-only. * Internal id: ef46964c-a5ab-4099-9502-1e22366076f6
akashWaitingneeds: GHL UI setting change - workflow-builder/UI work is Akash-only.7d old
80/20 + verdict
verdict ef46964c kill "not worth doing"
Confirm the job value for each trade (this sets the target cost per lead)
Done when: Each trade has a confirmed job value on record, with no made-up default. --- *Technical notes (for agents)* * Triage: Parked waiting on Akash: Akash must confirm each trade's ticket; unknowns stay 'unknown'. * Internal id: 605b41fe-b301-4892-b66d-69250a0a3b64
akashWaitingneeds: Akash must confirm each trade's ticket; unknowns stay 'unknown'.7d old
80/20 + verdict
verdict 605b41fe kill "not worth doing"
Collins lane — read-only (4)

Whole-system builds scoped to Collins. Nothing sent to Collins without an explicit go — shown here for visibility only.

Map out today's client-setup steps (what's built vs missing)
Done when: A map lists every setup step marked done or missing. --- *Technical notes (for agents)* * Triage: Onboarding-automation system (Collins 6-systems scope) — mapping/standardizing client launch * Internal id: d06ad12c-235e-45d9-ae21-d144485c564a
collinsNext7d old
Turn Dan's setup into a reusable checklist for the next client
Done when: A checklist covers page, local ad, account ownership, lead routing, customer list, and measurement. --- *Technical notes (for agents)* * Triage: Onboarding-automation system (Collins 6-systems scope) — mapping/standardizing client launch * Internal id: bab4a3ca-13a2-4cc7-a417-979b917acd9c
collinsNext7d old
Design the system that tracks and coaches setters
Done when: A written plan defines what to track per setter and how the daily brief works. --- *Technical notes (for agents)* * Triage: Setter-performance system (Collins 6-systems scope) — design/build of setter tracking + coaching * Internal id: 79bb8b1f-8596-4617-a1ae-c3712f84db41
collinsNext7d old
Build the daily coaching brief for each setter
Done when: A sample daily brief is produced per setter from real call data. --- *Technical notes (for agents)* * Triage: Setter-performance system (Collins 6-systems scope) — design/build of setter tracking + coaching * Internal id: 960def99-4183-4e78-9e67-e2bac0eceb08
collinsNext7d old

4 · Aging

5waiting >48h — flagged, never auto-actioned
These have sat >48h with no ruling. The auto-approve-on-timeout policy is a DRAFT only (TIMEOUT-POLICY.md) — nothing here defaulted automatically. Rule each one now.
AgeCardOwnerId
7dTurn on call recording in the CRM (needed to coach setters)akashef46964c
7dConfirm the job value for each trade (this sets the target cost per lead)akash605b41fe
7dApprove small fixes to the live application form so we can track where leads come fromakash"approve small"
7dApprove moving the sign-up question higher on the landing pageakash"approve moving"
7dDecide: relight the B2B ad stack (deliberately paused since Jul 22-23)akash"decide: relight"