Probes move to per-game `probes/` folders (design 005 S15) nf-j7f5 ← Beads

closed priority 2 task unassigned

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.

Context

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.

Prescription — one PR, all of it atomic

git mv tools/probes/<name>.jsongames/<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:

Test plan
Non-goals

Refs #653, #682, #990, #995, design 005 (S15/piece 11), design 005b

Dependencies

None.

Comments

No comments.

Add a comment