{
 "about": "Roadmap items that link to the live page delivering them (data-live and data-mark attributes on /roadmap/). Each night GitHub Actions fetches the page: an item counts as shipped only when the page answers HTTP 200, its canonical link is that page, and its HTML contains the marker text (case-insensitive). The roadmap page reads this file.",
 "marker_rule": "HTTP 200 + canonical link equals the linked page + page HTML contains data-mark",
 "generated_at": "2026-11-05T08:32:05Z",
 "items": [
  {
   "n": 13,
   "title": "Payment plan risk score",
   "status_on_page": "shipped",
   "page": "/tools/payment-risk/",
   "marker": "How much of your money is at risk",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:46Z"
  },
  {
   "n": 14,
   "title": "Deposit protection finder",
   "status_on_page": "shipped",
   "page": "/tools/deposit-protection/",
   "marker": "Deposit protection finder",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:46Z"
  },
  {
   "n": 15,
   "title": "Currency exposure tool",
   "status_on_page": "shipped",
   "page": "/tools/currency-risk/",
   "marker": "What will your payment plan cost",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:47Z"
  },
  {
   "n": 16,
   "title": "Late handover compensation calculator",
   "status_on_page": "shipped",
   "page": "/tools/late-handover/",
   "marker": "The keys are late",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:48Z"
  },
  {
   "n": 17,
   "title": "Refund tracker",
   "status_on_page": "shipped",
   "page": "/tools/refund-tracker/",
   "marker": "Track every refund",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:49Z"
  },
  {
   "n": 19,
   "title": "Total cost of ownership",
   "status_on_page": "shipped",
   "page": "/tools/total-cost/",
   "marker": "What will this property really cost",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:49Z"
  },
  {
   "n": 20,
   "title": "Resale exit check",
   "status_on_page": "shipped",
   "page": "/tools/resale-exit/",
   "marker": "Can you sell before handover",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:50Z"
  },
  {
   "n": 21,
   "title": "Bank and lender API",
   "status_on_page": "next",
   "page": "/docs/partners/",
   "marker": "Risk feed for banks and insurers",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:51Z"
  },
  {
   "n": 22,
   "title": "Insurer feed",
   "status_on_page": "next",
   "page": "/docs/partners/",
   "marker": "insurers",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:51Z"
  },
  {
   "n": 24,
   "title": "Government dashboard",
   "status_on_page": "shipped",
   "page": "/regulators/",
   "marker": "For regulators",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:52Z"
  },
  {
   "n": 27,
   "title": "Webhook alerts",
   "status_on_page": "next",
   "page": "/docs/webhooks/",
   "marker": "Signed webhooks",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:52Z"
  },
  {
   "n": 31,
   "title": "Contract copilot",
   "status_on_page": "next",
   "page": "/tools/contract-check/",
   "marker": "Read your contract",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:53Z"
  },
  {
   "n": 38,
   "title": "Claim tracker",
   "status_on_page": "next",
   "page": "/promises/",
   "marker": "What developers promised",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:53Z"
  },
  {
   "n": 40,
   "title": "Ask the database",
   "status_on_page": "shipped",
   "page": "/ask/",
   "marker": "Ask Kolaboro",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:54Z"
  },
  {
   "n": 41,
   "title": "Open disclosure standard",
   "status_on_page": "shipped",
   "page": "/standard/",
   "marker": "Disclosure Standard",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:54Z"
  },
  {
   "n": 42,
   "title": "Developer response portal",
   "status_on_page": "shipped",
   "page": "/developers/reply/",
   "marker": "Answer any finding",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:55Z"
  },
  {
   "n": 53,
   "title": "Chain of custody log",
   "status_on_page": "next",
   "page": "/court-file/",
   "marker": "custody",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:55Z"
  },
  {
   "n": 54,
   "title": "Public corrections log",
   "status_on_page": "shipped",
   "page": "/corrections/",
   "marker": "Corrections and replies",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:56Z"
  },
  {
   "n": 56,
   "title": "Court-ready case file",
   "status_on_page": "next",
   "page": "/court-file/",
   "marker": "court-ready evidence bundle",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:56Z"
  },
  {
   "n": 61,
   "title": "Satellite watch for every market",
   "status_on_page": "shipped",
   "page": "/satellite/",
   "marker": "Watch the land change from space",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:57Z"
  },
  {
   "n": 62,
   "title": "Stalled-site alerts",
   "status_on_page": "shipped",
   "page": "/satellite/night/",
   "marker": "stalled",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:58Z"
  },
  {
   "n": 63,
   "title": "Radar through clouds",
   "status_on_page": "next",
   "page": "/satellite/",
   "marker": "id=\"stradar\"",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:58Z"
  },
  {
   "n": 66,
   "title": "Flood and coastal risk layer",
   "status_on_page": "next",
   "page": "/hazards/",
   "marker": "flood model",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:59Z"
  },
  {
   "n": 67,
   "title": "Protected land check",
   "status_on_page": "next",
   "page": "/hazards/",
   "marker": "protected land",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:31:59Z"
  },
  {
   "n": 68,
   "title": "Construction timelapse for buyers",
   "status_on_page": "next",
   "page": "/satellite/plot/",
   "marker": "one clear picture per quarter",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:00Z"
  },
  {
   "n": 70,
   "title": "Night lights index",
   "status_on_page": "next",
   "page": "/satellite/night/",
   "marker": "Black Marble",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:00Z"
  },
  {
   "n": 71,
   "title": "Chrome extension",
   "status_on_page": "shipped",
   "page": "/extension/",
   "marker": "Check an off-plan project from the page you are on",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:00Z"
  },
  {
   "n": 73,
   "title": "State of Off-Plan report",
   "status_on_page": "shipped",
   "page": "/report/state-of-off-plan-2026/",
   "marker": "State of Off-Plan 2026",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:01Z"
  },
  {
   "n": 74,
   "title": "Market pages",
   "status_on_page": "shipped",
   "page": "/m/",
   "marker": "Off-plan market file",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:01Z"
  },
  {
   "n": 78,
   "title": "Partner program for lawyers",
   "status_on_page": "shipped",
   "page": "/lawyers/",
   "marker": "For lawyers and notaries",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:02Z"
  },
  {
   "n": 81,
   "title": "Watchlist",
   "status_on_page": "shipped",
   "page": "/watchlist/",
   "marker": "Your watchlist",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:02Z"
  },
  {
   "n": 83,
   "title": "Market match",
   "status_on_page": "shipped",
   "page": "/tools/market-match/",
   "marker": "Where is it safest",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:03Z"
  },
  {
   "n": 85,
   "title": "Compare up to 4 projects",
   "status_on_page": "shipped",
   "page": "/compare/",
   "marker": "Compare projects",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:03Z"
  },
  {
   "n": 86,
   "title": "Personal checklist",
   "status_on_page": "shipped",
   "page": "/checklist/",
   "marker": "checklist",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:04Z"
  },
  {
   "n": 91,
   "title": "Open data API",
   "status_on_page": "shipped",
   "page": "/docs/api/",
   "marker": "Open data and public API",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:04Z"
  },
  {
   "n": 93,
   "title": "Daily quality check",
   "status_on_page": "shipped",
   "page": "/status/",
   "marker": "System status",
   "http": 200,
   "marker_found": true,
   "canonical_matches": true,
   "shipped": true,
   "checked_at": "2026-11-05T08:32:05Z"
  }
 ],
 "linked": 36,
 "verified_live": 36
}
