# ADR-015: Progressive Effort Escalation | Field | Value | |-------|-------| | **Decision ID** | ADR-015 | | **Initiative** | unsorry Phase 3 — cycle economics | | **Proposed By** | unsorry maintainers | | **Date** | 2026-06-11 | | **Status** | Accepted | ## WH(Y) Decision Statement **In the context of** ADR-013 running every proof-surface call at `max` effort, where a `max` attempt spends its deep reasoning identically on a statement `simp` would have closed and on one that genuinely needs it, **facing** the observation that most attempt budget is consumed by goals across a wide difficulty spread (phase-2/3 runs closed some targets in minutes while others exhausted two 30-minute walls), and that a fixed top-effort policy pays the maximum token and latency price on every rung of that spread, **we decided for** a per-attempt effort ladder as the prove-mode default: attempt 1 runs at `high`, attempt 2 at `xhigh`, attempt 3 (and beyond) at `max`, with the default attempt budget raised from 2 to 3 so a hard goal always reaches the top rung before decomposition or demotion; decomposition — which only fires after the ladder is exhausted — always runs at the top rung; an explicit `UNSORRY_EFFORT` pins every attempt (no escalation), **and neglected** difficulty-routed effort (predicting a goal's difficulty up front — no reliable signal exists before an attempt is spent), per-goal persistent ladders across cycles (a re-claimed goal restarts at rung 1; affinity already encodes "this resisted"), and model-tier escalation (the model stays `fable` on every rung per the user's standing decision — only reasoning depth escalates), **to achieve** cheaper time-to-proved in expectation — easy goals close on a `high` attempt without paying `max` latency, hard goals still get the full-depth attempt they need plus error feedback from the cheaper passes, **accepting that** a goal that would have closed at `max` on attempt 1 may now take three attempts (one extra wall-clock worst case per such goal), the default budget rising to 3 lengthens the worst-case unproved cycle by one wall, and effort tokens remain CLI-defined strings passed through without a script-side whitelist. ## Context Amends ADR-013, which set proof-surface calls to `fable` at static `max` effort. The model choice stands; this ADR replaces only the effort default. The kernel and gates still judge every result identically — effort, like model, is a performance knob, never a soundness one. The escalation also composes with the existing retry design: attempt 2 and 3 receive the prior attempt's verification errors, so the deeper rungs start from diagnosed failures rather than cold. ## Options Considered ### Option 1: Per-attempt ladder high → xhigh → max (Selected) Escalate reasoning depth only after a cheaper attempt failed; decomposition runs at the top rung. **Pros:** pays for depth only where it is needed; preserves error-feedback retries; pure-function implementation testable hermetically. **Cons:** worst case one extra attempt per hard goal; ladder shape is fixed rather than adaptive. ### Option 2: Keep static max (ADR-013 status quo) (Rejected) **Pros:** simplest; maximal single-attempt success probability. **Cons:** spends top effort on goals that do not need it; with quota-limited CLIs, burns session budget fastest exactly when running unattended. ### Option 3: Difficulty-routed effort (Rejected) Choose the rung from goal metadata (difficulty score, statement size). Rejected: no signal available before an attempt is spent has predicted difficulty reliably in our runs; the ladder *is* the measurement. ## Dependencies | Relationship | ADR ID | Title | Notes | |--------------|--------|-------|-------| | Amends | ADR-013 | Model/Effort Policy | Replaces the static `max` effort default; model default unchanged | | Relates To | ADR-009 | Goal Decomposition | Decomposition fires post-ladder, at the top rung | | Relates To | ADR-007 | Agent Identity and Budgets | Prove-mode default attempt budget 2 → 3 | ## References | Reference ID | Title | Type | Location | |--------------|-------|------|----------| | REF-1 | SPEC-015-A — Progressive effort escalation | Specification | specs/SPEC-015-A-Progressive-Effort-Escalation.md | | REF-2 | SPEC-013-A — Model/effort plumbing | Specification | specs/SPEC-013-A-Model-Effort-Policy.md | ## Status History | Status | Approver | Date | |--------|----------|------| | Proposed | unsorry maintainers | 2026-06-11 | | Accepted | unsorry maintainers | 2026-06-11 |