{"id":"z2-abstention-audit-round4","title":"Z2 Spin-Aware Campaign — Abstention Audit","subtitle":"No spin-capable runner, panel, or contract exists; four hash-chained abstention rows, zero cloud spend. Full scope returns with a spin runner.","category":"validation","tags":["z2","magnetism","abstention","round-4"],"source":"articles/docs/campaigns/z2-abstention-audit.md","lang":"en","words":398,"readMinutes":2,"toc":[{"depth":2,"text":"Question","id":"question"},{"depth":2,"text":"Verdict: the campaign cannot be executed honestly — abstention is the preregistered answer","id":"verdict-the-campaign-cannot-be-executed-honestly-abstention-is-the-preregistered-answer"},{"depth":2,"text":"What was produced instead","id":"what-was-produced-instead"},{"depth":2,"text":"Path back to full scope","id":"path-back-to-full-scope"}],"html":"<h1 id=\"z2-abstention-audit-round-4-spin-aware-multi-fidelity-campaign\">Z2 Abstention Audit — Round-4 spin-aware multi-fidelity campaign</h1><p><strong>Status:</strong> content-addressed audit · scope amended to abstention by director/owner decision 2026-07-19\n<strong>Campaign:</strong> <code>discovery.round-4.z2-magnetic-anisotropy.v1</code> (<code>campaigns/v1/z2.campaign-manifest.v1.json</code>, content hash <code>sha256:</code> per manifest)\n<strong>Rows:</strong> <code>data/candidates/z2/measurements.jsonl</code> (4 rows, RFC 8785, hash chain tail <code>sha256:05d3b087…</code>), <code>data/candidates/z2/artifact-manifest.json</code>\n<strong>Reconstruction note:</strong> the original t_52df7aae deliverable was lost with its kanban scratch workspace. The findings below are re-derived from repository state and match the original audit&#39;s claims; the original blocker document&#39;s SHA-256 was <code>c0c0e31773fa06d51d7310ffe19de42a59e1db95870ac32636d31e1d5bb450c3</code>. No original content hashes are claimed here; all artifacts in this package carry their own, new content addresses.</p>\n<h2 id=\"question\">Question</h2><p>Can the declared available models reproduce the complete held-out\nmagnetocrystalline-anisotropy ordering, including easy-axis sign, on a\nlocked reference panel (frozen hypothesis <code>h.z2.anisotropy-ranking</code>)?</p>\n<h2 id=\"verdict-the-campaign-cannot-be-executed-honestly-abstention-is-the-preregistered-answer\">Verdict: the campaign cannot be executed honestly — abstention is the preregistered answer</h2><p>The same preregistration freezes the escape hatch: <code>h.z2.scalar-abstention</code> —\n&quot;scalar-energy rows without spin-orbit-resolved evidence abstain and cannot\ncount as ranking successes.&quot; Every precondition for honest execution is absent:</p>\n<ol>\n<li><strong>No spin-capable runner.</strong> The MLIP cell runner exposes rows\n<code>adsorption_energy, elastic_constants, energy_volume, forces, stress, relaxation_stability</code> (<code>python/lupine_distill/fixture_contract.py</code>,\n<code>ROW_IDS</code>) — all scalar energy/forces/stress-derived. No SOC,\nnon-collinear magnetism, anisotropy, or Tc path exists for any declared\nmodel (chgnet 0.4.2; mace-torch 0.3.16 small / medium / mpa-0-medium).</li>\n<li><strong>No reference panel.</strong> The frozen manifest requires ≥5 held-out SOC/Tc\nreference materials with uncertainties; no such locked panel exists, and\nnone was fabricated.</li>\n<li><strong>No ClaimContract.</strong> <code>registry/claims/discovery.z2.magnetic-anisotropy.v1.json</code>\ndoes not exist, so no ingestion target can lawfully receive Z2 rows;\nmaterialization stays fail-closed by design.</li>\n<li><strong>Tc outside the frozen scope.</strong> The manifest preregisters the anisotropy\n<em>ordering</em> only; no Tc metric or premise is frozen, so Tc numbers would be\nunpreregistered claims.</li>\n</ol>\n<p>Executing anyway would require fabricating a panel, a runner capability, or a\nclaim — each independently disqualifying. Cloud compute spend for this audit:\n<strong>zero executions</strong>.</p>\n<h2 id=\"what-was-produced-instead\">What was produced instead</h2><p>Four content-addressed measurement rows — one per declared available model —\neach recording <code>epistemic_status: unsupported</code>, <code>sample_count: 0</code>, and\n<code>acceptance_test.outcome: abstained</code> with the explicit rationale. The rows are\nRFC 8785 canonicalized and hash-chained to the campaign manifest hash, built\ndeterministically by <code>tools/build_z2_abstention_rows.py</code>.</p>\n<h2 id=\"path-back-to-full-scope\">Path back to full scope</h2><p>Kanban <code>t_052adac7</code> (parked per owner decision 2026-07-19 until Z1/Z3/Round-4\nexecution completes): build a spin-aware runner (SOC / non-collinear MAE\nranking + Tc), source an honest published ≥5-material SOC/Tc reference panel\nwith the Z1/Z3 locking conventions, author the missing Z2 ClaimContract, and\namend the manifest to bring Tc into preregistered scope. Only then does this\naudit get superseded by real measurement rows.</p>\n"}