mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-02 04:38:55 +00:00
process: derived artifacts are accepted on dev once per beta (#697)
The screenshot fingerprint and golden baselines stop being a tax on every task branch: - Task branches no longer commit docs/images/** or golden baselines. On a branch the screenshot freshness stays a preflight warning; the review prompt, REVIEWER.md and AUTHOR.md drop check-docs as a per-task gate. - beta-derived.yml refreshes them on dev in one bot commit before the beta candidate: canonical docs capture + docs:accept --reviewed, golden from the golden-images artifact of a completed Validate on dev + golden:accept --reviewed. A changed frame or scene is accepted only when named in the inputs; undeclared differences refuse. Baseline commits carry Release: and Baseline-Reviewed:; the subject is not a candidate subject. - classify-changes: the Release: trailer on an issue/* branch no longer switches on the heavy set. ci:full / ci:golden do: process-track emits full=true, the review gate dispatches Validate with full=true and does not accept a light proof. Canon: PROCESS.md §3 п.13, §5.1, §8, §11.4; CONTRIBUTING.md. Issue: #697 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
This commit is contained in:
@@ -13455,6 +13455,51 @@ const MUTANT_DEFINITIONS = [
|
||||
replace: ' else if (false && block.high > 0) problems.push(',
|
||||
}],
|
||||
},
|
||||
// #697: производные артефакты — на dev, тяжёлое на ветке задачи — по меткам.
|
||||
{
|
||||
id: 'task-branch-release-trailer-heavy-again',
|
||||
guard: 'node --test --test-name-pattern="#697" test/classify-changes.test.mjs',
|
||||
because: '#697: on a task branch the Release: trailer only marks a baseline acceptance; '
|
||||
+ 'it must not switch on smokes, golden and perf again — ci:full/ci:golden do that',
|
||||
patches: [{
|
||||
file: 'scripts/classify-changes.mjs',
|
||||
find: ' if (isTaskBranch(refName)) return false;\n',
|
||||
replace: '',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'ci-golden-label-does-not-order-full-set',
|
||||
guard: 'node --test --test-name-pattern="#697" test/process-track.test.mjs',
|
||||
because: '#697: a task that changes visuals on purpose sets ci:golden; without the full set '
|
||||
+ 'on its review material its shifted frames surface in the next task again',
|
||||
patches: [{
|
||||
file: 'scripts/process-track.mjs',
|
||||
find: " const full = labels.includes('ci:full') || labels.includes('ci:golden');",
|
||||
replace: " const full = labels.includes('ci:full'); // mutant: ci:golden ignored",
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'review-gate-accepts-light-proof-for-full',
|
||||
guard: 'node --test --test-name-pattern="#697" test/validate-gate.test.mjs',
|
||||
because: '#697: with ci:full/ci:golden a light push run proves nothing about smokes and golden; '
|
||||
+ 'the gate must dispatch full=true instead of accepting it',
|
||||
patches: [{
|
||||
file: 'scripts/validate-gate.mjs',
|
||||
find: " const policy = full ? Object.freeze({ ...base, name: `${base.name}-full`, full: true }) : base;",
|
||||
replace: ' const policy = base; // mutant: full never required',
|
||||
}],
|
||||
},
|
||||
{
|
||||
id: 'bot-golden-commit-without-provenance',
|
||||
guard: 'node --test --test-name-pattern="провенанс" test/beta-derived.test.mjs',
|
||||
because: '#697: the bot commit that moves baselines must carry Release: and Baseline-Reviewed:, '
|
||||
+ 'otherwise validate-commit-provenance turns dev red on the push',
|
||||
patches: [{
|
||||
file: '.github/workflows/beta-derived.yml',
|
||||
find: ' echo "Release: $TAG"\n',
|
||||
replace: '',
|
||||
}],
|
||||
},
|
||||
];
|
||||
|
||||
const mutationCardSource = readFileSync(join(repoRoot, 'src/houseplan-card.ts'), 'utf8');
|
||||
|
||||
Reference in New Issue
Block a user