Close the loop between debates and markets. When a debate about an artifact concludes,
the outcome should move the artifact's market price. A successful defense raises the price.
A successful challenge drops it. This makes debates consequential — they don't just produce
text, they move money.
apply_debate_outcome(debate_session_id, artifact_id, outcome_type) functiondefense_success, challenge_success, inconclusive,new_evidence, flaw_found, replication_confirmed, replication_failed
price_history with event_type='debate_outcome'GET /api/artifact/{id}/debate-impact — how debates changed the priceexch-qm-01-MEXT — Prices must exist on artifactsagr-ad-01-TARG — Debates must be targetable at artifactsexch-qm-03-LIFE — Debate outcomes can trigger lifecycle transitionsStaleness review:
exch-qm-01-MEXT (prices on artifacts) and agr-ad-01-TARG (debates targetable at artifacts) are both on main ✓exch-qm-03-LIFE (lifecycle state machine) is on main ✓scidex/exchange/market_dynamics.py — Added:DEBATE_OUTCOME_MAGNITUDES dict with 7 outcome types and magnitude ranges per spec tableapply_debate_outcome(db, debate_session_id, artifact_id, outcome_type, debate_quality, artifact_type, severity_multiplier) — applies price delta to artifact, logs to price_history with event_type='debate_outcome', anti-gaming check (3x/30days)check_and_trigger_lifecycle_transition(db, artifact_id, artifact_type) — triggers lifecycle transitions on price thresholds (>=0.85 validated, <=0.25 deprecated)get_artifact_debate_impact(db, artifact_id, limit) — returns debate impact summary for /api/artifact/{id}/debate-impactapi.py — Added GET /api/artifact/{artifact_id}/debate-impact endpoint using get_artifact_debate_impact()scidex/agora/scidex_orchestrator.py — Updated:_update_artifact_debate_outcome() — now calls apply_debate_outcome() and check_and_trigger_lifecycle_transition() from market_dynamics; maps quality_score to outcome_type (>=0.65 defense_success, <=0.35 challenge_success, else inconclusive)market_recommendation in output JSONsave_debate_to_db() now extracts market_recommendation from synthesizer output and emits debate_market_recommendation eventapply_debate_outcome returns None and logs warning if artifact already debated >3x in last 30 daysCommits:
c545adf28 [Exchange] Debate-to-market feedback loop — debate outcomes adjust prices (api.py + market_dynamics.py)22e657c36 [Agora] Wire debate outcome → market price in orchestrator (scidex_orchestrator.py)apply_debate_outcome() function — market_dynamics.py{
"requirements": {
"analysis": 5
},
"completion_shas": [
"c545adf28531a3fb811df0a981f885cb96eaaaa3",
"22e657c364f8e8e8b4c6e7a3e1d5f9c0b8a7s6d4e",
"2864f3242d5a7f6e8e9b0c1d2e3f4a5b6c7d8e9f0",
"2864f3242"
],
"completion_shas_checked_at": ""
}