ci(github-action): update action https://github.com/misospace/pr-reviewer-action (v3.4.1 ➔ v3.7.0) #2407
No reviewers
Labels
No labels
area/bootstrap
area/ci
area/kubernetes
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
renovate/container
renovate/github-action
renovate/github-release
renovate/grafana-dashboard
renovate/helm
renovate/terraform
type/digest
type/major
type/minor
type/patch
wontfix
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
GiorgioAresu/home-ops!2407
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/https-github.com-misospace-pr-reviewer-action-3.x"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
v3.4.1→v3.7.0Release Notes
misospace/pr-reviewer-action (https://github.com/misospace/pr-reviewer-action)
v3.7.0Compare Source
3.7.0 is about the verdict being real. Until now,
review_verdictcould reachapproveand still publish a non-blocking comment, the only judge of a finished review was the model that wrote it, and what happened to a finding after publication was invisible. This release publishes the verdict it reached (plus a new blockers-only mode), adds an opt-in independent scorer that grades completed reviews, and exports a finding-outcome contract so operators can measure what actually happens to findings. Around that: a credential-redaction wave closes every remaining path where someone else's secret could ride to disk, and the self-hosted controller gains repository acquisition, GitHub App auth, and its first Tangled publish record.If you publish verdicts or want the scorer, this is the release to pin:
The verdict publishes as the verdict
review_verdictis authoritative (#1162, closes #1161): a valid final verdict maps to its native event —approve→ APPROVE,request_changes→ REQUEST_CHANGES — instead of quietly downgrading to a comment. The one remaining comment path is deliberate scope policy: a fork PR withoutapprove-forks, or unknown fork-ness, still fails closed to an advisory comment. A missing or invalid verdict publishes neither event and says so.allow-approveis deprecated and inert; setting it logs a deprecation warning.review_blockerspublishes blocking requests only (#1162): arequest_changesverdict becomes a native blocking request, anapproveverdict becomes an advisory comment, and the mode never publishes an approval under any verdict, input, or PR scope.structural-proof-unconfirmed) now synthesizes a concrete blocker and flipsapprovetorequest_changes, while a reviewer's own citation-scope note (#854) no longer does — it stays a repairable coverage gap the continuation can go investigate.A second opinion, opt-in
ai-confidence-*inputs configure the lane; a distinctai-confidence-base-urlnever implicitly inherits the primary credential. The result is advisory telemetry only — it never touches the verdict, findings, or any gate — and it is off by default: unset means no extra model call and empty outputs, never a spurious 0. On fork PRs the scorer is off unless explicitly enabled, because its prompt sends the review's own privileged output to another endpoint.What happens to a finding afterwards
finding-outcomes.json— afinding-outcomes/v1event ledger (reported,repeated,resolved,dismissed,feedback, …) with deterministic reconciliation. Privacy-aware by construction: events carry digests and counts, never message text or logins, and adjudicated precision reads only explicit operator adjudications — a resolved thread or a 👎 cannot inflate it. No verdict, severity, suppression, or prompt behavior changes; this is the measurement seam the v3.6.0 feedback loop was missing.Credentials that aren't yours still get masked
pr.diff,ai-request.<tier>.json, corpus sections) carry the same[REDACTED]bytes and cannot diverge. Over-redaction of a credential-shaped test fixture is the accepted tradeoff; the configured-key layer stays out of the diff so a short key can't destroy review input.ai-response.<tier>.jsonon every lane now goes throughredactTextDeep, so a credential the provider invented — a key it generated, another tenant's token quoted in an error body — can no longer persist verbatim even though this run never configured it.Model-authored markdown can't forge a prescription
```suggestionopener behind a blockquote or list marker rendered as a live one-click prescription cmark-gfm honors but publication never validated. The opener is now matched behind container prefixes, with the prefix preserved so benign prose stays byte-identical.Fail loud, not silent
empty-diff, and would have silently skipped every later push on the PR — the adapters now rethrow and the run fails visibly.Toward the self-hosted controller
More groundwork libraries — exercised by tests, not yet imported by the Action runtime, so Action users should notice exactly nothing here.
gh, no shell-out — with credentials scoped exactly to the repository each call names, and managed-comment ownership proven per write so a PR author's own marker comment can't be spoofed into an update target.dev.prreviewer.review) and never routes through the GitHub/Forgejo publish APIs. It stays experimental and fail-closed: with no trustworthy current-head source yet, publication refuses every PR today until #1165 lands. Nothing is expected of Tangled users yet.Upgrading
Pin to
v3.7.0, or the floatingv3tag, which now follows this build. Immutable-version and SHA pins must be bumped deliberately.This release has real behavior changes. The honest notes:
publish-mode: review_verdictusers: anapproveverdict now publishes a native APPROVE event where it previously published a comment. That is the point of the mode, but if you relied on the old always-comment behavior, switch to the newreview_blockersmode — it never approves.allow-approveis deprecated and ignored; fork approvals still require the explicitapprove-forksopt-in. Changing publish mode changes the review fingerprint, so the switch triggers one fresh review.ai-request.<tier>.json,ai-response.<tier>.json, diff/PR-body artifacts, and linked-issue sections now contain[REDACTED]where credential-shaped values appear — including values you never configured. Anything parsing those artifacts for raw content will see masks. Unset configuration still produces byte-identical request behavior.ai-confidence-modelis unset, and the confidence-* outputs are empty rather than zero.Every input's current contract lives in docs/inputs.md.
Full changelog: v3.6.0...v3.7.0
Generated changelog (release-please)
Features
Bug Fixes
Chores
v3.6.0Compare Source
3.6.0 is about closing the loop. Reviews used to be fire-and-forget: the action published findings and never learned whether a suggestion helped. This release makes findings actionable — line-exact suggestions you can apply in one click, and a usefulness signal (a 👎) that keeps a rejected prescription from coming back. Operators can stamp every model request with a per-run correlation id so proxy cost logs group one run's calls, and repositories can teach the reviewer bounded, repo-local skills.
Underneath, it's a hardening release for the write path: only proven-trusted identities may touch the action's comments, webhook event hints must agree with the signed payload, and requirement-trace stops manufacturing blockers the model never substantiated.
If any of the first three features matter to you, this is the release to pin:
Interpolate
github.run_idin the calling workflow — a literal GitHub expression here fails at action load time.Findings you can act on
suggestionopener, and one shared predicate decides whether a finding carries a prescription.)Trace a run, teach the reviewer
ai-extra-headersrides on every provider request (#1092, closes #1037): multi-lineName: valuepairs merged into every lane — primary, smart, fallback, specialist — and both wire formats. Malformed lines, duplicates, and collisions with transport headers (Authorization,x-api-key,accept-encoding, …) are rejected at startup. The input is treated as a secret end-to-end: values are redacted from config dumps and masked out of provider error and response surfaces, even when an endpoint echoes a header value back in an HTTP 200 body (#1094). Fingerprinting is name-only for ephemeral correlation headers (-session-id,traceparent, …), so a per-run id never invalidates a cached review; any other header participates by name plus a one-way digest of its value.repository-skillsopts into repo-local guidance (#1081): discover bounded.agents/skills/*/SKILL.mdfiles from the trusted PR base. In native-loop mode the model reads relevant skills on demand; with tools off,repository-skill-pathincludes one operator-selected skill as a bounded corpus addendum. Never reads PR-head content, disabled on fork PRs, and enabled state feeds the precheck config hash so a re-review can't silently reuse an incompatible run.Only trusted hands touch a comment
COMMENTEDreviews left behind by incomplete re-runs are collapsed — presentation-only, idempotent, and Forgejo no-ops. Destructive cleanup (inline retirement, verdict dismissal, thread resolution) stays behind the unchanged complete-replacement gate.The signed body is the event
check_run/check_suite/statusclassifications must match the signed body's own shape, closing header-driven reclassification into schedulablecheck_update— without dropping real Forgejo deliveries that carry no pull-request fields.Requirement-trace blocks less, explains more
Dependencies,Notes,Risk,Caveats,Limitations,Rollout) no longer enter the requirement ledger; test-execution outcomes classify as non-blocking external state; and an unmet requirement is disclosed in the rendered trace instead of being synthesized into blocking findings the model never substantiated. Blocking findings now come only from the model's own substantiated violations. Pinned by zero-inference golden replays, including the false-CHANGES_REQUESTED shape from miso-gallery#543 now approving.skipped_by_gate,no_claims,errored,merged, …) on the run artifact and renders it. "The reviewer reported no trace" and "the repair pass ran and returned nothing" used to be indistinguishable; on a degraded primary they no longer are.Provenance you can check
committed_sourceorsanitized_sourcewith a redaction count, on a harness-constructed header line — never inside the fence, where repository content could forge the annotation. Related code reads the working tree, so snippets carryrevision: nulland literal-claim authorization fails closed there until revision binding exists.Groundwork: measuring the tool loop
tool_stop_reasonlands in the metadata marker (#1122, refs #847): every harness run records why its tool loop stopped — the production signal #847 needs to compare tool-budget exhaustion across request sizes. The marker key appends last; unset serializes byte-identical. Also faster CI: semantic-eval fixture integrity is memoized and bad corpora fail fast before evaluation (#1111, closes #1078).Upgrading
Pin to
v3.6.0, or the floatingv3tag, which now follows this build. Immutable-version and SHA pins must be bumped deliberately.Nothing breaks and no input changed meaning. The honest notes:
ai-extra-headersvalues like API keys: they never appear in logs, artifacts, or error text.requirement-trace: true): one behavior changed in the direction of blocking less — advisory/process sections and test-execution outcomes no longer produce blockers, and unmet requirements are disclosed rather than synthesized into findings (#1095). Strict provenance checks on real code criteria are unchanged.tool_stop_reason, appended last. Consumers parsing marker fields positionally should read it as an optional trailing key; when unset, the marker is byte-identical to 3.5.x.Every input's current contract lives in docs/inputs.md.
Full changelog: v3.5.0...v3.6.0
Generated changelog (release-please)
Features
Bug Fixes
Performance Improvements
Documentation
v3.5.0Compare Source
3.5.0 is about lanes. Until now every model lane — primary, smart, fallback, specialists — was effectively a clone of the primary's request shape, and "does this need a human?" lived nowhere outside the model's prose. This release makes each lane independently configurable, makes structured output on the Anthropic wire honest about what it actually enforces, and adds a first-class human-review triage that can route to the right reviewer deterministically.
It's also the biggest groundwork release yet for the self-hosted controller: the Forgejo ingress, the durable review queue, and the Tangled read seam all landed as libraries. None of it is wired into the Action runtime — Action users should notice exactly nothing there.
If your lanes run against different backends, this is the release to pin:
Model lanes stop being clones
ai-primary-response-format,ai-smart-response-formatandai-fallback-response-formatoverrideai-response-formatper lane; unset lanes inherit, so single-value workflows stay request-byte compatible. The motivating shape: a primary behind a proxy that rejectsresponse_formatno longer forcesoffonto every other lane, and the reviewer-requested smart re-review (#721) can opt into richerjson_schema.ai-reasoning-effortgains per-lane overrides (ai-primary-…,ai-smart-…,ai-specialist-…,ai-fallback-…). OpenAI-compatible requests sendreasoning_effort; Anthropic requests sendoutput_config.effort— but only under that lane's own*-anthropic-effort-supportassertion, never inherited from another lane. The fallback lane inherits the base effort on purpose (#965: availability recovery, never quality escalation) yet asserts its own endpoint, becauseai-fallback-base-urlmay be a different backend entirely.ai-response-format: json_schemaonai-api-format: anthropicwas accepted and then silently omitted — operators believed the schema was enforced when it was only prompted. Now Anthropic-format requests carry no structured-output parameter unless the lane's*-anthropic-structured-output-supportopt-in is set, the run logs what is actually enforced, and if a wrong assertion draws a 400 naming the parameter, the request retries once without it so the review degrades to prompted JSON instead of failing.deep-review-max-tokens, default16384, independent ofai-max-tokens— enforced across every surface.smart-tool-max-roundsandsmart-tool-loop-wall-clock-secbound only the post-review escalation rerun, leaving the primary loop untouched. Empty inherits the previous scaling behavior.Ask a human, deterministically
review-triage: truemakes the reviewer answer a tri-state "does this PR need specialized/owning human review?" —not_required,required, orunknown, fail-closed tounknownwhen the answer is missing or malformed. It's advisory only: it never moves the verdict, findings, or any tool/access gating, and with the input off the outputs stay empty — "did not run" is never confused with "no work".review-triage-routing-mode: request, a triage ofrequiredadditively requests reviewers. The model can only pick logical target ids declared in the trusted base-ref.github/pr-reviewer-routing.yml; the action maps those ids to concrete users/teams, requests are idempotent and never remove existing reviewers, and an unknown target or any uncertain state mutates nothing. Never on forks.advisorymode publishes the routing plan without touching the forge, for safe dogfooding. (GitHub-only; Forgejo degrades torequest_failed.)Provenance you can check
Forgejo
authorized_integrationauth fixed (#1045), plus a dedicatedforgejo-tokeninput so the Forgejo token can differ from the GitHub-compatible one, and aforgejo-auth-methodinput to pick between token and OIDC authorized-integration modes.Toward the self-hosted controller
Shipped as libraries, exercised by tests, consumed by controller work ahead — the normal Action runtime doesn't touch any of it yet, and that's deliberate.
docs/architecture/self-hosted-forgejo-ingress.md.docs/architecture/durable-review-queue.md)pr_reviewer.forge— one URL/token resolution, a redirect-safe transport that never copies theAuthorizationheader onto a redirect, and an HTTPS-only base-URL guard that raises before any byte hits the wire. Thegh apierror-echo surface is gone with it.Upgrading
Pin to
v3.5.0, or the floatingv3tag, which now follows this build. Immutable-version and SHA pins must be bumped deliberately.Nothing breaks and no input changed meaning. The honest notes:
ai-response-format: json_schemawas never actually sent before — it only looked like it was. If you want native enforcement, setai-anthropic-structured-output-support(and the lane variants) only after confirming the endpoint acceptsoutput_config.format.16384cap (deep-review-max-tokens), independent ofai-max-tokens; deep-review runs may spend more tokens per role.Every input's current contract lives in docs/inputs.md.
Full changelog: https://github.com/misospace/pr-reviewer-action/compare/v3.4.1...v3.5.0
Generated changelog (release-please)
Features
Bug Fixes
Performance Improvements
Chores
Documentation
Refactors
Configuration
📅 Schedule: (in timezone Europe/Rome)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.
No rendered changes.
konflate 0.6.6 · rendered
f7fb1bd· full diff →AI Automated Review
Analysis engine: minimax/MiniMax-M2-7-anthropic (anthropic) — primary route · pr-reviewer-action v3.6.0
Approve — Renovate dependency update for
misospace/pr-reviewer-actionfrom v3.4.1 → v3.6.0.The diff is a single SHA-pin change in
.forgejo/workflows/pr-reviewer.yamlwith no other parameter modifications. Konflate confirms zero rendered cluster changes. All upstream release notes (14 bug fixes, 6 features, 1 performance improvement) affect the action's internal logic only and are additive; none introduce breaking changes to action inputs or output contracts. No repository standards conflict. No cluster resources affected.aa0208f33fa63367ff63ci(github-action): update action https://github.com/misospace/pr-reviewer-action (v3.4.1 ➔ v3.5.0)to ci(github-action): update action https://github.com/misospace/pr-reviewer-action (v3.4.1 ➔ v3.6.0)a63367ff63e2cc592db7e2cc592db7f7fb1bdcdcci(github-action): update action https://github.com/misospace/pr-reviewer-action (v3.4.1 ➔ v3.6.0)to ci(github-action): update action https://github.com/misospace/pr-reviewer-action (v3.4.1 ➔ v3.7.0)