Skip to content

Design decisions

Each section below is a choice the package makes and the reason for it. Where a case is cited, it is a measured one.

No confidence threshold

The decision carries a confidence number, but nothing is gated on it. The advisor's intervene field, together with an action other than CONTINUE, is the whole gate. The advisor is told so: it is the only judge of whether an intervention is warranted, and it should weigh that itself rather than rely on something downstream to filter it.

Withholding the finish tool on a revision

When the advisor intervenes, the finish tool is removed from the revision request unless the action is CONFIRM_AND_SUBMIT. Every other action means "more work first", so the solver must take one real action before it can try to finish again. Removing the tool is not a hard guarantee, because some tool-call parsers (K2-Horizon's included) do not check a parsed function name against the tools offered on the request. So a revision that calls the finish tool anyway is resampled, up to max_revision_attempts times.

CONFIRM_AND_SUBMIT

Every other action gates a finish the solver already attempted. A periodic review can find the work correct at a moment when the solver is not trying to finish, and CONTINUE there merely declines to interrupt. The measured case: a solver reached a tree matching the reference with its own full battery of checks passing, reverted it four turns later, and went on thrashing until it ran out of context and failed. Correctness and finish attempts never coincided, so nothing converted the one into the other. CONFIRM_AND_SUBMIT is the one action that pushes toward finishing, the one whose hint deliberately ends on a committed action, and the one whose revision keeps the finish tool.

The plan may not carry a verdict

The plan is replayed to the advisor at every later review. A standing decision written into it, such as "if the next review still shows X, let it submit", reads back as already settled and gets executed instead of re-judged. The measured case: an early plan said "then let it submit". Four reviews later the advisor allowed a submission while its own plan for that review still spelled out, with exact parameters, the two tests it knew would fail. It had stopped judging and started executing a promise. The prompt therefore says the plan records task state, never a future verdict.

Repetition rules govern wording, never whether to block

Restating a hint is weaker than changing the angle, so the prompt asks the advisor to vary what it says when it blocks the same gap again. That rule is about wording only. On a pre_submit review the advisor must intervene whenever it believes the implementation would fail, including when its only remaining argument is one it has already made: a submission it allows is final, while a repeated hint costs one turn, and the intervention budget is what ends a standoff. Only a periodic review may stand down for lack of a new angle. An earlier version inverted this and told the advisor to allow the submission once it had nothing new to say. A run duly blocked five times and then waved through a submission its own diagnosis said would score 0.

repeat_streak_escalation is off by default

When the same reason_code recurs across consecutive interventions, the advisor can be shown that streak and asked to escalate. Escalation pushes the advisor toward answer-shaped hints, whose solved trajectories record decisions that were handed over rather than derived, which is worse than an unsolved one. It is off by default. If you enable it, enable screen_hints with it.

fail_open defaults to True

If the advisor times out, errors, or returns a malformed decision after max_advisor_attempts, or a revision fails, the solver's draft is kept and the attempt goes on. A rollout farm should not lose attempts to an advisor outage. The cost is that an advised attempt can silently run as a baseline. Detect it with ifm-advisor summarize: effectively_unadvised counts advised attempts whose advisor failed and never intervened, and advised_without_reviews counts advised attempts that were never reviewed at all. Set fail_open=False to raise instead.

screen_hints is off by default

The paper's runs did not screen hints. The default matches them, so a result produced with the defaults is comparable. For a new run on the reasoning-prefill path, turn it on: it costs nothing when the hint is clean, and replaces a leaking hint with the fixed self-check sentence.