feat(qa-evidence): materialize computes the phase verdict; callers must report it

Approved by Garry: the helper, not the model, decides whether evidence can
pass. materialize writes verdict {status, open} into evidence.json and prints
it: fail or blocked from row classifications, inconclusive while any row is
superseded, a complete capture is withheld, a declared required probe is
unrun or there is no evidence, else pass. The caller fixture requires
receipt.status to equal that verdict. CI late-input kept reporting pass with a
superseded happy probe.
This commit is contained in:
garrytan committed 2026-09-30 23:57:09 +00:00
1 parent 1137cba7ac
commit 06545fcc30
3 files changed
+27 -5

No files matched your search

+4 -1
View File
@@ -331,7 +331,10 @@ test('materialize refuses evidence whose declared input snapshot predates the la
expect(stale.status).toBe(2);
expect(receipt(stale.stderr).message).toContain('capture 001 observed an older input snapshot than the latest capture 002');
f.json('annotations.json', { revision: 'fixture-revision', limits: ['Adverse coverage predates the input change.'], evidence: [{ ...rows[0], classification: 'superseded' }, rows[1]] });
expect(f.run('materialize', f.root, 'annotations.json').status).toBe(0);
const materialized = f.run('materialize', f.root, 'annotations.json');
expect(materialized.status).toBe(0);
expect(receipt(materialized.stdout).verdict).toEqual({ status: 'inconclusive', open: ['capture 001 superseded'] });
expect(JSON.parse(fs.readFileSync(path.join(f.root, 'evidence.json'), 'utf8')).verdict.status).toBe('inconclusive');
});
test('captures list declared-but-unrun required probes without judging them', () => {