Skip to content

Fix self-healing reporting for micro PRs and add a maintainer auto-merge override - #3419

Merged
pwizla merged 2 commits into
mainfrom
repo/self-healing-micro-pr-reporting
Aug 28, 2026
Merged

Fix self-healing reporting for micro PRs and add a maintainer auto-merge override#3419
pwizla merged 2 commits into
mainfrom
repo/self-healing-micro-pr-reporting

Conversation

@pwizla

@pwizla pwizla commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Two fixes to the self-healing pipeline, both surfaced by the run of 2026-08-28.

The Slack notification and the run summary read has_targets to decide whether the run produced anything. That output answers a narrower question: whether Sonnet needs to be invoked, since it is computed from the count of "full" complexity PRs only. Micro-edits are handled by the Haiku Router itself, which opens the doc PR and records its URL in router-results.json, so a run whose targets are all micro ends with has_targets=false and was reported as an empty run. That is how the 2026-08-28 run announced "Router (Haiku) found no documentation targets" a few seconds after the Router had opened #3418. Both reporting steps now count the micro PRs alongside Sonnet's, the way the Notion logging step already did. has_targets keeps its current meaning and is only consulted to explain why Sonnet did not run.

The second change adds automerge: approved by piwi, a maintainer override for the auto-merge eligibility gate. The mechanical checks judge form, and form is a proxy: a change can violate a criterion and still be correct. #3418 is the first case, since it adds a heading and check-no-headings refuses that outright. There was no way to act on that, because adding automerge: eligible by hand does not survive: the labeled event re-runs the eligibility workflow, the checks fail again on the same criterion, and the label is removed minutes later. The new label records that a human read the PR and vouched for it, the eligibility workflow stops re-judging a PR that carries it, and the cron merges it alongside the gate-approved ones.

The override applies to form only. The 24-hour quarantine, the required CI checks and the absence period still apply, and flag: don't merge and flag: merge pending release still block the merge through the check-labels check. PRs merged on the override are marked as such in the Slack recap so an override is never presented as a clean pass through the gate. The label itself has already been created on the repository. check-no-headings is left unchanged for now.

pwizla added 2 commits August 28, 2026 10:48
The Slack notification and the run summary both read `has_targets` to
decide whether the run produced anything. That output answers a narrower
question: whether Sonnet needs to be invoked. It is set from the count of
"full" complexity PRs only.

Micro-edits are handled by the Router itself, which opens the doc PR and
records the URL in router-results.json. A run whose targets are all micro
therefore ends with has_targets=false, and was reported as an empty run.

On 2026-08-28 that produced a Slack message saying "Router (Haiku) found
no documentation targets" minutes after the Router had opened #3418.

Both reporting steps now count micro PRs alongside Sonnet's, the way the
Notion logging step already did. `has_targets` keeps its current meaning
and is only consulted to explain why Sonnet did not run.
The eligibility checks judge form: which files, how many lines, what
shape. Form is a proxy, and a change can violate a criterion and still be
right. #3418 is the first case: it adds a heading, which check-no-headings
refuses outright, and it was reviewed and found correct.

There was no way to act on that. Adding `automerge: eligible` by hand does
not survive: the `labeled` event re-runs the workflow, the checks fail
again on the same criterion, and the label is removed minutes later.

`automerge: approved by piwi` records that a human read the PR and vouched
for it. The eligibility workflow stops re-judging a PR that carries it,
and the cron merges it alongside the gate-approved ones.

It overrides form only. The 24-hour quarantine, the required checks and
the absence period still apply, and `flag: don't merge` and `flag: merge
pending release` still block through check-labels. Merges made on the
override are marked as such in the recap, so an override is never
presented as a clean pass through the gate.
@pwizla pwizla self-assigned this Aug 28, 2026
@vercel

vercel Bot commented Aug 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
documentation Ready Ready Preview Aug 28, 2026 8:52am

Request Review

@pwizla pwizla added source: repo PRs/issues not targeting a specific documentation but rather affecting the whole repo internal PRs created by the Strapi core team pr: chore labels Aug 28, 2026
@pwizla pwizla added automerge: approved by piwi Maintainer vouched for this PR: skip the mechanical eligibility checks and merge it and removed automerge: approved by piwi Maintainer vouched for this PR: skip the mechanical eligibility checks and merge it labels Aug 28, 2026
@pwizla

pwizla commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator Author

LGTM, merging it 🚀

@pwizla
pwizla merged commit 9001f96 into main Aug 28, 2026
15 of 17 checks passed
@pwizla
pwizla deleted the repo/self-healing-micro-pr-reporting branch August 28, 2026 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal PRs created by the Strapi core team pr: chore source: repo PRs/issues not targeting a specific documentation but rather affecting the whole repo

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant