Releases: SuperMarioYL/diffgate
Releases · SuperMarioYL/diffgate
diffgate v0.3.0
CLI/MCP parity, multi-file edits, three more languages, and three silent-lie fixes.
Added
- Structured
--claim-filemode (and-for stdin): feed structuredclaimed_actionsstraight into the verifier for full CLI/MCP parity. Seeexamples/claim_file_schema.json. - Multi-file verify: a claim file may carry per-action before/after paths, so one run gates an edit spanning several files and aggregates every mismatch into a single verdict.
- Three new languages: Java, C++, and Ruby (grammars already shipped in
tree-sitter-language-pack, no new dependency).
Fixed
- Bench no longer drops un-parseable/erroring trace rows from the headline catch-rate denominator — error rows are counted and attributed to their label.
moveof a duplicate-named symbol is no longer a false pass: a move now requires the symbol to genuinely leave one scope and land in a new one.- TS/JS arrow / function-expression assignments (
const handler = (req) => {}) are now emitted as symbols, so truthful edits to the dominant TS/JS idiom are no longer over-flagged.
Full Changelog: v0.2.0...v0.3.0
v0.2.0
First real feature iteration — scope-aware structural verification.
Added
- Scope-aware claim matching. Every claim kind (
add,delete,rename,signature_change,move) now honours thescopefield. Claimingadd MyClass.helperonly passes when the method really lands insideMyClass— adding a free-standinghelper()no longer satisfies it. An emptyscopestays a wildcard, so existing name-only claims behave exactly as before. diffgate mcp-server --stdioanddiffgate bench <traces.jsonl>are now real CLI subcommands. They were documented in the README and themcp.jsonsnippet but were previously only reachable viapython -m diffgate.…; copying the documented config now works as written.- 8 new fixtures plus focused unit tests covering scope lies, scope truths, and the unscoped wildcard path.
Fixed
- Silent-lie false negatives from scope confusion. The verifier matched claimed symbols by name only, so an agent that claimed it edited a method on a class but actually touched a same-named module-level function (or vice versa) slipped through as a pass. The structural gate now distinguishes the two.
- Pinned
tree-sitter <0.25/tree-sitter-language-pack <0.8— tree-sitter 0.25 changedParser.parse()to rejectbytes, breaking the parser on a fresh resolve.
Full Changelog: v0.1.1...v0.2.0
v0.1.1
Full Changelog: https://github.com/SuperMarioYL/diffgate/commits/v0.1.1