From e99c04da61fae34ee7804bce50286103c6dd0d27 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 12 Jun 2026 21:16:24 -0400 Subject: [PATCH] Add blog post: TRACE transparent research objects Announces the replicability work: bundle TROs in every policyengine release, populace build TROs pinning restricted inputs, citable run records, the trace-tro-verify command, and Zenodo preservation mirroring. Draft for review before publication. Co-Authored-By: Claude Fable 5 --- .../trace-transparent-research-objects.webp | Bin 0 -> 45908 bytes .../trace-transparent-research-objects.md | 70 ++++++++++++++++++ app/src/data/posts/posts.json | 9 +++ 3 files changed, 79 insertions(+) create mode 100644 app/public/assets/posts/trace-transparent-research-objects.webp create mode 100644 app/src/data/posts/articles/trace-transparent-research-objects.md diff --git a/app/public/assets/posts/trace-transparent-research-objects.webp b/app/public/assets/posts/trace-transparent-research-objects.webp new file mode 100644 index 0000000000000000000000000000000000000000..fb65e9592eecc3f908df92609c3b742359b15e94 GIT binary patch literal 45908 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 Fe*oq!j6(nb literal 0 HcmV?d00001 diff --git a/app/src/data/posts/articles/trace-transparent-research-objects.md b/app/src/data/posts/articles/trace-transparent-research-objects.md new file mode 100644 index 000000000..61d6359ed --- /dev/null +++ b/app/src/data/posts/articles/trace-transparent-research-objects.md @@ -0,0 +1,70 @@ +PolicyEngine now publishes TRACE Transparent Research Objects (TROs) — cryptographically pinned provenance records — for its certified releases, its microdata builds, and individual simulation runs. Each TRO binds every artifact that determined a result by SHA-256 hash, and a single command verifies any TRO by re-fetching and re-hashing what it claims. + +This work delivers: + +- A certified bundle TRO in every `policyengine` Python release, pinning the country model wheel, the calibrated dataset, and both release manifests +- A build TRO for every populace microdata build, pinning restricted inputs that third parties cannot re-download +- Run records: self-contained, offline-verifiable directories whose fingerprint serves as a citable identifier for a single simulation +- `policyengine trace-tro-verify`, which re-hashes every artifact a TRO claims +- Zenodo mirroring of certification records, adding durable DOIs under a published preservation policy + +## Why versioning alone was not enough + +PolicyEngine merges changes daily — rule corrections, new calibration targets, expanded program coverage — and each change can move published results. We version everything: the US model alone has shipped hundreds of releases on PyPI, and our calibrated datasets carry versioned release manifests on Hugging Face. A researcher who pins exact versions can reproduce our numbers. + +Two gaps remained. First, results from the web app: a researcher who scored a reform at policyengine.org last fall had no durable record binding that result to the model and data versions that produced it. When one Brookings team returned to publish months later, recovering the exact configuration required manual work by our staff. Second, the calibrated microdata itself: our builds consume inputs like the IRS Public Use File that the public cannot freely download, so even a fully versioned pipeline is not one a reader can re-run. + +Tara Watson at Brookings raised the publication-replicability question directly, and Lars Vilhuber — the American Economic Association's Data Editor — pointed us to the [TRACE specification](https://transparency-certified.github.io/trace-specification/), an emerging standard his collaborators are developing and piloting with European central banks. We met with the TRACE team, Watson, and John Sabelhaus in April 2026; this release implements what came out of that conversation. + +## What a TRO does + +A Transparent Research Object is a JSON-LD document using the [TROv vocabulary](https://w3id.org/trace/trov/0.1#). It lists every artifact in an analysis — code, data, configuration, outputs — with a SHA-256 hash and a location for each, and a composition fingerprint computed over the sorted artifact hashes. A reader who cannot re-run the analysis can still check that specific files produced specific results; any modification to any artifact changes the fingerprint. + +The TRACE team's framing shaped where we applied it. A TRO adds little for a researcher running our open-source Python package on public data: they can reinstall the same pinned versions and re-run. It adds the most where re-running is blocked — builds that consume restricted inputs, and simulations that institutions run on researchers' behalf. + +## The three TRO layers + +| Layer | What it pins | Where it lives | +|-------|--------------|----------------| +| Bundle TRO | Country model wheel, calibrated dataset, bundle and data release manifests | Ships inside every `policyengine` release | +| Build TRO | Microdata build outputs, restricted inputs, calibration gates, build code version | Published alongside each populace release on Hugging Face | +| Run record | Reform, input dataset, results, and the bundle TRO, for one simulation | A directory the simulation writes; fingerprint is the citable id | + +The build TRO addresses the restricted-input case directly. The populace build that now powers US simulations derives from the CPS ASEC, the IRS Public Use File, the Survey of Consumer Finances, SIPP, CPS-ORG, MEPS, and the ACS. A re-runner cannot fetch the Public Use File without agreeing to IRS terms, so the TRO records its hash in the composition and flags its location as access-restricted: anyone who later obtains the same file can confirm it is byte-identical to what our build consumed, without us redistributing anything. + +The run record addresses the vanished-result case. After running a simulation in `policyengine.py`: + +```python +record = simulation.write_run_record("./record") +print(record.composition_fingerprint) +``` + +The directory holds the reform (as parameter values with effective dates), the input dataset reference, the output hashes, the certified bundle TRO, and a run TRO binding them. A paper cites the fingerprint; the directory verifies offline forever. One refusal is deliberate: reforms expressed as arbitrary Python functions raise an error rather than producing a record, because a certificate that cannot bind the code that shaped the result would claim more than it can support. + +## Verification is a command + +```bash +policyengine trace-tro-verify record/run.trace.tro.jsonld +``` + +``` +ok: bundle_tro (bundle.trace.tro.jsonld) +ok: reform (reform.json) +ok: input (input.json) +ok: results (results.json) +fingerprint: ok +``` + +The verifier fetches each artifact from the location the TRO declares — over HTTPS for published artifacts, from the record directory for local ones — recomputes its SHA-256, and recomputes the composition fingerprint. Artifacts a verifier knowingly cannot fetch, such as restricted inputs, can be skipped explicitly and are reported as skipped rather than silently ignored. + +Verification establishes that the bytes are exactly the bytes the TRO binds. It does not make our runs third-party audited: when we run our own code and emit our own TRO, that is institution-backed self-attestation, and we describe it as such. The verifiable parts are the hashes anyone can recompute; institutional accountability covers the rest. + +## Preservation + +Hugging Face hosts our primary artifacts but publishes no preservation policy, and its DOIs are deletable short URLs. Zenodo publishes a preservation policy backed by CERN infrastructure and mints durable DOIs. `policyengine zenodo-mirror` deposits each release's certification record — the manifests and TRO that let a future reader verify any copy of the data — with a hard licence gate: dataset bytes are never deposited from private source repositories, which keeps UK Data Service-licensed microdata where its licence requires while still preserving the hashes that make it verifiable. + +## What comes next + +The web app does not yet emit run records; that integration — a "cite this result" action backed by the same primitives — is the open workstream, alongside cryptographic signing of TROs and durable addressing commitments for run-record storage. The full analysis, including what TRACE does not solve for us, is in our public [case study](https://github.com/PolicyEngine/policyengine.py/blob/main/docs/trace-case-study.md). + +We thank Lars Vilhuber, the TRACE specification team, Tara Watson, and John Sabelhaus for the conversations that scoped this work. The TRACE project is [seeking use cases](https://transparency-certified.github.io/trace-specification/) as the specification evolves; we will continue contributing implementation experience from microsimulation. diff --git a/app/src/data/posts/posts.json b/app/src/data/posts/posts.json index 7ef2f15ae..1e17e4b07 100644 --- a/app/src/data/posts/posts.json +++ b/app/src/data/posts/posts.json @@ -1725,5 +1725,14 @@ "authors": ["vahid-ahmadi"], "filename": "multi-agent-workflows-policy-research.md", "image": "multi-agent-workflows-policy-research.webp" + }, + { + "title": "Pinning every result: TRACE transparent research objects", + "description": "PolicyEngine now emits TRACE provenance certificates for certified releases, microdata builds, and individual simulation runs, with a one-command verifier and Zenodo preservation mirroring.", + "date": "2026-06-12", + "tags": ["us", "uk", "technology"], + "authors": ["max-ghenis"], + "filename": "trace-transparent-research-objects.md", + "image": "trace-transparent-research-objects.webp" } ]