new channel: pick the name on the radial, then the instrument — cancel aborts the creation nf-gm0q ← Beads

closed priority 2 task unassigned activesession:b

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

From Aedan, in chat:

> "adding a new sound needs to open the sound editor immediately (and cancelling cancels making a new sound), so u have to pick the instrument for the sound. Before that u have to pick the name of the sound too (rather than 2-word random gen) using the radial. Similar perhaps for new patterns as well"

Today

SoundPicker.OnNewSound calls EditorState.NewSound(), which mints a wavelet-slug name (WaveletNames.PickUnique), registers a Piano-based Sound, appends a SongRow, and selects it. Two random words and a default instrument you never chose - and no way to back out, because the row already exists by the time you see it.

EditorState.NewPattern / ForkPattern do the same for patterns, from three call sites: the + new pill, the flow-walk empty-cell fill panel (TonapseHome.FillWalkedCell), and the song-cell + new ring (SongGrid.NewSentinel).

Wanted

New channel is a two-step, fully cancellable flow:

``` + new channel -> RENAME CHANNEL radial (pick a name; cancel -> nothing was created) -> sound editor modal opens (pick the instrument; cancel -> nothing was created) -> the channel exists, selected, its row in the song ```

New pattern gets the name radial too. Aedan's call: **everywhere a pattern is minted** - the + new pill, the flow-walk fill panel, and the song-cell ring. (The alternative offered was "only the deliberate + new pill, leave the mid-flow paths auto-named"; he chose all of them.)

Design points

- Nothing is registered until the flow commits. Today creation happens first and the UI catches up. The flow has to build the Sound + SongRow in a pending state and only RegisterSound / append the row on the final commit - otherwise cancelling leaves an orphan row, an orphan entry in EditorState.Sounds, and an autosave that persists both. - Cancel at EITHER step aborts the whole creation, per the ask. Cancelling the instrument step does not fall back to Piano. - The radial ring for a NEW artifact is not the rename ring. RenameRadialController builds RenameOptions.Ring(pool, taken) plus the type name wedge plus a delete wedge (#200). Delete is meaningless when nothing exists yet - drop it, keep the keyboard wedge (#297), and title the ring for creation rather than rename. - The instrument step is the existing modal. SoundEditorModal.Open() shows SoundEditor, whose top row is already the instrument picker (#139). Opening it focused on that row is most of the step; what is new is the create-vs-edit mode (a commit/cancel contract instead of live edits). - EditorState.NameRng and the probe seed. TonapseHome seeds NameRng = new Random(4) under the probe so row-label-wrap.json can assert a known slug. If the pill path no longer auto-names, that probe's premise changes - check it, and keep a deterministic path for it. - This may be a stack rather than one PR (channel flow, then the three pattern mint sites). Noted here per the one-PR-per-issue rule; it closes on the last one.

Depends on the channel rename (#441) - build the new flow with the right words rather than renaming it twice.

Related: #184 (naming scheme for sounds and patterns), #297 (type-a-name wedge), #200 (delete wedge).

Dependencies

None.

Comments

No comments.

Add a comment