Commit Graph

975 Commits

Author SHA1 Message Date
gsxdsm
108c3958ac feat(FN-1193): use sha^ base for done-task diff endpoints
- Update done-task /diff and /file-diffs routes to always resolve merge base from commitSha^ for squash merges
- Remove baseCommitSha ancestor/merge-base fallback logic that could include unrelated merged task changes
- Expand routes-diff regression tests to assert sha^ behavior and ensure baseCommitSha/baseBranch are ignored for done tasks
- Add done-task coverage in routes-file-diffs tests for sha^ success, missing commitSha, and rev-parse failure paths
2026-04-08 09:35:24 -07:00
gsxdsm
cc4c4dc7e1 feat(FN-1225): add headless fn serve command with health checks
- Add a new serve command implementation that runs the dashboard server in headless mode and exposes a health endpoint
- Register the serve command in CLI routing and extend bin command coverage for dispatch behavior
- Add comprehensive serve command tests for startup flow, options handling, and health-check responses
- Fix mission event ordering in MissionStore to keep health snapshots deterministic under concurrent updates
- Include a changeset for @gsxdsm/fusion documenting the new fn serve capability
2026-04-08 09:26:56 -07:00
gsxdsm
f0878ce7b6 refactor(FN-1242): migrate desktop vitest config to project-based setup
- Replace environmentMatchGlobs with explicit Vitest test.projects entries for desktop and desktop-renderer suites
- Keep desktop core tests on the threads pool and renderer tests in a jsdom-targeted project
- Increase the batch-import 429 retry test timeout from 30s to 60s to reduce CI flakiness
2026-04-08 09:17:23 -07:00
gsxdsm
ebb8e63274 feat(FN-1148): add AI session keep-alive pings for SSE streams
- Add AiSessionStore.ping() and expose POST /api/ai-sessions/:id/ping for lightweight heartbeat updates without emitting high-frequency session events
- Add pingSession() client API and integrate 25s keep-alive timers into planning, subtask, and mission interview resilient SSE connections
- Ensure keep-alive timers stop on stream completion, fatal errors, and explicit close while treating ping failures as best-effort non-fatal behavior
- Expand API/store/routes coverage with targeted tests for ping endpoint behavior, ping store semantics, and SSE keep-alive lifecycle handling
- Stabilize MissionStore latest-error lookup ordering with a rowid tiebreaker when timestamps are equal
2026-04-08 09:15:25 -07:00
gsxdsm
c07c9f4aba fix(FN-1241): stabilize PlanningModeModal race-condition test
- Replace fragile real-timer setTimeout sequencing with fake timers to eliminate CI flakiness
- Refactor mocked planning stream/response flow to deterministically deliver the second question
- Add explicit timer advancement and intermediate assertions around Continue click and response dispatch
- Ensure timer state is always restored with try/finally and keep single-SSE-connection verification
2026-04-08 09:12:15 -07:00
gsxdsm
d2db088642 fix(FN-1162): keep mobile file browser header controls accessible
- Update file browser header styles to wrap cleanly on small screens and preserve readable truncated labels
- Increase mobile close-button hit area and keep close action visible within header actions layout
- Add responsive WorkspaceSelector constraints to prevent menu/trigger overflow on narrow viewports
- Add a regression test that verifies the mobile close button remains visible and clickable
2026-04-08 09:07:34 -07:00
gsxdsm
4eef067baa feat(FN-1141): improve dashboard mobile adaptations
- Extend mobile CSS for SettingsModal, AgentsView, ExecutorStatusBar, ActiveAgentsPanel, toast placement, and background task popovers
- Rename BackgroundTasksIndicator list/item class hooks to align with the updated responsive styling contract
- Add focused component tests covering settings, agents, and utility mobile adaptations plus key CSS media-rule assertions
- Document mobile component adaptation behavior and testing guidance in the dashboard README
2026-04-08 08:48:21 -07:00
gsxdsm
69621e78dc feat(FN-1147): rehydrate AI sessions across server restarts
- Add recoverable-session querying in AiSessionStore and cover it with targeted store tests
- Persist resume context (ip, initial plan, mission metadata) and rebuild planning/subtask/mission sessions from SQLite rows
- Rehydrate recoverable sessions at server startup and resume planning/mission interviews by recreating agents with replayed conversation context
- Update API flows to pass project root context and clean in-memory sessions when persisted sessions are deleted, with comprehensive regression tests
2026-04-08 08:26:57 -07:00
gsxdsm
2a923ea1a0 feat(FN-1217): add mission observability events and APIs
- Add mission observability types and core exports for mission health snapshots and event records
- Extend SQLite schema and MissionStore with mission_events persistence plus health and staleness query helpers
- Emit mission start and autopilot lifecycle events from MissionAutopilot for richer runtime telemetry
- Add dashboard mission observability routes and end-to-end coverage for mission events and health APIs
- Expand unit tests across core and engine and include a changeset for mission observability updates
2026-04-08 08:22:33 -07:00
gsxdsm
8e61566ad1 refactor(FN-1240): remove dashboard Capacitor coupling in favor of @fusion/mobile
- Remove legacy dashboard Capacitor config, scripts, and package dependencies now managed by @fusion/mobile
- Rewrite network, splash-screen, and status-bar plugin managers to use guarded global Capacitor plugin adapters without direct @capacitor imports
- Update plugin tests to stub Capacitor globals and drop obsolete capacitor config test coverage
- Simplify dashboard mobile README guidance and add a @gsxdsm/fusion patch changeset documenting the migration
2026-04-08 08:10:17 -07:00
gsxdsm
b97d9fc3ee feat(FN-1237): move AgentLogViewer timestamps into badge row
- Render timestamps only when an entry includes an agent badge
- Remove standalone timestamp prefixes from text and tool log rows
- Keep relative timestamp formatting while colocating it with agent identity
- Update AgentLogViewer tests for badge-scoped timestamps and legacy entries without agents
2026-04-08 07:44:38 -07:00
gsxdsm
af0c4bcbcc feat(FN-1140): add mobile list cards and viewport hook
- Extract useViewportMode into a reusable hook and update Header/ListView to use it
- Render mobile ListView cards with collapsible column sections, card metadata, and selection support
- Add mobile-first styles for card layout, touch targets, focus states, and quick-entry overflow handling
- Expand ListView and QuickEntryBox tests to cover mobile rendering and interaction behavior
2026-04-08 07:38:32 -07:00
gsxdsm
c43357937b fix(FN-1234): stabilize mobile terminal tab switching
- Add session-aware terminal fit/resize logic so deferred viewport callbacks only affect the active tab session
- Trigger a post-init re-fit when keyboard overlap is already present during async xterm initialization
- Guard data, scrollback, and exit handlers to prevent stale session output from writing into a newly active tab
- Add FN-1234 regression tests for mobile tab switching with keyboard overlap, resize propagation, and scrollback isolation
2026-04-08 07:30:32 -07:00
gsxdsm
cb24d6ccca feat(FN-1189): add Agent Companies import support
- Expand fn agent import to accept directories, .tar.gz/.tgz/.zip archives, single .md manifests, and legacy .sh manifests
- Update /api/agents/import to handle agents array, source path, or manifest string inputs with dry-run previews and legacy fallback parsing
- Refresh AgentImportModal and dashboard API typing for new preview metadata, directory uploads, and improved error handling
- Add coverage for CLI import paths, dashboard import routes, modal behavior, and assignment route timeout stability
- Add a minor @gsxdsm/fusion changeset documenting Agent Companies import support
2026-04-08 07:13:38 -07:00
gsxdsm
ad54b0f6f9 feat(FN-1223): add remote node connection APIs to CentralCore
- Add a new NodeConnection utility that validates inputs, tests /api/health endpoints, normalizes URLs, and classifies connection failures
- Add CentralCore methods to test node connectivity and connect/register remote nodes, with duplicate-name checks and node:connection:test event emission
- Export NodeConnection types and APIs from @fusion/core for external consumers
- Add comprehensive unit coverage for NodeConnection and CentralCore connection flows, and increase dashboard assignment test setup timeout to reduce build/test flakiness
2026-04-08 06:53:36 -07:00
gsxdsm
9b3e8c61db feat(FN-1139): improve mobile board touch experience
- Add mobile board overrides for smooth horizontal snap scrolling, hidden scrollbars, and fixed 280px centered columns
- Update task card mobile styles to keep key actions visible and enforce 44px touch targets for primary controls
- Adapt inline create UI for narrow columns with 16px input text, wrapped controls, and constrained dependency dropdown sizing
- Add board-mobile tests covering CSS mobile rules plus touch tap-vs-scroll behavior for TaskCard and InlineCreateCard
- Document the mobile board interaction model and touch target conventions in the dashboard README
2026-04-08 06:47:59 -07:00
gsxdsm
00d5f36240 feat(FN-1146): add configurable AI session cleanup lifecycle
- Add aiSessionTtlMs and aiSessionCleanupIntervalMs project settings with defaults and bounds for cleanup scheduling
- Extend AiSessionStore cleanup to expire stale in-progress sessions, emit deletion events, and support start/stop scheduled cleanup loops
- Wire server startup/shutdown to load cleanup settings and manage the scheduled ai_sessions sweep lifecycle
- Align planning, subtask breakdown, and mission interview in-memory session retention to a 7-day TTL with shared deletion-driven cleanup
- Update schema/tests/docs for migration v15 ai_sessions indexing and end-to-end cleanup/TTL behavior stability
2026-04-08 06:44:09 -07:00
gsxdsm
220c269b0d feat(FN-1165): add agent org chart routes and API helpers
- Add dashboard routes for /agents/org-tree and /agents/resolve/:shortname with scoped store wiring and 404 handling
- Add /agents/:id/chain-of-command endpoint to return reporting hierarchy from self to top manager
- Extend dashboard app API with OrgTreeNode export plus fetchOrgTree, fetchChainOfCommand, and resolveAgent helpers
- Add route tests covering org-tree, resolve, and chain-of-command success and not-found scenarios
2026-04-08 06:23:36 -07:00
gsxdsm
b949fd01ff feat(FN-1212): update header with circular Fusion logo
- Replace the header SVG mark with a circular outline and filled path-based glyph using currentColor
- Keep logo semantics and ordering intact while modernizing the visual treatment
- Update Header tests to assert currentColor-based geometry and verify the stroked outer circle
2026-04-08 06:16:18 -07:00
gsxdsm
b6fbadec4d feat(FN-1145): harden dashboard SSE streams with replay and reconnect
- Add a shared SSE event buffer utility and wire it into planning, subtask, mission interview, and task stream routes
- Support Last-Event-ID replay semantics and robust event serialization so clients can recover missed stream events
- Add a resilient client-side reconnect wrapper and surface reconnecting state in planning, subtask breakdown, and mission interview modals
- Expand test coverage across API routes, SSE buffering behavior, reconnect handling, and mission/planning stream flows
2026-04-08 06:02:28 -07:00
gsxdsm
586d9b33b1 feat(FN-1137): improve mobile dropdown and file browser interactions
- Add viewport-aware positioning/clamping for Quick Scripts and Quick Entry dropdown menus
- Implement long-press context menu behavior in FileBrowser with iOS momentum scrolling support
- Expand dashboard CSS and component logic to stabilize mobile overlay behavior and remove unused inline WebKit style
- Add focused tests for FileBrowser, QuickScriptsDropdown, and mobile dropdown positioning plus README notes
2026-04-08 05:59:12 -07:00
gsxdsm
7becb33972 feat(FN-1203): extract App orchestration into focused hooks
- Extract modal manager, app settings, deep-link handling, favorites, and auth onboarding into dedicated hooks
- Rewire App.tsx to consume the new hooks and reduce component-level state/effect complexity
- Preserve favorite-toggle error toast behavior in the updated favorites wiring
- Add hook-level test coverage for modal manager, app settings, deep links, favorites, and auth onboarding flows
2026-04-08 05:53:24 -07:00
gsxdsm
eb6676eee0 feat(FN-1208): reorder task form attachments above dependencies
- Move the Attachments form section to render before Dependencies in TaskForm
- Keep existing screenshot attach/remove interactions intact while changing layout order
- Add NewTaskModal test coverage asserting Attachments appears before Dependencies in DOM order
2026-04-08 05:21:07 -07:00
gsxdsm
8e8fc07dc1 fix(FN-1136): tighten dashboard mobile header and mailbox layouts
- Move the overflow planning badge into a dedicated icon wrapper to prevent text overlap on mobile
- Add Header test coverage for active planning sessions in the mobile overflow menu
- Scope mailbox mobile CSS rules to .mailbox-modal to avoid global style bleed
- Refine mobile mailbox spacing, tab sizing, and minimum agent panel height for better small-screen usability
2026-04-08 04:59:00 -07:00
gsxdsm
9aa0add239 fix(FN-1131): align planning confirm button content
- Update .planning-confirm-btn to use flex layout for consistent icon/text alignment
- Center button content vertically and horizontally in planning confirmation UI
- Add var(--space-sm) gap so button label and icon spacing matches dashboard controls
2026-04-08 04:42:50 -07:00
gsxdsm
99b6343248 fix(FN-1123): correct branches panel flex sizing
- Make .gm-content a column flex container so nested panels can size correctly
- Let .gm-panel grow/shrink with flex: 1 and min-height: 0 to avoid layout clipping
- Replace fixed .gm-branches-list max-height with flex-based scrolling to use available height
2026-04-08 04:38:47 -07:00
gsxdsm
4ba4cca01f feat(FN-1130): add project memory editing in settings
- Add GET /api/memory and PUT /api/memory routes with project-scoped file access and validation
- Add fetchMemory and saveMemory dashboard API helpers for memory file operations
- Extend the Settings modal Memory section with inline FileEditor loading, dirty tracking, save action, and read-only behavior when memory is disabled
- Add SettingsModal tests covering memory load, loading state, save flow, and empty-content handling
2026-04-08 04:30:10 -07:00
gsxdsm
757942bd18 feat(FN-1108): add mobile bottom navigation to dashboard
- Export viewport utilities and add a new MobileNavBar component for core mobile navigation actions
- Integrate the bottom nav into App layout and simplify Header rendering when mobile navigation is active
- Add comprehensive mobile bottom-nav styling and spacing updates in the shared dashboard stylesheet
- Add component and CSS regression tests for mobile nav behavior, including escape-key interaction coverage
- Document the mobile bottom navigation UX and behavior in the dashboard README
2026-04-08 04:20:31 -07:00
gsxdsm
e555eee564 feat(FN-1144): add planning model override support to planning mode
- Add planning model selection UI to PlanningModeModal initial view with model loading, favorites wiring, and default/custom badge state
- Extend startPlanningStreaming client API to send optional planningModelProvider/planningModelId overrides
- Propagate planning model overrides through /planning/start-streaming and createSessionWithAgent so agent creation uses selected model settings
- Add frontend and backend tests covering modal selection behavior, request forwarding, and end-to-end planning model flow
2026-04-08 04:10:10 -07:00
gsxdsm
3ab9da6f7f feat(FN-1098): add dashboard task-agent assignment flow
- Add task-agent assignment API helpers with coverage for assign, unassign, and list endpoints
- Show assigned agent badges on task cards and add assignment controls in TaskDetailModal
- Add agent task management tab plus agent selectors in quick and inline task creation UIs
- Expand component test coverage and include a changeset for the dashboard agent assignment feature
2026-04-08 03:19:09 -07:00
gsxdsm
e4af27910e feat(FN-1168): include planning interview Q&A in breakdown outputs
- Add a shared interview Q&A formatter for planning history across question types
- Append formatted interview context to generated subtask descriptions when history exists
- Include the same interview context in multi-task planning log entries for created tasks
- Expand planning tests to cover formatter behavior and subtask description context handling
2026-04-08 02:30:50 -07:00
gsxdsm
6e00061684 feat(FN-1132): support resuming completed planning sessions
- Include complete planning sessions in active session queries and background tracking
- Add create-task fallback to recover completed planning data from persisted ai session records
- Validate and reconstruct summary/initial plan data from stored JSON before creating tasks
- Expand tests for modal resume flow, session-store filtering, and route fallback behavior
2026-04-08 02:06:37 -07:00
gsxdsm
7d7c7efbd9 feat(FN-1127): add awaiting-approval ntfy notifications
- Extend ntfy event types and default ntfyEvents to include awaiting-approval
- Send high-priority "Plan needs approval" notifications for awaiting-approval task updates with deep-link support
- Add Notifications settings checkbox handling for awaiting-approval event selection in Settings modal
- Expand notifier and settings modal tests for awaiting-approval defaults, toggles, filtering, and deduplication
- Update AGENTS.md ntfy documentation and sample config to include the new event
2026-04-08 02:00:39 -07:00
gsxdsm
d7f49c0dbe feat(FN-1107): establish dashboard mobile CSS foundation
- Add mobile breakpoint tokens and a reusable .touch-target utility with 44px minimum hit area
- Harden mobile styles with global 16px text-entry sizing, safe-area inset padding, and overflow guards for wide content
- Keep Capacitor viewport constraints in index.html and document the shared mobile CSS conventions in the dashboard README
- Add mobile CSS foundation coverage and update input font-size tests to validate the new global selectors
2026-04-08 01:46:07 -07:00
gsxdsm
025b60164d feat(FN-1122): add agent permission access APIs
- Define canonical agent permission types and export permission helpers from @fusion/core
- Add permission normalization and access-state computation with role defaults plus explicit grants
- Extend AgentStore with getAccessState and add unit tests for permission logic and store behavior
- Add dashboard routes for GET /api/agents/:id/access and PATCH /api/agents/:id/permissions with request validation and serialization
- Add a minor changeset for @gsxdsm/fusion documenting the new agent permission endpoints
2026-04-08 01:39:15 -07:00
gsxdsm
d30419d70b feat(FN-1191): hot-swap active executor sessions on model changes
- Show resolved default executor, validator, and planning models in the task Model tab
- Pass merged settings into the Model tab from TaskDetailModal so default badges reflect effective runtime resolution
- Hot-swap active single-session executor models when task overrides change, including fallback to project defaults when overrides are cleared
- Add dashboard and executor tests for default model display, hot-swap behavior, fallback logic, and failure logging
- Document hot-swap behavior and limitations in AGENTS.md and add a patch changeset for @gsxdsm/fusion
2026-04-08 01:18:01 -07:00
gsxdsm
bd601959b6 feat(FN-1120): add agent config revision history APIs
- Define and export agent config revision types in @fusion/core for revision metadata and snapshots
- Persist config revisions in AgentStore with type-safe snapshot diffing when agent runtime config changes
- Add dashboard routes to list agent config revisions and fetch individual revision details
- Add focused tests for core revision persistence flows and dashboard agent revision route behavior
2026-04-08 01:12:48 -07:00
gsxdsm
9118fdb16f feat(FN-1176): synthesize fallback resetAt for Claude usage windows
- Update Claude usage window normalization to set resetAt when API omits reset timestamps
- Derive fallback resetAt as now plus the computed window duration while preserving existing resetMs/resetText behavior
- Expand usage tests to assert fallback resetAt is present and approximately 5 hours in the future in both affected scenarios
2026-04-08 01:06:20 -07:00
gsxdsm
0c55b9edfc feat(FN-1118): add mobile sharing and deep-link managers
- Implement ShareManager with native Capacitor sharing, web share fallback, and clipboard fallback plus typed share lifecycle events
- Implement DeepLinkManager with native appUrlOpen and browser hash listeners, URL parsing for fusion schemes and universal links, and error events
- Wire plugin exports and initializePlugins support for share/deepLinks options, and configure Capacitor iOS/Android fusion URL schemes
- Add comprehensive Vitest coverage for sharing and deep-link behavior and document usage in the mobile package README
2026-04-08 00:52:24 -07:00
gsxdsm
07697b2f5b feat(FN-1085): align agent routing and runtime contracts
- Harden core AgentStore lifecycle behavior and heartbeat runtime integration paths
- Align dashboard agent APIs, server routes, and agent UI flows with the updated contract
- Tighten CLI agent/message command routing and validate payload handling semantics
- Expand test coverage across core, dashboard, engine, and CLI for route, heartbeat, and instruction regressions
2026-04-08 00:44:33 -07:00
gsxdsm
92e6aa2b49 feat(FN-1104): add quick chat FAB to dashboard
- Add QuickChatFAB component with agent selection, conversation loading, and inline send actions
- Support panel open/close interactions including close button, Escape key, and outside-click dismissal
- Integrate the quick chat FAB into App so it appears in project view with project-scoped API calls
- Add comprehensive QuickChatFAB tests and style rules for FAB, chat panel, message bubbles, and responsive behavior
2026-04-08 00:43:21 -07:00
gsxdsm
03bae5b0cc fix(FN-1160): align ScriptsModal with current theme tokens
- Replace deprecated text and border CSS variables with canonical dashboard tokens in ScriptsModal
- Standardize error styling to use var(--color-error) for validation and delete confirmation states
- Update script list and empty-state surfaces to use shared card/background tokens for consistent theming
2026-04-08 00:32:43 -07:00
gsxdsm
b386db12bd feat(FN-1105): move background task indicator styling to CSS classes
- Replace inline styles in BackgroundTasksIndicator with semantic class names for pill, popover, and session rows
- Add dedicated styles for attention state, hover behavior, and muted text/border theme tokens
- Style session content, icons, and dismiss controls in styles.css to centralize indicator presentation
2026-04-08 00:19:12 -07:00
gsxdsm
a4a99f31b0 feat(FN-1072): add Electron desktop renderer integration
- Add Electron main-process IPC handlers and preload bridges for API proxying, window controls, update install, and platform lookup
- Introduce a desktop renderer entrypoint with DesktopWrapper and a custom frameless TitleBar component
- Add Electron-aware renderer utilities including API transport selection and hooks for runtime detection, auto-update events, and deep links
- Update dashboard header behavior for Electron mode and expand desktop tests across preload, transport, hooks, and title bar flows
- Document the desktop renderer architecture and update desktop package config/dependencies
2026-04-08 00:16:25 -07:00
gsxdsm
8c5b5e128c feat(FN-1103): improve configured workflow steps experience
- Render a dedicated configured-steps state in WorkflowResultsTab with step count, descriptions, and phase badges when results are not yet available
- Keep inline workflow step editing available from the configured state and results state, including add/remove and execution-order controls
- Refine workflow step loading/edit behavior by aligning callback names and fetching step definitions by project context
- Add dashboard styles for the configured workflow step cards and improved edit toggle button treatment
- Expand WorkflowResultsTab and TaskDetailModal tests and add electron-updater type declarations to restore workspace build
2026-04-08 00:02:02 -07:00
gsxdsm
4f7ba06e18 feat(FN-1116): add Capacitor plugin managers for dashboard
- Add shared plugin types and manager modules for splash screen, status bar, and network handling
- Export plugin initialization from the dashboard entrypoint and configure Capacitor splash/status-bar defaults
- Add unit tests covering plugin initialization and each manager's behavior across supported scenarios
- Document the plugin manager architecture and add required Capacitor plugin dependencies
2026-04-08 00:01:09 -07:00
gsxdsm
5b6a695c53 feat(FN-1119): add agent API key management APIs
- Add AgentApiKey and AgentApiKeyCreateResult types and export them from @fusion/core
- Implement AgentStore API key create/list/revoke methods with SHA-256 token hashing and JSONL persistence
- Add comprehensive AgentStore coverage for CRUD behavior, revocation semantics, persistence, and concurrent key creation
- Add dashboard routes and API tests for POST/GET/DELETE agent key endpoints with 404/validation handling
- Add a minor @gsxdsm/fusion changeset for the new agent API key feature
2026-04-07 23:32:26 -07:00
gsxdsm
075402c11d feat(FN-1081): add dashboard nodes management workflow
- Add node API typings and client methods plus a polling useNodes hook with visibility-triggered refresh
- Introduce NodesView with NodeCard, AddNodeModal, and NodeDetailModal to register, inspect, update, health-check, and remove nodes
- Wire the Nodes surface into the app shell/header and add project node assignment UI with project card node badges
- Add unit coverage for useNodes, NodesView, NodeCard, Header, and ProjectCard behavior, plus node-specific dashboard styling
2026-04-07 23:30:32 -07:00
gsxdsm
74cae4f870 fix(FN-1102): persist workflow step selection in task create payloads
- Add browser verification toggle state to InlineCreateCard and submit browser-verification via enabledWorkflowSteps when selected
- Reset browser verification state after submit/cancel flows to prevent stale workflow selections
- Add InlineCreateCard and NewTaskModal tests that verify enabledWorkflowSteps are included in create payloads
- Add a patch changeset for @gsxdsm/fusion describing the workflow-step visibility fix
2026-04-07 23:26:28 -07:00
gsxdsm
1b3296d91f feat(FN-1093): add mobile build, PWA, and live reload workflow
- Optimize dashboard Vite output for mobile and include vite/client types in app typecheck
- Add PWA support with manifest, service worker, icons, and client registration hooks
- Add a mobile workspace package with Capacitor config and live-reload scripts for local development
- Add a dedicated GitHub Actions mobile pipeline and update mobile workflow documentation
- Add dashboard tests for build output, mobile scripts, and PWA asset coverage
2026-04-07 23:25:34 -07:00