v1.2.0
Feature-heavy minor release. Everything is backward-compatible by default — every new input defaults to the previous behavior; existing workflows keep working unchanged.
Features
- Structured findings (#181): the model now returns a normalized
findings[]array (severity, file, line, message) exposed as afindingsoutput, plusverdict_policy: findings_severity_gatedto derive the verdict deterministically from findings (request_changes iff any blocker-severity finding; falls back to the model verdict when no findings). - Inline review comments (#182): opt-in
inline_findings: trueattaches diff-anchorable findings as native line-anchored review comments (inline_findings_max, default 20). Ignored forpublish_mode: comment. - Fast/smart model routing (#186):
review_routing_mode: autoroutes low-risk PRs to a fast model and risk-flagged PRs (auth, secrets, migrations, security issues, …) to a smart model viaai_fast_*/ai_smart_*inputs. Fast defaults to the primary config, smart to the fallback config. - Review escalation (#187): when the fast review looks insufficient (request_changes verdict, unaddressed required checks, low confidence, blocker signals), the review is automatically re-run on the smart model;
escalate_on_*inputs control the triggers. New outputs:review_route,escalation_reason. - Required-check completeness validation (#185): the classifier emits
must_checkitems for risky PRs and the review is validated against them (validate_required_checks, defaultauto;required_check_validation_mode:warn/fail/metadata_only). New output:required_checks. - Deterministic PR classification (#163) now steers the review prompt with
pr_kind,risk_flags, andmust_check(#178) — injection-safe, derived from file patterns rather than PR text. - Token-aware context budgets (#170):
model_context_tokenssizes the corpus to the model's real context window — important for 8k–32k local models that the named modes silently overflowed. - OpenAI-compat API knobs (#168):
ai_response_format(json_object/json_schema— strongly recommended for small local models),ai_temperature,ai_tokens_param(max_completion_tokenssupport). - Graceful model-failure handling (#174):
on_model_failure: noticeposts a visible request_changes notice instead of failing the check with nothing on the PR; plus a step-summary table (engine, verdict, route, token usage, truncation).
Fixes
- Skip-if-unchanged fingerprinting and incremental review actually work; fingerprint includes prompt/config/rules hashes (#165).
wait_for_ci.shworks on Checks-API-only repos and excludes its own run from the wait (#176).- Response parsing and SSE reassembly hardened for local models (#166); model-call failure classes distinguished with HTTP error bodies captured (#167, #169).
- Tool harness planner contract fixed; executor tolerance and parse retry added (#171).
- Classifier: renovate mixed-PR mislabeling fixed; multi-language risk patterns (#172).
- Audit closeouts: #164 (tool harness/precheck/corpus correctness + security) and #184 (all 11 findings of audit #183).
- Post-merge cleanup of routing/escalation rough edges (#188).
Performance
- Parallelized context-collection I/O, deduplicated PR object/diff fetches, precheck short-circuit (#175).
- Low-value bytes trimmed from the review corpus and planner context (#177); corpus reordered so high-value evidence survives truncation (#170).
- Linked-source fetching parallelized with a bounded enrichment time budget.
Security
- Model API keys and GitHub tokens passed via 0600
curl --configfiles instead of argv (#179). - @-mentions neutralized in posted reviews;
redact.pyPython 3.9 compat (#173). - Random heredoc delimiters prevent model-controlled text from injecting step outputs.
Docs
- Local-model troubleshooting guide, smoke-test repo fix,
run_commanddocumentation (#180); review guidance tuning (#161).
New inputs
verdict_policy, inline_findings, inline_findings_max, review_routing_mode, ai_fast_model/ai_fast_base_url/ai_fast_api_format/ai_fast_api_key, ai_smart_model/ai_smart_base_url/ai_smart_api_format/ai_smart_api_key, escalate_on_risk_flags, escalate_on_incomplete_required_checks, escalate_on_fast_request_changes, escalate_on_fast_low_confidence, escalate_on_tool_or_evidence_blockers, validate_required_checks, required_check_validation_mode, model_context_tokens, ai_response_format, ai_temperature, ai_tokens_param, on_model_failure, ci_status_check/ci_timeout_sec/ci_interval_sec/ci_skip_on_timeout, review_scope.
New outputs: findings, verdict_source, required_checks, review_route, escalation_reason, effective_review_scope, ci_status_skipped, ci_status_final.
Behavior notes
review_scopedefaults toauto: full review first, then incremental reviews on later pushes when safe — a meaningful token saving on long-lived PRs.tool_planning_timeout_secdocumentation now matches the actual default (60s).