Repository navigation
Releases: bhaskargurram-ai/proofcheck
Releases · bhaskargurram-ai/proofcheck
Release list
proofcheck v1.0.3
Fixed
- Windows:
--test-commandandtest_commandstrings are split without dropping backslashes. POSIX splitting turnedC:\Python\python.exeintoC:Pythonpython.exe, so no test command could start on Windows. - Windows: hunk ablation works with
core.autocrlf=true(the Windows default). proofcheck runs git withcore.autocrlf=false, so its worktrees hold each file exactly as committed; before, every hunk was reported as "could not reverse-apply".
Changed
- CI also runs the unit tests on macOS and Windows.
- Status is now labelled beta in the README and in the PyPI classifiers (
Development Status :: 4 - Beta), until there are confirmed outside users. Version numbering stays 1.x. - Added
CODE_OF_CONDUCT.md(Contributor Covenant 2.1),SECURITY.md,CITATION.cff, issue and pull request templates, and README sections linking the other two tools of the verification toolkit and explaining how to cite.
proofcheck v1.0.2
Changed
- The GitHub Action is listed on the Marketplace as "proofcheck PR evidence" (
proofcheckalone is reserved by an existing GitHub account). Workflows that usebhaskargurram-ai/proofcheck@v1.0.2are unaffected; only the display name changed.
proofcheck v1.0.1
Changed
- Diff evidence map: in Python files, a hunk that changes only comments,
docstrings or formatting is marked 📝 docs only and is not run. Before, it
was "not exercised" and got a "check it belongs in this PR" scope note,
which was noise on PRs that update a docstring next to a fix (seen on 2 of 5
kornia pull requests replayed through proofcheck). The summary counts code
hunks: "1/1 changed code hunk is required by the evidence (1
comment/docstring-only)". result.json and the card's data block gain a
docs_onlycount.
proofcheck v1.0.0
Published on PyPI as proofcheck-ai (pip install proofcheck-ai), because the name
proofcheck is taken there. The command, the import (import proofcheck) and the
GitHub repository keep the name proofcheck.
0.2.0 was never released; its changes are part of 1.0.0.
Added
- Rust / cargo runner.
runner = "cargo"runs changed integration tests
(<crate>/tests/*.rs) per target withcargo test -p <pkg> --test <name>
and parses libtest's stable output. Changed inline#[cfg(test)]modules
are transplanted from head into the base file with a conservative Rust lexer
(comments, raw strings, byte strings, chars vs lifetimes) and run with
--lib; ambiguous files are skipped with a note instead of guessed. A test
target that does not compile on base is reported as such ("build error").
A sharedCARGO_TARGET_DIRlets dependencies compile once across base, head
and ablation worktrees. The evidence workflow sets up the repository's Rust
toolchain and caches only in the unprivileged pull_request job. - Multi-project repositories.
[[project]]tables (name,path,
runner,test_command,setup_command,test_paths,timeout,
test_env,cargo_target_dir) run each subfolder project's tests from its
own directory; test ids are prefixed with the project name when there is
more than one.proofcheck initdetects projects (Python, Jest, cargo
workspace roots) and writes the tables. Single-project configs and results
are unchanged. - Agent: projects and Rust. The agent writes its candidates in the
project whose source the PR mainly changes ([[project]]tables), with that
project's runner, module index, test style and working directory. For cargo
projects it writes an integration test
<crate>/tests/proofcheck_agent_<variant>.rsin the crate with the most
changed.rslines, with Rust prompts (public API only,use <lib>::...), a
read-onlylist_cratestool, Rust static checks (balanced brackets, a
#[test]fn, a reference to the crate, a denylist for processes, network,
unsafe/FFI,include!/env!andenv::var) and repairs (use crate::,
top-leveluse super::, hyphenated package names).verifyre-validates the
manifest's project and directory against its own configuration, re-runs the
Rust checks, and classifies a candidate that only fails to compile on base
as weak.--runneracceptscargo; the manifest and the result'sagent
section gain additivelanguage/projectfields. The per-candidate
timeout defaults to the project's timeout for cargo (1800 s). The reusable
agent.ymlworkflow gains atimeout-minutesinput for the verify job
(default 60, was a fixed 30). - Machine-readable card data: every card ends with a
<!-- proofcheck:data {...} -->block (verdict, claims, test, ablation and
agent summaries, head SHA) built only from validated fields, with
proofcheck.carddata.parse_card_data()to read it. - End-to-end harness (
e2e/): drives real pull requests in a target
repository from scenario folders, waits for the card, checks expectations
from its data block and cleans up; a 7-scenario Python set and an offline
--localmode. Seedocs/TESTING.md. - Packaging CI: builds the sdist and wheel, runs
twine check, installs
the wheel in a fresh virtualenv and runs the CLI,initand the demo. - Agent evidence (experimental, opt-in):
proofcheck agent propose | verify | run | needed. When afixes #Nclaim has no deterministic
evidence, an LLM with read-only, git-plumbing tools (no exec, write or
network) proposes reproduction tests through a schema-validated
submit_testcall, using heterogeneous prompt variants
(reproduce-issue,exercise-diff,mimic-existing-tests, optional
localize-first), static validation and Otter-style import repair.
verify(no LLM, no secrets) runs each candidate on base and head and
classifies it asfail_to_pass,fail_to_pass_weak,pass_to_pass,
fails_on_head(inconclusive) orerror; a strong candidate upgrades the
claim to "verified (agent test)", and agent evidence never yields ❌.
Tool-use client for the Anthropic Messages API and OpenAI-compatible chat
completions with retries, budgets and token/cost accounting;[agent]
config table; card section "Agent evidence (experimental)". See
docs/AGENT.md. - Diff evidence map (hunk ablation): every non-test hunk of the PR is
reverted on its own in a temporary head worktree (git apply -R --unidiff-zero) and the fail→pass tests and behaviour-changing issue
reproducers are re-run. Hunks are required (reverting breaks the
evidence), not exercised (nothing measured depends on them) or skipped.
New files, deletions and renames are handled; binary, test and
documentation files are not ablated. Deterministic order, hunk cap
(ablation.max_hunks, 12), total time budget (ablation.time_budget_s,
300 s), per-run timeouts, a clean-worktree baseline run and guaranteed
cleanup. New card section, summary line ("3/4 changed hunks are required by
the evidence"), anunexercisedscope note, theablationkey in
result.json (strictly validated on the comment side), the[ablation]
config table andproofcheck run --ablation/--no-ablation. - Reusable workflows
evidence.yml,agent.ymlandcomment.yml
(on: workflow_call), so a repository needs only three short caller
workflows. proofcheck is installed from its own repository at
proofcheck-ref, never from the pull request. proofcheck init [--agent] [--force] [--ref]: detects the test runner
(pytest, jest, unittest) and writes the caller workflows and a commented
proofcheck.toml; refuses to overwrite existing files.proofcheck summary: renders the validated card into
$GITHUB_STEP_SUMMARY, so it is visible on fork PRs without a write token.- Verdict labels:
proofcheck comment --labelssets one of
proofcheck: verified | partial | contradicted | no evidence, creating the
label if needed and removing stale ones (idempotent). proofcheck context --pr Nreads the PR text from the API (for
workflow_runjobs).- Issue reproducers: doctest-style
>>>sessions (inpycon,doctest,
python,pyor unlabelled fences) are converted into scripts that print
each expression like the interactive prompt. release.yml: one-click releases (Actions → release → Run workflow creates
the tag), PyPI publishing with aPYPI_API_TOKENsecret or trusted
publishing, and a GitHub release from the CHANGELOG andpages.yml(deploysdocs/site/on public repositories).- Workflow security invariants are tested (
tests/test_workflows.py).
Changed
- This repository's own
proofcheck.yml,proofcheck-comment.ymland new
proofcheck-agent.ymlcall the local reusable workflows; the examples in
examples/workflows/are the output ofproofcheck init. action.yml: new commandssummary,agent-propose,agent-verify; new
inputsablation,labels,llm-*,repo-dir; the job summary is
rendered from the validated result instead ofcard.md; branding icon.docs/SECURITY_MODEL.mddescribes the three trust zones.
Fixed
- OpenAI GPT-6 models: new optional
PROOFCHECK_LLM_REASONING_EFFORT(workflow
inputllm-reasoning-effort) is sent asreasoning_effort; GPT-6 Luna and
Sol neednoneto call tools through Chat Completions. The claim extractor
no longer sendstemperaturewhen reasoning is on, which those models reject. - Test runs dropped
GIT_CONFIG_KEY_n(it looks like a secret) but kept
GIT_CONFIG_COUNT, so every git command inside the tests under check
failed. The wholeGIT_CONFIG_*family is now dropped together. - The diff evidence map tested hunks in path order, so on large PRs its cap
was spent on configuration files. Source files that the evidence refers to
are now tested first, and the summary says how many hunks went untested. proofcheck init --agentnow enables[agent]inproofcheck.toml.- Issue references that are negated ("does not fix #3"), quoted example
phrases, arrow notation ("15.5 s → 0.28 s") and "speeds up X by 2.5x" are
handled correctly in claim extraction.