ci: fingerprint Cargo.toml's profile tables, not the whole manifest (#7282) - #7821
Conversation
|
Warning Review limit reached
Next review available in: 21 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
2cd69d3 to
8c20ff3
Compare
Covers the 32 PRs admin-merged in one pass (audited in principle at the maintainer's direction): PerryTS#7768 PerryTS#7772 PerryTS#7779 PerryTS#7784 PerryTS#7785 PerryTS#7786 PerryTS#7788 PerryTS#7789 PerryTS#7797 PerryTS#7798 PerryTS#7801 PerryTS#7802 PerryTS#7804 PerryTS#7805 PerryTS#7806 PerryTS#7807 PerryTS#7808 PerryTS#7810 PerryTS#7811 PerryTS#7815 PerryTS#7816 PerryTS#7818 PerryTS#7819 PerryTS#7820 PerryTS#7821 PerryTS#7822 PerryTS#7823 PerryTS#7824 PerryTS#7825 PerryTS#7826 PerryTS#7827 PerryTS#7828. (PerryTS#7787 closed as already-landed via the PerryTS#7786 stack.) Per-change history lives in each PR's changelog.d fragment as usual. Claude-Session: https://claude.ai/code/session_01Y1QZ5wUP9gRSwpiweT4Wix
The public-baseline freshness gate no longer fires on
Cargo.tomlchanges that cannot move a measured number (#7282, proposal 1 — the issue's "single biggest win").Cargo.tomlwas fingerprinted whole-file. A newperry-ext-*workspace member, a dependency bump or a[workspace]restructure invalidated the published artifact without touching a benchmarked kernel — #6758/#6761's restructuring did exactly that, and the artifact then sat 40+ commits stale on a REQUIRED check, so every laterlintstep (file-size, GC store-site inventory, addr-class audit, #7253's gate-wiring check) never executed in CI at all, and every merge needed an--adminbypass.Only the
[profile.*]tables now participate —opt-level,lto,codegen-units,panic, i.e. the things that genuinely change comparability. Extraction is textual and conservative (no TOML parser is guaranteed in the CI Python, and generator and checker must agree byte-for-byte); a section header ends the capture unless it is itself[profile…, so[profile.release.package.x]subtables are kept. Measured: 19,466 bytes → 8,681, all 45 profile tables retained,[workspace.package]and every dependency line gone.Sabotage-verified in both directions, by exit code rather than by message:
ci_public_baseline_check.py[profile.release] opt-level = 3 → 2crates/perry-ext-sabotageworkspace memberSo the gate keeps blocking absolutely on what matters and stops firing on what does not — the issue's explicit requirement that it stay required and hard-failing.
On the artifact's stored digests. Narrowing the fingerprint changes both keys, so they are recomputed in the same commit. That is sound rather than an attestation: the artifact matches under the broad fingerprint today (verified before the change), and the narrow fingerprint covers a strict subset of those inputs — an artifact valid under the broad one is necessarily valid under the narrower one. No measurement was re-run and none needed to be: everything in the file except the two
freshnessdigests is byte-identical, asserted programmatically. Independently, the[profile.*]extract is unchanged from the artifact's own commit (38ff7eccc) through HEAD, and acrossHEAD~40andHEAD~120.Also worth recording: the issue's headline complaint — "
Cargo.tomlchanges on every version bump" — was already fixed before this change._fingerprint_bytesnormalizes theversion = "…"line to0.0.0, which is why the gate was green today despite0.5.1355 → 0.5.1461. This change addresses what was left.Scope is proposal 1 only.
HARNESS_PATHSstill fingerprints scripts whose error handling cannot change a number (#7265'srun.shfix is the cited example); proposal 2's measurement-affecting/plumbing split is untouched. The deliberate circularity is preserved —ci_public_baseline_check.pystays out ofpublic_baseline.pyso the checker's own file is not inHARNESS_PATHS.Verified:
tests/test_public_baseline.py7 passed,benchmarks/ci_public_baseline_check.pyexit 0, file-size gate clean.Also fixes #7290
Fixes #7290, which reports the same gate reddening
mainon dependencychurn specifically:
SOURCE_PATHSincludedCargo.tomlwhole-file, so adependabot/taze bump, a new dependency, or a new registry entry invalidated the
published artifact. #6528 had normalized only perry's own
versionline.With the fingerprint narrowed to the
[profile.*]tables, none of those threeparticipate any more — measured on the current manifest, extraction drops
19,466 bytes to 8,681 with every dependency line gone. That is #7290's first
suggested direction ("narrow
SOURCE_PATHSsoCargo.tomlcontributes onlywhat actually affects benchmark output, e.g. the
[profile.*]sections"),which also subsumes its second (normalizing dependency pins) — a line that is
not hashed at all cannot need normalizing.
#7290's other observation — that a failing
lintstep silently skips the eightgate steps after it, because
lintis a step sequence — is a separate defectin the job's structure and is #7278's scope, as #7290 itself notes. It is not
addressed here.