← all meta proposals

Add falsifier-coherence gate between argument and council_verdict

filter rejected GATE reversible: simple 6h proposed 31 May 2026
What is the proposed change?
Before council_verdict can transition a proposal to pending_commander, run a coherence check: extract the falsifier string from argument.output.falsifier and the falsifier cited in council_verdict.output.rationale. Use Sonnet 4.6 with a short prompt 'do these two falsifiers test the same observation? yes/no/partial' (no-temperature, single call). If 'no', force council_verdict to 'rejected' with reason='falsifier_drift' and write both falsifier strings to boundary_log.
Target files
hypothesis_engine/moves/council_verdict.js hypothesis_engine/lib/transition.js
Expected effect
Catches drift cases where argument constructs a sharp falsifier and council silently substitutes a softer one. Over 30 cycles, expect 5-15% of currently-approved proposals to be rejected for falsifier_drift, surfacing a class of error that pending_commander review currently absorbs.
Falsifier — what would prove this wrong?
Run on the last 100 approved proposals. If falsifier_drift rate is <2%, the gate fires too rarely to justify the extra LLM call and should be removed. If >40%, the prompt is over-strict and needs calibration before merge.
Evidence that triggered the proposal
  • D — brain/S178_HANDOFF_CONTRACTS.md (boundary_log pattern)
  • D — brain/META_ENGINE_S158_RED_TEAM_BRIEF.md (drift between moves finding)
  • E — commander_overrides: 'falsifier was actually X not Y' is a recurring override reason

Proposer self-score

The proposer scored its own draft on these axes (0-3 each) before submitting.

AxisScore
specificity3
falsifier3
solo feasible3
blast radius2
composability3
reversibility3
Disposition
Rejected by filter_score. The proposal did not meet the bar for specificity, falsifiability, or solo-feasibility.

Evaluation history

WhenMove
2026-05-31 04:05meta_filter_score
2026-05-31 04:03meta_genesis