From e51b4ff02623d2857fdb3fa242f2dc8e99f69a36 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sun, 1 Nov 2026 09:56:38 -0800 Subject: [PATCH] quest: plan reading a PR's own CI as a signal for the fixer and /quest-merge Co-Authored-By: Claude Opus 5.5 --- quest/m0/land-fixer/README.md | 1 + quest/m0/land-fixer/pr-signal.md | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 quest/m0/land-fixer/pr-signal.md diff --git a/quest/m0/land-fixer/README.md b/quest/m0/land-fixer/README.md index 44d4df06..f92d3679 100644 --- a/quest/m0/land-fixer/README.md +++ b/quest/m0/land-fixer/README.md @@ -103,6 +103,7 @@ resolves itself and what it hands back; that docs update finishes the epic. - [Fixer comments](/quest/m0/land-fixer/comments.md) - a per-job, comment-only GitHub token lets the fixer explain its work on the PRs - [Attempt budget](/quest/m0/land-fixer/attempts.md) - only a fix that fails again spends a pick's single attempt - [Batch triage](/quest/m0/land-fixer/triage.md) - the fixer blames the failing PR before ejection, and a red base halts the queue +- [PR CI as a signal](/quest/m0/land-fixer/pr-signal.md) - `/quest-merge` and the fixer read a PR's own CI without gating on it; public repos may run it, private ones need not - [Flaky tests](/quest/m0/land-fixer/flaky.md) - the gate reruns a failed module, disables a flaky test on the batch's base PR, and files a follow-up - [Local mergeability](/quest/m0/land-fixer/mergeability.md) - `quest land` merges with the quest driver instead of ejecting on GitHub's conflict flag - [Protected edits](/quest/m0/land-fixer/protected.md) - the fixer edits protected paths when it judges the edit mechanical, and the fix lands diff --git a/quest/m0/land-fixer/pr-signal.md b/quest/m0/land-fixer/pr-signal.md new file mode 100644 index 00000000..f5ea8ca6 --- /dev/null +++ b/quest/m0/land-fixer/pr-signal.md @@ -0,0 +1,40 @@ +# [S] The fixer and /quest-merge read a PR's own CI as a signal + +## Goal + +A PR's own GitHub CI results inform the people and agents that land it, +without gating anything. `/quest-merge` shows the head's non-required check +results to whoever picks the PR, and the land fixer receives each batch PR's +check results, with the failing runs' logs, as extra context when it triages a +failing batch. Quest's landing docs state the policy: a public repository may +run PR CI as a free signal, and a private one relies on the host gate alone. + +## Plan + +Decided 2026-11-01 (maintainer, /quest-plan): "I think for moq we should +re-enable Check being run on PRs [...] maybe could at least gate the PR making +it to the fixer? Or not gate at all, and would just be a signal to the fixer +(or whoever decided to quest-merge in the first place). (open source repos do +this because it's free, closed source do not)". moq-dev/moq plans its side in +`quest/m0/ci/pr-check.md`. + +- The PR CI's role: + - ✅ A signal only + - Gate the fixer: a queued PR sits out batches until its CI finishes + - A required check +- Record the public/private policy: + - ✅ In quest's landing docs + - In moq only + +`quest status` already lists a PR's checks. `/quest-merge` should say when a +non-required check failed on the head it is about to pick, without refusing. +The fixer gets a summary per PR (check name, conclusion, run URL, and a +trimmed log of each failure) in its job input, next to the batch log. A +failing non-required check never parks or ejects a PR on its own; the parked +case is only for required checks, in +CI failures park (`quest/m0/land-fixer/ci-park.md`), which +[moq-dev/quest#363](https://github.com/moq-dev/quest/pull/363) plans. + +## Related + +- [Batch triage](/quest/m0/land-fixer/triage.md) - where the fixer uses the signal