{
  "schema": "poliety.integrity.v1",
  "generatedAt": "2026-08-13T01:20:13.333Z",
  "source": "https://poliety.com/api/latest.json",
  "algorithm": {
    "contentHash": "sha256 over the exact bytes of the edition document as fetched from source",
    "prevHash": "contentHash of the nearest earlier edition date, null at the root",
    "encoding": "lowercase hex"
  },
  "chain": {
    "length": 5,
    "head": {
      "date": "2026-08-12",
      "fetchedAt": "2026-08-12T23:49:24.746Z",
      "contentHash": "7481c3955d88c842048de147a28463bfdab3352e305b4e801a47562224f304fd",
      "prevHash": "18fccbc72b98ccb6d99024e749294522d88908334be1c2cd44270b9447dd6a0c"
    },
    "root": {
      "date": "2026-08-08",
      "contentHash": "fae984220bf0551077c84e96352b3f812955585bb6e7a60b9c16b548c0af30f6"
    }
  },
  "freshness": {
    "headIngestedAt": "2026-08-12T23:49:24.746Z",
    "pollIntervalSeconds": 1800,
    "note": "The chain ingests the public edition on a poll, so immediately after a site rebuild the live bytes can hash to something other than chain.head.contentHash. If the recipe does not match, re-run it after pollIntervalSeconds before concluding anything is wrong."
  },
  "witness": {
    "recipe": "curl -sS https://poliety.com/api/latest.json | shasum -a 256",
    "expect": "7481c3955d88c842048de147a28463bfdab3352e305b4e801a47562224f304fd",
    "protocol": "Record chain.head every day. The next day's head.prevHash must equal the contentHash you recorded. A mismatch on any date older than the head means an archived edition was rewritten.",
    "fullChain": "/v1/editions"
  },
  "scope": {
    "immutable": "Editions for dates before chain.head.date never change once a later edition exists.",
    "headIsMutable": "chain.head is the current date's row. The site rebuilds during the day and the row is replaced, so its contentHash can change until the date closes. Witness the head after the day rolls over, or verify it through the next day's prevHash.",
    "archiveFiles": "The same applies to the site's per-day archive file at /api/editions/{date}.json: the current date's file is rebuilt during the day and settles when the date closes. Closed dates rebuild to identical bytes. Chain hashes cover the latest.json snapshot at ingest time, not the archive file, so the two are verified separately.",
    "notNotarized": "This chain is served by the same operator that writes it. It proves internal consistency and makes a silent rewrite detectable to anyone who recorded an earlier head. It is not a third-party notary or a signed timestamp."
  }
}