design 005 piece 1+3: import-cache preflight for probes, and the core count in machines.md nf-6aku ← Beads

closed priority 2 task unassigned activesession:design-005

Twinned from https://github.com/cfsh/ninefold/issues/738 by tools/beads/import_github.py's reconcile pass.

Pieces 1 and 3 of the design 005 work breakdown (§8), under #686. Piece 3 is a one-liner the doc says to fold into piece 1, so it ships here.

Covers S1 (import cache) and S16 (notes/machines.md core count). Closes #619.

What piece 1 is for

.gitignore excludes .godot/, dotnet build knows nothing about it, and the running game never imports — so nothing in this repo builds the Godot import cache, and nothing checks it. A probe run without it loads no textures and no audio and exits 0:

``` ERROR: Unable to open file: res://.godot/imported/triangle.png-2b56….ctex ERROR: Failed loading resource: res://…/36_C4_m60.wav. …probe done — screenshots in probe_out/ ```

probe.py's docstring already makes this argument about the *other* build artifact — *"a stale [DLL] is indistinguishable from a genuine regression in the log"* — and this is the same failure with nothing standing behind it.

It is live on this box, not hypothetical. Three dev worktrees (argo, review-cadence, session-state) have .godot/ at 8.6 MB — mono/ only — so every UI gate run from them has been rendering without its glyph badges.

⚠️ It is a correctness fix. Design 005 S1's 1.8× does not reproduce

The doc calls a warm cache *"the single largest per-probe win, ~1.8×"* (§0, §2.2, S1). Measured here it is not a win at all, and the sign is wrong. Six paired alternating runs of tonapse-home on nf-dev-sg, each pair back to back so drifting box load cancels:

| pair | warm | cold | |---|---|---| | 1 | 9.25 | 8.84 | | 2 | 9.39 | 8.99 | | 3 | 13.29 | 10.76 | | 4 | 9.74 | 9.00 | | 5 | 10.13 | 9.58 | | 6 | 11.86 | 9.43 |

Warm is slower in 6 of 6, by 0.4–2.4 s — a warm run loads 222 MB of resources where a cold one fails fast. Two candidate explanations for the doc's numbers were tested and both refuted: there is no first-run project-setup penalty (three runs after wiping .godot but for mono/: 9.57 / 9.00 / 8.84 s, flat), and dotnet build is only ~3 s of a warm probe.py. The likeliest reading is that 21.6 s and 11.8 s were taken unpaired at different box loads — load alone swung identical runs here between 8.8 s and 13.3 s.

Consequence for the chunk, not just for this piece: piece 2's parallelism is the actual cost win in Phase 1, and S1 should be read as #619's fix. Filed here rather than as a doc amendment because the suggestion still ships unchanged — only its justification moves.

What the render actually loses

tonapse-home, cold vs warm, same commit:

| shot | differing px | |---|---| | 01-home | 1014 (0.049%) | | 02-focus-moved | 3210 (0.155%) | | 03-after-accept | 1488 (0.072%) |

Independently reproducing #619's 1995 px / 0.096% on focus-ring. After the preflight, 01 and 03 are byte-identical to the warm reference.

⚠️ 02-focus-moved is non-deterministic on its own — three consecutive runs at a constant warm cache differ by 320 and 488 px. That is unrelated to the cache and is a datapoint for pieces 4/5 (#668's frame-counted waits); noted here so nobody re-measures it against this piece.

Shape
Piece 3 / S16

The doc says notes/machines.md:100 claims 2 cores against a measured 4. nproc reports 8 today (15 GiB RAM). All three disagree, so the line now says to measure rather than pinning a fourth number that will rot the same way — and anything sizing itself to the host reads nproc at runtime. This matters directly for piece 2.

Refs #686 · Refs #682 · Closes #619

Dependencies

None.

Comments

No comments.

Add a comment