[Agora] Generate experiment_proposal artifacts from unresolved debate cruxes done

← Continuous Proposal Generation
Mine split or unresolved debates for cruxes and emit experiment_proposal artifacts linked back via resolves_crux_of.

Completion Notes

Auto-completed by supervisor after successful deploy to main

Git Commits (2)

Squash merge: orchestra/task/a4c450f7-biomni-analysis-parity-port-15-use-cases (87 commits) (#717)2026-04-27
[Agora] Add debate-crux source to experiment_proposal_generator (#635)2026-04-27
Spec File

Goal

The existing experiment_proposal_generator
(scidex/agora/experiment_proposal_generator.py) takes a hypothesis as input,
but the richest source of falsifiable, time-stamped, controversial questions
on the platform is the unresolved-crux corpus inside completed debate_sessions (see api.py:15515 for the polymorphic artifact_debates
junction). Add a new entry path: scan recent debates whose outcome is unresolved or split, extract the disagreement crux from the synthesis
round, and emit one experiment_proposal artifact per crux.

Acceptance Criteria

☐ CLI: python3 -m scidex.agora.experiment_proposal_generator
--source debate_cruxes --since 7d --dry-run lists candidate cruxes.
☐ Without --dry-run, registers experiment_proposal artifacts with the
full schema (aims, hypotheses, dataset_dependencies,
protocol_summary, predicted_observations, falsification_criteria,
est_cost_usd, est_duration_weeks).
☐ Each proposal is linked to the source debate_session via artifact_links
with link_type='resolves_crux_of' (new link_type — register in
artifact_links.link_type enum or document the new value).
☐ Persona is auto-selected from the debate's personas_used field, biased
toward the persona that lost or split the debate.
☐ Generator respects the existing daily cost cap.
☐ Smoke: process 5 split-outcome debates; 5 proposals registered; one
cross-link per proposal visible in artifact_links.

Approach

  • Add _load_crux_candidates() to the existing
  • experiment_proposal_generator.py that joins debate_sessions (recent,
    unresolved/split) with the synthesis round content.
  • Reuse _select_persona, _log_invocation, and the SYSTEM_PROMPT scaffold;
  • swap in a crux-specific user prompt that quotes both sides of the
    disagreement.
  • Register link resolves_crux_of from proposal → debate.
  • Backfill: run once with --since 30d to seed initial proposals.
  • Dependencies

    • scidex.agora.experiment_proposal_generator — extend, don't fork.
    • scidex.agora.synthesis_engine — supplies crux text.

    Work Log

    Sibling Tasks in Quest (Continuous Proposal Generation) ↗