ci: журнал пойманных свидетелей для changed_mutants

witnessFingerprint (файлы патча и гарда + объявление, без строки версии),
readLedger/recordCaught/splitByLedger, флаг --ledger только с --changed;
журнал пишется после каждого пойманного мутанта, в CI — cache restore по
префиксу шарда и save при любом исходе. Три свидетеля.

Issue: #481
User-Visible: no
This commit is contained in:
Codex
2026-09-06 21:00:39 +00:00
committed by claude[bot]
parent 2f65a184fd
commit 97aabddce7
5 changed files with 277 additions and 9 deletions
+12 -3
View File
@@ -125,7 +125,7 @@ const visualPackageProjection = (text) => {
};
/** Номер версии продукта, как его знает package.json. */
const productVersion = (root) => {
export const productVersion = (root) => {
const path = resolve(root, 'package.json');
if (!existsSync(path)) return '';
try {
@@ -153,11 +153,20 @@ const productVersion = (root) => {
* версия зависимости в `package-lock.json` остаётся частью отпечатка, иначе
* обновление зависимости перестало бы требовать пересъёмки.
*/
export const visualFingerprint = (root = process.cwd()) => {
/**
* Та же нормализация версии для чужих корпусов (#481): журнал пойманных
* свидетелей считает отпечаток по файлам патча и гарда, и бамп версии
* не должен делать ни один свидетель «изменённым».
*/
export const withoutProductVersion = (root = process.cwd()) => {
const version = productVersion(root);
const withoutVersion = version
return version
? (text) => text.split(version).join('0.0.0-product-version')
: (text) => text;
};
export const visualFingerprint = (root = process.cwd()) => {
const withoutVersion = withoutProductVersion(root);
return digest(root, fingerprintFiles(root), (text, name) => (
name === 'package.json'
? visualPackageProjection(withoutVersion(text))