Repository navigation
ci: fix Cache and cut lanes that fail or repeat the merge queue - #8425
Conversation
Quest-Claim: 45d313e6d3dd3d0d
Cache's roots recipe resolved the flake two directories above the checkout; it now uses the module's own directory, and Cache alerts on failure. Delete Cache refresh and Mutants (with their tooling), run CodSpeed nightly, limit Check to release PRs, and drop Quest's main push trigger. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Check runs --all, so it no longer needs the PR base's history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pre-merge checks:
|
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed head 999903c, including the full patch, cache publication callers, alert routing and dispatcher scope.
No actionable findings identified. The module-local source_directory() fixes the roots recipe's checkout path without changing the caller's store paths. Cache failures now reach alerts, CodSpeed retains nightly/manual execution with schedule-only alerts, and release Check consistently selects and executes --all without requiring the dispatcher's base history. The removed lanes and tooling match the recorded trim decision.
Direction: retain the existing per-publication closure refresh and release admission coverage. Verification limits: GitHub-only static review; no builds, tests, workflow dispatches or cache writes were performed, and repository ruleset settings were not independently verified.
There was a problem hiding this comment.
ℹ️ Minor suggestions only. The behavioral changes check out; two doc leftovers below.
Reviewed changes
- Cache fixed, kept, and alerted:
infra/nix/justfile'srootsrecipe now anchors--inputs-fromatsource_directory()(the module dir) instead ofjustfile_directory()(the root justfile's dir), so../..resolves to the checkout again;alert.ymlwatchesCachein place ofCache refresh, andalert.sh'sCI_ONLYdrops it. cache-refresh.ymldeleted withjust gh cache-refresh; each Cache run's trailingjust infra nix refreshkeeps its own commit's closure fresh.mutants.ymldeleted withjust rs mutants,sh/rs/mutants.sh,sh/rs/mutants-cargo.sh,.cargo/mutants.toml, and the dev-shellcargo-mutants.- CodSpeed moves to a nightly schedule (07:00 UTC) plus dispatch; the push trigger,
rs/**path filter, and push-burst concurrency group are gone, and it joinsalert.yml's schedule-only list. - Check becomes release admission only:
branches: [release],--allfor both the query and the run,CI_BASEandfetch-depth: 0dropped, withqueue.test.tsupdated to match. - Quest drops its
mainpush trigger; the queue'sjust cicovers main. - Docs and quest rows updated for the trimmed lanes (
infra/README.md,smoke.yml,bench/README.md,quest/m3/audit-ci.md).
Verified separately that main's ruleset requires only the Queue context while release requires Check + Release gate, so the release-only trigger keeps admission intact; and that --all makes the release gate history-free for sh/large-files.sh and the dispatcher.
ℹ️ Three comments still describe the deleted daily refresh
With cache-refresh.yml and just gh cache-refresh gone, the cache-age invariant is still explained in terms of a daily refresh that no longer runs. The two Cache scripts say the trailing refresh exists so paths are not "left to the next daily refresh", and the refresh recipe's own comment claims the closure stays fresh "even when nothing new is pushed" — no longer true now that only a Cache push refreshes its own commit.
Technical details
# Stale daily-refresh comments
## Affected sites
- `sh/gh/cache.sh:26-27` — "restart their age now rather than leave them to the next daily refresh."
- `sh/gh/cache-runtime.sh:20-21` — same sentence.
- `infra/nix/justfile:58-59` — "Refreshed when published and then daily, the newest cached commit's closure stays well inside the 30-day expiry, even when nothing new is pushed."
## Required outcome
- Each site should describe the current invariant: a Cache push refreshes its own commit, which keeps Smoke's pinned commit fresh only while `main` keeps merging. `infra/README.md:287-289` and the `smoke.yml:210-211` comment already phrase it that way.
## Suggested approach (optional)
- Drop the "daily" clause from the two scripts; in `infra/nix/justfile`, say the newest commit stays fresh as long as `main` merges within the expiry window.deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
|
quest land watch: the merge queue removed this pull request at 999903c because its The land fixer works on it in the background, and the watcher re-enqueues it at the back of the queue once it is fixed or judged flaky, or hands it back here with what it needs.
…N: 1.29.2
##[endgroup]
##[end-action id=__self_2.__run_3;outcome=success;conclusion=success;duration_ms=109]
##[start-action display=Sweep the cache before building;id=__self_2.__run_4]
##[group]Run config="$HOME/.config/mbx/config.toml"
�[36;1mconfig="$HOME/.config/mbx/config.toml"�[0m
�[36;1mmkdir -p "${config%/*}"�[0m
�[36;1mprintf '[gc]\nauto = false\n' > "$config"�[0m
�[36;1mmbx gc�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
BASE: d7699f81ae9fb7dde8a463ee49072a7974d47317
CHECK_FAIL_FAST: 1
NEXTEST_TEST_THREADS: 24
MBX_CACHE_LINKS: 1
MBX_REMOTE_URL:
##[endgroup]
evicted 0 objects and 0 action results (0 B logical); 49.9 GiB logical remain
##[end-action id=__self_2.__run_4;outcome=success;conclusion=success;duration_ms=945]
##[start-action display=Check the cache;id=__self_2.__run_5]
##[end-action id=__self_2.__run_5;outcome=skipped;conclusion=skipped;duration_ms=0]
##[start-action display=Cargo shim;id=__self_2.__run_6]
##[group]Run mbx setup --yes
�[36;1mmbx setup --yes�[0m
�[36;1mshim=$(mbx setup --status 2>/dev/null | sed -n '1s/.*: //p' || true)�[0m
�[36;1mif [ ! -e "$shim" ]; then�[0m
�[36;1m echo "::error::mbx setup installed no Cargo shim: $(mbx setup --status 2>&1)"�[0m
�[36;1m exit 1�[0m
�[36;1mfi�[0m
�[36;1mecho "${shim%[/\\]*}" >> "$GITHUB_PATH"�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
env:
BASE: d7699f81ae9fb7dde8a463ee49072a7974d47317
CHECK_FAIL_FAST: 1
NEXTEST_TEST_THREADS: 24
MBX_CACHE_LINKS: 1
MBX_REMOTE_URL:
##[endgroup]
refreshed the Cargo shim at /var/cache/github-runner-home/.local/share/mbx/bin/cargo
##[end-action id=__self_2.__run_6;outcome=success;conclusion=success;duration_ms=932]
##[group]Run rm -rf target/cargo-timings
�[36;1mrm -rf target/cargo-timings�[0m
�[36;1mnix develop --command just ci "$BASE"�[0m
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash -e {0}
env:
BASE: d7699f81ae9fb7dde8a463ee49072a7974d47317
CHECK_FAIL_FAST: 1
NEXTEST_TEST_THREADS: 24
MBX_CACHE_LINKS: 1
MBX_REMOTE_URL:
##[endgroup]
warning: ignoring untrusted flake configuration setting 'extra-substituters'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'fallback'.
Pass '--accept-flake-config' to trust it
building '/nix/store/5ixdjhzv99ci986z32d5d81qbza80kjr-nix-shell-env.drv'...
CI_STRICT=1 NEXTEST_PROFILE=ci sh/dispatch.sh ci "$BASE"
changed: base d7699f81ae9fb7dde8a463ee49072a7974d47317
ci: check rs started
ci: check obs_compile started
ci: check biome started
ci: check biome failed in 15s
##[group]check biome
uv run --no-project python sh/js/install.py frozen
[0.04ms] ".env"
bun install v1.4.2 (744846f84)
Resolving dependencies
Resolved, downloaded and extracted [1]
$ bun run --cwd js/libav build
$ bun build.ts
warning: ignoring untrusted flake configuration setting 'extra-substituters'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'.
Pass '--accept-flake-config' to trust it
warning: ignoring untrusted flake configuration setting 'fallback'.
Pass '--accept-flake-config' to trust it
+ @babel/parser@8.0.10
+ @biomejs/biome@2.6.4
+ concurrently@10.0.6
+ markdown-extensions@2.0.0
+ publint@0.3.25
+ remark-cli@12.0.1
+ remark-frontmatter@5.0.0
+ remark-lint-list-item-indent@4.0.1
+ remark-lint-maximum-line-length@4.1.1
+ remark-lint-no-duplicate-headings@4.0.1
+ remark-lint-no-undefined-references@5.0.2
+ remark-preset-lint-consistent@6.0.1
+ remark-preset-lint-recommended@7.0.1
+ remark-stringify@11.0.0
636 packages installed [8.62s]
bun biome check --error-on-warnings .
js/watch/src/audio/ring-buffer.test.ts:1048:19 lint/complexity/useIndexOf FIXABLE ━━━━━━━━━━━━━━━━
i Prefer Array#indexOf() over Array#findIndex() when looking for the index of an item.
1046 │ const [output] = read(buffer, frames(100), 1);
1047 │ expect(output.length).toBe(frames(100));
> 1048 │ const silence = output.findIndex((sample) => sample === 0);
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1049 │ expect(silence).toBe(staged);
1050 │ expect(output.slice(silence).every((sample) => sample === 0 || sample === 0.5)).toBe(true);
i This callback only tests for equality against a single value. This value can be passed directly to indexOf() instead.
i Unsafe fix: Replace Array#findIndex() with Array#indexOf()
1046 1046 │ const [output] = read(buffer, frames(100), 1);
1047 1047 │ expect(output.length).toBe(frames(100));
1048 │ - → → const·silence·=·output.findIndex((sample)·=>·sample·===·0);
1048 │ + → → const·silence·=·output.indexOf(0);
1049 1049 │ expect(silence).toBe(staged);
1050 1050 │ expect(output.slice(silence).every((sample) => sample === 0 || sample === 0.5)).toBe(true);
sh/gh/queue.test.ts format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
59 59 │ for (const step of checkRuns) assert.match(step.run, /just ci(-select)? --all\b/, `${step.name} must run --all`);
60 60 │ // Check runs the whole gate in one job.
61 │ - for·(const·step·of·check.jobs.check.steps)·assert.equal(step.env?.CHECK_MODULES,·undefined,·`${step.name}·sets·CHECK_MODULES`);
61 │ + for·(const·step·of·check.jobs.check.steps)
62 │ + → assert.equal(step.env?.CHECK_MODULES,·undefined,·`${step.name}·sets·CHECK_MODULES`);
62 63 │ // biome-ignore lint/suspicious/noTemplateCurlyInString: GitHub expression is literal YAML.
63 64 │ assert.equal(check.concurrency.group, "check-${{ github.event.pull_request.number }}");
Checked 2238 files in 4s. No fixes applied.
Found 1 error.
Found 1 info.
check ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Some errors were emitted while running checks.
error: "biome" exited with code 1
error: recipe `biome` failed on line 143 with exit code 1
##[endgroup]
ci: check rs cancelled in 15s
ci: check obs_compile cancelled in 15s
##[group]check rs
sh/rs/select.sh lint "$LIST"
rs: selecting the workspace
python3 sh/rs/stats-docs.py
# The environment is process-wide, so nothing writes it. A text check, because the
# clock lint's test allowances also silence clippy's disallowed_methods.
git grep --untracked -nE '(^|[^[:alnum:]_])(set_var|remove_var)[[:space:]]*\(' -- 'rs/*.rs'; [ $? -eq 1 ] || { echo "error: a write to the process environment: pass the value down, or run a test in a child with test_env::Env" >&2; exit 1; }
cargo fmt --all --check
RUSTDOCFLAGS="-D warnings" bash sh/local.sh cargo doc --locked --no-deps "$@"
error: recipe `lint-changed` was terminated on line 80 by signal 15
##[endgroup]
##[group]check obs_compile
-- The CXX compiler identification is GNU 16.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /nix/store/r5ri78axx1qggkjq3vawywlzglg70b5w-gcc-wrapper-16.2.0/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Configuring done (11.1s)
-- Generating done (0.0s)
-- Build files have been written to: /var/cache/github-runner-work/moq/moq/cpp/moq/build/package
[ 50%] Building moq-ffi
Blocking waiting for file lock on package cache
error: recipe `compile` was terminated on line 37 by signal 15
make[2]: *** [CMakeFiles/moq_ffi_cargo.dir/build.make:71: CMakeFiles/moq_ffi_cargo] Terminated
make[1]: *** [CMakeFiles/Makefile2:89: CMakeFiles/moq_ffi_cargo.dir/all] Terminated
make: *** [Makefile:136: all] Terminated
##[endgroup]
##[error]ci: check biome failed
ci: wall and CPU seconds per module
15 0 check rs (cancelled)
15 0 check obs_compile (cancelled)
15 33 check biome (failed)
16 33 whole run
error: recipe `ci` failed on line 119 with exit code 1
##[error]Process completed with exit code 1.
##[group]Run actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9
with:
name: cargo-timings
path: target/cargo-timings/cargo-timing-*.html
if-no-files-found: ignore
retention-days: 14
compression-level: 6
overwrite: false
include-hidden-files: false
archive: true
env:
BASE: d7699f81ae9fb7dde8a463ee49072a7974d47317
CHECK_FAIL_FAST: 1
NEXTEST_TEST_THREADS: 24
MBX_CACHE_LINKS: 1
MBX_REMOTE_URL:
##[endgroup]
With the provided path, there will be 1 file uploaded
Artifact name is valid!
Root directory input is valid!
Uploading artifact: cargo-timings.zip
Beginning upload of artifact content to blob storage
Uploaded bytes 114184
Finished uploading artifact content to blob storage!
SHA256 digest of uploaded artifact is 55474b856a8910f2b6c0bc73fc6f3ac0b62165ba5661e890beaa0ae089ee7ea4
Finalizing artifact upload
Artifact cargo-timings successfully finalized. Artifact ID 13814511628
Artifact cargo-timings has been successfully uploaded! Final size is 114184 bytes. Artifact ID is 13814511628
Artifact download URL: https://github.com/moq-dev/moq/actions/runs/42926345203/artifacts/13814511628
Post job cleanup.
##[start-action display=Run jdx/mr-boxington-action@88acf2bb50552c7c508cbac13e5f8c576b95b1de;id=__eb4ba899-6d69-42ed-b4ae-95dbe62fd00d.mbx]
##[end-action id=__eb4ba899-6d69-42ed-b4ae-95dbe62fd00d.mbx;outcome=skipped;conclusion=skipped;duration_ms=0]
Post job cleanup.
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git version
git version 2.55.0
Temporarily overriding HOME='/var/cache/github-runner-work/_temp/0fa991b5-ee71-4fdb-badb-f31e98b91efd' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --global --add safe.directory /var/cache/github-runner-work/moq/moq
Removing SSH command configuration
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
Removing HTTP extra header
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Removing includeIf entries pointing to credentials config files
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
[command]/nix/store/lg46w7hrjx7kylsh6645c9l975i8h43b-git-2.55.0/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
A job completed hook has been configured by the self-hosted runner administrator
##[group]Run '/nix/store/gx2v6q84b0w43bafm0whkdx93qyxbpps-ci-cache-gc.sh/bin/ci-cache-gc.sh'
shell: /nix/store/1mv3qz005gkbalxfghk4y3s8ayv4d2dl-bash-interactive-5.3p15/bin/bash --noprofile --norc -e -o pipefail {0}
##[endgroup]
evicted 0 objects and 0 action results (2.0 MiB logical); 49.9 GiB logical remain
dropped 2 session event streams
Cleaning up orphan processes
(written by quest land watch) |
|
codex, gpt-6.1-sol, medium effort land fixer note:
(written by codex, gpt-6.1-sol, medium effort) |
|
codex, gpt-6.1-sol, medium effort land fixer: sh/gh/queue.test.ts format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Formatter would have printed the following content:
59 59 │ for (const step of checkRuns) assert.match(step.run, /just ci(-select)? --all\b/, `${step.name} must run --all`);
60 60 │ // Check runs the whole gate in one job.
61 │ - for·(const·step·of·check.jobs.check.steps)·assert.equal(step.env?.CHECK_MODULES,·undefined,·`${step.name}·sets·CHECK_MODULES`);
61 │ + for·(const·step·of·check.jobs.check.steps)
62 │ + → assert.equal(step.env?.CHECK_MODULES,·undefined,·`${step.name}·sets·CHECK_MODULES`);
62 63 │ // biome-ignore lint/suspicious/noTemplateCurlyInString: GitHub expression is literal YAML.
63 64 │ assert.equal(check.concurrency.group, "check-${{ github.event.pull_request.number }}");
Checked 2238 files in 4s. No fixes applied.
Found 1 error.
(written by codex, gpt-6.1-sol, medium effort) |
…omments Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Changes since the prior Pullfrog review (999903c); the rest of the PR's scope was covered by earlier reviews.
- Corrected the stale "next daily refresh" comments in
sh/gh/cache.sh,sh/gh/cache-runtime.sh, andinfra/nix/justfileto describe the current invariant: each Cache run refreshes its own commit. - Reformatted
sh/gh/queue.test.tsto satisfy Biome, restoring the merge-queue admission the format error had blocked. - Merged
main, resolving the modify/delete conflicts by dropping the edits toquest/m3/audit-ci.mdandquest/m1/audit-merge.md; the resulting diff still carries every intended workflow change. - Verified the delta:
bun test sh/gh/queue.test.ts sh/gh/alert.test.tspasses (9 tests),bunx biome check sh/gh/queue.test.tsis clean, andsh/gh/alert.sh check-coveragefinds all 34 alertable workflows watched.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Finishes quest/m0/ci/trim.md: every workflow now produces a signal someone reads, or is gone.
Changes
just -n infra nix roots ...expanded--inputs-fromto<checkout>/../.., because in a Just modulejustfile_directory()is the root justfile's directory, not the module's. Every warm and runtime job since 2026-11-07 failed there withdoes not contain a 'flake.nix'.infra/nix/justfilenow usessource_directory(), which resolves to the checkout whether run from the root or frominfra/nix; with dummy keys the recipe now gets past the Nix build to rclone's upload (which fails only on the fake credentials). Kept rather than deleted because nothing else covers it: onlycache.ymlwritesnix-ci-moq-dev(the dev shells the hosted jobs substitute,@moq/libav, and themoq-relay/moqclosures Smoke's nix channel pins viajust gh cache-rev);release-nix.ymlwrites only the tag bucket.Cacheleavesalert.sh's CI-only set and joinsalert.yml, so a push failure posts to Discord.cache-refresh.ymland itsjust gh cache-refreshrecipe. Each Cache run already refreshes its own commit's closure, andmainmerges many times a day.infra/README.mdand Smoke's comments say so.mutants.ymland its now-callerless tooling:just rs mutants,sh/rs/mutants.sh,sh/rs/mutants-cargo.sh,.cargo/mutants.toml, andcargo-mutantsin the dev shell.main. Its push-burst concurrency group is gone. It joinsalert.yml's schedule-only list, asalert.test.tsrequires for cron workflows.release(branches: [release], always--all).mainrequires only theQueuecontext (checked themainruleset), so nothing waited on it there.mainpush trigger; the queue'sjust cirunsquest check.bench/README.md's CodSpeed text and the comments that described the deleted daily refresh (sh/gh/cache.sh,sh/gh/cache-runtime.sh,infra/nix/justfile).mainhas since deletedquest/m3/audit-ci.mdandquest/m1/audit-merge.md(merged into the recurring audits), so the merge drops this branch's edits to them.moq-dev/moq#8048 (Cachix retire) no longer edits
cache.yml; its remaining wait is bucket sizes, which a working Cache helps.Choices made without asking
cache.ymlrather than deleting it (reasons above).check.yml'sfetch-depth: 0: it existed for the dispatcher's base diff (assh/gh/queue.test.tssaid), and with--allthe dispatcher skipssh/changed.shandsh/large-files.shdiffs against the empty tree.sh/gh/queue.test.tsnow asserts the release-only trigger and--all.Caused by
rootsrecipe withjustfile_directory() / "../..", which points above the checkout from a module.Checks
just gh check(actionlint, zizmor, alert coverage and tests, test inventory): passed.quest check --base origin/main: passed.just check: every selected module passed (obs_compile, biome, js, markdown, gh, bench, drill, workers, quest, obs, shell, large_files, text, rs, nix, justfile, flake, toml; test js, rs, gh). The full run outlasted the 2-hour task limit on a loaded host, soghandtomlwere rerun on the final head;check cwas not selected.Iterate (2026-11-11)
origin/main(no rebase): resolved the modify/delete conflicts on the three quest files by deleting them, asmaindid.sh/gh/queue.test.tsthat dropped the PR from the merge queue.quest/m3/audit-ci.mdis moot:maindeleted the file.quest/m4/mutants.md(added onmainby moq-dev/moq#8472) plans a new nightly cargo-mutants run on the route and resume code. This PR still deletes the old unused mutants lane; that m4 quest adds its own job and.cargo/mutants.toml.quest gate just checkon the merged head: passed (every module, including rs and flake).quest gate just cidid not run: the gate waited on host load until the 85-minute limit stopped it.Follow-ups
None recommended.
Public API: none. Wire: none.
Models
Size: M
Implementer: Claude Code, Claude Opus 5.5, medium effort
Implementer: Claude Code, claude-opus-5-5, medium effort (iterate, S)
Review
Rewritten by
quest reviewafter each round.01a1ca01-8eb3-7d91-ae0f-998380763794, round 1The CI changes follow the recorded decisions and preserve release admission; no actionable defects were found, but builds and tests were not run, as instructed.(Written by Claude Opus 5.5 with medium)