v2.9.0

Changed

  • Behavior-changing for every consumer: the token usage table is no longer posted in full inside the review comment by default (issue #758). The full Token usage by agent breakdown was reference material, not review content, and its in-comment copy had caused two shipped bugs: Bitbucket rendering <details>/<summary> as literal text (#703) and Bitbucket silently truncating comments near 32KB, dropping the trailing table (#728). The review comment now carries a single compact line by default (_Review cost: $0.1234 · 45,678 tokens · 8 agents · Sonnet 5 · [full breakdown](run-url)_), plus a separate high-usage warning line when a run’s estimated cost crosses a configurable threshold. The full table is always available in the CI job log (echoed to stderr on every provider, new) and, on GitHub, GITHUB_STEP_SUMMARY (unchanged). New token-usage-display input (AI_TOKEN_USAGE_DISPLAY, default compact): set to full to restore the pre-#758 in-comment table, or off to omit token-usage content from the comment entirely. New token-usage-warn-usd input (AI_TOKEN_USAGE_WARN_USD, default 1.00): set to 0 to disable the high-usage warning. See Features → Token usage.

Fixed

  • GITHUB_ACTIONS is now passed through to the containerized engine (issue #759). The ::warning::/::error:: workflow annotations in vcs/github.py, slash/dismiss.py, cli.py, and review/reporting.py all gate on this variable and previously saw it unset when running via container-action/action.yml, even inside real GitHub Actions, so those annotations were silently suppressed.
  • 24 further env vars are now passed through to the containerized engine (issue #761, the same bug class as #759), most notably the AI_CANONICAL_REUSE and AI_GITLAB_CROSS_RUN_DEDUP incident-response kill switches, which had zero effect on the container-action install path despite being documented as escape hatches for exactly that scenario. Also restores the #734 dual-token split (GITHUB_TOKEN/GH_TOKEN) on the container path. A new regression test parses the docker run env passthrough list and cross-checks it against the engine’s own registry of known variables, so this class of silent gap can’t recur unnoticed for a future variable.