From af748417659f8ee7472a76a0f347759d24d50598 Mon Sep 17 00:00:00 2001 From: busya Date: Fri, 20 Feb 2026 10:41:15 +0300 Subject: [PATCH] semantic update --- .ai/PROJECT_MAP.md | 146 +- backend/mappings.db | Bin 282624 -> 282624 bytes backend/src/app.py | 4 + backend/src/services/__init__.py | 1 + backend/tasks.db | Bin 610304 -> 634880 bytes frontend/src/components/PasswordPrompt.svelte | 12 +- frontend/src/components/TaskLogViewer.svelte | 8 +- .../src/components/llm/ProviderConfig.svelte | 217 +- .../src/components/tasks/LogFilterBar.svelte | 8 +- .../src/components/tasks/TaskLogPanel.svelte | 2 +- frontend/src/lib/Counter.svelte | 13 +- .../src/lib/stores/__tests__/sidebar.test.js | 28 +- frontend/src/lib/utils.js | 6 + frontend/src/lib/utils/debounce.js | 6 + frontend/src/routes/+error.svelte | 19 +- frontend/src/routes/+layout.ts | 7 + frontend/src/types/dashboard.ts | 9 +- semantics/semantic_map.json | 2696 ++++++++++------- 18 files changed, 1856 insertions(+), 1326 deletions(-) diff --git a/.ai/PROJECT_MAP.md b/.ai/PROJECT_MAP.md index 460b6cc..173cdee 100644 --- a/.ai/PROJECT_MAP.md +++ b/.ai/PROJECT_MAP.md @@ -73,6 +73,40 @@ - πŸ“ Recursive helper to write entity tree to Markdown with tier badges and enhanced details. - Ζ’ **to_dict** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **PluginExampleShot** (`Module`) + - πŸ“ Reference implementation of a plugin following GRACE standards. + - πŸ”— IMPLEMENTS -> `[DEF:Std:Plugin]` + - Ζ’ **get_schema** (`Function`) + - πŸ“ Defines input validation schema. + - Ζ’ **execute** (`Function`) + - πŸ“ Core plugin logic with structured logging and progress reporting. + - Ζ’ **id** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **name** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **description** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **version** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **BackendRouteShot** (`Module`) + - πŸ“ Reference implementation of a task-based route using GRACE-Poly. + - πŸ”— IMPLEMENTS -> `[DEF:Std:API_FastAPI]` + - Ζ’ **create_task** (`Function`) + - πŸ“ Create and start a new task using TaskManager. Non-blocking. + - πŸ”— CALLS -> `task_manager.create_task` +- 🧩 **FrontendComponentShot** (`Component`) + - πŸ“ Reference implementation of a task-spawning component using + - πŸ—οΈ Layer: UI + - πŸ“₯ Props: plugin_id: any, params: any + - ⬅️ READS_FROM `lib` + - ⬅️ READS_FROM `t` +- πŸ“¦ **DashboardTypes** (`Module`) `[TRIVIAL]` + - πŸ“ TypeScript interfaces for Dashboard entities + - πŸ—οΈ Layer: Domain +- 🧩 **Counter** (`Component`) `[TRIVIAL]` + - πŸ“ Simple counter demo component + - πŸ—οΈ Layer: UI + - ➑️ WRITES_TO `state` - πŸ“¦ **stores_module** (`Module`) - πŸ“ Global state management using Svelte stores. - πŸ—οΈ Layer: UI-State @@ -116,6 +150,11 @@ - πŸ“ Generic request wrapper. - πŸ“¦ **api** (`Data`) - πŸ“ API client object with specific methods. +- πŸ“¦ **Utils** (`Module`) `[TRIVIAL]` + - πŸ“ General utility functions (class merging) + - πŸ—οΈ Layer: Infra + - Ζ’ **cn** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ—„οΈ **authStore** (`Store`) - πŸ“ Manages the global authentication state on the frontend. - πŸ—οΈ Layer: Feature @@ -131,9 +170,9 @@ - πŸ“ Clears authentication state and storage. - Ζ’ **setLoading** (`Function`) - πŸ“ Updates the loading state. -- πŸ“¦ **debounce** (`Module`) `[TRIVIAL]` - - πŸ“ Auto-generated module for frontend/src/lib/utils/debounce.js - - πŸ—οΈ Layer: Unknown +- πŸ“¦ **Debounce** (`Module`) `[TRIVIAL]` + - πŸ“ Debounce utility for limiting function execution rate + - πŸ—οΈ Layer: Infra - Ζ’ **debounce** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - πŸ—„οΈ **taskDrawer** (`Store`) `[CRITICAL]` @@ -181,8 +220,9 @@ - πŸ“ Unit tests for sidebar store - πŸ—οΈ Layer: Domain (Tests) - Ζ’ **test_sidebar_initial_state** (`Function`) - - Ζ’ **test_toggleSidebar** (`Function`) - - Ζ’ **test_setActiveItem** (`Function`) + - Ζ’ **test_toggleSidebar** (`Function`) + - Ζ’ **test_setActiveItem** (`Function`) + - Ζ’ **test_mobile_functions** (`Function`) - πŸ“¦ **frontend.src.lib.stores.__tests__.test_activity** (`Module`) - πŸ“ Unit tests for activity store - πŸ—οΈ Layer: UI @@ -202,7 +242,9 @@ - 🧩 **Select** (`Component`) `[TRIVIAL]` - πŸ“ Standardized dropdown selection component. - πŸ—οΈ Layer: Atom - - πŸ“₯ Props: label: string , value: string | number , disabled: boolean + - ⬅️ READS_FROM `lib` + - ➑️ WRITES_TO `bindable` + - ➑️ WRITES_TO `props` - πŸ“¦ **ui** (`Module`) `[TRIVIAL]` - πŸ“ Central export point for standardized UI components. - πŸ—οΈ Layer: Atom @@ -210,21 +252,26 @@ - 🧩 **PageHeader** (`Component`) `[TRIVIAL]` - πŸ“ Standardized page header with title and action area. - πŸ—οΈ Layer: Atom - - πŸ“₯ Props: title: string + - ⬅️ READS_FROM `lib` + - ➑️ WRITES_TO `props` - 🧩 **Card** (`Component`) `[TRIVIAL]` - πŸ“ Standardized container with padding and elevation. - πŸ—οΈ Layer: Atom - - πŸ“₯ Props: title: string + - ⬅️ READS_FROM `lib` + - ➑️ WRITES_TO `props` - 🧩 **Button** (`Component`) `[TRIVIAL]` - - πŸ“ Define component interface and default values. + - πŸ“ Define component interface and default values (Svelte 5 Runes). - πŸ—οΈ Layer: Atom - πŸ”’ Invariant: Supports accessible labels and keyboard navigation. - - πŸ“₯ Props: isLoading: boolean , disabled: boolean + - ⬅️ READS_FROM `lib` + - ➑️ WRITES_TO `props` - 🧩 **Input** (`Component`) `[TRIVIAL]` - πŸ“ Standardized text input component with label and error handling. - πŸ—οΈ Layer: Atom - πŸ”’ Invariant: Consistent spacing and focus states. - - πŸ“₯ Props: label: string , value: string , placeholder: string , error: string , disabled: boolean + - ⬅️ READS_FROM `lib` + - ➑️ WRITES_TO `bindable` + - ➑️ WRITES_TO `props` - 🧩 **LanguageSwitcher** (`Component`) `[TRIVIAL]` - πŸ“ Dropdown component to switch between supported languages. - πŸ—οΈ Layer: Atom @@ -293,10 +340,9 @@ - πŸ“ Display page hierarchy navigation - πŸ—οΈ Layer: UI - πŸ”’ Invariant: Always shows current page path - - πŸ“₯ Props: maxVisible: any - ⬅️ READS_FROM `app` - ⬅️ READS_FROM `lib` - - ⬅️ READS_FROM `page` + - ➑️ WRITES_TO `props` - πŸ“¦ **Breadcrumbs** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/lib/components/layout/Breadcrumbs.svelte - πŸ—οΈ Layer: Unknown @@ -328,6 +374,12 @@ - πŸ“ Auto-detected function (orphan) - Ζ’ **disconnectWebSocket** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **ErrorPage** (`Page`) + - πŸ“ Global error page displaying HTTP status and messages + - πŸ—οΈ Layer: UI +- πŸ“¦ **RootLayoutConfig** (`Module`) `[TRIVIAL]` + - πŸ“ Root layout configuration (SPA mode) + - πŸ—οΈ Layer: Infra - πŸ“¦ **HomePage** (`Page`) `[CRITICAL]` - πŸ“ Redirect to Dashboard Hub as per UX requirements - πŸ—οΈ Layer: UI @@ -692,8 +744,9 @@ - 🧩 **PasswordPrompt** (`Component`) - πŸ“ A modal component to prompt the user for database passwords when a migration task is paused. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: show: any, databases: any, errorMessage: any - ⚑ Events: cancel, resume + - ➑️ WRITES_TO `props` + - ⬅️ READS_FROM `effect` - Ζ’ **handleSubmit** (`Function`) - πŸ“ Validates and dispatches the passwords to resume the task. - Ζ’ **handleCancel** (`Function`) @@ -703,6 +756,7 @@ - πŸ—οΈ Layer: Feature - πŸ”’ Invariant: Each source database can be mapped to one target database. - ⚑ Events: update + - ➑️ WRITES_TO `props` - Ζ’ **updateMapping** (`Function`) - πŸ“ Updates a mapping for a specific source database. - Ζ’ **getSuggestion** (`Function`) @@ -711,13 +765,12 @@ - πŸ“ Displays detailed logs for a specific task inline or in a modal using TaskLogPanel. - πŸ—οΈ Layer: UI - πŸ”’ Invariant: Real-time logs are always appended without duplicates. - - πŸ“₯ Props: show: any, inline: any, taskId: any, taskStatus: any, realTimeLogs: any - ⚑ Events: close - - ⬅️ READS_FROM `t` + - ➑️ WRITES_TO `bindable` + - ➑️ WRITES_TO `props` + - ➑️ WRITES_TO `state` - πŸ“¦ **handleRealTimeLogs** (`Action`) - - πŸ“ Append real-time logs as they arrive from WebSocket, preventing duplicates */ - Ζ’ **fetchLogs** (`Function`) - - πŸ“ Fetches logs for the current task from API (polling fallback). - πŸ“¦ **TaskLogViewer** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/components/TaskLogViewer.svelte - πŸ—οΈ Layer: Unknown @@ -732,8 +785,8 @@ - πŸ“ Prompts the user to provide a database mapping when one is missing during migration. - πŸ—οΈ Layer: Feature - πŸ”’ Invariant: Modal blocks migration progress until resolved or cancelled. - - πŸ“₯ Props: show: boolean , sourceDbName: string , sourceDbUuid: string - ⚑ Events: cancel, resolve + - ➑️ WRITES_TO `props` - Ζ’ **resolve** (`Function`) - πŸ“ Dispatches the resolution event with the selected mapping. - Ζ’ **cancel** (`Function`) @@ -742,10 +795,10 @@ - πŸ“ Displays a grid of dashboards with selection and pagination. - πŸ—οΈ Layer: Component - πŸ”’ Invariant: Selected IDs must be a subset of available dashboards. - - πŸ“₯ Props: dashboards: DashboardMetadata[] , selectedIds: number[] , environmentId: string - ⚑ Events: selectionChanged + - ➑️ WRITES_TO `props` + - ➑️ WRITES_TO `derived` - ➑️ WRITES_TO `t` - - ⬅️ READS_FROM `t` - Ζ’ **handleValidate** (`Function`) - πŸ“ Triggers dashboard validation task. - Ζ’ **handleSort** (`Function`) @@ -816,8 +869,8 @@ - 🧩 **TaskList** (`Component`) - πŸ“ Displays a list of tasks with their status and execution details. - πŸ—οΈ Layer: Component - - πŸ“₯ Props: tasks: Array , loading: boolean - ⚑ Events: select + - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `t` - ⬅️ READS_FROM `t` - Ζ’ **getStatusColor** (`Function`) @@ -829,8 +882,8 @@ - 🧩 **DynamicForm** (`Component`) - πŸ“ Generates a form dynamically based on a JSON schema. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: schema: any - ⚑ Events: submit + - ➑️ WRITES_TO `props` - Ζ’ **handleSubmit** (`Function`) - πŸ“ Dispatches the submit event with the form data. - Ζ’ **initializeForm** (`Function`) @@ -839,8 +892,8 @@ - πŸ“ Provides a UI component for selecting source and target environments. - πŸ—οΈ Layer: Feature - πŸ”’ Invariant: Source and target environments must be selectable from the list of configured environments. - - πŸ“₯ Props: label: string , selectedId: string - ⚑ Events: change + - ➑️ WRITES_TO `props` - Ζ’ **handleSelect** (`Function`) - πŸ“ Dispatches the selection change event. - 🧩 **ProtectedRoute** (`Component`) `[TRIVIAL]` @@ -850,11 +903,13 @@ - ⬅️ READS_FROM `app` - ⬅️ READS_FROM `auth` - 🧩 **TaskLogPanel** (`Component`) - - πŸ“ Component properties and state. + - πŸ“ Combines log filtering and display into a single cohesive dark-themed panel. - πŸ—οΈ Layer: UI - πŸ”’ Invariant: Must always display logs in chronological order and respect auto-scroll preference. - - πŸ“₯ Props: logs: any, autoScroll: any - ⚑ Events: filterChange + - ➑️ WRITES_TO `bindable` + - ➑️ WRITES_TO `props` + - ➑️ WRITES_TO `state` - πŸ“¦ **TaskLogPanel** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/components/tasks/TaskLogPanel.svelte - πŸ—οΈ Layer: Unknown @@ -869,7 +924,9 @@ - 🧩 **LogFilterBar** (`Component`) - πŸ“ Compact filter toolbar for logs β€” level, source, and text search in a single dense row. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: availableSources: any, selectedLevel: any, selectedSource: any, searchText: any + - ➑️ WRITES_TO `bindable` + - ➑️ WRITES_TO `props` + - ➑️ WRITES_TO `derived` - πŸ“¦ **LogFilterBar** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/components/tasks/LogFilterBar.svelte - πŸ—οΈ Layer: Unknown @@ -884,21 +941,15 @@ - 🧩 **LogEntryRow** (`Component`) - πŸ“ Renders a single log entry with stacked layout optimized for narrow drawer panels. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: log: any, showSource: any + - ➑️ WRITES_TO `props` + - ➑️ WRITES_TO `derived` - Ζ’ **formatTime** (`Function`) - πŸ“ Format ISO timestamp to HH:MM:SS */ -- πŸ“¦ **LogEntryRow** (`Module`) `[TRIVIAL]` - - πŸ“ Auto-generated module for frontend/src/components/tasks/LogEntryRow.svelte - - πŸ—οΈ Layer: Unknown - - Ζ’ **getLevelClass** (`Function`) `[TRIVIAL]` - - πŸ“ Auto-detected function (orphan) - - Ζ’ **getSourceClass** (`Function`) `[TRIVIAL]` - - πŸ“ Auto-detected function (orphan) - 🧩 **FileList** (`Component`) - πŸ“ Displays a table of files with metadata and actions. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: files: any - ⚑ Events: delete, navigate + - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `t` - ⬅️ READS_FROM `t` - Ζ’ **isDirectory** (`Function`) @@ -911,6 +962,7 @@ - πŸ“ Provides a form for uploading files to a specific category. - πŸ—οΈ Layer: UI - ⚑ Events: uploaded + - ➑️ WRITES_TO `props` - ⬅️ READS_FROM `t` - ➑️ WRITES_TO `t` - Ζ’ **handleUpload** (`Function`) @@ -964,7 +1016,7 @@ - 🧩 **CommitHistory** (`Component`) - πŸ“ Displays the commit history for a specific dashboard. - πŸ—οΈ Layer: Component - - πŸ“₯ Props: dashboardId: any + - ➑️ WRITES_TO `props` - ⬅️ READS_FROM `t` - ➑️ WRITES_TO `t` - Ζ’ **onMount** (`Function`) @@ -975,8 +1027,9 @@ - πŸ“ Modal for deploying a dashboard to a target environment. - πŸ—οΈ Layer: Component - πŸ”’ Invariant: Cannot deploy without a selected environment. - - πŸ“₯ Props: dashboardId: any, show: any - ⚑ Events: deploy + - ➑️ WRITES_TO `props` + - ⬅️ READS_FROM `effect` - πŸ“¦ **loadStatus** (`Watcher`) - Ζ’ **loadEnvironments** (`Function`) - πŸ“ Fetch available environments from API. @@ -986,8 +1039,8 @@ - πŸ“ UI for resolving merge conflicts (Keep Mine / Keep Theirs). - πŸ—οΈ Layer: Component - πŸ”’ Invariant: User must resolve all conflicts before saving. - - πŸ“₯ Props: conflicts: any, show: any - ⚑ Events: resolve + - ➑️ WRITES_TO `props` - Ζ’ **resolve** (`Function`) - πŸ“ Set resolution strategy for a file. - Ζ’ **handleSave** (`Function`) @@ -995,8 +1048,9 @@ - 🧩 **CommitModal** (`Component`) - πŸ“ МодальноС ΠΎΠΊΠ½ΠΎ для создания ΠΊΠΎΠΌΠΌΠΈΡ‚Π° с просмотром ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (diff). - πŸ—οΈ Layer: Component - - πŸ“₯ Props: dashboardId: any, show: any - ⚑ Events: commit + - ➑️ WRITES_TO `props` + - ⬅️ READS_FROM `effect` - Ζ’ **handleGenerateMessage** (`Function`) - πŸ“ Generates a commit message using LLM. - Ζ’ **loadStatus** (`Function`) @@ -1006,8 +1060,8 @@ - 🧩 **BranchSelector** (`Component`) - πŸ“ UI для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈ создания Π²Π΅Ρ‚ΠΎΠΊ Git. - πŸ—οΈ Layer: Component - - πŸ“₯ Props: dashboardId: any, currentBranch: any - ⚑ Events: change + - ➑️ WRITES_TO `props` - ⬅️ READS_FROM `t` - Ζ’ **onMount** (`Function`) - πŸ“ Load branches when component is mounted. @@ -1022,7 +1076,7 @@ - 🧩 **GitManager** (`Component`) - πŸ“ Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для управлСния Git-опСрациями ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄Π°. - πŸ—οΈ Layer: Component - - πŸ“₯ Props: dashboardId: any, dashboardTitle: any, show: any + - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `t` - ⬅️ READS_FROM `t` - Ζ’ **checkStatus** (`Function`) @@ -1038,7 +1092,7 @@ - 🧩 **DocPreview** (`Component`) - πŸ“ UI component for previewing generated dataset documentation before saving. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: documentation: any, onSave: any, onCancel: any + - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `t` - ⬅️ READS_FROM `t` - πŸ“¦ **DocPreview** (`Module`) `[TRIVIAL]` @@ -1049,7 +1103,7 @@ - 🧩 **ProviderConfig** (`Component`) - πŸ“ UI form for managing LLM provider configurations. - πŸ—οΈ Layer: UI - - πŸ“₯ Props: providers: any, onSave: any + - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `t` - ⬅️ READS_FROM `t` - πŸ“¦ **ProviderConfig** (`Module`) `[TRIVIAL]` @@ -1099,14 +1153,14 @@ - πŸ“ Provides a WebSocket endpoint for real-time log streaming of a task with server-side filtering. - πŸ“¦ **StaticFiles** (`Mount`) - πŸ“ Mounts the frontend build directory to serve static assets. + - Ζ’ **serve_spa** (`Function`) + - πŸ“ Serves the SPA frontend for any path not matched by API routes. - Ζ’ **read_root** (`Function`) - πŸ“ A simple root endpoint to confirm that the API is running when frontend is missing. - Ζ’ **network_error_handler** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **matches_filters** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - - Ζ’ **serve_spa** (`Function`) `[TRIVIAL]` - - πŸ“ Auto-detected function (orphan) - πŸ“¦ **Dependencies** (`Module`) - πŸ“ Manages creation and provision of shared application dependencies, such as PluginLoader and TaskManager, to avoid circular imports. - πŸ—οΈ Layer: Core diff --git a/backend/mappings.db b/backend/mappings.db index 6f1ec86a43f7bfe91554171a7c031657b3983f84..0ec2020c3a4e5b7a5c82977dcc7c11d7d975737e 100644 GIT binary patch delta 428 zcma*iu}i~17zOZNQfo?S&LE0V2S*jJ{qo)Al5|r+5ENRmf|E^?3U;xhD3%75ZbcWf z78C?G5y|S}*v+Yme}I35)s8Nm--F+K?Vi!@8P_?|xS3xkjj(!EB`;Ow{x}6%IiZy! zt*I0h?KEC%Dj98OQLPY=+?RD5nd2M=Oi0ILUf=_(qc6DSqirL=Z?Wdc06h?l<1iL( zAem#;eCFDMOAZ3D4u$ycMDZqPLGLH%1AU`8s_O&#MZ2`4_oKPCvZd(n&&E_;&!$v^ zm?li9l(>b?psU1#uDbj*l_IS~_BOMky{2~6Z_*mJ8>Do31lfwQIulNZ`{CKe`8cyp z69FXyWC#l&i^z+X$lKCJQ$%G;HKW3&noc7efQx9^ad|2ELADFo3LQem2pZ?M`_B

Cpb>ze5s(`JXptO40ce3>g!vk?$>4u{%~0=L?Z11hl$1O`+9 W4VDWm2*3tZvk?$P2Dem31gr@%@FN%i diff --git a/backend/src/app.py b/backend/src/app.py index 15fe312..9f586fc 100755 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -241,6 +241,10 @@ frontend_path = project_root / "frontend" / "build" if frontend_path.exists(): app.mount("/_app", StaticFiles(directory=str(frontend_path / "_app")), name="static") + # [DEF:serve_spa:Function] + # @PURPOSE: Serves the SPA frontend for any path not matched by API routes. + # @PRE: frontend_path exists. + # @POST: Returns the requested file or index.html. @app.get("/{file_path:path}", include_in_schema=False) async def serve_spa(file_path: str): # Only serve SPA for non-API paths diff --git a/backend/src/services/__init__.py b/backend/src/services/__init__.py index f0f0e67..51736c0 100644 --- a/backend/src/services/__init__.py +++ b/backend/src/services/__init__.py @@ -18,3 +18,4 @@ def __getattr__(name): from .resource_service import ResourceService return ResourceService raise AttributeError(f"module {__name__!r} has no attribute {name!r}") +# [/DEF:backend.src.services:Module] diff --git a/backend/tasks.db b/backend/tasks.db index eea8f9f409a692b79ef256733de4f8c0056e90a3..c7ce60a379fba28756bea33a7fd9db11ff5b07c6 100644 GIT binary patch delta 10420 zcmbtadw3K@w(sihs_LFerW4)}kqOTPm~q~ZppYQ12!tSnHxW`^+_bx{Yd~N{@1p4C>Zh&?y6U=D6jZ$G?&_`X$s{3=*a?3ybo!k7 z)j3tCes$_p*EWu-JvX{O37a{N+udNDgvcMt_=ueN6BOTuh>=?z8MMFIC9l1D^blJ3rrJbGW%kj;B&Y`A+(BV=fcIWaH=whS6<^p%a4e?s#gkBONF>lA=}tr+%m{G zjO`+ODutH!sSP{XqjyK5)!Bz>%7ID9VTV#0hl zw}MzTh!CuvOa{mfdm!j>x_o8L_2R<{)^wJ_rRRwQZG%@I7rlwu8Z@==nmy|+GnLV* zrBS>bf7`F8h&dUCymL8RKIXm6<*+(@X)bq~$8C4JoKAlLl`+s9NX)poPpogM&kkY>fW&K z5}PMyFwYUN<>luGY@R#)dA61Q&|NmSJKw$1<8_9-9>-NKc|CT&FX(bQP)+Ya!a7PI z=m?;7y+?_H_`M#qwud0$4s)cV`1~FZTGK<6t3bRCC#o_667F(r9X_^B0;tjm%C$gT zXe8wB zDbs*V&cz+!q*KxsX%hW`{wJ-V~IT?iC!rO5si}*BndkRidzsSY| zM3{3xoX(>U8E<@mwD(itxyktTw#9iHoO_cH7%>@7SJ`s>+Ly#{<+8b_Idl>|f{M`1 zd@3??@1k$`CEU{>)#Ghp&LQRu=8deUs`XXXp;A<1xIsn9nu1kjXkB*=!dEQW))s4R zVoqN}HkFi=qBT9zuD((`+|6`q;8jgst&p4tIt_2S94XyM+%>A=63KbR2;8;37zT zgTEEhzmzc4KZM7kxzSB$E1YS>4t3IAd?J3(T<##pH}m)Li&$*^fL=q7p$S4dDgvnq zKPdF&KZXNMI8Wq1=EgJdl(1dQ>2GL+GP9=5LF=4iPLd(@g&DVJWoAuBYrF3t++l;z zdsx%GerNUSo~c)LRu6Z%UFp_TcGmA+y`X36`F7FSlhN10W+|Jsg*WxApBgO(vZ;?9 z#)WaFY_yo;r}6{QCm^-phvSfneu);N6z+TORffGE@=jnoOn-%VA^!wUMfbz&VbQ50 zK%c|-CQ<7fE{S9m)c*-%bAe7pMD$x(<5&8hlr9K+RhP^-c2JbSFRQ0S(#*ZF>>bSAo5rmG5&x=)}UHDAc zC#;at=w;fZyr8UAoR-hQ;vj(=Eh{ZU5N+ zTBYe^9y)BbRwG!FLHfdvZ(+0gIXfQ355I$3g*c>~SB@!9C|i_}GEEtyNS4nmuUht7 zwpmIoSrC^^n&G!CbSSz*{Vtp2n_0K$BJ1{Z9j-r&+e%HaaTyr~=N}aHp8;w`2APDK za|z0J3SV7a&eS>KhzMna=CL8{ObfF3j` z*VCA88^pDqbG59e3~CP%8!SFZocfjze>_O&I0J{|)_h|%Bp)IUupT1Y!$041hmK2o zq+Mb_I~+Z|YhD%W*;%)P&}vF7J7dXNQBQ|@)s+p#bW>7j9j!tZ;kj(pEQ_XE-yJ4n z)yNSNHrwbwxY=kXM_-`Z=yGZ&Kan@c9#Tne`HWXFZhlOue+TdbrDij_z+s zXZ`Ngi+iSCWEYpQgsZ#pi4Bi#&8nWk7wQ!zb?(dLQBm97f5j&JerPyF?CO)RkQHP4 z1i1qo3UFU@2hc{IqGS9lh^v*7A@w3z7cHb1G3}~Cie4M?IN4!;wSGA66-c&@;tm8| zsG|2MQ4qh+hsweE6A8eNFHlOH!GN3lw(W%(4oo0nn0P>pS6RiXVrYhVlADe;bHW^9 z6#q~8-|}1X)0SlxmmHRJHLyROCcqJij8gBB$aoYsK3928s$3x?3)FlPw88*(X0 zh4X}rMPESn5SoIl`YZe;$MG#}kNyKc-!S@W!wOmMdSYUzy z(EJL0VAm;{gdLtBccFPXImb7@LB$s0;!bgB3M=49E1{%bIs_l?lE#iQa&jqAOB*Dx zNN#$TQ{JX$Ra2vMil%B)Vk8_()gPadNR2R%1E5xUjKn|B4qrn#V9w;-R>wyQB`znU z|KQb}5wxp_#lg}(zsu+JK*K6&;`9O?EO{Yk#IsId9jb}YbXs!Gb~+5o6iN|M@E5ltQD=T#M3q25JrQqxDs zuihZ?uc5!N1@nxc{{B{ZTHLN$K^&QY@8T>US_hKTvF4pE|d|O?gNKJHr>XhCLkUK3_Vuyn#q}iE5WL?zbs_Q`0O6_ptNZG#Y89}+N zt~#<-Gcjp!WcKxd`n}Nb4jIg*uw|Y&6l%xG8)mH0eeYX0={kV5YCQaAlzium>L^;o zeLZNbbPNq|k=-*QRr*Nwoq0WItjMpSB|(!Y#ZRleUPQg%4;iPW8*-dZ>$+9dh1OZK zX0sq#-4;Z>Vu4tC0nVe+oaq&@MbmpMEy;k>C6WzZTuPOhbybn_))<=EJDzIGIzZv2 zfiS^CAv03e7CybVRJ(AChEHi*_*@5?Bj9KapOV;Q_a4m=^y+AO_?R<`BgIk7%wCS6 z%kBvVeO@t~gQBl`& z7Dx`XDkcwKao^sS`k=y?LI-(=Yz7r{DQ~^?>_)C%Xtv7X(^Isc`rauznk2DkwM&~= zMyMQ6?opO0ZpCCdZ+YJGpd}xEoj|QA=EuyH?A&vs=^N9lrbg3R(=5|)`8)ZvyieXB zXUn6de@Smjzm+zz=pG`$`pHtN`ehPb#{(M7vgO@L)B$8LJB36B(I*kyl*nF+i8LI2 z8rhfT=pSdO+i#?IBh{2H9}+wzO3p1weKRulCUWk&#aqork|s!enIAi@bz!w$1v|XH zz_piD&=rI|{e-~@F2{WBtB2U#u>OA;(k+RdL~aM<{jZP=Svhnv?~EpZh7#{F zkZ7j!lq=vEQLX-#PG?ETOAF|NKCLo+y+@Z5Bva~T;$;izqL?MEbl_uTeDoh;GF<#b z7y)lAW!1|vN;5iZ`CO3vr7#Za7twb*%lsa2UJzW+)I?{%7c!mGNg=?Jq+~lD2^G9( z(wvQ@O6%aFg^DnAG3(T7rc+{G#h3~bx8V_RZZ|XRr~N`d&AO~Byo-K@0eMMcEwns< zN0>Xz80@$qr5 z#BGk7X#U=O#9VG3YxWfP}PLcK3|ggY=*?@>JM zbk;+Vj;!5*^m>TWfqA3Er!%7wkYxR1tgF^@2l@o(Br-u=b2Hg0Xpgt3OWfoMqj1Uw7;EKS{t~0(9+B= zg46S9R*Z6DB0rotCJfhT<%v-S>-)NMz1<|uw*^26PQ+XY^RO5whYSQ_yuGyrvu=Q;X)P+^9X@X4V^Bp cH%b}Lc?3y{QU)XQgD3c8aGVtTc1aum5A_y!V*mgE delta 2278 zcmX|D3s98T6~5>G_woM-`=j{4)r1uRSrJ_p77#PA7!@_Kf=a}yxH`tRNi=GV(aOsh zbs|=<2&cYqV{lCRKv3k$)QKypsZnc_T4QHSQtjC3%a|1(Nvp=*g^WA1_nbY?@0@%7 z^KZ?yl$v02{V)!Mkj9;^0)X~F%d2LN<0~y7jSbN&R~+l_S?kyouG$)|0{x{bTxASA zZN}K05t9at_A{rpX|Pq-O!i!?!?4#}t3|)}JxF>5o`3k?NV?*#jxrpwpXS-~krA_DK?GwTS zwRr9T^VucTP9ee(2}RaBo>Q?wb}z;tWGQAm78CGPjA;sRXk{s`oXhk3WoKq(=0chl zti+u?+Tv0xdjY0us71Ky2%82kU`Bz+msvSESsA3gvyDN$G^&V?Y$fP$nJ#?B&-0x0 zC7KM^$W~)Ky-Sa zj(I#^5Z^U`PNZ>g1CGNMmi_a(S39^ol2jE zyS#(fvKxj|_wD-+wwb~W@qJ`yA8}$~4|n6u+q}A0pyuoO1l4$l2SL|JQgnL~@tPD2 zlMImr<$d<$_jqYUItw@6=c$U{=MSxP9wKD`gnmOW(nE9uEuo{}5&Iq6!&b5>Y`D>5 zoHd$_HO6$q1=WpHg=-*Og7^6=d?Jr$x1bc#coRTlg&2!Lzv)Oc7noktlwZmYxlIOS zwu}~k6DPzDu~bYD1NgsqNP{axKNoIQ0ir1~WTZvQg4p)7bi>zuH^7;n6%OlQWxY^1>&twtxgcHm+-ZL-quf)F^(EB=flnk~N?-fRT{uV;%~ z4Ecmq&-lc8irEFihgDaFh2sjuc2%7#Zqmrc$i;#lArX4SratcEZP5=?nyqYAvd5}5 zWRym|9)75#U(5#lLAe;DLgm7*Gt{w!$l+A~oG6?zQTxd2Kp?s@x*U^=MJJje=@FLS z44M1Yx5Z*vzld=hx@%=LE-x1ekzOvpf~}xks=sF;S}t!W?PBoZ5_GJEH~5TeR)RiLT{Ux?OUKNYUnKMEjj|i{I9%~ zSMuliFm{7=uuW_>8)@8OSxgw0jTYlIBj1RjpVL+i;w_fWO5V65j%qd0^ zF{heC<-g@`<#xGHjunr^C*mEkT0DzmLt>57;Pf+kn69JKs1yDJU9b)2!x-|2T+}Jn z(%x5!D)~_CX1Mqa9}C-i32r^jec1G|9?wH(#iCKnOLvmU0FA($uz2H`%X7PL&#I;# z@$yqL>O7gJ*BDNWm2phW!a*_>vU`ad zGDuD_@a_gHS?%3m9fIC>D$aDuipU7`t;g^N%Z)`FEDyd|WG1P@>#R3upZAU`s{&M% zOa8B#O(R{pyr66_t{d&DIVew1IH_;%1o~T~yXl~ms-Q)750jRktkM4xa81B+VP3IV zie|uCY9<(k)a&tPWBh5EC~`g7Uhpc{X;~w&=7MzMPcO(V5ll5YW(8`+0IVEoMXN7= zVvQ6EK9NRG%h$Cv5= diff --git a/frontend/src/components/PasswordPrompt.svelte b/frontend/src/components/PasswordPrompt.svelte index 4bbb0cd..c6aea2f 100644 --- a/frontend/src/components/PasswordPrompt.svelte +++ b/frontend/src/components/PasswordPrompt.svelte @@ -13,8 +13,8 @@ const dispatch = createEventDispatcher(); - let passwords = {}; - let submitting = false; + let passwords = $state({}); + let submitting = $state(false); // [DEF:handleSubmit:Function] // @PURPOSE: Validates and dispatches the passwords to resume the task. @@ -69,7 +69,7 @@

{ e.preventDefault(); handleSubmit(); }} class="space-y-4" > {#each databases as dbName} @@ -158,7 +158,7 @@ Retry {:else} @@ -149,11 +149,11 @@ @@ -170,7 +170,7 @@ + diff --git a/frontend/src/lib/stores/__tests__/sidebar.test.js b/frontend/src/lib/stores/__tests__/sidebar.test.js index ad63787..0ea69b0 100644 --- a/frontend/src/lib/stores/__tests__/sidebar.test.js +++ b/frontend/src/lib/stores/__tests__/sidebar.test.js @@ -21,13 +21,14 @@ describe('SidebarStore', () => { describe('initial state', () => { it('should have default values when no localStorage', () => { const state = get(sidebarStore); - + expect(state.isExpanded).toBe(true); expect(state.activeCategory).toBe('dashboards'); expect(state.activeItem).toBe('/dashboards'); expect(state.isMobileOpen).toBe(false); }); }); + // [/DEF:test_sidebar_initial_state:Function] // [DEF:test_toggleSidebar:Function] // @TEST: toggleSidebar toggles isExpanded state @@ -37,9 +38,9 @@ describe('SidebarStore', () => { it('should toggle isExpanded from true to false', () => { const initialState = get(sidebarStore); expect(initialState.isExpanded).toBe(true); - + toggleSidebar(); - + const newState = get(sidebarStore); expect(newState.isExpanded).toBe(false); }); @@ -47,11 +48,12 @@ describe('SidebarStore', () => { it('should toggle isExpanded from false to true', () => { toggleSidebar(); // Now false toggleSidebar(); // Should be true again - + const state = get(sidebarStore); expect(state.isExpanded).toBe(true); }); }); + // [/DEF:test_toggleSidebar:Function] // [DEF:test_setActiveItem:Function] // @TEST: setActiveItem updates activeCategory and activeItem @@ -60,7 +62,7 @@ describe('SidebarStore', () => { describe('setActiveItem', () => { it('should update activeCategory and activeItem', () => { setActiveItem('datasets', '/datasets'); - + const state = get(sidebarStore); expect(state.activeCategory).toBe('datasets'); expect(state.activeItem).toBe('/datasets'); @@ -68,12 +70,13 @@ describe('SidebarStore', () => { it('should update to admin category', () => { setActiveItem('admin', '/settings'); - + const state = get(sidebarStore); expect(state.activeCategory).toBe('admin'); expect(state.activeItem).toBe('/settings'); }); }); + // [/DEF:test_setActiveItem:Function] // [DEF:test_mobile_functions:Function] // @TEST: Mobile functions correctly update isMobileOpen @@ -82,7 +85,7 @@ describe('SidebarStore', () => { describe('mobile functions', () => { it('should set isMobileOpen to true with setMobileOpen', () => { setMobileOpen(true); - + const state = get(sidebarStore); expect(state.isMobileOpen).toBe(true); }); @@ -90,7 +93,7 @@ describe('SidebarStore', () => { it('should set isMobileOpen to false with closeMobile', () => { setMobileOpen(true); closeMobile(); - + const state = get(sidebarStore); expect(state.isMobileOpen).toBe(false); }); @@ -98,18 +101,19 @@ describe('SidebarStore', () => { it('should toggle isMobileOpen with toggleMobileSidebar', () => { const initialState = get(sidebarStore); const initialMobileOpen = initialState.isMobileOpen; - + toggleMobileSidebar(); - + const state1 = get(sidebarStore); expect(state1.isMobileOpen).toBe(!initialMobileOpen); - + toggleMobileSidebar(); - + const state2 = get(sidebarStore); expect(state2.isMobileOpen).toBe(initialMobileOpen); }); }); + // [/DEF:test_mobile_functions:Function] }); // [/DEF:frontend.src.lib.stores.__tests__.sidebar:Module] diff --git a/frontend/src/lib/utils.js b/frontend/src/lib/utils.js index f99eb52..559c2df 100644 --- a/frontend/src/lib/utils.js +++ b/frontend/src/lib/utils.js @@ -1,4 +1,9 @@ +// [DEF:Utils:Module] /** + * @TIER: TRIVIAL + * @PURPOSE: General utility functions (class merging) + * @LAYER: Infra + * * Merges class names into a single string. * @param {...(string | undefined | null | false)} inputs * @returns {string} @@ -6,3 +11,4 @@ export function cn(...inputs) { return inputs.filter(Boolean).join(" "); } +// [/DEF:Utils:Module] diff --git a/frontend/src/lib/utils/debounce.js b/frontend/src/lib/utils/debounce.js index 6d7f8e4..8b0cb8c 100644 --- a/frontend/src/lib/utils/debounce.js +++ b/frontend/src/lib/utils/debounce.js @@ -1,4 +1,9 @@ +// [DEF:Debounce:Module] /** + * @TIER: TRIVIAL + * @PURPOSE: Debounce utility for limiting function execution rate + * @LAYER: Infra + * * Debounce utility function * Delays the execution of a function until a specified time has passed since the last call * @@ -17,3 +22,4 @@ export function debounce(func, wait) { timeout = setTimeout(later, wait); }; } +// [/DEF:Debounce:Module] diff --git a/frontend/src/routes/+error.svelte b/frontend/src/routes/+error.svelte index ffc95b1..80f3411 100644 --- a/frontend/src/routes/+error.svelte +++ b/frontend/src/routes/+error.svelte @@ -1,11 +1,24 @@ +

{$page.status}

-

{$page.error?.message || 'Page not found'}

- +

+ {$page.error?.message || "Page not found"} +

+
Back to Dashboard
+ diff --git a/frontend/src/routes/+layout.ts b/frontend/src/routes/+layout.ts index 83addb7..3f4672a 100644 --- a/frontend/src/routes/+layout.ts +++ b/frontend/src/routes/+layout.ts @@ -1,2 +1,9 @@ +// [DEF:RootLayoutConfig:Module] +/** + * @TIER: TRIVIAL + * @PURPOSE: Root layout configuration (SPA mode) + * @LAYER: Infra + */ export const ssr = false; export const prerender = false; +// [/DEF:RootLayoutConfig:Module] diff --git a/frontend/src/types/dashboard.ts b/frontend/src/types/dashboard.ts index 623711f..161208b 100644 --- a/frontend/src/types/dashboard.ts +++ b/frontend/src/types/dashboard.ts @@ -1,3 +1,9 @@ +// [DEF:DashboardTypes:Module] +/** + * @TIER: TRIVIAL + * @PURPOSE: TypeScript interfaces for Dashboard entities + * @LAYER: Domain + */ export interface DashboardMetadata { id: number; title: string; @@ -10,4 +16,5 @@ export interface DashboardSelection { source_env_id: string; target_env_id: string; replace_db_config?: boolean; -} \ No newline at end of file +} +// [/DEF:DashboardTypes:Module] \ No newline at end of file diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json index 95f0ff9..45191f8 100644 --- a/semantics/semantic_map.json +++ b/semantics/semantic_map.json @@ -1,6 +1,6 @@ { "project_root": ".", - "generated_at": "2026-02-19T16:45:13.175260", + "generated_at": "2026-02-19T22:53:21.494028", "modules": [ { "name": "generate_semantic_map", @@ -667,6 +667,392 @@ "score": 1.0 } }, + { + "name": "PluginExampleShot", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 67, + "tags": { + "PURPOSE": "Reference implementation of a plugin following GRACE standards." + }, + "relations": [ + { + "type": "IMPLEMENTS", + "target": "[DEF:Std:Plugin]" + } + ], + "children": [ + { + "name": "get_schema", + "type": "Function", + "tier": "STANDARD", + "start_line": 26, + "end_line": 41, + "tags": { + "PURPOSE": "Defines input validation schema." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 26 + } + ], + "score": 0.26666666666666655 + } + }, + { + "name": "execute", + "type": "Function", + "tier": "STANDARD", + "start_line": 43, + "end_line": 65, + "tags": { + "PURPOSE": "Core plugin logic with structured logging and progress reporting.", + "PARAM": "context (TaskContext) - Execution context with logging and progress tools." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 43 + } + ], + "score": 0.26666666666666655 + } + }, + { + "name": "id", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 11, + "end_line": 11, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "name", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 15, + "end_line": 15, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "description", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 19, + "end_line": 19, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "version", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 23, + "end_line": 23, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + } + ], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @LAYER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + }, + { + "message": "Missing Mandatory Tag: @SEMANTICS (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "BackendRouteShot", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 57, + "tags": { + "PURPOSE": "Reference implementation of a task-based route using GRACE-Poly." + }, + "relations": [ + { + "type": "IMPLEMENTS", + "target": "[DEF:Std:API_FastAPI]" + } + ], + "children": [ + { + "name": "create_task", + "type": "Function", + "tier": "STANDARD", + "start_line": 20, + "end_line": 55, + "tags": { + "PURPOSE": "Create and start a new task using TaskManager. Non-blocking.", + "PARAM": "config (ConfigManager) - Centralized configuration.", + "PRE": "plugin_id must exist; config must be initialized.", + "POST": "A new task is spawned; Task ID returned immediately.", + "UX_STATE": "Error feedback to frontend" + }, + "relations": [ + { + "type": "CALLS", + "target": "task_manager.create_task" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + } + ], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @LAYER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + }, + { + "message": "Missing Mandatory Tag: @SEMANTICS (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "FrontendComponentShot", + "type": "Component", + "tier": "STANDARD", + "start_line": 1, + "end_line": 59, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Reference implementation of a task-spawning component using", + "LAYER": "UI", + "SEMANTICS": "Task, Creation, Button", + "RELATION": "IMPLEMENTS -> [DEF:Std:UI_Svelte]", + "UX_STATE": "Loading -> Button disabled with spinner while postApi resolves.", + "UX_FEEDBACK": "toast.success on completion; toast.error on failure.", + "UX_TEST": "Idle -> {click: spawnTask, expected: loading state then success}" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + }, + "props": [ + { + "name": "plugin_id", + "type": "any", + "default": "\"\"" + }, + { + "name": "params", + "type": "any", + "default": "{}" + } + ], + "data_flow": [ + { + "store": "lib", + "type": "READS_FROM", + "line": 15 + }, + { + "store": "lib", + "type": "READS_FROM", + "line": 16 + }, + { + "store": "lib", + "type": "READS_FROM", + "line": 17 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 35 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 39 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 57 + } + ] + }, + { + "name": "DashboardTypes", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 20, + "tags": { + "TIER": "TRIVIAL", + "PURPOSE": "TypeScript interfaces for Dashboard entities", + "LAYER": "Domain" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "Counter", + "type": "Component", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 17, + "tags": { + "TIER": "TRIVIAL", + "PURPOSE": "Simple counter demo component", + "LAYER": "UI" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + }, + "data_flow": [ + { + "store": "state", + "type": "WRITES_TO", + "line": 8 + } + ] + }, { "name": "stores_module", "type": "Module", @@ -1167,6 +1553,46 @@ "score": 1.0 } }, + { + "name": "Utils", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 14, + "tags": { + "TIER": "TRIVIAL", + "PURPOSE": "General utility functions (class merging)", + "LAYER": "Infra", + "PARAM": "{...(string | undefined | null | false)} inputs", + "RETURNS": "{string}" + }, + "relations": [], + "children": [ + { + "name": "cn", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 11, + "end_line": 11, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + } + ], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "authStore", "type": "Store", @@ -1342,15 +1768,17 @@ } }, { - "name": "debounce", + "name": "Debounce", "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 19, + "end_line": 25, "tags": { - "PURPOSE": "Auto-generated module for frontend/src/lib/utils/debounce.js", "TIER": "TRIVIAL", - "LAYER": "Unknown" + "PURPOSE": "Debounce utility for limiting function execution rate", + "LAYER": "Infra", + "PARAM": "{number} wait - The delay in milliseconds", + "RETURNS": "{Function} - The debounced function" }, "relations": [], "children": [ @@ -1358,8 +1786,8 @@ "name": "debounce", "type": "Function", "tier": "TRIVIAL", - "start_line": 9, - "end_line": 9, + "start_line": 14, + "end_line": 14, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -1704,7 +2132,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 2, - "end_line": null, + "end_line": 119, "tags": { "TIER": "STANDARD", "PURPOSE": "Unit tests for sidebar store", @@ -1717,265 +2145,17 @@ "type": "Function", "tier": "STANDARD", "start_line": 17, - "end_line": null, + "end_line": 31, "tags": { "TEST": "Store initializes with default values", "PRE": "No localStorage state", "POST": "Default state is { isExpanded: true, activeCategory: 'dashboards', activeItem: '/dashboards', isMobileOpen: false }" }, "relations": [], - "children": [ - { - "name": "test_toggleSidebar", - "type": "Function", - "tier": "STANDARD", - "start_line": 32, - "end_line": null, - "tags": { - "TEST": "toggleSidebar toggles isExpanded state", - "PRE": "Store is initialized", - "POST": "isExpanded is toggled from previous value" - }, - "relations": [], - "children": [ - { - "name": "test_setActiveItem", - "type": "Function", - "tier": "STANDARD", - "start_line": 56, - "end_line": null, - "tags": { - "TEST": "setActiveItem updates activeCategory and activeItem", - "PRE": "Store is initialized", - "POST": "activeCategory and activeItem are updated" - }, - "relations": [], - "children": [ - { - "name": "test_mobile_functions", - "type": "Function", - "tier": "STANDARD", - "start_line": 78, - "end_line": null, - "tags": { - "TEST": "Mobile functions correctly update isMobileOpen", - "PRE": "Store is initialized", - "POST": "isMobileOpen is correctly updated" - }, - "relations": [], - "children": [], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_mobile_functions:Function] started at line 78", - "severity": "ERROR", - "line_number": 78 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Unclosed Anchor: [DEF:test_mobile_functions:Function] started at line 78", - "severity": "ERROR", - "line_number": 78 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Unclosed Anchor: [DEF:test_mobile_functions:Function] started at line 78", - "severity": "ERROR", - "line_number": 78 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Unclosed Anchor: [DEF:test_mobile_functions:Function] started at line 78", - "severity": "ERROR", - "line_number": 78 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Unclosed Anchor: [DEF:test_mobile_functions:Function] started at line 78", - "severity": "ERROR", - "line_number": 78 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 78 - } - ], - "score": 0.0 - } - } - ], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_setActiveItem:Function] started at line 56", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Unclosed Anchor: [DEF:test_setActiveItem:Function] started at line 56", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Unclosed Anchor: [DEF:test_setActiveItem:Function] started at line 56", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Unclosed Anchor: [DEF:test_setActiveItem:Function] started at line 56", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 56 - } - ], - "score": 0.0 - } - } - ], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_toggleSidebar:Function] started at line 32", - "severity": "ERROR", - "line_number": 32 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - }, - { - "message": "Unclosed Anchor: [DEF:test_toggleSidebar:Function] started at line 32", - "severity": "ERROR", - "line_number": 32 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - }, - { - "message": "Unclosed Anchor: [DEF:test_toggleSidebar:Function] started at line 32", - "severity": "ERROR", - "line_number": 32 - }, - { - "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 32 - } - ], - "score": 0.0 - } - } - ], + "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_sidebar_initial_state:Function] started at line 17", - "severity": "ERROR", - "line_number": 17 - }, { "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", "severity": "WARNING", @@ -1986,11 +2166,6 @@ "severity": "WARNING", "line_number": 17 }, - { - "message": "Unclosed Anchor: [DEF:test_sidebar_initial_state:Function] started at line 17", - "severity": "ERROR", - "line_number": 17 - }, { "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", "severity": "WARNING", @@ -2002,25 +2177,140 @@ "line_number": 17 } ], - "score": 0.0 + "score": 0.5333333333333333 + } + }, + { + "name": "test_toggleSidebar", + "type": "Function", + "tier": "STANDARD", + "start_line": 33, + "end_line": 56, + "tags": { + "TEST": "toggleSidebar toggles isExpanded state", + "PRE": "Store is initialized", + "POST": "isExpanded is toggled from previous value" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 33 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 33 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 33 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 33 + } + ], + "score": 0.5333333333333333 + } + }, + { + "name": "test_setActiveItem", + "type": "Function", + "tier": "STANDARD", + "start_line": 58, + "end_line": 79, + "tags": { + "TEST": "setActiveItem updates activeCategory and activeItem", + "PRE": "Store is initialized", + "POST": "activeCategory and activeItem are updated" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 58 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 58 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 58 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 58 + } + ], + "score": 0.5333333333333333 + } + }, + { + "name": "test_mobile_functions", + "type": "Function", + "tier": "STANDARD", + "start_line": 81, + "end_line": 116, + "tags": { + "TEST": "Mobile functions correctly update isMobileOpen", + "PRE": "Store is initialized", + "POST": "isMobileOpen is correctly updated" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 81 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 81 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 81 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 81 + } + ], + "score": 0.5333333333333333 } } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:frontend.src.lib.stores.__tests__.sidebar:Module] started at line 2", - "severity": "ERROR", - "line_number": 2 - }, { "message": "Missing Mandatory Tag: @SEMANTICS (required for STANDARD tier)", "severity": "WARNING", "line_number": 2 } ], - "score": 0.0 + "score": 0.85 } }, { @@ -2178,7 +2468,7 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 41, + "end_line": 53, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "select, dropdown, form-field, ui-atom", @@ -2192,21 +2482,21 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "label", - "type": "string ", - "default": "\"\"" + "store": "lib", + "type": "READS_FROM", + "line": 11 }, { - "name": "value", - "type": "string | number ", - "default": "\"\"" + "store": "bindable", + "type": "WRITES_TO", + "line": 17 }, { - "name": "disabled", - "type": "boolean ", - "default": "false" + "store": "props", + "type": "WRITES_TO", + "line": 22 } ] }, @@ -2236,7 +2526,7 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 27, + "end_line": 40, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "page-header, layout-atom", @@ -2250,11 +2540,16 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "title", - "type": "string ", - "default": "\"\"" + "store": "lib", + "type": "READS_FROM", + "line": 11 + }, + { + "store": "props", + "type": "WRITES_TO", + "line": 21 } ] }, @@ -2263,7 +2558,7 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 36, + "end_line": 51, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "card, container, ui-atom", @@ -2277,11 +2572,16 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "title", - "type": "string ", - "default": "\"\"" + "store": "lib", + "type": "READS_FROM", + "line": 11 + }, + { + "store": "props", + "type": "WRITES_TO", + "line": 21 } ] }, @@ -2290,11 +2590,11 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 62, + "end_line": 68, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "button, ui-atom, interactive", - "PURPOSE": "Define component interface and default values.", + "PURPOSE": "Define component interface and default values (Svelte 5 Runes).", "LAYER": "Atom", "INVARIANT": "Supports accessible labels and keyboard navigation." }, @@ -2305,16 +2605,16 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "isLoading", - "type": "boolean ", - "default": "false" + "store": "lib", + "type": "READS_FROM", + "line": 14 }, { - "name": "disabled", - "type": "boolean ", - "default": "false" + "store": "props", + "type": "WRITES_TO", + "line": 31 } ] }, @@ -2323,7 +2623,7 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 47, + "end_line": 60, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "input, form-field, ui-atom", @@ -2338,31 +2638,21 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "label", - "type": "string ", - "default": "\"\"" + "store": "lib", + "type": "READS_FROM", + "line": 13 }, { - "name": "value", - "type": "string ", - "default": "\"\"" + "store": "bindable", + "type": "WRITES_TO", + "line": 19 }, { - "name": "placeholder", - "type": "string ", - "default": "\"\"" - }, - { - "name": "error", - "type": "string ", - "default": "\"\"" - }, - { - "name": "disabled", - "type": "boolean ", - "default": "false" + "store": "props", + "type": "WRITES_TO", + "line": 26 } ] }, @@ -2371,7 +2661,7 @@ "type": "Component", "tier": "TRIVIAL", "start_line": 1, - "end_line": 31, + "end_line": 28, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "language-switcher, i18n-ui, ui-atom", @@ -2395,7 +2685,7 @@ { "store": "locale", "type": "WRITES_TO", - "line": 25 + "line": 24 } ] }, @@ -2521,7 +2811,7 @@ "type": "Component", "tier": "CRITICAL", "start_line": 1, - "end_line": 346, + "end_line": 360, "tags": { "TIER": "CRITICAL", "PURPOSE": "Persistent left sidebar with resource categories navigation", @@ -2709,17 +2999,17 @@ { "store": "page", "type": "READS_FROM", - "line": 138 + "line": 137 }, { "store": "page", "type": "WRITES_TO", - "line": 142 + "line": 141 }, { "store": "page", "type": "READS_FROM", - "line": 204 + "line": 197 } ] }, @@ -2728,7 +3018,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 437, + "end_line": 360, "tags": { "PURPOSE": "Auto-generated module for frontend/src/lib/components/layout/Sidebar.svelte", "TIER": "TRIVIAL", @@ -2740,8 +3030,8 @@ "name": "handleItemClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 147, - "end_line": 147, + "start_line": 145, + "end_line": 145, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2758,8 +3048,8 @@ "name": "handleCategoryToggle", "type": "Function", "tier": "TRIVIAL", - "start_line": 157, - "end_line": 157, + "start_line": 154, + "end_line": 154, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2776,8 +3066,8 @@ "name": "handleSubItemClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 180, - "end_line": 180, + "start_line": 176, + "end_line": 176, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2794,8 +3084,8 @@ "name": "handleToggleClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 191, - "end_line": 191, + "start_line": 185, + "end_line": 185, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2812,8 +3102,8 @@ "name": "handleOverlayClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 198, - "end_line": 198, + "start_line": 191, + "end_line": 191, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2838,7 +3128,7 @@ "type": "Component", "tier": "CRITICAL", "start_line": 1, - "end_line": 244, + "end_line": 236, "tags": { "TIER": "CRITICAL", "PURPOSE": "Unified top navigation bar with Logo, Search, Activity, and User menu", @@ -2894,37 +3184,37 @@ { "store": "sidebarStore", "type": "READS_FROM", + "line": 34 + }, + { + "store": "activityStore", + "type": "READS_FROM", "line": 35 }, { "store": "activityStore", "type": "READS_FROM", - "line": 38 - }, - { - "store": "activityStore", - "type": "READS_FROM", - "line": 39 + "line": 36 }, { "store": "auth", "type": "READS_FROM", - "line": 42 + "line": 37 }, { "store": "t", "type": "WRITES_TO", - "line": 155 + "line": 140 }, { "store": "t", "type": "READS_FROM", - "line": 227 + "line": 219 }, { "store": "t", "type": "READS_FROM", - "line": 237 + "line": 229 } ] }, @@ -2933,7 +3223,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 337, + "end_line": 236, "tags": { "PURPOSE": "Auto-generated module for frontend/src/lib/components/layout/TopNavbar.svelte", "TIER": "TRIVIAL", @@ -2945,8 +3235,8 @@ "name": "toggleUserMenu", "type": "Function", "tier": "TRIVIAL", - "start_line": 45, - "end_line": 45, + "start_line": 39, + "end_line": 39, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2963,8 +3253,8 @@ "name": "closeUserMenu", "type": "Function", "tier": "TRIVIAL", - "start_line": 52, - "end_line": 52, + "start_line": 44, + "end_line": 44, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2981,8 +3271,8 @@ "name": "handleLogout", "type": "Function", "tier": "TRIVIAL", - "start_line": 57, - "end_line": 57, + "start_line": 48, + "end_line": 48, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2999,6 +3289,24 @@ "name": "handleActivityClick", "type": "Function", "tier": "TRIVIAL", + "start_line": 54, + "end_line": 54, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleSearchFocus", + "type": "Function", + "tier": "TRIVIAL", "start_line": 66, "end_line": 66, "tags": { @@ -3013,30 +3321,12 @@ "score": 1.0 } }, - { - "name": "handleSearchFocus", - "type": "Function", - "tier": "TRIVIAL", - "start_line": 82, - "end_line": 82, - "tags": { - "PURPOSE": "Auto-detected function (orphan)", - "TIER": "TRIVIAL" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } - }, { "name": "handleSearchBlur", "type": "Function", "tier": "TRIVIAL", - "start_line": 86, - "end_line": 86, + "start_line": 70, + "end_line": 70, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3053,8 +3343,8 @@ "name": "handleDocumentClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 91, - "end_line": 91, + "start_line": 74, + "end_line": 74, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3071,8 +3361,8 @@ "name": "handleHamburgerClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 103, - "end_line": 103, + "start_line": 84, + "end_line": 84, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3097,7 +3387,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 142, + "end_line": 111, "tags": { "TIER": "STANDARD", "PURPOSE": "Display page hierarchy navigation", @@ -3123,13 +3413,6 @@ ], "score": 0.85 }, - "props": [ - { - "name": "maxVisible", - "type": "any", - "default": "3" - } - ], "data_flow": [ { "store": "app", @@ -3141,10 +3424,20 @@ "type": "READS_FROM", "line": 16 }, + { + "store": "props", + "type": "WRITES_TO", + "line": 18 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 21 + }, { "store": "page", "type": "READS_FROM", - "line": 21 + "line": 22 } ] }, @@ -3153,7 +3446,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 142, + "end_line": 111, "tags": { "PURPOSE": "Auto-generated module for frontend/src/lib/components/layout/Breadcrumbs.svelte", "TIER": "TRIVIAL", @@ -3165,8 +3458,8 @@ "name": "getBreadcrumbs", "type": "Function", "tier": "TRIVIAL", - "start_line": 28, - "end_line": 28, + "start_line": 30, + "end_line": 30, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3183,8 +3476,8 @@ "name": "formatBreadcrumbLabel", "type": "Function", "tier": "TRIVIAL", - "start_line": 80, - "end_line": 80, + "start_line": 66, + "end_line": 66, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3494,12 +3787,51 @@ "score": 1.0 } }, + { + "name": "ErrorPage", + "type": "Page", + "tier": "STANDARD", + "start_line": 1, + "end_line": 24, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Global error page displaying HTTP status and messages", + "LAYER": "UI", + "UX_STATE": "Error -> Displays error code and message with home link" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "RootLayoutConfig", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 9, + "tags": { + "TIER": "TRIVIAL", + "PURPOSE": "Root layout configuration (SPA mode)", + "LAYER": "Infra" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "HomePage", "type": "Page", "tier": "CRITICAL", "start_line": 1, - "end_line": 35, + "end_line": 45, "tags": { "TIER": "CRITICAL", "PURPOSE": "Redirect to Dashboard Hub as per UX requirements", @@ -3771,7 +4103,7 @@ "type": "Page", "tier": "CRITICAL", "start_line": 1, - "end_line": 779, + "end_line": 780, "tags": { "TIER": "CRITICAL", "PURPOSE": "Dataset Hub - Dedicated hub for datasets with mapping progress", @@ -3795,7 +4127,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 779, + "end_line": 780, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/datasets/+page.svelte", "TIER": "TRIVIAL", @@ -4103,7 +4435,7 @@ "type": "Page", "tier": "CRITICAL", "start_line": 1, - "end_line": 418, + "end_line": 393, "tags": { "TIER": "CRITICAL", "PURPOSE": "Dataset Detail View - Shows detailed dataset information with columns, SQL, and linked dashboards", @@ -4127,7 +4459,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 418, + "end_line": 393, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/datasets/[id]/+page.svelte", "TIER": "TRIVIAL", @@ -4211,8 +4543,8 @@ "name": "getMappingProgress", "type": "Function", "tier": "TRIVIAL", - "start_line": 86, - "end_line": 86, + "start_line": 94, + "end_line": 94, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -4237,7 +4569,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 161, + "end_line": 158, "tags": { "TIER": "STANDARD", "SEMANTICS": "login, auth, ui, form", @@ -4450,7 +4782,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 236, + "end_line": 234, "tags": { "TIER": "STANDARD", "SEMANTICS": "admin, role-management, rbac", @@ -4676,7 +5008,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 284, + "end_line": 282, "tags": { "SEMANTICS": "admin, user-management, rbac", "PURPOSE": "UI for managing system users and their roles.", @@ -4976,7 +5308,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 352, + "end_line": 350, "tags": { "TIER": "STANDARD", "SEMANTICS": "admin, adfs, mappings, configuration, logging", @@ -5219,7 +5551,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 391, + "end_line": 388, "tags": { "SEMANTICS": "migration, dashboard, environment, selection, database-replacement", "PURPOSE": "Main dashboard for configuring and starting migrations.", @@ -5611,7 +5943,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 180, + "end_line": 177, "tags": { "SEMANTICS": "mapping, management, database, fuzzy-matching", "PURPOSE": "Page for managing database mappings between environments.", @@ -5741,7 +6073,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 225, + "end_line": 222, "tags": { "TIER": "STANDARD", "SEMANTICS": "storage, files, management", @@ -6002,7 +6334,7 @@ "type": "Page", "tier": "CRITICAL", "start_line": 1, - "end_line": 539, + "end_line": 715, "tags": { "TIER": "CRITICAL", "PURPOSE": "Consolidated Settings Page - All settings in one place with tabbed navigation", @@ -6026,7 +6358,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 539, + "end_line": 715, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/settings/+page.svelte", "TIER": "TRIVIAL", @@ -6128,8 +6460,8 @@ "name": "editEnv", "type": "Function", "tier": "TRIVIAL", - "start_line": 109, - "end_line": 109, + "start_line": 112, + "end_line": 112, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6146,8 +6478,8 @@ "name": "resetEnvForm", "type": "Function", "tier": "TRIVIAL", - "start_line": 120, - "end_line": 120, + "start_line": 123, + "end_line": 123, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6164,8 +6496,8 @@ "name": "handleAddOrUpdateEnv", "type": "Function", "tier": "TRIVIAL", - "start_line": 136, - "end_line": 136, + "start_line": 139, + "end_line": 139, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6182,8 +6514,8 @@ "name": "handleDeleteEnv", "type": "Function", "tier": "TRIVIAL", - "start_line": 164, - "end_line": 164, + "start_line": 172, + "end_line": 172, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6290,7 +6622,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 182, + "end_line": 179, "tags": { "SEMANTICS": "git, settings, configuration, integration", "PURPOSE": "Manage Git server configurations for dashboard versioning.", @@ -7811,7 +8143,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 133, + "end_line": 179, "tags": { "SEMANTICS": "password, prompt, modal, input, security", "PURPOSE": "A modal component to prompt the user for database passwords when a migration task is paused.", @@ -7824,8 +8156,8 @@ "name": "handleSubmit", "type": "Function", "tier": "STANDARD", - "start_line": 21, - "end_line": 39, + "start_line": 19, + "end_line": 37, "tags": { "PURPOSE": "Validates and dispatches the passwords to resume the task.", "PRE": "All database passwords must be entered.", @@ -7839,12 +8171,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 21 + "line_number": 19 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 21 + "line_number": 19 } ], "score": 0.8 @@ -7854,8 +8186,8 @@ "name": "handleCancel", "type": "Function", "tier": "STANDARD", - "start_line": 41, - "end_line": 49, + "start_line": 39, + "end_line": 47, "tags": { "PURPOSE": "Cancels the password prompt.", "PRE": "Modal is open.", @@ -7869,12 +8201,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 41 + "line_number": 39 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 41 + "line_number": 39 } ], "score": 0.8 @@ -7892,26 +8224,21 @@ ], "score": 0.85 }, - "props": [ - { - "name": "show", - "type": "any", - "default": "false" - }, - { - "name": "databases", - "type": "any", - "default": "[]" - }, - { - "name": "errorMessage", - "type": "any", - "default": "\"\"" - } - ], "events": [ "cancel", "resume" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 12 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 50 + } ] }, { @@ -7933,8 +8260,8 @@ "name": "updateMapping", "type": "Function", "tier": "STANDARD", - "start_line": 25, - "end_line": 43, + "start_line": 28, + "end_line": 46, "tags": { "PURPOSE": "Updates a mapping for a specific source database.", "PRE": "sourceUuid and targetUuid are provided.", @@ -7948,12 +8275,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 25 + "line_number": 28 } ], "score": 0.8 @@ -7963,8 +8290,8 @@ "name": "getSuggestion", "type": "Function", "tier": "STANDARD", - "start_line": 45, - "end_line": 54, + "start_line": 48, + "end_line": 57, "tags": { "PURPOSE": "Finds a suggestion for a source database.", "PRE": "sourceUuid is provided.", @@ -7978,12 +8305,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 48 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 48 } ], "score": 0.8 @@ -8003,6 +8330,13 @@ }, "events": [ "update" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 22 + } ] }, { @@ -8010,7 +8344,7 @@ "type": "Component", "tier": "CRITICAL", "start_line": 1, - "end_line": 212, + "end_line": 203, "tags": { "TIER": "CRITICAL", "SEMANTICS": "task, log, viewer, inline, realtime", @@ -8025,11 +8359,9 @@ "name": "handleRealTimeLogs", "type": "Action", "tier": "STANDARD", - "start_line": 42, + "start_line": 44, "end_line": 58, - "tags": { - "PURPOSE": "Append real-time logs as they arrive from WebSocket, preventing duplicates */" - }, + "tags": {}, "relations": [], "children": [], "compliance": { @@ -8043,29 +8375,55 @@ "type": "Function", "tier": "STANDARD", "start_line": 60, - "end_line": 84, - "tags": { - "PURPOSE": "Fetches logs for the current task from API (polling fallback).", - "PRE": "taskId must be set.", - "POST": "logs array is updated with data from taskService." - }, + "end_line": 71, + "tags": {}, "relations": [], "children": [], "compliance": { "valid": true, "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", "line_number": 60 }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 60 + }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", "line_number": 60 } ], - "score": 0.8 + "score": 0.0 } } ], @@ -8074,51 +8432,69 @@ "issues": [], "score": 1.0 }, - "props": [ - { - "name": "show", - "type": "any", - "default": "false" - }, - { - "name": "inline", - "type": "any", - "default": "false" - }, - { - "name": "taskId", - "type": "any", - "default": "null" - }, - { - "name": "taskStatus", - "type": "any", - "default": "null" - }, - { - "name": "realTimeLogs", - "type": "any", - "default": "[]" - } - ], "events": [ "close" ], "data_flow": [ { - "store": "t", + "store": "bindable", + "type": "WRITES_TO", + "line": 27 + }, + { + "store": "props", + "type": "WRITES_TO", + "line": 32 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 36 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 37 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 38 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 40 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 42 + }, + { + "store": "effect", "type": "READS_FROM", - "line": 128 + "line": 45 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 81 }, { "store": "t", "type": "READS_FROM", - "line": 178 + "line": 116 }, { "store": "t", "type": "READS_FROM", - "line": 192 + "line": 169 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 183 } ] }, @@ -8127,7 +8503,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 276, + "end_line": 203, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/TaskLogViewer.svelte", "TIER": "TRIVIAL", @@ -8139,8 +8515,8 @@ "name": "handleFilterChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 86, - "end_line": 86, + "start_line": 73, + "end_line": 73, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8157,8 +8533,8 @@ "name": "handleRefresh", "type": "Function", "tier": "TRIVIAL", - "start_line": 93, - "end_line": 93, + "start_line": 77, + "end_line": 77, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8217,8 +8593,8 @@ "name": "resolve", "type": "Function", "tier": "STANDARD", - "start_line": 26, - "end_line": 39, + "start_line": 29, + "end_line": 42, "tags": { "PURPOSE": "Dispatches the resolution event with the selected mapping.", "PRE": "selectedTargetUuid must be set.", @@ -8232,12 +8608,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 26 + "line_number": 29 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 26 + "line_number": 29 } ], "score": 0.8 @@ -8247,8 +8623,8 @@ "name": "cancel", "type": "Function", "tier": "STANDARD", - "start_line": 41, - "end_line": 49, + "start_line": 44, + "end_line": 52, "tags": { "PURPOSE": "Cancels the mapping resolution modal.", "PRE": "Modal is open.", @@ -8262,12 +8638,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 41 + "line_number": 44 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 41 + "line_number": 44 } ], "score": 0.8 @@ -8285,26 +8661,16 @@ ], "score": 0.85 }, - "props": [ - { - "name": "show", - "type": "boolean ", - "default": "false" - }, - { - "name": "sourceDbName", - "type": "string ", - "default": "\"\"" - }, - { - "name": "sourceDbUuid", - "type": "string ", - "default": "\"\"" - } - ], "events": [ "cancel", "resolve" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 22 + } ] }, { @@ -8312,7 +8678,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 320, + "end_line": 376, "tags": { "TIER": "STANDARD", "SEMANTICS": "dashboard, grid, selection, pagination", @@ -8327,8 +8693,8 @@ "name": "handleValidate", "type": "Function", "tier": "STANDARD", - "start_line": 44, - "end_line": 87, + "start_line": 43, + "end_line": 89, "tags": { "PURPOSE": "Triggers dashboard validation task." }, @@ -8340,32 +8706,32 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 43 } ], "score": 0.26666666666666655 @@ -8375,8 +8741,8 @@ "name": "handleSort", "type": "Function", "tier": "STANDARD", - "start_line": 121, - "end_line": 133, + "start_line": 134, + "end_line": 146, "tags": { "PURPOSE": "Toggles sort direction or changes sort column.", "PRE": "column name is provided.", @@ -8390,12 +8756,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 121 + "line_number": 134 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 121 + "line_number": 134 } ], "score": 0.8 @@ -8405,8 +8771,8 @@ "name": "handleSelectionChange", "type": "Function", "tier": "STANDARD", - "start_line": 135, - "end_line": 149, + "start_line": 148, + "end_line": 162, "tags": { "PURPOSE": "Handles individual checkbox changes.", "PRE": "dashboard ID and checked status provided.", @@ -8420,12 +8786,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 135 + "line_number": 148 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 135 + "line_number": 148 } ], "score": 0.8 @@ -8435,8 +8801,8 @@ "name": "handleSelectAll", "type": "Function", "tier": "STANDARD", - "start_line": 151, - "end_line": 169, + "start_line": 164, + "end_line": 182, "tags": { "PURPOSE": "Handles select all checkbox.", "PRE": "checked status provided.", @@ -8450,12 +8816,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 151 + "line_number": 164 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 151 + "line_number": 164 } ], "score": 0.8 @@ -8465,8 +8831,8 @@ "name": "goToPage", "type": "Function", "tier": "STANDARD", - "start_line": 171, - "end_line": 180, + "start_line": 184, + "end_line": 193, "tags": { "PURPOSE": "Changes current page.", "PRE": "page index is provided.", @@ -8480,12 +8846,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 171 + "line_number": 184 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 171 + "line_number": 184 } ], "score": 0.8 @@ -8495,8 +8861,8 @@ "name": "openGit", "type": "Function", "tier": "STANDARD", - "start_line": 182, - "end_line": 191, + "start_line": 195, + "end_line": 204, "tags": { "PURPOSE": "Opens the Git management modal for a dashboard." }, @@ -8508,32 +8874,32 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 195 } ], "score": 0.26666666666666655 @@ -8545,56 +8911,69 @@ "issues": [], "score": 1.0 }, - "props": [ - { - "name": "dashboards", - "type": "DashboardMetadata[] ", - "default": "[]" - }, - { - "name": "selectedIds", - "type": "number[] ", - "default": "[]" - }, - { - "name": "environmentId", - "type": "string ", - "default": "\"ss1\"" - } - ], "events": [ "selectionChanged" ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 201 + "line": 24 }, { - "store": "t", - "type": "READS_FROM", - "line": 220 + "store": "derived", + "type": "WRITES_TO", + "line": 92 }, { - "store": "t", - "type": "READS_FROM", - "line": 223 + "store": "derived", + "type": "WRITES_TO", + "line": 98 }, { - "store": "t", - "type": "READS_FROM", - "line": 226 + "store": "derived", + "type": "WRITES_TO", + "line": 112 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 119 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 121 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 125 }, { "store": "t", "type": "WRITES_TO", - "line": 228 + "line": 211 }, { "store": "t", - "type": "WRITES_TO", - "line": 229 + "type": "READS_FROM", + "line": 233 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 244 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 255 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 264 }, { "store": "t", @@ -8604,17 +8983,22 @@ { "store": "t", "type": "READS_FROM", - "line": 280 + "line": 322 }, { "store": "t", "type": "READS_FROM", - "line": 292 + "line": 334 }, { "store": "t", "type": "READS_FROM", - "line": 300 + "line": 352 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 360 } ] }, @@ -9433,7 +9817,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 110, + "end_line": 113, "tags": { "SEMANTICS": "tasks, list, status, history", "PURPOSE": "Displays a list of tasks with their status and execution details.", @@ -9446,8 +9830,8 @@ "name": "getStatusColor", "type": "Function", "tier": "STANDARD", - "start_line": 19, - "end_line": 34, + "start_line": 22, + "end_line": 37, "tags": { "PURPOSE": "Returns the CSS color class for a given task status.", "PRE": "status string is provided.", @@ -9461,12 +9845,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 19 + "line_number": 22 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 19 + "line_number": 22 } ], "score": 0.8 @@ -9476,8 +9860,8 @@ "name": "formatTime", "type": "Function", "tier": "STANDARD", - "start_line": 36, - "end_line": 48, + "start_line": 39, + "end_line": 51, "tags": { "PURPOSE": "Formats a date string using date-fns.", "PRE": "dateStr is a valid date string or null.", @@ -9491,12 +9875,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 36 + "line_number": 39 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 36 + "line_number": 39 } ], "score": 0.8 @@ -9506,8 +9890,8 @@ "name": "handleTaskClick", "type": "Function", "tier": "STANDARD", - "start_line": 50, - "end_line": 57, + "start_line": 53, + "end_line": 60, "tags": { "PURPOSE": "Dispatches a select event when a task is clicked.", "PRE": "taskId is provided.", @@ -9521,12 +9905,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 50 + "line_number": 53 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 50 + "line_number": 53 } ], "score": 0.8 @@ -9544,36 +9928,29 @@ ], "score": 0.85 }, - "props": [ - { - "name": "tasks", - "type": "Array ", - "default": "[]" - }, - { - "name": "loading", - "type": "boolean ", - "default": "false" - } - ], "events": [ "select" ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 62 + "line": 17 }, { "store": "t", "type": "WRITES_TO", - "line": 64 + "line": 65 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 67 }, { "store": "t", "type": "READS_FROM", - "line": 98 + "line": 101 } ] }, @@ -9582,7 +9959,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 92, + "end_line": 95, "tags": { "SEMANTICS": "form, schema, dynamic, json-schema", "PURPOSE": "Generates a form dynamically based on a JSON schema.", @@ -9597,8 +9974,8 @@ "name": "handleSubmit", "type": "Function", "tier": "STANDARD", - "start_line": 23, - "end_line": 33, + "start_line": 26, + "end_line": 36, "tags": { "PURPOSE": "Dispatches the submit event with the form data.", "PRE": "formData contains user input.", @@ -9616,8 +9993,8 @@ "name": "initializeForm", "type": "Function", "tier": "STANDARD", - "start_line": 35, - "end_line": 48, + "start_line": 38, + "end_line": 51, "tags": { "PURPOSE": "Initialize form data with default values from the schema.", "PRE": "schema is provided and contains properties.", @@ -9631,12 +10008,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 35 + "line_number": 38 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 35 + "line_number": 38 } ], "score": 0.8 @@ -9654,15 +10031,15 @@ ], "score": 0.85 }, - "props": [ - { - "name": "schema", - "type": "any", - "default": null - } - ], "events": [ "submit" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 20 + } ] }, { @@ -9684,8 +10061,8 @@ "name": "handleSelect", "type": "Function", "tier": "STANDARD", - "start_line": 24, - "end_line": 36, + "start_line": 27, + "end_line": 39, "tags": { "PURPOSE": "Dispatches the selection change event.", "PRE": "event.target must be an HTMLSelectElement.", @@ -9700,12 +10077,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 24 + "line_number": 27 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 24 + "line_number": 27 } ], "score": 0.8 @@ -9723,20 +10100,15 @@ ], "score": 0.85 }, - "props": [ - { - "name": "label", - "type": "string ", - "default": "\"Select Environment\"" - }, - { - "name": "selectedId", - "type": "string ", - "default": "\"\"" - } - ], "events": [ "change" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 21 + } ] }, { @@ -9798,16 +10170,15 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 141, + "end_line": 149, "tags": { "TIER": "STANDARD", "SEMANTICS": "task, log, panel, filter, list", - "PURPOSE": "Component properties and state.", + "PURPOSE": "Combines log filtering and display into a single cohesive dark-themed panel.", "LAYER": "UI", "RELATION": "USES -> frontend/src/components/tasks/LogEntryRow.svelte", "INVARIANT": "Must always display logs in chronological order and respect auto-scroll preference.", - "UX_STATE": "AutoScroll -> Automatically scrolls to bottom on new logs", - "PRE": "logs is an array of LogEntry objects." + "UX_STATE": "AutoScroll -> Automatically scrolls to bottom on new logs" }, "relations": [], "children": [], @@ -9816,20 +10187,50 @@ "issues": [], "score": 1.0 }, - "props": [ - { - "name": "logs", - "type": "any", - "default": "[]" - }, - { - "name": "autoScroll", - "type": "any", - "default": "true" - } - ], "events": [ "filterChange" + ], + "data_flow": [ + { + "store": "bindable", + "type": "WRITES_TO", + "line": 19 + }, + { + "store": "props", + "type": "WRITES_TO", + "line": 19 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 23 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 24 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 25 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 27 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 51 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 75 + } ] }, { @@ -9837,7 +10238,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 247, + "end_line": 149, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/tasks/TaskLogPanel.svelte", "TIER": "TRIVIAL", @@ -9849,8 +10250,8 @@ "name": "filterLogs", "type": "Function", "tier": "TRIVIAL", - "start_line": 35, - "end_line": 35, + "start_line": 31, + "end_line": 31, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -9867,8 +10268,8 @@ "name": "handleFilterChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 58, - "end_line": 58, + "start_line": 55, + "end_line": 55, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -9885,8 +10286,8 @@ "name": "scrollToBottom", "type": "Function", "tier": "TRIVIAL", - "start_line": 69, - "end_line": 69, + "start_line": 63, + "end_line": 63, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -9903,8 +10304,8 @@ "name": "toggleAutoScroll", "type": "Function", "tier": "TRIVIAL", - "start_line": 75, - "end_line": 75, + "start_line": 69, + "end_line": 69, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -9929,14 +10330,13 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 139, + "end_line": 143, "tags": { "TIER": "STANDARD", "SEMANTICS": "log, filter, ui", "PURPOSE": "Compact filter toolbar for logs \u2014 level, source, and text search in a single dense row.", "LAYER": "UI", - "UX_STATE": "Active -> Filters applied, clear button visible", - "TYPE": "{string} searchText - Current search text */" + "UX_STATE": "Active -> Filters applied, clear button visible" }, "relations": [], "children": [], @@ -9945,26 +10345,31 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "availableSources", - "type": "any", - "default": "[]" + "store": "bindable", + "type": "WRITES_TO", + "line": 15 }, { - "name": "selectedLevel", - "type": "any", - "default": "\"\"" + "store": "bindable", + "type": "WRITES_TO", + "line": 16 }, { - "name": "selectedSource", - "type": "any", - "default": "\"\"" + "store": "bindable", + "type": "WRITES_TO", + "line": 17 }, { - "name": "searchText", - "type": "any", - "default": "\"\"" + "store": "props", + "type": "WRITES_TO", + "line": 18 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 64 } ] }, @@ -9973,7 +10378,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 234, + "end_line": 143, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/tasks/LogFilterBar.svelte", "TIER": "TRIVIAL", @@ -9985,8 +10390,8 @@ "name": "handleLevelChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 32, - "end_line": 32, + "start_line": 30, + "end_line": 30, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10003,8 +10408,8 @@ "name": "handleSourceChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 41, - "end_line": 41, + "start_line": 39, + "end_line": 39, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10021,8 +10426,8 @@ "name": "handleSearchChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 50, - "end_line": 50, + "start_line": 48, + "end_line": 48, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10039,8 +10444,8 @@ "name": "clearFilters", "type": "Function", "tier": "TRIVIAL", - "start_line": 59, - "end_line": 59, + "start_line": 57, + "end_line": 57, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10065,14 +10470,14 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 82, + "end_line": 100, "tags": { "TIER": "STANDARD", "SEMANTICS": "log, entry, row, ui", "PURPOSE": "Renders a single log entry with stacked layout optimized for narrow drawer panels.", "LAYER": "UI", "UX_STATE": "Idle -> Displays log entry with color-coded level and source badges.", - "TYPE": "{boolean} showSource - Whether to show the source tag */" + "TYPE": "{Object} log - The log entry object */" }, "relations": [], "children": [ @@ -10080,8 +10485,8 @@ "name": "formatTime", "type": "Function", "tier": "STANDARD", - "start_line": 15, - "end_line": 29, + "start_line": 13, + "end_line": 25, "tags": { "PURPOSE": "Format ISO timestamp to HH:MM:SS */" }, @@ -10093,32 +10498,32 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 13 } ], "score": 0.26666666666666655 @@ -10130,75 +10535,39 @@ "issues": [], "score": 1.0 }, - "props": [ + "data_flow": [ { - "name": "log", - "type": "any", - "default": null + "store": "props", + "type": "WRITES_TO", + "line": 11 }, { - "name": "showSource", - "type": "any", - "default": "true" + "store": "derived", + "type": "WRITES_TO", + "line": 27 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 44 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 47 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 52 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 53 } ] }, - { - "name": "LogEntryRow", - "type": "Module", - "tier": "TRIVIAL", - "start_line": 1, - "end_line": 207, - "tags": { - "PURPOSE": "Auto-generated module for frontend/src/components/tasks/LogEntryRow.svelte", - "TIER": "TRIVIAL", - "LAYER": "Unknown" - }, - "relations": [], - "children": [ - { - "name": "getLevelClass", - "type": "Function", - "tier": "TRIVIAL", - "start_line": 33, - "end_line": 33, - "tags": { - "PURPOSE": "Auto-detected function (orphan)", - "TIER": "TRIVIAL" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } - }, - { - "name": "getSourceClass", - "type": "Function", - "tier": "TRIVIAL", - "start_line": 50, - "end_line": 50, - "tags": { - "PURPOSE": "Auto-detected function (orphan)", - "TIER": "TRIVIAL" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } - } - ], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } - }, { "name": "FileList", "type": "Component", @@ -10220,8 +10589,8 @@ "name": "isDirectory", "type": "Function", "tier": "STANDARD", - "start_line": 23, - "end_line": 35, + "start_line": 26, + "end_line": 38, "tags": { "PURPOSE": "Checks if a file object represents a directory.", "PRE": "file object has mime_type property.", @@ -10241,8 +10610,8 @@ "name": "formatSize", "type": "Function", "tier": "STANDARD", - "start_line": 37, - "end_line": 53, + "start_line": 40, + "end_line": 56, "tags": { "PURPOSE": "Formats file size in bytes into a human-readable string.", "PRE": "bytes is a number.", @@ -10258,12 +10627,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 40 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 40 } ], "score": 0.8 @@ -10273,8 +10642,8 @@ "name": "formatDate", "type": "Function", "tier": "STANDARD", - "start_line": 55, - "end_line": 67, + "start_line": 58, + "end_line": 70, "tags": { "PURPOSE": "Formats an ISO date string into a localized readable format.", "PRE": "dateStr is a valid date string.", @@ -10296,32 +10665,15 @@ "issues": [], "score": 1.0 }, - "props": [ - { - "name": "files", - "type": "any", - "default": "[]" - } - ], "events": [ "delete", "navigate" ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 75 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 76 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 77 + "line": 22 }, { "store": "t", @@ -10335,18 +10687,33 @@ }, { "store": "t", - "type": "READS_FROM", - "line": 117 + "type": "WRITES_TO", + "line": 80 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 81 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 82 }, { "store": "t", "type": "READS_FROM", - "line": 124 + "line": 120 }, { "store": "t", "type": "READS_FROM", - "line": 131 + "line": 127 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 134 } ] }, @@ -10372,7 +10739,7 @@ "type": "Function", "tier": "STANDARD", "start_line": 21, - "end_line": 56, + "end_line": 59, "tags": { "PURPOSE": "Handles the file upload process.", "PRE": "A file must be selected in the file input.", @@ -10401,8 +10768,8 @@ "name": "handleDrop", "type": "Function", "tier": "STANDARD", - "start_line": 58, - "end_line": 72, + "start_line": 61, + "end_line": 75, "tags": { "PURPOSE": "Handles the file drop event for drag-and-drop.", "PARAM": "{DragEvent} event - The drop event." @@ -10415,32 +10782,32 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 61 } ], "score": 0.26666666666666655 @@ -10457,54 +10824,59 @@ ], "data_flow": [ { - "store": "t", - "type": "READS_FROM", - "line": 47 + "store": "props", + "type": "WRITES_TO", + "line": 32 }, { "store": "t", "type": "READS_FROM", - "line": 51 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 77 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 81 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 86 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 87 + "line": 50 }, { "store": "t", "type": "READS_FROM", - "line": 104 + "line": 54 }, { "store": "t", "type": "WRITES_TO", - "line": 115 + "line": 80 }, { "store": "t", "type": "WRITES_TO", - "line": 117 + "line": 84 }, { "store": "t", "type": "WRITES_TO", - "line": 124 + "line": 89 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 90 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 107 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 118 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 120 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 127 } ] }, @@ -11132,7 +11504,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 95, + "end_line": 98, "tags": { "SEMANTICS": "git, history, commits, audit", "PURPOSE": "Displays the commit history for a specific dashboard.", @@ -11145,8 +11517,8 @@ "name": "onMount", "type": "Function", "tier": "STANDARD", - "start_line": 27, - "end_line": 36, + "start_line": 30, + "end_line": 39, "tags": { "PURPOSE": "Load history when component is mounted.", "PRE": "Component is initialized with dashboardId.", @@ -11160,12 +11532,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 27 + "line_number": 30 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 27 + "line_number": 30 } ], "score": 0.8 @@ -11175,8 +11547,8 @@ "name": "loadHistory", "type": "Function", "tier": "STANDARD", - "start_line": 38, - "end_line": 57, + "start_line": 41, + "end_line": 60, "tags": { "PURPOSE": "Fetch commit history from the backend.", "PRE": "dashboardId is valid.", @@ -11190,12 +11562,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 38 + "line_number": 41 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 38 + "line_number": 41 } ], "score": 0.8 @@ -11213,28 +11585,26 @@ ], "score": 0.85 }, - "props": [ - { - "name": "dashboardId", - "type": "any", - "default": null - } - ], "data_flow": [ { - "store": "t", - "type": "READS_FROM", - "line": 64 + "store": "props", + "type": "WRITES_TO", + "line": 21 }, { "store": "t", "type": "READS_FROM", "line": 67 }, + { + "store": "t", + "type": "READS_FROM", + "line": 70 + }, { "store": "t", "type": "WRITES_TO", - "line": 76 + "line": 79 } ] }, @@ -11243,7 +11613,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 148, + "end_line": 179, "tags": { "SEMANTICS": "deployment, git, environment, modal", "PURPOSE": "Modal for deploying a dashboard to a target environment.", @@ -11258,7 +11628,7 @@ "type": "Watcher", "tier": "STANDARD", "start_line": 33, - "end_line": 35, + "end_line": 37, "tags": {}, "relations": [], "children": [], @@ -11272,8 +11642,8 @@ "name": "loadEnvironments", "type": "Function", "tier": "STANDARD", - "start_line": 37, - "end_line": 59, + "start_line": 39, + "end_line": 63, "tags": { "PURPOSE": "Fetch available environments from API.", "POST": "environments state is populated." @@ -11286,22 +11656,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 39 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 39 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 37 + "line_number": 39 } ], "score": 0.5333333333333333 @@ -11311,8 +11681,8 @@ "name": "handleDeploy", "type": "Function", "tier": "STANDARD", - "start_line": 61, - "end_line": 85, + "start_line": 65, + "end_line": 92, "tags": { "PURPOSE": "Trigger deployment to selected environment.", "PRE": "selectedEnv must be set.", @@ -11326,12 +11696,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 61 + "line_number": 65 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 61 + "line_number": 65 } ], "score": 0.8 @@ -11349,20 +11719,20 @@ ], "score": 0.85 }, - "props": [ - { - "name": "dashboardId", - "type": "any", - "default": null - }, - { - "name": "show", - "type": "any", - "default": "false" - } - ], "events": [ "deploy" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 20 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 34 + } ] }, { @@ -11370,7 +11740,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 142, + "end_line": 181, "tags": { "SEMANTICS": "git, conflict, resolution, merge", "PURPOSE": "UI for resolving merge conflicts (Keep Mine / Keep Theirs).", @@ -11385,8 +11755,8 @@ "name": "resolve", "type": "Function", "tier": "STANDARD", - "start_line": 29, - "end_line": 43, + "start_line": 32, + "end_line": 48, "tags": { "PURPOSE": "Set resolution strategy for a file.", "PRE": "file path must exist in conflicts array.", @@ -11401,12 +11771,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 29 + "line_number": 32 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 29 + "line_number": 32 } ], "score": 0.8 @@ -11416,8 +11786,8 @@ "name": "handleSave", "type": "Function", "tier": "STANDARD", - "start_line": 45, - "end_line": 66, + "start_line": 50, + "end_line": 76, "tags": { "PURPOSE": "Validate and submit resolutions.", "PRE": "All conflicts must have a resolution.", @@ -11431,12 +11801,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 50 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 50 } ], "score": 0.8 @@ -11454,20 +11824,15 @@ ], "score": 0.85 }, - "props": [ - { - "name": "conflicts", - "type": "any", - "default": "[]" - }, - { - "name": "show", - "type": "any", - "default": "false" - } - ], "events": [ "resolve" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 22 + } ] }, { @@ -11475,7 +11840,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 212, + "end_line": 268, "tags": { "TIER": "STANDARD", "SEMANTICS": "git, commit, modal, version_control, diff", @@ -11490,7 +11855,7 @@ "type": "Function", "tier": "STANDARD", "start_line": 37, - "end_line": 56, + "end_line": 60, "tags": { "PURPOSE": "Generates a commit message using LLM." }, @@ -11537,8 +11902,8 @@ "name": "loadStatus", "type": "Function", "tier": "STANDARD", - "start_line": 58, - "end_line": 85, + "start_line": 62, + "end_line": 101, "tags": { "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 diff.", "PRE": "dashboardId \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c." @@ -11551,22 +11916,22 @@ { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 62 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 62 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 62 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 58 + "line_number": 62 } ], "score": 0.5333333333333333 @@ -11576,8 +11941,8 @@ "name": "handleCommit", "type": "Function", "tier": "STANDARD", - "start_line": 87, - "end_line": 111, + "start_line": 103, + "end_line": 129, "tags": { "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043c\u043c\u0438\u0442 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c.", "PRE": "message \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c.", @@ -11591,12 +11956,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 87 + "line_number": 103 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 87 + "line_number": 103 } ], "score": 0.8 @@ -11608,20 +11973,20 @@ "issues": [], "score": 1.0 }, - "props": [ - { - "name": "dashboardId", - "type": "any", - "default": null - }, - { - "name": "show", - "type": "any", - "default": "false" - } - ], "events": [ "commit" + ], + "data_flow": [ + { + "store": "props", + "type": "WRITES_TO", + "line": 22 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 131 + } ] }, { @@ -11629,7 +11994,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 178, + "end_line": 181, "tags": { "SEMANTICS": "git, branch, selection, checkout", "PURPOSE": "UI \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u043e\u043a Git.", @@ -11642,8 +12007,8 @@ "name": "onMount", "type": "Function", "tier": "STANDARD", - "start_line": 35, - "end_line": 44, + "start_line": 38, + "end_line": 47, "tags": { "PURPOSE": "Load branches when component is mounted.", "PRE": "Component is initialized.", @@ -11657,12 +12022,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 35 + "line_number": 38 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 35 + "line_number": 38 } ], "score": 0.8 @@ -11672,8 +12037,8 @@ "name": "loadBranches", "type": "Function", "tier": "STANDARD", - "start_line": 46, - "end_line": 65, + "start_line": 49, + "end_line": 68, "tags": { "PURPOSE": "\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0442\u043e\u043a \u0434\u043b\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.", "PRE": "dashboardId is provided.", @@ -11687,12 +12052,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 49 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 49 } ], "score": 0.8 @@ -11702,8 +12067,8 @@ "name": "handleSelect", "type": "Function", "tier": "STANDARD", - "start_line": 67, - "end_line": 76, + "start_line": 70, + "end_line": 79, "tags": { "PURPOSE": "Handles branch selection from dropdown.", "PRE": "event contains branch name.", @@ -11717,12 +12082,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 67 + "line_number": 70 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 67 + "line_number": 70 } ], "score": 0.8 @@ -11732,8 +12097,8 @@ "name": "handleCheckout", "type": "Function", "tier": "STANDARD", - "start_line": 78, - "end_line": 97, + "start_line": 81, + "end_line": 100, "tags": { "PURPOSE": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0432\u0435\u0442\u043a\u0443.", "PARAM": "{string} branchName - \u0418\u043c\u044f \u0432\u0435\u0442\u043a\u0438.", @@ -11747,22 +12112,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 81 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 81 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 81 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 81 } ], "score": 0.5333333333333333 @@ -11772,8 +12137,8 @@ "name": "handleCreate", "type": "Function", "tier": "STANDARD", - "start_line": 99, - "end_line": 120, + "start_line": 102, + "end_line": 123, "tags": { "PURPOSE": "\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0442\u043a\u0443.", "PRE": "newBranchName is not empty.", @@ -11787,12 +12152,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 102 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 102 } ], "score": 0.8 @@ -11810,36 +12175,29 @@ ], "score": 0.85 }, - "props": [ - { - "name": "dashboardId", - "type": "any", - "default": null - }, - { - "name": "currentBranch", - "type": "any", - "default": "'main'" - } - ], "events": [ "change" ], "data_flow": [ { - "store": "t", - "type": "READS_FROM", - "line": 142 + "store": "props", + "type": "WRITES_TO", + "line": 25 }, { "store": "t", "type": "READS_FROM", - "line": 163 + "line": 145 }, { "store": "t", "type": "READS_FROM", - "line": 171 + "line": 166 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 174 } ] }, @@ -11848,7 +12206,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 300, + "end_line": 303, "tags": { "SEMANTICS": "git, manager, dashboard, version_control, initialization", "PURPOSE": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Git-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.", @@ -11861,8 +12219,8 @@ "name": "checkStatus", "type": "Function", "tier": "STANDARD", - "start_line": 51, - "end_line": 72, + "start_line": 54, + "end_line": 75, "tags": { "PURPOSE": "\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043b\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.", "PRE": "Component is mounted and has dashboardId.", @@ -11876,12 +12234,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 51 + "line_number": 54 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 51 + "line_number": 54 } ], "score": 0.8 @@ -11891,8 +12249,8 @@ "name": "handleInit", "type": "Function", "tier": "STANDARD", - "start_line": 74, - "end_line": 96, + "start_line": 77, + "end_line": 99, "tags": { "PURPOSE": "\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.", "PRE": "selectedConfigId and remoteUrl are provided.", @@ -11906,12 +12264,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 74 + "line_number": 77 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 74 + "line_number": 77 } ], "score": 0.8 @@ -11921,8 +12279,8 @@ "name": "handleSync", "type": "Function", "tier": "STANDARD", - "start_line": 98, - "end_line": 117, + "start_line": 101, + "end_line": 120, "tags": { "PURPOSE": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 Superset \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u043c.", "PRE": "Repository is initialized.", @@ -11936,12 +12294,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 101 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 101 } ], "score": 0.8 @@ -11951,8 +12309,8 @@ "name": "handlePush", "type": "Function", "tier": "STANDARD", - "start_line": 119, - "end_line": 136, + "start_line": 122, + "end_line": 139, "tags": { "PURPOSE": "Pushes local commits to the remote repository.", "PRE": "Repository is initialized and has commits.", @@ -11966,12 +12324,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 119 + "line_number": 122 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 119 + "line_number": 122 } ], "score": 0.8 @@ -11981,8 +12339,8 @@ "name": "handlePull", "type": "Function", "tier": "STANDARD", - "start_line": 138, - "end_line": 155, + "start_line": 141, + "end_line": 158, "tags": { "PURPOSE": "Pulls changes from the remote repository.", "PRE": "Repository is initialized.", @@ -11996,12 +12354,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 138 + "line_number": 141 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 138 + "line_number": 141 } ], "score": 0.8 @@ -12019,88 +12377,76 @@ ], "score": 0.85 }, - "props": [ - { - "name": "dashboardId", - "type": "any", - "default": null - }, - { - "name": "dashboardTitle", - "type": "any", - "default": "\"\"" - }, - { - "name": "show", - "type": "any", - "default": "false" - } - ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 164 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 183 + "line": 33 }, { "store": "t", "type": "WRITES_TO", - "line": 188 + "line": 167 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 186 }, { "store": "t", "type": "WRITES_TO", - "line": 197 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 208 + "line": 191 }, { "store": "t", "type": "WRITES_TO", - "line": 218 + "line": 200 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 211 }, { "store": "t", "type": "WRITES_TO", - "line": 223 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 230 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 237 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 246 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 254 + "line": 221 }, { "store": "t", "type": "WRITES_TO", - "line": 260 + "line": 226 }, { "store": "t", "type": "READS_FROM", - "line": 267 + "line": 233 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 240 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 249 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 257 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 263 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 270 } ] }, @@ -12109,7 +12455,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 79, + "end_line": 82, "tags": { "TIER": "STANDARD", "PURPOSE": "UI component for previewing generated dataset documentation before saving.", @@ -12130,28 +12476,11 @@ ], "score": 0.85 }, - "props": [ - { - "name": "documentation", - "type": "any", - "default": "null" - }, - { - "name": "onSave", - "type": "any", - "default": "async (doc) => {}" - }, - { - "name": "onCancel", - "type": "any", - "default": "() => {}" - } - ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 34 + "line": 17 }, { "store": "t", @@ -12165,18 +12494,23 @@ }, { "store": "t", - "type": "READS_FROM", - "line": 65 + "type": "WRITES_TO", + "line": 43 }, { "store": "t", "type": "READS_FROM", - "line": 72 + "line": 68 }, { "store": "t", "type": "READS_FROM", - "line": 72 + "line": 75 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 75 } ] }, @@ -12185,7 +12519,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 79, + "end_line": 82, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/llm/DocPreview.svelte", "TIER": "TRIVIAL", @@ -12197,8 +12531,8 @@ "name": "handleSave", "type": "Function", "tier": "TRIVIAL", - "start_line": 19, - "end_line": 19, + "start_line": 22, + "end_line": 22, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12223,7 +12557,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 226, + "end_line": 312, "tags": { "TIER": "STANDARD", "PURPOSE": "UI form for managing LLM provider configurations.", @@ -12244,123 +12578,116 @@ ], "score": 0.85 }, - "props": [ - { - "name": "providers", - "type": "any", - "default": "[]" - }, - { - "name": "onSave", - "type": "any", - "default": "() => {}" - } - ], "data_flow": [ { - "store": "t", + "store": "props", "type": "WRITES_TO", - "line": 55 + "line": 15 }, { "store": "t", "type": "WRITES_TO", - "line": 62 + "line": 54 }, { "store": "t", "type": "WRITES_TO", - "line": 64 + "line": 63 }, { "store": "t", - "type": "WRITES_TO", + "type": "READS_FROM", "line": 67 }, + { + "store": "t", + "type": "READS_FROM", + "line": 76 + }, { "store": "t", "type": "WRITES_TO", - "line": 110 + "line": 122 }, { "store": "t", "type": "READS_FROM", - "line": 115 + "line": 130 }, { "store": "t", - "type": "WRITES_TO", - "line": 122 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 122 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 126 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 131 - }, - { - "store": "t", - "type": "WRITES_TO", + "type": "READS_FROM", "line": 140 }, { "store": "t", - "type": "WRITES_TO", - "line": 145 + "type": "READS_FROM", + "line": 140 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 148 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 163 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 180 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 194 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 209 }, { "store": "t", "type": "WRITES_TO", - "line": 150 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 156 + "line": 229 }, { "store": "t", "type": "READS_FROM", - "line": 171 + "line": 249 }, { "store": "t", "type": "READS_FROM", - "line": 178 + "line": 256 }, { "store": "t", "type": "READS_FROM", - "line": 178 + "line": 256 }, { "store": "t", "type": "READS_FROM", - "line": 184 + "line": 262 }, { "store": "t", "type": "READS_FROM", - "line": 198 + "line": 280 }, { "store": "t", "type": "READS_FROM", - "line": 208 + "line": 292 }, { "store": "t", "type": "READS_FROM", - "line": 220 + "line": 306 } ] }, @@ -12369,7 +12696,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 226, + "end_line": 312, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/llm/ProviderConfig.svelte", "TIER": "TRIVIAL", @@ -12381,8 +12708,8 @@ "name": "resetForm", "type": "Function", "tier": "TRIVIAL", - "start_line": 33, - "end_line": 33, + "start_line": 32, + "end_line": 32, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12399,8 +12726,8 @@ "name": "handleEdit", "type": "Function", "tier": "TRIVIAL", - "start_line": 46, - "end_line": 46, + "start_line": 45, + "end_line": 45, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12417,8 +12744,8 @@ "name": "testConnection", "type": "Function", "tier": "TRIVIAL", - "start_line": 52, - "end_line": 52, + "start_line": 51, + "end_line": 51, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12435,8 +12762,8 @@ "name": "handleSubmit", "type": "Function", "tier": "TRIVIAL", - "start_line": 73, - "end_line": 73, + "start_line": 83, + "end_line": 83, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12453,8 +12780,8 @@ "name": "toggleActive", "type": "Function", "tier": "TRIVIAL", - "start_line": 95, - "end_line": 95, + "start_line": 107, + "end_line": 107, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12479,7 +12806,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 75, + "end_line": 78, "tags": { "PURPOSE": "Auto-generated module for frontend/src/components/llm/ValidationReport.svelte", "TIER": "TRIVIAL", @@ -12491,8 +12818,8 @@ "name": "getStatusColor", "type": "Function", "tier": "TRIVIAL", - "start_line": 8, - "end_line": 8, + "start_line": 11, + "end_line": 11, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -12611,7 +12938,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 269, + "end_line": 273, "tags": { "TIER": "CRITICAL", "SEMANTICS": "app, main, entrypoint, fastapi", @@ -12743,19 +13070,54 @@ "type": "Mount", "tier": "STANDARD", "start_line": 237, - "end_line": 268, + "end_line": 272, "tags": { "SEMANTICS": "static, frontend, spa", "PURPOSE": "Mounts the frontend build directory to serve static assets." }, "relations": [], "children": [ + { + "name": "serve_spa", + "type": "Function", + "tier": "STANDARD", + "start_line": 244, + "end_line": 261, + "tags": { + "PURPOSE": "Serves the SPA frontend for any path not matched by API routes.", + "PRE": "frontend_path exists.", + "POST": "Returns the requested file or index.html." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 244 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 244 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 244 + } + ], + "score": 0.7 + } + }, { "name": "read_root", "type": "Function", "tier": "STANDARD", - "start_line": 259, - "end_line": 267, + "start_line": 263, + "end_line": 271, "tags": { "PURPOSE": "A simple root endpoint to confirm that the API is running when frontend is missing.", "PRE": "None.", @@ -12811,24 +13173,6 @@ "issues": [], "score": 1.0 } - }, - { - "name": "serve_spa", - "type": "Function", - "tier": "TRIVIAL", - "start_line": 245, - "end_line": 245, - "tags": { - "PURPOSE": "Auto-detected function (orphan)", - "TIER": "TRIVIAL" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } } ], "compliance": { @@ -25807,7 +26151,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 21, "tags": { "TIER": "STANDARD", "SEMANTICS": "services, package, init", @@ -25842,15 +26186,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.src.services:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 1.0 } }, {