| Field | Value |
|---|---|
| Decision ID | ADR-015 |
| Initiative | unsorry Phase 3 — cycle economics |
| Proposed By | unsorry maintainers |
| Date | 2026-06-11 |
| Status | Accepted |
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.
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.
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.
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.
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.
| 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 |
| 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 | Approver | Date | |——–|———-|——| | Proposed | unsorry maintainers | 2026-06-11 | | Accepted | unsorry maintainers | 2026-06-11 |