{
  "lastUpdated": "2026-09-26T13:33:15.000Z",
  "events": [
    {
      "hash": "3cf3e41243d236d64e7f5f871c0350a76084b40b",
      "shortHash": "3cf3e41",
      "date": "2026-09-26T13:33:15.000Z",
      "category": "feature",
      "title": "/build-info.json — what this deploy was built from",
      "rawSubject": "feat: /build-info.json — what this deploy was built from",
      "url": "/"
    },
    {
      "hash": "eeb1e9f2e57eebaf33708e40b25d7b87385facf5",
      "shortHash": "eeb1e9f",
      "date": "2026-09-22T08:40:40.000Z",
      "category": "newsletter",
      "title": "22 September 2026 weekly briefing — the crude shock is easing, the diesel shock isn't",
      "rawSubject": "newsletter: 22 September 2026 weekly briefing — the crude shock is easing, the diesel shock isn't",
      "url": "/briefings"
    },
    {
      "hash": "4fb884cd38c18d9bac877f91974b268a0921daab",
      "shortHash": "4fb884c",
      "date": "2026-09-15T09:00:59.000Z",
      "category": "newsletter",
      "title": "15 September 2026 weekly briefing — the backup route is under pressure",
      "rawSubject": "newsletter: 15 September 2026 weekly briefing — the backup route is under pressure",
      "url": "/briefings"
    },
    {
      "hash": "df76a63b151106958667c21b22d574f7869db582",
      "shortHash": "df76a63",
      "date": "2026-09-12T21:25:07.000Z",
      "category": "feature",
      "title": "Expose render provenance as data attributes; pin seed-boundary test clock",
      "rawSubject": "feat(analysis): expose render provenance as data attributes; pin seed-boundary test clock",
      "url": "/"
    },
    {
      "hash": "95cd6bfaba144410a60ee3bc388b768522acae65",
      "shortHash": "95cd6bf",
      "date": "2026-09-12T17:15:31.000Z",
      "category": "feature",
      "title": "CI mirror of production mode; legacy fallback judged like the seed",
      "rawSubject": "feat(phase-d): CI mirror of production mode; legacy fallback judged like the seed",
      "url": "/"
    },
    {
      "hash": "44a95d6d99f1ae546b2d1506ed2fb7353ec60a50",
      "shortHash": "44a95d6",
      "date": "2026-09-12T16:06:43.000Z",
      "category": "feature",
      "title": "Scheduled store publication, per-source freshness, refresh policy",
      "rawSubject": "feat(phase-d): scheduled store publication, per-source freshness, refresh policy",
      "url": "/"
    },
    {
      "hash": "90d972d99c3dbb3d8240c2584adf50576b9383ce",
      "shortHash": "90d972d",
      "date": "2026-09-12T15:30:29.000Z",
      "category": "feature",
      "title": "Release package; fact-catalogue freshness guard",
      "rawSubject": "feat(phase-d): release package; fact-catalogue freshness guard",
      "url": "/"
    },
    {
      "hash": "019ad8aadde6b68e2d0cb2efb89d3adcc88abcd3",
      "shortHash": "019ad8a",
      "date": "2026-09-12T15:23:15.000Z",
      "category": "feature",
      "title": "Finish the live-capable candidate offline; publisher ready for facts + canonical record",
      "rawSubject": "feat(phase-d): finish the live-capable candidate offline; publisher ready for facts + canonical record",
      "url": "/"
    },
    {
      "hash": "724193375c95d1d981e84ad45640d6ed3e871712",
      "shortHash": "7241933",
      "date": "2026-09-12T15:12:46.000Z",
      "category": "feature",
      "title": "Live-capable structured record — gate passed on the corrected candidate",
      "rawSubject": "feat(phase-d): live-capable structured record — gate passed on the corrected candidate",
      "url": "/"
    },
    {
      "hash": "1211464ce99c2f1b2a6556a6a4682aa16da3e29e",
      "shortHash": "1211464",
      "date": "2026-09-12T12:08:01.000Z",
      "category": "feature",
      "title": "Build the live-capable record pipeline; close prerequisites 2 and 3",
      "rawSubject": "feat(phase-d): build the live-capable record pipeline; close prerequisites 2 and 3",
      "url": "/"
    },
    {
      "hash": "cc4f4539475fa4ec5aee5649f6ffd1ee4b82134d",
      "shortHash": "cc4f453",
      "date": "2026-09-12T10:39:54.000Z",
      "category": "feature",
      "title": "Observe the station feed without changing what is published",
      "rawSubject": "feat(stations): observe the station feed without changing what is published",
      "url": "/"
    },
    {
      "hash": "a0d2a2443ee6fbe8952e6c1835194abed616689c",
      "shortHash": "a0d2a24",
      "date": "2026-09-11T16:08:27.000Z",
      "category": "feature",
      "title": "Gate every Anthropic call behind an audited, budgeted gateway",
      "rawSubject": "feat: gate every Anthropic call behind an audited, budgeted gateway",
      "url": "/"
    },
    {
      "hash": "757c71c1717e60568b9de40342a534cf4cb7ab37",
      "shortHash": "757c71c",
      "date": "2026-09-11T15:40:06.000Z",
      "category": "feature",
      "title": "Gate every Anthropic call behind an audited, budgeted gateway",
      "rawSubject": "feat: gate every Anthropic call behind an audited, budgeted gateway",
      "url": "/"
    },
    {
      "hash": "011f65ea6a407ef6d6f24c1254030824928bad11",
      "shortHash": "011f65e",
      "date": "2026-09-11T15:40:05.000Z",
      "category": "feature",
      "title": "Refuse parity fixtures outside an explicit pilot store target",
      "rawSubject": "feat: refuse parity fixtures outside an explicit pilot store target",
      "url": "/"
    },
    {
      "hash": "b856ef2533ab00cc2c01623284e3cc0197ffbb5d",
      "shortHash": "b856ef2",
      "date": "2026-09-11T10:38:44.000Z",
      "category": "feature",
      "title": "Add structured analysis renderer pilot",
      "rawSubject": "feat: add structured analysis renderer pilot",
      "url": "/"
    },
    {
      "hash": "24156dfdfd36ef26d8874c6afcc0716a19b3e4a2",
      "shortHash": "24156df",
      "date": "2026-09-11T09:30:44.000Z",
      "category": "feature",
      "title": "Close renderer prerequisites — paragraph breaks, seed policy, snapshot provenance",
      "rawSubject": "feat: close renderer prerequisites — paragraph breaks, seed policy, snapshot provenance",
      "url": "/"
    },
    {
      "hash": "035e1a03320b53d294f8c58e718b655cd5341db1",
      "shortHash": "035e1a0",
      "date": "2026-09-10T17:02:31.000Z",
      "category": "feature",
      "title": "Freeze deterministic analysis delta controls",
      "rawSubject": "feat: freeze deterministic analysis delta controls",
      "url": "/"
    },
    {
      "hash": "fa25794056cf2f1f566d89849b75c1430dbeca61",
      "shortHash": "fa25794",
      "date": "2026-09-03T15:54:27.000Z",
      "category": "analysis",
      "title": "El Nino 2026 — WMO warning and observed transmission",
      "rawSubject": "analysis: El Nino 2026 — WMO warning and observed transmission",
      "url": "/analysis"
    },
    {
      "hash": "fc391cf5d850eca6cdc3b17de3b9850354c33393",
      "shortHash": "fc391cf",
      "date": "2026-09-02T13:49:00.000Z",
      "category": "newsletter",
      "title": "A send may only originate from main, and prove the render",
      "rawSubject": "Newsletter: a send may only originate from main, and prove the render",
      "url": "/briefings"
    },
    {
      "hash": "8a3bcea943730dbca8c9b40a2cc4dca32f4279a4",
      "shortHash": "8a3bcea",
      "date": "2026-09-02T13:31:11.000Z",
      "category": "newsletter",
      "title": "Name the launched product, link it, and attribute the click",
      "rawSubject": "Newsletter: name the launched product, link it, and attribute the click",
      "url": "/briefings"
    },
    {
      "hash": "879929e5504dd6c008948f8702c576432b1e6a89",
      "shortHash": "879929e",
      "date": "2026-08-17T08:49:56.000Z",
      "category": "analysis",
      "title": "The Oil Trade Has Gone Dark + 17 August board update",
      "rawSubject": "Analysis: The Oil Trade Has Gone Dark + 17 August board update",
      "url": "/analysis"
    },
    {
      "hash": "c0b03a83305d779fb747d1ea3b2b1dcdbd130188",
      "shortHash": "c0b03a8",
      "date": "2026-08-04T08:32:12.000Z",
      "category": "newsletter",
      "title": "UK weekly 2026-08-04 — BP doubles its profit, and heads for the North Sea exit",
      "rawSubject": "newsletter: UK weekly 2026-08-04 — BP doubles its profit, and heads for the North Sea exit",
      "url": "/briefings"
    },
    {
      "hash": "456128d8656d8015ccfc7db21bfbbfd622d9b72f",
      "shortHash": "456128d",
      "date": "2026-07-28T09:42:30.000Z",
      "category": "newsletter",
      "title": "UK weekly 2026-07-28 — Oil retreats on Iran talks, diesel/gas exposure remains",
      "rawSubject": "newsletter: UK weekly 2026-07-28 — Oil retreats on Iran talks, diesel/gas exposure remains",
      "url": "/briefings"
    },
    {
      "hash": "e28d50a5f523b1094d67a20798a233939f98aba1",
      "shortHash": "e28d50a",
      "date": "2026-07-18T17:52:31.000Z",
      "category": "analysis",
      "title": "'Bypassing a Chokepoint 135 Barrels at a Time' (all 3) + framework banner",
      "rawSubject": "analysis: 'Bypassing a Chokepoint 135 Barrels at a Time' (all 3) + framework banner",
      "url": "/analysis"
    },
    {
      "hash": "3a981d26ad04c32aa5e94378550b3b1489c5b231",
      "shortHash": "3a981d2",
      "date": "2026-07-18T13:02:54.000Z",
      "category": "analysis",
      "title": "The financial frame — Pressure Cooker + Yen carry-trade pair (all 3 sites)",
      "rawSubject": "analysis: the financial frame — Pressure Cooker + Yen carry-trade pair (all 3 sites)",
      "url": "/analysis"
    },
    {
      "hash": "fa43c028dfc7b6779591a07925dfe00ec1d4fdfb",
      "shortHash": "fa43c02",
      "date": "2026-07-14T07:53:40.000Z",
      "category": "newsletter",
      "title": "UKOilWatch weekly 2026-07-14 — Brent tops $85 as Trump floats a 20% Hormuz toll",
      "rawSubject": "newsletter: UKOilWatch weekly 2026-07-14 — Brent tops $85 as Trump floats a 20% Hormuz toll",
      "url": "/briefings"
    },
    {
      "hash": "faff950188674d89f9731443fedb447a398c1027",
      "shortHash": "faff950",
      "date": "2026-07-13T09:51:16.000Z",
      "category": "feature",
      "title": "Hormuz Force Posture Phase 2 — incidents strip from the timeline",
      "rawSubject": "feat: Hormuz Force Posture Phase 2 — incidents strip from the timeline",
      "url": "/"
    },
    {
      "hash": "80ef0a4e761a369f69f580370b2ae6840db7b987",
      "shortHash": "80ef0a4",
      "date": "2026-07-13T09:33:59.000Z",
      "category": "feature",
      "title": "Hormuz Force Posture panel (Phase 1) — sourced US/Iran order of battle",
      "rawSubject": "feat: Hormuz Force Posture panel (Phase 1) — sourced US/Iran order of battle",
      "url": "/"
    },
    {
      "hash": "f4bbacaa026c55a909d64df6a114ca11d81d4902",
      "shortHash": "f4bbaca",
      "date": "2026-07-13T08:49:27.000Z",
      "category": "feature",
      "title": "FreshnessGuard — wire the last two surfaces (supply note + DisruptionBanner)",
      "rawSubject": "feat: FreshnessGuard — wire the last two surfaces (supply note + DisruptionBanner)",
      "url": "/"
    },
    {
      "hash": "f70b612b0dbf933077505b01482b9e7aa5f22048",
      "shortHash": "f70b612",
      "date": "2026-07-13T08:43:07.000Z",
      "category": "feature",
      "title": "FreshnessGuard — editorial surfaces now self-flag when stale",
      "rawSubject": "feat: FreshnessGuard — editorial surfaces now self-flag when stale",
      "url": "/"
    },
    {
      "hash": "59c750891f33413bce513986360f0da66ba3f3fa",
      "shortHash": "59c7508",
      "date": "2026-07-11T16:29:23.000Z",
      "category": "analysis",
      "title": "Publish Part II — 'Hormuz Is Not Reopened … a Second Diesel Shock Emerges'",
      "rawSubject": "analysis: publish Part II — 'Hormuz Is Not Reopened … a Second Diesel Shock Emerges'",
      "url": "/analysis"
    },
    {
      "hash": "6b00014dbc82d6771f63f48ad85c7e95199f3c25",
      "shortHash": "6b00014",
      "date": "2026-07-10T15:35:52.000Z",
      "category": "analysis",
      "title": "Publish 'The Second Shock Is Not the First' + dashboard banner",
      "rawSubject": "analysis: publish 'The Second Shock Is Not the First' + dashboard banner",
      "url": "/analysis"
    },
    {
      "hash": "cfc1f7f1682e46e440be027015847721fd01a25e",
      "shortHash": "cfc1f7f",
      "date": "2026-07-09T08:55:25.000Z",
      "category": "newsletter",
      "title": "UKOilWatch weekly — 9 Jul 2026 (Hormuz escalation returns)",
      "rawSubject": "newsletter: UKOilWatch weekly — 9 Jul 2026 (Hormuz escalation returns)",
      "url": "/briefings"
    },
    {
      "hash": "400a41d97b01d97fd453af903540e9dbc42d123a",
      "shortHash": "400a41d",
      "date": "2026-07-07T16:22:16.000Z",
      "category": "analysis",
      "title": "'Hormuz as a Toll Road' — the strikes are enforcement",
      "rawSubject": "analysis: 'Hormuz as a Toll Road' — the strikes are enforcement",
      "url": "/analysis"
    },
    {
      "hash": "24303590eb56d176e49e76ccfa0e6a6e8adb98b6",
      "shortHash": "2430359",
      "date": "2026-07-07T09:43:10.000Z",
      "category": "newsletter",
      "title": "UKOilWatch weekly briefing — 7 Jul 2026",
      "rawSubject": "newsletter: UKOilWatch weekly briefing — 7 Jul 2026",
      "url": "/briefings"
    },
    {
      "hash": "e264822557ee88e52511a2894b445fb41ceb03b4",
      "shortHash": "e264822",
      "date": "2026-07-06T12:11:57.000Z",
      "category": "analysis",
      "title": "'A Record Crack Spread Is Not a Record Profit' + crack-panel caveat",
      "rawSubject": "analysis: 'A Record Crack Spread Is Not a Record Profit' + crack-panel caveat",
      "url": "/analysis"
    },
    {
      "hash": "5252ddc6f492ca984c25459dc1f4f09c69c86717",
      "shortHash": "5252ddc",
      "date": "2026-07-04T08:47:55.000Z",
      "category": "analysis",
      "title": "'A low oil price is not safety' (two-speed reopening) + refresh red banner to lead with it",
      "rawSubject": "analysis: 'A low oil price is not safety' (two-speed reopening) + refresh red banner to lead with it",
      "url": "/analysis"
    },
    {
      "hash": "06d85dd93e0e4a35f8996001a36b94b56d279047",
      "shortHash": "06d85dd",
      "date": "2026-06-30T08:21:04.000Z",
      "category": "newsletter",
      "title": "Send UK weekly briefing 2026-06-30",
      "rawSubject": "newsletter: send UK weekly briefing 2026-06-30",
      "url": "/briefings"
    }
  ],
  "siteBaseUrl": "https://ukoilwatch.com"
}