Repository navigation
fix: coordinate root workspace dependency installation - #7978
Conversation
Quest-Claim: eb53a5a92675d9d8
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Quest-Claim: c8e26c3b75275cd5
…s' into chore/quest-iterate-pr-7978
…s' into quest/m0/test-flakes-2/pulse-dbus
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
…s' into fix/concurrent-media-installs
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
|
Design change: local Claude review identified that serializing installs alone still permits a later install to relink dependencies beneath an earlier run's readers. The harness now checks a dependency and postinstall-input fingerprint under the checkout lock and reuses an unchanged installation. Root installs in the test entry points share that helper. Playback remains concurrent. Two overlapping pause runs pass with this implementation. (Written by GPT-6.1 Sol with medium effort) |
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 5 minutes. View limit details
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Reviewed commit 9a2b720 against base e4b1aa0. No actionable findings in the coordinated-installer changes.
Inspected the lock/fingerprint/install/stamp sequence, postinstall inputs and libav output check, updating versus frozen callers, contention regression test, and root-workspace caller migrations. The post-update fingerprint is recorded only after a successful install. Caller paths resolve consistently, and the remaining bare installs found are independent Worker/smoke or disposable baseline workspaces. This assessment uses the documented contract: dependency inputs remain unchanged during concurrent consumers, and native Windows recipes run sequentially.
Verification limits: GitHub-only static review. I did not run the contention test, overlapping media suites, builds, or native Windows setup, or independently verify the reported playback results. Exact-head Check remains in progress: https://github.com/moq-dev/moq/actions/runs/42326904638. This is not runtime validation or merge approval.
(Written by review (OpenAI))
There was a problem hiding this comment.
ℹ️ No blocking issues — two small suggestions inline.
Reviewed changes
- Coordinated installer — new
sh/js/install.pyfingerprintsbunversion, Nix presence, every workspace manifest, the lockfile, and the libav/patches inputs, then either reusesnode_modulesunder a checkoutflockor runs onebun installinfrozenorupdatemode. - Repo-wide routing — check/fix recipes, JS benches, demos, media/interop/audio-quality/drain/portrait/conformance suites, bench and size tooling,
sh/dispatch.sh, and the interop, nightly, and release-js workflows all call the installer; separate trees (Smoke,infra/*,demo/pub, disposable baselines) keep their own installs. - Toolchain wiring —
uvdeclared on thebiome,js,drafts,markdown, andghdispatch modules, newjust js install frozen|updaterecipe,setup.baton the same path. - Evidence —
sh/js/install.test.pydrives a stubbunplus a FIFO to prove contention and post-update reuse;sh/coverage.test.pyandsh/js/workspace.test.pyadapted.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
kixelated
left a comment
There was a problem hiding this comment.
Automated review by review (OpenAI)
Incremental review of head f47fcd364b0367ca7050c1cc2d7a2bdf02dbd83c against base fba41806e110029f803818b32c6c7e2d375adcf0, following reviewed head 9a2b7208157125923d8e37f02d64a1c7d5aecfb9.
No new actionable findings. The installer now attempts a nonblocking exclusive lock, emits a flushed stderr notice only on contention, then waits for the same exclusive lock before fingerprinting or installing. The overlap fixture exercises that real notice rather than monkey-patching flock. Combining the second recipe's stderr/stdout means the stub installer's unexpected ready output fails the assertion when locking is removed, instead of leaving the fixture waiting on the wrong stream. Post-update reuse and the single-install assertion remain covered. The main merge preserves the native push-to-talk build while retaining coordinated dependency setup.
Direction: retain the contention notice and regression test; no changes requested in this incremental delta. The unchanged-input concurrency contract and sequential native Windows limitation remain applicable.
Verification limits: GitHub-only static comparison of commits, current base delta, installer and fixture. I did not run quest context, tests, the lock-removal mutation, overlapping playback, builds or Windows setup, and did not independently verify the reported CI results. Main's merged feature changes were not re-reviewed. This is not runtime validation or merge approval.
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
- Contention notice —
sh/js/install.pynow probes the install lock withLOCK_EX | LOCK_NB, printswaiting for another workspace dependency installto stderr when contended, then blocks on the same lock; uncontended reuse stays silent. Closes the earlier "silently looks hung" thread. - Fixture reads the real notice —
sh/js/install.test.pydropped itssitecustomizelock tracer and asserts the message produced by the actual recipe path, so removing the locking block fails the test. - Unchanged since the prior review — the repo-wide routing, fingerprint inputs,
uvtool wiring, and quest deletion were re-read in full and hold; the api-diff--ignore-scriptsconcern is withdrawn against the recorded scope decision (I verifiedapi-diff.ymlrunsnix develop --command just api-diff). - Scope check — no root-workspace
bun installcall site remains; the surviving ones are separate trees (test/smoke,infra/*,demo/pub, theworkers.shloop that skips the root lockfile) or disposable worktree baselines.
deepseek-v4.1-flash-1017 (free via Pullfrog for OSS) | 𝕏

Problem
Concurrent Bun installs relink the root workspace beneath running media tests, producing
EEXISTor invalidating an earlier invocation's cached dependencies.Approach
Use
sh/js/install.pyas the single coordinated root workspace installer. It locks dependency setup and reuses an unchanged installation based on Bun, manifests, lockfile and postinstall inputs. Every caller choosesfrozenvalidation orupdatelockfile behavior; an updating install stamps its resulting inputs. Playback remains concurrent.Route checks/fixers, JS recipes, demos, benchmarks, media suites, tooling and workflow setup through it. Independent Worker/smoke dependency trees and disposable baseline checkouts retain separate installs.
Decided 2026-11-07 (maintainer, /quest-complete), installer scope: ✅ repo-wide. Promote the coordinated installer (
test/lib/install.pyat head 6e73247) to the single entry point for every root workspacebun install: check/fix, JS recipes, benchmarks, and remaining media suites, with explicit frozen versus updating modes. Not chosen: test entry points only with the broader finding refuted; or landing at test scope with a separate repo-wide quest. Reason: a concurrent uncoordinated install from any parallel session can invalidate a running test's cached install, so only the repo-wide fix removes the race at its root.Decided 2026-11-06 (maintainer, /quest-complete): ✅ retain
pulse-dbus.mduntil overlapping media runs pass. Two overlapping pause runs pass; the completed quest and its links are removed. Existing PulseAudio isolation is retained.Impact
just js install frozen|updateexposes both modes.Alternatives
Locking only the install command still permits a later installer to relink dependencies beneath readers. Caching test entry points alone leaves normal development installers able to invalidate that cache. A shared repo-wide installer removes those bypasses.
Validation
Round-5 validation on
f47fcd364b0367ca7050c1cc2d7a2bdf02dbd83c:nix develop -c quest gate just cipassed (exit 0), including all 11,938 Rust tests. Installer, workspace and coverage fixtures passed; quest validation (600 documents) andgit diff --checkpassed.Mutation proof: temporarily removed the installer's locking block.
nix develop -c python sh/js/install.test.pyfailed (exit 1) in 0.212 seconds withreadyinstead of the contention notice. Restored locking and reran successfully. The mutation is not committed. Logs:.tmp/mutation.log,.tmp/overlap-restored.log,.tmp/ci.log,.tmp/review5.json.Iteration: merged
origin/main, preserving its native-player push-to-talk build and routing setup through the coordinated installer. Added a flushed stderr notice only when the workspace install lock is contended. The existing overlap fixture asserts that real notice.nix develop -c quest gate just ci: exit 0 on the committed source (ccde7512afccd0d12abb625b2523296c57bc9221), including all 11,938 Rust tests.nix develop -c python sh/js/install.test.pyand quest validation pass. Current logs:.tmp/ci.log,.tmp/review.json.Pullfrog api-diff finding refuted against the recorded repo-wide scope decision and existing Nix runner; lock-wait visibility finding fixed. Replies are on both threads.
Two overlapping
just test media --media-cases pauseruns and a concurrent rootjust biome: all exit 0 on the uv-based implementation. The media runs resumed 84/89 frames and each presented 121 frames at 30.3fps, with tones 152/151dB above the floor. No PulseAudio or D-Bus collision.Deterministic root/test setup overlap: pass. The test observes the second installer blocked on the real lock before releasing the first; removing the lock makes the test fail. An updating install's changed lockfile is reused correctly.
just jsdry run retains its default check recipe. Coverage and selector fixtures pass.quest check --base origin/mainandgit diff --checkpass.Final
nix develop -c quest gate just ci: pass (exit 0). Its full Rust suite passed 11,933 tests. Earlier host memlock exhaustion also reproduced on unchanged main and is tracked in moq-dev/moq#8051.Native Windows execution is unavailable here. The native Windows path retains sequential recipe support and uses uv for Python; Unix coordinates parallel runs. Dependency/postinstall edits require stopping active consumers before reinstalling.
Evidence in this checkout:
.tmp/ci-clean.log,.tmp/overlap-approved.log,.tmp/media-{a,b}.log,.tmp/mutation.log,.tmp/review4.json.Review
Claude Code, Claude Opus 5.5, medium effort reviewed
f47fcd364b0367ca7050c1cc2d7a2bdf02dbd83cin round 5 of the existing session, with--responses: no findings. Round 4's low-severity finding is fixed: the overlap fixture reads combined stdout/stderr, so a second install'sreadyoutput fails the contention assertion instead of hanging.Decided 2026-11-07 (maintainer, /quest-complete), fourth-round design checkpoint: ✅ continue with the current approach. Not chosen: merge as is, rethink, or drop. No design change; continue the branch's existing review session and fix the combined-stream overlap fixture.
Follow-ups
Host locked-memory capacity is already tracked by moq-dev/moq#8051.
(Written by GPT-6.1 Sol with medium effort)