Skip to content

CI for ruff_r2il, and build it against the current r2il - #122

Merged
AdaWorldAPI merged 5 commits into
mainfrom
ccr-e6037cd5-gl8du4
Oct 14, 2026
Merged

AdaWorldAPI merged 5 commits into
mainfrom
ccr-e6037cd5-gl8du4

Conversation

@AdaWorldAPI

Copy link
Copy Markdown
Owner

Summary

ruff_r2il is excluded from the workspace because it path-depends on the r2sleigh and a2ui-rs checkouts next to this repository. None of the workspace-wide CI jobs (fmt, clippy, tests) built it, so it stopped compiling against the current r2il without any check noticing. Every other fork crate is a workspace member and already runs through those jobs.

Changes

ruff_r2il builds against the current r2il. The r2il crate added AddressSpace::aliases and a SpaceId::Unresolved variant for spaces the lifter could not name.

  • facet::project refuses an unresolved space with a new FacetOverflow::UnresolvedSpace. Every unresolved space compares equal, so assigning one a discriminant would merge spaces that may be distinct.
  • The furnace records such a varnode under a new ResidualReason::UnresolvedSpace, keeping the crate's "no catch-all reason" rule. The ledger sink writes and parses it.
  • The oracle builds its permissive custom spaces with aliases: None.
  • The corpus profile counts unresolved-space projections separately.

New CI job, cargo (ruff_r2il).

  • It checks out AdaWorldAPI/r2sleigh and AdaWorldAPI/a2ui-rs (both public) beside this repository, matching the ../../../<sibling> paths in crates/ruff_r2il/Cargo.toml.
  • It runs cargo fmt --check, clippy with warnings denied (with and without the lift feature) and cargo test, all --locked on the repository's Rust 1.99.0 toolchain.
  • It is part of the "all required checks passed" gate.

Test plan

  • Against the default-branch tips of r2sleigh and a2ui-rs, all on 1.99.0: cargo fmt --check, both clippy runs and cargo test --locked (73 tests) pass for ruff_r2il.
  • New test: unresolved_space_is_refused_rather_than_given_a_discriminant. It fails when SpaceId::Unresolved is mapped to a discriminant instead of refused, and passes with the fix.
  • ResidualReason's exhaustive no-catch-all test now lists 12 reasons.

🤖 Generated with Claude Code

https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd


Generated by Claude Code

The r2sleigh `r2il` crate added `AddressSpace::aliases` and the
`SpaceId::Unresolved` variant, a space the lifter could not name. Every
unresolved space compares equal, so it has no stable identity to project.

- `facet::project` refuses an unresolved space with the new
  `FacetOverflow::UnresolvedSpace` instead of assigning it a discriminant, which
  would merge spaces that may be distinct.
- The furnace records such a varnode as the new `ResidualReason::UnresolvedSpace`
  (anchored at the enclosing block, like an unknown custom space), and the
  ledger sink writes and parses it.
- The oracle's permissive arch builds its custom spaces with `aliases: None`
  ("not known to alias anything").
- The corpus profile counts unresolved-space projections separately.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd
`ruff_r2il` is excluded from the workspace because it path-depends on the
`r2sleigh` and `a2ui-rs` checkouts next to this repository, so the
workspace-wide fmt, clippy and test jobs never built it, and it had stopped
compiling against the current `r2il` without any check noticing.

The new `cargo (ruff_r2il)` job checks out both siblings beside this repository,
then runs `cargo fmt --check`, clippy with warnings denied (with and without the
`lift` feature) and `cargo test`, all `--locked` on the repository's toolchain.
It is part of the "all required checks passed" gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd
@coderabbitai

coderabbitai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3b505f76-0865-4570-8b3f-138d215f1c55
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption.

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.

`cargo hawk` reports public items that nothing in the workspace outside the
crate uses. The fork's SPO/transcode crates are libraries whose public API is
consumed outside this workspace (OGAR and the transcode consumers), so every
one of their exported items was reported: 455 findings, all in these nine
crates. Each is now listed as a `[[production]]` library, which tells hawk its
public API is an external boundary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd
Declaring the nine fork SPO/transcode crates as `[[production]]` lib
targets did not help. Hawk still audits a production library: a public
item with no use inside the workspace is reported as dead or
unnecessarily public, so 422 findings remained.

These crates are called from outside this workspace (OGAR and the
transcode consumers), which a closed-world analysis cannot see. Hawk's
documented mechanism for that case is `--exclude-crate`: the crates are
still compiled, but their public declarations are not reported. Revert
the `[[production]]` entries and pass the flag for each crate in the CI
step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd
The fork of r2sleigh was replayed onto radareorg/r2sleigh master. There,
the lifter depends on `r2source` and `roxmltree` and no longer on
`thiserror`, so the `--locked` builds in the `cargo (ruff_r2il)` job
refused the old lockfile. This records the minimal update cargo makes
against the replayed tree; no other version moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017HJA9obVWqSQYNtXGnMGLd
@AdaWorldAPI
AdaWorldAPI marked this pull request as ready for review October 14, 2026 21:48
@coderabbitai

coderabbitai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Add Carrot credits or activate Agent usage billing to use Autofix

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-14T21:49:37.128977Z 4d4bd84 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@AdaWorldAPI
AdaWorldAPI merged commit 43d8974 into main Oct 14, 2026
3 of 4 checks passed
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.

2 participants