Skip to content

PR 2/3: Rust application framework (PyO3) - #97

Draft
ericeil wants to merge 1 commit into
eric/ecosystemfrom
eric/rust
Draft

PR 2/3: Rust application framework (PyO3)#97
ericeil wants to merge 1 commit into
eric/ecosystemfrom
eric/rust

Conversation

@ericeil

@ericeil ericeil commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

PR 2 of 3 — Rust application framework (PyO3)

Part of the stacked split of eric/crucible.
Stack: mastereric/ecosystemeric/rusteric/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 none passthrough 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) and example-app/echoprover
  • composer/spec/solana/build.py — Rust/Anchor workspace prep for the Solana front half
  • pyproject.toml/uv.lock apps group + wheel path deps
  • Rust-framework docs: rust-applications.md, rust-backend-api.md, rust-formalization-backends.md,
    rust-ioc-loop.md, rust-pure-app.md, formalization-abstraction.md
  • Reads SandboxConfig.backend_spec in its master shape ({argv_prefix, timeout_s}, async,
    config.BackendSpec); the SDK just prepends argv_prefix (see docs/rust-backend-api.md).

(The shared Rust prompt fragment templates/rust/_failure_modes.j2 lives in PR #96 alongside the
Solana front half that consumes it — it is not added here.)

Cross-cutting intermediate forms (finalized in PR 3)

  • rust/Cargo.toml: workspace members omit crucible-app (added in PR 3).
  • rustapp/adapter.py: RustFormalizer casts the backend tag directly
    (cast(ReportBackend, tag)); the validating as_report_backend + closed literal land in PR 3,
    once report/schema.py includes "crucible".
  • rust/.gitignore starts ignoring rust/Cargo.lock, and the lockfile is untracked here.

Verification

  • cargo build (autoprover-sdk, example-app, run-confined) ✓
  • composer.rustapp imports with no crucible leak ✓
  • test_rustapp — 15 passed (echoprover decider round-trip; sandbox passthrough)

Notes

  • The test_solana_gate module lives in this PR (it imports composer.rustapp.frontend), but the
    test_scenarios/solana_vault sample it drives lands in PR 3 — so the gate is only runnable from
    the tip of the stack. Its real-LLM run was not executed (draft).

🤖 Generated with Claude Code

@ericeil
ericeil force-pushed the eric/rust branch 3 times, most recently from 4bbeb08 to 7ea1a77 Compare July 23, 2026 19:58
@ericeil
ericeil force-pushed the eric/ecosystem branch 2 times, most recently from 833557a to fe84bae Compare July 23, 2026 20:15
@ericeil
ericeil force-pushed the eric/rust branch 5 times, most recently from 75b0bec to 0671f74 Compare July 24, 2026 00:02
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>
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