Twinned from https://github.com/cfsh/ninefold/issues/996 by tools/beads/import_github.py's reconcile pass.
Third of three chunks splitting the co-location programme (Aedan: "split into separate chunks, this will be a lot of context for poor devs"). Independent of #990/#995 — touches none of their files; can run in parallel.
Aedan's ask, verbatim (chat, 2026-08-17):
> "probes are in-scope too, instead of living in tools/probes, should be somewhere , maybe they need local folders, or maybe we can handle something like tonapse/playback_probe.json? give an option for local folders and pros / cons . Remember games will continue to expand to many scenes (look at explore)"
Decided (aedanpope, 2026-08-17): per-game folders, confirming design 005 S15 / piece 11 — probes pair with *flows* spanning scenes, not with single files, so the game folder is the co-location. Not the flat *_probe.json alternative.
42 probes live in tools/probes/*.json (measured 2026-08-17: 34 target tonapse.tscn, 4 explore, 1 each snake/blockbrains/duck/hello_world). Design 005 S15 ratified the move and — crucially — enumerated its preconditions (§2, §6 Phase 3); nflib/probe_select.py was written scene-keyed specifically to survive it (see its module docstring). One PR; every precondition in the same change, because a partial move yields a silent zero-probe sweep — the failure shape the whole probe-gate design exists to prevent.
git mv tools/probes/<name>.json → games/<game>/probes/<name>.json, keyed by each probe's "scene" field; probes with no "scene" (they start at the main scene and reach every game) → shared/probes/. Byte-identical contents. In the same PR:
export_presets.cfg gains the probe-dir exclude — hard precondition (design 005 §2): export_filter="all_resources" excludes only games/tonapse/samples/* today, so moved probes would ship _intent prose (internal issue numbers, host measurements) in every player build.probe_all.py:87 and probe_gate.py:960; also SWEEP_INPUT_PREFIXES (probe_gate.py:207), the repro lines (probe_gate.py:684, :731), probe.py's usage docs, notes/probes.md.nflib/probe_select.py: PROBE_DIR (:93), load_probes (:251), and rule 1 (tools/probes/<name>.json → that probe) become multi-root. Rule 4 already keys on the scene's directory and needs no change — verify, don't assume: affected_probes.py --paths on a fixed path list must select identically before and after.tools/probes/ carve-out in nflib/godot_build.py.probe_gate's delta report would read a lost probe as "no longer in the suite", i.e. as *fixed*).probes/ dir gets a .gdignore — probes are read by path from the harness, never as Godot resources; keeps 34 JSONs out of the editor dock. This does not replace the export exclude (design 005 calls the exclude required regardless)../presubmit.py --all green; state the box../probe.py games/tonapse/probes/tonapse-home.json passes from the new path.affected_probes.py --paths games/explore/Explore.cs tools/nflib/fs.py README.md — output identical before/after.--headless --import . exit 0; git status clean after import._intent, presubmit markers all byte-identical.Refs #653, #682, #990, #995, design 005 (S15/piece 11), design 005b
None.
No comments.