{
  "$schema": "https://www.michaeldariuseastwood.com/research/anchor/head.schema.json",
  "schemaVersion": 1,
  "documentId": "eden-anchor-head-v1",
  "documentKind": "machine-readable head-root pointer",
  "canonicalUrl": "https://www.michaeldariuseastwood.com/research/anchor/head.json",
  "purpose": "Publish the current head root of the hash-chained anchor manifest for the estate, together with every known Bitcoin block-header attestation, so that any third party can verify, offline, that a stated corpus existed by a stated date.",

  "britishEnglishOnly": true,
  "neverInventedValues": true,

  "selfExclusionPolicy": {
    "isAnchoredByItself": false,
    "rationale": "This file is a live pointer to the current head state and is intentionally mutable. Writing anchor metadata into a file that is itself anchored orphans the proof, as happened once already on this estate with PRIORITY-CORPUS-HASH-MANIFEST.md.ots when its own anchor time was written into it and it was committed eight minutes after stamping.",
    "howFutureManifestsShouldTreatThisFile": "If a future corpus manifest covers /research/anchor/head.json, the manifest MUST anchor a frozen historical snapshot placed at /research/anchor/head-<isoUtcDate>.json with immutable content, and MUST exclude the live head.json from the hashed set. The mutable fields on this document (dateModified, head.currentHeadDeclaredAt, head.corpus.rootSha256Truncated when refreshed, previousHeadRootSha256 when appended, attestations[] when extended, completeness.asOf) are the reason the live file is excluded."
  },

  "chain": {
    "chainId": "eden-estate-anchor-chain-v1",
    "chainDiscipline": "append-only, linear, each head declares the previous head root inside its own body so history is verifiable link by link",
    "closureRationale": "A single anchored manifest and a fork of anchored manifests produce identical public evidence. Closure requires (a) hash-chained manifests, so that a fork must be a second published chain rather than a private file, and (b) contemporaneous publication of the current head root, so that a competing manifest stamped at the same moment is a second public claim rather than a reserve option held back."
  },

  "head": {
    "currentHeadDeclaredAt": null,
    "currentHeadDeclaredAtNote": "Not asserted in this initial publication. A stated declaration date will be added when this endpoint is first publicly announced, so that closure by contemporaneous publication has an evidenced starting point.",
    "corpus": {
      "rootSha256Truncated": "237b94c4...ae094",
      "rootSha256Full": null,
      "rootSha256FullNote": "The full 64-character SHA-256 is intentionally not written here from memory. The truncated form is the only form given in the corroborated facts feeding this endpoint. The full value will be populated from a verifiable source (a signed manifest under /research/anchor/) rather than transcribed by hand.",
      "fileCount": 1463,
      "fileCountBasis": "Estate is stamped to four independent calendars, root 237b94c4...ae094 over 1,463 files.",
      "calendars": {
        "count": 4,
        "list": null,
        "listNote": "The four calendars are asserted at the estate level. Their individual identifiers are not repeated here to avoid transcription risk; they will be enumerated in the frozen historical snapshot when the full corpus root is published."
      }
    },
    "previousHeadRootSha256": null,
    "previousHeadRootSha256Note": "This is the initial head published under this schema. There is no prior head under this chain. Every subsequent head MUST populate this field with the SHA-256 of the head it replaces, so that the chain is linear by construction."
  },

  "attestations": [
    {
      "attestationId": "btc-block-961340-manuscript-anchor",
      "type": "BitcoinBlockHeaderAttestation",
      "blockHeight": 961340,
      "merkleRoot": "038418c103704b8c307a645240ea54c874c8f758d39febd19f14a6fb8f7abe42",
      "coversManuscripts": [
        "2024-12-08 manuscript",
        "2025-04-30 manuscript"
      ],
      "verificationInstructions": {
        "anyoneCanCheck": true,
        "howToRead": "Open any public Bitcoin block explorer, look up block 961340, and read its merkle root. If it matches 038418c103704b8c307a645240ea54c874c8f758d39febd19f14a6fb8f7abe42, the attestation is intact. A block header cannot be back-dated without rewriting Bitcoin.",
        "trustModel": "Trust nobody. Not the author, not GitHub, not Google. Trust the block explorer of your choice, or run your own node."
      }
    }
  ],

  "toolingNotes": {
    "opentimestampsCli": {
      "otsInfoBehaviour": "`ots info` on a .ots file prints the block height and the merkle root of every attestation, and needs no Bitcoin node. This is enough to read the attestation and match it against a public block explorer.",
      "otsVerifyBehaviour": "`ots verify` requires a local bitcoind and FAILS WITHOUT ONE. A failure from `ots verify` on a machine with no Bitcoin node is a tooling failure, not a proof failure. This is why the estate's verification page explains the difference on the page, so that a visitor who runs the wrong command and sees red does not misread it as a missing proof.",
      "knownEstateDefect": "PRIORITY-CORPUS-HASH-MANIFEST.md.ots holds genuine attestations but fails `File does not match original!` because the manifest wrote its own anchor time INTO ITSELF and was committed eight minutes after stamping. The rule this endpoint enforces, and the rule the whole anchor pipeline now enforces, is: NEVER write anchor metadata into a file that is itself anchored."
    }
  },

  "completeness": {
    "asOf": null,
    "asOfNote": "The `asOf` date is intentionally not written here from memory. It will be populated the first time a signed head root is published under this endpoint, and refreshed on every subsequent head append.",
    "declaration": "The `attestations` array is intended to declare, at each publication, every Bitcoin attestation known to this estate at that time. When populated, it will say, in machine-readable form: these are all of them as of this date, with this count.",
    "currentAttestationCount": 1,
    "currentAttestationCountNote": "Only the block-961340 attestation is asserted from the corroborated facts feeding this initial publication. A subsequent head MUST enumerate every additional Bitcoin attestation the estate holds. Silence in this array is not an assertion of exclusivity; silence is silence."
  },

  "publicationRoutingNotes": {
    "secondIndependentLegHeldBackFromPublicCopy": "A second independent leg of provenance exists in the form of contemporaneous Google dkim=pass and spf=pass at transit for the December 2024 self-emailed manuscript, with selector `google`, domain `mastermindpromotion.com`, per mx.google.com. This is deliberately not asserted as a public verification claim, because private verification is not a public claim. It is a publication routing, never an evidential gap.",
    "gitCommitDatesAreNotProof": "A git commit date is not proof of priority. Both `--date` and `GIT_COMMITTER_DATE` can be set to any value. Git history MUST NOT be cited as priority evidence anywhere on this surface."
  },

  "estateCountDiscipline": {
    "registrations": 62,
    "supportFolders": 11,
    "phrasing": "62 registrations plus 11 support folders",
    "forbiddenPhrasings": [
      "73",
      "74",
      "preregistered"
    ],
    "forbiddenPhrasingsRationale": "Two lanes previously said 73 and 74 by counting support folders as registrations. Nothing has been submitted anywhere, so `preregistered` is false for every registration."
  },

  "howToVerifyThisEndpointOffline": {
    "step1": "Copy the value of head.corpus.rootSha256Truncated and, when populated, head.corpus.rootSha256Full. Compare them to the roots printed on /verify/ and inside the frozen historical snapshots under /research/anchor/.",
    "step2": "For each entry in `attestations`, open any public Bitcoin block explorer, look up the `blockHeight`, and confirm the `merkleRoot` matches the block's merkle root.",
    "step3": "If a `.ots` file is available for a covered artefact, run `ots info` on it and confirm the block height and merkle root match this endpoint. Do NOT run `ots verify` unless a local bitcoind is available. A missing node is not a missing proof.",
    "step4": "Follow the `chain` link back through `previousHeadRootSha256` and confirm each prior head is publicly reachable at /research/anchor/head-<isoUtcDate>.json. A linear chain of frozen snapshots plus one live head is the closure guarantee this endpoint is built to provide."
  },

  "dateModified": null,
  "dateModifiedNote": "Left null on initial publication because no stamped ISO-UTC date is available to transcribe without inventing. Will be populated by the anchor pipeline on first machine-signed head append.",

  "operatorBoundaries": {
    "neverImplyExclusivityFromOneAnchorAlone": true,
    "neverImplyTheDateCannotBeProved": true,
    "neverInventAHashHeightUrlOrDate": true,
    "readBeforeEditing": true
  }
}
