SecretsPanel no longer keeps a std::vector<std::unique_ptr<Widget>> of the
rows and their widgets; each row and its key/description/Edit/Delete widgets
are owned children of the list, so removeAllChildren becomes clearOwnedChildren
and the manual ownership bookkeeping goes away.
Replace the ShortcutMap plus runBoardCommand switch with Commands<BoardCommand>:
each board action is a defined command with a label, the menus read their text
and state from the registry, and key events run through Commands::handle.
SkillsPanel and TaskWorkspacePanel were two copies of the same browser-plus-
editor panel. Both are now the shared DocumentFolderPanel: SkillsPanel only
adds createSkill, and TaskWorkspacePanel only adds picking a task's workspace
directory (the browser/editor open and save logic lives in the component).
Paint on tp::Canvas, use the shared Key enum and KeyModifiers, the TextStyle
drawing API and ImageHandle, and open the context menu through Menu::openAt.
The refactor moved storage and CPU placement into each application, so Taskboard
carries the same small AppStorage Sketch2D does.
The refactor kept NodeEditor's context menu but dropped the hook from the tree
and the Kanban board. Taskboard's context menu (and any app right-clicking a
row or card) needs it back: a right press reports the item under the cursor
(and the column, on the board) plus the window point.
The rsc directory moved from Graphics to GraphicApplication; use the shared
graphic_application_resources helper instead of a raw copy of the old path.
The UI still painted with the pre-refactor Painter names (fillRect, strokeRect,
fillCircle); port them to tp::Canvas (rect, outline, circle), register the
module in the root build, and link the tests against WidgetsTesting instead of
the removed Widgets test-support sources.