PR 2/3: Rust application framework (PyO3) - #97
Draft
ericeil wants to merge 1 commit into
Draft
Conversation
ericeil
force-pushed
the
eric/rust
branch
3 times, most recently
from
July 23, 2026 19:58
4bbeb08 to
7ea1a77
Compare
ericeil
force-pushed
the
eric/ecosystem
branch
2 times, most recently
from
July 23, 2026 20:15
833557a to
fe84bae
Compare
ericeil
force-pushed
the
eric/rust
branch
5 times, most recently
from
July 24, 2026 00:02
75b0bec to
0671f74
Compare
The generic Rust-wheel host (composer/rustapp) + the rust workspace (autoprover-sdk
ABI/export_app! macro, example-app/echoprover), consuming the command-sandbox seam
already upstream (via the `none` passthrough; SandboxConfig.backend_spec ->
{argv_prefix, timeout_s}). Includes composer/spec/solana/build.py (workspace prep),
the rust prompt templates, and the report-layer support the host needs
(report/{schema,render,collect}.py: the ReportBackend set incl. "crucible", the
per-backend outcome_label vocabulary, and Verdict.message diagnostics).
Cross-cutting intermediate forms (finalized in PR3):
- rust/Cargo.toml: workspace members omit crucible-app (added in PR3).
- pyproject.toml / uv.lock: the `apps` group + [tool.uv.sources] omit crucible_app
(its crate lives in rust/crucible-app, which lands in PR3), so `uv sync`/`uv run`
resolve here; PR3 re-adds it.
- rustapp/adapter.py: RustFormalizer casts the backend tag directly; PR3 restores the
validating as_report_backend.
- rust/.gitignore ignores rust/Cargo.lock; the lockfile is untracked here.
Gate: test_rustapp (echoprover decider round-trip; sandbox passthrough) -- 15 passed.
CI pyright (composer/ analyzer sanity_analyzer certora_autosetup) -- 0 errors.
test_solana_gate lives here (imports composer.rustapp.frontend), not PR1.
Stacked-PR 2 of 3 (off eric/ecosystem); see docs/pr-split-plan.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.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.
PR 2 of 3 — Rust application framework (PyO3)
Part of the stacked split of
eric/crucible.Stack:
master→eric/ecosystem→eric/rust→eric/crucible-app.Base:
eric/ecosystem(PR #96) — review that first.What this adds
The generic Rust-wheel host + the Rust workspace, built on the command-sandbox seam that already
landed upstream (#73), consumed here via the
nonepassthrough provider (no confinement yet):composer/rustapp/*— the PyO3 wheel host (author→compile→judge→validate loop, descriptor, IoC)rust/workspace:autoprover-sdk(the ABI +export_app!macro) andexample-app/echoprovercomposer/spec/solana/build.py— Rust/Anchor workspace prep for the Solana front halfpyproject.toml/uv.lockappsgroup + wheel path depsrust-applications.md,rust-backend-api.md,rust-formalization-backends.md,rust-ioc-loop.md,rust-pure-app.md,formalization-abstraction.mdSandboxConfig.backend_specin its master shape ({argv_prefix, timeout_s}, async,config.BackendSpec); the SDK just prependsargv_prefix(seedocs/rust-backend-api.md).(The shared Rust prompt fragment
templates/rust/_failure_modes.j2lives in PR #96 alongside theSolana front half that consumes it — it is not added here.)
Cross-cutting intermediate forms (finalized in PR 3)
rust/Cargo.toml: workspace members omitcrucible-app(added in PR 3).rustapp/adapter.py:RustFormalizercasts the backend tag directly(
cast(ReportBackend, tag)); the validatingas_report_backend+ closed literal land in PR 3,once
report/schema.pyincludes"crucible".rust/.gitignorestarts ignoringrust/Cargo.lock, and the lockfile is untracked here.Verification
cargo build(autoprover-sdk, example-app, run-confined) ✓composer.rustappimports with nocrucibleleak ✓test_rustapp— 15 passed (echoprover decider round-trip; sandbox passthrough)Notes
test_solana_gatemodule lives in this PR (it importscomposer.rustapp.frontend), but thetest_scenarios/solana_vaultsample it drives lands in PR 3 — so the gate is only runnable fromthe tip of the stack. Its real-LLM run was not executed (draft).
🤖 Generated with Claude Code