Releases: exactml/marginal
Release list
marginal v0.2.4
π Fixes a v0.2.3 regression that made every Anthropic-backed marginal review fail outright -- upgrade from v0.2.3 immediately if you're on it.
Fixes
AnthropicProvider.generate_structured'sstrict: truetool definition (added in v0.2.3) was rejected by the API on every single request, becauseFinding.confidence's bounds and_FindingsResponse.findings' length cap render as JSON Schema keywords strict tool use doesn't support. The wire schema is now adapted before sending -- unsupported keywords stripped, a nullable field rewritten to the form Anthropic's docs describe -- while pydantic still enforces the same bounds locally on the response (ISSUE-96, PR-101)
π Full details: CHANGELOG.md
marginal v0.2.3
π€ marginal review's reviewer-model call now uses Anthropic's strict tool use, so the model's response is guaranteed to match the expected schema at generation time instead of merely being asked to.
Fixes
AnthropicProvider.generate_structurednow setsstrict: trueon its tool definition -- Claude's response is generated via grammar-constrained decoding, closing the schema-mismatch failure class the ISSUE-96 retry existed to mitigate, at the source rather than after the fact (ISSUE-96, PR-99)
π Full details: CHANGELOG.md
marginal v0.2.2
π marginal review no longer fails outright the first time the reviewer model's structured output doesn't quite match the expected shape -- it retries once before giving up.
Fixes
AnthropicProvider.generate_structuredandOpenAIProvider.generate_structurednow retry once (two attempts total) on a schema-validation failure instead of failing the review immediately. A transport-level error, or a response missing the tool call/content entirely, still fails on the first attempt (ISSUE-96, PR-97)
π Full details: CHANGELOG.md
marginal v0.2.1
π€ marginal review now returns a bounded list of findings per run instead of just one, so a PR with several real issues gets several posted comments in a single review instead of just the first one found.
New Features
marginal initnow seeds.marginal/policies/README.mdwith guidance and reports forced-rerun overwrites, so the policy directory survives the first commit and scaffold changes are visible (ISSUE-75, PR-80 by @dvd233)marginal reviewnow returns a bounded list of findings per run (up to 20), filtered byconfig.review.confidence_thresholdand capped atconfig.review.max_comments(ISSUE-57, PR-79)marginal reviewnow detects and reports incomplete review coverage -- paginated file fetches and files GitHub omitted a patch for (ISSUE-71, PR-73)- Added
marginal.graph.build_symbol_graph, a same-repo Python symbol graph indexer resolving call sites to their definitions -- not yet consumed by a review (ISSUE-82, PR-89)
Fixes
AnthropicProvider.generate_structuredandOpenAIProvider.generate_structurednow catchpydantic.ValidationErrorand re-raise it asProviderResponseErrorinstead of crashing the review job with a raw traceback (ISSUE-39, PR-42 by @HarshRajSinghania)
New Contributors
- @dvd233 made their first contribution in PR-80
- @HarshRajSinghania made their first contribution in PR-42
π Full details: CHANGELOG.md
marginal v0.2.0
marginal review's exit code for missing reviewer credentials changes from 1 to 3 β a breaking change for any caller relying on the old code, but it's also what lets marginal-action finally skip cleanly on forked PRs instead of failing their CI.
Breaking Changes
marginal review's exit code for a configuredmodels.reviewermissing its required credentials changes from1to3, distinct from the1still returned for every other provider/GitHub error (ISSUE-60, PR-61 by @exactml)
New Features
- Folds the content of any
config.policiesfiles into the finding-generation prompt (ISSUE-29, PR-40 by @exactml) - Redacts likely secrets (PEM keys, JWTs, GitHub/AWS tokens,
api_key=/token=/secret=assignments) from a diff before it reaches a model provider (ISSUE-47, PR-58 by @exactml)
Improvements
- Review output is now severity+confidence-badged instead of flat indented text (ISSUE-36, PR-38 by @exactml)
- Deduped
test_cli.py's review test fixtures (PR-41 by @exactml) - Added
SECURITY.mdwith a vulnerability disclosure process (ISSUE-62, PR-67 by @exactml) - Added
CODE_OF_CONDUCT.mdbased on the Contributor Covenant (ISSUE-63, PR-68 by @exactml) - Added
dev-setupandcut-releaseClaude Code skills (ISSUE-66, PR-69 by @exactml)
π Full details: CHANGELOG.md
marginal v0.1.3
π― Generated findings are now filtered by confidence and capped per PR instead of posting everything unfiltered.
New Features
- Wires up confidence-threshold filtering and a
max_commentscap for generated findings (ISSUE-28, PR-35)
π Full details: CHANGELOG.md
marginal v0.1.2
π¬ Findings are now structured and land as inline PR comments instead of one flat summary.
New Features
- Findings are now structured (
file,line,severity,message) instead of raw text (ISSUE-26, PR-30) --commentnow posts findings as inline, line-anchored PR review comments (ISSUE-27, PR-33)
Fixes
- Provider SDK errors (Anthropic/OpenAI) are caught and wrapped as
ProviderAPIErrorinstead of crashing with a raw traceback (ISSUE-31, PR-32)
π Full details: CHANGELOG.md
marginal v0.1.1
π€ marginal now generates a real, model-backed review finding instead of just posting PR metadata.
New Features
marginal reviewgenerates a real finding via the configured reviewer model, folded into the existing summary (ISSUE-21)
Improvements
- Wires up a real
models.reviewer(Claude Sonnet 5) in this repo's own config andmarginal-actioninvocation (ISSUE-23)
Fixes
marginal init's scaffolded workflow: drops a stale comment and redundant checkout step, adds the requiredpull-requests: writepermission (ISSUE-19)
π Full details: CHANGELOG.md
marginal v0.1.0
π First published release β installable from PyPI as marginal-review, with the core review/comment/config/provider building blocks in place.
New Features
marginal review --commentposts the review summary as a single PR comment (ISSUE-13, PR-14)marginal reviewCLI subcommand: prints a PR's metadata and changed files (ISSUE-11, PR-12)GitHubClient: permission-gated GitHub API client for PR reads/review writes (ISSUE-9, PR-10)marginal initscaffolds.marginal/config.yaml,policies/, and a starter workflow (ISSUE-7, PR-8)- Model provider abstraction (BYOK): Anthropic + OpenAI, credentials from env only (ISSUE-5, PR-6)
- Repo-local config schema:
.marginal/config.yamlparsing and validation (ISSUE-3, PR-4)
Improvements
- Published to PyPI as
marginal-reviewvia trusted publishing (ISSUE-17, PR-16) - Project scaffold: package layout, ruff + pytest tooling, CI, CONTRIBUTING.md, ADR (ISSUE-1, PR-2)
π Full details: CHANGELOG.md