Chain Test Report

Chains: 7/8 | Steps: 59/60 | Failed: 1 | 2026-04-22T22:22:02.360899

PASS Download Area Flow

PASS 1. download_areas template — Exists
PASS 2. Dashboard loads OMAP system — OMAP references found
PASS 3. Dashboard calls tile API — Tile calculation wired
PASS 4. /api/tiles/calculate route — Route registered
PASS 5. Area naming modal — Present
PASS 6. Post-download navigation — Done/home nav exists
PASS 7. Metadata via registry — Uses Registry.registerSlot — keys will match getAllSlots
PASS 8. Overwrite reuses slot — Same name → same slot → clears old tiles → no wasted storage

FAIL Slot Selection Flow

PASS 1. Script load order — omap_constants.js → omap_registry.js → omap_slot_picker.js
PASS 2. Reads all slots from registry — getAllSlots found
PASS 3. Slot match on cacheName/slotNumber — Matches registry records correctly
PASS 4. Iterates 1 to MAX_SLOTS — Loop bounded
PASS 5. Calls setActiveSlot — Wired
PASS 6. Redirects to /map/offline/ — Found
FAIL 7. /map/offline/ route registered — Route missing from blueprint

PASS Mapping → Report Flow

PASS 1. Walk lifecycle — startWalking + stopWalking
PASS 2. Photo capture — takePhoto found
PASS 3. Sync orchestrator queues — Queue/sync found
PASS 4. Upload endpoints — photos=True, perimeter=True
PASS 5. Report route — Registered
PASS 6. Report partials — All present

PASS SW Cache Integrity

PASS 1. APP_SHELL parsed — 56 URLs
PASS 2. Landing links cached — All 13 cached
PASS 3. Slot picker scripts cached — All cached
PASS 4. No competing SWs — All use /sw.js
PASS 5. SW version — v67

PASS Phone Slot State

PASS 1. Report renders — perimeter 240 → 200
PASS 2. SW active on phone — https://iverify.nsgia.com/sw.js
PASS 3. No waiting SW — Clean
PASS 4. APP_SHELL cache — gps-mapper-v57: 55 entries
PASS 5. Slot count — 1 filled, 4 empty of 5
PASS 6. Filled slots named — All named
PASS 7. Tile counts healthy — All have tiles
PASS 8. OMAP constants loaded — Yes
PASS 9. Storage available — 6.5 MB (0%)

PASS Offline Network Isolation

PASS 1. GPS middleware network-free — Uses navigator.geolocation only
PASS 2. SW tile cache-miss → fetch or placeholder — Online: fetches from network. Offline: returns 1px PNG.
PASS 3. SW /map/offline/ cache-only — No network fallback in offline handler
PASS 4. Offline JS network-free — All 4 OMAP modules clean
PASS 5. Nominatim call guarded — Wrapped in online check
PASS 6. Save-survey queued/guarded — Wrapped in online check or sync queue
PASS 7. SW intercepts tile URLs — OSM + ArcGIS tile requests routed through slot cache

PASS Flood Mapper Integrity

PASS 1. File exists — 667 lines
PASS 2. JS syntax valid — node --check passed
PASS 3. Brace balance — open=572 close=572 diff=0
PASS 4. Required functions — All 14 present
PASS 5. GPS via event stream — Subscribes to gps-update events, no direct watchPosition in startWalking
PASS 6. Walk lifecycle — start→flag→stop→close polygon→write GeoJSON
PASS 7. Save offline-safe — Guarded by navigator.onLine, queues via SyncOrchestrator
PASS 8. Search offline-safe — Guarded by navigator.onLine
PASS 9. MapLibre sources — walking-path and satellite layer referenced
PASS 10. Window exports — startWalking + stopWalking exported
PASS 11. DOM references — All 10 element IDs present
PASS 12. API_BASE defined — Found

PASS Navigation Integrity

PASS 1. SW navigate = network-first — fetch() with cache fallback in .catch
PASS 2. SW assets strategy — Could not verify — check manually
PASS 3. Home links point to / — Checked 8 templates
PASS 4. No navigation blockers — No JS calls preventDefault on beforeunload
PASS 5. / renders directly — render_template, no redirect
PASS 6. app-shell-loader not active — No template loads it — no unwanted /choose redirect

Home · Diagnostic · JSON