Commit Graph

7875 Commits

Author SHA1 Message Date
gsxdsm
d6e30300a9 feat(FN-822): unify stuck-task detection with configurable project timeout
- Extract isTaskStuck and countStuckTasks into shared utils/taskStuck.ts utility
- Replace hardcoded 10-minute threshold with project taskStuckTimeoutMs setting
- Thread taskStuckTimeoutMs from App settings fetch through ExecutorStatusBar to useExecutorStats
- Return 0 stuck tasks when timeout is undefined/0 (disabled), matching engine behavior
- Update tests to verify disabled state, custom thresholds, and zero threshold edge case
2026-04-04 00:35:21 -07:00
gsxdsm
eef15f077c feat(engine): harden review pipeline with strict scope, build retry, and E2E tests
Improve the plan→review→approve→merge agent pipeline:

- Harden verdict extraction with JSON block parsing and anchored regexes
- Consolidate legacy/new merger conflict APIs into thin deprecated wrappers
- Add configurable strict scope enforcement (strictScopeEnforcement setting)
- Add build retry with timeout to merger (buildRetryCount, buildTimeoutMs)
- Add handleChangesRequested to PrCommentHandler for review feedback loop
- Remove dead code: handleFsChange, processTaskChange, unused imports/fields
- Add E2E multi-verdict sequence tests for the full review pipeline
- Fix unused parameter warnings across engine and core packages

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 00:29:34 -07:00
gsxdsm
a2e67ce0f6 feat(FN-830): add mobile keyboard-aware terminal positioning
- Implement visual viewport API to reposition terminal above on-screen keyboard
- Add smooth CSS transition for terminal modal height changes on mobile
- Add comprehensive regression tests for keyboard overlap and resize behavior
- Remove stale test files (NewTaskModal, TaskForm) and clean up ActivityLogModal tests
- Document mobile keyboard handling approach in dashboard README
2026-04-04 00:19:40 -07:00
gsxdsm
a2e61c7f7b fix(FN-820): fix activity log data source selection in project view
- Fix ActivityLogModal to correctly select between project and central activity logs based on project context
- Add regression tests verifying data source selection logic for single-project and multi-project scenarios
- Update README documentation with activity log data source rules and selection behavior
2026-04-04 00:13:37 -07:00
gsxdsm
d9515c0c75 fix(FN-819): remove stale tests and add regression coverage for new-task surfaces
- Replace obsolete test files (SettingsModal, TaskCard, App, dashboard-footer-mobile-layout) with targeted tests for NewTaskModal and TaskForm
- Fix SettingsModal component reference and update TaskCard preset badge logic
- Clean up dead code in engine pi.ts and its test
- Add preset indicator styles in dashboard CSS
- Update dashboard README to clarify preset availability across all new-task surfaces
2026-04-04 00:04:16 -07:00
gsxdsm
0f16463ec9 feat(FN-828): lock in compaction behavior with comments and regression tests
- Add explicit comments to pi.ts documenting auto-compaction behavior during agent context management
- Add regression tests verifying compaction triggers correctly and preserves conversation integrity
- Document auto-compaction behavior in README under AI Engine section
2026-04-04 00:02:33 -07:00
gsxdsm
370e490e88 fix(FN-859): fix settings export filename prefix to fusion-settings
- Change export filename from 'kb-settings' to 'fusion-settings' in SettingsModal
- Add comprehensive tests for settings export functionality including filename branding
- Remove stale dashboard-footer-mobile-layout test and unused App test
- Fix minor CSS and README cleanup
2026-04-03 23:38:56 -07:00
gsxdsm
cd1a06d66b fix(FN-824): replace mobile board viewport-height with percentage fill
- Replace viewport-height CSS with percentage-based fill to prevent mobile footer overlap
- Add regression tests for mobile footer-safe layout in dashboard-footer-mobile-layout.test.ts
- Add App.test.tsx coverage for viewport height behavior
- Document mobile layout fix in README
2026-04-03 23:38:00 -07:00
gsxdsm
19ccc8144a feat(FN-814): add awaiting-approval board highlight with distinct visuals
- Add amber/orange highlight styling for tasks with awaiting-approval status on the board
- Update TaskCard component to render awaiting-approval status badge and border styling
- Add comprehensive unit tests for awaiting-approval card rendering scenarios
- Document awaiting-approval board highlight behavior in README
2026-04-03 23:21:06 -07:00
gsxdsm
64384f3324 feat(FN-818): use merge commit diff for done-task Changes tab
- Refactor TaskChangesTab to use merge commit diff for done/archived tasks instead of branch diff
- Add CommitDiffTab component integration for displaying merge commit changes
- Remove legacy API endpoints and tests for branch-based diff on completed tasks
- Add comprehensive test suite for TaskChangesTab covering all task lifecycle states
- Document merge commit diff behavior in dashboard README
2026-04-03 23:04:13 -07:00
gsxdsm
06f940cf52 fix(FN-825): handle 204 No Content in api() and remove unused styles/tests
- Fix api() helper to properly handle 204 No Content responses from mission delete and reorder mutations
- Add regression tests for mission edit/delete 204 handling in e2e tests
- Add unit tests for api() helper covering null/empty/204 response scenarios
- Remove unused CSS styles (175 lines of dead code)
- Remove unrelated test code from ChangedFilesModal, TaskCard, and mobile-scroll-snap tests
- Clean up ChangedFilesModal and TaskCard components
2026-04-03 22:45:59 -07:00
gsxdsm
01024a9d74 feat(FN-817): add expand button and swipe-friendly touch behavior for board cards
- Add expand button to TaskCard for opening task detail modal on mobile
- Implement CSS scroll-snap on board columns for swipe-friendly navigation
- Add touch-action and overscroll-behavior styles for smoother mobile scrolling
- Add comprehensive tests for mobile scroll snap behavior and expand button
- Document expand button and swipe-friendly board behavior in README
2026-04-03 22:40:00 -07:00
gsxdsm
eead86a4cf feat(FN-816): improve mobile UI theme, navigation, and changed-files viewer
- Fix modal entry flow, navigation, and reset behavior for mobile
- Apply mobile theme fixes and navigation improvements across dashboard
- Enhance ChangedFilesModal with mobile-friendly behavior and responsive layout
- Add comprehensive tests for ChangedFilesModal mobile interactions
- Fix orphaned pause path in executor and remove unused code
- Update dashboard README with mobile changed-files viewer documentation
- Add mobile-specific CSS styles for improved responsiveness
- Remove stale changeset for orphaned pause path fix
2026-04-03 22:29:13 -07:00
gsxdsm
6a192d009c fix(FN-827): fix orphaned pause path so gracefully-paused tasks return to todo
- Fix executor bug where tasks paused during execution with a graceful session exit were silently dropped instead of moved back to todo
- When session.dispose() resolves the prompt without throwing, the paused-aborted flag now triggers moveTask(todo) so the scheduler can resume after unpause
- Add executor test suite covering pause via graceful exit, pause via abort error, and pause during session disposal
- Document corrected pause/unpause behavior for in-progress tasks in README and AGENTS.md
2026-04-03 22:09:56 -07:00
gsxdsm
004a282074 feat(FN-803): add ahead/behind commit lists to Git Manager Remotes tab
- Add backend API routes for remote commit lists (local-ahead, remote-ahead, all commits by branch)
- Surface ahead/behind commit counts and expandable commit lists in Remotes tab UI
- Add expand/collapse rows showing commit hash, message, author, and relative date
- Style commit list rows with alternating backgrounds and monospace hashes
- Add comprehensive tests for API routes and GitManagerModal component
- Update README documentation for Git Manager Remotes tab
2026-04-03 22:02:57 -07:00
gsxdsm
1279a8a781 feat(FN-815): consume deep-linked task modal state on dismiss
- Update App.tsx to handle deep-linked task modal dismissal by cleaning up the URL query parameter
- Add comprehensive tests for deep-linked modal dismissal and URL cleanup behavior
- Document one-time deep-link modal behavior in README
2026-04-03 21:52:26 -07:00
gsxdsm
32c5b30648 refactor(FN-846): rename filename prefixes from kb to fusion
- Switch settings export filename prefix from 'kb' to 'fusion' (e.g. fusion-settings-*.json)
- Switch backup filename prefix from 'kb' to 'fusion' with legacy-safe parsing for existing kb-* backups
- Remove unused ntfy deep-link code and dashboard routing for /project/:id
- Remove dead notifier tests and App test assertions for removed features
- Clean up dashboard command and bin.ts unused variables
- Add changeset for the published package rename
2026-04-03 21:39:33 -07:00
gsxdsm
2fad82ea14 feat(FN-813): add project-aware ntfy deep links
- Thread real project context (projectName, projectId) into ntfy notification deep links
- Dashboard deep-link URL now honors project context with /project/:name/task/:id pattern
- Update App.tsx routing to handle project-scoped deep link navigation
- Add project info to NtfyNotifier types and wire through notification payload
- Add changeset for published @gsxdsm/fusion package
- Add tests for notifier project context and dashboard routing
2026-04-03 21:34:39 -07:00
gsxdsm
ac6522c2f7 fix(FN-809): rebrand test ntfy notification from kb to Fusion
- Rename ntfy test notification title from 'kb' to 'Fusion' in dashboard routes
- Remove unused imports in engine triage module
- Move ntfy notification tests from engine to dashboard where the endpoint lives
- Clean up stale test file references in engine integration tests
2026-04-03 21:00:18 -07:00
gsxdsm
960567f0d0 feat(FN-829): persist triage model selection into agent log
- Log the selected model provider and ID during triage so the agent log records which model was used
- Add agent-log entry capturing triage model choice for observability
- Add comprehensive tests for triage model logging behavior
- Update AgentsView component and dashboard docs for consistency
- Remove obsolete AgentsView test
2026-04-03 20:57:10 -07:00
gsxdsm
30a466e912 feat(FN-806): replace hardcoded border-radius with dashboard token in agent-create-form
- Replace hardcoded border-radius value in AgentsView agent create form with CSS variable token
- Update dashboard README styling description for the Agents View create-form
- Add unit test for agent create form border-radius token usage
2026-04-03 20:54:32 -07:00
gsxdsm
2e2adad707 feat(FN-802): route script launches through TerminalModal instead of ScriptRunDialog
- Route saved script launches from App.tsx directly into TerminalModal, removing the ScriptRunDialog component entirely
- Add openGeneration handling and initialCommand support to TerminalModal for reliable script execution
- Add openGeneration to initialCommand effect dependencies to prevent stale closures
- Remove 114 lines of now-unused styles.css rules related to ScriptRunDialog
- Update tests: replace ScriptRunDialog tests with TerminalModal execution tests, update App routing tests
- Update README to document terminal-based script launch behavior
2026-04-03 20:47:41 -07:00
gsxdsm
40b89f4ec1 feat(FN-807): add model preset selection to QuickEntryBox and InlineCreateCard
- Extend ModelSelectionModal with preset picker and apply-to-task wiring
- Wire preset state through QuickEntryBox and InlineCreateCard new-task flows
- Add regression tests for preset selection in ModelSelectionModal, QuickEntryBox, InlineCreateCard, and ListView
- Update dashboard README with preset-in-quick-add documentation
- Clean up unused footer-safe-layout test and adjust styles
2026-04-03 20:10:36 -07:00
gsxdsm
29e225dda1 refactor(FN-811): make project workspace footer-safe and simplify file diff routes
- Fix layout so AgentsView and workspace pages don't overflow behind the footer
- Add footer-safe-layout tests covering sidebar + content layout behavior
- Simplify /api/tasks/:id/diffs route by removing redundant session-file handling
- Remove 22 unused lines from session-files test and consolidate file-diffs tests
- Update styles.css with layout adjustments for consistent footer-safe spacing
- Minor README clarification for dashboard package
2026-04-03 19:34:46 -07:00
gsxdsm
8a215bdc27 feat(FN-799): align file-diffs route with session-files merge-base strategy
- Switch /api/tasks/:id/file-diffs to use merge-base (three-dot) diff instead of two-dot diff, matching session-files behavior
- Rewrite file-diffs route tests with comprehensive coverage and add count/detail consistency regression tests
- Update mission-types to export MissionSummary and fix MissionManager imports
- Remove obsolete MissionManager.test.tsx and mission-e2e.test.ts
- Update README docs to clarify board card count matches changed-files viewer
2026-04-03 19:31:13 -07:00
gsxdsm
4bf41c650d feat(FN-804): align mission IDs with generated format and add validation
- Update mission route ID validation to accept generated ID format (mission-types.ts, mission-routes.ts)
- Add MissionManager component tests for generated ID handling
- Add mission E2E tests covering ID generation and validation flows
- Update TaskDetailModal to work with new mission ID format
- Update documentation (README, dashboard README) with generated ID examples
2026-04-03 19:19:05 -07:00
gsxdsm
e4c0c574a4 feat(FN-798): move edit Save/Cancel buttons into modal footer
- Relocate Save/Cancel action buttons from inline position to TaskDetailModal footer
- Add regression tests for footer button placement and visibility
- Remove unused file-service tests and FileBrowserModal test code
- Clean up dead CSS rules from styles.css
- Update dashboard README to reflect current architecture
2026-04-03 19:00:35 -07:00
gsxdsm
9fa8f5f223 feat(FN-801): show hidden files in workspace file listings
- Remove dotfile filtering from file-service so hidden files appear in workspace browser
- Update FileBrowserModal and TaskDetailModal UI to display hidden file entries
- Add UI/hook tests for hidden file entries in FileBrowserModal and useWorkspaceFileBrowser
- Add file-service unit tests for listing, reading, and filtering hidden files
- Update dashboard styles for hidden file display
- Document Files feature section in README
2026-04-03 18:50:05 -07:00
gsxdsm
d15d4275c3 feat(FN-797): reposition refinement modal primary action near textarea
- Move 'Create Refinement Task' button from modal footer into input group adjacent to feedback textarea
- Wrap char count and submit button in new .detail-refine-input-group flex container
- Add CSS for input group with space-between layout and gap
- Add 3 tests verifying button placement, disabled/enabled rules, and sibling structure
- Update dashboard README with refinement modal UX documentation
2026-04-03 18:40:26 -07:00
gsxdsm
e5760fa4fe feat(FN-800): auto-generate model preset IDs and remove manual ID editing
- Add slugify and generatePresetId utilities with collision handling for unique preset IDs
- Remove manual ID input field from preset editor UI in SettingsModal
- Auto-generate preset IDs server-side from name on creation
- Simplify Header tests by removing ID-related test cases
- Deduplicate tablet header controls tests by importing from shared Header tests
- Remove unused CSS rules for removed ID input field
- Update reviewer to pass through preset ID generation logic
2026-04-03 18:33:23 -07:00
gsxdsm
f402a70dc7 feat(FN-796): convert compact Terminal overflow to split action with script submenu
- Replace single overflow terminal button with split-action dropdown showing quick-run scripts
- Add script submenu in header for launching predefined commands from compact view
- Add comprehensive regression tests for split-button behavior and quick-run script actions
- Update dashboard README to document the new split-action terminal overflow UI
- Adjust title summarization threshold and clean up related test/store changes
2026-04-03 18:29:09 -07:00
gsxdsm
e176d1af27 fix(engine): prevent extractVerdict from matching verdict keywords in review body text
The body-scan fallback (includes("APPROVE") etc.) would misclassify verdicts
when the reviewer mentioned a keyword in context without it being the actual
verdict — e.g. "this does not yet merit APPROVE". Replaced with a
line-anchored regex that only matches "Verdict: X" lines, and expanded the
primary regex to also catch bold/italic formatted verdicts like **Verdict: APPROVE**.
UNAVAILABLE is now the honest fallback when no structured verdict is found,
triggering a retry rather than silently misclassifying.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 18:09:25 -07:00
gsxdsm
c0f71e0db6 feat(FN-794): raise auto-summarization threshold from 140 to 200 characters
- Change MIN_DESCRIPTION_LENGTH threshold from 140 to 200 in ai-summarize.ts
- Update shouldAutoSummarize logic and tests for new 200-char threshold
- Update UI copy in SettingsModal and API/routes references
- Update store tests to reflect the new threshold value
- Remove obsolete dashboard activity-log mobile layout test files and unused CSS
- Add changeset for patch bump
2026-04-03 17:58:07 -07:00
gsxdsm
80712060b7 feat(FN-795): add mobile responsive layout for Activity Log modal
- Add mobile responsive CSS for Activity Log modal with adaptive breakpoints
- Add regression test coverage for mobile activity log layout
- Add tests for ActivityLogModal responsive behavior
- Update README with responsive layout documentation note
2026-04-03 17:52:36 -07:00
gsxdsm
bcb9915968 feat: add SelfHealingManager for unattended multi-day operation
Adds four self-healing subsystems to enable the engine to recover from
common failure modes without human intervention:

- Auto-unpause: clears rate-limit-triggered globalPause with escalating
  backoff (5 min → 60 min cap), resets on sustained recovery
- Stuck kill budget: caps task stuck-kill retries (default 3) to prevent
  infinite stuck→todo→stuck loops
- Periodic maintenance (every 15 min): git worktree prune, orphan cleanup,
  SQLite WAL checkpoint
- Worktree cap enforcement: removes oldest idle worktrees when count
  exceeds 2× maxWorktrees

New settings: autoUnpauseEnabled, autoUnpauseBaseDelayMs,
autoUnpauseMaxDelayMs, maxStuckKills, maintenanceIntervalMs.
New task field: stuckKillCount (schema v8 migration).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:35:12 -07:00
gsxdsm
10201f6304 fix: remove duplicate deep link handler in App.tsx
A deep link handler already existed at line 275 (with proper project
switching and test coverage). The duplicate added earlier caused double
toast rendering in tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:17:30 -07:00
gsxdsm
d0156e4b8a fix(FN-789): fix activity log data loading and restore modal styling
- Fix useActivityLog hook to properly load activity log entries from the store
- Add comprehensive test coverage for useActivityLog hook with 243 lines of tests
- Restore missing ActivityLogModal CSS styles (modal overlay, list, animations)
- Add ActivityLogModal component tests for empty state, loading, and error handling
- Register activity log route in App.tsx
- Update README with activity log data source documentation
- Add changeset for patch release
2026-04-03 14:05:40 -07:00
gsxdsm
074755fefa feat(FN-788): nest Scripts under Terminal in compact overflow menu
- Restructure Header.tsx to render Scripts as a submenu of Terminal in compact/tablet overflow menus
- Add submenu toggle state, keyboard navigation, and click-outside-to-close behavior
- Add CSS for nested submenu styling with slide-in animation and depth indicators
- Update Header tests to verify Scripts nested under Terminal with toggle interaction
- Update mobile-header-controls and tablet-header-controls tests for new menu hierarchy
- Update README documentation to reflect the Terminal > Scripts submenu structure
2026-04-03 13:26:02 -07:00
gsxdsm
44b5fee878 feat(FN-787): replace project-switch icon with Building2 for visual distinction
- Replace Folder icon with Building2 in Header project-switch overflow button
- Add Header test for distinct project-switch icon rendering
- Update dashboard README docs for responsive header icon change
2026-04-03 13:09:34 -07:00
gsxdsm
772492b3ea feat(FN-785): style Agents view state selector and document controls
- Replace plain <select> dropdown with styled agent-state-filter container featuring Filter icon, hover/focus states, and consistent dashboard theming
- Add aria-label for accessibility on the state filter dropdown
- Add CSS styles for .agent-state-filter wrapper with border, color transitions, and focus ring
- Add unit test for styled filter container rendering and aria-label presence
- Document Agents view features (state filter, view modes, CRUD, health monitoring) in README
2026-04-03 13:02:36 -07:00
gsxdsm
171f3aee31 feat: add three guardrails against out-of-scope agent deletions
1. Scoping rules in agent prompts: executor, triage template, and reviewer
   now explicitly forbid deleting/gutting modules, settings, interfaces,
   exports, or test files outside the task's declared File Scope. Reviewer
   will REVISE if out-of-scope removals are detected.

2. Pre-merge diffstat scope check: merger.ts validates the git diffstat
   against the task's PROMPT.md File Scope before merging. Large deletions
   outside scope are logged as warnings on the task (soft guardrail).

3. Changeset requirement for feature removal: triage template now requires
   a .changeset/ entry when removing existing functionality. Executor and
   reviewer enforce this requirement.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:51:29 -07:00
gsxdsm
d6e6f10474 fix(FN-784): close Scripts modal before async API call to prevent handoff race
- Close the Scripts modal immediately before making the async script-run API call, preventing the modal from interfering with the terminal handoff
- Add regression tests covering script-to-terminal handoff behavior (modal close timing, API call sequencing, error handling)
- Document the script-run modal handoff behavior in the dashboard README
2026-04-03 12:50:40 -07:00
gsxdsm
1d1667474d feat(FN-783): make agent log fill full modal body height
- Add CSS classes for full-height agent log layout with flex-based stretching
- Update AgentLogViewer and TaskDetailModal to use full-height container classes
- Add regression tests for AgentLogViewer full-height behavior
- Add regression tests for TaskDetailModal agent log panel height
- Update dashboard README with agent log layout documentation
2026-04-03 12:38:01 -07:00
gsxdsm
881674b19f feat(FN-781): reposition AI-assisted creation controls adjacent to description field
- Move Plan and Subtask buttons next to the description input in QuickEntryBox, InlineCreateCard, and TaskForm
- Improve action button layout with consistent icon+label pattern and disabled states
- Add CSS styles for new action button group and description-adjacent controls
- Add regression tests for all three task creation surfaces ensuring buttons appear next to description
- Document the description-adjacent AI controls pattern in dashboard README
2026-04-03 11:58:49 -07:00
gsxdsm
152c3fd826 feat(FN-779): make inline editor taller with 4-row default and mount-time resize
- Increase inline editor textarea default rows from 1 to 4 for better multi-line editing
- Add mount-time auto-resize to fit content on initial render
- Add regression tests for taller inline editor behavior
- Update documentation to reflect the new taller editor defaults
2026-04-03 11:23:53 -07:00
gsxdsm
2420c9ac38 feat(FN-778): reserve layout space for executor footer
- Add CSS rules for executor status bar footer with safe-area padding
- Update App.tsx and AgentsView.tsx layout to accommodate footer space
- Add regression tests for footer-safe project layout (App.test.tsx)
- Add unit tests for ExecutorStatusBar component
- Document footer-safe dashboard layout behavior in README
2026-04-03 11:14:37 -07:00
gsxdsm
0517750412 feat(FN-776): rework changed-files modal into mobile-friendly navigation flow
- Redesign ChangedFilesModal as a two-view navigation flow (file list → file detail) with back navigation
- Fix theming and loading/reading ergonomics for the diff viewer
- Enhance useChangedFiles hook with improved loading and error states
- Add comprehensive tests for modal navigation, diff rendering, and edge cases
- Update styles with mobile-friendly layout and diff viewer improvements
- Update dashboard README with mobile navigation description
2026-04-03 10:47:44 -07:00
gsxdsm
5a30aa5206 feat(FN-773): add dedicated ScriptRunDialog for saved script output
- Add ScriptRunDialog component with xterm.js terminal emulation and real-time streaming
- Align saved-script launches with backend contract (POST /api/scripts/:id/run)
- Wire dialog into App.tsx with open/close state management
- Add comprehensive styles for dialog overlay, terminal area, and action buttons
- Add unit tests for ScriptRunDialog and App integration
- Document ScriptRunDialog usage in dashboard README
2026-04-03 10:31:30 -07:00
gsxdsm
fa8c637661 fix(FN-782): fix footer status bar count derivation and sync with board view
- Share task list data between footer ExecutorStatusBar and board view to ensure consistent counts
- Refactor MissionManager component with improved structure and readability
- Refactor useExecutorStats hook and simplify test coverage
- Update ExecutorStatusBar component and tests for accurate count display
- Consolidate and clean up dashboard styles.css
- Update footer status bar documentation in README
2026-04-03 09:40:26 -07:00
gsxdsm
a021769936 feat(FN-792): rebuild Mission Manager modal shell and list view
- Rebuild MissionManager component with updated modal shell and list view layout
- Refactor and reorganize dashboard CSS styles (551 lines changed)
- Remove terminal-related test files and simplify terminal service/useTerminal hook
- Clean up global settings: remove unused global-settings test and simplify settings types
- Remove dead code from App.tsx, SettingsModal.tsx, and dashboard README
2026-04-03 09:29:51 -07:00