From 286ee88337d9f4374581cbe6efd6d9f5f334da25 Mon Sep 17 00:00:00 2001 From: garrytan Date: Sat, 31 Oct 2026 15:28:58 +0000 Subject: [PATCH] fix: pre-landing review fixes (outside voice with no provider prefix STOPs) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- lib/capy-review-pass.js | 1 + test/review-pass.test.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/lib/capy-review-pass.js b/lib/capy-review-pass.js index cf7add115..b5b886b2f 100644 --- a/lib/capy-review-pass.js +++ b/lib/capy-review-pass.js @@ -95,6 +95,7 @@ const familyStop = (readers) => { const nativeFamily = family(native && modelOf(native) ? modelOf(native).model_id : undefined); if (!laneFamily && !nativeFamily) return 'the outside voice ' + om.model_id + ' cannot be checked against another family: neither input.laneModel nor a native voice model was given'; const f = family(om.model_id); + if (!f) return 'the outside voice ' + om.model_id + ' has no provider prefix, so its family cannot be checked'; if (f !== laneFamily && f !== nativeFamily) return null; return 'the outside voice ' + om.model_id + ' is the ' + f + ' family, the same as the ' + (f === nativeFamily ? 'native voice' : 'lane model') + "; Step 11 needs input.models['outside-voice'] from another family"; }; diff --git a/test/review-pass.test.ts b/test/review-pass.test.ts index f320ff1b3..3d10ef490 100644 --- a/test/review-pass.test.ts +++ b/test/review-pass.test.ts @@ -360,6 +360,8 @@ describe('Capy pass program (fake host, real bins)', () => { expect(await runPass(h, { ...base, stage: 'voices', laneModel: 'openai/gpt-6.1-sol' })).toContain(none); expect(await runPass(h, { ...base, stage: 'voices', laneModel: undefined, models: { 'outside-voice': { model_id: 'openai/gpt-6.1-sol', reasoning_mode: 'medium' } } })) .toContain('STOP: the outside voice openai/gpt-6.1-sol cannot be checked against another family: neither input.laneModel nor a native voice model was given'); + expect(await runPass(h, { ...base, stage: 'voices', models: { 'outside-voice': { model_id: 'claude-sonnet-5-5' } } })) + .toContain('STOP: the outside voice claude-sonnet-5-5 has no provider prefix, so its family cannot be checked'); expect(h.creates.some(c => /^ship x16p1 (adversarial-native|outside-voice)$/.test(c.title))).toBe(false); }, 240_000);