{
  "title": "Safe2Go restore queue",
  "updated": "2026-10-05 20:10 UTC",
  "rules": [
    "No deletion of any kind: every database table is hard-locked; finished files carry the immutable flag.",
    "No job runs without the owner's yes. Every automatic job and update on the server and PC is switched off.",
    "Restores are add-only: data is inserted only where the source is provably the same version as the loaded data.",
    "Comparisons are exact: any reduction, even one row, is listed."
  ],
  "done": [
    {
      "item": "Hard lock on every table (gtfs 63, osm_transit 28, mobility_graph 13 tables) + new tables auto-locked",
      "check": "Live: delete/truncate/drop/disable refused, also with the override switched on"
    },
    {
      "item": "Hard lock (immutable) on finished files: routing tiles 13 regions, 13 maps, 39 configs, OSM downloads, feed archives, August GTFS files, Photon India, nginx config, all logs",
      "check": "Delete/change/rename refused"
    },
    {
      "item": "All automatic jobs and updates off (server timers 0 active, cron off, auto-upgrades off, snap held; PC tasks disabled)",
      "check": "systemctl list-timers: 0 active"
    },
    {
      "item": "Date exceptions restored (add-only) for 2,258 feeds incl. Germany (all feeds), Great Britain (217,968), Netherlands, France",
      "check": "Per feed: loaded trips all present in the source file before insert"
    },
    {
      "item": "36 bigger earlier feed versions kept in the locked archive (34 exact)",
      "check": "Counts match the reload logs"
    },
    {
      "item": "221,968 August date exceptions + 435 French pre-21-Sep versions kept in the locked archive",
      "check": "Rows = file rows"
    },
    {
      "item": "Lost feeds back: Vitre, Buenos Aires (Feb 2024 version), 12 earlier",
      "check": "Loaded with trips"
    },
    {
      "item": "Germany transit routing restored (own instance)",
      "check": "Live: transit route Regenbogen 9 -> Heidelberg"
    },
    {
      "item": "Brazil, Argentina, Mexico, China, Russia routing wired in",
      "check": "Live route in each country; 37-city boundary test in the deploy gate"
    },
    {
      "item": "All options between two places (2-hour departure window)",
      "check": "Live: 20 real connections Regenbogen 9 -> Heidelberg"
    },
    {
      "item": "Real trains to/from airports",
      "check": "Live: tram 4A + RNV 1 + ICE 22 + S8 to Frankfurt Airport"
    },
    {
      "item": "Admin pages show the real login failure reason; Could Be Deleted page",
      "check": "Live"
    },
    {
      "item": "Date exceptions archive round 3 (+90 feeds); Great Britain 217,968 + 3 Quebec feeds from files on the server",
      "check": "Same-version proof per feed"
    },
    {
      "item": "Route connections: 247 of 255 feeds (insert-only)",
      "check": "8 very large feeds stopped at the 15 GB temp limit - nothing written, queued for a lighter method"
    },
    {
      "item": "Search files rebuilt for all restored feeds",
      "check": "Heidelberg 20, Frankfurt Airport 15, Almere 6 journeys"
    },
    {
      "item": "Exact comparison of every table vs the 30 Sep backup",
      "check": "Only ops_status -2 rows; everything else same or larger"
    },
    {
      "item": "H3 small countries (Monaco, San Marino, Liechtenstein) + H3 catalog hard-locked",
      "check": "3,199,265 -> 3,199,294 cells, nothing reduced"
    },
    {
      "item": "Bus/coach-only and metro/tram-only options shown next to the fastest ones",
      "check": "Live: FlixBus 027, tram 4A + 5 to Heidelberg"
    },
    {
      "item": "Timeout fix for long trips (Frankfurt Airport, Almere)",
      "check": "Live: 504 -> 15 and 6 journeys"
    },
    {
      "item": "Nightly backups ON with safe rotation (server removes only with a D: md5 receipt; D: never cleaned)",
      "check": "Receipts for 30 Sep + 1 Oct written"
    },
    {
      "item": "Owner Deletion page (Admin) - only way to delete, owner code + permanent log",
      "check": "Scratch + live tests; owner code not set yet"
    },
    {
      "item": "36 bigger feed versions: kept archive-only (owner decision after the duplicate/date-exception risk)",
      "check": "Archive locked"
    },
    {
      "item": "Delhi: DTC + DIMTS buses (131,997 trips) and Delhi Metro (36 lines; weekday timetable also on weekends) - owner rule",
      "check": "Live search: bus 246CLUP, Yellow Line 09:09 every day"
    },
    {
      "item": "India from the Mobility Database: Chennai MTC, MSRTC, Kochi buses+boats, Kochi Metro, Hyderabad MMTS; Bangalore and Sao Paulo EMTU from owner files",
      "check": "Chennai 2 connections, Kochi KMRL 09:06, Sao Paulo 218EX2"
    },
    {
      "item": "Private intercity buses India: 29,661 departures, 905 operators, 892 towns (each checked against its listed distance)",
      "check": "Bangalore -> Chennai VRL 20:30"
    },
    {
      "item": "Buenos Aires colectivos back with a weekly calendar (owner rule)",
      "check": "39C 09:08"
    },
    {
      "item": "USA data checked exactly - nothing missing; USA ways/nodes/rels hard-locked",
      "check": "36,815,238 addresses, 1,598,211,317 nodes identical"
    },
    {
      "item": "Backups on E:: today's full server backup (7 parts, md5), D: mirror, deletable files, H3, feed archives, USA ways",
      "check": "md5 per file"
    },
    {
      "item": "OSM USA + Canada downloads deleted (owner yes) after md5-verified copies on E:",
      "check": "Disk 25 -> 43 GB free"
    },
    {
      "item": "Worldwide load of 963 missing feeds",
      "check": "Finished 2 Oct 17:10"
    },
    {
      "item": "Feed Problems page (empty/failed/duplicate + alternatives)",
      "check": "/feed-problems.html, refreshed every 15 min"
    },
    {
      "item": "Germany-wide timetable",
      "check": "2,908,003 trips; in search after the rebuild"
    },
    {
      "item": "Spain Renfe commuter + long-distance",
      "check": "114,348 + 7,270 trips"
    },
    {
      "item": "Mexico City, Harare, Cape May ferry repaired",
      "check": "Format repairs only"
    },
    {
      "item": "Namma Metro Bangalore",
      "check": "Checked live"
    },
    {
      "item": "Calendar header bug (3 feeds) repaired",
      "check": "Add-only"
    },
    {
      "item": "One-day services audit",
      "check": "1,791 one-day services back to their real date (update only)"
    },
    {
      "item": "Norway (Entur)",
      "check": "393,376 trips"
    },
    {
      "item": "Sweden national file",
      "check": "Duplicate of loaded Trafiklab feeds"
    },
    {
      "item": "Washington State Ferries duplicates",
      "check": "2 copies set stale, data kept"
    },
    {
      "item": "OpenFlights routes (67,184), locked",
      "check": "Checked live"
    },
    {
      "item": "OpenSky credentials installed + tested",
      "check": "634 aircraft over Germany in the test"
    },
    {
      "item": "All data tables hard-locked (+ auto-lock of new tables)",
      "check": "Exempt: raptor_feed_cells, route_cache, spatial_ref_sys (rebuildable/system)"
    },
    {
      "item": "Valhalla tiles + configs, map tiles, catalogs, archives locked",
      "check": "Checked live"
    }
  ],
  "running": [
    {
      "item": "Search snapshot rebuild for all feeds loaded since 2 Oct (build_all)",
      "note": "Started 5 Oct 11:12 UTC; priority Renfe, Mexico City, Germany-wide, Great Britain"
    },
    {
      "item": "Route connections for the 15 very large feeds, one route at a time",
      "note": "Rerun after the quoting-bug fix (5 Oct)"
    },
    {
      "item": "Feed Problems list refresh",
      "note": "Every 15 minutes (owner request)"
    },
    {
      "item": "Never-ending coverage loop",
      "note": "Tests every trip x mode each cycle, loads missing feeds insert-only; /coverage.html"
    }
  ],
  "queued_needs_owner_yes": [
    {
      "item": "London (Great Britain snapshot)"
    },
    {
      "item": "Cape Town + Johannesburg"
    },
    {
      "item": "Nairobi"
    },
    {
      "item": "Croatia ferries (Jadrolinija)"
    },
    {
      "item": "Italy national access point"
    },
    {
      "item": "Ferry-only search option"
    },
    {
      "item": "OurAirports"
    },
    {
      "item": "Live aircraft feature"
    },
    {
      "item": "Melbourne multi-file split"
    },
    {
      "item": "Source watcher (new feed versions)"
    },
    {
      "item": "Golden locked backup"
    },
    {
      "item": "Search speed test after USA"
    },
    {
      "item": "Handover document update"
    },
    {
      "item": "TO-BE Phase 1: transfer/airport/ferry graph"
    },
    {
      "item": "TO-BE Phase 2: universal place graph"
    },
    {
      "item": "TO-BE Phase 3: remove third-party APIs"
    },
    {
      "item": "TO-BE Phase 4 / traffic A+B"
    }
  ],
  "needs_owner_input": [
    {
      "item": "Feeds still unmatched - Needs Transitland key"
    },
    {
      "item": "Alternatives for 17 feeds with none found - Needs Transitland key"
    },
    {
      "item": "Live ship positions (AIS) - Needs AISHub account (receiver)"
    },
    {
      "item": "Real flight schedules - Needs AeroAPI key (Amadeus self-service closed 17 Jul 2026)"
    },
    {
      "item": "Transitland key"
    },
    {
      "item": "ODPT key (Japan)"
    },
    {
      "item": "Spain NAP key"
    },
    {
      "item": "Railway restricted DB user + new password"
    },
    {
      "item": "GitHub token revoke; DB password in git history"
    },
    {
      "item": "Twilio credentials + real-phone safety test"
    },
    {
      "item": "PC on at 07:30 + plug in E:"
    }
  ],
  "cannot_be_restored": [
    {
      "item": "Pre-21-Sep date exceptions as a snapshot (no backup existed) - recovered per feed where sources keep history"
    },
    {
      "item": "mdb-757 / mdb-2093 in-between versions (never backed up)"
    },
    {
      "item": "Silver Key (all archived versions empty), Zaratan (not archived)"
    },
    {
      "item": "ops_status: 2 status rows trimmed before the lock (no transport data)"
    }
  ],
  "status_as_of": "2026-10-06 ~14:50 UTC",
  "status_table": [
    {
      "n": 1,
      "group": "Friday priorities",
      "item": "Bus, local bus, FlixBus, BlaBlaCar and metro showing in routes",
      "status": "pending",
      "note": "Search fixed + 0.2-1.5 s warm in Berlin/Paris/London/Vienna/Delhi/Mannheim; confirming city by city with the live-app tester"
    },
    {
      "n": 2,
      "group": "Friday priorities",
      "item": "Full comparison of all data vs the last 2 months of copies",
      "status": "pending",
      "note": "Only done vs the 30 Sep backup so far"
    },
    {
      "n": 3,
      "group": "Friday priorities",
      "item": "Exact table comparison vs the 30 Sep backup",
      "status": "complete",
      "note": "Only ops_status -2 rows; everything else same or larger"
    },
    {
      "n": 4,
      "group": "Friday priorities",
      "item": "Europe points of interest (Germany unchanged)",
      "status": "complete",
      "note": "2,120,000 -> 19,694,958; Germany 4,847,629 unchanged (3 Oct)"
    },
    {
      "n": 5,
      "group": "Friday priorities",
      "item": "Lock points of interest",
      "status": "complete",
      "note": "poi.sqlite immutable"
    },
    {
      "n": 6,
      "group": "Friday priorities",
      "item": "Date exceptions round 3",
      "status": "complete",
      "note": "+90 feeds"
    },
    {
      "n": 7,
      "group": "Friday priorities",
      "item": "Route connections, normal feeds (247)",
      "status": "complete",
      "note": "Insert-only"
    },
    {
      "n": 8,
      "group": "Friday priorities",
      "item": "Route connections, very large feeds (15)",
      "status": "pending",
      "note": "Quoting bug fixed; rerunning one route at a time (running)"
    },
    {
      "n": 9,
      "group": "Friday priorities",
      "item": "Search snapshot rebuild after the world load",
      "status": "complete",
      "note": "552 built 5 Oct + Transitland feeds + London buses (gb-bods-all) with 11 GB heap"
    },
    {
      "n": 10,
      "group": "Friday priorities",
      "item": "H3 gaps (Monaco, San Marino, Liechtenstein) + lock",
      "status": "complete",
      "note": ""
    },
    {
      "n": 11,
      "group": "Friday priorities",
      "item": "Feeds still unmatched",
      "status": "pending",
      "note": "Transitland key installed; the loop now searches Transitland for every gap"
    },
    {
      "n": 12,
      "group": "Friday priorities",
      "item": "Japan road routing + H3 + points of interest, locked",
      "status": "complete",
      "note": "Tested live 5 Oct: Tokyo->Yokohama 31.4 km, Osaka->Kyoto 51.9 km (fix: tile cache 256 MB -> 2 GB). Was wrongly marked complete earlier without a route test"
    },
    {
      "n": 13,
      "group": "Friday priorities",
      "item": "Japan map file",
      "status": "complete",
      "note": "Tested live 5 Oct: japan.pmtiles 1.6 GB (PMTiles v3, z0-14), app manifest \"Japan available\", style picks it for Tokyo, HTTP 206 via the app; locked"
    },
    {
      "n": 14,
      "group": "Friday priorities",
      "item": "Japan in web route + app region list",
      "status": "complete",
      "note": "Tested live 5 Oct: routing (Tokyo->Yokohama car 50 min) + map + region list. JR trains still need the ODPT key (#63)"
    },
    {
      "n": 15,
      "group": "Friday priorities",
      "item": "Owner Deletion page + owner's 4 deletions",
      "status": "complete",
      "note": "gtfs + osm_transit; 4 tables deleted by the owner 2 Oct, all verified on E: first"
    },
    {
      "n": 16,
      "group": "Friday priorities",
      "item": "Nightly server backups with safe rotation",
      "status": "complete",
      "note": "Ran 2, 3, 4 Oct, validated"
    },
    {
      "n": 17,
      "group": "Friday priorities",
      "item": "PC backup pull to D:",
      "status": "pending",
      "note": "BLOCKED: D: is full (0 GB free; Safe2Go-Backups 169.7 GB, EasyShare 62.4 GB, Movies 6.2 GB). Pull of 3, 4, 5 Oct failed. Server rotation frees 30 Sep + 1 Oct tonight and 2 Oct tomorrow (D: receipts); 3-5 Oct cannot rotate without a D: copy. Owner decision needed on D: space"
    },
    {
      "n": 18,
      "group": "Friday priorities",
      "item": "Close the database to the internet",
      "status": "pending",
      "note": "Railway step together with the owner"
    },
    {
      "n": 19,
      "group": "Friday priorities",
      "item": "36 bigger versions",
      "status": "complete",
      "note": "Kept archive-only (owner decision)"
    },
    {
      "n": 20,
      "group": "Friday priorities",
      "item": "Delhi buses + metro from the owner's files",
      "status": "complete",
      "note": ""
    },
    {
      "n": 21,
      "group": "Friday priorities",
      "item": "\"Use all data\" rule (calendars extended, one-day services exact)",
      "status": "complete",
      "note": ""
    },
    {
      "n": 22,
      "group": "Friday priorities",
      "item": "Deletable files backed up to E:",
      "status": "complete",
      "note": "Row counts = live tables"
    },
    {
      "n": 23,
      "group": "Friday priorities",
      "item": "Europe POI + Japan files to E:",
      "status": "pending",
      "note": "E: disconnected"
    },
    {
      "n": 24,
      "group": "Friday priorities",
      "item": "Today's repairs backed up to E:",
      "status": "pending",
      "note": "E: disconnected; server nightly backups hold them"
    },
    {
      "n": 25,
      "group": "Friday priorities",
      "item": "Report \"E: no longer needed\"",
      "status": "pending",
      "note": ""
    },
    {
      "n": 26,
      "group": "Feeds",
      "item": "Worldwide load of 963 missing feeds",
      "status": "complete",
      "note": "Finished 2 Oct 17:10"
    },
    {
      "n": 27,
      "group": "Feeds",
      "item": "Feed Problems page (empty/failed/duplicate + alternatives)",
      "status": "complete",
      "note": "/feed-problems.html, refreshed every 15 min"
    },
    {
      "n": 28,
      "group": "Feeds",
      "item": "Alternatives for 17 feeds with none found",
      "status": "pending",
      "note": "Transitland now searched automatically by the loop"
    },
    {
      "n": 29,
      "group": "Feeds",
      "item": "Germany-wide timetable",
      "status": "complete",
      "note": "Compared on 10 real trips: 9 identical, Berlin better with mdb-1090 -> mdb-1090 stays in search with calendars extended to 2027 (owner rule); mdb-3215 kept, locked, out of search (duplicate)"
    },
    {
      "n": 30,
      "group": "Feeds",
      "item": "Spain Renfe commuter + long-distance",
      "status": "complete",
      "note": "114,348 + 7,270 trips"
    },
    {
      "n": 31,
      "group": "Feeds",
      "item": "Mexico City, Harare, Cape May ferry repaired",
      "status": "complete",
      "note": "Format repairs only"
    },
    {
      "n": 32,
      "group": "Feeds",
      "item": "Namma Metro Bangalore",
      "status": "complete",
      "note": ""
    },
    {
      "n": 33,
      "group": "Feeds",
      "item": "Calendar header bug (3 feeds) repaired",
      "status": "complete",
      "note": "Add-only"
    },
    {
      "n": 34,
      "group": "Feeds",
      "item": "One-day services audit",
      "status": "complete",
      "note": "1,791 one-day services back to their real date (update only)"
    },
    {
      "n": 35,
      "group": "Feeds",
      "item": "London (Great Britain snapshot)",
      "status": "complete",
      "note": "TfL Tube/DLR/trams (Transitland) + UK buses search file built; Northern line found"
    },
    {
      "n": 36,
      "group": "Feeds",
      "item": "Cape Town + Johannesburg",
      "status": "pending",
      "note": "No feed exists in the database"
    },
    {
      "n": 37,
      "group": "Feeds",
      "item": "Nairobi",
      "status": "complete",
      "note": "DigitalMatatus reactivated (use-all-data rule); live: Walking + Bus"
    },
    {
      "n": 38,
      "group": "Ferries",
      "item": "Norway (Entur)",
      "status": "complete",
      "note": "393,376 trips"
    },
    {
      "n": 39,
      "group": "Ferries",
      "item": "Sweden national file",
      "status": "complete",
      "note": "Duplicate of loaded Trafiklab feeds"
    },
    {
      "n": 40,
      "group": "Ferries",
      "item": "Washington State Ferries duplicates",
      "status": "complete",
      "note": "2 copies set stale, data kept"
    },
    {
      "n": 41,
      "group": "Ferries",
      "item": "Croatia ferries (Jadrolinija)",
      "status": "pending",
      "note": ""
    },
    {
      "n": 42,
      "group": "Ferries",
      "item": "Italy national access point",
      "status": "pending",
      "note": ""
    },
    {
      "n": 43,
      "group": "Ferries",
      "item": "Ferry-only search option",
      "status": "complete",
      "note": "Tested live 5 Oct 21:45 UTC: Seattle -> Bainbridge Island 14 options from the real WSF timetable incl. walk + ferry + walk at 15:00, 15:50, 16:45, 17:45 and bus 125 / C Line / 395 combinations"
    },
    {
      "n": 44,
      "group": "Ferries",
      "item": "Live ship positions (AIS)",
      "status": "pending",
      "note": "Needs AISHub account (receiver)"
    },
    {
      "n": 45,
      "group": "Flights",
      "item": "OpenFlights routes (67,184), locked",
      "status": "complete",
      "note": ""
    },
    {
      "n": 46,
      "group": "Flights",
      "item": "OurAirports",
      "status": "complete",
      "note": "Same as #82: OurAirports 86,185 airports loaded + locked, scheduled-service rule live (BER verified 5 Oct)"
    },
    {
      "n": 47,
      "group": "Flights",
      "item": "OpenSky credentials installed + tested",
      "status": "complete",
      "note": "634 aircraft over Germany in the test"
    },
    {
      "n": 48,
      "group": "Flights",
      "item": "Live aircraft feature",
      "status": "pending",
      "note": "Note 5 Oct: OpenSky is non-commercial only - use the adsb.lol live feed (ODbL) instead"
    },
    {
      "n": 49,
      "group": "Flights",
      "item": "Real flight schedules",
      "status": "pending",
      "note": "Started without AeroAPI: real published schedules (Air France-KLM, Corsair, Air Corsica) live in the app - see #85/#86. More airlines still to add"
    },
    {
      "n": 50,
      "group": "Locks",
      "item": "All data tables hard-locked (+ auto-lock of new tables)",
      "status": "complete",
      "note": "Audit 5 Oct 20:00 UTC: all 129 tables (gtfs 72, osm_transit 33, mobility_graph 24) have delete + truncate locks; all feed archive files immutable (235 more downloads locked today). Exempt: raptor_feed_cells, route_cache, spatial_ref_sys and the search snapshot files (rebuilt from the locked tables)"
    },
    {
      "n": 51,
      "group": "Locks",
      "item": "Valhalla tiles + configs, map tiles, catalogs, archives locked",
      "status": "complete",
      "note": ""
    },
    {
      "n": 52,
      "group": "1 Oct plan",
      "item": "Phase 0: date-exception reload, search rebuilds, Istanbul, USA search, DB lock, transfers",
      "status": "complete",
      "note": ""
    },
    {
      "n": 53,
      "group": "1 Oct plan",
      "item": "Melbourne multi-file split",
      "status": "pending",
      "note": ""
    },
    {
      "n": 54,
      "group": "1 Oct plan",
      "item": "Source watcher (new feed versions)",
      "status": "pending",
      "note": ""
    },
    {
      "n": 55,
      "group": "1 Oct plan",
      "item": "Golden locked backup",
      "status": "pending",
      "note": ""
    },
    {
      "n": 56,
      "group": "1 Oct plan",
      "item": "Search speed test after USA",
      "status": "pending",
      "note": ""
    },
    {
      "n": 57,
      "group": "1 Oct plan",
      "item": "Handover document update",
      "status": "pending",
      "note": ""
    },
    {
      "n": 58,
      "group": "1 Oct plan",
      "item": "TO-BE Phase 1: transfer/airport/ferry graph",
      "status": "pending",
      "note": ""
    },
    {
      "n": 59,
      "group": "1 Oct plan",
      "item": "TO-BE Phase 2: universal place graph",
      "status": "pending",
      "note": ""
    },
    {
      "n": 60,
      "group": "1 Oct plan",
      "item": "TO-BE Phase 3: remove third-party APIs",
      "status": "pending",
      "note": "Started: Foursquare/Geoapify replaced as first station fallback by own OSM data (5 Oct)"
    },
    {
      "n": 61,
      "group": "1 Oct plan",
      "item": "TO-BE Phase 4 / traffic A+B",
      "status": "pending",
      "note": ""
    },
    {
      "n": 62,
      "group": "Needs the owner",
      "item": "Transitland key",
      "status": "complete",
      "note": "Installed 5 Oct; TfL, UK National Rail, Tokyo Metro, Tsukuba Express loaded"
    },
    {
      "n": 63,
      "group": "Needs the owner",
      "item": "ODPT key (Japan)",
      "status": "pending",
      "note": ""
    },
    {
      "n": 64,
      "group": "Needs the owner",
      "item": "Spain NAP key",
      "status": "complete",
      "note": "Installed 5 Oct; 13 operators loaded (#79); the NAP is a daily source of the coverage loop"
    },
    {
      "n": 65,
      "group": "Needs the owner",
      "item": "Railway restricted DB user + new password",
      "status": "pending",
      "note": ""
    },
    {
      "n": 66,
      "group": "Needs the owner",
      "item": "GitHub token revoke; DB password in git history",
      "status": "pending",
      "note": ""
    },
    {
      "n": 67,
      "group": "Needs the owner",
      "item": "Twilio credentials + real-phone safety test",
      "status": "pending",
      "note": ""
    },
    {
      "n": 68,
      "group": "Needs the owner",
      "item": "PC on at 07:30 + plug in E:",
      "status": "pending",
      "note": ""
    },
    {
      "n": 69,
      "group": "5 Oct",
      "item": "Never-ending coverage loop (test all trips x modes, find + load missing feeds)",
      "status": "complete",
      "note": "Running; results at /coverage.html. Cycle 1: 71 of 110 checks found"
    },
    {
      "n": 70,
      "group": "5 Oct",
      "item": "Search bug: stops of different cities mixed (fake walks, e.g. Frankfurt->New York)",
      "status": "complete",
      "note": "Fixed (per-network offsets), reproduced + verified; commit ac6f486"
    },
    {
      "n": 71,
      "group": "5 Oct",
      "item": "Search service had bad data in memory since 2 Oct 08:02",
      "status": "complete",
      "note": "Restarted; Delhi/Berlin/Madrid back"
    },
    {
      "n": 72,
      "group": "5 Oct",
      "item": "20 stale feeds in uncovered areas reactivated (use-all-data rule)",
      "status": "complete",
      "note": "Indian Railways, Moscow, SF Muni, Atlanta MARTA, Detroit, Albany, Nairobi + 13; calendars extended (update only)"
    },
    {
      "n": 73,
      "group": "5 Oct",
      "item": "Paris: search too slow (52 feeds) - app shows no transit",
      "status": "pending",
      "note": "Re-measured 5 Oct 21:46 UTC: 502 after 29 s, then 51 s - server load 9.9 on 8 cores at that moment (nightly backup + observed-flight and US on-time loaders + search service at 100%); timetable search itself answered. Re-measure after the loaders finish"
    },
    {
      "n": 74,
      "group": "5 Oct",
      "item": "Cape Town + Johannesburg: find a feed source outside the Mobility Database",
      "status": "pending",
      "note": ""
    },
    {
      "n": 75,
      "group": "5 Oct",
      "item": "Istanbul city ferries, Helsinki-Tallinn, Dover-Calais, Split-Hvar, Genoa-Palermo ferries",
      "status": "pending",
      "note": "Gaps found by the loop"
    },
    {
      "n": 76,
      "group": "5 Oct",
      "item": "Search crashes (out of memory) fixed: per-feed index, light networks, duplicate national feeds out of search",
      "status": "complete",
      "note": "Identical answers verified; warm 0.2-1.5 s; commit 50531af"
    },
    {
      "n": 77,
      "group": "5 Oct",
      "item": "Parallel live-app tester (all trips through the real app, no paid quota)",
      "status": "complete",
      "note": "/coverage.html \"Live app\""
    },
    {
      "n": 78,
      "group": "5 Oct",
      "item": "First search per city after a restart is slow (loading feed files)",
      "status": "pending",
      "note": "Preload big feeds at start"
    },
    {
      "n": 79,
      "group": "5 Oct",
      "item": "Spain NAP key: 13 new operators loaded (La Rioja, Aragón, Linares, Badajoz...)",
      "status": "complete",
      "note": "Tested live: Logroño->Villamediana 8 journeys (M3/M5/M6). Badajoz file only has 17 Jul-1 Aug; Linares to re-test"
    },
    {
      "n": 80,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Principle: static/downloaded data is the primary routing database; APIs only for live info (delays, cancellations, fares, availability, traffic)",
      "status": "pending",
      "note": "Standing rule, applied to every item below"
    },
    {
      "n": 81,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Data classes A static-own / B semi-static periodic download / C live API - each source tagged with its class, licence and refresh cadence (source register)",
      "status": "pending",
      "note": "Source register master.source created: 10 sources with class A/B/C, licence, refresh"
    },
    {
      "n": 82,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Airport Master",
      "status": "complete",
      "note": "OurAirports 86,185 airports, scheduled-service rule live (BER verified 5 Oct)"
    },
    {
      "n": 83,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Airline Master + Flight Route Master (network seed)",
      "status": "complete",
      "note": "mobility_graph.master (locked): 4,133 airport nodes, 5,744 airlines (63 verified operating), 64,721 routes. Tested: FRA->DEL Air India+Lufthansa, BER->MUC Lufthansa, FRA->KTM 11 hubs"
    },
    {
      "n": 84,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Connecting flights via hubs (routes only)",
      "status": "complete",
      "note": "Live 5 Oct: one-hub search on real routes; FRA->KTM via DEL/IST/DXB tested on data"
    },
    {
      "n": 85,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Flight Schedule Master + Operating Calendar (airline/airport published schedules; Aviation Edge downloads as backup)",
      "status": "pending",
      "note": "Loaded 5 Oct (owner said use them): Air France-KLM 396,092 legs, Corsair 1,617, Air Corsica 4,002 (SSIM, times converted from UTC and verified: AF001 JFK 16:30 -> CDG 05:55+1); Finist'Air via GTFS. Still to add: Taiwan domestic and other airlines' published schedules (only these airlines have real times so far); Aviation Edge = owner decision (paid)"
    },
    {
      "n": 86,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Time-dependent flight routing: arrival + minimum connection time < next departure",
      "status": "complete",
      "note": "Live 5 Oct 2026, tested in the app: Mannheim -> Delhi AF1019 FRA 07:05 -> CDG -> AF284 22:50 and KL1826 STR 06:00 -> AMS -> KL871 01:55+1; Paris -> New York AF002 08:30 -> JFK 10:40; Marseille -> Ajaccio Air Corsica XK151 08:50. Exact UTC times, 60/90 min planning connection time (no airport-specific values yet), separate flight service (safe2go-flights). Airlines without a loaded schedule still show route-only 'check airline'"
    },
    {
      "n": 87,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Port Master + Ferry Operator Master + Ferry Route Master + Ferry Sailing Master",
      "status": "pending",
      "note": "First part 6 Oct: from the loaded timetables - 4,292 ferry terminals, 238 operators (= data providers, e.g. Entur; the real ferry company names need the GTFS agency files, not loaded yet), 6,734 terminal-to-terminal routes (mobility_graph.master, locked). Plus Finnish port calls (#88). Still missing: seas without open timetables (Mediterranean, Turkey...)"
    },
    {
      "n": 88,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Ferry operator adapters (GNV, Tallink/Viking, Jadrolinija...) from official timetables, source hierarchy 1-7",
      "status": "pending",
      "note": "Started 5 Oct: Finnish port calls (Fintraffic Digitraffic, CC BY 4.0) collected hourly - official actual departure/arrival per ship and port; Helsinki-Tallinn (Megastar, MyStar, Finlandia, Viking XPRS, Victoria I), Aland/Mariehamn-Stockholm (Silja, Viking, Eckero). Plus passenger-ship stop/start events from Digitraffic AIS (CC BY 4.0, 120 ships, every 2 min) for the arrival/departure at the foreign end (Tallinn, Stockholm). Next (after ~1 week of data): weekly sailing patterns into the journey search. Other seas: no open archive confirmed yet (Danish archive moved, aisstream.io terms unclear); GNV/Jadrolinija/Tallink official timetables still to do"
    },
    {
      "n": 89,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Bus Master: internal model must not require GTFS; operator adapters (UPSRTC, Haryana Roadways, RSRTC, MSRTC, private)",
      "status": "pending",
      "note": "India private buses from owner file = first adapter (done 2 Oct)"
    },
    {
      "n": 90,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "GTFS stays the first global acquisition (Mobility Database, Transitland, NAPs) - download, never runtime API",
      "status": "complete",
      "note": "Coverage loop: Mobility Database + Transitland + Spain NAP, insert-only"
    },
    {
      "n": 91,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Universal transfer graph (intermodal_transfer edges: walk, taxi, airport transfer, ferry terminal, border)",
      "status": "pending",
      "note": "First part 6 Oct: 707 airports linked to train/metro/tram stations within 4 km (distinct stations), 4,292 ferry terminals to stops within 500 m, both directions (master.intermodal_transfer). Airports have NO walking time (their point is the runways, not a terminal - never invented); needs terminal positions. Existing: 2.9M official GTFS transfers + station change times"
    },
    {
      "n": 92,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Border Crossing Master (UNECE dataset) + Valhalla stitching through border nodes",
      "status": "pending",
      "note": "Step 1 live 5 Oct: Germany<->Europe via shared tiles + real German border. Step 2 6 Oct: Border Crossing Master from OpenStreetMap barrier=border_control (ODbL, one worldwide download, archived + locked): 9,539 crossings, 1,012 with opening hours, 2,026 with allowed vehicles (master.border_crossing). Next: countries on each side, Valhalla stitching through border nodes"
    },
    {
      "n": 93,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "mobility_connection: one universal connection table for every mode",
      "status": "pending",
      "note": "Table created + extended for flights (UTC offsets, day offset, trip, aircraft); 396,092 AF-KLM flight legs in it"
    },
    {
      "n": 94,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "One time-dependent journey engine over mobility_connection (replaces separate flight/train/bus/ferry planners)",
      "status": "pending",
      "note": ""
    },
    {
      "n": 95,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "AeroAPI, Mappls, Overpass, Photon, OSRM, ferry/bus APIs = optional enrichment only",
      "status": "pending",
      "note": "Foursquare/Geoapify demoted to last resort 5 Oct"
    },
    {
      "n": 96,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Observed flights for every airline (OpenSky) - owner yes 5 Oct",
      "status": "complete",
      "note": "Stopped + disabled 5 Oct ~21:15 UTC (owner yes): OpenSky terms are non-commercial only. Never used by the flight search. 74,582 downloaded flights (99 airports) kept, locked. All airlines now come from adsb.lol (#99, ODbL)"
    },
    {
      "n": 97,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Lufthansa group published schedules (Lufthansa Open API) - owner yes 5 Oct",
      "status": "complete",
      "note": "Dropped by owner 5 Oct: Lufthansa closed new sign-ups. Lufthansa group comes from observed flights (#99)"
    },
    {
      "n": 98,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Real-schedule flights never hide other airlines' direct routes",
      "status": "complete",
      "note": "Owner report 5 Oct (Mannheim -> Delhi only AF/KL). Live after fix: Direct Flight Air India, Lufthansa + AF1019 -> AF284 as an extra option"
    },
    {
      "n": 99,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Every airline from observed flights: adsb.lol daily worldwide archive (ODbL) -> weekly flight patterns",
      "status": "complete",
      "note": "Tested live 6 Oct 2026 in the app: Mannheim -> Delhi shows Air India AIC2026 Frankfurt take-off ~12:34 -> Delhi ~00:40 (+1), Lufthansa listed as the other direct airline; Stuttgart option Austrian + Air India via Vienna marked self-transfer. Week 28 Sep - 4 Oct: 95,815 weekly patterns for every airline (LH760 daily after the weekday fix). 3 more weeks (7 - 27 Sep) loading for more complete weekdays"
    },
    {
      "n": 100,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Probability of delay and cancellation per flight from historical data (owner 5 Oct)",
      "status": "pending",
      "note": "US DOT on-time data loading (24 months, exact counts per month). Live in the app: on-time record per airline and route in flight options (e.g. JFK -> LAX JetBlue 78.4% on time, 2.1% cancelled). Outside the US: from observed vs published times - next"
    },
    {
      "n": 101,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "No omitted flights: global rules + omission audit for every airport/route/airline (owner 5 Oct)",
      "status": "pending",
      "note": "Rules apply worldwide (no per-airport fixes): unseen landing/take-off taken from the same aircraft's next/previous flight, or from the same flight number on other days. Audit after every run on /flight-coverage.html: every unknown end by airport, every published (AF-KLM/Corsair/Air Corsica) flight not seen, every route of operating airlines not seen - full lists, no threshold"
    },
    {
      "n": 102,
      "group": "TO-BE plan (owner 5 Oct, /docs/Offline map data options - best.pdf)",
      "item": "Fabrication counter-check of observed flights (owner 5 Oct)",
      "status": "pending",
      "note": "Full week: 92% of observed patterns match the published AF-KLM-group timetable (3,281 of 3,578; 315 of them delayed). Fixed 6 Oct: fake approach-fragment flights (Hindon -> Delhi), coverage-hole splits joined, patterns not confirmed by a run retired (confidence 0, kept), airport size from observed traffic instead of guessed hub/regional, self-transfers between airlines flagged (120 min). Open: freighter flights of passenger airlines (no licensed data tells them apart)"
    },
    {
      "n": 103,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Owner rules that override the Blueprint (kept)",
      "status": "complete",
      "note": "Blueprint adopted except where it conflicts with standing owner rules: (1) its staging script runs DROP SCHEMA ... CASCADE - staging stays insert-only, never dropped; (2) \"row-count drop over 30% needs review\" - owner rule is exact: any reduction, even 1 row, is listed; (3) \"service window ended = stale, lower confidence\" - owner rule: use all data, calendars extended to 2027, still routed; (4) observed flight schedules from OpenSky - OpenSky is non-commercial only, adsb.lol (ODbL) is used instead"
    },
    {
      "n": 104,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "No route fabrication - owner rule, applies to every Blueprint layer",
      "status": "complete",
      "note": "Every new layer keeps rejectFabricatedRoutes() and noReliableRoute (the Blueprint says the same). Enforced by: the deploy-gate fabrication tests (78 tests before every push); real data only, a missing time stays unknown (airport walking times removed 6 Oct); observed flights show the radio callsign, never a made-up flight number; implausible, cargo and one-off flights left out and listed; validate_observed.py compares observed flights with published timetables (93% match). Any route without evidence is not shown"
    },
    {
      "n": 105,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Key decision 1: one mobility_connection table for every scheduled mode + one transfer table",
      "status": "pending",
      "note": "Tables exist (master.mobility_connection, master.intermodal_transfer). Flights in it: Air France-KLM/Corsair/Air Corsica + observed patterns (building). Rail/bus/metro/ferry still in the GTFS tables + RAPTOR snapshots"
    },
    {
      "n": 106,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Schema alignment: node hierarchy (city > station > platform, parent_node_id) + external IDs (GTFS stop_id, IATA, ICAO, UN/LOCODE, UIC)",
      "status": "pending",
      "note": "master.node has node_id/type/name/coords/country/timezone/source; parent_node_id and external_ids still to add (add-only columns)"
    },
    {
      "n": 107,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Schema alignment: service_calendar + exceptions table; connection trip_id + seq, departure/arrival seconds + IANA tz, arrival_day_offset, bookable",
      "status": "pending",
      "note": "Today: operating days + validity inline per connection, local time + UTC offsets + arr_day_offset + trip_ref (flights). Exceptions table, seq, tz name, bookable to add"
    },
    {
      "n": 108,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Source register fields: kind, url, licence, fetched_at, version_hash on every source",
      "status": "pending",
      "note": "master.source has 14 sources with class, licence, refresh, url; kind / fetched_at / version_hash to add; every new source recorded with its licence since 5 Oct"
    },
    {
      "n": 109,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Mode classification at ingestion: one to_mode() for basic (0-12) + extended (100-1700) codes, original code kept, unknown codes logged",
      "status": "pending",
      "note": "RAPTOR uses mode groups; Blueprint ranges to apply everywhere (monorail 12/405, ferry 4/1000-1021/1200, cable 6/7/1300-1307/1400, DRT 1500-1507 flagged); log every unknown code"
    },
    {
      "n": 110,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Ingestion pipeline: keyless Mobility Database catalogue CSV, content-hash data lake, skip unchanged, MobilityData validator, staging + merge per feed",
      "status": "pending",
      "note": "Coverage loop already downloads (Mobility Database API token + Transitland + Spain NAP), insert-only. To add: catalogue CSV, sha256 lake, Java validator report, per-feed staging WITHOUT DROP (owner rule)"
    },
    {
      "n": 111,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Quality gates on every load: validator, coordinates inside the feed country polygon and not 0,0, plausible speeds per mode, regression journeys",
      "status": "pending",
      "note": "Country polygons now loaded (Natural Earth, 258 countries). Speed check done for observed flights (fabrication check). Regression set to add to the coverage loop: Mannheim -> Frankfurt, Sahibabad -> Connaught Place, FRA -> DEL, Genoa -> Palermo"
    },
    {
      "n": 112,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Rail / coach / private bus: OperatorAdapter interface (fetch / parse / normalise / validate -> GTFS-like bundle); booking platforms only as sources + deep-links",
      "status": "pending",
      "note": "India private buses from the owner file = first adapter (2 Oct). Priority: Indian STUs (MSRTC, UPSRTC, RSRTC, Haryana, KSRTC, TNSTC, APSRTC, TGSRTC), Indian Railways rebuild, IntrCity/NueGo/Zingbus only under licence; no scraping behind logins"
    },
    {
      "n": 113,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Ferries: Port Master + Sailing Master; ferry fields arrival_day_offset, season_from/to, vehicles_allowed, foot_passengers_allowed, check_in_close_min, port node per terminal",
      "status": "pending",
      "note": "Port/operator/route masters from timetables (4,292 terminals, 6,734 routes); Finnish port calls + AIS events collecting; ferry-specific fields to add; operator adapters (GNV, Grimaldi, Tirrenia/Moby, Corsica Ferries, Stena, DFDS, P&O, Brittany, Tallink Silja, Viking, Blue Star, Seajets, Indian coastal/Andaman) to build from official timetables"
    },
    {
      "n": 114,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Flights: minimum connection defaults 45 min domestic, 60 international small airports, 90 large hubs, 120 terminal change / self-transfer; self-transfers flagged to the user",
      "status": "pending",
      "note": "Today 60 domestic / 90 international for every airport; to change to the Blueprint defaults + self-transfer flag"
    },
    {
      "n": 115,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Flights: check-in close before departure (domestic 45, international 60-90) and arrival buffer for immigration/baggage as transfer data",
      "status": "pending",
      "note": "Today buffers in code (100 min before, arrival buffer by type); to move into the transfer table"
    },
    {
      "n": 116,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Flight schedules option 1: observed weekly patterns for every airline",
      "status": "pending",
      "note": "Running from adsb.lol (ODbL) instead of OpenSky (non-commercial): 7 days loading, patterns + omission audit + fabrication check (93% match vs published)"
    },
    {
      "n": 117,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Flight schedules options 2-4: airline-published timetables (top 50 airlines), Aviation Edge downloads, OAG/Cirium SSIM",
      "status": "pending",
      "note": "Air France-KLM, Corsair, Air Corsica SSIM loaded. Aviation Edge / OAG / Cirium = paid, owner decision"
    },
    {
      "n": 118,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Intermodal transfers: GTFS transfers.txt + pathways.txt; walk links between stops within 400 m (800 m at stations/airports) timed with Valhalla pedestrian costing",
      "status": "pending",
      "note": "2.9M official transfers exist; pathways not yet; ferry-terminal walk links exist but straight-line based - to re-time with Valhalla pedestrian costing as the Blueprint says"
    },
    {
      "n": 119,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Station <-> airport and station <-> port links: walking where they share a building (FRA Fernbahnhof), otherwise the fastest scheduled or taxi leg",
      "status": "pending",
      "note": "707 airports linked to stations within 4 km (no walking time - airport point is the runways); needs terminal positions (OSM aeroway=terminal) to time the walks"
    },
    {
      "n": 120,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Mode rules as data: airport / ferry check-in close, security time in mobility_graph tables (mode_service_hours, place_fare_surcharge - empty today)",
      "status": "pending",
      "note": ""
    },
    {
      "n": 121,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Global connector graph: precomputed road legs from airports, ports, major stations and border crossings to gateway nodes, per Valhalla region",
      "status": "pending",
      "note": ""
    },
    {
      "n": 122,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Valhalla regions overlap 20-50 km at their edges so border nodes exist in both graphs",
      "status": "pending",
      "note": "Germany <-> Europe shared tiles + German outline (5 Oct) is the first case"
    },
    {
      "n": 123,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Remove the public OSRM fallback: wire all tile sets, build Valhalla for Latin America, Middle East, East Asia, rest of SE Asia, New Zealand, then return connectorUnavailable",
      "status": "pending",
      "note": "14 Valhalla regions wired today (incl. Japan 5 Oct); the remaining regions to build from Geofabrik extracts"
    },
    {
      "n": 124,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Search: normalise + transliterate + abbreviations, alias match, prefix (edge n-gram), pg_trgm fuzzy, spatial bias, snap to building; consider Typesense/Meilisearch for < 100 ms",
      "status": "pending",
      "note": "Own index exists (place_search_index); latency lesson of 29 Sep: test any index swap before going live"
    },
    {
      "n": 125,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Reverse geocoding: GPS -> road -> locality -> building -> address evidence -> confidence; DIGIPIN for India; house number only when a building or range covers the point",
      "status": "pending",
      "note": ""
    },
    {
      "n": 126,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Retire external services in order: Overpass -> local OSM; Geoapify/Foursquare -> own stops (started 5 Oct); ipwho.is -> local IP database; Photon/LocationIQ/OpenCage/TomTom -> own index per country; Nominatim reverse -> own addresses; Mappls last",
      "status": "pending",
      "note": "Local IP database: DB-IP Lite (CC BY 4.0) to check licence before use"
    },
    {
      "n": 127,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Journey engine: two levels - RAPTOR per region + sparse long-haul layer (flights, overnight ferries, long-distance rail/coach) between gateway nodes; 8-step query flow with Pareto filter and live overlay last",
      "status": "pending",
      "note": "RAPTOR per region live (local transit) + time-dependent flight search live (/raptor/flights). Long-haul ferry/rail layer + gateway stitching to build"
    },
    {
      "n": 128,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Benchmark MOTIS (Transitous) and OpenTripPlanner 2 as the per-region layer before writing more own engine code",
      "status": "pending",
      "note": "Licences to check first (MOTIS MIT, OTP LGPL)"
    },
    {
      "n": 129,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Performance: flat in-memory arrays per region and service day, rolling 7-14 day window, UTC seconds for search; route_connections as the \"any service?\" prefilter",
      "status": "pending",
      "note": "RAPTOR already uses in-memory per-feed arrays; rolling window + UTC seconds to check"
    },
    {
      "n": 130,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Ingest shapes.txt for leg geometry and distance",
      "status": "pending",
      "note": "Today transit leg distance is estimated from road distance"
    },
    {
      "n": 131,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Live layer: every GTFS-RT feed in the catalogue; flight status (AeroAPI optional); AIS ship positions",
      "status": "pending",
      "note": "20 GTFS-RT feeds today; Finnish AIS events collecting"
    },
    {
      "n": 132,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Licensing: record every source licence in source.licence and check before production; OTD Delhi commercial terms to confirm; OpenSky commercial licence (not used)",
      "status": "pending",
      "note": "OpenSky stopped 5 Oct (non-commercial); aircraft database without licence not used; Wikipedia cargo list CC BY-SA recorded"
    },
    {
      "n": 133,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Roadmap Phase 1 (code over existing tables): hub flight search, local fallbacks for Overpass/Geoapify/Foursquare/ipwho.is, wire map tiles, intermodal transfer table",
      "status": "pending",
      "note": "Hub flights done (5 Oct), transfer table first part done (6 Oct), Foursquare/Geoapify demoted (5 Oct); Overpass + ipwho.is still to replace"
    },
    {
      "n": 134,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Roadmap Phase 2: multi-change transit (RAPTOR / MOTIS / OTP), observed flight schedules, cross-region road via overlapping Valhalla + border master + connector graph, address search per country",
      "status": "pending",
      "note": "RAPTOR multi-change live; observed flights loading; border master 9,539 crossings loaded"
    },
    {
      "n": 135,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Roadmap Phase 3: ferry Port/Sailing masters + adapters, Indian STU and operator adapters, launch JP/CN/RU transit, every GTFS-RT feed, shapes.txt",
      "status": "pending",
      "note": ""
    },
    {
      "n": 136,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Roadmap Phase 4: own traffic model from Safe2Go GPS pings + historic speeds; Mappls replaced through locality_alias usage",
      "status": "pending",
      "note": ""
    },
    {
      "n": 137,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Road routing: every Valhalla region supervised (auto-restart) and tested with a real route",
      "status": "complete",
      "note": "6 Oct: Germany, Australia, Brazil, Mexico, Malaysia/Singapore/Brunei were silently down (unsupervised processes) - restarted as services; China, Canada, Argentina, Russia converted too; USA/Europe/Africa/India stay under mem_watchdog. All tested with real routes"
    },
    {
      "n": 138,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "New road-routing regions for countries with timetables but no roads (Blueprint)",
      "status": "pending",
      "note": "New Zealand LIVE 6 Oct (Auckland/Wellington; app routes NZ there, map stays australia.pmtiles). Middle East + Caucasus building; Latin America and South/SE Asia (Taiwan, Thailand, Indonesia, Philippines...) queued - they wait for 70 GB free so the nightly backups stay complete. Turkey, Georgia, Cyprus already route on the Europe tiles, Hong Kong + Macao on the China tiles (tested)"
    },
    {
      "n": 139,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Timetables for the 37 countries with airline flights but no timetables",
      "status": "pending",
      "note": "Mobility Database has none of their own for almost all (only cross-border feeds). 36 capital-city tests added to the coverage loop so it searches Mobility Database + Transitland for each every cycle; Transitland sweep running (1,110 feeds of unserved operators, 40 per cycle)"
    },
    {
      "n": 140,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Europe points of interest split by country",
      "status": "complete",
      "note": "6 Oct: 19,639,580 of 19.7M mapped by H3 (France 2.6M, Italy 1.3M, Spain 1.25M, Turkey 254k...); 50,914 in border cells marked, not guessed; new file poi_country_europe.sqlite (locked), the locked poi.sqlite untouched"
    },
    {
      "n": 141,
      "group": "TO-BE Blueprint (owner 6 Oct, /docs/Safe2Go Global Mobility Data and Journey Engine Blueprint.pdf)",
      "item": "Feeds without a country code",
      "status": "complete",
      "note": "30 feeds fixed from their stops; runs after every loop cycle"
    },
    {
      "n": 142,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Method: P(5+/15+/60+ min late), P(cancelled) per operator + station/route + hour, last 12 months; sample size shown; min 20 departures; never carried across operators (no fabrication)",
      "status": "complete",
      "note": "Defined 6 Oct; one table for all ground/water modes: gtfs.transit_ontime (hard-locked)"
    },
    {
      "n": 143,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Air - USA: US DOT on-time data in flight options",
      "status": "complete",
      "note": "24 months, 14.1M flights; live in the app per airline + route"
    },
    {
      "n": 144,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Air - rest of the world: observed take-off vs published departure",
      "status": "pending",
      "note": "adsb.lol + airline timetables; median take-off 20 min after departure (AF-KLM group)"
    },
    {
      "n": 145,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Rail - Netherlands (Rijden de Treinen archive, CC0/CC BY)",
      "status": "complete",
      "note": "24 months loaded (Oct 2024 - Sep 2026): 39.8M departures, exact counts per month; 591 stations with coordinates. 2019-2024 can follow when disk allows"
    },
    {
      "n": 146,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Rail - Finland (Digitraffic, CC BY 4.0)",
      "status": "complete",
      "note": "365 days loaded: 9.9M passenger departures; 209 stations with coordinates; daily top-up to schedule"
    },
    {
      "n": 147,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Rail/bus/tram - Switzerland (opentransportdata.swiss Ist-Daten)",
      "status": "pending",
      "note": "Free; download path to confirm"
    },
    {
      "n": 148,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Rail - UK: ORR station + operator performance (table 3130b, Open Government Licence) - no registration needed",
      "status": "complete",
      "note": "Loaded 6 Oct: 146,023 rows, 2,599 stations, 26 operators, 4-week periods Apr 2023 - Aug 2026: % within 3 min, % cancelled (low-quality cells kept marked, never estimated). Train-by-train data (National Rail Darwin) would still need a registration - optional"
    },
    {
      "n": 149,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Bus/metro/tram worldwide: GTFS-RT TripUpdates collector",
      "status": "pending",
      "note": "20 realtime feeds loaded; collector to build"
    },
    {
      "n": 150,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Ferry - Finland/Baltic: port calls planned vs actual",
      "status": "pending",
      "note": "Data collecting since 5 Oct (978 port calls)"
    },
    {
      "n": 151,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Show the probabilities in the app per leg (rail, bus, ferry, flight)",
      "status": "pending",
      "note": "Flights (US) live. Trains LIVE 6 Oct for the Netherlands, Finland and Great Britain - tested: Amsterdam -> Utrecht shows \"Amsterdam Centraal around 16:00 (Rijden de Treinen, last 12 months): 6.3% left 5+ min late, 0.7% 15+ min, 10.1% cancelled (46,237 departures)\". Bus/metro/tram and ferry once their data exists"
    },
    {
      "n": 152,
      "group": "Delay & cancellation probability - every mode (chapter opened 6 Oct 2026, logic page section 12)",
      "item": "Search speed: huge foreign/national feeds only when local at both ends (trips < 300 km)",
      "status": "complete",
      "note": "Found via Amsterdam -> Utrecht (no train shown: 16 s search, app gave up). Now 5.9 s, 15 journeys; compared on 8 trips, only non-local feeds left out"
    }
  ]
}
