Commit Graph

9652 Commits

Author SHA1 Message Date
gsxdsm
f7599cb720 fix(dashboard): Planning panes fill to bottom; Goals card layout; Automations/Goals header margin
- Planning: .modal max-height:80vh capped the embedded panel ~49px short; .planning-view .planning-modal--embedded { max-height:none } (higher specificity) lets sidebar + detail fill to the view bottom.
- Goals: .goals-card-main had no flex so a long description grew to content width and starved the equal-weight Linked Missions column to ~13px; flex:1 + min-width:0 rebalances them.
- Small margin below the Automations + Goals headers so content clears the divider.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 12:05:44 -07:00
gsxdsm
b8051e3551 fix(dashboard): detect GitHub App bots (CodeRabbit/Greptile) in PR/issue comments
gh pr/issue view --json comments returns only author.login (no type), and app-bot logins (coderabbitai, greptileai) lack the [bot] suffix — so every app bot was classified human. Fetch comments via gh api graphql with author{ __typename login avatarUrl } so authorIsBot = __typename === 'Bot' (any app bot by type, no hardcoded names); REST token-fallback already used user.type/[bot]. Output shape + avatars preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 12:04:24 -07:00
gsxdsm
2505d09771 fix(dashboard): Settings header matches canonical ViewHeader; trim footer bottom spacing
Embedded Settings header now uses the canonical treatment (min-height var(--view-header-min-height), space-lg/space-xl padding, surface bg, 1px divider, var(--todo) icon, 1.125rem/600 title, actions pinned right) — was a transparent no-divider bespoke header. Also trim the embedded footer's padding-bottom so the gap below the Save/Help/Version/Import-Export row matches the gap above it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 12:00:43 -07:00
gsxdsm
64936609a1 fix(dashboard): show workflow minimap and theme column controls 2026-06-22 11:58:53 -07:00
gsxdsm
2517b3a096 feat(dashboard): equal header heights (--view-header-min-height) across all left-sidebar views + missed views
Add --view-header-min-height (~61px = space-lg*2 + 28px btn-sm row + 1px divider) and apply via ViewHeader + the bespoke Mission/Planning headers so action-bearing and title-only headers are the same height. Bring the views the sweep missed to canonical: Automations (.automations-embedded-header), Import Tasks (.github-import-modal__embedded-header), Goals (header via ViewHeader + fix main-pane inset so cards align under the title + fill height). Compound Engineering + Research inherit the token automatically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:52:32 -07:00
gsxdsm
84d7498235 fix(dashboard): terminal never dims the page behind it (any mode)
The no-dim/no-blur override only applied to docked/floating; a terminal that was neither (mobile/default sheet) fell back to the dimmed base .modal-overlay. Always carry a base terminal-modal-overlay class + a rule that clears background+blur for every terminal state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:52:21 -07:00
gsxdsm
5697d2c98b feat(dashboard): Skills detail renders SKILL.md as markdown + compact file browser
SKILL.md now renders via MailboxMessageContent (markdown + sanitized HTML + mermaid) instead of raw <pre>. Files strip is compact and lists all files; clicking a file loads its content in the detail pane (markdown via MailboxMessageContent, other text via <pre>, binary/oversized notice) with a Back-to-SKILL.md affordance. New GET /api/skills/:id/file endpoint (readSkillFileContent: path-traversal-guarded, 2MB ceiling, binary detection) + fetchSkillFileContent client fn.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:49:52 -07:00
gsxdsm
c47f0df59f fix(dashboard): Evals view fills the pane (was collapsing to a ~70px column)
.evals-view root had no sizing, so flexbox shrank it to min-content and the disabled-state text wrapped one word per line. Add width/height:100% + min-0 + overflow to the root, flex:1 body, and a centered full-width empty-state wrapper; the disabled state now also renders the shared ViewHeader (icon+title) like the enabled state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:47:52 -07:00
gsxdsm
94c4a78615 fix(dashboard): lighter Planning footer (no border band); tighter List toolbar-to-quick-add gap
- .planning-view-footer drops its border-top divider + trims padding so the Start-Planning action flows with the content instead of reading as a large bottom footer band.
- List controls bottom padding + quick-add top padding reduced (space-md -> space-xs) so the toolbar sits close to the quick-add box.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:38:21 -07:00
gsxdsm
95f48f9aae feat(dashboard): canonical ViewHeader across left-sidebar views (consistent color/sizing/divider/buttons)
ViewHeader.css defaults now carry the canonical header: space-lg/space-xl padding, surface bg, 1px border-bottom, icon var(--todo), title 1.125rem/600, actions pinned right (margin-left:auto). Removed now-redundant per-view overrides (Agents, Documents doubled divider); converted Secrets from a bespoke header to ViewHeader (Lock icon + Refresh/Add as btn btn-sm); aligned Command Center title metrics. Right-dock/pop-out Secrets hide-selectors retargeted so the dock is unchanged. Chat/Todo (no view title row) and AgentDetail (per-entity header) intentionally left bespoke.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:36:20 -07:00
gsxdsm
35b1838c5f feat(dashboard): richer GitHub import comments — avatar, time, human/bot badge, nav, filter
Comment shape gains authorAvatarUrl + authorIsBot (gh GraphQL Bot/__typename or REST user.type==Bot or [bot] login; avatar from API or github.com/{login}.png, suppressed for bots). New shared CommentsThread (PR + issue) shows author avatar (lucide Bot/User fallback), readable localized timestamp (ISO title), a Human/Bot badge + data-comment-author-type, prev/next chevron nav that scrolls+highlights, and an All/Human/Bot filter defaulting to All.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:18:12 -07:00
gsxdsm
459237c974 feat(dashboard): task description + summary render sanitized HTML + mermaid
Extract the markdown HTML/mermaid pipeline into shared markdownPipeline.tsx (sharedSanitizeSchema, sharedRehypePlugins, createMermaidCodeComponent). MailboxMessageContent now consumes it (unchanged behavior). TaskDetailModal's description + summary ReactMarkdown gain sharedRehypePlugins + the mermaid code component (merged with the existing file-path linkify), keeping the .markdown-body wrapper — so raw HTML renders, comments drop, scripts are sanitized, and mermaid blocks render.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:15:46 -07:00
gsxdsm
b4e4013869 fix(dashboard): collapse empty Planning footer; Planning header matches Mission (icon/gap/title/divider)
- .planning-view-footer:empty -> display:none (no reserved space / divider band when empty); legitimate composer + start-planning footers untouched.
- Planning embedded header icon -> var(--todo), title-row gap -> space-sm, h3 -> 1.125rem/600/var(--text), border-bottom divider -> matches mission-manager__header exactly. Mission already had a single divider (no doubled line); documented the invariant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:14:23 -07:00
gsxdsm
a9b0e6c0d1 feat(dashboard): GitHub import issues show comments + a Close-issue action
Mirrors the PR detail pattern for issues: GitHubClient.getIssueDetail (gh issue view --json comments, REST fallback) + closeIssue (gh issue close, REST PATCH fallback); new POST /api/github/issues/detail + /issues/close routes. The Issues preview fetches comments on selection (cached, non-blocking) and renders them below the body; a Close-issue button in the preview header (open issues only) closes via the API, toasts, and reflects the closed state without dismissing the view.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:10:43 -07:00
gsxdsm
8640a747aa feat(dashboard): shared markdown renders embedded HTML (sanitized) + mermaid diagrams
MailboxMessageContent pipeline gains rehype-raw -> rehype-sanitize (GitHub-like allow list: details/summary/kbd/tables/etc; strips script/style/iframe/on*/javascript:) so raw HTML in markdown renders and HTML comments are dropped. Fenced ```mermaid blocks render via a lazy-loaded MermaidDiagram component (dynamic import keeps mermaid out of the main bundle; theme-aware; falls back to the raw block on parse error).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:08:25 -07:00
gsxdsm
fefc91b30e fix(dashboard): center List toolbar buttons, match Chat divider exactly, shrink quick-add right padding
- Toolbar (Bulk Edit / View / New Task) is centered (dropped the margin-left:auto right-push).
- List divider now draws its 1px line via .list-split-sidebar border-right (identical to Chat's .chat-sidebar), with a transparent hover-tint handle; removed the doubled detail border-left.
- Quick-add input padding-right 70px (inherited from the global .description-with-refine textarea refine-button reservation) tightened to space-sm — no overlaid button there, so text reclaims the width.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:02:32 -07:00
gsxdsm
50e271535e fix(dashboard): GitHub import embedded view scrolls on narrow mobile
At narrow viewports the embedded view entered the dialog's mobile single-pane rules (overflow:hidden workspace + inner pane-content scroll), but the embedded body-scroll model flipped panes to natural height with no inner scroll — leaving orphaned overflow:hidden clips and no scroll owner, so a tall preview was unreachable. Add an embedded-scoped @media(max-width:640px) override making .github-import-modal__body the single scroll owner with the chain at natural height/overflow:visible. Wide two-pane + non-embedded dialog untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:02:00 -07:00
gsxdsm
44257dd8ea fix(dependency-graph): graph centers on first paint without a manual drag
Root cause: fitToGraph's clampPan clamped against graphBoundsRef, which a separate effect populated from NORMALIZED bounds — on first paint the ref was still {0,0,0,0}, so pan clamped to +/-viewport (off-center) and only a manual drag re-ran clampPan against the committed bounds. Fit now runs on normalizedPositions (fit-space == render-space == clamp-space), after the setGraphBounds effect, deferred a double-rAF so the committed bounds are live before clampPan; ResizeObserver still drives the hidden->visible 0->N fit. Manual-layout opt-out preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 11:01:23 -07:00
gsxdsm
d12202b047 fix(dashboard): sidebar active color wins over hover; New Task footer button matches Collapse/Settings size
- Active/selected nav row keeps the accent color even while hovered (--active:hover now outranks plain :hover).
- New Task footer button drops its CTA inset margins so it's the same height/width as the Collapse and Settings footer items (keeps the accent fill).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:56:26 -07:00
gsxdsm
f7e9c11137 feat(dashboard): move sidebar New Task button into the footer, above Collapse
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:48:57 -07:00
gsxdsm
51d0471c95 feat(dashboard): Agents header matches Missions; GitHub import action moves to preview-pane top
- AgentsView header: ViewHeader matched to Missions (icon --todo color, space-lg/space-xl padding, border-bottom + surface bg).
- GitHub import (embedded): import button moves to the top of the preview pane; the bottom Import/Cancel bar is removed for embedded (kept for the modal presentation); importing no longer dismisses the view; narrow mobile keeps the top action reachable.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:44:23 -07:00
gsxdsm
8c905876a9 feat(dashboard): Planning embedded view matches Missions (resizable sidebar, footer, button, header spacing)
Remove the New Session button's inset-ring outline (now identical to the Missions sidebar CTA); match the Missions sidebar footer padding/border; add a resizable sidebar mirroring MissionManager (drag handle, persisted width, clamp, keyboard); match the header + content padding (space-lg/space-xl, surface bg) so Planning and Missions read as siblings.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:44:23 -07:00
gsxdsm
7b295d52d1 feat(dashboard): sidebar item shows active color immediately on click; List 'View options' -> 'View'
- LeftSidebarNav: optimistic active highlight — clicking a nav item paints the active color instantly instead of lingering on the hover color until the lazy view mounts.
- List view: the view-options toggle label is now 'View'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:44:23 -07:00
gsxdsm
b679577fa0 fix(dashboard): consistent 1px sidebar divider across List, Chat, Mailbox
List handle drops its persistent tinted band (transparent default) and its grip line goes 2px->1px; Mailbox divider line goes var(--space-xs)->1px var(--border). All three now show a single clean 1px static divider with the wider handle as an invisible hover-highlight hit-area (Chat's pattern).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:37:28 -07:00
gsxdsm
f5b8d42e44 feat(dashboard): Skills view is a responsive master/detail two-pane
Wide (>=640px container): skills list left + skill detail right (both visible). Narrow/mobile: single-panel master->detail — selecting a skill shows the detail on top with a Back affordance. CSS container query, mirroring DockFilesView.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:37:28 -07:00
gsxdsm
7b51205d48 fix(dashboard): import list pane no longer blows out wide when GitHub data loads
ROOT CAUSE (confirmed live via agent-browser): the list pane had flex:0 0 256px set correctly but rendered at 978px because min-width defaulted to auto — once issues/PRs load, the long titles' min-content width overrode the flex-basis and forced horizontal overflow ('data loads -> too wide -> can't shrink'). Add min-width:0 to both panes + the embedded wide rule, and truncate list items (.issue-title ellipsis, subtree min-width:0) so titles can't dictate pane width.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:37:27 -07:00
gsxdsm
0cdc5a2f12 feat(dashboard): move Automations + Import Tasks above Compound Eng in the sidebar nav
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:28:39 -07:00
gsxdsm
7231a57511 feat(dashboard): Secrets cross-node sync passphrase moves below the list, collapsed behind a disclosure
The passphrase section now renders below the secrets list as a click-to-expand disclosure (closed by default), keeping all set/rotate/clear behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:26:14 -07:00
gsxdsm
e9a0b72747 feat(dashboard): Overview drops Active-nodes/Sessions cards, stat numbers auto-fit large, more engine-button spacing
- Remove the Active nodes and Sessions stat cards (data still feeds the activity sparkline). Remaining cards reflow via auto-fill.
- Stat value font scales up to fill the card (container-query cqi clamp, nowrap+overflow:hidden+min-width:0 so long values shrink to fit, never overflow).
- Add space-lg above the View Board/View Agents row so it's balanced below the Start/Stop AI Engine button.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:26:14 -07:00
gsxdsm
66925816bd feat(dashboard): move Planning+Missions below Graph (before Agents); confirm dialog renders above floating modals
- LeftSidebarNav: Planning + Missions now sit directly after List/Graph and before Agents.
- ConfirmDialog: portal to document.body and claim the top of the shared floating z-stack on open, so the discard-changes confirm appears ABOVE the floating New Task window (and other floating modals) instead of behind it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:26:14 -07:00
gsxdsm
d3da3cc301 feat(dashboard): Planning embedded view is a real two-pane like Missions
Left becomes a full-height .planning-sidebar (Missions-matched surface/border/width) with a scrolling list and a bottom-pinned footer; New Session moves to that footer using btn btn-primary (same CTA tokens as the Missions create button — size/color match). Right .planning-detail fills remaining width + full height, so it reads as a true two-pane view. Non-embedded modal presentation unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:19:12 -07:00
gsxdsm
2dc36d9ef4 feat(dashboard): Import Tasks PR preview shows full comments + checks with per-check status
New POST /api/github/pulls/detail endpoint + GitHubClient.getPullRequestDetail (gh pr view --json comments,statusCheckRollup, REST fallback). On PR select, the preview fetches detail (cached per PR, body never blocked) and renders below the body: a Checks section (each check name + status pill success/failure/pending/neutral, linked to detailsUrl) and a Comments section (chronological, markdown via MailboxMessageContent). Issues tab unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:19:12 -07:00
gsxdsm
ab9db246bb feat(dashboard): right dock resizes wider (max 1280) + Files goes two-pane when the dock is wide
- RIGHT_DOCK_MAX_WIDTH 720 to 1280 (all clamps/persist/aria funnel through it); CSS --right-dock-max-width raised to calc(space-2xl * 40), keeping min(100%, ...).
- The dock now threads its live width into the overflow view render props; the Files entry deterministically forces the LEFT|RIGHT two-pane split when the dock width >= 640 (no longer relying on the flaky @container query that left it stacked top/bottom). Narrow dock keeps the stacked single-panel nav; the expand pop-out stays always two-pane.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:11:56 -07:00
gsxdsm
03aeed291f feat(dashboard): Import Tasks list pane small + freely resizable, preview fills remainder
Default list width 256px (min 160, max min(480px,50%)), driven by an inline width var with flex:0 0 so the drag actually wins (the embedded wide layout previously forced a clamp via !important, so the handle did nothing). Preview pane is flex:1 1 auto;min-width:0 so freed space flows to it. Persisted per-project via kb-dashboard-github-import-list-width. Shared workspace covers both Issues and Pull Requests tabs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:09:32 -07:00
gsxdsm
b13bc46b9d fix(dashboard): PullRequestView no longer hangs on loading when there is no PR
detail===null always rendered the 'Loading PR…' spinner, so with no pullRequestId (nothing to load) the view spun forever. Add a  flag set only while a fetch is in flight (no id → empty state), a fetch timeout (15s) so a hung request surfaces an error, and a 'No pull request to show' empty state.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 10:05:58 -07:00
gsxdsm
4bbcbc0e77 feat(dashboard): terminal controls move to footer, text-size left, icon-only pop-out
Move Clear / Shortcuts / Preferences from the top toolbar into the bottom footer next to the text-size control; text-size sits at the far left, then the action cluster, then connection status pushed right. The pop-out toggle is now icon-only (Maximize2/Minimize2, aria-label/title kept). Footer wraps + the action cluster scrolls on narrow widths.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:59:26 -07:00
gsxdsm
8e1e0920df feat(dashboard): New Task 'Advanced' disclosure + inline quick-add buttons; cap Memory editor height
- New Task dialog: deep options (models, branch, node, review level, auto-merge, workflow, github tracking, attachments) collapse behind an 'Advanced' disclosure (collapsed by default); inline Attach/Fast/Priority quick-add buttons (QuickEntryBox style) sit next to Plan, wired to existing TaskForm state.
- Memory view: cap the editor box to ~a page (max-height: 60vh) with internal CodeMirror scroll, so a long memory file no longer forces endless page scrolling.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:59:26 -07:00
gsxdsm
4626f8e7fe feat(dashboard): list-view count/border cleanup, overview buttons match Stop AI Engine, center graph on load
- List view: remove the 'X of Y tasks' count from the desktop sidebar toolbar and the border between the controls row and the quick-add box (mobile count kept). Count-display tests now verify the filter via rendered rows.
- Command Center Overview: View Board / View Agents are btn btn-secondary (taller, centered) matching the Stop AI Engine button.
- Dependency graph: fit/center on load — the initial fit ran before the viewport was measured + before nodes were positioned (async), and never re-fit. Now fits only when fittable (nodes + measured viewport) and re-fits when the node set changes (covers async load + re-entering the view).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:59:26 -07:00
gsxdsm
19fe573cd3 Merge pull request #1720 from Runfusion/feature/onboarding-improve
Simplify first-run and new-project onboarding
2026-06-22 09:56:47 -07:00
gsxdsm
fe2800f020 Merge remote-tracking branch 'origin/main' into feature/onboarding-improve
# Conflicts:
#	packages/dashboard/vite.config.ts
2026-06-22 09:47:52 -07:00
gsxdsm
13bd2e473a feat(dashboard): list-header one-row, file pop-out opens current file, taller overview buttons; fix redesign test suite
- List view header: count + Bulk Edit + View options + New Task on one compact btn-sm row; view-options shrunk; count compacted/secondary.
- File browser pop-out now opens the file you're currently viewing — current path shared via scoped storage (kb-dashboard-dock-files-current) with cross-instance live-sync.
- Dashboard Overview: View Board / View Agents are now btn btn-secondary (taller, centered) to match the Stop AI Engine button.
- Test suite: fix ~40 stale assertions from the redesign (App nav moved to LeftSidebarNav, Import Tasks embedded, removed Todos in-view header, SkillsView shared ViewHeader, gm embedded keyboard rule, ThemeSelector option drift) — test-only, nothing weakened. Pre-existing board-mobile InlineCreateCard failure left as-is.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:47:27 -07:00
gsxdsm
dfd4baf240 Merge pull request #1722 from Runfusion/feature/import-github-fix
fix(FN-1721): scope GitHub import remotes to project
2026-06-22 09:45:45 -07:00
gsxdsm
5e0e9c08f3 fix(FN-1721): expose ViewHeader to dashboard plugin build
Map the shared dashboard ViewHeader module in Vite, Vitest, and app TS paths so bundled plugin dashboard views resolve the host component during PR build/typecheck.

References: https://github.com/Runfusion/Fusion/issues/1721
2026-06-22 09:36:05 -07:00
gsxdsm
67281fe4dd fix(FN-1721): scope GitHub import remotes to project
Pass the active projectId when the GitHub import modal detects remotes so multi-project dashboards do not show a false no-remotes state. Ignore stale remote responses when projectId changes while the modal remains open.

References: https://github.com/Runfusion/Fusion/issues/1721
2026-06-22 09:25:26 -07:00
gsxdsm
0b34994ae4 fix(dashboard): put floating-modal z-index on the overlay, not the panel (fixes overlap + tap-to-front)
Verified against the live DOM: a panel z-index is trapped inside the position:fixed overlay's stacking context, so page elements that are themselves stacking contexts in body (the right dock at position:absolute z-index:20, card badge contexts) painted OVER the modal, and tap-to-front (which raised the panel z) had no effect at the body level. Move the dynamic shared-stack z onto each modal's fixed overlay (FloatingWindow, RightDockExpandModal, TerminalModal floating, NewTaskModal floating) so the whole window sits at the shared band in body's stacking context — modals now paint above all page content and tapping reliably brings a window to the front across types.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 09:14:51 -07:00
gsxdsm
3c49f591b7 fix(FN-000): address onboarding review feedback 2026-06-22 09:13:58 -07:00
gsxdsm
296fb553b8 test(dashboard): update gm-mobile + mailbox-divider CSS regression assertions
- GitManagerModal mobile tab strip is now icon-only one-row: assert non-shrink via flex:0 0 auto + width:auto (was min-height for the old icon+label layout).
- MailboxView split-pane divider now mirrors the Chat divider: handle width var(--space-sm) + transparent background, ::before line var(--space-xs) (was --space-xs handle + color-mix bg).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 08:57:40 -07:00
gsxdsm
1ced957dbf fix(dashboard): portal all floating modals + lift z-band so they stack above page overlays and tap-to-front works cross-type
Root causes of modals being overlapped + tap-to-front not working across types:
- Only FloatingWindow was portaled; the dock pop-out, terminal, and New Task rendered inline in their own stacking contexts, so the shared z-counter could not order them across types. Portal all three to document.body so all four floating modals share the one root stacking context.
- The floating band started at 4000, below page overlays/popovers at 10000-10001 (log viewer, workflow editor, selection popover, fullscreen overlay) which painted over the modals. Raise the shared band base to 10100. Toasts already sit at 200 (below), unaffected.
- Update RightDock dock-toggle test to the current behavior (popping out closes the dock; the floating modal survives) and fix NewTaskModal keyboard-vars test to query the portaled modal from document.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 05:52:44 -07:00
gsxdsm
56c4d8be7c fix(dashboard): terminal renders + shortcut bar scrolls on narrow/folded mobile
- Spaced-glyph rendering on fold: FitAddon could fit while the container width was mid-fold-transition, computing a wrong cell width. Add a deferred rAF re-fit once width settles + an orientationchange listener so columns re-settle after a fold/rotate.
- Shortcut bar now scrolls horizontally: keys are flex:0 0 auto (kept intrinsic width so the row overflows) with touch-action:pan-x + overscroll-behavior-x:contain + momentum scroll.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 05:39:10 -07:00
gsxdsm
2bfac78b47 fix(onboarding): simplify agent setup copy 2026-06-22 05:37:58 -07:00