Tier fovea scout aspects across two models via the closed scout/deepdive role set
Date: 2026-06-25 Status: Accepted Decision: hl-93me Deciders: Sean Brandt, Claude Opus 4.8
Context
Section titled “Context”fovea 0.4.x supports per-aspect model overrides, but the override value is an llm.Role (not a model id), and validRole() accepts only ‘scout’ or ‘deepdive’ (a closed set). This makes the role set the hard boundary for aspect tiering: a third distinct model tier is impossible without an upstream fovea change. The four built-in scout aspects are correctness, security, types, tests.
Decision
Section titled “Decision”Tier the four scout aspects across exactly two models: correctness and security route to the deepdive role (GLM-5.2); types and tests inherit the scout role (DeepSeek V4-Flash). The deepdive pipeline stage also uses GLM-5.2. MiniMax M3 is rejected for the cheap tier.
Rationale
Section titled “Rationale”- validRole() hard-codes scout|deepdive, so per-aspect tiering is bounded to exactly two models; no third tier without an upstream change.
- correctness and security are high-stakes aspects (a missed candidate never reaches deepdive) warranting the stronger model at scout time; types and tests are recall-oriented with downstream verification.
- DeepSeek V4-Flash reuses the existing openrouter-zdr lane (no new backend) and matches or beats M3 on scout-relevant axes (TAU-bench tool use, structured output) at ~3x throughput.
- require_parameters: true + response_format: json_schema make both models fail loud on structured-output incompatibility rather than silently dropping verdicts (the #17 failure class).
Alternatives Considered
Section titled “Alternatives Considered”- Per-aspect role tiering within the closed role set (chosen): exploits the existing override mechanism; spends GLM-5.2 only where it matters; no upstream change.
- Single model for all aspects (rejected): forces either GLM-5.2 on high-volume cheap aspects or Flash on correctness/security where reliability matters.
- MiniMax M3 as the cheap scout tier (rejected): ~6.7x output premium over Flash for capabilities (browsing, long-horizon terminal agentics) that scout does not exercise; needs a new ZDR backend.
Consequences
Section titled “Consequences”- Positive: high-volume cheap aspects (types, tests) stay on Flash at ~$0.09/$0.18 per 1M; correctness and security get GLM-5.2 reliability without paying GLM-5.2 rates for all four aspects; no upstream fovea code change.
- Negative: the deepdive role does double duty as verdict generator and strong scout tier (semantically overloaded); any third model tier requires an upstream change to extend validRole().
- Neutral: model strings in fovea config are nominal — each ZDR backend pins its model regardless of the alias sent.