Metadata
| Status | done |
|---|---|
| Assigned | agent-164 |
| Agent identity | 3184716484e6f0ea08bb13539daf07686ee79d440505f1fdf2de0357707034c3 |
| Created | 2026-04-26T23:08:19.393268063+00:00 |
| Started | 2026-04-26T23:13:03.152880045+00:00 |
| Completed | 2026-04-26T23:59:05.300956648+00:00 |
| Tags | eval-scheduled |
| Eval score | 0.91 |
| └ blocking impact | 0.95 |
| └ completeness | 0.95 |
| └ constraint fidelity | 0.85 |
| └ coordination overhead | 0.95 |
| └ correctness | 0.95 |
| └ downstream usability | 0.90 |
| └ efficiency | 0.85 |
| └ intent fidelity | 0.88 |
| └ style adherence | 0.90 |
Description
Description
In ~/autohaiku, dispatcher's SpawnPlan log shows:
[dispatcher] implement-haiku-generation-module: SpawnPlan executor=claude (from agency.effective_executor), model=local:qwen3-coder (from dispatcher.default_model), endpoint=none (none (executor=claude))
Then claude CLI gets --model qwen3-coder (after stripping the local: prefix) and returns 404: 'There's an issue with the selected model (qwen3-coder). It may not exist or you may not have access to it.'
Agency chose executor=claude but the model is local:qwen3-coder — that combo CANNOT WORK. claude CLI doesn't know qwen3-coder; it only knows opus/sonnet/haiku and Anthropic-hosted variants. The model's local: prefix says explicitly 'this model lives at a local OAI-compat endpoint, not Anthropic.' Routing it through claude CLI = guaranteed 404.
100% failure rate on autohaiku tasks because of this. SpawnPlan is doing its job (honoring agency.effective_executor as the floor) — the bug is in the agency's executor selection: it should never pick claude executor for a model with the local: prefix.
Fix
In the agency's effective_executor resolution (likely src/agency/ or wherever 'agency.effective_executor' is computed for SpawnPlan):
- If the model spec has prefix
local:oropenrouter:oroai-compat:(anything non-claude/non-anthropic), the agency CANNOT pick claude executor regardless of role/tradeoff defaults. Force a compatible executor (native for local/openrouter, etc). - If the agency's role/tradeoff implies claude executor BUT the model is incompatible, log a clear conflict warning and either (a) override executor to compatible, OR (b) override model to a claude-compatible default (per dispatcher tier config).
Option (a) is safer — preserves the user's model choice.
Add a clear log line on the conflict resolution: 'Agency picked executor=claude for role X but model local:qwen3-coder requires native; routed to native.'
Hard gate
Before claiming done:
- In a scratch dir:
wg init -m qwen3-coder -e https://lambda01.tail334fe6.ts.net:30000 -x nex; wg service start wg add 'simple test task' -d 'echo hello world'wg publish simple-test-task- Wait for dispatch
- Daemon log MUST show SpawnPlan with executor=native (not claude); agent metadata MUST show executor=native; task MUST succeed (or fail for a non-routing reason)
Validation
-
Failing test first: test_agency_does_not_pick_claude_for_local_model — given a model spec with
local:prefix and an agency role that defaults to claude, effective_executor returns native (not claude) - Implementation: agency executor selection respects model-prefix compatibility constraints
- cargo build + cargo test pass with no regressions
- HARD GATE manual smoke as above
Depends on
Required by
- (none)
Log
- 2026-04-26T23:08:19.390098798+00:00 Task paused
- 2026-04-26T23:08:19.880993787+00:00 Task published
- 2026-04-26T23:13:03.152884824+00:00 Spawned by coordinator --executor claude --model opus
- 2026-04-26T23:13:20.385913630+00:00 Starting investigation: looking for agency.effective_executor resolution
- 2026-04-26T23:30:02.869541752+00:00 Implemented Agent::effective_executor_for_model(model) — overrides claude → native when model has non-Anthropic provider prefix. Wired into dispatcher (coordinator.rs) and IPC spawn (ipc.rs).
- 2026-04-26T23:30:06.038869451+00:00 Validated: 3 new unit tests pass (test_agency_does_not_pick_claude_for_local_model, test_agency_keeps_claude_for_anthropic_model, test_agency_does_not_override_explicit_non_claude_executor); all 198 agency tests pass; full --lib suite 1950/1950 pass; --tests suite 2840/2841 pass with 1 pre-existing failure (provenance_full_lifecycle_all_ops_recorded — reproduced on clean tree, noted in wave-1-integration-smoke)
- 2026-04-26T23:50:04.054994935+00:00 Hard gate PASS: smoke scenario agency_local_model_overrides_claude_executor — daemon SpawnPlan log shows 'executor=native (from agency.effective_executor)' for a default-claude agent + model=local:qwen3-coder, exactly the autohaiku case. Pre-fix output was 'executor=claude'.
- 2026-04-26T23:50:38.744071426+00:00 Committed: b85ed060e — pushed to remote
- 2026-04-26T23:59:05.300962940+00:00 Task marked as done