ADR-087: Backfill Historical seedkit Records to Honest Provenance & Difficulty

Field Value
Decision ID ADR-087
Initiative corpus & attribution integrity
Proposed By Chris Barlow (maintainer)
Date 2026-06-23
Status Accepted

Context

ADR-086 conformed tools/seedkit’s attribution and difficulty to the sourcing paradigm going forward — honest provider≜lean / model≜decide/ring, an authenticated solver, and difficulty 1 — and explicitly deferred (§8) the records already merged before the change. This ADR is that deferred follow-up.

The deferral left the corpus split. New fixtures are honest; the historical ones are not:

There is already a maintained, idempotent, self-healing mechanism for the provenance half: tools/repo/relabel_attribution.py + attribution-relabel.yml (ADR-079). Its _RULES table is keyed on (agent, model-shape) → (provider, model) so it disambiguates the two engines that both used template-* labels — mac-158f is genuinely python/sympy, claude-web (chat-bit-01) is lean — and it never changes solver≜ credit and scans active and archive index records. But it deliberately (a) processes only provider≜claude records (skipping provider≜seedkit), (b) has no induction-ring → ring mapping, and (c) does not touch goal-record difficulty at all.

So closing the gap is mostly an extension of an existing, tested tool — plus a new, parallel difficulty corrector for goal records. The one genuinely consequential part is that correcting difficulty retroactively lowers the difficulty_points and score of fixture contributors (chat-bit-01 most), which is why ADR-086 §8 said this “warrants its own decision.”

WH(Y) Decision Statement

In the context of ADR-086 conforming seedkit going forward while leaving ~561 merged seedkit goal records at inflated difficulty 2–5 and ~158 index records on bespoke template/seedkit labels, with the leaderboard still crediting fixture contributors the inflated difficulty_points,

facing a corpus now split between honest new records and un-honest old ones; an existing self-healing relabel sweep that covers only the claude template-zmod-decide provenance case (excludes provider≜seedkit, has no induction-ring mapping, and never touches difficulty); and the sensitivity that a difficulty backfill retroactively lowers fixture contributors’ score on a public engagement surface,

we decided for a one-time-but-idempotent backfill, implemented as an extension of the existing attribution sweep, that:

  1. relabels every seedkit-signature index record to provider≜lean + model≜decide/ring — adding the template-induction-ring → ring mapping and processing provider≜seedkit as well as provider≜claude — across active and archive, keyed on the agent + template-model signature so genuine LLM proofs and mac-158f’s real python/sympy templates stay untouched;
  2. corrects the difficulty of every seedkit-origin goal record to 1 (goals are never archived under packages/, so one pass over goals/ fixes the difficulty_points of both active and archived proofs);
  3. never changes solver≜ credit (the correction is to honesty of engine + difficulty, not to who is credited); and
  4. is idempotent and self-healing so it converges on the live, racing corpus and a re-run is a no-op once corrected,

and neglected leaving history as-is (rejected — it leaves the corpus and the leaderboard permanently inconsistent with ADR-086, the very honesty gap ADR-086 set out to close); a one-shot migration script (rejected — the relabel sweep’s own history shows a one-shot cannot survive a corpus racing thousands of commits an hour: PR #3218 “conflicted and was always incomplete” and had to be replaced by the idempotent sweep, ADR-079); changing solver≜ credit or removing fixture proofs from the board (rejected — out of scope; the backfill corrects labels and difficulty, deliberately ranking-neutral on the credit axis); and a difficulty-only or provenance-only backfill (rejected — both dimensions were inflated, so doing one leaves the corpus half-corrected).

What this changes (summary; full contract in SPEC-087-A)

Consequences

References

Reference ID Title Type Location
REF-1 Historical seedkit backfill spec Specification specs/SPEC-087-A-Backfill-Historical-Seedkit-Records.md
REF-2 seedkit Fixture-Generation Path Decision ADR-086-Seedkit-Fixture-Generation-Path.md
REF-3 Deterministic Solver Provider / relabel sweep Decision ADR-079-Deterministic-Solver-Provider.md
REF-4 Optional Proof Provenance and Leaderboard Decision ADR-023-Proof-Provenance-Leaderboard.md
REF-5 Archive policy Decision ADR-041 (library archiving)
REF-6 Goal-Statement Immutability (statement only) Decision ADR-018-Goal-Statement-Immutability.md
REF-7 Existing attribution sweep Implementation tools/repo/relabel_attribution.py + .github/workflows/attribution-relabel.yml

Status History

Status Approver Date
Proposed Chris Barlow 2026-06-23
Accepted (implemented — relabel-sweep extension + difficulty backfill) Chris Barlow 2026-06-23