Twinned from https://github.com/cfsh/ninefold/issues/908 by tools/beads/import_github.py's reconcile pass.
Implement T5 from design_docs/005b-affected-probe-selection.md (§3). Depends on T1 (merged — #876), otherwise independent of T2–T4/T6.
Goal: every scene gets one short, assertion-led smoke probe (no pixel pins), and probes carry a marking that separates the gating set from the catchup set — 005's S7 and S4b.
⚠️ The design doc's scene list is stale — audit live state, don't trust it. It says "scenes today: games/tonapse/tonapse.tscn, games/explore/explore.tscn, games/explore/explore_ship.tscn (no probe yet)" — but find games -maxdepth 2 -iname '*.tscn' on main @ 55251d3 shows 8 scenes: tonapse, explore, explore_ship, blockbrains, blockbrains/board, hello_world, snake, duck. Confirm which already have probe coverage and which don't before scoping the PR — the doc may be describing an earlier snapshot of the games/ tree, and the actual smoke-probe count needed could be larger than the doc implies.
shared/VisualProbe.cs enforces a strict root-key allow-list on probe JSON — a new key is a C# change, and an unknown key fails the probe run outright (see its UNKNOWN root key error path).
Build:
- One smoke probe per scene under tools/probes/, assertion steps only (expect_focus/expect_mode/expect_pattern), target a few seconds each.
- A new probe-JSON root key (add to VisualProbe.cs's allow-list) marking presubmit vs postsubmit; missing means postsubmit (the safe direction). Smoke probes are presubmit.
- T1's rule 5 (in tools/nflib/probe_select.py) then shrinks: shared/-and-root changes select the presubmit set instead of all probes.
PR shape: a stack of two — T5a the smoke probes (probe JSON only, reviewable as test design); T5b the marking key (VisualProbe.cs allow-list, C# + selection-rule change) and the rule-5 shrink.
Done when: each scene has a green smoke probe, the marking round-trips through VisualProbe.cs, and a shared/ change selects the smoke set.
None.
No comments.