{
 "schema": "axion-changes/1",
 "site": "appealsdesk.co.uk",
 "generated": "2026-09-08",
 "checked": "2026-08-20",
 "items": [
  {
   "date": "2026-09-08",
   "path": "/parking",
   "what": "Price: ONE PRICE, £9.99. The A/B price split is OVER.",
   "kind": "data",
   "fixity": "sha256-4f67c40fe76468063834465bdf2066bc77a59a41e36573172980c7338f1e1682"
  },
  {
   "date": "2026-09-07",
   "path": "/parking-operators",
   "what": "Operator-published appeal routes read from each operator's own website and shown on its page",
   "kind": "data",
   "fixity": "sha256-4f67c40fe76468063834465bdf2066bc77a59a41e36573172980c7338f1e1682"
  },
  {
   "date": "2026-09-07",
   "path": "/parking",
   "what": "Price: /ab-stats taught the price test's own rule (deploy 86429f96)",
   "kind": "data",
   "fixity": "sha256-4f67c40fe76468063834465bdf2066bc77a59a41e36573172980c7338f1e1682"
  },
  {
   "date": "2026-09-06",
   "path": "/",
   "what": "Agent readiness wave B: Markdown negotiation — `Accept: text/markdown` (q-values honoured; markdown wins at q >= text/html's or when html is absent) on /, /parking-operators/{slug}, /parking-deadlines, /popla-appeal-success-rates and /parking returns text/markdown; charset=utf-8 rendered from the same data as the HTML (YAML frontmatter title/url/publisher/checked/dataset_fixity = the page's cite; figures, route, sources with URLs), with Vary: Accept, its own ETag/Last-Modified/304, x-markdown-tokens (ceil(utf8_bytes/4), method stated in x-markdown-tokens-method) and content-signal (search=yes, ai-input=yes, ai-train=no); pages with no data model keep answering HTML. WebMCP — / registers one tool, appealsdesk_answer (description and inputSchema from /openapi.json's /api/answer), guarded on navigator.modelContext / document.modelContext, whose execute calls the real /api/answer",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/.well-known/api-catalog",
   "what": "Agent readiness wave A: seven declarative discovery surfaces, each derived from what this door already published — Link headers (api-catalog, service-desc, service-doc, describedby, ard) on / and every machine surface; /.well-known/api-catalog (RFC 9727 linkset); a Content-Signal line in robots.txt (search=yes, ai-input=yes, ai-train=no; every existing rule byte-identical); /auth.md (no credential needed, what is paid and how, no OAuth server — the oauth well-known paths stay 404 on purpose); /.well-known/mcp/server-card.json (gateway + zone endpoint, the passport's tool names); /.well-known/agent-skills/index.json with /skills/appealsdesk-answer.md (digest asserted against served bytes); /.well-known/ai-catalog.json and /.well-known/ard.json (ARD manifest: openapi, llms.txt, MCP, with the site's own FAQ questions). All under the return contract (ETag/304)",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/api/answer",
   "what": "Return contract v1.3 fixity: one dataset hash (sha256 over the data files the machine surfaces answer from, computed at build) now appears byte-identically as `cite.dataset.fixity` beside `cite.dataset.version`, as `last_verified.fixity` on the door passport, as `info.x-dataset-fixity` on /openapi.json, and as `fixity` on every data item here from this date on",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/api/answer",
   "what": "Receipts v1: the `receipt` field carries `policy`, naming what the signature covers (the body minus the receipt, at the dataset stamp, fields as served); envelope id and signed message unchanged",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/changes.json",
   "what": "axion-changes/1 v1.2: a data item that replaced a value carries `field`, `value`, `superseded_value`, `retired`, taken from the price log and git history; the Atom entry carries a `was X, now Y since <date>` summary",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/changes.json",
   "what": "Added /changes.json and /changes.atom (axion-changes/1); every machine surface now answers If-None-Match / If-Modified-Since with 304 and carries ETag + Last-Modified",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/openapi.json",
   "what": "Extended with /changes.json, /changes.atom, /llms.txt, the conditional-request headers and x-axion-cite / x-axion-receipt markers",
   "kind": "shape"
  },
  {
   "date": "2026-09-06",
   "path": "/api/answer",
   "what": "Added `notice` field inside the signed payload (free with attribution; integrator contact)",
   "kind": "shape"
  },
  {
   "date": "2026-09-05",
   "path": "/parking",
   "what": "Price: arm B (£9.99) switched ON for the /parking price test",
   "kind": "data",
   "field": "parking.price.arm_b",
   "value": "£9.99",
   "superseded_value": "£4.99",
   "retired": "2026-09-05"
  },
  {
   "date": "2026-09-05",
   "path": "/api/answer",
   "what": "Added the citation object (`cite`, axion-cite/v1) and a Link: rel=canonical header on every JSON door; inside the signed payload on /api/answer and /api/popla-outcomes",
   "kind": "shape"
  },
  {
   "date": "2026-09-05",
   "path": "/parking-operators",
   "what": "Clause register: 42 verbatim clauses of the Code of Practice v1.1 and PoFA 2012 Sch 4 now cited by number on 255 pages; dated correction of three clause numbers this site had wrong (8.4.1(a), clause 9, 8.4.9)",
   "source": "https://www.britishparking.co.uk/code-of-practice-and-compliance-monitoring",
   "kind": "data"
  },
  {
   "date": "2026-09-05",
   "path": "/for-agents.json",
   "what": "Operator count on the shared door record corrected: it printed 216 UK operators while data/operators.json has held 217 since the first snapshot (git 1c99be9, 1 Sep); fixed at source in the registry (axion-open doors_data.js, git 198833e)",
   "kind": "data",
   "field": "operators.count",
   "value": "217",
   "superseded_value": "216",
   "retired": "2026-09-05"
  },
  {
   "date": "2026-09-05",
   "path": "/grade-my-appeal",
   "what": "New free page: rules-based appeal grader, nothing stored",
   "kind": "page"
  },
  {
   "date": "2026-09-05",
   "path": "/appeal-rejected-what-now",
   "what": "New page: the operator rejected the appeal — the verification code and the clock it starts",
   "kind": "page"
  },
  {
   "date": "2026-08-25",
   "path": "/api/popla-outcomes",
   "what": "Per-operator by_year series added across the 2023, 2024, 2025 POPLA annual reports",
   "source": "https://www.popla.co.uk/reports",
   "kind": "data"
  },
  {
   "date": "2026-08-24",
   "path": "/api/popla-outcomes",
   "what": "POPLA Annual Report 2025 Appendix parsed: 80 operators, 1 October 2024 to 30 September 2025; column sums validated against the report's printed totals",
   "source": "https://www.popla.co.uk/reports",
   "kind": "data"
  },
  {
   "date": "2026-08-20",
   "path": "/parking",
   "what": "Price: Parking Appeal Builder: £9.99 → £4.99",
   "kind": "data",
   "field": "parking.price",
   "value": "£4.99",
   "superseded_value": "£9.99",
   "retired": "2026-08-20"
  },
  {
   "date": "2026-08-20",
   "path": "/parking",
   "what": "Price: £4.99 link armed",
   "kind": "data"
  },
  {
   "date": "2026-08-03",
   "path": "/api/operators",
   "what": "BPA and IPC member lists re-read in full: 217 operators with route and windows",
   "source": "https://www.britishparking.co.uk/",
   "kind": "data"
  }
 ]
}