Repository navigation
quest: plan the 2026-11-01 follow-ups #373
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
7357fd1
3c5c5c6
2d39690
ae3fa1f
fd5a3be
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,23 @@ | ||
| # [XS] Turn Spotlight off in this repository's macOS CI jobs | ||
|
|
||
| ## Goal | ||
|
|
||
| Every macOS job in this repository's workflows runs `sudo mdutil -a -i off` | ||
| as its first step, so Spotlight's first full index of the fresh VM no | ||
| longer competes with the job. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [XS], m0, from | ||
| [moq-dev/quest#342](https://github.com/moq-dev/quest/pull/342)'s suggested | ||
| follow-ups. | ||
|
|
||
| - #342's diagnostic run held `macos-14`'s load at about 4× its 3 CPUs for | ||
| the whole sample while Spotlight indexed, dropping below 1 within minutes | ||
| once it was off. The gate already admits a lone command on such a host, | ||
| so this is about job time, not admission. | ||
| - The jobs: Check's `lifecycle` on `macos-14` | ||
| (`.github/workflows/check.yml`), Release's `macos` jobs | ||
| (`release.yml`), and Install check's macOS jobs (`install-check.yml`). | ||
| Compare a job's time before and after. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # [S] The fixer's container trusts public TLS certificates | ||
|
|
||
| ## Goal | ||
|
|
||
| The land fixer's nspawn container validates TLS like a normal host, so | ||
| workerd and the Cloudflare Worker tests run there. A fixer job on | ||
| moq-dev/quest builds and tests the Worker (`cd cloudflare && bun run test`) | ||
| without workerd's "TLS peer's certificate is not trusted; reason = unable to | ||
| get local issuer certificate". Check it by re-running the fixer on a PR that | ||
| touches the Worker, or by running the Worker tests by hand in a fixer | ||
| container. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [S], in this epic. | ||
|
|
||
| - The fixer handed back | ||
| [moq-dev/quest#331](https://github.com/moq-dev/quest/pull/331) for this | ||
| ([handback](https://github.com/moq-dev/quest/pull/331#issuecomment-6563898322)): | ||
| its resolution of `test/land.test.ts` was right, but it could not run the | ||
| Worker suite, so it could not report the fix as tested. | ||
| - The fix lands in [kixelated/nixos](https://github.com/kixelated/nixos), in | ||
| `modules/quest-land.nix`, which builds the fixer container. A likely | ||
| cause is a missing CA bundle at the standard path, or | ||
| `SSL_CERT_FILE`/`NIX_SSL_CERT_FILE` not reaching the fixer's dev shell. | ||
| Confirm the cause before changing anything. | ||
| - Check the land check containers for the same gap, since they run the same | ||
| suites. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
| # [M] Runners publish the App's quest review check | ||
|
|
||
| ## Goal | ||
|
|
||
| After a runner publishes a head, it runs `quest review` on that head with | ||
| the other vendor's account, outside the agent's sandbox, and kix writes the | ||
| result as the App's `quest review` check run on that commit. A head a | ||
| runner pushed then lands through kix's land gate without a human approval, | ||
| once that check passes. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [M], m0, from | ||
| [moq-dev/quest#351](https://github.com/moq-dev/quest/pull/351)'s suggested | ||
| follow-ups. | ||
|
|
||
| - #351's gate (`cloudflare/src/github/review.ts`) already counts a | ||
| completed, successful `quest review` check run by this App on the exact | ||
| head. Nothing writes one yet, and the author's `## Review` record never | ||
| counts on a commit an App committed, so every runner head needs a person's | ||
| approval today. | ||
| - The runner process, not the agent, runs the review, so the agent cannot | ||
| fake it. It sends the result to kix over a new runner protocol message. | ||
| - The App needs `checks: write`, which existing installations must accept; | ||
| add the operator step to `cloudflare/GITHUB.md`. | ||
| - Choose which jobs run it, such as iterate and merge jobs after they | ||
| publish. | ||
|
Comment on lines
+23
to
+28
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.
|
||
|
|
||
| ## Required | ||
|
|
||
| - [Land review](/quest/m0/kix/land-review.md) - the gate that counts the App's check | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # [XS] A post-squash tree mismatch comments on the merged PR | ||
|
|
||
| ## Goal | ||
|
|
||
| When GitHub's squash of a landed PR has a different tree from the one the | ||
| gate tested, `quest land serve` posts a CRITICAL comment on that merged PR, | ||
| naming the squash commit, both trees, and what happened to the rest of the | ||
| batch. Today the mismatch reaches only the host's log and warning line, so | ||
| nobody reading the PR learns that `main` holds an untested tree. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [XS], m0. | ||
|
|
||
| - Raised as a follow-up in | ||
| [moq-dev/quest#321](https://github.com/moq-dev/quest/pull/321), which made | ||
| a post-squash `tree_mismatch` keep the PR merged and the rest of the batch | ||
| queued. The detail is built in `src/cli/land-serve.ts` (`CRITICAL: GitHub | ||
| squash #N at <sha> has tree ...`), then only logged and warned. | ||
| - Post it through the daemon's existing comment path, with its marker and | ||
| deduplication, so a restarted daemon doesn't post it twice. | ||
| - Extend the post-squash tree-mismatch test in `test/land.test.ts` to expect | ||
| the comment. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # [S] Keep local merges and the merge driver current | ||
|
|
||
| ## Goal | ||
|
|
||
| A local merge of the base into a quest branch needs no hand edits for | ||
| links to quests the base finished: a command, such as `quest check --fix`, | ||
| drops those list links as `quest land` does. Clones whose | ||
| `merge.quest.driver` an older quest version registered get the current | ||
| driver, while a custom driver stays untouched. The dev shell's | ||
| `quest-pinned` flake input stays current, so its merge driver has the | ||
| latest fixes. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [S], m0. | ||
|
|
||
| - Finished links: | ||
| [moq-dev/quest#353](https://github.com/moq-dev/quest/pull/353) makes | ||
| `quest land` drop `Required`, `Related`, and `Closes` links to quests | ||
| the base deleted since the PR's merge base, using core `remove()`. Apply | ||
| the same edit in a checkout after merging the base, for example with | ||
| `quest check --fix` or `quest resolve --finish <merge-head>`, and point | ||
| the guide's merge line at it. Links in prose stay for a person to fix. | ||
| - Driver upgrades: `heal` in `src/cli/setup.ts` sets | ||
| `merge.quest.driver` only when none is configured, so clones keep the | ||
| driver an older quest wrote and miss | ||
| [moq-dev/quest#344](https://github.com/moq-dev/quest/pull/344)'s fallback | ||
| warning. Recognize earlier quest-generated driver strings and replace them | ||
| with the current `DRIVER`. | ||
| - The pin: [moq-dev/quest#344](https://github.com/moq-dev/quest/pull/344) | ||
| added the `quest-pinned` input, which only a manual `nix flake update | ||
| quest-pinned` bumps. Pick how it stays current, such as Dependabot's nix | ||
| updates, a step in the release checklist, or a recurring quest, and do it. | ||
|
|
||
| ## Related | ||
|
|
||
| - [Merge queue siblings](/quest/m0/helpers/queue-siblings.md) - the landing-time drop this quest brings to local merges |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # [M] The runner's opencode adapter uses @opencode/sdk 2.x | ||
|
|
||
| ## Goal | ||
|
|
||
| The runner's opencode adapter (`src/runner/opencode.ts`) drives opencode | ||
| 2.x through `@opencode/sdk` 2.x, matching the opencode that the bumped | ||
| nixpkgs ships, so Dependabot's nixpkgs bump | ||
| [moq-dev/quest#281](https://github.com/moq-dev/quest/pull/281) can land. | ||
| The flake's `opencode-sdk` check passes, and the runner's opencode tests | ||
| pass against the new SDK. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [M], m0. | ||
|
|
||
| - nixpkgs now ships opencode 2.0.32. `package.json` pins | ||
| `@opencode-ai/sdk` 1.19.0, and `flake.nix`'s `opencode-sdk` check fails | ||
| unless that pin equals `pkgs.opencode.version`, so #281 cannot land | ||
| alone. Move to the renamed `@opencode/sdk` at the version nixpkgs ships, | ||
| adapt the adapter to its 2.x API, and point the flake's check at the new | ||
| package name. | ||
| - Land the nixpkgs bump in the same PR, or merge #281 into it. | ||
|
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. Track the nixpkgs pin bump as a separate quest. This plan allows the nixpkgs bump to land in the same PR as the SDK migration. Track that pin bump as its own quest and make this quest depend on it instead. As per coding guidelines, “A release or pin bump that unblocks work is its own quest.”
|
||
| - [moq-dev/quest#280](https://github.com/moq-dev/quest/pull/280) adds a | ||
| Dependabot ignore for `@opencode-ai/sdk`, since the SDK must move with | ||
| nixpkgs' opencode. That ignore must also cover `@opencode/sdk`. | ||
| - Run the runner's live opencode checks that the | ||
| [Kix decision UI](/quest/m0/kix/README.md) rehearsal lists, if a runner is | ||
| available. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| # [S] quest review routes through a gateway or cloud provider | ||
|
|
||
| ## Goal | ||
|
|
||
| `quest review` works when the reviewer CLI reaches its model through a | ||
| gateway such as CLIProxyAPI, or through a cloud provider. The reviewer | ||
| keeps `ANTHROPIC_BASE_URL` with its token, `ANTHROPIC_CUSTOM_HEADERS`, | ||
| Claude Code's Bedrock, Vertex, and Foundry switches, and Codex's | ||
| `CODEX_ACCESS_TOKEN` and `CODEX_CA_CERTIFICATE`, instead of having them | ||
| stripped and being reported as logged out. Variables that would change the | ||
| reviewer's plugins, permissions, or configuration are still stripped. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [S], m0: pass these through instead of blocking them. | ||
|
|
||
| - [moq-dev/quest#339](https://github.com/moq-dev/quest/pull/339) lets a | ||
| reviewer keep the credential its own CLI reads from the environment, and | ||
| passes `CODEX_API_KEY` when `codex login status` fails. It still strips the | ||
| variables that send requests to a gateway or another provider, and blocks | ||
| credentials while one is set, as the review-login quest's 2026-10-30 | ||
| decision asked. That decision kept stripping variables that redirect | ||
| billing. This one supersedes it for the gateway and provider variables in | ||
| the Goal, because the maintainer routes reviews through them on purpose. | ||
| - Reuse the gateway and cloud-routing tests from closed | ||
| [moq-dev/quest#316](https://github.com/moq-dev/quest/pull/316), whose | ||
| branch `fix/review-provider-environment` | ||
| ([79fb7c4](https://github.com/moq-dev/quest/commit/79fb7c4cd45976184c5adc7adc286283b206231c)) | ||
| is still on GitHub. | ||
| - Keep the managed agents' (`quest agent`) account isolation as it is. If a | ||
| credential is still stripped on purpose, the error names the variable | ||
| instead of saying "not logged in". | ||
|
Comment on lines
+18
to
+33
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.
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # [S] quest review covers only the branch's own change, on any checkout | ||
|
|
||
| ## Goal | ||
|
|
||
| `quest review` reviews the change between the base's merge base and `HEAD` | ||
| (`origin/main...HEAD`) with both reviewers. A branch that is behind its | ||
| base gets no findings on the base's newer code, which reads as reverted in a | ||
| two-dot diff. It also reviews a detached `HEAD`, since a merge session | ||
| can't check out a branch another worktree already holds. | ||
|
|
||
| ## Plan | ||
|
|
||
| Decided 2026-11-01 (user, /quest-plan of the follow-ups from the | ||
| 2026-11-01 `/quest-complete` sessions): ✅ plan it, [S], m0. | ||
|
|
||
| - In [moq-dev/quest#337](https://github.com/moq-dev/quest/pull/337), round 1 | ||
| reported two findings on code that main had gained after the branch's | ||
| merge base, which the branch did not touch. Claude's turn already asks for | ||
| `<base>...HEAD` (`src/cli/review.ts`), but Codex's `codex exec review | ||
| --base <base>` reviewed main's newer code. Give each reviewer the merge | ||
| base itself, or whatever form makes both review only the branch's change, | ||
| and test it with a branch behind its base. | ||
| - [moq-dev/quest#348](https://github.com/moq-dev/quest/pull/348)'s merge | ||
| fixes were reviewed from a differently named local branch, because the PR's | ||
| branch was checked out in another worktree. `review()` refuses a detached | ||
| `HEAD` ("check out the branch to review") and keys the session state by | ||
| the branch name. Accept a detached `HEAD`, and key its session so that | ||
| later rounds on the same work resume it, for example by the PR or by a | ||
| name passed on the command line. | ||
|
Comment on lines
+23
to
+29
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.
|
||
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.
Script executed:
Repository: moq-dev/quest
Length of output: 16728
Map the review result to the check conclusion.
quest reviewexits with code 0 when it reports findings. If the runner maps process completion to a successful App check, the land gate can accept a head that still has findings. The plan does not state this mapping. Add it so that a successful check requires an emptyfindingslist.Suggested plan addition
Add a test for the findings path.
Committable suggestion