Preregister
This skill supports "decide before observing" for confirmatory claims. Exploratory runs may still use seed_perturb / pin_metric, but any number intended as a main publication claim should have a matching prereg row first.
When to invoke
- Before a result is promoted from exploratory to a confirmatory manuscript claim.
- Right after
bt-tournamentreturns the top-2 hypotheses when the next run is explicitly confirmatory. - Whenever the user types
/preregister.
Required arguments
| arg | meaning | example |
|---|---|---|
hypothesis_id |
id from mem_nodes (kind=hypothesis) |
hyp_a3f9... |
metric_name |
exact claim text the engineer will pin later | "test accuracy" |
direction |
higher_better or lower_better |
higher_better |
threshold |
number that separates met from missed |
0.85 |
seed_count |
how many seeds the seed_perturb call must use | 5 |
alpha |
nominal Type-I error rate | 0.05 |
mc_correction |
bonferroni (default), none, or legacy alias bh |
bonferroni |
family_id |
stable id shared by related confirmatory tests | primary_metrics |
family_size |
total number of tests planned in that family | 4 |
heldout_dataset |
optional dataset name to be queried via query_heldout | mnist-test |
Workflow
- Call
mcp__verify__list_preregistrations(hypothesis_id=...). If a row exists with statusopen, do not fail the session. Ask whether to reuse that lock, withdraw it outside this tool, or create a separate confirmatory prereg for a genuinely different metric. - Before the first family member is resolved, define the full family. Use one
family_idand the same lockedfamily_size, alpha, and correction for all related tests. A standalone test gets an automatically generated family of 1. - Call
mcp__verify__preregister(...)with the exact metric text, threshold,family_id, andfamily_size. - Surface the resulting
prereg_idand family metadata before implementation. - Pass
prereg_idalong the workflow so the confirmatory run stays linked.
Resolution
The engineer or verifier later calls mcp__verify__resolve_preregistration(prereg_id, observed_value, observed_p_value). The verdict is frozen at that point and:
- Bonferroni correction uses the fixed
family_sizesaved at lock time. Resolving earlier rows never relaxes alpha for later rows. The oldbhvalue remains a compatibility alias and resolves with the same fixed-family Bonferroni calculation. prereg_resolvedevents fire into the cockpit.- The
revieweragent later treats confirmatory manuscript claims with status !=metas blockers. Exploratory claims must be labelled as exploratory in the manuscript.
Guardrails
- Never edit a prereg after lock. There is no
update_preregistration. If the locking was wrong, file a new prereg and add a note in the manuscript explaining that the earlier run was exploratory or superseded. withdrawnis reserved for cases the user actively cancels a hypothesis; the verifier never withdraws on its own.- Do not invoke this skill in parallel with a confirmatory seed_perturb. Exploratory seed_perturb runs may exist before the lock, but must stay labelled exploratory.