Skip to content

Root identity: every raw microdata input hash-pinned and referenced to its Chronicle registration #848

Description

@MaxGhenis

Consumer side of the Chronicle raw-microdata identity ADR (PolicyEngine/chronicle docs/adr-chronicle-raw-microdata-identity.md, PR and implementation issue opened today in that repo): every raw microdata input Microcosm builds from should resolve to one witnessed Chronicle registration, by hash, and the build should fail closed when local bytes differ.

Current state (verified 2026-09-02 on origin/main d2b3149)

Manifest Kind Entries With sha256 Chronicle reference
us/source_stages.json public_microdata 37 8 none
us/source_stages.json versioned_derived_microdata 2 1 none
uk/source_stages.json licensed_microdata 19 19 none
uk/source_stages.json, uk/hmrc_income_source_stages.json private_microdata 2 2 none
be/source_stages.json restricted_microdata 1 0 none

Pins that do exist live in four places: these manifests, the ASEC raw-stage checkpoint metadata (us_runtime/asec_checkpoint.py validates per-source sha256/member_sha256), code constants (us_runtime/weeks_unemployed.py), and tools/build_us_multispine_pool.py --*-sha256 arguments. No shared registry, no licence record, no witnessed fetch time.

Proposal

  1. Every *_microdata artifact entry in a country source_stages.json carries sha256 and a chronicle_artifact reference (source_id, package_id, year, sha256, and the R2 key when bytes exist). The raw-only doctrine (microcosm#530, UK dataset build: full migration from policyengine-uk-data (master epic) #665 scope ruling) already requires pinning the raw licensed asset; this makes the pin a shared, witnessed one.
  2. source_manifest.py validates the new fields; the source runtime records the resolved registrations in the build manifest / Logbook next to the Chronicle consumer-artifact pin it already records.
  3. A fail-closed gate: local bytes (or the checkpoint's recorded per-source hashes) must equal the registered sha256; mismatch stops the build with the publisher, vintage, and both hashes in the message.
  4. Licensed and restricted files (FRS, SPI, BE-SILC, IRS PUF) reference hash-only registrations. Bytes stay where they are today (licensed environments, private HF repos); nothing about data access changes.
  5. New countries land registered from day one (Armenia EPIC: populace-am — Armenia: closing the EG DNA macro–micro gap on public data #814 is the first test).

Acceptance

Related: #530, #665 (workstream E), #204, #814, #836 (node identity), chronicle#143 (bucket name migrating; reference whichever bucket is current).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesttier:standardSpec'd build/assembly with acceptance tests; suitable for Opus/GPT-class agents

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions