Twinned from https://github.com/cfsh/ninefold/issues/452 by tools/beads/import_github.py's reconcile pass.
Suggestions from ninefold-reviewer's review of #447. All below the gate — #447 is CONVERGED and none of this blocks it. Filed unclaimed.
1. Two of the three pattern mint paths still have no probe leg. new-pattern.json covers the + new pill end to end. The flow-walk fill panel (TonapseHome.FillWalkedCell) and the song-cell + new ring (SongGrid.ApplyOption) are rerouted through RaiseNewNameRequested by this PR and asserted nowhere. Acknowledged on the PR thread ("they need a probe to walk into an empty bar and accept the fill panel, which is a bigger script than this round warranted") — recording it so it isn't lost.
2. The ⌨ type name create path has no coverage at all. Ring → TonapseMenu.OpenKeyboard(…, onCancel) → Finish(typed) / Finish(null) is the only creation path whose one-outcome contract crosses two objects, and it is the one that the F4 re-entrancy window lived in. It holds today because every keyboard exit routes through TonapseMenu.Back() — Close() neither fires nor clears _keysCancelled, so a future exit path that calls Close() directly while _keysPage is up would strand the flow with no name and no cancel. Nothing asserts that invariant.
3. Three probes now pin ring-derived names. new-channel.json and row-label-wrap.json both assert bass; new-pattern.json asserts verse. Each depends on RenameOptions.SoundPool / PatternPool ORDER *and* on the demo song's current channel/pattern set — adding one demo channel or reordering a pool breaks all three at once, and the failure surfaces as "no row label with that RowIndex is visible" rather than as anything about the pool. Both probe _intent blocks explain the derivation, which is the right mitigation; a shared note (or a probe step that reads the resolved wedge) would be better.
4. Dead branch. RenameRadialController.OnNewNameRequested: if (_options.Length == 0) { Finish(null); return; } is unreachable — ring.Add(TypeOption) runs immediately above, so the array always has at least one entry. Harmless; either drop it or keep it as a deliberate guard with a comment saying so.
5. Commit() with no highlighted wedge cancels the creation. HighlightedIndex < 0 falls past the if to the trailing Close(), which in create mode runs Finish(null). For rename that is a harmless no-op close; for creation it silently aborts the flow. _radial.Open(_options, 0, …) seeds index 0, so it is hard to reach — noting it as a behavioural asymmetry rather than a bug.
None.
No comments.