Skip to content

Releases: exactml/marginal

marginal v0.2.4

Choose a tag to compare

@exactml exactml released this 20 Sep 12:16
2d1ad43

πŸ› 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's strict: true tool definition (added in v0.2.3) was rejected by the API on every single request, because Finding.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

Choose a tag to compare

@exactml exactml released this 20 Sep 11:53
1ac5c98

πŸ€– 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_structured now sets strict: true on 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

Choose a tag to compare

@exactml exactml released this 20 Sep 10:55
5144f39

πŸ› 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_structured and OpenAIProvider.generate_structured now 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

Choose a tag to compare

@exactml exactml released this 20 Sep 10:19
c693e63

πŸ€– 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 init now seeds .marginal/policies/README.md with 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 review now returns a bounded list of findings per run (up to 20), filtered by config.review.confidence_threshold and capped at config.review.max_comments (ISSUE-57, PR-79)
  • marginal review now 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_structured and OpenAIProvider.generate_structured now catch pydantic.ValidationError and re-raise it as ProviderResponseError instead of crashing the review job with a raw traceback (ISSUE-39, PR-42 by @HarshRajSinghania)

New Contributors

πŸ“– Full details: CHANGELOG.md

marginal v0.2.0

Choose a tag to compare

@exactml exactml released this 12 Sep 20:42
b0e76f0

⚠️ 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 configured models.reviewer missing its required credentials changes from 1 to 3, distinct from the 1 still returned for every other provider/GitHub error (ISSUE-60, PR-61 by @exactml)

New Features

  • Folds the content of any config.policies files 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

πŸ“– Full details: CHANGELOG.md

marginal v0.1.3

Choose a tag to compare

@exactml exactml released this 09 Sep 10:04
3ff027f

🎯 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_comments cap for generated findings (ISSUE-28, PR-35)

πŸ“– Full details: CHANGELOG.md

marginal v0.1.2

Choose a tag to compare

@exactml exactml released this 09 Sep 09:31
7d6204b

πŸ’¬ 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)
  • --comment now posts findings as inline, line-anchored PR review comments (ISSUE-27, PR-33)

Fixes

  • Provider SDK errors (Anthropic/OpenAI) are caught and wrapped as ProviderAPIError instead of crashing with a raw traceback (ISSUE-31, PR-32)

πŸ“– Full details: CHANGELOG.md

marginal v0.1.1

Choose a tag to compare

@exactml exactml released this 08 Sep 15:53
1c885f3

πŸ€– marginal now generates a real, model-backed review finding instead of just posting PR metadata.

New Features

  • marginal review generates 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 and marginal-action invocation (ISSUE-23)

Fixes

  • marginal init's scaffolded workflow: drops a stale comment and redundant checkout step, adds the required pull-requests: write permission (ISSUE-19)

πŸ“– Full details: CHANGELOG.md

marginal v0.1.0

Choose a tag to compare

@exactml exactml released this 08 Sep 14:51
24ff117

πŸŽ‰ First published release β€” installable from PyPI as marginal-review, with the core review/comment/config/provider building blocks in place.

New Features

  • marginal review --comment posts the review summary as a single PR comment (ISSUE-13, PR-14)
  • marginal review CLI 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 init scaffolds .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.yaml parsing and validation (ISSUE-3, PR-4)

Improvements

  • Published to PyPI as marginal-review via 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