chatAtoms.tsfeat(chat): rebuild the composer's controls, and give "New chat" one meaning The composer's model picker, its send glyph, its attach button and the several things called "New chat" all moved or broke into each other; this settles them together. MODEL PICKER. Defaults to Cedar's fast runtime — the storage key is versioned, because `atomWithStorage` only consults the default when the key is absent and every existing user carried "low" from the old one. Options are marked rather than described: the Claude burst in its own coral, Cedar's own logo in the row's ink. The list is the app's `OptionPicker` rather than a menu of radio items, so it gets the same keyboard as every other "which one?" — filter, arrows, and the ordinals 1-4. That picker was buried in `documents/table`, so it moves to `components/ui` with `optionColor` and `PICKER_SURFACE_CLASS`. Cedar's mark is the PNG used as a mask, not an image: the only asset is a dark-green sprig on transparency, invisible on the dark composer with no light variant to swap to. `mask-size` is 128% rather than `contain` because the asset's ink fills only 50% x 73% of its canvas — under `contain` that padding scales into the icon box and a 16px mark drew 11.7px of logo. SEND GLYPH. Shipped broken twice. Rotating the bars with a CSS transform put the arrowhead somewhere else entirely (framer-motion writes `transformBox: fill-box` when the caller does not, and a viewBox-unit origin then measures from each rect's own bbox); animating their geometry left `stop` reading as `queue`, because the in-between of two poses is a glyph that means nothing. Rotation is now an SVG attribute about one pivot, each pose is static, and the only movement left is the fill cross-fading in CSS. ONE "NEW CHAT". The rail started a context-free draft chat while ⌘N and the header button minted a thread carrying the current one's context — a shortcut producing a different chat than the button advertising it. All three now call `startNewChat`, which mints nothing until you type and does not navigate. The agenda button leaves the header; `q` still opens it. ATTACHING. The paperclip took `disabled={!mainThreadId}` and the drop zone refused a null thread, so on every fresh chat the only way to enable attaching was to type something first. Both now mint the thread, exactly as the first keystroke does. The mic button is gone from the composer — ⌘M still dictates, the same key the mail composer already uses. Co-Authored-By: Claude Opus 5 (1M context) <<email>>Aug 30, 2026, 11:39 PMcrmAtoms.tsfeat: v0.5 working commandBarApr 11, 2026, 1:57 PM