Phase 5: tier ladder + escalation (runbook §6, §4.3) #9

Merged
ellen merged 10 commits from phase5/tier-ladder-escalation into main 2026-07-21 14:10:07 +00:00
Member

Phase 5 — tier ladder + escalation

Wires the tier→model matrix and the loop escalation from the runbook (§6, §4.3).

Tier ladder (dispatch.yaml). New resolve job = the single edit point for the tier→model matrix. It reads the governing issue's tier/* label (for the test route, recovered from the agent/issue-N branch), maps it to --model, and passes model + local env to the route workflows via needs.resolve.outputs.*. Role defaults when no tier/*: plan=opus, dev/test=sonnet.

tier model / env
local ANTHROPIC_BASE_URL=$VLLM_URL + ANTHROPIC_AUTH_TOKEN=dummy, model $VLLM_MODEL; unset vars ⇒ falls back to haiku
haiku claude-haiku-4-5
sonnet claude-sonnet-5
opus claude-opus-4-8 (top rung)
fable claude-fable-5 — human-applied only, outside the escalation ladder

Local rung plumbing (plan/dev/test.yaml). New base-url/auth-token inputs; each workflow points ANTHROPIC_* at the vLLM endpoint and drops CLAUDE_CODE_OAUTH_TOKEN just before invoking claude when base-url is set.

Escalation (lib/preflight). Replaces the interim loop/3→park. On a dev run whose issue carries loop/3: read the tier (absent ⇒ dev default sonnet), bump one rung local→haiku→sonnet→opus, swap the tier label, reset loop/3→loop/1, and re-apply agent/dev (remove+re-add so the label event re-fires and dispatch re-resolves the new tier). That run stops (proceed=false); the re-fired run executes on the new model. At tier/opus (or a non-ladder tier like a human-set tier/fable): park to needs/human with an attempt summary.

Attempt backstop. max-attempts-24h default raised 6→12 so the 24h cap does not preempt a full sonnet→opus climb (≈10 attempts); it remains the ultimate runaway ceiling.

Requires (human, org owner): set org vars VLLM_URL + VLLM_MODEL before tier/local can be used; until then it falls back to haiku.

Validated: js-yaml on all files + bash -n on every run block.

🤖 Generated with Claude Code

## Phase 5 — tier ladder + escalation Wires the tier→model matrix and the loop escalation from the runbook (§6, §4.3). **Tier ladder (dispatch.yaml).** New `resolve` job = the single edit point for the tier→model matrix. It reads the governing issue's `tier/*` label (for the test route, recovered from the `agent/issue-N` branch), maps it to `--model`, and passes `model` + local env to the route workflows via `needs.resolve.outputs.*`. Role defaults when no `tier/*`: plan=opus, dev/test=sonnet. | tier | model / env | |---|---| | local | `ANTHROPIC_BASE_URL=$VLLM_URL` + `ANTHROPIC_AUTH_TOKEN=dummy`, model `$VLLM_MODEL`; unset vars ⇒ falls back to `haiku` | | haiku | `claude-haiku-4-5` | | sonnet | `claude-sonnet-5` | | opus | `claude-opus-4-8` (top rung) | | fable | `claude-fable-5` — human-applied only, outside the escalation ladder | **Local rung plumbing (plan/dev/test.yaml).** New `base-url`/`auth-token` inputs; each workflow points `ANTHROPIC_*` at the vLLM endpoint and drops `CLAUDE_CODE_OAUTH_TOKEN` just before invoking `claude` when `base-url` is set. **Escalation (lib/preflight).** Replaces the interim `loop/3`→park. On a dev run whose issue carries `loop/3`: read the tier (absent ⇒ dev default `sonnet`), bump one rung `local→haiku→sonnet→opus`, swap the tier label, reset `loop/3`→`loop/1`, and re-apply `agent/dev` (remove+re-add so the label event re-fires and dispatch re-resolves the new tier). That run stops (`proceed=false`); the re-fired run executes on the new model. At `tier/opus` (or a non-ladder tier like a human-set `tier/fable`): park to `needs/human` with an attempt summary. **Attempt backstop.** `max-attempts-24h` default raised 6→12 so the 24h cap does not preempt a full `sonnet→opus` climb (≈10 attempts); it remains the ultimate runaway ceiling. **Requires (human, org owner):** set org vars `VLLM_URL` + `VLLM_MODEL` before `tier/local` can be used; until then it falls back to `haiku`. Validated: `js-yaml` on all files + `bash -n` on every run block. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Member

Updated per review: local rung now routes through the LiteLLM gateway (org vars LITELLM_URL + LITELLM_MODEL, secret LITELLM_KEY; unset ⇒ falls back to haiku, keyless ⇒ dummy), not vLLM. tier/fable is now excluded from all automation — resolve falls back to sonnet and never invokes claude-fable-5. Re-validated: js-yaml + bash -n clean.

Updated per review: local rung now routes through the **LiteLLM** gateway (org vars `LITELLM_URL` + `LITELLM_MODEL`, secret `LITELLM_KEY`; unset ⇒ falls back to `haiku`, keyless ⇒ `dummy`), not vLLM. `tier/fable` is now **excluded from all automation** — `resolve` falls back to `sonnet` and never invokes `claude-fable-5`. Re-validated: js-yaml + bash -n clean.
ellen merged commit 303cf3241f into main 2026-07-21 14:10:07 +00:00
ellen deleted branch phase5/tier-ladder-escalation 2026-07-21 14:10:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
valssi-public/agent-workflows!9
No description provided.