Skip to content

Assert the coordinator's wake-word rows in fleet-connectivity - #409

Open
mecattaf wants to merge 1 commit into
mainfrom
fix/fleet-connectivity-artifact-count
Open

mecattaf wants to merge 1 commit into
mainfrom
fix/fleet-connectivity-artifact-count

Conversation

@mecattaf

Copy link
Copy Markdown
Owner

The failure

nix flake check --offline --no-build has been red on main (a727e6d) at the fleet-connectivity check:

checking derivation checks.x86_64-linux.fleet-connectivity...
error:
       … while checking the derivation 'checks.x86_64-linux.fleet-connectivity'
         at flake.nix:2743:9
       error: list of size '11' is not equal to list of size '9',
       left hand side is '[ "qwen36-35b-a3b-mtp-ud-q8-k-xl" "gemma4-12b-it-q8-0"
       "gemma4-12b-it-mtp-q8-0" "fara15-9b-q8-0" "fara15-9b-mmproj-bf16"
       "openwakeword-baker-compat-v051" "openwakeword-alexa-v051"
       "qwen3-tts-1.7b-base-q8-0" "qwen-k2so-midway-b"
       "parakeet-tdt-0.6b-v3-onnx" «1 item elided» ]',
       right hand side is '[ ... 9 rows ... ]'

The two artifacts

openwakeword-baker-compat-v051 and openwakeword-alexa-v051.

They are legitimate, not stale. Commit 6a92731 ("Restore coordinator desktop with shared seat apps and speech", 2026-09-16) flipped myDisplay.enable back on for the coordinator and made it a physical seat again. The same commit asserts that speech-wake runs on both seats, and declares the two rows in hosts/coordinator/default.nix — the client has declared the same pair since 49053f9. The wake listener defaults to exactly these paths:

pkgs/speech-wake/wake.py:412: --frontend    /var/lib/local-models/openwakeword-baker-compat-v051
pkgs/speech-wake/wake.py:413: --classifier  /var/lib/local-models/openwakeword-alexa-v051/alexa_v0.1.onnx

Both are already in the catalogue, and the check's own catalogue assertion (builtins.attrNames localModelCatalog.artifacts) already lists them. Only the coordinator's wanted set assertion was left behind. That commit rewrote a dozen assertions in flake.nix and missed this one, so the check has been red since it landed.

Declared order is modules/strix.nix (5 coordinator GGUFs), then hosts/coordinator/default.nix (the wake pair), then modules/qwen-tts.nix (4 rows, mkAfter) — 11 in total. The two rows are inserted at their declared position.

Why the list is updated rather than derived

The check's own comment states the intent:

Exact lists, not membership tests, so a new hundred-gigabyte row has to be argued for here in writing before it can cost a twin its disk.

Deriving the expectation from services.local-models.artifacts would make the assertion tautological and delete exactly what it was built to catch. So the allowlist is updated in place and the argument is written next to the rows: 3.9 MiB for the pair (3272227 + 854246 bytes per lib/speech-intake-models.json), against the hundred-gigabyte GGUF rows above it, and the listener cannot start without them.

Verification

result
nix flake check --offline --no-build on main a727e6d fails at fleet-connectivity
same, on this branch all checks passed!

No other check was red before or after. Nothing was switched, rebuilt, or deployed.

🤖 Generated with Claude Code

Restoring the coordinator as a physical seat (6a92731) put `speech-wake`
on both seats and declared the two openWakeWord rows its listener already
defaults to. That commit rewrote a dozen assertions in flake.nix but left
the exact artifact list in `fleet-connectivity` behind, so the check has
been red on main ever since: list of size 11 is not equal to list of size 9.

The list is a deliberate hand-maintained allowlist — its own comment says
an exact list exists so a new row "has to be argued for here in writing
before it can cost a twin its disk" — so it is updated in place rather
than derived from the declarations. The argument is written next to the
rows: 3.9 MiB for the pair, and the listener cannot run without them.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant