Skip to content

Quality Gates

Quality Gates are the after-draft surface in the conversation quality lifecycle. BMO generates a candidate answer (or plan, recipe, or proposal) first; an optional Quality Judge evaluates that draft against evidence and a rubric before the run is finalized.

Advisory by default. Armed send_back can retry at most once. Quality Gates are not the prompt enhancer: the enhancer adds context before generation; Quality Gates evaluate output after a draft exists.

Maturity: Advanced operator and maintainer surface. Use when you need a bounded post-draft or proposal-readiness judgment, not as a replacement for ordinary review or tests.

Failures are visible only after a draft exists: unsupported claims, weak plan criteria, missing prompt/recipe hardening, or proposal evidence that is not ready for human review.

JobRouteWhat it shows
Posture (CLI)bmo config show-quality-gates [--format=json]Armed surfaces, judge model status, metadata-only recent decision ring
Posture (TUI)/quality-gates (alias /quality_gates)Same shared renderer as CLI
Agent / MCPquality_gates_posture, bmo_quality_gates_postureBounded JSON for automation
Decision trail/debuggerquality_judge_* eventsVerdict, action, reason, rubric failures, evidence refs
Run ledgerGET /v1/agent-runs/{run_id}/events, list_agent_runs, get_agent_run_eventsSame events outside the TUI
Manual rubricbmo quality-gate check --path … [--surface plan|prompt_recipe]Plan or recipe hardening without enabling runtime gates

Trust boundary: posture and recent-decision readouts carry hashed session/run/proposal/finding prefixes only — never prompts, answers, diffs, plan bodies, recipe bodies, or provider secrets.

Quality Gates posture readout
Live BMO TUI: the /quality-gates posture readout reports the foundation state, the resolved judge, the per-surface arm state (answer, plan, prompt_recipe, patch_proposal), and the bounded metadata-only decision ring — the surface to inspect before trusting or debugging a verdict.
Quality Gates judge timeline
After a real turn with Quality Gates armed, the Agent Debugger shows `quality_judge_*` events — verdict, action, and rubric metadata alongside the ordinary run timeline.
  • Conversation quality — lifecycle map; use step 3 of the infra regression walkthrough
  • Prompt Stack — jump here when the surprise is input assembly, not draft quality
  • Shadow Evals — jump here for bmo eval compare + eval posture after prompt changes; complements prompt_recipe manual checks
  • Quality orchestration — separate server fanout path; does not replace post-draft gates

When enabled, the answer gate can return one of four verdicts:

VerdictMeaning
passThe draft meets the rubric.
warnThe draft has an issue, but can still be shown.
send_backThe draft should be revised before final output.
escalateThe issue needs operator attention.

The default posture is conservative. The feature is off unless configured, and advisory decisions do not block chat output. Armed send-back retries at most once.

Unavailable judge paths are shown as unavailable, not pass. Runtime policy may fail open for answer and patch-proposal infrastructure failures, but the posture and recent-decision ring keep that state visible.

Terminal window
bmo quality-gate check --path docs/plans/example.md
bmo quality-gate check --surface prompt_recipe --path .bmo/recipes/example.yaml

The plan rubric checks acceptance criteria, source grounding, scope boundaries, system-wide impact, validation commands, and open questions.

The prompt/recipe rubric checks output contract, source ownership, tool availability assumptions, artifact destinations, instruction hardening, and a validation or review gate. This command is manual and opt-in; it does not install hooks or block ordinary edits.

prompt_recipe checks complement — but do not replace — deterministic bmo eval run scenarios documented on Shadow Evals.

The TUI stays quiet for normal pass/advisory outcomes. Runtime activity is shown only for judging in progress, armed send-back, or escalation.

Implementation details: quality-gates.md.