Skip to content

fix(gc): unblock the poll-reach audit and run it on every PR - #9012

Merged
proggeramlug merged 2 commits into
mainfrom
fix/8821-poll-reach-concat-value-box
Aug 29, 2026
Merged

fix(gc): unblock the poll-reach audit and run it on every PR#9012
proggeramlug merged 2 commits into
mainfrom
fix/8821-poll-reach-concat-value-box

Conversation

@proggeramlug

@proggeramlug proggeramlug commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Addresses item 1 of #8821, and takes the cheap half of item 2. Does not close the issue — the corpus/checker label-gating question and #8809/#8810's findings are untouched.

The current failure

--audit-poll-reach exits 2 on main today:

error: ALLOC_RE symbols that CALL a POLL_CAPABLE_RUNTIME symbol but are not in POLL_CAPABLE_RUNTIME:
  js_string_concat_value_box                       -> js_string_concat_value

I checked this was genuinely a missing entry rather than something to silence. It is the exact analogue of js_string_concat_box, listed directly above it: an SSO fast arm returning content-stable bits, then js_string_concat_value(prefix, value) as the fallback (string/concat.rs:496) — and that callee is already in the list. An omission at introduction, not a judgement call.

One correction to the issue's timeline

#8821 attributes the red to 2026-08-15. That was the third wave, cleared by #8823 on 08-25. The current failure is a fresh recurrence: js_string_concat_value_box was added on 2026-08-28 by #8965, and the audit went red the same day. So this is not one long-running breakage but the second occurrence of the same pattern — which is itself the argument for the second half of this PR.

Also: run it where it can prevent the problem

The audit is static, build-free, and 0.6s including its self-test. But it lives only in gc-root-dominance.yml, which is label-gated behind run-extended-tests — so it is skipped on every PR and can only speak after the fact, on a scheduled main run. And because it is an early step there, ahead of the compiler build, its failure masks the corpus and checker that workflow exists for.

So it now also runs in lint. That is not a new argument — the runtime GC-pointer holder audit in that same file already makes it for its own placement:

Cheap and build-free, so it belongs in lint, which IS a required context — hazard 2 of CLAUDE.md's four is the step people forget, so this gate is placed where that step does not exist.

Had it been there, #8965 would have been told at PR time instead of reddening a scheduled run thirteen days into the previous fix.

The expensive corpus arms stay exactly where they are.

Verification

  • audit exits 0; checker --self-test OK
  • sabotage: removing the symbol I added returns exit 2 with the same message, so the gate still bites on the real subject
  • --self-test runs first and is not decoration — it plants a fixture that makes the audit report, so a green run says the detector works rather than that nothing happened to be wrong
  • full local gate suite: all 60 gates passed; 2 CI-only skipped, both new commands picked up and green

Summary by CodeRabbit

  • New Features

    • Added a required static audit to lint checks, helping detect garbage-collection poll-reach issues on applicable changes.
    • The audit now recognizes an additional string-concatenation runtime path.
  • Bug Fixes

    • Resolved an audit failure caused by an unrecognized poll-capable runtime helper.
  • Documentation

    • Added changelog documentation describing the audit coverage and its integration into pull request validation.

Ralph Küpper added 2 commits August 29, 2026 07:23
`--audit-poll-reach` exits 2 on `main`: #8965 added
`js_string_concat_value_box` on 2026-08-28 without listing it in
POLL_CAPABLE_RUNTIME. It is the exact analogue of `js_string_concat_box`
directly above it -- an SSO fast arm, then `js_string_concat_value` as the
fallback (string/concat.rs:496), and that callee is already listed -- so this
is an omission at introduction, not a judgement call.

That audit is an early step of `gc-root-dominance.yml`, ahead of the compiler
build, so its failure masks the corpus and checker the workflow exists for
(#8821). Note the issue's timeline needs one correction: the 2026-08-15 red was
the THIRD wave, cleared by #8823 on 08-25; this is a fresh recurrence from
08-28, which is the pattern the list is designed to catch.

Because the recurrence is the norm rather than the exception, also run the
audit in `lint`. It is static, build-free and 0.6s including its self-test,
while `gc-root-dominance.yml` is label-gated behind `run-extended-tests` and so
is SKIPPED on every PR -- it can only report after the fact, on a scheduled
`main` run. This is the same argument the runtime GC-pointer holder audit
already makes in that file for its own placement: cheap and build-free, so it
belongs in a required context.

The expensive corpus arms stay where they are; #8821's remaining questions
(label-gating the corpus, and #8809/#8810's findings) are untouched.
@proggeramlug
proggeramlug merged commit 3291b64 into main Aug 29, 2026
14 checks passed
@proggeramlug
proggeramlug deleted the fix/8821-poll-reach-concat-value-box branch August 29, 2026 05:24
@coderabbitai

coderabbitai Bot commented Aug 29, 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: Pro Plus

Run ID: dba26ba7-7d38-48e8-ac2f-ade9ff6d310c

📥 Commits

Reviewing files that changed from the base of the PR and between 14481e7 and de5312e.

📒 Files selected for processing (3)
  • .github/workflows/test.yml
  • changelog.d/9012-poll-reach-audit-in-lint.md
  • scripts/gc_root_dominance_check.py

📝 Walkthrough

Walkthrough

The change classifies js_string_concat_value_box as poll-capable and adds the GC root-dominance poll-reach audit and self-test to the required lint workflow. A changelog entry documents the correction and audit execution.

Changes

Poll-reach audit

Layer / File(s) Summary
Poll-reach audit integration
.github/workflows/test.yml, scripts/gc_root_dominance_check.py, changelog.d/9012-poll-reach-audit-in-lint.md
POLL_CAPABLE_RUNTIME now includes js_string_concat_value_box. The lint workflow runs the checker self-test and --audit-poll-reach. The changelog records these changes.

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

Suggested reviewers: jdalton

✨ 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/8821-poll-reach-concat-value-box

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