---
status: CURRENT (2026-10-09). Every bar the app draws, as built, with its open
defects (§14). Decision record: `shell-chrome.md` D1, D3, D8, D9, D10, D11, D12, D13;
the formatting decision is L20 in `ui.md` §11. Overview: `ui.md`.
---
HelloNotes has no system toolbar on either platform. Every bar is a row (or
a status strip) that the app draws from Chrome tokens, so the Mac and the iPad
show the same pixels (D12). This document lists every one: what is in it, in
what order, at what size, and when it shows.
- One row of chrome (D1). In a column window the sidebar header, the bar over the editor and the panel header sit side by side at 40pt and make one row. In a tall window the band's header sits above the bar, because the band is above the editor. Nothing may add a row beneath them. One panel view still does: the Graph adds two rows (§11, §14). The Mind Map and the Assistant draw a header of their own at the top of their tabs. Each command is in one place (D13): the collection's in the sidebar, the notes' in this bar, the note's own in Note Actions, and in the main window's bottom bar only how the note is shown.
- A bar is a shortcut. The rule is that every command in a bar is also in the menu bar (menu.md), and the bar is the touch-reachable and one-click route. iPhone has no menu bar, so there the bars and places carry every route themselves. The rule is not yet met: Show/Hide Sidebar, Show/Hide Panel, New Folder…, Present as Slides, View Diagram, Download / Remove Download, a note window's Properties, Links and Outline, Version History, the Git pane, the collection status bar's Stop, Try Again, Locate… and Remove, and the Assistant's New conversation have no menu item (§14, menu.md §8).
- Buttons never move and never fold away. When a bar runs short, the
flexible content gives way: the search field (120–180pt) and the tabs share
what the buttons leave, and the tabs scroll. There is no
»overflow. - Every control has a name, not just a picture: a tooltip (
.help) and an accessibility label on each glyph button, and aLabelbehind each menu button so the system can title it wherever it reads one (ShellComplianceTests: "Every control that can fold into a toolbar's overflow has a name"). - Fixed metrics (
Chrome.Metric): a 40pt row, 28pt bar buttons (14pt glyphs in 28pt squares, radius 6) with an invisible 44pt hit area, 10pt padding, 4pt spacing, the chrome grey (Chrome.Colour.chrome), and a 1pt separator on the edge that faces the content. - A button that is on is drawn in the accent over the accent at 30%. A hovered button gets a faint fill. A disabled one is dimmed to 35%.
| Bar | Where | Height | Shells | Code |
|---|---|---|---|---|
| Shell bar | over the editor | 40 | all (reduced on compact) | ContentView.shellBar |
| Sidebar header | top of the primary sidebar or band | 40 | column, tall | ContentView.sidebarHeader |
| Sidebar commands | the collection's tools, as rows above the tree; a strip across the top of the band | 22 a row; 40 the strip | column, tall | SidebarCommandSection, SidebarCommandStrip |
| Panel header | top of the right panel | 40 | all | SidePanelHeader |
| Graph controls | under the panel header, in Graph: two rows | ≥ 36, then a counts-and-zoom row | all | GraphPane.controls, GraphView |
| Mind Map header | top of the Mind Map tab | content | all | MindMapView.header |
| Assistant header | top of the Assistant tab | content | all | AssistantView.header |
| Editor bottom bar | under an open note | 44 | all, and note windows | NoteEditorView.bottomBar |
| Collection status bar | under the empty editor | 44 | column, tall | ContentView.noNoteStatusBar |
| Find & Replace bar | over the note, when open | 2 rows | all, and note windows | FindReplaceBar |
| Condition strips and banners | over the tree or the note | content | all | CollectionStatusStrips, EditorBanners |
| Compact tab bar | bottom of the screen | 49 + safe area | compact | CompactTabBar |
| Place bar | top of each compact place | 40 | compact | CompactPlaceBar |
| Mini strip | above the compact tab bar | 56 | compact | CompactShell.miniStrip |
| Expanded note bar | top of a full-screen note | 40 | compact | CompactShell.expandedNote |
| Note window bar | top of a note window | 40 | note windows | NoteWindowView.windowBar |
| Sheet bar | top of a sheet | 40 | eight sheets | ChromeSheetBar |
| Sheet tops of their own | top of seven more sheets | content | sheets | §10 |
| Settings tab strip | top of Settings | 58 | Settings | SettingsTabStrip |
| Formatting | the OS's keyboard bar | the OS's | iPad, iPhone | EditorCommands.installFormattingAssistant |
The bar over the editor, and the only bar that carries the window's commands. Its order is the iPad's layout at the Mac's scale, the same on both platforms:
┌──────────────────────────────────────────────────────────────────────────────────────┐
│ [+] [🔍] [⚙] │ Note A × │ ◉ Mind Map × │… [⌄] [◨] │
└──────────────────────────────────────────────────────────────────────────────────────┘
28 28 28 tabs: the flexible middle 28 28
+ · 🔍 · ⚙ | the open notes' tabs, then the collection's tools' | Note
Actions ⌄ · Panel, with the sidebar's toggle first while the sidebar is
hidden, and the search field in the 🔍's place while a search lasts (D14). Its
leading half is the notes of the collection — making them, finding them and
finding in them — and Settings; the collection itself is the sidebar's (D13).
40pt tall, 10pt padding, 4pt between items, the chrome grey, a 1pt
rule below, and the window drags by its background (Mac). With the sidebar
hidden the bar is the window's top-left corner, so on the Mac it pads its
leading end by 78pt for the traffic lights (WindowControls.leadingInset; 0 on
iOS).
| # | Item | Glyph | What it does | Shown |
|---|---|---|---|---|
| 1 | Show Sidebar | sidebar.leading |
shows the primary sidebar, or the band on a tall shell. The toggle lives in the sidebar's header (§4); it is here only while the sidebar is hidden, because nothing else on screen could bring it back | while the sidebar is hidden; not on compact |
| 2 | New Note + |
plus |
a menu: every way to make a note (§3.2) | not on compact |
| 3 | Search 🔍 | magnifyingglass |
a menu (§3.2). Search Notes — and ⌥⌘F, which also shows a hidden sidebar — turns the 🔍 into the search field, focused (120–180pt). It searches every open collection, and the results replace the tree in the primary sidebar (primary.md §3.2). The placeholder "Search" is drawn by the app; a clear button (xmark.circle.fill) appears with text; Return leaves the field. Empty and left — focus elsewhere, or its text cleared — it folds back to the 🔍. VoiceOver: "Search all collections" |
not on compact |
| 4 | Settings | gearshape |
opens Settings | not on compact |
| 5 | Tabs | — | the open notes, then the collection's tools open beside them (Mind Map, Assistant, Ask Your Library — a symbol before the title); flexible; scrolls when it does not fit (tabs.md) | while a note or a tool is open; otherwise empty space |
| 6 | Note Actions ⌄ | chevron.down.circle |
a menu (§3.3) | while a note is in front |
| 7 | Show Panel / Hide Panel | sidebar.trailing |
shows or hides the right panel; drawn on while the panel shows | always |
The buttons are fixed; the tabs take whatever is left. There is no floor under the tabs. The bar's fixed part — padding, five buttons and five gaps, with a note in front — is 180pt: 212 with the sidebar hidden (and the Mac's 78pt for the traffic lights), and while a search lasts the field replaces the 🔍 at 120pt or more, so 272. SwiftUI sizes the field first and offers it a share, so the field and the tabs shrink together. It was 320pt with seven buttons and a field that was always open (D13), which overflowed the editor at the Mac's minimum window; the three buttons of D14 fit it.
- At the Mac's minimum window (860pt) with a 280pt sidebar and the panel open, the panel is clamped to 259pt and the editor is 319pt: the tabs get 139pt, or 47 while a search is open.
- With the sidebar dragged to 340pt, the panel sits at its 220pt floor and the editor gets 298pt: the tabs get 118pt, or 26 while a search is open.
tabs.md T9 designs the fallback. The overflow itself is the shared
width budget in ui.md §12, item 2.
+ — New Note (newNoteMenu):
| Item | Glyph | Enabled when |
|---|---|---|
| New Note | square.and.pencil |
a collection is in scope — into the selected note's folder, or the band's container (primary.md §9) |
| Today's Note | calendar |
a collection is in scope |
| — | ||
| New Note from a Prompt… | sparkles.square.filled.on.square |
a collection is in scope |
| Quick Capture… | square.and.pencil.circle |
a collection is open |
| Dictate to Daily Note (Stop Dictation while it records) | mic (stop.circle) |
dictation is supported |
🔍 — Search (searchMenu):
| Item | Glyph | Enabled when |
|---|---|---|
| Search Notes | magnifyingglass |
always — opens the field in the 🔍's place |
| Open Quickly… | arrow.forward.square |
the scope collection has notes |
| — | ||
| Find & Replace in Note | text.magnifyingglass |
a note is in front — the note's find bar, which finds and replaces in one (as ⌘F: switches to Edit first) |
More ⋯ is gone (D14): Quick Capture and New Note from a Prompt are the
+'s, Open Quickly the 🔍's, Settings its own button, and Open Note in New
Window was already in Note Actions. It had held seventeen items before D13,
and seven after.
Everything that acts on the open note, in one menu, so the tabs keep the width. It is the touch route to the note's commands. Most are also in the menu bar; Present as Slides, View Diagram and Download / Remove Download are not (§14). It no longer holds the view mode or Show Panel, which have a place each already (the bottom bar's modes, the bar's panel button), nor the Mind Map, which is the collection's (D13).
| Group | Items |
|---|---|
| — | Present as Slides (a Marp deck only) · View Diagram (only if the note has one) |
| — "Using model" | Summarise Note · Suggest Tags · Suggest Links · Rewrite or Expand Note… (only when a model can answer; named by AIActions.Command, as in the Note menu) |
| — | the note's row menu from the sidebar (primary.md §6): Rename…, Duplicate, Add/Remove Bookmark · — · Copy Wiki Link, Open in New Window, Reveal in Finder/Files · — Download or Remove Download (cloud notes) · — Review Links… · — Export ▸ (Export as HTML…, Export as PDF…, Print…) · — Move to Trash, last |
| Shell | Bar |
|---|---|
| Column, tall | all seven items (the sidebar's toggle only while the sidebar is hidden) |
| Compact, note expanded | tabs · Note Actions · Panel only (showsShellCommands: false): the Search place has the field, and the places carry the rest. It sits under the expanded note's own bar (§8.4) |
Both are 40pt rows in the chrome grey with a rule below.
- Sidebar header: the sidebar's own Hide Sidebar toggle, after the
Mac's traffic lights (78pt in,
WindowControls.leadingInset; 0 on iOS), and at its trailing end a+— Add Folder or Collection: New Folder…, New Collection ▸, Open Collection ▸, Open Recent… and Open Default Collection (collectionAddItems), menu items as they were before build 28 (D14). The window drags by it. → primary.md §7. - Sidebar commands: the collection's tools, as named rows above the tree — Mind Map, Assistant, Ask Your Library and Git (its branch, a dot for changes, the Git pane as a popover). In the band, the same as a strip across its top. → primary.md.
- Panel header: the strip of the note's six views (or a pull-down when it cannot fit) and Close panel. → secondary.md §3.
Both status bars use the same drawing: 12pt text and glyphs in the secondary
label colour, a 34pt row with 5pt above and below (44pt in all), the chrome grey,
and a rule on top. The collection bar's rule is 1pt. The editor bar draws two
(§14). Their buttons are ChromeStatusButton: a 12pt glyph in a 22 × 18 frame
with a larger invisible target.
How the note is shown (D13): whether it saved, and the view mode.
┌──────────────────────────────────────────────────────────────────────────────────┐
│ ⚠︎ Save failed [✎|👁|‹›|◫] │
└──────────────────────────────────────────────────────────────────────────────────┘
status (left) mode (right)
| Side | Item | Shown |
|---|---|---|
| left | Save failed (red, with the reason as its tooltip). Successful saves are never announced: a status that changes width twice a sentence moves the bar while you type | only after a failed save |
| right | Mode: a four-segment control, Edit · Preview · Markdown · Split (ChromeSegmented, 30 × 20 segments) |
always |
It carried eleven more — Find, the note's properties, links and outline as
popovers, a mind map, slides, a diagram, an AI menu, version history, export and
a new window — each of which had a place already: the panel's views, the bar's
🔍 (find and replace), and Note Actions. A note window, which has no
panel and no command bar, keeps the note's commands in its bottom bar
(NoteEditorView.commandsInBottomBar): after the mode, Find & replace (⌘F)
(Edit only), Edit front-matter properties, Links to and from this note,
Outline & statistics, Present as slides (a Marp deck), View diagram
(the note has a Mermaid block), Version history (Git), Export (HTML,
PDF) and Open this note in a new window, with the Git change count — a
button opening the Git pane — after the save status.
- A note window's row, when it runs short, scrolls sideways instead of
truncating (the main window's — the save status and the modes — fits any
width a note is shown at). Its controls are fixed-size, so the row cannot
shrink. The switch to scrolling is
decided from the offered width, not with
ViewThatFits, so typing never re-decides the bar's shape. The threshold is 533pt measured inside the bar's 10pt padding, so the bar scrolls below 553pt: the padding was meant to be counted once and is counted twice. The 512.67pt minimum it was derived from was measured with one set of items. The Git, AI, Marp, Mermaid and Save-failed items change the real minimum. - It sits in the bottom safe-area inset, so the system's keyboard bar and
the software keyboard push it up instead of drawing over it. On iPad it also
clears the floating shortcuts pill, which SwiftUI does not report with a
hardware keyboard (
AssistantBarInset). - Every popover here states its compact adaptation, so on a phone it stays a popover instead of becoming a sheet with a 360pt island floating in it.
- A note window's Links popover, Git button and selection actions are its
note's collection's (
implemented.md§51.36); it has no AI menu, whose commands are the main window's Note Actions.
Under the empty editor, while a collection is focused:
| Side | Item |
|---|---|
| left | the collection (folder) · n notes · n tags (when there are any) |
| left | where it lives: Provider (direct) with Refresh, or the cloud provider's name |
| left | n online-only (when there are any) |
| left | a scan long enough to mention: a progress bar or spinner, "Scanning n items…", Stop |
| left | Unavailable (orange) with Try Again, Locate…, Remove; or n files hidden (when Show Non-Note Files is off); or why the index is stale |
| right | nothing: New Note and Today's Note are the bar's; Git and the collection's tools are the sidebar's (D13) |
Toggled by Edit ▸ Find… (⌘F) or Find & Replace in Note in the bar's 🔍 menu (a note window: its bottom bar's magnifier). It works in Edit: ⌘F from another mode switches to Edit first. It sits above the note pane at full width.
┌───────────────────────────────────────────────────────────────────────┐
│ 🔍 [Find ] [.*] 2 of 7 [⌃] [⌄] [Done] │
│ ⇄ [Replace ] [Replace] [Replace All] │
└───────────────────────────────────────────────────────────────────────┘
Return in the Find field goes to the next match; the chevrons go back and forward (wrapping); Done (Escape) closes it and clears the highlights. It closes itself when the editor switches to another note.
.* makes the find a regular expression (FindPattern, ICU's): drawn as
the bar's glyph buttons are, the accent on its fill while on, and kept between
finds and launches (findUsesRegularExpression). Both fields' placeholders say
so. A pattern ignores case like a phrase, unless it says (?-i), and ^ and
$ match at every line. The replacement is then a template: $0–$99 are the
match and its groups, \n and \t a newline and a tab, \\ and \$ a
backslash and a dollar sign. A pattern the editor cannot read — ( while it is
being typed — says Invalid pattern in red where the count goes; one that
runs past half a second says Too slow, and the search stops rather than
freezing the window (implemented.md §51.39). Replace replaces the match the
find selected, with its own groups, and nothing if the selection has moved off
it. The previous-match
button's tooltip promises Shift-Return, which nothing binds (§14).
These are not command bars. They are rows that appear when the app has something to say about the collection or the note: usually that something is wrong, sometimes that a wait is under way or has finished. Each has a symbol, a sentence and, where there is something to do, a button.
| Strip | Where | Says | Offers |
|---|---|---|---|
| Scan in progress | over the editor | three lines: how far the scan has got, and where | Stop |
| The last scan's summary | over the editor | "Scanned name — n notes…", or that it was stopped; clears itself after 6 seconds | — |
| Collection unavailable | over the note | "name is unavailable — why" | Try Again, Locate… |
| Index behind the folder | over the note | "name: why" | Rescan, when the cause is permanent |
| Search may be incomplete | over the sidebar tree, while searching | "These results may be incomplete — collections…" | — |
| Items not downloaded | over the sidebar tree, while searching | "n items aren't downloaded…" | Download and Search |
| Conflict | over the note | "This note changed on disk while you were editing." | Reload, Keep Mine |
| Save error | over the note | "This note couldn't be saved." | Retry |
| Downloading | over the note | the note is still downloading (a wait, not a fault) | — |
| Unloaded | over the note | the note could not be loaded | Try Again |
Four places, Notes (folder), Search (magnifyingglass), Tags (number) and AI
(sparkles): a 17pt glyph over a 10pt name. The chosen place's glyph is drawn
in the accent and its name in the label colour. 49pt tall, the chrome grey
running into the home-indicator area, a rule on top.
Each place's own 40pt bar: its title centred (13pt semibold), its commands at the
trailing end. Library (the Notes place, the phone's sidebar) has the sidebar's
+ and More ⋯, Search has New Note, Tags and AI have none
(primary.md §10).
56pt, directly above the tab bar, while a note is open: a document glyph, the
note's title at 12pt medium, and chevron.up. Tapping it shows the note full
screen. VoiceOver: "Open title".
A 40pt bar with Back (chevron.down and "Back", returning to the place and
closing the panel if it is open) and the note's title centred. Under it, the
shell bar in its compact form (§3.4) is a second 40pt bar, with the tabs,
Note Actions and the panel toggle. That is two rows of chrome, which D1 forbids
(§14).
There is no format bar in the app (L20). A pane-level bar was designed (L3), built twice, and removed: it spent 36–44pt of every editing screen re-implementing a control the system already provides, and a hand-rolled keyboard accessory drew over the status bar on an iPad with a hardware keyboard.
| Platform | Where formatting lives |
|---|---|
| macOS | the Format menu, with shortcuts: Bold ⌘B, Italic ⌘I, Heading 1–3 ⌥⌘1–3, Bulleted List ⇧⌘7, Numbered List ⇧⌘9, and Strikethrough, Highlight, Inline Code and Blockquote without shortcuts |
| iPad | the system's shortcuts bar (inputAssistantItem), the floating pill that carries the language selector and dictation, including with a hardware keyboard. Leading: Text Style (Bold, Italic, Strikethrough, Highlight, Code) and Lists (Blockquote, Bulleted List, Numbered List); trailing: Headings (1–3). A group collapses to its representative button when the pill is short |
| iPhone | an inputAccessoryView: a 44pt UIToolbar above the keyboard with all eleven commands in a row, since iPhone has no shortcuts bar |
Both editors install it: the live editor (Edit) and SourceEditor (Markdown and
Split). EditorToolbarContractTests checks the arrangement's outline in five
tests: that the shortcuts bar is used on iPad and an accessory on iPhone (and
that NoteEditorView does not contain the string EditorFormatBar); that both
editors install them; that SourceEditor answers the formatting, undo, redo and
end-editing notifications; that every formatting button and group is named; and
that every popover in NoteEditorView and ContentView states its compact
adaptation. It does not check which buttons are in each group, their order, the
count or the heights; those are described here from EditorCommands.swift.
Selection actions are menu items, not a bar. On a selection, the editor's context menu on the Mac and the system edit menu on iOS offer Rewrite with AI… first, then Link to "title" (only when a note of that name exists), Find Related and Ask Your Library, beside the system's own Writing Tools.
Sheet bar (ChromeSheetBar): 40pt, the title centred (13pt semibold),
actions at either end (Cancel, Done, Clone…), a rule below. Eight sheets use it:
Git, Clone Repository, New Repository, Acknowledgements, Manage Cloud
Collections, Version History, the cloud folder picker and the diagram zoom —
"Diagram", or "Diagram n of m" when the note has several, with Done at
the right as the cancel action.
Seven sheets draw a top of their own instead:
| Sheet | Its top |
|---|---|
| Open… (the launcher) | "Open" and Done |
| Slides | "Slides — title" and Done, and a row of slide controls at the bottom |
| New Note from a Prompt | "New Note from a Prompt" and Cancel |
| Review Links | "Review Links", "n of m" and Close |
| Rewrite | "Rewrite Note" or "Rewrite Selection", the model's name, and Close (Replace Note or Replace Selection, and Insert Below, are its commits) |
| Quick Capture | a leading "Quick Capture" title and a caption, then Close (Escape) and Append (⌘↩) |
| Welcome | a centred header (the app icon, "Welcome to HelloNotes") and Explore first at the bottom, which has no shortcut |
The two palettes (Command Palette, Open Quickly) open on their search field, and Settings on its tab strip.
Settings tab strip: 58pt; five tabs of 72 × 46pt (a glyph over an 11pt name): General, Appearance, Git, AI, Support. The chosen tab's glyph is in the accent on a rounded wash and its name in the label colour. The strip is centred with 60pt reserved at each end, so Done never overlaps a tab. On a phone the tabs share the width Done leaves. It is the same view in the Mac's Settings window and in the iPad's sheet.
One of the panel's views adds rows of its own under the panel's header:
- Graph, two rows. First "Links in and out" and Link distance — Direct links, Within 2 links, Within 3 links — an unlabelled pop-up. When the graph is capped, a line under them says how many notes are hidden. At least 36pt, the chrome grey, a rule below. Then the graph's own row: "n notes · m links" and zoom controls.
The collection's tools, in their tabs, draw a header at their top:
- Mind Map: a "Mind Map" title in
Chrome.Style.headline, the collection's name, "n notes · m links" (its tooltip says how many linked notes the cap left off and how many notes have no links), and zoom controls, with 16pt of padding. - Assistant: agent mode (a toggle,
wrench.and.screwdriver.fillorbubble.left), the model (a pull-down), New conversation (square.and.pencil) and AI settings (gearshape), right-aligned.
That is three extra rows, drawn three different ways (§14).
A note window (Open in New Window) has a 40pt bar carrying only its title, centred on the window and kept clear of the traffic lights on both sides. The note's commands are in its editor bottom bar (§5.1) — a note window has no panel and no command bar, so the bottom bar keeps them there, where the main window's holds only the view modes. The window drags by the bar.
The traffic lights (Mac); iPadOS's window controls and resize grabber; the iOS status bar; the software keyboard and its shortcuts bar; and any menu, popover or alert once open. The buttons that open menus are the app's.
- The phone's expanded note has two bars (§8.4): Back and the title, then the tabs, Note Actions and Panel. Fix: one 40pt row, Collapse (⌄) · tabs · Note Actions · Panel, with the title carried by the active tab. See tabs.md T14.
- The tabs have no floor, and the bar can overflow (§3.1). With the
sidebar and the panel open in a narrow window the tabs get nothing, and the
fixed part of the bar — seven buttons since D13, with the search field down
to 72pt — overflows the editor by 1pt at the Mac's minimum window, and by
22pt with the sidebar dragged to 340pt. tabs.md T9,
ui.md§12. - Rows of their own (§11): the Graph two in the panel, the Mind Map and the Assistant one each at the top of their tabs — three drawn three ways.
- Bar commands with no menu item (§1, rule 2): Show/Hide Sidebar, Show/Hide Panel, New Folder…, Present as Slides, View Diagram, Download / Remove Download, a note window's Properties, Links and Outline, Version History, the Git pane, the collection status bar's Stop, Try Again, Locate… and Remove, and the Assistant's New conversation. (The Mind Map has one since D13: View ▸ Mind Map, ⇧⌘M.)
- ✅
Note windows' status bar has four dead items(§5.1): no AI menu, a Mind map button that does nothing, a Links popover that always says "No References", and a Git button that opens an empty popover. A selection there offers none of the vault actions. Fixed (implemented.md §51.36). - The editor status bar's scroll threshold counts its padding twice (§5.1), and its minimum was measured for one set of items.
- ✅
The editor status bar draws a 2pt rule: aChromeDividerabove it and a rule of its own. Fixed (implemented.md §51.36). - ✅
A system colour in the collection status bar.A permanent stale reason is drawn in.orange, which is a different orange on each platform, besideChrome.Colour.orangeeverywhere else (D12). Fixed (implemented.md §51.36). - ✅
The constant is read by nothing. Fixed (implemented.md §51.36).ShellMetrics.statusBarsays 28pt; both status bars are 44pt. - ✅
Sheets have five kinds of top(§10). Quick Capture and Welcome have no cancel action at all, and every other sheet's dismissal is the cancel action. (The Mermaid Diagrams sheet, whose Done was the default action, was replaced by the diagram zoom on 2026-09-24, which uses the sheet bar.) Fixed (implemented.md §51.36). - ✅
Escape has several owners.The panel's Close, the find bar's Done, Settings' Done and the Assistant approval card's Deny are all.cancelAction. Fixed (implemented.md §51.36). - ✅
A tooltip promises a shortcut that does not exist: "Previous match (Shift-Return)" on the find bar. Fixed (implemented.md §51.36). - The Mac's Settings window shows Done beside its own close button, because the strip is the sheet's. Harmless, but it is a sheet's control in a window.