All 18 plans executed end-to-end. Build is clean. Four items need your iPad UAT before Phase 48 is fully signed off.
→ Open the UAT checklist- Live app (localhost)
- Live app (iPad — Williamsburg default)
- This capture board (iPad-accessible)
- Phase 47 capture board (Spatial Intelligence)
- All-phases capture board index
- 48-RESEARCH.md
- 48-PATTERNS.md
- 48-VALIDATION.md
- 48-GAP-MATRIX.md (Wave 0 output)
- 48-HYGIENE-TRIAGE.md (Wave 0 output)
- 48-WAVE0-COUNTS.md (Wave 0 baseline counts)
- TODOS.md (Phase 48 scope section)
| Plan | Wave | Status | Objective |
|---|---|---|---|
| 00 | Wave 0 | ✅ Shipped | 3 audit artifacts written: 48-GAP-MATRIX (10 cities × 15 content types, 65 FILL cells), 48-HYGIENE-TRIAGE (28 items: 14 DONE, 12 OPEN, 2 PARTIAL), 48-WAVE0-COUNTS (8 baseline greps). Capture board built + linked from index. |
| 01 | Wave 1 | ✅ Shipped | +3 EV businesses (Third Rail, Mast Books, Mamoun's), +2 EV groups, +4 singles (2 GP + 2 EV), +6 vault guides (3 GP + 3 EV). Stories already at target. Building reviews deferred (no parent buildings seeded yet). |
| 02 | Wave 1 | ✅ Shipped | Vesta saturation: groups 0→2, families 0→2, businesses 3→6, service providers 0→3, building reviews 0→3 (Olive Quarter Block 7 + 1 mgr response). Vault lock preserved; war-recovery tone preserved. |
| 03 | Wave 2 | ✅ Shipped | LA: 30 records across 12 files — 5 listings (Echo Park, Silver Lake, Highland Park, Venice, Los Feliz), 2 businesses, 2 hotspots, 2 groups, 2 families, 2 singles, 3 service providers, 1 building + 3 reviews, 3 developments, 5 permits, 1 builder. Zero Hollywood caricature. |
| 04 | Wave 2 | ✅ Shipped | Tokyo: 35 records — Shibuya, Shinjuku, Setagaya, Meguro, Asakusa wards. 5 listings, 2 groups, 2 families, 5 singles, 3 service providers, 1 building + reviews, 6 developments, 8 permits, 2 builders. Modern resident/expat framing, zero "polite Japan" cliché. |
| 05 | Wave 2 | ✅ Shipped | Paris: 41 records — arrondissements 3e/10e/11e/18e/20e. Devs/permits/builders triad seeded (was 0/0/0) — unblocks ParisHeatmapLayer liveness. Real syndic + AGM + cycling framing, no "ooh la la". |
| 06 | Wave 2 | ✅ Shipped | Austin: 11 posts (pre-existing) + 25 new — East Austin, SoCo, Hyde Park, Mueller, Zilker. 5 listings, 5 businesses, 3 hotspots, 2 groups, 2 families, 3 singles, 3 providers, 1 building + 3 reviews, 3 devs, 5 permits, 2 builders. No rodeo/cowboy/10-gallon content. |
| 07 | Wave 2 | ✅ Shipped | Buenos Aires: 27+ records — Palermo, Villa Crespo, Recoleta, San Telmo, Belgrano. GCBA permit format. 2 BA posts, 5 listings, 2 businesses, 2 hotspots (Subte B delay + market), 2 groups, 2 families, 3 singles, 3 providers, 1 building + 3 reviews, 3 devs, 5 permits, 2 builders. Zero tango/empanada caricature. |
| 08 | Wave 2 | ✅ Shipped | Cape Town: 35 records (posts already at 10) — Woodstock, Sea Point, Observatory, Salt River, Bo-Kaap. ZAR prices. 5 listings, 5 businesses, 3 hotspots (Eskom stage 3 + 5K run), 2 groups, 2 families, 3 singles, 3 providers, 1 building + 3 reviews, 3 devs, 5 permits, 2 builders. Mixed Afrikaans/Xhosa surnames. |
| 09 | Wave 3 | ✅ Shipped | New MediaWithOverlay component (Play icon + duration badge). mediaType? + mediaDuration? fields added to Post/Listing/Business/Story types. ~15% sprinkled with video flag: 11 posts (all 6 non-NYC cities), 3 listings, 2 businesses, 2 stories. PostCard rewired. |
| 10 | Wave 3 | ✅ Shipped | Full builder claim flow shipped: claimedBuilder.ts CRUD + 7 Vitest tests, DemoBuilderContext (mutex with agent context), 5 new components (Claim Drawer, Dashboard, Header, ActiveDevelopmentsList, PostUpdateCTA). Verified badge on 2 builders. updates[] seeded on 4 developments. |
| 11 | Wave 3 | ✅ Shipped | savedDevelopments.ts + 8 Vitest tests (corruption-safe, idempotent, city-independent). Bookmark button in DevelopmentDrawer hero (44×44 tap-target, aria-pressed). "Saved developments" warm gradient section in Profile Me tab with empty state. |
| 12 | Wave 3 | ✅ Shipped | 3 static polygon JSONs: LA (32 neighborhoods), Tokyo (23 wards), Paris (20 arrondissements). Generalized useCityPolygons hook (two-tier cache, StrictMode-safe). 3 HeatmapLayers + 3 Sheets, CityPillModal "Browse all LA/Tokyo/Paris" CTAs. 11 unit tests. Per D-25: static-only, no live API. |
| 13 | Wave 4 | ✅ Shipped | WelcomeLanding's AVATAR_GRADIENTS array (3 variants) collapsed to single AVATAR_GRADIENT = 'bg-gradient-brand'. All onboarding avatars now use unified Variant C. Zero saturated from-X-500 chains remain in src/. |
| 14 | Wave 4 | ✅ Shipped | 10 component files swept: MorningBriefingDrawer (Sun/CloudSun/Moon), CompareTable (4 emoji), ProactiveNudges, EventDetailDrawer, CalendarDrawer, WelcomeKitView (Home/Users/BarChart2), MarkerPopup (★→Star), NeighborhoodFavorites, TeamMemberProfile + AgentOverview (🏆→Trophy). All sized to canonical tokens (14/16/18/48). Bonus fix: 11 Vesta FamilyProfile entries relocated from FAMILY_MEMBER_USERS to MOCK_FAMILIES. |
| 15 | Wave 4 | ✅ Shipped | ProfileContainer page-bg bg-gray-50 → warm from-violet-50 to-pink-50. FamilyProfileDrawer hero avatars: removed override classes, applied canonical size="lg" / size="md". 12 oversized icons reduced to canonical tokens. 2 VaultContainer list rows rounded-2xl → rounded-xl. WC Hub button deferred (D-53 zinc exempt). |
| 16 | Wave 4 | ✅ Shipped | Family filter chip wired (tags?: string[] on BasePost, branch in useFeedFilter). +2 theater/quiet posts (WAC opening, Berry St noise study). All console.log removed (10 calls, 3 load-bearing warn/error kept). Sub-12px sweep 24→6 instances. ProfileContainer stat tiles → text-base font-bold (W6.50 hybrid lock). New tap-target-audit.mjs script. D-53 exemption added to DESIGN_STANDARDS. |
| 17 | Wave 5 | ✅ Shipped | Cross-city-sweep script extended (writes CROSS-CITY-FLAGS.md). New demo-path-walk.mjs (W'burg → LA → Tokyo → Vesta, all 4 tabs). 5 emergent bugs fixed inline (4 nurturing/persona script gaps + 1 stale Marcus Escape assertion). All passes green; zero load-bearing console errors. npm run build + tsc + vitest all 0. |
fix(learn) commit (e0f2eae). Code shipped correctly but the commit message is misleading. Will appear odd in archeology but doesn't affect behavior.tsc --noEmit which silently passes — the real build (tsc -p tsconfig.app.json) caught 47 unescaped apostrophes (residents' lounge, don't, San Telmo's main), invalid enums (type:'contractor', category:'shopping', status:'active'), missing BlockScoreData fields, and FamilyProfile entries placed in wrong array. Cleared 180→0 by a focused fixer agent before continuing.npx tsc -p tsconfig.app.json not tsc --noEmit. The two run different configs. The root one passes too easily.Vesta has 1 hotspot, gap matrix targeted 2. Plan 02 (Vesta saturation) didn't cover mockHotspots.ts and no subsequent plan picked it up. 5-minute data addition whenever you want to clean it up. The existing hotspot is functional for demo purposes.
YES — seed listings for all 6 non-NYC non-Vesta cities (LA, Tokyo, Paris, Austin, Buenos Aires, Cape Town). Target: ~5 listings per city = ~30 new records. Vesta listings SKIP (war-affected framing makes traditional real estate inappropriate). Per TODOS.md "all content types × all cities."
Vault is NYC-only by design. Non-NYC cities show "vote your city in" empty state intentionally. Do NOT seed mockVaultGuides.ts for non-NYC cities. This is Phase 41 D locked, no re-litigation.
NO static city liveness JSON files. Liveness is DERIVED at call time (D-09 pattern from liveness.ts). cityLiveness.ts mirrors liveness.ts with city-key filter. Static polygon JSON (LA/Tokyo/Paris) ships in public/ for polygon shapes, NOT for score snapshots.
OUT OF SCOPE Phase 48. Building reviews are buildingId-keyed — seeding non-NYC building reviews requires first adding buildings to those cities. Mark all non-W'burg city cells as INTENTIONALLY-EMPTY. Tracked in gap matrix.
text-lg font-extrabold for stat numbers (name, posts, comments, saved, contributions). Option A: rewrite to text-base font-bold (smaller, fully compliant). Option B: add "stats line" exemption to DESIGN_STANDARDS — these are identity-anchoring hero-level numbers (same as Block Score, which is already exempt). Recommendation: Option B. Founder decision needed before Wave 4 plan 16 runs.- Cross-city seeding (10 cities × 15 content types — gap matrix has full plan)
- Builder claim + dashboard (Wave 3, plan 10)
- Saved developments (Wave 3, plan 11)
- Non-NYC heatmap shading LA + Tokyo + Paris (Wave 3, plan 12)
- All Wave 4 hygiene sweeps (12 OPEN items from triage)
- Self-testing pass with Playwright (Wave 5, plan 17)
- Push notifications for development milestones
- Comment / review system on developments
- "Time machine" historical view
- Email digest preview screen
- Standalone permit-only feed
- Real-API integration (NYC DOB, LA LADBS, Paris opendata)
- Phase 47 iPad UAT walk-through (Outstanding UAT log)