Skip to content

pyre-jit-trace: decompose jitcode_dispatch into per-cluster submodules - #666

Merged
youknowone merged 8 commits into
mainfrom
jitcode
Jul 19, 2026
Merged

youknowone merged 8 commits into
mainfrom
jitcode

Conversation

@youknowone

@youknowone youknowone commented Jul 19, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Mechanically decomposes the pyre-jit-trace production tracer
jitcode_dispatch.rs — a single ~37.8k-line file — into a directory
module with per-cluster submodules, then adds a macro_rules! pilot that
table-dispatches the uniform record arms. Every step is a pure,
behavior-preserving relocation (moving fns between files in one crate
does not change codegen), verified at each milestone.

mod.rs drops from 37,760 to ~21,795 lines; the rest moves into focused
submodules, each re-exported via pub use so external
crate::jitcode_dispatch::NAME paths stay stable.

Commits

  1. jitcode_dispatch.rs → directory module (mod.rs)
  2. Extract #[cfg(test)] mod tests → tests.rs
  3. Extract pcmap/audit helpers → diag.rs
  4. Extract arith/record helpers → arith.rs
  5. Extract bridge/heapcache/vable clusters → bridge_subwalk.rs,
    heapcache_ops.rs, vable_ops.rs
  6. Extract vstack mirror, consolidate submodule decls → vstack_mirror.rs
  7. Extract branch-resolution helpers → branch.rs
  8. Extract guard resume-snapshot capture → resume_snapshot.rs
  9. Macro pilot: replace the 25 uniform
    HELPER(code, op, ctx, OpCode::VARIANT) dispatch arms for the
    int_* / float_* / ptr_* record families with a
    regular_record_table! macro. It generates dispatch_regular_record,
    which handle consults before its per-opname match. This is the Rust
    analogue of the @arguments-decorated exec-generated opimpl_*
    families in pyjitpl.py, which collapse the opcode × register-bank
    cross product into one metaprogrammed table rather than spelling out
    each arm.

Notes

  • The int_same_as/i>i dormant forward-prep arm moves into the table too;
    it stays absent from the codewriter runtime set (rewrite_op_same_as
    strips same_as before assembly).
  • t3_audit_opname_gap_inventory now scans arith.rs alongside mod.rs
    so the relocated arm literals still count as handled.
  • New regular_record_table_is_the_sole_dispatcher asserts the table keys
    are unique, are runtime opnames (except the dormant same_as), and no
    longer appear as dead arms in mod.rs.

Verification

  • cargo test -p pyre-jit-trace --features dynasm: 258 + 11 + 1 pass.
  • cargo fmt clean.
  • python pyre/check.py: dynasm 225/225, cranelift 225/225 — the full
    9-commit refactor is runtime-neutral on both backends.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Expanded JIT dispatch for integer/float/pointer/reference arithmetic, comparisons, casting, and pointer-null checks.
    • Improved heapcache-backed array/field reads and writes, plus virtualizable (vable) field/array operations.
    • Enhanced bridge transitions, inline calls, multi-frame execution, and resume/guard snapshotting.
    • Added operand-stack mirroring to improve correctness across Python bytecode boundaries.
  • Bug Fixes
    • More reliable guard resumption and branch-guard safety, with improved coordinate resolution and failure handling.
  • Tests
    • Expanded unit-test coverage for dispatcher, recorder, heapcache, vable behavior, and resume snapshots.

@coderabbitai

coderabbitai Bot commented Jul 19, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 99e4c0aa-28e3-4642-9255-67beda339d95

📥 Commits

Reviewing files that changed from the base of the PR and between 5f376ad and bbfa9ea.

📒 Files selected for processing (10)
  • pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/heapcache_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/resume_snapshot.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vable_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vstack_mirror.rs

Walkthrough

Adds Rust JIT trace-walker support for arithmetic, heapcache and virtualizable operations, bridge sub-walks, branch resumption, guard snapshots, PC-map diagnostics, operand-stack mirroring, and dispatcher validation.

Changes

JIT trace-walker execution

Layer / File(s) Summary
Operation recording and memory dispatch
pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs, .../heapcache_ops.rs, .../vable_ops.rs
Adds arithmetic, comparison, cast, pointer, heapcache, field, array, and virtualizable handlers with concrete propagation, register-bank updates, and typed errors.
Bridge sub-walks and operand-stack state
pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs, .../vstack_mirror.rs
Adds full-body and bridge continuation walks, register reconstruction, and operand-stack mirroring across bytecode boundaries and exception handlers.
Branch targets and resume snapshots
pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs, .../resume_snapshot.rs
Decodes branch trampolines and carried coordinates, checks resume hazards and liveness, and captures single- or multi-frame guard snapshots.
PC-map resolution and audits
pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
Adds JIT-to-Python PC inversion, trivia skipping, in-flight for_iter resolution, and environment-gated audit probes.
Dispatcher and execution validation
pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
Adds tests for stepping, control flow, inline calls, returns, exceptions, residual calls, operation recording, heapcache behavior, bridge state, and structural validation.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

  • youknowone/pyre#205 — Covers the same JIT trace-walker arithmetic, bridge, branch, heapcache, snapshot, and operand-stack areas.
  • youknowone/pyre#495 — Concerns inline sub-walk, branch-resume, snapshot, and value-reconstruction behavior implemented here.

Possibly related PRs

  • youknowone/pyre#236 — Directly relates to kept-stack branch-guard resume safety and unrestorable reference detection.
  • youknowone/pyre#440 — Directly relates to strict multi-frame inline caller-frame resume handling.
  • youknowone/pyre#602 — Shares JitCode-to-Python coordinate and PC-map floor-resolution logic.

Poem

A rabbit hops through traces bright,
Recording sums by moonlit light.
Branches find their paths anew,
Snapshots keep the stack in view.
Heap and vable burrows align—
“Hop!” says Bun, “the walk is fine!”

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed It accurately summarizes the main change: splitting jitcode_dispatch into focused submodules.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ 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 jitcode

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs`:
- Around line 160-183: Update unop_int_record to handle OpCode::SameAsI
explicitly as an identity fold, preserving the operand’s concrete integer value
without calling eval_unary_i. Keep the existing eval_unary_i path for IntNeg,
IntInvert, IntIsTrue, and IntIsZero, and continue writing the resulting concrete
value through write_int_reg.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs`:
- Around line 1-193: Confirm that all eight benchmarks were run after the
JIT-source change and that none regressed; do not finalize the change if any
benchmark fails or regresses. Also run scripts/extract-llbc.py to re-extract the
affected Charon .ullbc files before rebuilding the rtyper prepass, and record or
verify these validation steps for the jitcode_dispatch module relocation.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs`:
- Around line 160-198: Introduce a shared WalkContext test fixture or builder
and replace the repeated WalkContext literals throughout the tests with it. Seed
the helper with the current common defaults, including sentinel vstack/live
fields, descriptor defaults, and fail descriptors, while allowing tests to
override fields such as registers, descriptor pools, is_top_level, and
is_authoritative_executor. Update all affected test setup sites to use the
helper so future WalkContext fields require changes in one place.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 985543f4-7163-4b36-afac-60a2958db609

📥 Commits

Reviewing files that changed from the base of the PR and between 55c84e0 and 5f376ad.

📒 Files selected for processing (10)
  • pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/heapcache_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/resume_snapshot.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vable_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vstack_mirror.rs

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs`:
- Around line 160-183: Update unop_int_record to handle OpCode::SameAsI
explicitly as an identity fold, preserving the operand’s concrete integer value
without calling eval_unary_i. Keep the existing eval_unary_i path for IntNeg,
IntInvert, IntIsTrue, and IntIsZero, and continue writing the resulting concrete
value through write_int_reg.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs`:
- Around line 1-193: Confirm that all eight benchmarks were run after the
JIT-source change and that none regressed; do not finalize the change if any
benchmark fails or regresses. Also run scripts/extract-llbc.py to re-extract the
affected Charon .ullbc files before rebuilding the rtyper prepass, and record or
verify these validation steps for the jitcode_dispatch module relocation.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs`:
- Around line 160-198: Introduce a shared WalkContext test fixture or builder
and replace the repeated WalkContext literals throughout the tests with it. Seed
the helper with the current common defaults, including sentinel vstack/live
fields, descriptor defaults, and fail descriptors, while allowing tests to
override fields such as registers, descriptor pools, is_top_level, and
is_authoritative_executor. Update all affected test setup sites to use the
helper so future WalkContext fields require changes in one place.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 985543f4-7163-4b36-afac-60a2958db609

📥 Commits

Reviewing files that changed from the base of the PR and between 55c84e0 and 5f376ad.

📒 Files selected for processing (10)
  • pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/heapcache_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/resume_snapshot.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vable_ops.rs
  • pyre/pyre-jit-trace/src/jitcode_dispatch/vstack_mirror.rs
🛑 Comments failed to post (3)
pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs (1)

160-183: 🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Confirm eval_unary_i does NOT handle SameAsI (would panic), and that int_same_as reaches unop_int_record.
rg -nP --type=rust -C2 'fn eval_unary_i' 
echo '--- SameAsI arms in eval_unary_i ---'
ast-grep run --pattern 'fn eval_unary_i($_, $_) -> $_ { $$$ }' --lang rust 2>/dev/null | rg -n 'SameAsI|other =>|panic!' 
echo '--- other unop_int_record fold call sites ---'
rg -nP --type=rust -C1 'eval_unary_i\(' pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs

Repository: youknowone/pyre

Length of output: 470


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- arith.rs around unop_int_record ---'
sed -n '150,190p' pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs

echo '--- eval_unary_i definition ---'
rg -n -C 6 'fn eval_unary_i' majit -g '*.rs'

echo '--- OpCode variants / SameAsI references ---'
rg -n -C 3 'SameAsI|IntNeg|IntInvert|IntIsTrue|IntIsZero' majit pyre -g '*.rs'

echo '--- regular_record_table mappings for int_same_as ---'
rg -n -C 2 'int_same_as|SameAsI' pyre/pyre-jit-trace/src -g '*.rs'

Repository: youknowone/pyre

Length of output: 50372


Handle SameAsI separately in unop_int_record. int_same_as/i>i is routed through eval_unary_i, but that helper only accepts IntNeg/IntInvert/IntIsTrue/IntIsZero and panics on SameAsI. A concrete source value will take this path and abort the tracer; fold SameAsI as identity before the generic unary evaluator.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs` around lines 160 - 183,
Update unop_int_record to handle OpCode::SameAsI explicitly as an identity fold,
preserving the operand’s concrete integer value without calling eval_unary_i.
Keep the existing eval_unary_i path for IntNeg, IntInvert, IntIsTrue, and
IntIsZero, and continue writing the resulting concrete value through
write_int_reg.
pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs (1)

1-193: 🧹 Nitpick | 🔵 Trivial

Confirm benchmark + Charon re-extraction steps for this JIT-source change.

As per coding guidelines, "After JIT changes, run all eight benchmarks and do not commit if any benchmark regresses" and "After changing interpreter, object, or JIT source, re-extract the corresponding Charon .ullbc files with scripts/extract-llbc.py before rebuilding the rtyper prepass." The PR objectives mention formatting, Rust tests, and Python checks (dynasm/cranelift) but not the benchmark suite or Charon re-extraction. Since this is described as a pure relocation, these should be no-ops, but the guideline applies to any JIT-source change and is worth confirming was run given the file's scale and criticality.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs` around lines 1 - 193,
Confirm that all eight benchmarks were run after the JIT-source change and that
none regressed; do not finalize the change if any benchmark fails or regresses.
Also run scripts/extract-llbc.py to re-extract the affected Charon .ullbc files
before rebuilding the rtyper prepass, and record or verify these validation
steps for the jitcode_dispatch module relocation.

Source: Coding guidelines

pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs (1)

160-198: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Consider a WalkContext test builder to collapse the repeated 40-field literal.

This exact WalkContext { ... } initializer (≈40 fields, most set to the same defaults — callee_shadow: None, raw_descrs: RawDescrPool::Global, all the vstack_* / live_* sentinels, the four done_with_this_frame_* fail descrs, etc.) is copy-pasted across ~55 tests. This dominates the file and makes it fragile: adding one WalkContext field forces edits at every call site, and a mis-set field in any one copy is easy to miss.

A small helper (e.g. a WalkContextFixture/builder seeded from fresh_trace_ctx, or a Default-backed constructor taking only the fields a test overrides — registers, descr pool, is_top_level, is_authoritative_executor) would let each test set only what it exercises and cut thousands of lines.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs` around lines 160 - 198,
Introduce a shared WalkContext test fixture or builder and replace the repeated
WalkContext literals throughout the tests with it. Seed the helper with the
current common defaults, including sentinel vstack/live fields, descriptor
defaults, and fail descriptors, while allowing tests to override fields such as
registers, descriptor pools, is_top_level, and is_authoritative_executor. Update
all affected test setup sites to use the helper so future WalkContext fields
require changes in one place.

Rename jitcode_dispatch.rs to jitcode_dispatch/mod.rs and add the
`// __SUBMODULES__` marker anchor so the module can be split into
per-cluster submodules. No logic change.

Assisted-by: Claude
Move the `#[cfg(test)] mod tests` block into tests.rs (declared from
mod.rs). Its `include_str!` self-scan now targets mod.rs. No test logic
change.

Assisted-by: Claude
Move the jitcode-pc -> python-pc inversion helpers
(python_pc_for_jitcode_pc + floor-boundary), skip_python_trivia_forward,
resolve_parent_resume_py_pc, the in-flight FOR_ITER body resolvers, and
the surviving RECIPE_RESULTCOLOR audit probe into diag.rs.

Assisted-by: Claude
Move the int_*/float_*/ptr_* kind-parameterized record helpers
(binop/unop recorders, pure-binop eval, ref/ptr guards, cast) into
arith.rs.

Assisted-by: Claude
Move the bridge sub-walk drivers into bridge_subwalk.rs, the
heapcache-backed field/array recorders (plus the vable field-index
constants) into heapcache_ops.rs, and the virtualizable field/array
metainterp accessors into vable_ops.rs.

Assisted-by: Claude
Move the value-stack mirror (classify/reconcile/reseed/seed/step/
enter-handler) and the pc-map block-head helpers it steps through into
vstack_mirror.rs.

Assisted-by: Claude
Move the branch-target resolution / trampoline decoding / branch-arm
resume-liveness helpers into branch.rs, and the guard resume-data
snapshot capture (single- and multi-frame inline paths plus the
inline-caller-frame computation) into resume_snapshot.rs.

Assisted-by: Claude
Replace the 25 uniform `HELPER(code, op, ctx, OpCode::VARIANT)` dispatch
arms for the int_*/float_*/ptr_* record families with a
`regular_record_table!` macro in arith.rs. The macro generates
`dispatch_regular_record`, which `handle` consults before its per-opname
match; a Some result stands in for the arm that previously lived in the
match. The int_same_as/i>i dormant forward-prep arm joins the table too;
it stays absent from the codewriter runtime set (rewrite_op_same_as
strips same_as before assembly).

t3_audit_opname_gap_inventory now scans arith.rs alongside mod.rs so the
relocated arm literals still count as handled. New
regular_record_table_is_the_sole_dispatcher asserts the table keys are
unique, are runtime opnames (except the dormant same_as), and no longer
appear as dead arms in mod.rs.

Assisted-by: Claude
@github-actions

Copy link
Copy Markdown

🤖 Codex parity review

Static analysis of this diff vs the local RPython/PyPy sources (commit bbfa9ea).
Updated: 2026-07-19T13:03:30.751Z

Files in the reviewed diff
pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/heapcache_ops.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/resume_snapshot.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/vable_ops.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/vstack_mirror.rs

Codex did not produce a report (exit 1). Last log lines:

list is appended below, use that instead of re-deriving it). Findings under
sections 1 and 2 MUST cite our-side files from that list; a divergence in any
file NOT in the list is by definition not introduced by this patch — report
it under section 3 instead, or omit it. Verify every section-1/2 citation
against the list before finalizing the report.

---

Output format requirements (so the report can be parsed mechanically and
posted/triaged automatically). Use these four headings VERBATIM, in this
order, and nothing else at heading level 2:

## 1. Regressions to PyPy parity introduced by this patch
## 2. Other mismatches introduced by this patch
## 3. Pre-existing mismatches (already present before this patch)
## 4. Structural adaptations

Under each heading, list every finding as a bullet. For each finding cite the
concrete `our_file.rs:line ↔ rpython_or_pypy_file.py:line` pair and quote the
divergence concisely. If a section has no findings, still emit the heading
followed by a single line `None.` so all four sections are always present.
Do not modify any files; produce the report only.

Authoritative changed-file list for this patch (git diff upstream/main --name-only):
pyre/pyre-jit-trace/src/jitcode_dispatch/arith.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/branch.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/bridge_subwalk.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/diag.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/heapcache_ops.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/mod.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/resume_snapshot.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/tests.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/vable_ops.rs
pyre/pyre-jit-trace/src/jitcode_dispatch/vstack_mirror.rs
warning: Codex could not find bubblewrap on PATH. Install bubblewrap with your OS package manager. See the sandbox prerequisites: https://developers.openai.com/codex/concepts/sandboxing#prerequisites. Codex will use the bundled bubblewrap in the meantime.
2026-07-19T13:03:29.618834Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.672554Z ERROR rmcp::transport::worker: worker quit with fatal: Transport channel closed, when UnexpectedServerResponse("HTTP 401: {\n  \"error\": {\n    \"message\": \"Provided authentication token is expired. Please try signing in again.\",\n    \"type\": null,\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401\n}")
2026-07-19T13:03:29.692975Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.750421Z ERROR rmcp::transport::worker: worker quit with fatal: Transport channel closed, when UnexpectedServerResponse("HTTP 401: {\n  \"error\": {\n    \"message\": \"Provided authentication token is expired. Please try signing in again.\",\n    \"type\": null,\n    \"code\": \"token_expired\",\n    \"param\": null\n  },\n  \"status\": 401\n}")
2026-07-19T13:03:29.787229Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.798799Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.810702Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.936650Z ERROR codex_api::endpoint::responses_websocket: failed to connect to websocket: HTTP error: 401 Unauthorized, url: wss://chatgpt.com/backend-api/codex/responses
2026-07-19T13:03:29.962987Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.975103Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:29.987520Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.093865Z ERROR codex_api::endpoint::responses_websocket: failed to connect to websocket: HTTP error: 401 Unauthorized, url: wss://chatgpt.com/backend-api/codex/responses
2026-07-19T13:03:30.109557Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.214361Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.311117Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.323107Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.336015Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.443503Z ERROR codex_api::endpoint::responses_websocket: failed to connect to websocket: HTTP error: 401 Unauthorized, url: wss://chatgpt.com/backend-api/codex/responses
2026-07-19T13:03:30.469237Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.481416Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.493538Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.596359Z ERROR codex_api::endpoint::responses_websocket: failed to connect to websocket: HTTP error: 401 Unauthorized, url: wss://chatgpt.com/backend-api/codex/responses
ERROR: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
ERROR: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.
2026-07-19T13:03:30.614121Z ERROR codex_login::auth::manager: Failed to refresh token: Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.

@youknowone
youknowone merged commit de61932 into main Jul 19, 2026
30 of 31 checks passed
@youknowone
youknowone deleted the jitcode branch July 19, 2026 14:13
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