## What **Port of #3287 to the sibling tool.** `lifecycle-column-census.mjs --strict` called `writeBaseline()` during a plain **check**, so running the gate modified the tree it was checking. ``` clean: 0 files dirty $ node scripts/lifecycle-column-census.mjs --strict # no --update-baseline rc=0 after: M scripts/lib/lifecycle-column-census-baseline.json ``` ## Why it matters — measured by #3287, reproduced here #3287 established what this costs: every worker who runs the gate receives a **byte-identical uncommitted diff they did not author**, and reasonably commits it. #3283 and #3285 are the same `+0/-1`, five minutes apart, by two different authors, **neither of whom wrote that line** — the gate wrote it in both checkouts. I hit this one the same way, which is the part worth recording: I saw a modified baseline on my own branch and started reasoning about where *my* change had touched it. It had not. A check that writes turns every reader into an author. The tightening is right in substance, and this tool's `COMMIT IT` message made the diff *explained* rather than mysterious — better than fnxc's was. **Neither addresses the mechanism.** ## The shape, matching #3287 Still computed, still reported loudly, written only under an explicit `--update-baseline` (which has its own path above and is untouched): ``` lifecycle-column-census --strict: baseline CAN BE TIGHTENED — the tree has fewer guards than it allowed packages/engine/src/scheduler.ts: allows 1, tree has 0 Not written. Record it deliberately, so the diff has one author: node scripts/lifecycle-column-census.mjs --strict --update-baseline ``` **A plain run stays green rather than failing.** Guard counts drop when someone *else's* merge removes a literal, so failing on a tightening would redden main on a change the author never made. Report, don't enforce — same reasoning #3287 gives for stamps aging into the past. ## Measured, all three directions | scenario | result | |---|---| | plain `--strict`, stale baseline | reports + hint; **tree clean** (was: 1 file dirty) | | `--strict --update-baseline` | writes, rc=0 | | a new guard added | **rc=1** — regression detection intact | ``` lint clean ``` ## Note Claimed on #3287 before starting, since it is that author's fix and they may have had the port in flight. The two differences from the fnxc case are noted there: this one fires under `--strict` rather than a bare run (but `--strict` is what `package.json` and CI invoke, so it is the common path), and its message was already loud.
62 KiB
62 KiB