From b0a8abd55dfdf976068120d67895a87423a695f2 Mon Sep 17 00:00:00 2001 From: garrytan Date: Tue, 3 Nov 2026 00:41:25 +0000 Subject: [PATCH] fix(review-pass): write an unavailable outside voice's failure text to its own file so verify keeps the earlier output (GST-1104) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- lib/capy-review-pass.js | 2 +- test/review-pass.test.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/capy-review-pass.js b/lib/capy-review-pass.js index 646d39d9c..458057ebb 100644 --- a/lib/capy-review-pass.js +++ b/lib/capy-review-pass.js @@ -128,7 +128,7 @@ const familyStop = (readers) => { const safe = (s) => s.replace(/[^a-zA-Z0-9._-]/g, '_'); const UNAVAILABLE = 'unavailable: '; const recordUnavailable = async (m, r, why) => { - const file = m.out + '/out/' + safe(r.reader) + '.txt'; + const file = m.out + '/out/' + safe(r.reader) + '.unavailable.txt'; await tools.capy.write({ path: file, content: 'outside voice (' + modelOf(r).model_id + ') ' + why + '\n' }); const c = await sh(bin + ' collect --ledger ' + q(m.ledger) + roleArgs(r) + ' --output ' + q(file) + ' --merged ' + q(m.merged) + ' --manifest ' + q(mf) + ' --unavailable ' + q(why)); if (c.code !== 0) return stop('collect --unavailable ' + r.reader + ' exited ' + c.code + ': ' + c.out.slice(-500)); diff --git a/test/review-pass.test.ts b/test/review-pass.test.ts index bf52d1080..f31960016 100644 --- a/test/review-pass.test.ts +++ b/test/review-pass.test.ts @@ -528,6 +528,7 @@ describe('Capy pass program (fake host, real bins)', () => { expect(h.stops).toEqual('hang' in o ? [ov[0]] : []); const v = bin(dir, env, ['verify', '--ledger', path.join(out, 'review-ledger.jsonl')]); expect(v.stdout).toMatch(/^BRIEF outside-voice UNAVAILABLE/m); + expect(v.stdout).not.toContain('MISMATCH'); expect(v.stdout).toContain('unavailable=1'); } }, 600_000); @@ -572,6 +573,7 @@ describe('Capy pass program (fake host, real bins)', () => { expect(res).toContain('NEXT: judge the voices'); const v = bin(dir, env, ['verify', '--ledger', path.join(out, 'review-ledger.jsonl')]); expect(v.stdout).toMatch(/^BRIEF outside-voice UNAVAILABLE/m); + expect(v.stdout).not.toContain('MISMATCH'); }, 300_000); test('an audit reader marked first settles before any specialist starts; its output is returned, never merged', async () => {