Repository navigation
quest: plan the host-gate cutover's follow-ups #329
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| # [S] GitHub requests retry transient failures | ||
|
|
||
| ## Goal | ||
|
|
||
| One 5xx response or dropped connection no longer fails a quest command or a | ||
| land step. `GitHub.request` (`src/cli/github.ts`) retries 5xx, 429 and | ||
| network errors with bounded backoff, then fails with the last error. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - A 502 while the fixer handed back | ||
| [moq-dev/moq#7323](https://github.com/moq-dev/moq/pull/7323) replaced the | ||
| crash reason; [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320) | ||
| kept the original error but left the retry for this quest. | ||
| - Retry only idempotent reads and writes whose repeat is safe (GET, PUT, | ||
| DELETE, label and auto-merge mutations that check state first). A POST that | ||
| creates a comment or a merge must not run twice; check the effect before | ||
| repeating it. | ||
|
Comment on lines
+17
to
+20
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Define mutation retries around effect reconciliation. An internal retry in Specify a caller-level retry loop for each mutation. Also change “a POST that creates ... a merge”; the merge endpoint uses
|
||
| - Honour `Retry-After` and the secondary rate limit. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cover all secondary-rate-limit response shapes. The plan names Specify the REST header/body rules and the GraphQL error-body rule so secondary limits do not still fail these paths.
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # [M] A restarted land daemon keeps its in-flight check | ||
|
|
||
| ## Goal | ||
|
|
||
| Restarting `quest land serve`, as every host deploy does, never discards a | ||
| running batch check. The new daemon picks up the check the old one started | ||
| and lands, ejects, or hands back from its result, so a deploy costs no | ||
| rerun of a 30-40 minute batch. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - On 2026-10-31 each of six deploys killed moq's and moq.pro's in-flight | ||
| checks: the check client is the daemon's child, and with | ||
| `KillMode=process` it still exits on its next write to the dead daemon's | ||
| pipe. No PR was ejected, but each batch reran from scratch. | ||
| - Fixers already survive this way: a detached supervisor records the job and | ||
| the next daemon collects it (`src/cli/land-fixer.ts`). Give a batch check | ||
| the same shape: a detached client that writes its log and exit status to | ||
| the state directory, and a daemon that resumes a recorded batch on start | ||
| instead of building a new one. | ||
|
Comment on lines
+20
to
+22
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| - The host side (the check launcher, `KillMode=process`) is the | ||
| [gate host](/quest/m0/host-land/host.md)'s. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Gate host](/quest/m0/host-land/host.md) - the units this runs under | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -48,6 +48,15 @@ wasting CI on bisection?" | |
| field beside `requeue`, `fixed`, and `handback` in `src/cli/land-fix.ts`. | ||
| - Keep the fixer's untrusted-input rules: a PR's content cannot make the | ||
| fixer blame another PR or skip the base check. | ||
| - A collateral ejection never counts as the PR's one fix attempt | ||
| (user, 2026-10-31). Today `handbackRepeated` (`src/cli/land-fixer.ts`) | ||
| hands back any PR whose pick or fixer requeue is unchanged, so a PR that | ||
| shared two broken batches in a row was handed back unexamined: | ||
| [moq-dev/moq#7257](https://github.com/moq-dev/moq/pull/7257), | ||
| [#7306](https://github.com/moq-dev/moq/pull/7306), | ||
| [#7284](https://github.com/moq-dev/moq/pull/7284) and | ||
| [#7312](https://github.com/moq-dev/moq/pull/7312). Only the blamed PR's | ||
| attempt is spent. | ||
|
Comment on lines
+51
to
+59
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Make the collateral-ejection rule actionable.
|
||
|
|
||
| ## Related | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # [XS] The kix runner's conflicted-continuation test is fast under load | ||
|
|
||
| ## Goal | ||
|
|
||
| `test/runner.test.ts` "pauses a large conflicted continuation with a bounded | ||
| question and intact checkout" passes on a loaded host well inside vitest's | ||
| 5-second limit, without raising the limit. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - It hit the 5-second timeout in quest's own land gate on 2026-10-31 and | ||
| ejected [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), | ||
| which does not touch the runner. | ||
| - Find which step is slow (a large fixture write, git calls, or a wait) and | ||
| remove the cost; never retry the test or tune the timeout until it passes. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # [S] quest land reports queue conflicts again when the queue changes | ||
|
|
||
| ## Goal | ||
|
|
||
| A queued PR's conflict report stays current: when a PR ahead of it lands, | ||
| is requeued, or changes head, `quest land` checks it against the queue again | ||
| and updates its single report, saying when a conflict has cleared. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - Starts once [moq-dev/quest#322](https://github.com/moq-dev/quest/pull/322) | ||
| lands. It reports a newly queued PR's conflicts with the PRs ahead of it, | ||
| once per queueing, so a PR behind a requeued or changed one is never | ||
| checked again. | ||
| - Edit the earlier report rather than adding comments, so a busy queue does | ||
| not flood a PR. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| # [XS] Land checks run at gate priority | ||
|
|
||
| ## Goal | ||
|
|
||
| `quest land serve` runs each batch check with `QUEST_GATE_PRIORITY=1`, so a | ||
| repository's nested `quest gate` calls admit the land check ahead of agent | ||
| load. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - Starts once [moq-dev/quest#324](https://github.com/moq-dev/quest/pull/324) | ||
| lands; it adds the variable. Pass it to the `--sandbox` command from | ||
| `src/cli/land-serve.ts`. The host also exports it in its check command, | ||
| which the [gate host](/quest/m0/host-land/host.md) owns. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| # [XS] Delete the legacy hold labels | ||
|
|
||
| ## Goal | ||
|
|
||
| Condition: quest, moq, moq.pro, rind and rust2 all pin a quest release that | ||
| includes [moq-dev/quest#326](https://github.com/moq-dev/quest/pull/326). | ||
| Then `LEGACY_IGNORED` in `src/core/hold.ts` and its notes in the README and | ||
| `quest iterate --help` are gone, and only `quest:active` and `quest:kix` | ||
| count as holds. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-10-31 (user, /quest-plan of the follow-ups from moq.pro's and rust2's cutover to the host gate and the fixer repairs [moq-dev/quest#320](https://github.com/moq-dev/quest/pull/320), [#325](https://github.com/moq-dev/quest/pull/325), [#327](https://github.com/moq-dev/quest/pull/327) and [#328](https://github.com/moq-dev/quest/pull/328)). | ||
|
|
||
| - Check the condition with each repository's quest pin (`flake.nix` or | ||
|
Comment on lines
+14
to
+15
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| `mise.toml`). | ||
|
Comment on lines
+15
to
+16
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| - Decide then whether any other `quest:*` label should still count as a | ||
| hold; recommend only the two. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bound retries by attempts or elapsed time.
bounded backoffdoes not bound the retry loop. The land callers constructGitHubwithout a deadline, andGitHubdefaultsdeadlinetoInfinity; the current attempt limit applies only to rate-limit responses. (raw.githubusercontent.com)If a 5xx or network failure persists,
GitHub.requestcan keep the land step inside one request indefinitely. Define a maximum retry count or total retry deadline before returning the last error.