fix(ci): принимать proof reuse геометрического parity (#548)

Issue: #548
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-09-13 10:58:19 +03:00
parent 76d8017e87
commit b15d357fa2
2 changed files with 20 additions and 1 deletions
+2 -1
View File
@@ -199,7 +199,8 @@ export function evaluateCiProof({ run, proof, jobs = [], reuseRuns = new Map(),
if (!executedCheckIsGreen(id, jobs)) return result('failed', `${id}: claimed execution is absent, incomplete or not green`);
continue;
}
if (claim.mode !== 'reused' || !['smoke', 'golden', 'performance_smoke', 'backend'].includes(id))
if (claim.mode !== 'reused'
|| !['smoke', 'golden', 'performance_smoke', 'geometry_parity', 'backend'].includes(id))
return result('failed', `${id}: unsupported proof mode ${claim.mode || 'missing'}`);
const reuse = claim.reuse || {};
if (!/^[0-9a-f]{64}$/.test(reuse.key || '') || !/^[0-9a-f]{40}$/.test(reuse.sourceSha || '')
+18
View File
@@ -154,6 +154,24 @@ test('#541 AC: reuse needs a content key, marker source SHA/run and the successf
assert.equal(evaluateCiProof({ ...fixture, proof: badKey, policy: CI_PROOF_POLICIES.release }).status, 'failed');
});
test('#548: geometry parity reuse is accepted only with a verified source job', () => {
const fixture = proofFixture();
fixture.proof.checks.geometry_parity = {
mode: 'reused', result: 'success',
reuse: { key: 'e'.repeat(64), sourceRun: 78, sourceAttempt: 2, sourceSha: 'f'.repeat(40) },
};
fixture.proof.executedChecks = fixture.proof.executedChecks.filter((id) => id !== 'geometry_parity');
fixture.proof.reusedChecks = ['geometry_parity'];
fixture.jobs = fixture.jobs.filter((job) => job.name !== names.geometryParity);
fixture.reuseRuns.set('78:2', {
run: { id: 78, run_attempt: 2, status: 'completed', conclusion: 'success', head_sha: 'f'.repeat(40) },
jobs: [success(names.geometryParity)],
});
assert.equal(evaluateCiProof({ ...fixture, policy: CI_PROOF_POLICIES.release }).status, 'green');
assert.equal(evaluateCiProof({ ...fixture, reuseRuns: new Map(), policy: CI_PROOF_POLICIES.release }).status, 'failed');
});
test('#541: reuse marker parser fails closed', () => {
assert.deepEqual(parseReuseMarker(
`golden прогнана успешно\nSHA: ${SHA}\nпрогон: https://github.com/x/y/actions/runs/123\nпопытка: 4\n`,