Status: SHELL-BLOCKED (Path B, no live data)

Streak: 9th consecutive blocked Google Ads scheduled run since 2026-04-20

Run mode: fail-fast per feedback_fail_fast_when_blocked.md

TL;DR

No mutations. The Cowork Bash sandbox failed with ENOSPC: no space left on device before any command could run, on two consecutive attempts. OAuth itself is healthy — token was rotated 2026-05-01 by Claude, signed by aguiarlawmarketing@gmail.com, verified live against SAIL CID 381-391-6687, mirrored across all 6 local credential locations. The blocker is purely the execution surface.

What was checked

Check Result
Bash sandbox mkdir /tmp/preflight-test FAIL (ENOSPC), 2 attempts
Notion OAuth state OK (rotated 2026-05-01)
Local .env sync Cannot verify without bash; expected in sync
Live API canary BLOCKED (no execution surface)
google-ads-mcp loaded NO
Pipedream Google Ads NO (app authorization pending in Pipedream Connect)
Adspirer MCP NO (not installed)

Why fail-fast

This is the 9th identical block in a row. Per Sam's standing instruction (feedback_fail_fast_when_blocked.md), the value at run 9 is escalation, not a 9th identical failure log. Skipped exhaustive backend retries.

Audit framework (what the next non-blocked run will execute)

Pass 1 — Search terms to BLOCK

GAQL pulls search_term_view for last 7 days, ENABLED campaigns, ordered by cost. Decision rules:

Brand-voice/banned-words rules do NOT apply to negatives (per feedback_google_ads_brand_rules.md).

Pass 2 — Cross-campaign cannibalization

For any keyword bid on in Campaign A but not Campaign B, add as negative in Campaign B if Campaign B is broader. Reference hierarchy: Car Accidents 2026 (most specific) → Truck/Commercial → Motorcycle → Brand (only firm-name) → Spanish (separate keyword universe).

Pass 3 — False-positive negatives to REMOVE