findModel (src/review.ts:434-437) selects the referee and verifier purely on id + enabled, never checking whether that model's secret is present. refereeClusters then skips entirely (src/merge/referee.ts:504-506), as does verification (src/merge/verify.ts:430-432).
Why this matters: the default fast preset pins deepseek-v4-flash-0731 as the consensus model (src/config.ts:181-186). So a user with only JUROR_OPENAI_API_KEY — the single most common onboarding setup — silently loses semantic deduplication, even though GPT-5.6 Luna is running and could referee. The headline feature degrades with no clear signal.
The work
o.secrets is already in scope at both call sites (src/review.ts:168, src/review.ts:198). Prefer the configured id; otherwise pick the first enabled model with a readable secret via readSecret. Warn when falling back, and add a test in test/review.test.ts.
findModel(src/review.ts:434-437) selects the referee and verifier purely onid+enabled, never checking whether that model's secret is present.refereeClustersthen skips entirely (src/merge/referee.ts:504-506), as does verification (src/merge/verify.ts:430-432).Why this matters: the default
fastpreset pinsdeepseek-v4-flash-0731as the consensus model (src/config.ts:181-186). So a user with onlyJUROR_OPENAI_API_KEY— the single most common onboarding setup — silently loses semantic deduplication, even though GPT-5.6 Luna is running and could referee. The headline feature degrades with no clear signal.The work
o.secretsis already in scope at both call sites (src/review.ts:168,src/review.ts:198). Prefer the configured id; otherwise pick the first enabled model with a readable secret viareadSecret. Warn when falling back, and add a test intest/review.test.ts.