Circuit component and VM — cherry-pick source (re-opening #66)#168
Closed
Roger-luo wants to merge 104 commits into
Closed
Circuit component and VM — cherry-pick source (re-opening #66)#168Roger-luo wants to merge 104 commits into
Roger-luo wants to merge 104 commits into
Conversation
stellarscope to support generics
This commit depends on upstream fixes in vihaco-cpu and requires stellarscope#59 to be merged
… booleans to stack
|
Contributor
There was a problem hiding this comment.
Pull request overview
Re-opens the original “circuit component and VM” change set (from reverted PR #66) as a cherry-pick source, adding a .sst/.ssb-driven PPVM virtual machine layer (ppvm-vihaco), a CLI (ppvm-cli), and supporting runtime + Python API surface (notably the RotXY / r gate and tableau expectation/trace support).
Changes:
- Introduces a vihaco-backed circuit ISA + VM runtime (
vihaco-circuit-isa,ppvm-vihaco) with observable parsing, bytecode format, shot execution, and extensive.sstfixtures. - Adds
ppvm-clifor parsing/dumping/running/debugging.sst/.ssbprograms and updates docs/skill references. - Extends core simulation APIs with
RotXY(r) across traits/tableau/PauliSum and wires it through Python bindings and tests.
Reviewed changes
Copilot reviewed 61 out of 64 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/ppvm-usage/SKILL.md | Documents .sst usage, backend selection, and trace/truncate semantics; updates crate list. |
| prek.toml | Adjusts hawkeye pre-commit hook invocation. |
| ppvm-python/test/test_basics.py | Adds PauliSum tests for the new r gate behavior. |
| ppvm-python/test/generalized_tableau/test_basics.py | Adds GeneralizedTableau tests for r equivalence to rx/ry. |
| ppvm-python/src/ppvm/mixins.py | Exposes r in Python mixins (tableau + PauliSum variants) and tweaks rxx docstring. |
| crates/vihaco-circuit-isa/src/lib.rs | Defines circuit instruction set + message shapes + codec/parse tests. |
| crates/vihaco-circuit-isa/Cargo.toml | New crate manifest for the circuit ISA. |
| crates/ppvm-vihaco/tests/tableau_ry_z_trace.sst | Adds tableau trace fixture for RY and Z expectation. |
| crates/ppvm-vihaco/tests/tableau_ghz_xxx_trace.sst | Adds tableau GHZ trace fixture. |
| crates/ppvm-vihaco/tests/tableau_bell_trace.sst | Adds tableau Bell trace fixture. |
| crates/ppvm-vihaco/tests/sst_fixtures.rs | End-to-end fixture runner for .sst/.ssb round-trips and backend agreement checks. |
| crates/ppvm-vihaco/tests/rotxy.sst | Fixture for circuit.r behavior (axis-angle rotation). |
| crates/ppvm-vihaco/tests/paulisum_trotter_truncate.sst | PauliSum trotter + explicit truncate fixture. |
| crates/ppvm-vihaco/tests/paulisum_ry_z_trace.sst | PauliSum Heisenberg RY trace fixture. |
| crates/ppvm-vihaco/tests/paulisum_multi_term_trace.sst | Multi-term observable parsing + trace fixture. |
| crates/ppvm-vihaco/tests/paulisum_measure_error.sst | Fixture asserting measure is rejected on PauliSum backend. |
| crates/ppvm-vihaco/tests/paulisum_ghz_xxx_trace.sst | PauliSum GHZ trace fixture (Heisenberg-reversed gate order). |
| crates/ppvm-vihaco/tests/paulisum_bell_trace.sst | PauliSum Bell ZZ trace fixture. |
| crates/ppvm-vihaco/tests/lossy_paulisum_loss_trace.sst | LossyPauliSum loss+trace fixture with Rust-side reference comparison. |
| crates/ppvm-vihaco/tests/hello_circuit.sst | Minimal hello-world circuit fixture. |
| crates/ppvm-vihaco/tests/function_call.sst | Function call fixture for call/return (or halt) behavior. |
| crates/ppvm-vihaco/tests/function_call_ret.sst | Function call + branching fixture (currently documented as “aspirational”). |
| crates/ppvm-vihaco/tests/function_call_branch_both.sst | Branching on tri-state measurement outcome fixture. |
| crates/ppvm-vihaco/tests/branch_on_outcome.sst | Conditional branching fixture driven by measurement. |
| crates/ppvm-vihaco/tests/branch_on_outcome_x.sst | Deterministic branch fixture (X-prepared). |
| crates/ppvm-vihaco/tests/bell.sst | Basic Bell measurement fixture. |
| crates/ppvm-vihaco/src/syntax.rs | Parser + resolver for PPVM modules, headers, labels/branches/calls, and circuit-prefixed ops. |
| crates/ppvm-vihaco/src/shots.rs | Adds shot runner (serial/parallel) with per-shot seeding and thread-pool sizing. |
| crates/ppvm-vihaco/src/observable.rs | Implements Pauli-sum header string parsing into (word, coeff) terms. |
| crates/ppvm-vihaco/src/measurements.rs | Defines measurement/trace observers and effect union for circuit outcomes. |
| crates/ppvm-vihaco/src/lib.rs | Public API for parsing/compiling/running/dumping .sst and loading modules/bytecode. |
| crates/ppvm-vihaco/src/component.rs | Circuit component dispatch for Tableau/PauliSum/LossyPauliSum (including trace/truncate semantics). |
| crates/ppvm-vihaco/src/bytecode.rs | .ssb framing format with versioning, device-info serialization, and tests. |
| crates/ppvm-vihaco/Cargo.toml | New crate manifest (optional rayon feature; links to tableau/paulisum and ISA). |
| crates/ppvm-traits/src/traits/mod.rs | Re-exports RotXY trait. |
| crates/ppvm-traits/src/traits/branch/rot1.rs | Adds RotXY trait definition to trait system. |
| crates/ppvm-traits/src/traits/branch/mod.rs | Re-exports RotXY from branch module. |
| crates/ppvm-tableau/src/lib.rs | Exposes new expectation/trace module. |
| crates/ppvm-tableau/src/gates/rot1.rs | Implements RotXY for GeneralizedTableau and adds tests. |
| crates/ppvm-tableau/src/expectation.rs | Adds tableau expectation value + pattern trace implementation and tests. |
| crates/ppvm-tableau/src/data.rs | Adds reset helpers and adjusts rayon parallelism guard; adds PauliWord decomposition helper. |
| crates/ppvm-tableau/Cargo.toml | Adds ppvm-pauli-word dependency for pattern/word support. |
| crates/ppvm-runtime/src/traits/branch/rot1.rs | Adds runtime-side RotXY trait definition (new file). |
| crates/ppvm-python-native/src/interface.rs | Exposes r on the PyO3 interface (with optional truncation). |
| crates/ppvm-python-native/src/interface_tableau.rs | Exposes r on tableau PyO3 interface. |
| crates/ppvm-python-native/ppvm_python_native.pyi | Adds r to type stubs for PauliSum and GeneralizedTableau. |
| crates/ppvm-pauli-sum/src/sum/rot1.rs | Implements RotXY for PauliSum and adds tests for axis-angle equivalence. |
| crates/ppvm-cli/src/main.rs | Adds ppvm CLI entrypoint with parse/dump/run/debug subcommands and global thread sizing. |
| crates/ppvm-cli/src/commands.rs | Implements CLI commands, formatting, and debugger loop + tests. |
| crates/ppvm-cli/README.md | Documents CLI installation and usage. |
| crates/ppvm-cli/examples/simple_loop.sst | Example .sst loop with breakpoint. |
| crates/ppvm-cli/examples/loop_feedforward.sst | Example .sst loop + measurement feed-forward. |
| crates/ppvm-cli/examples/loop_feedforward.pseudo | Pseudocode companion for the feed-forward example. |
| crates/ppvm-cli/examples/heisenberg_zz.sst | Example .sst for PauliSum Heisenberg trace with multi-term observable. |
| crates/ppvm-cli/examples/ghz.sst | Example .sst GHZ preparation and measurement. |
| crates/ppvm-cli/examples/bit_flip_correction.sst | Example .sst implementing a bit-flip correction flow using branching. |
| crates/ppvm-cli/Cargo.toml | New CLI crate manifest. |
| Cargo.toml | Adds new workspace members (ppvm-vihaco, ppvm-cli, vihaco-circuit-isa). |
| AGENTS.md | Updates skill summary to mention .sst and ppvm-cli. |
| .gitignore | Ignores debug/ directory. |
| .github/workflows/ci.yml | Excludes ppvm-cli from wasm build step; updates wasm build comments. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+93
to
+97
| // Term: coefficient [*] word | bare word. | ||
| let term_with_coeff = coefficient | ||
| .then_ignore(just('*').padded().or_not()) | ||
| .then(pauli_word) | ||
| .map(|(c, w)| (w, c)); |
Comment on lines
+4
to
+8
| // Jump into the helper, which finishes the program with `halt`. | ||
| // Using `halt` instead of `ret` from the callee avoids depending on | ||
| // vihaco-cpu restoring a return PC, which it doesn't track today. | ||
| call 0, @run_circuit | ||
| ret |
| const.u64 1 | ||
| circuit.measure | ||
|
|
||
| ret 1 |
Comment on lines
+3
to
+5
| // TODO: aspirational — depends on `ret <n>` restoring the caller's PC and | ||
| // leaving the top `n` values on the caller's stack. The runtime doesn't do | ||
| // this today (Frame has no return_pc), so this fixture currently fails. |
Comment on lines
+88
to
+90
| # Installed via mise in CI (see mise.toml), but called directly here so local | ||
| # installs on PATH also work. Run `hawkeye format` manually to apply headers to | ||
| # new files. |
This was referenced Jul 8, 2026
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of splitting #168 into small, focused PRs. Full stack (independent items may merge in any relative order; dependents wait for their base): 1. **single-qubit rotations (this PR)** → `main` 2. core tableau expectation/reset (`feat/tableau-expectation-reset`) → `main` 3. native `.pyi` type stubs (`feat/native-pyi-stubs`) → **this PR** (declares the native `r` added here) 4. vihaco-circuit-isa (#169) → `main` 5. circuit component (`david/42.2-circuit-component`) → #169 6. composite (`david/42.3-composite`) → #5 7. CLI + TUI (#166) → #6 Items 1, 2, and 4 are mutually independent off `main`. ## Summary Adds the `RotXY` trait to `ppvm-traits` and implements it for both backends (`ppvm-tableau`, `ppvm-pauli-sum`), plus the `r(...)` Python binding on the native PauliSum / tableau classes and the `RotationsMixin` / `TruncatingRotationsMixin` wrappers. `RotXY` is a single-qubit rotation about an arbitrary axis in the X/Y plane: ``` R(axis_angle, θ) = exp(-i θ/2 · (cos(axis_angle)·X + sin(axis_angle)·Y)) = RZ(axis_angle)·RX(θ)·RZ(−axis_angle) ``` Pure addition alongside the existing `RotationOne` (RX/RY/RZ) rotations; no new module wiring. Like `u3`, `r` is single-qubit (scalar `addr0`), not batched over `targets`. ## Provenance Snapshotted from the tip of #168 (not cherry-picked); the R gate is a prerequisite for the circuit-component backends there. ## Testing `cargo test -p ppvm-traits -p ppvm-tableau -p ppvm-pauli-sum` green (incl. `test_rx/ry/rz/r`). Python: `maturin develop` + `pytest test/test_basics.py test/generalized_tableau/test_basics.py` → 37 passed. prek hooks (fmt, check, clippy, machete, ruff, ty, license) all pass. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of splitting #168 into small, focused PRs. Full stack (independent items may merge in any relative order; dependents wait for their base): 1. single-qubit rotations (#170) → `main` 2. **core tableau expectation/reset (this PR)** → `main` 3. native `.pyi` type stubs (`feat/native-pyi-stubs`) → #170 4. vihaco-circuit-isa (#169) → `main` 5. circuit component (`david/42.2-circuit-component`) → #169 6. composite (`david/42.3-composite`) → #5 7. CLI + TUI (#166) → #6 Items 1, 2, and 4 are mutually independent off `main`. ## Summary Adds `expectation.rs` for `GeneralizedTableau`: - `expectation` — single-Pauli ⟨ψ|P|ψ⟩ for a `PauliWord`, conjugating P through the tableau and overlapping with the sparse coefficient vector. - `trace` — Σ over Paulis matching a `PauliPattern`. Supporting changes in `data.rs`: - `compute_decomposition_word` — multi-qubit conjugation used by `expectation`. - `reset_all` on both `Tableau` and `GeneralizedTableau` — reinitialise to |0…0⟩, clearing coefficients and loss state (refactors `new` via a shared `new_data` helper). - the rayon-nesting guard on the coefficient path (avoids nesting rayon inside shot-level parallelism; a no-op on the single-shot path). `lib.rs` gains `pub mod expectation`; `Cargo.toml` gains a `ppvm-pauli-word` dependency. Pure core addition, snapshotted from #168. ## Testing `cargo test -p ppvm-tableau` green (12 expectation tests + reset/noise). prek hooks all pass. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
david-pl
added a commit
that referenced
this pull request
Jul 8, 2026
## Merge order Part of the #168 split. **Stacked on #170** (base branch `feat/single-qubit-rotations`) because this stub file declares the native `r` binding that #170 adds. Merge #170 first, then this. Full stack: single-qubit rotations (#170) → **this** ; core tableau expectation/reset (`feat/tableau-expectation-reset`) → `main` ; vihaco-circuit-isa (#169) → `main` ; then circuit component → composite → CLI/TUI (#166). ## Summary Adds `ppvm_python_native.pyi` — the first type-stub file for the compiled `ppvm._core` module (none exists on `main`). It declares the macro-generated concrete classes (`PauliSumIndexMapFxHash{0..15}`, `PauliSumLossIndexMapFxHash{0..15}`, the `GeneralizedTableau{N}` family, `StimProgram`) via synthetic `_PauliSumBase` / `_PauliSumLossBase` / `_GeneralizedTableauBase` bases that hold the shared method signatures once. Pure additive typing surface; no runtime effect. Split out of #170 because the block covers the whole module — only `r` is new API; the rest describe pre-existing bindings. ## Provenance Snapshotted from the tip of #168. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jul 8, 2026
Roger-luo
pushed a commit
that referenced
this pull request
Jul 13, 2026
## Merge order This is part of splitting #168 (`david/42-circuit-component`) into small, focused PRs. Full stack, in merge order: 1. **core: single-qubit rotations** → `main` 2. **core: Pauli trace + reset** → `main` 3. **vihaco-circuit-isa (this PR, #169)** → `main` 4. circuit component (`david/42.2-circuit-component`) → this branch 5. composite (`david/42.3-composite`) → the `42.2` branch 6. CLI + TUI (#166) → the `42.3` branch This PR is **independent** of items 1–2 and can merge in any order relative to them. It is the **base branch for the vihaco-specific follow-ups** (items 4–5), which target this branch rather than `main`. ## Summary Adds the leaf `vihaco-circuit-isa` crate — the `CircuitInstruction` enum plus its `CircuitEffect` / `CircuitMessage` companions — as a pure workspace addition (one new crate directory + one `members` line). - **Leaf crate:** nothing else in the workspace depends on it yet, so it cannot regress existing code. - **External deps only:** `chumsky`, `eyre`, `smallvec`, and the public `vihaco` / `vihaco-parser` / `vihaco-parser-core` at `0.1.1`. ## Provenance Snapshotted from the tip of #168 rather than cherry-picked. The crate's early history pointed at a local-path `vihaco 0.1.0` checkout and only later moved to the public `0.1.1` crates; taking the final snapshot carries the public deps and drops that churn. ## Testing `cargo build -p vihaco-circuit-isa` compiles against public `vihaco 0.1.1`. prek hooks (fmt, check, clippy, machete, license header) all pass. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Roger-luo
added a commit
that referenced
this pull request
Jul 13, 2026
## Merge order Part of the #168 split. This PR targets **#169** (`david/42.1-vihaco-isa`), not `main`, and stacks on the core prerequisites: 1. RotXY / R gate (#170) → `main` ✅ merged 2. tableau expectation/reset (#172) → `main` ✅ merged 3. vihaco-circuit-isa (#169) → `main` (open; has `main` merged in, so it carries #170 + #172) 4. native `.pyi` stubs (#171) → `main` (open; independent of this line) 5. **circuit component (this PR)** → #169 6. composite (`david/42.3-composite`) → this PR 7. CLI + TUI (#166) → #6 ## Summary Introduces the `ppvm-vihaco` crate with just the **circuit component** slice — the piece that dispatches gates to a backend. The composite machine that drives it (VM, bytecode, syntax, shots) is the next PR. | File | What | |------|------| | `component.rs` | `Circuit` — dispatches `CircuitInstruction`s to a tableau / PauliSum / lossy-PauliSum backend, emitting measurement + trace effects (incl. the R gate and trace/reset, now that #170/#172 are in `main`) | | `measurements.rs` | measurement / trace effect + observer types | | `device_info.rs` | `PPVM_MAGIC`, `BackendKind`, `PPVMDeviceInfo` — **relocated** out of the composite so the component compiles standalone; the composite PR imports them from here | | `lib.rs` | component-only module wiring; composite-driven `load`/`run`/`dump`/`parse` helpers come with the composite | ## Notes - **`device_info.rs`**: the whole `PPVM_MAGIC` + `BackendKind` + `PPVMDeviceInfo` cluster moved (the struct can't compile without the other two). In #5, `composite.rs` imports these instead of defining them. - **machete ignore** for `chumsky` + `vihaco-parser-core` — pulled in only via the `vihaco_parser::Parse` derive on `BackendKind` (mirrors the isa crate). ## Testing `cargo test -p ppvm-vihaco` — 2 smoke tests (single-qubit flip + CNOT propagation through the component's dispatch). Fuller integration coverage arrives with the composite's `.sst` fixtures. Full workspace builds; clippy + machete clean. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Xiu-zhe (Roger) Luo <rluo@quera.com>
david-pl
added a commit
that referenced
this pull request
Jul 14, 2026
## Merge order Part of the #168 split. This PR targets **#173** (`david/42.2-circuit-component`) and sits at the top of the vihaco line: 1. RotXY / R gate (#170) → `main` ✅ merged 2. tableau expectation/reset (#172) → `main` ✅ merged 3. vihaco-circuit-isa (#169) → `main` (open; carries #170 + #172 via a `main` merge) 4. native `.pyi` stubs (#171) → `main` (open; independent) 5. circuit component (#173) → #169 6. **composite machine + VM (this PR)** → #173 7. CLI + TUI (#166) → this PR ## Summary Completes the `ppvm-vihaco` crate on top of the circuit component (#173) — the composite machine that drives it plus the surrounding VM. | File | What | |------|------| | `composite.rs` | the `PPVM` composite: vihaco machine (CPU + program loader) driving the circuit component, measurement/trace observers, backend selection from the device header, reset, single-instruction stepping | | `syntax.rs` | `.sst` header parse / lower (`PPVMHeader`, `PPVMResolver`) | | `bytecode.rs` | `.ssb` bytecode emit / load (magic-tagged) | | `observable.rs` | observable-header parsing for the PauliSum backends | | `shots.rs` | multi-shot execution (serial + optional `rayon`) | | `lib.rs` | full module wiring + `load`/`run`/`dump`/`compile`/`parse` helpers + `PPVMModule` | | `Cargo.toml` | adds `vihaco-cpu`, `log`, optional `rayon` feature | | `tests/*.sst` + `sst_fixtures.rs` | 28 integration fixtures | ## `device_info` relocation resolves here `composite.rs` no longer defines `PPVM_MAGIC` / `BackendKind` / `PPVMDeviceInfo` — it imports them from `device_info` (introduced in #173) and `pub use`-re-exports them, so the existing `crate::composite::{…}` paths in `lib.rs` / `bytecode.rs` / `syntax.rs` keep resolving with no other edits. The machete-ignore added in #173 is dropped here — the full crate uses `chumsky` / `vihaco-parser-core` directly. ## Testing `cargo test -p ppvm-vihaco` — **111 unit + 28 integration** tests, green with and without `--features rayon`. Full workspace builds; clippy + machete clean. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
david-pl
added a commit
that referenced
this pull request
Jul 14, 2026
Extract the `ppvm-cli` crate (the `ppvm` binary) from #168 onto the composite. This is the base CLI — clap-based `run` / `dump` / `parse` / `debug` subcommands over `ppvm-vihaco` — without the ratatui TUI (that lands in the follow-up TUI PR, which modifies this crate). `ppvm-cli` was part of #168's implementation but had no extraction step of its own in the split, so it slots in here between the composite and the TUI PR. - Depends on `ppvm-vihaco` (with `rayon`), `clap`, `eyre`; ships example `.sst` programs. - Excluded from the wasm32 CI build (terminal binary, forces `rayon`) — mirrors #168's exclusion; the reusable engine stays covered via the library crates. Tests: `cargo test -p ppvm-cli` — 23 pass; `ppvm run examples/ghz.sst` works. clippy + machete clean; `ppvm-vihaco` still builds for wasm32. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
david-pl
added a commit
that referenced
this pull request
Jul 14, 2026
## Merge order Part of the #168 split. This PR targets **#174** (`david/42.3-composite`) and adds the CLI binary the TUI PR builds on: 1. RotXY / R gate (#170) → `main` ✅ merged 2. tableau expectation/reset (#172) → `main` ✅ merged 3. vihaco-circuit-isa (#169) → `main` (open) 4. native `.pyi` stubs (#171) → `main` (open; independent) 5. circuit component (#173) → #169 6. composite machine + VM (#174) → #173 7. **ppvm-cli binary (this PR)** → #174 8. ratatui TUI (#166) → this PR ## Summary Extracts the `ppvm-cli` crate — the `ppvm` binary — from #168 onto the composite. This is the **base CLI without the TUI**: clap-based `run` / `dump` / `parse` / `debug` subcommands over `ppvm-vihaco`, plus example `.sst` programs. The ratatui TUI that layers on top of it is the follow-up PR (#166), which modifies this crate. `ppvm-cli` was part of #168's implementation but had no extraction step of its own — the original split plan conflated it with the TUI PR. It slots in here between the composite and the TUI. - Depends on `ppvm-vihaco` (with `rayon`), `clap`, `eyre`. - **Excluded from the wasm32 CI build** (terminal binary, forces `rayon`), mirroring #168's exclusion — `ppvm-vihaco` itself still builds for wasm, so only `ppvm-cli` is excluded; the reusable engine stays covered. ## Testing `cargo test -p ppvm-cli` — 23 pass. `ppvm run examples/ghz.sst` runs. clippy + machete clean; full workspace builds; `ppvm-vihaco` still builds for `wasm32-unknown-unknown`. --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hey @david-pl — heads up on the plan here 👇
What happened: #66 ("Implement circuit component and vm") was squash-merged into
mainbut caused repeated merge-conflict churn, so it was reverted in #167 (already merged —mainis back to its pre-#66 state). When #66 merged, its branch was auto-deleted; I have restoreddavid/42-circuit-componentwith all 104 original commits intact, and this PR re-exposes them.The ask: rather than re-landing this as one big commit, lets cherry-pick the changes into
mainin small, focused PRs. This PR is not meant to be merged wholesale — merging it as-is would just re-introduce the same conflict churn that forced the revert. Please use it as the source to pull individual pieces from.How to use it:
david/42-circuit-componentinto targeted branches and open small PRs againstmain.Original PR: #66
Revert PR: #167 (merged)
🤖 Generated with Claude Code