Effort: thorough
The platform's q-preregistration quest tracks pre-registered
predictions but doesn't offer monetary incentives for actual
replication by physical labs. SciDEX's bounty infrastructure
(scidex/exchange/bounty_escrow.py) already supports $5K-$960K
challenge payouts for AI agents — extend it to **replication
contests** that solicit wet-lab teams to reproduce a published
finding linked to a high-stakes hypothesis.
This is the bridge from autonomous discovery to human-validated
science: a researcher anywhere can claim a contest, run the wet
work, upload protocol + raw data + analysis notebook, and unlock
the bounty after a peer-review pass.
scidex/exchange/replication_contests.py:create_contest(hypothesis_id, target_finding_pmid,
bounty_usd, deadline_days, accepted_methods: list[str])bounty_escrow.lock_funds.claim_contest(contest_id, claimant_orcid, lab_affiliation,
protocol_artifact_id) — only one open claim per contest;submit_replication(contest_id, claimant_orcid, results_artifact_id,
raw_data_url, statistician_review_artifact_id) -> dictstatistician skill).resolve_contest(contest_id) -> dict — pays bounty ifreplicated or partially_replicated;replication_contests,replication_claims, replication_submissions,replication_reviews with FK chain.
GET /replication-contests lists open contests sorted byGET /replication-contests/{id} shows full target finding,POST /api/replication-contests/{id}/claim andPOST /api/replication-contests/{id}/submit enforce ORCIDhuman_expert_reviews reputationq-crowd-expert-review-queue; statistician skillstatistician registered tooltools.py registration).
experiment_extractor.py for findings withreplication_status='unverified').
replicated → bounty paid); plus partial-scidex/exchange/bounty_escrow.py for the lock/releasestatisticianscidex/forge/tools.py skill_router pattern).
scidex.exchange.bounty_escrow — lock_funds / release.q-crowd-expert-review-queue — verifier reputation registry.scidex.agora.experiment_extractor — sources unverifiedstatistician skill — automated review pass.2026-04-27 — All acceptance criteria implemented and verified:
migrations/123_add_replication_contest_tables.py: 4 new tables + history mirror, proper FKs/CHECK constraints/indexesscidex/exchange/replication_contests.py (814 lines): create_contest, claim_contest, submit_replication, resolve_contest, expire_contest, list_open_contests, seed_initial_contests_lock_bounty/_release_bounty wrap bounty_escrow primitives; _spawn_reviewers creates 1 statistician + 2 human reviewers_select_human_reviewers JOINs human_expert_reviews with agent_registry, falls back to contributors tableapi.py routes added at line 35597+: GET/POST /replication-contests, GET /replication-contests/{id}, POST /api/replication-contests/{id}/claim, /submit, /resolve, /reviewscripts/seed_replication_contests.py: wraps seed_initial_contests with --dry-run and --top-n flagstests/test_exchange_replication_contests.py (8 tests, all passing): full lifecycle + partial replication + rejection + expirationreplication_status='unverified' does not exist in DB — actual values are 'single_study', 'unknown', 'replicated', 'conflicting', 'inconclusive'. hypothesis_ids in experiments is a JSON array string; junction table experiment_hypotheses used for proper JOIN.7fcc524d0 pushed to orchestra/task/5633cca8-replication-contests-with-cash-bountiesEvidence: git show origin/main:scidex/exchange/replication_contests.py returns the full 1074-line module. Squash-merged to main as commit 4b5e10d12 (PR #790). All 8 acceptance criteria confirmed [x] in spec. 8 tests passing, 10 initial contests seeded, migration applied to live DB. Task re-claimed by a new slot but no remaining work — closing as already resolved.