From 5f69aeb2e35462bd9c14f3012c735e700fbbf051 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 10 Nov 2026 12:46:40 -0800 Subject: [PATCH 1/7] chore(quest): claim quest/m0/windows-host.md Quest-Claim: 3e04ade8005e8d17 From cb70dd885d4333dc60fcc24207d42ba33cdaa79c Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Tue, 10 Nov 2026 14:38:57 -0800 Subject: [PATCH 2/7] quest(m0/windows-host): the windows PC replaces nixos2 as the Windows host Co-Authored-By: Claude Opus 5.5 --- quest/m0/app-windows.md | 2 +- quest/m0/windows-host.md | 89 +++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 35 deletions(-) diff --git a/quest/m0/app-windows.md b/quest/m0/app-windows.md index 9ed96baa..89f5a483 100644 --- a/quest/m0/app-windows.md +++ b/quest/m0/app-windows.md @@ -31,7 +31,7 @@ since a hosted runner does it without the host this quest waits on. ## Required - [The studio builds for Windows in CI](/quest/m0/windows-build.md) - the crate compiling for Windows before it is run there -- [nixos2 boots Windows for agents](/quest/m0/windows-host.md) - the Windows machine this runs on +- [The windows PC hosts Windows agents](/quest/m0/windows-host.md) - the Windows machine this runs on ## Related diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index 27e50b07..4d39d870 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -1,43 +1,64 @@ -# [S] nixos2 boots Windows for agents +# [S] The windows PC hosts Windows agents ## Goal -nixos2 boots Windows by default, and an agent on the maintainer's Mac reaches -it with `ssh nixos2`, builds `moq-studio --features capture` there, and finds -a camera and a microphone to capture, so Windows quests run on real hardware. +An agent running natively on the maintainer's Windows PC (Tailscale name +`windows`) builds `moq-studio --features capture` there and lists a camera +and a microphone to capture, so Windows quests run on real hardware. ## Plan -Decided 2026-11-06 (maintainer, /quest-unblock): nixos2 becomes the Windows -host. - -nixos2 already dual-boots: Windows sits on its own partition (`nvme0n1p3`, -600 GB, last booted 2026-09-14) with firmware entry `Boot0003` (Windows Boot -Manager); NixOS boots through systemd-boot on `nvme0n1p4`. The switch: - -1. From NixOS, an agent moves `Boot0003` to the front of the firmware boot - order and reboots: `sudo efibootmgr -o - 0003,0006,0000,0004,0005,0007,0001,0002,0008,0009,000A,000B,000C`, from - `nix shell nixpkgs#efibootmgr` since nixos2 lacks it (passwordless sudo). - The order before the switch, and its revert, is - `0006,0000,0003,0004,0005,0007,0001,0002,0008,0009,000A,000B,000C` - (`0006` is systemd-boot). NixOS stays - installed; boot it once with `bcdedit /set {fwbootmgr} bootsequence - {}` from Windows when a Linux run needs it. -2. The maintainer turns on OpenSSH Server (see Waiting). -3. Over ssh, an agent installs the toolchain with `winget`: rustup with the - MSVC target, Visual Studio Build Tools with the C++ workload, Git, and - `just`. It records the host key change for `nixos2` and what it installed - in this PR. +Decided 2026-11-10 (maintainer): ✅ the `windows` PC is the Windows host +(rejected: rebooting nixos2 into its Windows partition, the 2026-11-06 plan). +Agents (Claude Code, Codex) already run on it natively through T3 Code, so no +ssh hop or OpenSSH Server is needed, and nixos2 stays a Linux host. + +The host, as found on 2026-11-10: + +- Hostname `WINDOWS`, Tailscale `windows` (100.73.17.32), Windows 11 Home + 10.0.26200, i7-8700, 16 GB RAM, NVIDIA RTX 2070 (driver 32.0.15.9186), one + 2560x1440 display. +- Toolchain: rustup with `stable-x86_64-pc-windows-msvc` as default, plus + 1.98.1, which rustup installed from `rust-toolchain.toml` on first use; + Visual Studio Build Tools 2022 17.14 with the VC x86/x64 tools; CMake 4.3; + Git 2.43; just 1.52; `quest` 0.2.0 built from source (no Nix). No nasm or + clang, which nothing has yet shown the build needs. +- Capture devices: no camera. Audio inputs are virtual only: Steam Streaming + Microphone and VB-Audio Virtual Cable (`CABLE Output` records what is + played to `CABLE Input`). + +No real microphone is needed: VB-Audio's `CABLE Output` is a WASAPI capture +endpoint like a USB microphone's, so playing a tone into `CABLE Input` drives +the same capture path [Studio on Windows](/quest/m0/app-windows.md) runs, with +a known signal to check. A camera has no such stand-in (see Waiting). + +There is no Nix dev shell, so agents here run cargo and `just` natively; +`just check` steps that call Nix tools cannot run. + +The remaining agent step: build with +`quest gate cargo build -p moq-studio --features capture`, then list devices +by starting the studio, whose setup and Devices panel enumerate cameras, +displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). Compile +errors that only Windows shows are +[the CI build quest's](/quest/m0/windows-build.md) to fix, not this one's. + +## Hosts + +- windows - the work is setting up this host ## Waiting -- Maintainer: say nixos2 is free to reboot. On 2026-11-09 it ran a Claude - Code session and a rind worktree's node process, and an agent cannot tell - whether such work is finished. Check: the maintainer says so, or `w` and - `ps` on nixos2 show no other session's work. -- Maintainer: at nixos2's console once it boots Windows, turn on OpenSSH - Server (Settings > System > Optional features), add the Mac's public key to - `C:\ProgramData\ssh\administrators_authorized_keys`, and plug in a USB - camera and a microphone, which nixos2 lacks. An agent cannot reach Windows - before sshd runs. Check: `ssh nixos2 ver` prints a Windows version. +- Maintainer: leave 4 GiB of memory available on `windows` while an agent + builds there. `quest gate` admits a build only once available memory + reaches min(4 GiB, RAM/4), and with the desktop apps running (OneDrive's + sync service alone held 3 GB) the PC sat at 2.6 to 3.1 GB available for two + hours on 2026-11-10, so the build never started. An agent cannot close the + maintainer's apps, and building outside the gate is against the repo's + rules. Options: quit OneDrive, ChatGPT, and Discord during agent runs, or add + RAM (recommended: add RAM, since 16 GB leaves a linker little room beside a + desktop). Check: `(Get-Counter '\Memory\Available MBytes').CounterSamples` + reads above 4096. +- Maintainer: plug a USB camera into `windows`. It has none, and Media + Foundation's camera source, the path [Studio on Windows](/quest/m0/app-windows.md) + runs, needs a device; no virtual camera ships with Windows. Check: the + studio's Devices panel lists a camera. From 673825d58d4bd77b89866f558305d0d1d6708278 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 12 Nov 2026 01:02:48 -0800 Subject: [PATCH 3/7] quest: note windows rejects ssh from other hosts Co-Authored-By: Claude Opus 5.5 --- quest/m0/windows-host.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index 4d39d870..a2f6d1c0 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -11,7 +11,7 @@ and a microphone to capture, so Windows quests run on real hardware. Decided 2026-11-10 (maintainer): ✅ the `windows` PC is the Windows host (rejected: rebooting nixos2 into its Windows partition, the 2026-11-06 plan). Agents (Claude Code, Codex) already run on it natively through T3 Code, so no -ssh hop or OpenSSH Server is needed, and nixos2 stays a Linux host. +ssh hop is needed, and nixos2 stays a Linux host. The host, as found on 2026-11-10: @@ -26,6 +26,9 @@ The host, as found on 2026-11-10: - Capture devices: no camera. Audio inputs are virtual only: Steam Streaming Microphone and VB-Audio Virtual Cable (`CABLE Output` records what is played to `CABLE Input`). +- SSH (2026-11-12): an OpenSSH server runs (ED25519 host key) but rejects the + Linux host's key (publickey denied), so other hosts cannot reach it by ssh; + agents run on it directly instead. No real microphone is needed: VB-Audio's `CABLE Output` is a WASAPI capture endpoint like a USB microphone's, so playing a tone into `CABLE Input` drives From cb271b8315431f2e5ea87ccf392064b65eda2e39 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 12 Nov 2026 01:45:08 -0800 Subject: [PATCH 4/7] quest(m0/windows-host): own host build errors, say why a camera needs plugging in Co-Authored-By: Claude Opus 5.5 --- quest/m0/windows-host.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index a2f6d1c0..3ee0ee74 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -41,9 +41,9 @@ There is no Nix dev shell, so agents here run cargo and `just` natively; The remaining agent step: build with `quest gate cargo build -p moq-studio --features capture`, then list devices by starting the studio, whose setup and Devices panel enumerate cameras, -displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). Compile -errors that only Windows shows are -[the CI build quest's](/quest/m0/windows-build.md) to fix, not this one's. +displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). The +nightly's Windows job (`.github/workflows/nightly.yml`) compiles the studio in +CI, so a build error here is this host's, and this quest's to fix. ## Hosts @@ -63,5 +63,9 @@ errors that only Windows shows are reads above 4096. - Maintainer: plug a USB camera into `windows`. It has none, and Media Foundation's camera source, the path [Studio on Windows](/quest/m0/app-windows.md) - runs, needs a device; no virtual camera ships with Windows. Check: the - studio's Devices panel lists a camera. + runs, needs a device; no virtual camera ships with Windows. An agent could + register a Media Foundation virtual camera (`MFCreateVirtualCamera`) only + with a media source of its own, which is + [the Windows virtual camera](/quest/m0/vcam/windows.md)'s deliverable and + not built yet; a USB camera also covers the formats real hardware sends. + Check: the studio's Devices panel lists a camera. From 8ab2b6a6ced5c570d8f0714bfabf2de94e36adb3 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 12 Nov 2026 01:47:40 -0800 Subject: [PATCH 5/7] quest(m0/windows-host): cite the Windows CI job as #129's, not main's Co-Authored-By: Claude Opus 5.5 --- quest/m0/windows-host.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index 3ee0ee74..f5a3a63c 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -41,9 +41,11 @@ There is no Nix dev shell, so agents here run cargo and `just` natively; The remaining agent step: build with `quest gate cargo build -p moq-studio --features capture`, then list devices by starting the studio, whose setup and Devices panel enumerate cameras, -displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). The -nightly's Windows job (`.github/workflows/nightly.yml`) compiles the studio in -CI, so a build error here is this host's, and this quest's to fix. +displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). +[moq-dev/studio#129](https://github.com/moq-dev/studio/pull/129) adds a +nightly Windows job that compiles the studio in CI, and its run on +windows-latest built it. A build error that job also shows is fixed in CI's +quest or PR; one only this host shows is this quest's to fix. ## Hosts From c9b02d79809294c49feddd6210129603c384bc5e Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 12 Nov 2026 08:41:17 -0800 Subject: [PATCH 6/7] quest(m0/windows-host): own every build error on the host Co-Authored-By: Claude Opus 5.5 --- quest/m0/windows-host.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index f5a3a63c..a351382b 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -42,10 +42,11 @@ The remaining agent step: build with `quest gate cargo build -p moq-studio --features capture`, then list devices by starting the studio, whose setup and Devices panel enumerate cameras, displays, windows, and audio inputs (`rs/moq-studio/src/devices.rs`). -[moq-dev/studio#129](https://github.com/moq-dev/studio/pull/129) adds a -nightly Windows job that compiles the studio in CI, and its run on -windows-latest built it. A build error that job also shows is fixed in CI's -quest or PR; one only this host shows is this quest's to fix. +Whatever fails to build on this host is this quest's to fix. + +Decided 2026-11-12 (maintainer, /quest-review checkpoint): ✅ this quest owns +every build error on the host (rejected: handing errors CI also shows to the +CI build quest, which needs it as a prerequisite; merging that split as is). ## Hosts From f53dbc8b847abc06668ea28b763f84b066e2dd16 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 12 Nov 2026 09:03:07 -0800 Subject: [PATCH 7/7] quest(m0): app-windows runs on the windows host; clarify the build-error decision Co-Authored-By: Claude Opus 5.5 --- quest/m0/app-windows.md | 4 ++++ quest/m0/windows-host.md | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/quest/m0/app-windows.md b/quest/m0/app-windows.md index 89f5a483..9f14069f 100644 --- a/quest/m0/app-windows.md +++ b/quest/m0/app-windows.md @@ -28,6 +28,10 @@ Decided 2026-11-09 (maintainer, /quest-audit): ✅ compiling for Windows is [its own quest](/quest/m0/windows-build.md) (rejected: folding it in here), since a hosted runner does it without the host this quest waits on. +## Hosts + +- windows - it runs the studio on real Windows hardware + ## Required - [The studio builds for Windows in CI](/quest/m0/windows-build.md) - the crate compiling for Windows before it is run there diff --git a/quest/m0/windows-host.md b/quest/m0/windows-host.md index a351382b..870c755c 100644 --- a/quest/m0/windows-host.md +++ b/quest/m0/windows-host.md @@ -46,7 +46,8 @@ Whatever fails to build on this host is this quest's to fix. Decided 2026-11-12 (maintainer, /quest-review checkpoint): ✅ this quest owns every build error on the host (rejected: handing errors CI also shows to the -CI build quest, which needs it as a prerequisite; merging that split as is). +CI build quest, which would make that quest this one's prerequisite; merging +that split as is). ## Hosts