You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GraalVM native binary: compiles ahead-of-time for fast startup (~50MB footprint)
Docker Compose deployment: one-command setup with PostgreSQL
Container images: multi-arch (linux/amd64, linux/arm64) UBI9-micro and hardened -distroless variants
Release pipeline: semver tags, :snapshot / :vX.Y.Z-<sha>-snapshot main builds, cosign-signed images and tarballs with provenance attestations
GitHub App manifest flow: install.html for quick app registration
/review slash command: manual trigger for re-review
Zero-issues approval: auto-approves clean PRs; celebratory message lives in the PR summary comment
Changed
Review quality
Findings that quote code absent from the diff are dropped; partially wrong quotes lose their suggestion and post at low confidence
Duplicate findings inside one review are merged (median severity, richest description)
Findings a maintainer answered on a prior round do not return on follow-up review
The verifier receives prior findings and rejects re-raises, cross-scope misattributions, and out-of-diff artifact claims above medium severity
Review prompts require verbatim quoting, both sides of consistency comparisons, convention-respecting suggestions, and one finding per defect
Review-quality probe (docs/REVIEW_EVAL.md) for scoring deploys against collected failure cases
Fixed
Clean-review summary: zero-finding reviews post the PR summary (with the Thrillhouse message inside it); the approval carries no separate body
Dashboard auth: expired sessions redirect to login; valid sessions without repo access show an access-denied screen instead of looping back to login
Security
Dashboard sessions: opaque server-side session IDs in cookies — GitHub OAuth tokens never stored in the browser; 8h TTL; HttpOnly, Secure, SameSite=Lax
OAuth login: dynamic authorize/callback parameters are URL-encoded; authorization codes must match a strict allowlist before token exchange