{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Kerbwell changelog",
  "home_page_url": "/changelog/",
  "feed_url": "/changelog/feed.json",
  "description": "One entry per shipped release, describing visible behaviour.",
  "language": "en-AU",
  "items": [
    {
      "id": "changelog-2026-08-18-status-page-and-severities",
      "url": "/changelog/2026-08-18-status-page-and-severities/",
      "title": "A status page that works when the product does not, and published response times",
      "summary": "The status page is served from a separate host with no scripts and no requests back to the platform, and every support item now carries the first-response target it was given at the moment it was raised.",
      "date_published": "2026-08-18T00:00:00+10:00",
      "_version": "0.1.0",
      "_help_article": "status-and-incidents"
    },
    {
      "id": "changelog-2026-08-17-outbound-ledger",
      "url": "/changelog/2026-08-17-outbound-ledger/",
      "title": "Every message now carries its own delivery evidence",
      "summary": "The outbound ledger records one row per message with the response that put it in its state, and a message still queued reads as queued rather than resolving into a tick.",
      "date_published": "2026-08-17T00:00:00+10:00",
      "_version": "0.1.0",
      "_help_article": "delivery-evidence"
    },
    {
      "id": "changelog-2026-08-16-import-reconciliation",
      "url": "/changelog/2026-08-16-import-reconciliation/",
      "title": "Import runs reconcile their own counts",
      "summary": "An import now finishes with a count reconciliation per record type, and every difference between the file and the platform carries a named reason.",
      "date_published": "2026-08-16T00:00:00+10:00",
      "_version": "0.1.0",
      "_help_article": "import-counts"
    }
  ]
}