fibHashMap: no Aeneas modelFor every 64-bit integer n where n ≤ 93, fib(n) returns the n-th Fibonacci number.
Found before the spec was proposed: fib(94) overflows u64. No unit test would say so.
sorry and only allowed axioms,Agents write a growing share of code. rustproof is being built to prove that the Rust your agent writes does what it is supposed to do, and to keep it proven on every commit. Python services are designed to get the same treatment: pure decisions will be ported to Rust, called through a compiled extension, and proven.
fibHashMap: no Aeneas modelFor every 64-bit integer n where n ≤ 93, fib(n) returns the n-th Fibonacci number.
Found before the spec was proposed: fib(94) overflows u64. No unit test would say so.
sorry and only allowed axioms,A Python service is designed to get the same treatment: rustproof will port its pure decisions to Rust, call them from Python through a compiled extension, and prove the Rust. By design, the proven code runs only inside the approved precondition; outside it, the original Python runs unchanged.
rustproof python candidates finds it. The agent ports it with the port-python skill, straight into the provable subset.
For integer amounts and periods that fit in 64 bits, where the period is at least one day, the days used don’t exceed it, and amount × days used fits in 64 bits, prorate returns at most the amount.
Found before the spec was proposed: prorate(100, 1, 0) divides by zero. The handler never checked.
rustproof build, the API calls the proven Rust inside the precondition and the original Python outside it.rustproof python candidates is designed to list pure, fully type-hinted spans with no I/O, no globals and no exceptions crossing the boundary..rustproof/crates/, written in the provable subset. The patch is designed to replace the Python body with a call into the extension, guarded by the approved precondition.fib(10) == 55 passes. So does fib(93). The theorem cannot hold for all of u64, and the counterexample search is designed to say why.
This is the spec review moment: the developer reads one sentence of English and chooses. Every option is legitimate; the system is designed to force the decision instead of hiding it.
u128 is good up to fib(186). Re-prove.checked_add, return Option<u64>, handle None.rustproof’s own decisions are written so that rustproof can prove them. These are the first properties we will prove. None is proven yet.
check_conclusion · a failing, counterexample or stale obligation never yields successcrates/rustproof-corePlannednext_status · a function is proven only if its spec is approved and its proof checked; a source-hash change always yields stalecrates/rustproof-corePlannedpolicy_verdict · any sorry or disallowed axiom fails policycrates/rustproof-corePlannedcan_approve · someone who is not an approver for a spec’s path can never approve itpackages/platform-core, via Python inter-opPlannedquota_decision · a run never starts over quotapackages/platform-core, via Python inter-opPlannedCode that can be proven is designed to be patched into the subset Aeneas accepts, extracted to Lean 4, given a theorem, and proven by Leanstral. By design, I/O, the network, the clock and unsafe code stay outside the boundary and are covered by tests.
When the code after an I/O call takes the result as an argument, the theorem holds for every possible response. That is stronger than any mock.
rustproof is designed to prove the patched tree, and the patched tree is what gets compiled and shipped. Proofs will be keyed to its hash, and release artifacts stamped with it.
The Lean kernel rejects every invalid proof, so proof generation can be fully automated. By design, nothing checks a spec except a person, in plain English first.
Every patch is designed to be a before/after diff in Claude Code, the PR and the dashboard. Both sides compile, so they can run on the same generated inputs. Rejecting one takes the function out of the proof boundary.
The build is designed to fail on sorry, on any axiom outside the approved set, and on any proof that relies on unchecked evaluation. Overflow checks are designed to stay on in release, so the binary matches the model.
It is designed to repair proofs on its own, propose patches for a person to merge, and escalate the rest. Changing a theorem is never on that list.
Hooks will stop the agent before it calls a broken proof done. The mod will draw rustproof’s own panes inside the terminal.
The plugin ON EVERY PRA required check on every PR and merge, and one sticky comment with spec diffs and counterexamples, planned.
GitHub integration IN THE CLOUDDesigned for proof search and repair, counterexamples, mutation testing, and a content-addressed cache of checked artifacts.
The cloud IN THE DASHBOARDWill explain why a proof fails, with the counterexample. It is designed to propose spec changes, never to apply them.
The agentInstall the Claude Code plugin coming soonWill bundle the CLI, hooks, Lean’s language server and the mod.
/rustproof:login coming soonBrowser sign-in, with sign-up in the same flow. The token is designed to live in your OS keychain.
/rustproof:init coming soonWill classify every function as provable, patchable or excluded, with the reason.
The goal: a build whose proven functions are proven against the exact code in that build.