From d3002d1453599c8c1901ae9d34c9510d6dc7bb77 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sun, 26 Jul 2026 16:05:08 -0700 Subject: [PATCH] FN-8617: restore authoritative dashboard modal inventory Restore the committed source of truth for dashboard modal migration coverage. - Add the evidence-backed inventory of dashboard modal classifications and migration ownership. - Link the dashboard guide to the canonical modal inventory. Files changed: docs/dashboard-guide.md | 4 ++ docs/dashboard-modal-inventory.md | 103 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) Fusion-Task-Id: FN-8617 Fusion-Task-Lineage: 87159726-d574-4f71-bd6f-66cf9f2f9a9e Co-authored-by: Fusion (runfusion.ai) --- docs/dashboard-guide.md | 4 ++ docs/dashboard-modal-inventory.md | 103 ++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 docs/dashboard-modal-inventory.md diff --git a/docs/dashboard-guide.md b/docs/dashboard-guide.md index 2edb6aed48..c82087d938 100644 --- a/docs/dashboard-guide.md +++ b/docs/dashboard-guide.md @@ -87,6 +87,10 @@ Press `Escape` to close the current/topmost dashboard popup. Popped-out task win Movable dashboard pop-outs remember their last desktop location and size, while centered resizable dialogs remember their size. When a pop-out becomes a full-screen sheet at mobile widths (or, for Artifact Gallery, its short-height sheet breakpoint), it leaves that desktop record untouched; reopening it on desktop restores the prior floating geometry. +### Dashboard modal inventory + +The grep-backed [dashboard modal inventory](./dashboard-modal-inventory.md) is the canonical migration plan for every dashboard modal surface, including explicit static-dialog opt-outs. + ### Task modal resizing on tablets Task Detail and New Task remain resizable on known touch tablets, including a 768px-wide tablet viewport. Task Detail exposes its accessible bottom-right resize grip; New Task keeps its draggable header and edge/corner resize controls. On that tablet-touch surface, the painted control remains compact but its explicit resize hit target is at least 44px, sits outside the panel content, and owns touch gestures with pointer capture. The touch target is hit-area-only: task-modal headers and bodies retain desktop density without a visible tablet padding band. Their geometry stays within the viewport and is restored from browser storage on later tablet or desktop opens. True phones, narrow folded panes, and desktop coarse-pointer devices do not receive the enlarged target: phones remain full-screen sheets and desktop preserves cursor-sized resize chrome. diff --git a/docs/dashboard-modal-inventory.md b/docs/dashboard-modal-inventory.md new file mode 100644 index 0000000000..da64a02f3b --- /dev/null +++ b/docs/dashboard-modal-inventory.md @@ -0,0 +1,103 @@ + + +# Dashboard modal inventory + +> **Canonical copy:** This committed file is the durable canonical inventory. The identical +> `modal-inventory` task document lives on **FN-8617** because task documents are per-task and +> cannot be added retroactively to FN-8605 or archived FN-8615. + +## Evidence scope and row accounting + +Evidence was re-derived from `main` at **`743dc5f46ea5ebf53ff81ce1a9722ce9ef29d37a`**. The +revision-qualified glob command (`git ls-tree --name-only -r main -- +packages/dashboard/app/components | grep -E 'Modal\\.tsx$'`) returned **40** files. Of the named +extras, **2** were not in that glob (`AgentDetailView.tsx`, `WorkflowNodeEditor.tsx`); +`RightDockExpandModal.tsx` matches the glob and appears exactly once. + +The required `ArtifactsGallery.tsx` grep found **three distinct viewer pop-outs**—`MediaLightbox`, +`PdfViewer`, and `DocViewer`—which each render through `OverlayShell`; therefore it contributes +**3 rows** (not one vague aggregate row). The deduplicated union source-file set contains 43 files +and the union **row count is 45** (`40 + 2 + 3`). + +The revision-qualified FloatingWindow, `useModalResizePersist`, shared-contract, and structural +searches were recorded in the table below. The bespoke pointer/drag/resize search was run across +all 43 union source-file pathspecs, explicitly including `AgentDetailView.tsx`, +`WorkflowNodeEditor.tsx`, and `ArtifactsGallery.tsx`; its positive surface-geometry candidates +were New Task, Right Dock Expand, and Terminal. Matches in other files were inspected and are +internal content controls (for example a sidebar splitter, list reordering, or a nested Files-pane +splitter), not modal move/resize mechanisms. + +For every **D** row, the cited structural construct was directly inspected at this revision along +with its imports, handlers, geometry state, and corresponding local styling references. The note +“direct inspection” means no surface-level touch/pointer capture, custom `useDrag`/`useResize`, +drag/resize library, pointer-written window geometry, or CSS `resize` mechanism exists; where a +pointer-token match existed, the note records why it does not move or resize the modal itself. + +## Shared migration contract + +Migrations use `FloatingWindow` with a stable geometry-persistence key and consume +`isTabletTouchViewport` from `useViewportMode.ts`, never bare `@media (pointer: coarse)`. Effective +move/resize hit targets are at least 44px and marked `data-resize-hit-target="true"`. Phone-class +is **≤767.98px** and tablet-class starts at **768px**; JavaScript and CSS boundaries must stay in +sync. A headerless window using `hideHeader` plus `dragHandleSelector` must put the same hit-target +contract on its resolved delegated handle. `closeOnOutsidePointerDown` defaults **off**, so a +modal intended to dismiss on outside pointer-down must opt in explicitly. + +## Classifications + +| Surface | Class | Evidence (all at `main` SHA above) | Target | Owning subtask | Risk notes | Opt-out justification | +| --- | --- | --- | --- | --- | --- | --- | +| `ActivityLogModal.tsx` | A | `ActivityLogModal.tsx:486` `