Repository navigation
vscode: prove a file and manage proof jobs from the editor - #519
Merged
Merged
Conversation
"Inference: Prove This File" compiles the open .inf in proof mode with the installed toolchain and submits the generated .v to the Inference proof server. Before compiling it finds the infc that `infs build` will spawn (the doctor's "Resolved infc"), compares its --commit-hash and --abi-version with the compiler the server accepts (GET /api/v1/meta, acceptedToolchain), and refuses a mismatch before anything is uploaded, offering to install the accepted release when it is one. The build runs in the file's folder with INFC_PATH pinned to the checked binary; the generated .v is checked for proof holes and the upload limit and submitted under a content-derived idempotency key (the portal's), so the same content returns the same job. A Proof Jobs view lists the account's jobs with a status filter and older pages. A job panel follows a run live over SSE: a phase ribbon, obligations, the prover's activity as readable lines, the independent verifier's verdict and kernel-reported assumptions, and the artifacts, which open read-only after a SHA-256 check. A completed proof can be diffed against its input, and the exportable certificate opens in the portal, which keeps one implementation of the claim rules. Jobs can be cancelled, run again and deleted. The API client, SSE client, detail renderer and their 85 tests move here from the proof server's repository (Inferara/inference-ai-prover, editors/vscode), extended with meta/me/paging/delete/artifact calls and a 64 MiB artifact cap. API keys live in secret storage, per server, checked against /api/v1/me when set. inference.prover.serverUrl selects the server: HTTPS, or plain HTTP on localhost only. Every effect in the prove flow is injected, so each gate is unit-tested; an end-to-end test runs it with fake infs/infc scripts against a local HTTP server. The README's privacy section now says what is uploaded and to whom. A publish workflow releases the extension to the VS Code Marketplace and Open VSX from a vscode-v<version> tag. It builds through the existing extension workflow (now also reusable, and uploading the checked .vsix), so the published bytes are the ones those checks passed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
- An upload no longer follows a redirect to another origin. Credentials were already dropped there, but the body, the whole Rocq file, was sent on; any request with a body now refuses a cross-origin redirect. - Cancelling or timing out a build stops the whole process tree. infs spawns infc, which kept the output pipes open, so the wait for the build could hang after infs alone was killed. The build runs in its own process group on POSIX (taskkill /T on Windows). - A cancel that arrives after the build no longer uploads: the prove flow checks it right before submitting. - Changing the proof server or the key resets the jobs list and closes open job panels, and a reply from the previous server is dropped rather than merged into the new list. - A finished job's panel reads the events past its cursor, so a panel that was polling when the job ended still shows the final events, and a panel opened afterwards still gets the whole history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The portal routes by hash, so /job/<id>/certificate loaded the portal's fallback route (the jobs list) instead of the certificate. Links now use /#/job/<id>/certificate, which the portal's login redirect also keeps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The server stores every input artifact as input.v, so a resubmitted job was listed as input.v instead of the file it was first submitted as. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0xGeorgii
added a commit
that referenced
this pull request
Oct 9, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 9, 2026
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.
Why
The journey from Inference source to a reviewed proof result should work from VS Code: compile locally, submit, then watch, review and manage proof jobs. Until now that took a terminal, the web portal, and a separate unpublished extension in the proof server's repository.
What users get
.inf, or the command palette):infcthatinfs buildwill spawn (from the doctor'sResolved infc).--commit-hashand--abi-versionwith the compiler the proof server accepts (GET /api/v1/meta→acceptedToolchain). A mismatch is refused before anything is uploaded, with an offer to install the accepted release when there is one.infs build <file>.inf -vin the file's folder, withINFC_PATHpinned to the checked binary. The output isout/<file>.v..vfor proof holes and the upload limit, then submits it under the portal's content-derived idempotency key..v.refuted), time budget and deadline;/api/v1/mewhen set. A Proof Server group appears in the Configuration view. The new settinginference.prover.serverUrlmust be HTTPS; plain HTTP is accepted only forlocalhost. Before the first upload to a server, the extension shows a notice once.Where the code comes from
Inferara/inference-ai-prover/editors/vscode. That extension was never published and will be retired once this ships.meta,me, paging/filtering,delete, artifact listing, and a 64 MiB artifact cap.src/prover/proveFlow.ts) injects every effect, so each gate is unit-tested.acceptedToolchainto/meta. Against an older server, Prove asks before compiling unchecked.Release
.github/workflows/vscode_extension_publish.ymlpublishes from avscode-v<version>tag. It builds throughvscode_extension.yml, which is now alsoworkflow_calland uploads the checked.vsix, so the published bytes are the bytes those checks passed.VSCE_PAT) and Open VSX (OVSX_PAT) from themarketplaceenvironment, then attaches the.vsixto a GitHub release.marketplaceenvironment with required reviewers;VSCE_PAT(Marketplace > Manage for theinference-langpublisher);inference-langnamespace on Open VSX and addOVSX_PAT;versioninpackage.json.Risk and limits
infc. The server currently pinsd71a9c3e(ABI 1.3), and adopting v0.0.6 is planned after the TAITRONICS booth. Submitting a.vworks today.Verification
All of these ran in a
node:24container.npx tsc --noEmit -p .: clean.npm test: 433 passed: 298 existing, 79 moved (the moved suite's 6 manifest tests are replaced by new ones for this package), and 56 new. The new tests cover:infs/infcscripts and a local HTTP server;whenclause against the context value for all 15 statuses. That test caught a/\.proof/regex matching every job.npm run "test syntax": 93 passed.npm run package: the 11 expected files and no source map.rhysd/actionlint: clean on both workflows.infs/infc(d71a9c3e) against a stub server, the flow resolvedinfcthroughinfs doctor, matched it, builtfixtures/aerospace/telemetry_limit.infand uploaded a.vwhose SHA-256 is7796bcb9…. That is exactly the canonical output recorded in the prover'scontracts/infc.lock.json. The same binary was refused against a v0.0.6/ABI 1.8 server.🤖 Generated with Claude Code

Confidence Score: 5/5
The change since the last review appears safe to merge.Diagram
%%{init: {'theme': 'neutral'}}%% flowchart LR Source["Inference file"] --> Check["Check compiler identity"] Check --> Build["Compile locally"] Build --> Upload["Check and upload Rocq file"] Rocq["Existing Rocq file"] --> Upload Upload --> Job["Proof job"] Job --> Watch["Follow events and status"] Watch --> Review["Review verdict and artifacts"] Review --> Again["Run again with original filename"] Again --> JobReviews (5) · Last reviewed commit: "vscode: keep the job's filename when run..." · Reviewed by Greptile