From dc9ced2fb47c3701cc8e87951d0543ce0d02b16b Mon Sep 17 00:00:00 2001 From: Matysh Date: Sat, 22 Aug 2026 02:05:35 +0300 Subject: [PATCH] docs: extend the freshness contract to smokes The contract named benchmark and golden tooling, which is exactly why the smoke launcher was allowed to skip the check for so long. It now covers every browser check, names where each one gets it, and records why a stale bundle is worse than a plain failure: part of the assertions go red and part stay green. Issue: #236 User-Visible: no --- AGENTS.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 2cd97171..19901121 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -358,9 +358,13 @@ complete Linux CI artifact; never accept a partial scenario or images merely to CI green. See `demo/golden/README.md`. **Freshness contract**: the embedded fingerprint covers `src/` plus Rollup, -TypeScript and package-lock build inputs. Benchmark and golden tooling must call -`assertFreshDemoBundle` before recording any result; a missing or mismatched -fingerprint is a hard failure, not a warning. +TypeScript and package-lock build inputs. Every browser check must verify it +before trusting a result — benchmarks, golden runs and documentation captures +call `assertFreshDemoBundle` themselves, and smokes get it from `launch()` in +`demo/serve.mjs` (#236). A missing or mismatched fingerprint is a hard failure, +not a warning; `HP_ALLOW_STALE_BUNDLE=1` skips the check for debugging and says +so out loud. A smoke against a stale bundle does not fail cleanly: part of its +assertions go red and part stay green, which reads as a logic defect. **CI is pinned to an exact SHA.** The release gate accepts only a `completed success` run for the candidate's SHA, not "the last green one"; a new push cancels