| Field | Value |
|---|---|
| Decision ID | ADR-060 |
| Initiative | contributor scale / problem supply |
| Proposed By | unsorry maintainers |
| Date | 2026-06-16 |
| Status | Accepted |
Issue #400 asks to “make this process for generating new problems a claude skill (using claude creator skill) based on unsorry project protocols … open this up to contributors to generate new problems as well and ensure that we are not conflicting with each other,” with the explicit steer to move the goalposts — make the problems harder and generate way more of them. (The comment said “proofs”; the maintainer clarified on #1533 that the intent is generating new problems to solve — i.e. sourcing new open goals, not authoring proofs for existing ones.)
The upstream sourcing pipeline already exists and has shipped 553 goals across
five Identity-Engine cycles (ADR-043, SPEC-043-A): ideate → absence-screen
(tools.sourcing.check_absence) → statement type-checks → non-triviality-screen
(tools.sourcing.check_triviality) → intended-proof compiles → adversarial
skeptic → write the goal triple (goals/<slug>.lean sorry-stub,
goals/<slug>.aisp record, backlog/<slug>.md entry) → Gate B → chore(sourcing):
PR ≤50 goals → auto-merge → announce on #81/#400. But it is driven by maintainer
agents with canonical write access, the triple is hand-authored, the difficulty
field is self-tagged and gate-unenforced (most shipped goals sit at difficulty
1–2), and there is no contributor-facing entrypoint.
Meanwhile the four existing skills (unsorry-proof-authoring,
unsorry-gate-validation, unsorry-leaderboard-integration,
unsorry-swarm-operations) all cover the downstream half — proving a goal that
already exists. None covers sourcing. unsorry-proof-authoring is scoped to
“adding, repairing, or reviewing Unsorry Lean proofs” and starts at an existing
goals/<id>.aisp; sourcing is the opposite end of the queue.
The relevant coordination substrate is only partly built: the claims branch
(ADR-004, first-push-wins) is prove-only and fork-inaccessible, and the
volunteer-scale claim substrate (ADR-053) and agent identity/quota/reputation
controls (ADR-054) are Proposed, not built. Gate B, however, runs on
GitHub-hosted ubuntu-latest via pull_request over tools/sourcing/** and
goals/** — so a sourcing-only PR (no proof) is fully Gate-B-checkable from a
fork without spending the trusted namespace verifier lane (ADR-049, ADR-058).
In the context of an existing, validated goal-sourcing pipeline that has no contributor-facing entrypoint, a hand-authored triple step, a gate-unenforced difficulty field, and external contributors arriving at much larger scale,
facing the need to open sourcing to fork contributors without (a) letting them collide with each other or the swarm, (b) lowering the difficulty of the problem supply, or (c) depending on coordination machinery (ADR-053/054) that is not yet built,
we decided for a new contributor-facing skill unsorry-goal-sourcing,
authored with the skill-creator skill and following the convention the four
existing unsorry skills already use, that walks a contributor (or agent) through
the four-gate sourcing pipeline and the exact triple format; backed by a real
tools/sourcing/gen_triples.py that assembles and Gate-B-validates a triple from
a single candidate line; using no pre-claim + merge-time dedup as the
sourcing conflict model (Tier 0, works from a fork today), written against a thin
claim-interface seam so ADR-053 can back it later; enforcing a maximum-difficulty
bar in the skill itself (the difficulty field is gate-unenforced, so the skill
is the only enforcer — target difficulty ≥3 with at least one decomposition edge,
preferring substrate/olympiad/SOS-inequality families that survive the
triviality battery by design); sourcing Phase-2 Euler-substrate and Phase-3
library-growth targets in parallel (ADR-031); and adding a sourcing
leaderboard mode that credits contributors who source goals, independent of
proof credit,
and neglected extending unsorry-proof-authoring (rejected — sourcing and
proving are opposite ends of the queue with distinct roles, toolchains, and
conflict models; bundling bloats the skill and confuses triggering), pre-claiming
sourcing work on the claims branch (rejected — it is prove-only and
fork-inaccessible, and a duplicate sourced goal wastes only compute, never
soundness, so a claim is not worth the coupling), blocking the skill on ADR-053/054
(rejected — that stalls the contributor entrypoint behind unbuilt machinery;
instead default to no-pre-claim and leave a seam), gate-enforcing difficulty
(rejected for now — a robust hardness oracle does not exist; the skill enforces
the bar and the absence+non-triviality gates stay honest), adding
nlinarith/positivity to the triviality battery to raise the floor (rejected —
that supersedes the explicit ADR-035 design choice and would reclassify existing
goals; it needs its own ADR), and adding a structured sourcer≜ field to the
goal record (rejected for the MVP — it is Gate-B schema churn; git add-author over
goals/*.aisp, the same mechanism the proof leaderboard already uses for
historical attribution, credits the sourcer with no schema change),
to achieve a self-serve, conflict-free way for contributors and agents to generate harder problems and many more of them, grounded in the project protocols, that works from a fork today and gets safer as ADR-053/054 land,
accepting that difficulty enforcement is skill-side and advisory rather than gate-enforced (a low-difficulty sourcing PR is not rejected by CI — review and the skill are the bar); that no-pre-claim has a race window between mine-time dedup and merge (the cost is wasted contributor compute, never an unsound or duplicated merged goal, because ADR-018 immutability plus the absence/triviality gates catch survivors); that sourcing credit via git add-author is approximate (earliest-add author, squash-merge author) until a structured field is justified; and that opening sourcing to the world at “ludicrous” scale should still wait on ADR-054 quota/abuse controls before the fork path is advertised broadly.
check_absence, exit 0 + record
mathlib_rev) → statement type-checks (lake build UnsorryGoals) →
non-triviality (check_triviality; admit verdicts non-trivial/allowlisted/
override = exit 0; trivial = exit 1 reject; probe-error = exit 2 must be
fixed, not admitted) → intended proof compiles (lake env lean) + adversarial
skeptic.status≜open, sha≜∅, phase≜prove; generated and validated by
gen_triples.py.git fetch origin + slug/statement dedup vs live
origin/main before every batch; one theme per session; no claims-branch
push; merge-time dedup is the backstop.chore(sourcing): title (a valid Conventional-Commits
type is what the gate requires; (sourcing) is the project convention the
skill self-enforces), ≤50 goals per PR, no docs/targets.md regeneration
(ADR-036), announce on #81/#400 after merge.ubuntu-latest) without
spending the trusted verifier lane.| Reference ID | Title | Type | Location |
|---|---|---|---|
| REF-1 | Contributor goal-sourcing skill spec | Specification | specs/SPEC-060-A-Contributor-Goal-Sourcing-Skill.md |
| REF-2 | Backlog Sourcing | Decision | ADR-012-Backlog-Sourcing.md |
| REF-3 | Non-Trivial Theorem Enforcement | Decision | ADR-035-Non-Trivial-Theorem-Enforcement.md |
| REF-4 | Identity Engine | Decision | ADR-043-Identity-Engine.md |
| REF-5 | Goal Record Schema | Specification | specs/SPEC-003-A-Goal-Record-Schema.md |
| REF-6 | Proof Provenance Leaderboard | Specification | specs/SPEC-023-A-Proof-Provenance-Leaderboard.md |
| REF-7 | Freek-50 Platonic Solids Roadmap | Decision | ADR-031-Freek-50-Platonic-Solids-Roadmap.md |
| REF-8 | Volunteer-Scale Claim Substrate | Decision | ADR-053-Volunteer-Scale-Claim-Substrate.md |
| REF-9 | Agent Identity, Quotas, and Reputation | Decision | ADR-054-Agent-Identity-Quotas-And-Reputation.md |
| REF-10 | Next batch of theorems / move the goalposts | Issue | GitHub issue #400, tracking issue #1533 |
| Status | Approver | Date |
|---|---|---|
| Proposed | unsorry maintainers | 2026-06-16 |
| Accepted (implemented — goal-sourcing skill / gen_triples / leaderboard, #1836, #1837, #1838) | unsorry maintainers | 2026-06-19 |