Mission: everything local → R2; build only what changed; ship the flagship v2 rollout without breaking Netlify. Deploy doctrine (new): ship-fast.sh is the default — incremental, ~10-15 min, skips the ~30 sitewide aggregate rebuilds; run full ship.sh only when the aggregate layer changed or at the 7-day mark. R2 doctrine: copy-only, delete local only after rclone-check + explicit word.
Snapshot: Mon Jul 13, 2026 · 7:41 PM EDT — service worker live at v1076; full ship completed 4:51 PM EDT today. Heads-up: a full ship.sh looks to be running right now (ship.log writing this minute). Data archive to R2 still last verified ~Jul 10-11 — a re-sync is the top NOW item. Static numbers; ask Claude to refresh.
New standing rule (in CLAUDE.md): default to ship-fast.sh for any listing/community/map-pin/report/single-script change — stop re-shipping the whole site for small edits. ship-fast now also runs the deploy-time stamp step and bumps the service-worker CACHE_VERSION, so fast deploys can no longer serve stale JS. 6 files committed. Two live bugs closed with it: the Stellar map went blank (a partial compile had overwritten stellar-pins.json down to 5 pins — now guarded, plus new build/rebuild_pins.py regenerates a feed's full pins from shards with no 75k-page re-render), and the lead popup finally updated — the cache-first SW had been pinning the old email-only version; the bump fixes it and the popup now delivers the monthly Market Pulse report.
The Dataset "missing description" error is clean in the build (0 of 1,045 data pages; the flagged May-2026 page is now an Article). The Breadcrumb "missing name" live bug (blank-address IDX records emitting an empty crumb) is patched in both _listing_render.py + _listing_render_v2.py, and today's full ship recompiled listing pages carry it. The lead popup's phone field + TCPA consent are now serving publicly after the CACHE_VERSION bump. Remaining human step: hit Validate Fix on both GSC errors so Google recrawls.
ship.log is being written as of 7:41 PM EDT (Stellar compliance sweep in the tail). Last completed full ship was 4:51 PM EDT. Confirm on the Mac; let it finish before starting another deploy._r2_data_sync.sh + rclone check --checksum before pruning any local raw._compile_momentum.py ignored the pending bucket — 79 own under-contract listings got no page/pin. Now compiles + pins active + pending (deduped).addr → empty crumb name on IDX pages. Fallback city/ZIP → community, patched in both renderers; today's full ship recompiled listing pages. Then hit Validate Fix.CACHE_VERSION bump (now v1076) + 5-min revalidating header on /lead-magnet.js mean the phone + "may call, text & email… reply STOP" version now serves. Popup also delivers the monthly Market Pulse.addr root cause rendered , Pembroke Pines, FL 33025. Drops the comma when there's no street address. Rode the recompile.img/mls/stellar deleted → ~360 GB reclaimed._r2_data_sync.sh then rclone check; wc -l of the missing-list = the 0-diff proof.bash _r2_data_sync.sh → rclone check data r2:momentum-data/data-archive/data --one-way --fast-list --exclude "__pycache__/**" --missing-on-dst /tmp/r2-data-missing.txt → wc -l /tmp/r2-data-missing.txt. 0 = archive verified. Paste the output to Claude.flush.log already gone; rm -rf .cro-backups now recovers 26 GB. Do not prune the ~37 GB local data/mls/raw yet — the sync + rclone check --checksum above must pass first.MWM-Infrastructure-Plan.md.ship-fast.sh default, deploy-delta per tranche.CLOUDFLARE-MIGRATION-PLAN.md) — the permanent deploy fix at 10x._build_v2_nbhd.py — breadcrumb names + Dataset descriptions present). 8,845-page universe._v2_snapshot.py --all-slugs --resume._listing_render.py, then tranche.ship-fast.sh per tranche, deploy-delta gate, never one big-bang deploy.CACHE_VERSION. Full ship.sh only for sitewide-aggregate changes or the 7-day mark.data/ as a disposable R2 cache (hydrate → build → check → clean)._listing_render.py → tranche/lead-magnet.js?v= during a recompile as belt-and-suspenders for hard-cached browsers