v2.15.0

Added

  • A deterministic Python e2e test harness (tests/e2e/), replacing the old ~815-line LLM-orchestrated e2e script. It opens throwaway PRs/MRs on the real GitHub/GitLab/Bitbucket test repos, runs the built review container against them, and verifies the posted output with plain code (telemetry JSON, fetched comments/annotations) instead of asking an LLM to eyeball shell output. A new .github/workflows/e2e.yml builds the candidate image once and runs it against all three platforms in parallel matrix legs, gated behind an e2e-gate aggregate check and a dedicated e2e-live GitHub Environment restricted to release/* branches. Live-run end to end against all three platforms at least once each, including together in a single 3-platform workflow_dispatch run: GitLab and Bitbucket each passed cleanly; GitHub’s runs correctly exercise every check but don’t currently pass cleanly, for the reason in the Known limitation below.
  • .github/workflows/lint.yml’s test/lint job is now a required branch-protection status check on main, alongside the existing AI review check.

Fixed

Found and fixed during this harness’s own live validation runs and a follow-up comprehensive review: per-platform pinned fixture seed SHAs, a self-approval-degrade check that compared against a hardcoded expectation instead of telemetry’s own intent, Bitbucket’s auth scheme/URL-encoding/annotation-pagination bugs, a fail-open bug in e2e-gate that could report success on a broken release PR, empty-string secret fallback bugs, argv/.git/config credential exposure in local clones, a world-writable output directory, non-idempotent retry-induced duplicate resources, missing Bitbucket orphan-branch cleanup, loose finding-matching in the verifier, inconsistent hand-copied pagination loops, and missing literal-value secret redaction in CI artifacts.

Known limitation

  • GitHub’s e2e leg runs self-review-degraded until separate seeder/reviewer GitHub identities are provisioned, a real platform restriction the harness correctly detects, not a harness bug. e2e-gate is not yet a required check on main.

See CHANGELOG.md for full technical detail.