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"
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).
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.)
- 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).
None.
No comments.