Skip to content

fix: restore three lint gates that went red during the merge batch - #9322

Merged
proggeramlug merged 1 commit into
mainfrom
fix/main-gates-after-batch
Aug 31, 2026
Merged

fix: restore three lint gates that went red during the merge batch#9322
proggeramlug merged 1 commit into
mainfrom
fix/main-gates-after-batch

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Three lint steps went red on main during today's merge batch. I found them by running the full scripts/run_lint_gates.sh rather than the gates I'd been picking by hand — it reported 57 ok with 3 failures; this takes it to 60 ok, exit 0.

shape_descriptor_census.py — stale, not a real violation. The census asserts the shape descriptor is published before the ObjectHeader ShapeId, and located that write by its literal spelling (*obj).parent_class_id = id. #9317 correctly routed every post-birth publication through stamp_object_shape_id_with_carrier_note, so the inline write no longer exists and the assertion could not find it. The invariant itself is intact — in publish_object_shape_from, shape_descriptor_ensure_with_holes is still at line 83 and the stamp at line 91. The assertion and the census's own inversion self-test now name the funnel.

I verified the updated gate can still fail: planting an inverted ordering (stamp before descriptor-ensure) in shapes.rs makes it exit 1 with the same CensusError, and restoring it returns to green. It isn't a gate that only agrees with itself.

Unused Path import in strided_tagged_fill.rs from #9316. cargo check --workspace --all-targets -D warnings rejects it; a plain cargo build never sees it because it does not compile test targets — which is exactly how it got past me.

unrooted_local_shape.py per-file ceiling for perry-ext-mysql2, from #9319's two new tests. This one was a real exposure, not a checker artifact: the tests allocated eight heap values up front and then pushed them one at a time, so every earlier value was live across a js_array_push that can move it — the #8217 shape the instrument exists to find. Each value is now built inside the iteration that pushes it, and the array is consumed in the expression that builds it.

No baseline was touched. The file returns to its recorded ceiling of 9 and the repository total drops 576 → 567. Raising the ceiling would have been rejected anyway — --no-raise-vs refuses a per-file raise even when the total falls, which is the same anti-gaming guard #9297 is currently blocked on.

Both mysql2 tests still pass, and perry-ext-mysql2 compiles clean under --all-targets.

Summary by CodeRabbit

  • Bug Fixes

    • Updated internal validation checks to align with the latest shape-publication flow.
    • Removed an unused import identified by workspace checks.
    • Reworked MySQL integration tests to avoid unstable temporary values, improving test reliability.
  • Documentation

    • Added a changelog entry covering the lint-gate fixes and reduced validation issue count.

The census update tracks #9317's funnel refactor without weakening the
invariant; the mysql2 test change removes real cross-allocation exposure
rather than raising the ceiling.
@proggeramlug
proggeramlug merged commit cb0102f into main Aug 31, 2026
17 of 18 checks passed
@proggeramlug
proggeramlug deleted the fix/main-gates-after-batch branch August 31, 2026 20:12
@coderabbitai

coderabbitai Bot commented Aug 31, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: b399df2c-1512-4e0d-81e5-f32840b868f3

📥 Commits

Reviewing files that changed from the base of the PR and between 192ff13 and b84cc76.

📒 Files selected for processing (4)
  • changelog.d/9322-main-gates-after-batch.md
  • crates/perry-ext-mysql2/src/lib.rs
  • crates/perry/tests/strided_tagged_fill.rs
  • scripts/shape_descriptor_census.py

📝 Walkthrough

Walkthrough

The PR updates shape-descriptor census assertions, restructures MySQL extension tests to avoid unrooted locals, removes an unused import, and records these lint-gate fixes.

Changes

Lint gate alignment

Layer / File(s) Summary
Shape-descriptor census alignment
scripts/shape_descriptor_census.py
Census assertions and the sabotage fixture now reference stamp_object_shape_id_with_carrier_note in the publication order.
MySQL test value construction
crates/perry-ext-mysql2/src/lib.rs
Tests construct array values during fold operations and use nested allocation-and-push expressions.
Lint cleanup and changelog
crates/perry/tests/strided_tagged_fill.rs, changelog.d/9322-main-gates-after-batch.md
The unused Path import is removed. The changelog records the gate fixes.

Estimated code review effort: 2 (Simple) | ~10 minutes

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/main-gates-after-batch

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant