diff --git a/.ai/MODULE_MAP.md b/.ai/MODULE_MAP.md index 3cc0dcc9..2af7d8ba 100644 --- a/.ai/MODULE_MAP.md +++ b/.ai/MODULE_MAP.md @@ -2,12 +2,12 @@ > High-level module structure for AI Context. Generated automatically. -**Generated:** 2026-03-06T15:13:36.187520 +**Generated:** 2026-03-09T13:33:22.105511 ## Summary -- **Total Modules:** 90 -- **Total Entities:** 2508 +- **Total Modules:** 93 +- **Total Entities:** 2649 ## Module Hierarchy @@ -54,9 +54,9 @@ ### πŸ“ `routes/` - πŸ—οΈ **Layers:** API, UI (API) - - πŸ“Š **Tiers:** CRITICAL: 12, STANDARD: 240, TRIVIAL: 8 + - πŸ“Š **Tiers:** CRITICAL: 12, STANDARD: 254, TRIVIAL: 8 - πŸ“„ **Files:** 19 - - πŸ“¦ **Entities:** 260 + - πŸ“¦ **Entities:** 274 **Key Entities:** @@ -92,9 +92,9 @@ ### πŸ“ `__tests__/` - πŸ—οΈ **Layers:** API, Domain, Domain (Tests), UI (API Tests), Unknown - - πŸ“Š **Tiers:** STANDARD: 81, TRIVIAL: 134 - - πŸ“„ **Files:** 13 - - πŸ“¦ **Entities:** 215 + - πŸ“Š **Tiers:** STANDARD: 88, TRIVIAL: 187 + - πŸ“„ **Files:** 14 + - πŸ“¦ **Entities:** 275 **Key Entities:** @@ -126,9 +126,9 @@ ### πŸ“ `core/` - πŸ—οΈ **Layers:** Core - - πŸ“Š **Tiers:** CRITICAL: 45, STANDARD: 94, TRIVIAL: 8 + - πŸ“Š **Tiers:** CRITICAL: 47, STANDARD: 94, TRIVIAL: 8 - πŸ“„ **Files:** 11 - - πŸ“¦ **Entities:** 147 + - πŸ“¦ **Entities:** 149 **Key Entities:** @@ -509,9 +509,9 @@ ### πŸ“ `schemas/` - πŸ—οΈ **Layers:** API - - πŸ“Š **Tiers:** CRITICAL: 10, STANDARD: 7, TRIVIAL: 3 + - πŸ“Š **Tiers:** CRITICAL: 10, STANDARD: 9, TRIVIAL: 3 - πŸ“„ **Files:** 2 - - πŸ“¦ **Entities:** 20 + - πŸ“¦ **Entities:** 22 **Key Entities:** @@ -521,20 +521,20 @@ - Represents an AD Group to Role mapping in API responses. - β„‚ **PermissionSchema** (Class) `[TRIVIAL]` - Represents a permission in API responses. + - β„‚ **ProfilePermissionState** (Class) + - Represents one permission badge state for profile read-only ... - β„‚ **ProfilePreference** (Class) - Represents persisted profile preference for a single authent... - β„‚ **ProfilePreferenceResponse** (Class) - Response envelope for profile preference read/update endpoin... - β„‚ **ProfilePreferenceUpdateRequest** (Class) - - Request payload for updating current user's dashboard filter... + - Request payload for updating current user's profile settings... + - β„‚ **ProfileSecuritySummary** (Class) + - Read-only security and access snapshot for current user. - β„‚ **RoleCreate** (Class) `[CRITICAL]` - Schema for creating a new role. - β„‚ **RoleSchema** (Class) `[CRITICAL]` - Represents a role in API responses. - - β„‚ **RoleUpdate** (Class) `[CRITICAL]` - - Schema for updating an existing role. - - β„‚ **SupersetAccountCandidate** (Class) - - Canonical account candidate projected from Superset users pa... **Dependencies:** @@ -543,9 +543,9 @@ ### πŸ“ `scripts/` - πŸ—οΈ **Layers:** Scripts, UI, Unknown - - πŸ“Š **Tiers:** CRITICAL: 2, STANDARD: 27, TRIVIAL: 14 + - πŸ“Š **Tiers:** CRITICAL: 2, STANDARD: 27, TRIVIAL: 17 - πŸ“„ **Files:** 7 - - πŸ“¦ **Entities:** 43 + - πŸ“¦ **Entities:** 46 **Key Entities:** @@ -574,9 +574,9 @@ ### πŸ“ `services/` - πŸ—οΈ **Layers:** Core, Domain, Service - - πŸ“Š **Tiers:** CRITICAL: 9, STANDARD: 104, TRIVIAL: 7 + - πŸ“Š **Tiers:** CRITICAL: 9, STANDARD: 118, TRIVIAL: 15 - πŸ“„ **Files:** 9 - - πŸ“¦ **Entities:** 120 + - πŸ“¦ **Entities:** 142 **Key Entities:** @@ -773,9 +773,9 @@ ### πŸ“ `core/` - πŸ—οΈ **Layers:** Domain, Unknown - - πŸ“Š **Tiers:** STANDARD: 6, TRIVIAL: 45 + - πŸ“Š **Tiers:** STANDARD: 6, TRIVIAL: 46 - πŸ“„ **Files:** 4 - - πŸ“¦ **Entities:** 51 + - πŸ“¦ **Entities:** 52 **Key Entities:** @@ -870,10 +870,10 @@ ### πŸ“ `git/` - - πŸ—οΈ **Layers:** Component - - πŸ“Š **Tiers:** STANDARD: 46 + - πŸ—οΈ **Layers:** Component, Unknown + - πŸ“Š **Tiers:** STANDARD: 47, TRIVIAL: 12 - πŸ“„ **Files:** 6 - - πŸ“¦ **Entities:** 46 + - πŸ“¦ **Entities:** 59 **Key Entities:** @@ -889,6 +889,20 @@ - Modal for deploying a dashboard to a target environment. - 🧩 **GitManager** (Component) - Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ UI управлСния Git с фокусом Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π°Π½Π°... + - πŸ“¦ **GitManager** (Module) `[TRIVIAL]` + - Auto-generated module for frontend/src/components/git/GitMan... + + ### πŸ“ `__tests__/` + + - πŸ—οΈ **Layers:** UI Tests + - πŸ“Š **Tiers:** STANDARD: 1 + - πŸ“„ **Files:** 1 + - πŸ“¦ **Entities:** 1 + + **Key Entities:** + + - πŸ“¦ **frontend.src.components.git.__tests__.git_manager_unfinished_merge_integration** (Module) + - Protect unresolved-merge dialog contract in GitManager pull ... ### πŸ“ `llm/` @@ -1090,9 +1104,9 @@ ### πŸ“ `layout/` - πŸ—οΈ **Layers:** UI, Unknown - - πŸ“Š **Tiers:** STANDARD: 11, TRIVIAL: 47 + - πŸ“Š **Tiers:** STANDARD: 11, TRIVIAL: 48 - πŸ“„ **Files:** 5 - - πŸ“¦ **Entities:** 58 + - πŸ“¦ **Entities:** 59 **Key Entities:** @@ -1221,9 +1235,9 @@ ### πŸ“ `stores/` - πŸ—οΈ **Layers:** UI, UI-State, Unknown - - πŸ“Š **Tiers:** CRITICAL: 1, STANDARD: 8, TRIVIAL: 21 + - πŸ“Š **Tiers:** CRITICAL: 1, STANDARD: 8, TRIVIAL: 25 - πŸ“„ **Files:** 5 - - πŸ“¦ **Entities:** 30 + - πŸ“¦ **Entities:** 34 **Key Entities:** @@ -1339,13 +1353,15 @@ ### πŸ“ `routes/` - - πŸ—οΈ **Layers:** Infra, UI - - πŸ“Š **Tiers:** CRITICAL: 1, STANDARD: 3, TRIVIAL: 1 + - πŸ—οΈ **Layers:** Infra, UI, Unknown + - πŸ“Š **Tiers:** CRITICAL: 1, STANDARD: 3, TRIVIAL: 5 - πŸ“„ **Files:** 5 - - πŸ“¦ **Entities:** 5 + - πŸ“¦ **Entities:** 9 **Key Entities:** + - πŸ“¦ **+page** (Module) `[TRIVIAL]` + - Auto-generated module for frontend/src/routes/+page.svelte - πŸ“¦ **RootLayoutConfig** (Module) `[TRIVIAL]` - Root layout configuration (SPA mode) - πŸ“¦ **layout** (Module) @@ -1513,9 +1529,9 @@ ### πŸ“ `profile/` - πŸ—οΈ **Layers:** Unknown - - πŸ“Š **Tiers:** TRIVIAL: 9 + - πŸ“Š **Tiers:** TRIVIAL: 16 - πŸ“„ **Files:** 1 - - πŸ“¦ **Entities:** 9 + - πŸ“¦ **Entities:** 16 **Key Entities:** @@ -1600,15 +1616,26 @@ ### πŸ“ `git/` - πŸ—οΈ **Layers:** Page - - πŸ“Š **Tiers:** STANDARD: 8 + - πŸ“Š **Tiers:** STANDARD: 10 - πŸ“„ **Files:** 1 - - πŸ“¦ **Entities:** 8 + - πŸ“¦ **Entities:** 10 **Key Entities:** - 🧩 **GitSettingsPage** (Component) - Manage Git server configurations for dashboard versioning. + ### πŸ“ `__tests__/` + + - πŸ“Š **Tiers:** STANDARD: 1 + - πŸ“„ **Files:** 1 + - πŸ“¦ **Entities:** 1 + + **Key Entities:** + + - πŸ“¦ **frontend.src.routes.settings.git.__tests__.git_settings_page_ux_test** (Module) + - Test UX states and transitions for the Git Settings page + ### πŸ“ `storage/` - πŸ—οΈ **Layers:** Page @@ -1678,6 +1705,17 @@ - πŸ”— DEPENDS_ON -> frontend.src.lib.api + ### πŸ“ `__tests__/` + + - πŸ“Š **Tiers:** STANDARD: 1 + - πŸ“„ **Files:** 1 + - πŸ“¦ **Entities:** 1 + + **Key Entities:** + + - πŸ“¦ **frontend.src.services.__tests__.gitService_test** (Module) + - API client tests ensuring correct endpoints are called per c... + ### πŸ“ `types/` - πŸ—οΈ **Layers:** Domain @@ -1693,9 +1731,9 @@ ### πŸ“ `root/` - πŸ—οΈ **Layers:** DevOps/Tooling, Unknown -- πŸ“Š **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 9 -- πŸ“„ **Files:** 2 -- πŸ“¦ **Entities:** 37 +- πŸ“Š **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 12 +- πŸ“„ **Files:** 3 +- πŸ“¦ **Entities:** 40 **Key Entities:** @@ -1713,6 +1751,8 @@ - Auto-generated module for check_test_data.py - πŸ“¦ **generate_semantic_map** (Module) - Scans the codebase to generate a Semantic Map, Module Map, a... + - πŸ“¦ **test_pat_retrieve** (Module) `[TRIVIAL]` + - Auto-generated module for test_pat_retrieve.py ## Cross-Module Dependencies @@ -1869,6 +1909,7 @@ graph TD scripts-->|TESTS|backend __tests__-->|VERIFIES|components __tests__-->|VERIFIES|components + __tests__-->|VERIFIES|components __tests__-->|TESTS|lib __tests__-->|VERIFIES|lib __tests__-->|TESTS|lib diff --git a/.ai/PROJECT_MAP.md b/.ai/PROJECT_MAP.md index e9d1b1ba..5b1264ef 100644 --- a/.ai/PROJECT_MAP.md +++ b/.ai/PROJECT_MAP.md @@ -84,6 +84,13 @@ - πŸ“ Flattens entity tree for easier grouping. - Ζ’ **to_dict** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **test_pat_retrieve** (`Module`) `[TRIVIAL]` + - πŸ“ Auto-generated module for test_pat_retrieve.py + - πŸ—οΈ Layer: Unknown + - Ζ’ **run** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **mock_test** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ“¦ **DashboardTypes** (`Module`) `[TRIVIAL]` - πŸ“ TypeScript interfaces for Dashboard entities - πŸ—οΈ Layer: Domain @@ -207,8 +214,16 @@ - πŸ“¦ **taskDrawer** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/lib/stores/taskDrawer.js - πŸ—οΈ Layer: Unknown + - Ζ’ **readAutoOpenTaskDrawerPreference** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **openDrawerForTask** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **setTaskDrawerAutoOpenPreference** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **getTaskDrawerAutoOpenPreference** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **openDrawerForTaskIfPreferred** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **openDrawer** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **closeDrawer** (`Function`) `[TRIVIAL]` @@ -570,6 +585,8 @@ - πŸ“ Auto-detected function (orphan) - Ζ’ **handleAssistantClick** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **hydrateTaskDrawerPreference** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **handleSearchFocus** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **clearSearchState** (`Function`) `[TRIVIAL]` @@ -692,9 +709,18 @@ - πŸ“ Root layout configuration (SPA mode) - πŸ—οΈ Layer: Infra - πŸ“¦ **HomePage** (`Page`) `[CRITICAL]` - - πŸ“ Redirect to Dashboard Hub as per UX requirements + - πŸ“ Redirect to preferred start page from profile settings with safe dashboards fallback. - πŸ—οΈ Layer: UI - - πŸ”’ Invariant: Always redirects to /dashboards + - πŸ”’ Invariant: Redirect target resolves to one of /dashboards, /datasets, /reports. +- πŸ“¦ **+page** (`Module`) `[TRIVIAL]` + - πŸ“ Auto-generated module for frontend/src/routes/+page.svelte + - πŸ—οΈ Layer: Unknown + - Ζ’ **normalizeStartPage** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **resolveStartPagePath** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **redirectToStartPage** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **load** (`Function`) - πŸ“ Loads initial plugin data for the dashboard. - πŸ“¦ **layout** (`Module`) @@ -1176,16 +1202,30 @@ - πŸ“¦ **+page** (`Module`) `[TRIVIAL]` - πŸ“ Auto-generated module for frontend/src/routes/profile/+page.svelte - πŸ—οΈ Layer: Unknown + - Ζ’ **createSecuritySummaryDefault** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **normalizeStartPage** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **normalizeDensity** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **parseValidationErrorsFromError** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **setSavedSnapshot** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **syncLocalUiPreferenceCaches** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **applyPreferenceResponse** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **loadPreference** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **loadLookupCandidates** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **handleSelectCandidate** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleGitTokenInput** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleClearGitToken** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - Ζ’ **handleEnvironmentChange** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **handleSave** (`Function`) `[TRIVIAL]` @@ -1306,6 +1346,10 @@ - πŸ“ Tests connection to a git server with current form data. - Ζ’ **handleSave** (`Function`) - πŸ“ Saves a new git configuration. + - Ζ’ **handleEdit** (`Function`) + - πŸ“ Populates the form with an existing config to edit. + - Ζ’ **resetForm** (`Function`) + - πŸ“ Resets the configuration form. - Ζ’ **handleDelete** (`Function`) - πŸ“ Deletes a git configuration by ID. - Ζ’ **loadGiteaRepos** (`Function`) @@ -1314,6 +1358,8 @@ - πŸ“ Creates new repository on selected Gitea server. - Ζ’ **handleDeleteGiteaRepo** (`Function`) - πŸ“ Deletes repository from selected Gitea server. +- πŸ“¦ **frontend.src.routes.settings.git.__tests__.git_settings_page_ux_test** (`Module`) + - πŸ“ Test UX states and transitions for the Git Settings page - 🧩 **GitDashboardPage** (`Component`) - πŸ“ Dashboard management page for Git integration. - πŸ—οΈ Layer: Page @@ -1429,6 +1475,8 @@ - πŸ“ Returns the URL for downloading a file. - Ζ’ **downloadFile** (`Function`) - πŸ“ Downloads a file using authenticated fetch and saves it in browser. +- πŸ“¦ **frontend.src.services.__tests__.gitService_test** (`Module`) + - πŸ“ API client tests ensuring correct endpoints are called per contract - 🧩 **DashboardGrid** (`Component`) - πŸ“ Displays a grid of dashboards with selection and pagination. - πŸ—οΈ Layer: Component @@ -1792,9 +1840,9 @@ - πŸ—οΈ Layer: Component - πŸ”’ Invariant: Cannot deploy without a selected environment. - ⚑ Events: deploy + - ➑️ WRITES_TO `bindable` - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `state` - - ➑️ WRITES_TO `derived` - πŸ“¦ **loadStatus** (`Watcher`) - Ζ’ **normalizeEnvStage** (`Function`) - πŸ“ Normalize environment stage with legacy production fallback. @@ -1809,6 +1857,7 @@ - πŸ—οΈ Layer: Component - πŸ”’ Invariant: User must resolve all conflicts before saving. - ⚑ Events: resolve + - ➑️ WRITES_TO `bindable` - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `state` - Ζ’ **resolve** (`Function`) @@ -1832,9 +1881,9 @@ - πŸ“ UI для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈ создания Π²Π΅Ρ‚ΠΎΠΊ Git. - πŸ—οΈ Layer: Component - ⚑ Events: change + - ➑️ WRITES_TO `bindable` - ➑️ WRITES_TO `props` - ➑️ WRITES_TO `state` - - ⬅️ READS_FROM `t` - Ζ’ **onMount** (`Function`) - πŸ“ Load branches when component is mounted. - Ζ’ **loadBranches** (`Function`) @@ -1887,6 +1936,8 @@ - πŸ“ Resolve default git config for current session. - Ζ’ **resolvePushProviderLabel** (`Function`) - πŸ“ Resolve lower-case provider label for auto-push checkbox. + - Ζ’ **extractHttpHost** (`Function`) + - πŸ“ Extract comparable host[:port] from URL string. - Ζ’ **buildSuggestedRepoName** (`Function`) - πŸ“ Build deterministic repository name from dashboard title/id. - Ζ’ **handleCreateRemoteRepo** (`Function`) @@ -1897,6 +1948,34 @@ - πŸ“ Close git manager modal. - Ζ’ **handleBackdropClick** (`Function`) - πŸ“ Close modal on backdrop click. +- πŸ“¦ **GitManager** (`Module`) `[TRIVIAL]` + - πŸ“ Auto-generated module for frontend/src/components/git/GitManager.svelte + - πŸ—οΈ Layer: Unknown + - Ζ’ **tryParseJsonObject** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **extractUnfinishedMergeContext** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **openUnfinishedMergeDialogFromError** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **loadMergeRecoveryState** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **closeUnfinishedMergeDialog** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleOpenConflictResolver** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleResolveConflicts** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleAbortUnfinishedMerge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleContinueUnfinishedMerge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **getUnfinishedMergeCommandsText** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **handleCopyUnfinishedMergeCommands** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **frontend.src.components.git.__tests__.git_manager_unfinished_merge_integration** (`Module`) + - πŸ“ Protect unresolved-merge dialog contract in GitManager pull flow. + - πŸ—οΈ Layer: UI Tests - 🧩 **DocPreview** (`Component`) - πŸ“ UI component for previewing generated dataset documentation before saving. - πŸ—οΈ Layer: UI @@ -2039,7 +2118,13 @@ - πŸ“ Execute compliance orchestrator run and update UI state. - Ζ’ **__init__** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - - Ζ’ **__init__** (`Function`) `[TRIVIAL]` + - Ζ’ **_build_repository** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_bootstrap_demo_repository** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_bootstrap_real_repository** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_resolve_candidate_id** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **draw_header** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) @@ -2132,14 +2217,18 @@ - β„‚ **User** (`Class`) `[CRITICAL]` - πŸ“ Schema for user data in API responses. - πŸ“¦ **backend.src.schemas.profile** (`Module`) - - πŸ“ Defines API schemas for profile preference persistence and Superset account lookup flows. + - πŸ“ Defines API schemas for profile preference persistence, security read-only snapshot, and Superset account lookup. - πŸ—οΈ Layer: API - - πŸ”’ Invariant: Schema shapes stay stable for profile UI states and dashboards filter metadata. + - πŸ”’ Invariant: Schema shapes stay stable for profile UI states and backend preference contracts. - πŸ”— DEPENDS_ON -> `pydantic` + - β„‚ **ProfilePermissionState** (`Class`) + - πŸ“ Represents one permission badge state for profile read-only security view. + - β„‚ **ProfileSecuritySummary** (`Class`) + - πŸ“ Read-only security and access snapshot for current user. - β„‚ **ProfilePreference** (`Class`) - πŸ“ Represents persisted profile preference for a single authenticated user. - β„‚ **ProfilePreferenceUpdateRequest** (`Class`) - - πŸ“ Request payload for updating current user's dashboard filter preference. + - πŸ“ Request payload for updating current user's profile settings. - β„‚ **ProfilePreferenceResponse** (`Class`) - πŸ“ Response envelope for profile preference read/update endpoints. - β„‚ **SupersetAccountLookupRequest** (`Class`) @@ -2348,6 +2437,10 @@ - πŸ“ A session factory for the tasks execution database. - β„‚ **AuthSessionLocal** (`Class`) `[TRIVIAL]` - πŸ“ A session factory for the authentication database. + - Ζ’ **_ensure_user_dashboard_preferences_columns** (`Function`) `[CRITICAL]` + - πŸ“ Applies additive schema upgrades for user_dashboard_preferences table. + - Ζ’ **_ensure_git_server_configs_columns** (`Function`) `[CRITICAL]` + - πŸ“ Applies additive schema upgrades for git_server_configs table. - Ζ’ **init_db** (`Function`) `[CRITICAL]` - πŸ“ Initializes the database by creating all tables. - Ζ’ **get_db** (`Function`) `[CRITICAL]` @@ -3075,10 +3168,18 @@ - πŸ“ Resolve dashboard ID from slug-or-id reference for Git routes. - Ζ’ **_resolve_repo_key_from_ref** (`Function`) - πŸ“ Resolve repository folder key with slug-first strategy and deterministic fallback. + - Ζ’ **_sanitize_optional_identity_value** (`Function`) + - πŸ“ Normalize optional identity value into trimmed string or None. + - Ζ’ **_resolve_current_user_git_identity** (`Function`) + - πŸ“ Resolve configured Git username/email from current user's profile preferences. + - Ζ’ **_apply_git_identity_from_profile** (`Function`) + - πŸ“ Apply user-scoped Git identity to repository-local config before write/pull operations. - Ζ’ **get_git_configs** (`Function`) - πŸ“ List all configured Git servers. - Ζ’ **create_git_config** (`Function`) - πŸ“ Register a new Git server configuration. + - Ζ’ **update_git_config** (`Function`) + - πŸ“ Update an existing Git server configuration. - Ζ’ **delete_git_config** (`Function`) - πŸ“ Remove a Git server configuration. - Ζ’ **test_git_config** (`Function`) @@ -3109,6 +3210,16 @@ - πŸ“ Push local commits to the remote repository. - Ζ’ **pull_changes** (`Function`) - πŸ“ Pull changes from the remote repository. + - Ζ’ **get_merge_status** (`Function`) + - πŸ“ Return unfinished-merge status for repository (web-only recovery support). + - Ζ’ **get_merge_conflicts** (`Function`) + - πŸ“ Return conflicted files with mine/theirs previews for web conflict resolver. + - Ζ’ **resolve_merge_conflicts** (`Function`) + - πŸ“ Apply mine/theirs/manual conflict resolutions from WebUI and stage files. + - Ζ’ **abort_merge** (`Function`) + - πŸ“ Abort unfinished merge from WebUI flow. + - Ζ’ **continue_merge** (`Function`) + - πŸ“ Finalize unfinished merge from WebUI flow. - Ζ’ **sync_dashboard** (`Function`) - πŸ“ Sync dashboard state from Superset to Git using the GitPlugin. - Ζ’ **promote_dashboard** (`Function`) @@ -3279,6 +3390,8 @@ - πŸ”— DEPENDS_ON -> `backend.src.models.git` - β„‚ **GitServerConfigBase** (`Class`) `[TRIVIAL]` - πŸ“ Base schema for Git server configuration attributes. + - β„‚ **GitServerConfigUpdate** (`Class`) + - πŸ“ Schema for updating an existing Git server configuration. - β„‚ **GitServerConfigCreate** (`Class`) - πŸ“ Schema for creating a new Git server configuration. - β„‚ **GitServerConfigSchema** (`Class`) @@ -3297,6 +3410,14 @@ - πŸ“ Schema for staging and committing changes. - β„‚ **ConflictResolution** (`Class`) - πŸ“ Schema for resolving merge conflicts. + - β„‚ **MergeStatusSchema** (`Class`) + - πŸ“ Schema representing unfinished merge status for repository. + - β„‚ **MergeConflictFileSchema** (`Class`) + - πŸ“ Schema describing one conflicted file with optional side snapshots. + - β„‚ **MergeResolveRequest** (`Class`) + - πŸ“ Request schema for resolving one or multiple merge conflicts. + - β„‚ **MergeContinueRequest** (`Class`) + - πŸ“ Request schema for finishing merge with optional explicit commit message. - β„‚ **DeploymentEnvironmentSchema** (`Class`) - πŸ“ Schema for representing a target deployment environment. - β„‚ **DeployRequest** (`Class`) @@ -3636,6 +3757,18 @@ - πŸ“ Ensure batch endpoint marks failed items as ERROR without failing entire request. - Ζ’ **test_get_repository_status_batch_deduplicates_and_truncates_ids** (`Function`) - πŸ“ Ensure batch endpoint protects server from oversized payloads. + - Ζ’ **test_commit_changes_applies_profile_identity_before_commit** (`Function`) + - πŸ“ Ensure commit route configures repository identity from profile preferences before commit call. + - Ζ’ **test_pull_changes_applies_profile_identity_before_pull** (`Function`) + - πŸ“ Ensure pull route configures repository identity from profile preferences before pull call. + - Ζ’ **test_get_merge_status_returns_service_payload** (`Function`) + - πŸ“ Ensure merge status route returns service payload as-is. + - Ζ’ **test_resolve_merge_conflicts_passes_resolution_items_to_service** (`Function`) + - πŸ“ Ensure merge resolve route forwards parsed resolutions to service. + - Ζ’ **test_abort_merge_calls_service_and_returns_result** (`Function`) + - πŸ“ Ensure abort route delegates to service. + - Ζ’ **test_continue_merge_passes_message_and_returns_commit** (`Function`) + - πŸ“ Ensure continue route passes commit message to service. - Ζ’ **_get_repo_path** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) - Ζ’ **get_status** (`Function`) `[TRIVIAL]` @@ -3662,6 +3795,40 @@ - πŸ“ Auto-detected function (orphan) - Ζ’ **get_status** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **__init__** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **configure_identity** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **commit_changes** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **filter** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **first** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **query** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **__init__** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **configure_identity** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **pull_changes** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **filter** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **first** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **query** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **get_merge_status** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **resolve_merge_conflicts** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **dict** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **abort_merge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **continue_merge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ“¦ **backend.tests.test_reports_openapi_conformance** (`Module`) - πŸ“ Validate implemented reports payload shape against OpenAPI-required top-level contract fields. - πŸ—οΈ Layer: Domain (Tests) @@ -3858,6 +4025,80 @@ - πŸ“ Auto-detected function (orphan) - Ζ’ **rollback** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) +- πŸ“¦ **backend.src.api.routes.__tests__.test_git_api** (`Module`) + - πŸ“ API tests for Git configurations and repository operations. + - Ζ’ **__init__** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **query** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **filter** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **first** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **all** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **add** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **delete** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **commit** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **refresh** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_get_git_configs_masks_pat** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_create_git_config_persists_config** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_update_git_config_modifies_record** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **query** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **filter** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **first** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **commit** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **refresh** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_update_git_config_raises_404_if_not_found** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_delete_git_config_removes_record** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **query** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **filter** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **first** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **delete** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **commit** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_test_git_config_validates_connection_successfully** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_connection** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_test_git_config_fails_validation** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_connection** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_list_gitea_repositories_returns_payload** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **list_gitea_repositories** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_list_gitea_repositories_rejects_non_gitea** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_create_remote_repository_creates_provider_repo** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **create_gitlab_repository** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_init_repository_initializes_and_saves_binding** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **init_repo** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_get_repo_path** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ“¦ **backend.src.api.routes.__tests__.test_assistant_api** (`Module`) - πŸ“ Validate assistant API endpoint logic via direct async handler invocation. - πŸ—οΈ Layer: UI (API Tests) @@ -4201,9 +4442,9 @@ - πŸ“ Maps an Active Directory group to a local System Role. - πŸ”— DEPENDS_ON -> `Role` - πŸ“¦ **backend.src.models.profile** (`Module`) - - πŸ“ Defines persistent per-user dashboard filter preferences. + - πŸ“ Defines persistent per-user profile settings for dashboard filter, Git identity/token, and UX preferences. - πŸ—οΈ Layer: Domain - - πŸ”’ Invariant: Exactly one preference row exists per user_id. + - πŸ”’ Invariant: Sensitive Git token is stored encrypted and never returned in plaintext. - πŸ”— DEPENDS_ON -> `backend.src.models.auth` - β„‚ **UserDashboardPreference** (`Class`) - πŸ“ Stores Superset username binding and default "my dashboards" toggle for one authenticated user. @@ -4318,6 +4559,24 @@ - πŸ“ Query Superset users in selected environment and project canonical account candidates. - Ζ’ **matches_dashboard_actor** (`Function`) - πŸ“ Apply trim+case-insensitive actor match across owners OR modified_by. + - Ζ’ **_build_security_summary** (`Function`) + - πŸ“ Build read-only security snapshot with role and permission badges. + - Ζ’ **_collect_user_permission_pairs** (`Function`) + - πŸ“ Collect effective permission tuples from current user's roles. + - Ζ’ **_format_permission_key** (`Function`) + - πŸ“ Convert normalized permission pair to compact UI key. + - Ζ’ **_to_preference_payload** (`Function`) + - πŸ“ Map ORM preference row to API DTO with token metadata. + - Ζ’ **_mask_secret_value** (`Function`) + - πŸ“ Build a safe display value for sensitive secrets. + - Ζ’ **_sanitize_text** (`Function`) + - πŸ“ Normalize optional text into trimmed form or None. + - Ζ’ **_sanitize_secret** (`Function`) + - πŸ“ Normalize secret input into trimmed form or None. + - Ζ’ **_normalize_start_page** (`Function`) + - πŸ“ Normalize supported start page aliases to canonical values. + - Ζ’ **_normalize_density** (`Function`) + - πŸ“ Normalize supported density aliases to canonical values. - Ζ’ **_resolve_environment** (`Function`) - πŸ“ Resolve environment model from configured environments by id. - Ζ’ **_get_preference_row** (`Function`) @@ -4504,6 +4763,8 @@ - πŸ“ Remove local repository and DB binding for a dashboard. - Ζ’ **get_repo** (`Function`) - πŸ“ Get Repo object for a dashboard. + - Ζ’ **configure_identity** (`Function`) + - πŸ“ Configure repository-local Git committer identity for user-scoped operations. - Ζ’ **list_branches** (`Function`) - πŸ“ List all branches for a dashboard's repository. - Ζ’ **create_branch** (`Function`) @@ -4512,6 +4773,14 @@ - πŸ“ Switch to a specific branch. - Ζ’ **commit_changes** (`Function`) - πŸ“ Stage and commit changes. + - Ζ’ **_extract_http_host** (`Function`) + - πŸ“ Extract normalized host[:port] from HTTP(S) URL. + - Ζ’ **_strip_url_credentials** (`Function`) + - πŸ“ Remove credentials from URL while preserving scheme/host/path. + - Ζ’ **_replace_host_in_url** (`Function`) + - πŸ“ Replace source URL host with host from configured server URL. + - Ζ’ **_align_origin_host_with_config** (`Function`) + - πŸ“ Auto-align local origin host to configured Git server host when they drift. - Ζ’ **push_changes** (`Function`) - πŸ“ Push local commits to remote. - Ζ’ **pull_changes** (`Function`) @@ -4558,6 +4827,22 @@ - πŸ“ Create pull request in GitHub or GitHub Enterprise. - Ζ’ **create_gitlab_merge_request** (`Function`) - πŸ“ Create merge request in GitLab. + - Ζ’ **_read_blob_text** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_get_unmerged_file_paths** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **_build_unfinished_merge_payload** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **get_merge_status** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **get_merge_conflicts** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **resolve_merge_conflicts** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **abort_merge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) + - Ζ’ **continue_merge** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ“¦ **backend.src.services.mapping_service** (`Module`) - πŸ“ Orchestrates database fetching and fuzzy matching suggestions. - πŸ—οΈ Layer: Service @@ -5757,6 +6042,8 @@ - πŸ“ Auto-detected function (orphan) - Ζ’ **remote** (`Function`) `[TRIVIAL]` - πŸ“ Auto-detected function (orphan) + - Ζ’ **test_git_service_configure_identity_updates_repo_local_config** (`Function`) `[TRIVIAL]` + - πŸ“ Auto-detected function (orphan) - πŸ“¦ **backend.tests.core.test_migration_engine** (`Module`) - πŸ“ Unit tests for MigrationEngine's cross-filter patching algorithms. - πŸ—οΈ Layer: Domain diff --git a/artifacts.json b/artifacts.json new file mode 100644 index 00000000..226059dc --- /dev/null +++ b/artifacts.json @@ -0,0 +1,14 @@ +[ + { + "path": "src/main.py", + "category": "core" + }, + { + "path": "src/api/routes/clean_release.py", + "category": "core" + }, + { + "path": "docs/installation.md", + "category": "docs" + } +] diff --git a/backend/src/scripts/clean_release_tui.py b/backend/src/scripts/clean_release_tui.py index cd7b9b0e..b3cc7c99 100644 --- a/backend/src/scripts/clean_release_tui.py +++ b/backend/src/scripts/clean_release_tui.py @@ -8,6 +8,7 @@ # @INVARIANT: TUI must provide a headless fallback for non-TTY environments. import curses +import json import os import sys import time @@ -32,51 +33,14 @@ from backend.src.models.clean_release import ( ReleaseCandidate, ResourceSourceEntry, ResourceSourceRegistry, + RegistryStatus, + ReleaseCandidateStatus, ) from backend.src.services.clean_release.compliance_orchestrator import CleanComplianceOrchestrator +from backend.src.services.clean_release.preparation_service import prepare_candidate from backend.src.services.clean_release.repository import CleanReleaseRepository from backend.src.services.clean_release.manifest_builder import build_distribution_manifest - -class FakeRepository(CleanReleaseRepository): - """ - In-memory stub for the TUI to satisfy Orchestrator without a real DB. - """ - def __init__(self): - super().__init__() - # Seed with demo data for F5 demonstration - now = datetime.now(timezone.utc) - self.save_policy(CleanProfilePolicy( - policy_id="POL-ENT-CLEAN", - policy_version="1", - profile=ProfileType.ENTERPRISE_CLEAN, - active=True, - internal_source_registry_ref="REG-1", - prohibited_artifact_categories=["test-data"], - effective_from=now - )) - self.save_registry(ResourceSourceRegistry( - registry_id="REG-1", - name="Default Internal Registry", - entries=[ResourceSourceEntry( - source_id="S1", - host="internal-repo.company.com", - protocol="https", - purpose="artifactory" - )], - updated_at=now, - updated_by="system" - )) - self.save_candidate(ReleaseCandidate( - candidate_id="2026.03.03-rc1", - version="1.0.0", - profile=ProfileType.ENTERPRISE_CLEAN, - source_snapshot_ref="v1.0.0-rc1", - created_at=now, - created_by="system" - )) - - # [DEF:CleanReleaseTUI:Class] # @PURPOSE: Curses-based application for compliance monitoring. # @UX_STATE: READY -> Waiting for operator to start checks (F5). @@ -87,12 +51,15 @@ class FakeRepository(CleanReleaseRepository): class CleanReleaseTUI: def __init__(self, stdscr: curses.window): self.stdscr = stdscr - self.repo = FakeRepository() + self.mode = os.getenv("CLEAN_TUI_MODE", "demo").strip().lower() + self.repo = self._build_repository(self.mode) self.orchestrator = CleanComplianceOrchestrator(self.repo) + self.candidate_id = self._resolve_candidate_id() self.status: Any = "READY" self.checks_progress: List[Dict[str, Any]] = [] self.violations_list: List[ComplianceViolation] = [] self.report_id: Optional[str] = None + self.last_error: Optional[str] = None curses.start_color() curses.use_default_colors() @@ -102,6 +69,124 @@ class CleanReleaseTUI: curses.init_pair(4, curses.COLOR_YELLOW, -1) # RUNNING curses.init_pair(5, curses.COLOR_CYAN, -1) # Text + def _build_repository(self, mode: str) -> CleanReleaseRepository: + repo = CleanReleaseRepository() + if mode == "demo": + self._bootstrap_demo_repository(repo) + self._bootstrap_real_repository(repo) + return repo + + def _bootstrap_demo_repository(self, repository: CleanReleaseRepository) -> None: + now = datetime.now(timezone.utc) + repository.save_policy( + CleanProfilePolicy( + policy_id="POL-ENT-CLEAN", + policy_version="1", + profile=ProfileType.ENTERPRISE_CLEAN, + active=True, + internal_source_registry_ref="REG-1", + prohibited_artifact_categories=["test-data"], + effective_from=now, + ) + ) + repository.save_registry( + ResourceSourceRegistry( + registry_id="REG-1", + name="Default Internal Registry", + entries=[ + ResourceSourceEntry( + source_id="S1", + host="internal-repo.company.com", + protocol="https", + purpose="artifactory", + ) + ], + updated_at=now, + updated_by="system", + ) + ) + repository.save_candidate( + ReleaseCandidate( + candidate_id="2026.03.03-rc1", + version="1.0.0", + profile=ProfileType.ENTERPRISE_CLEAN, + source_snapshot_ref="v1.0.0-rc1", + created_at=now, + created_by="system", + ) + ) + + def _bootstrap_real_repository(self, repository: CleanReleaseRepository) -> None: + bootstrap_path = os.getenv("CLEAN_TUI_BOOTSTRAP_JSON", "").strip() + if not bootstrap_path: + return + + with open(bootstrap_path, "r", encoding="utf-8") as bootstrap_file: + payload = json.load(bootstrap_file) + + now = datetime.now(timezone.utc) + candidate = ReleaseCandidate( + candidate_id=payload.get("candidate_id", "candidate-1"), + version=payload.get("version", "1.0.0"), + profile=ProfileType.ENTERPRISE_CLEAN, + source_snapshot_ref=payload.get("source_snapshot_ref", "snapshot-ref"), + created_at=now, + created_by=payload.get("created_by", "operator"), + status=ReleaseCandidateStatus.DRAFT, + ) + repository.save_candidate(candidate) + + registry_id = payload.get("registry_id", "REG-1") + entries = [ + ResourceSourceEntry( + source_id=f"S-{index + 1}", + host=host, + protocol="https", + purpose="bootstrap", + enabled=True, + ) + for index, host in enumerate(payload.get("allowed_hosts", [])) + if str(host).strip() + ] + if entries: + repository.save_registry( + ResourceSourceRegistry( + registry_id=registry_id, + name=payload.get("registry_name", "Bootstrap Internal Registry"), + entries=entries, + updated_at=now, + updated_by=payload.get("created_by", "operator"), + status=RegistryStatus.ACTIVE, + ) + ) + + if entries: + repository.save_policy( + CleanProfilePolicy( + policy_id=payload.get("policy_id", "POL-ENT-CLEAN"), + policy_version=payload.get("policy_version", "1"), + profile=ProfileType.ENTERPRISE_CLEAN, + active=True, + internal_source_registry_ref=registry_id, + prohibited_artifact_categories=payload.get( + "prohibited_artifact_categories", + ["test-data", "demo", "load-test"], + ), + required_system_categories=payload.get("required_system_categories", ["core"]), + effective_from=now, + ) + ) + + def _resolve_candidate_id(self) -> str: + env_candidate = os.getenv("CLEAN_TUI_CANDIDATE_ID", "").strip() + if env_candidate: + return env_candidate + + candidate_ids = list(self.repo.candidates.keys()) + if candidate_ids: + return candidate_ids[0] + return "" + def draw_header(self, max_y: int, max_x: int): header_text = " Enterprise Clean Release Validator (TUI) " self.stdscr.attron(curses.color_pair(1) | curses.A_BOLD) @@ -109,8 +194,10 @@ class CleanReleaseTUI: centered = header_text.center(max_x) self.stdscr.addstr(0, 0, centered[:max_x]) self.stdscr.attroff(curses.color_pair(1) | curses.A_BOLD) - - info_line_text = " β”‚ Candidate: [2026.03.03-rc1] Profile: [enterprise-clean]".ljust(max_x) + + candidate_text = self.candidate_id or "not-set" + profile_text = "enterprise-clean" + info_line_text = f" β”‚ Candidate: [{candidate_text}] Profile: [{profile_text}] Mode: [{self.mode}]".ljust(max_x) self.stdscr.addstr(2, 0, info_line_text[:max_x]) def draw_checks(self): @@ -148,12 +235,17 @@ class CleanReleaseTUI: def draw_sources(self): self.stdscr.addstr(12, 3, "Allowed Internal Sources:", curses.A_BOLD) - reg = self.repo.get_registry("REG-1") + reg = None + policy = self.repo.get_active_policy() + if policy: + reg = self.repo.get_registry(policy.internal_source_registry_ref) row = 13 if reg: for entry in reg.entries: self.stdscr.addstr(row, 3, f" - {entry.host}") row += 1 + else: + self.stdscr.addstr(row, 3, " - (none)") def draw_status(self): color = curses.color_pair(5) @@ -173,6 +265,8 @@ class CleanReleaseTUI: v_cat = str(v.category.value if hasattr(v.category, "value") else v.category) msg_text = f"[{v_cat}] {v.remediation} (Loc: {v.location})" self.stdscr.addstr(row + i, 5, msg_text[:70], curses.color_pair(3)) + if self.last_error: + self.stdscr.addstr(27, 3, f"Error: {self.last_error}"[:100], curses.color_pair(3) | curses.A_BOLD) def draw_footer(self, max_y: int, max_x: int): footer_text = " F5 Run Check F7 Clear History F10 Exit ".center(max_x) @@ -187,28 +281,60 @@ class CleanReleaseTUI: self.report_id = None self.violations_list = [] self.checks_progress = [] - - candidate = self.repo.get_candidate("2026.03.03-rc1") + self.last_error = None + + candidate = self.repo.get_candidate(self.candidate_id) if self.candidate_id else None policy = self.repo.get_active_policy() - + if not candidate or not policy: self.status = "FAILED" + self.last_error = "Candidate or active policy not found. Set CLEAN_TUI_CANDIDATE_ID and prepare repository data." self.refresh_screen() return - # Prepare a manifest with a deliberate violation for demo - artifacts = [ - {"path": "src/main.py", "category": "core", "reason": "source code", "classification": "allowed"}, - {"path": "test/data.csv", "category": "test-data", "reason": "test payload", "classification": "excluded-prohibited"}, - ] - manifest = build_distribution_manifest( - manifest_id=f"manifest-{candidate.candidate_id}", - candidate_id=candidate.candidate_id, - policy_id=policy.policy_id, - generated_by="operator", - artifacts=artifacts - ) - self.repo.save_manifest(manifest) + if self.mode == "demo": + # Prepare a manifest with a deliberate violation for demonstration mode. + artifacts = [ + {"path": "src/main.py", "category": "core", "reason": "source code", "classification": "allowed"}, + {"path": "test/data.csv", "category": "test-data", "reason": "test payload", "classification": "excluded-prohibited"}, + ] + manifest = build_distribution_manifest( + manifest_id=f"manifest-{candidate.candidate_id}", + candidate_id=candidate.candidate_id, + policy_id=policy.policy_id, + generated_by="operator", + artifacts=artifacts + ) + self.repo.save_manifest(manifest) + else: + manifest = self.repo.get_manifest(f"manifest-{candidate.candidate_id}") + if manifest is None: + artifacts_path = os.getenv("CLEAN_TUI_ARTIFACTS_JSON", "").strip() + if artifacts_path: + try: + with open(artifacts_path, "r", encoding="utf-8") as artifacts_file: + artifacts = json.load(artifacts_file) + if not isinstance(artifacts, list): + raise ValueError("Artifacts JSON must be a list") + prepare_candidate( + repository=self.repo, + candidate_id=candidate.candidate_id, + artifacts=artifacts, + sources=[], + operator_id="tui-operator", + ) + manifest = self.repo.get_manifest(f"manifest-{candidate.candidate_id}") + except Exception as exc: + self.status = "FAILED" + self.last_error = f"Unable to prepare manifest from CLEAN_TUI_ARTIFACTS_JSON: {exc}" + self.refresh_screen() + return + + if manifest is None: + self.status = "FAILED" + self.last_error = "Manifest not found. Prepare candidate first or provide CLEAN_TUI_ARTIFACTS_JSON." + self.refresh_screen() + return # Init orchestrator sequence check_run = self.orchestrator.start_check_run(candidate.candidate_id, policy.policy_id, "operator", "tui") @@ -244,6 +370,7 @@ class CleanReleaseTUI: self.report_id = None self.violations_list = [] self.checks_progress = [] + self.last_error = None self.refresh_screen() def refresh_screen(self): diff --git a/bootstrap.json b/bootstrap.json new file mode 100644 index 00000000..a8ca01b3 --- /dev/null +++ b/bootstrap.json @@ -0,0 +1,17 @@ +{ + "candidate_id": "2026.03.03-rc1", + "version": "1.0.0", + "source_snapshot_ref": "v1.0.0-rc1", + "created_by": "operator", + "allowed_hosts": [ + "internal-repo.company.com" + ], + "prohibited_artifact_categories": [ + "test-data", + "demo", + "load-test" + ], + "required_system_categories": [ + "core" + ] +} diff --git a/docs/installation.md b/docs/installation.md index 0f5b6ac3..5304c94a 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -295,7 +295,7 @@ export RETENTION_PERIOD_DAYS=90 ```bash cd /home/busya/dev/ss-tools -./backend/.venv/bin/python3 -m backend.src.scripts.clean_release_tui +./run_clean_tui.sh ``` ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ flow: @@ -306,6 +306,41 @@ cd /home/busya/dev/ss-tools - `COMPLIANT` β€” ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ этапу выпуска; - `BLOCKED` β€” выпуск Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½ Π΄ΠΎ устранСния Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ. +По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `run_clean_tui.sh` запускаСт TUI Π² `real` Ρ€Π΅ΠΆΠΈΠΌΠ΅ (`CLEAN_TUI_MODE=real`) Π±Π΅Π· ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ дСмонстрационных Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΉ. + +### ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ запуска `run_clean_tui.sh` + +```bash +# ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: явный Ρ€Π΅ΠΆΠΈΠΌ (real|demo), ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ real +export CLEAN_TUI_MODE=real + +# ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: bootstrap Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°/ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ/рССстра +export CLEAN_TUI_BOOTSTRAP_JSON=/absolute/path/bootstrap.json + +# ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ: Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Ρ‹ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ manifest, Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ создан +export CLEAN_TUI_ARTIFACTS_JSON=/absolute/path/artifacts.json + +# Запуск (candidate_id ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ) +./run_clean_tui.sh 2026.03.03-rc1 + +# Π―Π²Π½Ρ‹ΠΉ дСмонстрационный Ρ€Π΅ΠΆΠΈΠΌ +./run_clean_tui.sh --demo +``` + +ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `bootstrap.json`: + +```json +{ + "candidate_id": "2026.03.03-rc1", + "version": "1.0.0", + "source_snapshot_ref": "v1.0.0-rc1", + "created_by": "operator", + "allowed_hosts": ["internal-repo.company.com"], + "prohibited_artifact_categories": ["test-data", "demo", "load-test"], + "required_system_categories": ["core"] +} +``` + ### ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° источников (internal-only) Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ хосты ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ рССстра ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: @@ -494,4 +529,4 @@ curl -X POST http://localhost:8001/api/auth/login \ 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» [Troubleshooting](#troubleshooting) 2. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈ Π² Docker: `docker compose logs -f` 3. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ issue Π½Π° GitHub с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ описаниСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ -4. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ \ No newline at end of file +4. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ diff --git a/run_clean_tui.sh b/run_clean_tui.sh index 53a692d4..bf5b195c 100755 --- a/run_clean_tui.sh +++ b/run_clean_tui.sh @@ -8,11 +8,22 @@ set -e SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR" -echo "Starting Enterprise Clean Release Validator..." +echo "Starting Enterprise Clean Release Validator (real mode)..." # Set up environment export PYTHONPATH="$SCRIPT_DIR/backend" export TERM="xterm-256color" +export CLEAN_TUI_MODE="real" + +CANDIDATE_ID="" +if [ "${1:-}" = "--demo" ]; then + export CLEAN_TUI_MODE="demo" + shift +fi +if [ -n "${1:-}" ]; then + CANDIDATE_ID="$1" + export CLEAN_TUI_CANDIDATE_ID="$CANDIDATE_ID" +fi # Run the TUI ./backend/.venv/bin/python3 -m backend.src.scripts.clean_release_tui diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json index b6fc724d..45b3f5cb 100644 --- a/semantics/semantic_map.json +++ b/semantics/semantic_map.json @@ -1,6 +1,6 @@ { "project_root": ".", - "generated_at": "2026-03-06T15:13:35.969442", + "generated_at": "2026-03-09T13:33:21.871001", "modules": [ { "name": "check_test_data", @@ -1327,6 +1327,62 @@ "score": 0.25 } }, + { + "name": "test_pat_retrieve", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 31, + "tags": { + "PURPOSE": "Auto-generated module for test_pat_retrieve.py", + "TIER": "TRIVIAL", + "LAYER": "Unknown" + }, + "relations": [], + "children": [ + { + "name": "run", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 7, + "end_line": 7, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "mock_test", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 21, + "end_line": 21, + "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": "DashboardTypes", "type": "Module", @@ -1701,7 +1757,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 349, + "end_line": 369, "tags": { "TIER": "STANDARD", "SEMANTICS": "api, client, fetch, rest", @@ -1715,11 +1771,12 @@ "type": "Function", "tier": "STANDARD", "start_line": 12, - "end_line": 25, + "end_line": 34, "tags": { "PURPOSE": "Creates a normalized Error object for failed API responses.", "PRE": "response is a failed fetch Response object.", - "POST": "Returned error contains message and status fields." + "POST": "Returned error contains message and status fields.", + "TYPE": "{any} */ (error).error_code = String(detail.error_code);" }, "relations": [], "children": [], @@ -1744,8 +1801,8 @@ "name": "notifyApiError", "type": "Function", "tier": "STANDARD", - "start_line": 27, - "end_line": 42, + "start_line": 36, + "end_line": 51, "tags": { "PURPOSE": "Shows toast for API errors with explicit handling of critical statuses.", "PRE": "error is an Error instance.", @@ -1759,12 +1816,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": 36 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 27 + "line_number": 36 } ], "score": 0.7 @@ -1774,8 +1831,8 @@ "name": "shouldSuppressApiErrorToast", "type": "Function", "tier": "STANDARD", - "start_line": 44, - "end_line": 59, + "start_line": 53, + "end_line": 79, "tags": { "PURPOSE": "Avoid noisy toasts for expected non-critical API failures.", "PRE": "endpoint can be empty; error can be null.", @@ -1789,12 +1846,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 53 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 44 + "line_number": 53 } ], "score": 0.7 @@ -1804,8 +1861,8 @@ "name": "getWsUrl", "type": "Function", "tier": "STANDARD", - "start_line": 61, - "end_line": 76, + "start_line": 81, + "end_line": 96, "tags": { "PURPOSE": "Returns the WebSocket URL for a specific task, with fallback logic.", "PRE": "taskId is provided.", @@ -1821,12 +1878,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": 81 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 61 + "line_number": 81 } ], "score": 0.7 @@ -1836,8 +1893,8 @@ "name": "getAuthHeaders", "type": "Function", "tier": "STANDARD", - "start_line": 78, - "end_line": 92, + "start_line": 98, + "end_line": 112, "tags": { "PURPOSE": "Returns headers with Authorization if token exists." }, @@ -1849,32 +1906,32 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 78 + "line_number": 98 } ], "score": 0.0 @@ -1884,8 +1941,8 @@ "name": "fetchApi", "type": "Function", "tier": "STANDARD", - "start_line": 94, - "end_line": 118, + "start_line": 114, + "end_line": 138, "tags": { "PURPOSE": "Generic GET request wrapper.", "PRE": "endpoint string is provided.", @@ -1901,12 +1958,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 94 + "line_number": 114 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 94 + "line_number": 114 } ], "score": 0.7 @@ -1916,12 +1973,13 @@ "name": "fetchApiBlob", "type": "Function", "tier": "STANDARD", - "start_line": 120, - "end_line": 148, + "start_line": 140, + "end_line": 168, "tags": { "PURPOSE": "Generic GET wrapper for binary payloads.", "PRE": "endpoint string is provided.", - "POST": "Returns Blob or throws on error." + "POST": "Returns Blob or throws on error.", + "TYPE": "{any} */ (error).status = 202;" }, "relations": [], "children": [], @@ -1931,12 +1989,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 120 + "line_number": 140 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 120 + "line_number": 140 } ], "score": 0.7 @@ -1946,8 +2004,8 @@ "name": "postApi", "type": "Function", "tier": "STANDARD", - "start_line": 150, - "end_line": 177, + "start_line": 170, + "end_line": 197, "tags": { "PURPOSE": "Generic POST request wrapper.", "PRE": "endpoint and body are provided.", @@ -1963,12 +2021,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 150 + "line_number": 170 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 150 + "line_number": 170 } ], "score": 0.7 @@ -1978,8 +2036,8 @@ "name": "requestApi", "type": "Function", "tier": "STANDARD", - "start_line": 179, - "end_line": 213, + "start_line": 199, + "end_line": 233, "tags": { "PURPOSE": "Generic request wrapper.", "PRE": "endpoint and method are provided.", @@ -1993,12 +2051,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 179 + "line_number": 199 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 179 + "line_number": 199 } ], "score": 0.7 @@ -2008,8 +2066,8 @@ "name": "api", "type": "Data", "tier": "STANDARD", - "start_line": 215, - "end_line": 347, + "start_line": 235, + "end_line": 367, "tags": { "PURPOSE": "API client object with specific methods." }, @@ -2982,7 +3040,7 @@ "type": "Store", "tier": "CRITICAL", "start_line": 1, - "end_line": 108, + "end_line": 164, "tags": { "TIER": "CRITICAL", "PURPOSE": "Manage Task Drawer visibility and resource-to-task mapping", @@ -3008,7 +3066,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 108, + "end_line": 164, "tags": { "PURPOSE": "Auto-generated module for frontend/src/lib/stores/taskDrawer.js", "TIER": "TRIVIAL", @@ -3016,12 +3074,84 @@ }, "relations": [], "children": [ + { + "name": "readAutoOpenTaskDrawerPreference", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 28, + "end_line": 28, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "openDrawerForTask", "type": "Function", "tier": "TRIVIAL", - "start_line": 39, - "end_line": 39, + "start_line": 53, + "end_line": 53, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "setTaskDrawerAutoOpenPreference", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 71, + "end_line": 71, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "getTaskDrawerAutoOpenPreference", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 85, + "end_line": 85, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "openDrawerForTaskIfPreferred", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 94, + "end_line": 94, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3038,8 +3168,8 @@ "name": "openDrawer", "type": "Function", "tier": "TRIVIAL", - "start_line": 52, - "end_line": 52, + "start_line": 108, + "end_line": 108, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3056,8 +3186,8 @@ "name": "closeDrawer", "type": "Function", "tier": "TRIVIAL", - "start_line": 65, - "end_line": 65, + "start_line": 121, + "end_line": 121, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3074,8 +3204,8 @@ "name": "updateResourceTask", "type": "Function", "tier": "TRIVIAL", - "start_line": 80, - "end_line": 80, + "start_line": 136, + "end_line": 136, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -3092,8 +3222,8 @@ "name": "getTaskForResource", "type": "Function", "tier": "TRIVIAL", - "start_line": 100, - "end_line": 100, + "start_line": 156, + "end_line": 156, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6484,7 +6614,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 543, + "end_line": 558, "tags": { "TIER": "CRITICAL", "PURPOSE": "Unified top navigation bar with Logo, Search, Activity, and User menu", @@ -6537,11 +6667,6 @@ "type": "READS_FROM", "line": 38 }, - { - "store": "lib", - "type": "READS_FROM", - "line": 43 - }, { "store": "lib", "type": "READS_FROM", @@ -6580,16 +6705,16 @@ { "store": "lib", "type": "READS_FROM", - "line": 56 + "line": 51 + }, + { + "store": "lib", + "type": "READS_FROM", + "line": 57 }, { "store": "sidebarStore", "type": "READS_FROM", - "line": 72 - }, - { - "store": "activityStore", - "type": "READS_FROM", "line": 73 }, { @@ -6598,14 +6723,14 @@ "line": 74 }, { - "store": "auth", + "store": "activityStore", "type": "READS_FROM", "line": 75 }, { - "store": "environmentContextStore", + "store": "auth", "type": "READS_FROM", - "line": 77 + "line": 76 }, { "store": "environmentContextStore", @@ -6613,19 +6738,14 @@ "line": 78 }, { - "store": "selectedEnvironmentStore", + "store": "environmentContextStore", "type": "READS_FROM", "line": 79 }, { - "store": "t", + "store": "selectedEnvironmentStore", "type": "READS_FROM", - "line": 204 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 211 + "line": 80 }, { "store": "t", @@ -6639,63 +6759,68 @@ }, { "store": "t", - "type": "WRITES_TO", - "line": 347 + "type": "READS_FROM", + "line": 232 }, { "store": "t", "type": "READS_FROM", + "line": 239 + }, + { + "store": "t", + "type": "WRITES_TO", "line": 362 }, + { + "store": "t", + "type": "READS_FROM", + "line": 377 + }, { "store": "t", "type": "WRITES_TO", - "line": 374 + "line": 389 }, { "store": "t", "type": "READS_FROM", - "line": 386 + "line": 401 }, { "store": "t", "type": "READS_FROM", - "line": 390 + "line": 405 }, { "store": "t", "type": "WRITES_TO", - "line": 433 + "line": 448 }, { "store": "t", "type": "WRITES_TO", - "line": 434 + "line": 449 }, { "store": "t", "type": "WRITES_TO", - "line": 458 + "line": 473 }, { "store": "t", "type": "WRITES_TO", - "line": 459 + "line": 474 }, { "store": "t", "type": "WRITES_TO", - "line": 472 + "line": 487 }, { "store": "t", "type": "WRITES_TO", - "line": 492 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 510 + "line": 507 }, { "store": "t", @@ -6705,7 +6830,12 @@ { "store": "t", "type": "READS_FROM", - "line": 536 + "line": 540 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 551 } ] }, @@ -6714,7 +6844,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 543, + "end_line": 558, "tags": { "PURPOSE": "Auto-generated module for frontend/src/lib/components/layout/TopNavbar.svelte", "TIER": "TRIVIAL", @@ -6726,8 +6856,8 @@ "name": "toggleUserMenu", "type": "Function", "tier": "TRIVIAL", - "start_line": 84, - "end_line": 84, + "start_line": 85, + "end_line": 85, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6744,8 +6874,8 @@ "name": "closeUserMenu", "type": "Function", "tier": "TRIVIAL", - "start_line": 89, - "end_line": 89, + "start_line": 90, + "end_line": 90, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6762,8 +6892,8 @@ "name": "handleLogout", "type": "Function", "tier": "TRIVIAL", - "start_line": 93, - "end_line": 93, + "start_line": 94, + "end_line": 94, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6780,8 +6910,8 @@ "name": "handleActivityClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 99, - "end_line": 99, + "start_line": 100, + "end_line": 100, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6798,8 +6928,26 @@ "name": "handleAssistantClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 111, - "end_line": 111, + "start_line": 112, + "end_line": 112, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "hydrateTaskDrawerPreference", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 116, + "end_line": 116, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6816,8 +6964,8 @@ "name": "handleSearchFocus", "type": "Function", "tier": "TRIVIAL", - "start_line": 115, - "end_line": 115, + "start_line": 129, + "end_line": 129, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6834,8 +6982,8 @@ "name": "clearSearchState", "type": "Function", "tier": "TRIVIAL", - "start_line": 120, - "end_line": 120, + "start_line": 134, + "end_line": 134, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6852,8 +7000,8 @@ "name": "handleDocumentClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 126, - "end_line": 126, + "start_line": 140, + "end_line": 140, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6870,8 +7018,8 @@ "name": "handleHamburgerClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 136, - "end_line": 136, + "start_line": 150, + "end_line": 150, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6888,8 +7036,8 @@ "name": "handleGlobalEnvironmentChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 141, - "end_line": 141, + "start_line": 155, + "end_line": 155, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6906,8 +7054,8 @@ "name": "buildSearchResultSections", "type": "Function", "tier": "TRIVIAL", - "start_line": 148, - "end_line": 148, + "start_line": 162, + "end_line": 162, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6924,8 +7072,8 @@ "name": "triggerSearch", "type": "Function", "tier": "TRIVIAL", - "start_line": 232, - "end_line": 232, + "start_line": 246, + "end_line": 246, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6942,8 +7090,8 @@ "name": "handleSearchInput", "type": "Function", "tier": "TRIVIAL", - "start_line": 284, - "end_line": 284, + "start_line": 298, + "end_line": 298, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6960,8 +7108,8 @@ "name": "openSearchResult", "type": "Function", "tier": "TRIVIAL", - "start_line": 294, - "end_line": 294, + "start_line": 308, + "end_line": 308, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -6978,8 +7126,8 @@ "name": "handleSearchKeydown", "type": "Function", "tier": "TRIVIAL", - "start_line": 307, - "end_line": 307, + "start_line": 321, + "end_line": 321, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8115,14 +8263,14 @@ "type": "Page", "tier": "CRITICAL", "start_line": 1, - "end_line": 56, + "end_line": 95, "tags": { "TIER": "CRITICAL", - "PURPOSE": "Redirect to Dashboard Hub as per UX requirements", + "PURPOSE": "Redirect to preferred start page from profile settings with safe dashboards fallback.", "LAYER": "UI", - "INVARIANT": "Always redirects to /dashboards", + "INVARIANT": "Redirect target resolves to one of /dashboards, /datasets, /reports.", "UX_STATE": "Loading -> Shows loading indicator", - "UX_FEEDBACK": "Redirects to /dashboards", + "UX_FEEDBACK": "Redirects to preferred start page", "TEST_CONTRACT": "Page_Home ->", "TEST_FIXTURE": "init_state -> {}", "TEST_INVARIANT": "correct_redirect -> verifies: [init_state]" @@ -8135,6 +8283,80 @@ "score": 1.0 } }, + { + "name": "+page", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 95, + "tags": { + "PURPOSE": "Auto-generated module for frontend/src/routes/+page.svelte", + "TIER": "TRIVIAL", + "LAYER": "Unknown" + }, + "relations": [], + "children": [ + { + "name": "normalizeStartPage", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 29, + "end_line": 29, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "resolveStartPagePath", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 36, + "end_line": 36, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "redirectToStartPage", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 42, + "end_line": 42, + "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": "load", "type": "Function", @@ -8188,7 +8410,7 @@ "type": "Page", "tier": "STANDARD", "start_line": 1, - "end_line": 939, + "end_line": 942, "tags": { "TIER": "CRITICAL", "PURPOSE": "Dataset Hub - Dedicated hub for datasets with mapping progress", @@ -8216,7 +8438,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 939, + "end_line": 942, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/datasets/+page.svelte", "TIER": "TRIVIAL", @@ -8228,8 +8450,8 @@ "name": "loadDatasets", "type": "Function", "tier": "TRIVIAL", - "start_line": 99, - "end_line": 99, + "start_line": 102, + "end_line": 102, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8246,8 +8468,8 @@ "name": "handleSearch", "type": "Function", "tier": "TRIVIAL", - "start_line": 155, - "end_line": 155, + "start_line": 158, + "end_line": 158, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8264,8 +8486,8 @@ "name": "handlePageChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 160, - "end_line": 160, + "start_line": 163, + "end_line": 163, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8282,8 +8504,8 @@ "name": "handlePageSizeChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 166, - "end_line": 166, + "start_line": 169, + "end_line": 169, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8300,8 +8522,8 @@ "name": "updateSelectionState", "type": "Function", "tier": "TRIVIAL", - "start_line": 173, - "end_line": 173, + "start_line": 176, + "end_line": 176, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8318,8 +8540,8 @@ "name": "handleCheckboxChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 183, - "end_line": 183, + "start_line": 186, + "end_line": 186, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8336,8 +8558,8 @@ "name": "handleSelectAll", "type": "Function", "tier": "TRIVIAL", - "start_line": 194, - "end_line": 194, + "start_line": 197, + "end_line": 197, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8354,8 +8576,8 @@ "name": "handleSelectVisible", "type": "Function", "tier": "TRIVIAL", - "start_line": 218, - "end_line": 218, + "start_line": 221, + "end_line": 221, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8372,8 +8594,8 @@ "name": "handleAction", "type": "Function", "tier": "TRIVIAL", - "start_line": 229, - "end_line": 229, + "start_line": 232, + "end_line": 232, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8390,8 +8612,8 @@ "name": "handleBulkMapColumns", "type": "Function", "tier": "TRIVIAL", - "start_line": 249, - "end_line": 249, + "start_line": 252, + "end_line": 252, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8408,8 +8630,8 @@ "name": "handleBulkGenerateDocs", "type": "Function", "tier": "TRIVIAL", - "start_line": 314, - "end_line": 314, + "start_line": 317, + "end_line": 317, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8426,8 +8648,8 @@ "name": "handleTaskStatusClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 348, - "end_line": 348, + "start_line": 351, + "end_line": 351, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8444,8 +8666,8 @@ "name": "getTaskStatusIcon", "type": "Function", "tier": "TRIVIAL", - "start_line": 358, - "end_line": 358, + "start_line": 361, + "end_line": 361, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -8462,8 +8684,8 @@ "name": "getMappingProgressClass", "type": "Function", "tier": "TRIVIAL", - "start_line": 375, - "end_line": 375, + "start_line": 378, + "end_line": 378, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -9390,7 +9612,7 @@ "type": "Page", "tier": "STANDARD", "start_line": 1, - "end_line": 2774, + "end_line": 2777, "tags": { "TIER": "CRITICAL", "PURPOSE": "Dashboard Hub - Central hub for managing dashboards with Git status and task actions", @@ -9412,8 +9634,8 @@ "name": "DashboardHub.normalizeTaskStatus", "type": "Function", "tier": "STANDARD", - "start_line": 159, - "end_line": 172, + "start_line": 162, + "end_line": 175, "tags": { "PURPOSE": "Normalize raw task status to stable lowercase token for UI.", "PRE": "status can be enum-like string or null.", @@ -9427,12 +9649,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 159 + "line_number": 162 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 159 + "line_number": 162 } ], "score": 0.7 @@ -9442,8 +9664,8 @@ "name": "DashboardHub.normalizeValidationStatus", "type": "Function", "tier": "STANDARD", - "start_line": 174, - "end_line": 189, + "start_line": 177, + "end_line": 192, "tags": { "PURPOSE": "Normalize validation status to pass/fail/warn/unknown.", "PRE": "status can be any scalar.", @@ -9457,12 +9679,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 174 + "line_number": 177 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 174 + "line_number": 177 } ], "score": 0.7 @@ -9472,8 +9694,8 @@ "name": "DashboardHub.getValidationBadgeClass", "type": "Function", "tier": "STANDARD", - "start_line": 191, - "end_line": 205, + "start_line": 194, + "end_line": 208, "tags": { "PURPOSE": "Map validation level to badge class tuple.", "PRE": "level in pass|fail|warn|unknown.", @@ -9487,12 +9709,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 191 + "line_number": 194 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 191 + "line_number": 194 } ], "score": 0.7 @@ -9502,8 +9724,8 @@ "name": "DashboardHub.getValidationLabel", "type": "Function", "tier": "STANDARD", - "start_line": 207, - "end_line": 220, + "start_line": 210, + "end_line": 223, "tags": { "PURPOSE": "Map normalized validation level to compact UI label.", "PRE": "level in pass|fail|warn|unknown.", @@ -9517,12 +9739,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 207 + "line_number": 210 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 207 + "line_number": 210 } ], "score": 0.7 @@ -9532,8 +9754,8 @@ "name": "DashboardHub.normalizeOwners", "type": "Function", "tier": "STANDARD", - "start_line": 222, - "end_line": 258, + "start_line": 225, + "end_line": 261, "tags": { "PURPOSE": "Normalize owners payload to unique non-empty display labels.", "PRE": "owners can be null, list of strings, or list of user objects.", @@ -9547,12 +9769,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 222 + "line_number": 225 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 222 + "line_number": 225 } ], "score": 0.7 @@ -9562,8 +9784,8 @@ "name": "DashboardHub.loadDashboards", "type": "Function", "tier": "STANDARD", - "start_line": 260, - "end_line": 453, + "start_line": 263, + "end_line": 456, "tags": { "PURPOSE": "Load full dashboard dataset for current environment and hydrate grid projection.", "PRE": "selectedEnv is not null.", @@ -9576,8 +9798,8 @@ "name": "DashboardHub.handleTemporaryShowAll", "type": "Function", "tier": "STANDARD", - "start_line": 382, - "end_line": 394, + "start_line": 385, + "end_line": 397, "tags": { "PURPOSE": "Temporarily disable profile-default dashboard filter for current page context.", "PRE": "Dashboards list is loaded in dashboards_main context.", @@ -9591,17 +9813,17 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 382 + "line_number": 385 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 382 + "line_number": 385 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 382 + "line_number": 385 } ], "score": 0.55 @@ -9611,8 +9833,8 @@ "name": "DashboardHub.handleRestoreProfileFilter", "type": "Function", "tier": "STANDARD", - "start_line": 396, - "end_line": 408, + "start_line": 399, + "end_line": 411, "tags": { "PURPOSE": "Re-enable persisted profile-default filtering after temporary override.", "PRE": "Current page is in override mode.", @@ -9626,17 +9848,17 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 396 + "line_number": 399 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 396 + "line_number": 399 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 396 + "line_number": 399 } ], "score": 0.55 @@ -9649,12 +9871,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 260 + "line_number": 263 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 260 + "line_number": 263 } ], "score": 0.7 @@ -9664,8 +9886,8 @@ "name": "DashboardHub.formatDate", "type": "Function", "tier": "STANDARD", - "start_line": 455, - "end_line": 468, + "start_line": 458, + "end_line": 471, "tags": { "PURPOSE": "Convert ISO timestamp to locale date string.", "PRE": "value may be null or invalid date string.", @@ -9679,12 +9901,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 455 + "line_number": 458 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 455 + "line_number": 458 } ], "score": 0.7 @@ -9694,8 +9916,8 @@ "name": "DashboardHub.getGitSummaryLabel", "type": "Function", "tier": "STANDARD", - "start_line": 470, - "end_line": 488, + "start_line": 473, + "end_line": 491, "tags": { "PURPOSE": "Compute stable text label for git state column.", "PRE": "dashboard has git projection fields.", @@ -9709,12 +9931,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 470 + "line_number": 473 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 470 + "line_number": 473 } ], "score": 0.7 @@ -9724,8 +9946,8 @@ "name": "DashboardHub.getLlmSummaryLabel", "type": "Function", "tier": "STANDARD", - "start_line": 490, - "end_line": 502, + "start_line": 493, + "end_line": 505, "tags": { "PURPOSE": "Compute normalized LLM validation summary label.", "PRE": "dashboard may have null lastTask.", @@ -9739,12 +9961,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 490 + "line_number": 493 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 490 + "line_number": 493 } ], "score": 0.7 @@ -9754,8 +9976,8 @@ "name": "DashboardHub.getColumnCellValue", "type": "Function", "tier": "STANDARD", - "start_line": 504, - "end_line": 521, + "start_line": 507, + "end_line": 524, "tags": { "PURPOSE": "Resolve comparable/filterable display value for any grid column.", "PRE": "column belongs to filterable column set.", @@ -9769,12 +9991,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 504 + "line_number": 507 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 504 + "line_number": 507 } ], "score": 0.7 @@ -9784,8 +10006,8 @@ "name": "DashboardHub.getFilterOptions", "type": "Function", "tier": "STANDARD", - "start_line": 523, - "end_line": 538, + "start_line": 526, + "end_line": 541, "tags": { "PURPOSE": "Build unique sorted value list for a column filter dropdown.", "PRE": "allDashboards is hydrated.", @@ -9799,12 +10021,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 526 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 526 } ], "score": 0.7 @@ -9814,8 +10036,8 @@ "name": "DashboardHub.getVisibleFilterOptions", "type": "Function", "tier": "STANDARD", - "start_line": 540, - "end_line": 553, + "start_line": 543, + "end_line": 556, "tags": { "PURPOSE": "Apply in-dropdown search over full filter options.", "PRE": "columnFilterSearch contains search token for column.", @@ -9829,12 +10051,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 540 + "line_number": 543 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 540 + "line_number": 543 } ], "score": 0.7 @@ -9844,8 +10066,8 @@ "name": "DashboardHub.toggleFilterDropdown", "type": "Function", "tier": "STANDARD", - "start_line": 555, - "end_line": 584, + "start_line": 558, + "end_line": 587, "tags": { "PURPOSE": "Toggle active column filter popover.", "PRE": "column is valid filter key.", @@ -9859,12 +10081,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 555 + "line_number": 558 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 555 + "line_number": 558 } ], "score": 0.7 @@ -9874,8 +10096,8 @@ "name": "DashboardHub.toggleFilterValue", "type": "Function", "tier": "STANDARD", - "start_line": 586, - "end_line": 604, + "start_line": 589, + "end_line": 607, "tags": { "PURPOSE": "Add/remove specific filter value and reapply projection.", "PRE": "value comes from option list of the same column.", @@ -9889,12 +10111,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 586 + "line_number": 589 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 586 + "line_number": 589 } ], "score": 0.7 @@ -9904,8 +10126,8 @@ "name": "DashboardHub.clearColumnFilter", "type": "Function", "tier": "STANDARD", - "start_line": 606, - "end_line": 618, + "start_line": 609, + "end_line": 621, "tags": { "PURPOSE": "Reset selected values for one column.", "PRE": "column is valid filter key.", @@ -9919,12 +10141,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 606 + "line_number": 609 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 606 + "line_number": 609 } ], "score": 0.7 @@ -9934,8 +10156,8 @@ "name": "DashboardHub.selectAllColumnFilterValues", "type": "Function", "tier": "STANDARD", - "start_line": 620, - "end_line": 635, + "start_line": 623, + "end_line": 638, "tags": { "PURPOSE": "Select all currently visible values in filter popover.", "PRE": "visible options computed for current search token.", @@ -9949,12 +10171,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 620 + "line_number": 623 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 620 + "line_number": 623 } ], "score": 0.7 @@ -9964,8 +10186,8 @@ "name": "DashboardHub.updateColumnFilterSearch", "type": "Function", "tier": "STANDARD", - "start_line": 637, - "end_line": 647, + "start_line": 640, + "end_line": 650, "tags": { "PURPOSE": "Update local search token for one filter popover.", "PRE": "value is text from input.", @@ -9979,12 +10201,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 637 + "line_number": 640 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 637 + "line_number": 640 } ], "score": 0.7 @@ -9994,8 +10216,8 @@ "name": "DashboardHub.hasColumnFilter", "type": "Function", "tier": "STANDARD", - "start_line": 649, - "end_line": 659, + "start_line": 652, + "end_line": 662, "tags": { "PURPOSE": "Determine if column has active selected values.", "PRE": "column is valid filter key.", @@ -10009,12 +10231,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 649 + "line_number": 652 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 649 + "line_number": 652 } ], "score": 0.7 @@ -10024,8 +10246,8 @@ "name": "DashboardHub.doesDashboardPassColumnFilters", "type": "Function", "tier": "STANDARD", - "start_line": 661, - "end_line": 678, + "start_line": 664, + "end_line": 681, "tags": { "PURPOSE": "Evaluate dashboard row against all active column filters.", "PRE": "dashboard contains projected values for each filterable column.", @@ -10039,12 +10261,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 661 + "line_number": 664 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 661 + "line_number": 664 } ], "score": 0.7 @@ -10054,8 +10276,8 @@ "name": "DashboardHub.getSortValue", "type": "Function", "tier": "STANDARD", - "start_line": 680, - "end_line": 698, + "start_line": 683, + "end_line": 701, "tags": { "PURPOSE": "Compute stable comparable sort key for chosen column.", "PRE": "column belongs to sortable set.", @@ -10069,12 +10291,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 680 + "line_number": 683 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 680 + "line_number": 683 } ], "score": 0.7 @@ -10084,8 +10306,8 @@ "name": "DashboardHub.handleSort", "type": "Function", "tier": "STANDARD", - "start_line": 700, - "end_line": 717, + "start_line": 703, + "end_line": 720, "tags": { "PURPOSE": "Toggle or switch sort order and reapply grid projection.", "PRE": "column belongs to sortable set.", @@ -10099,12 +10321,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 700 + "line_number": 703 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 700 + "line_number": 703 } ], "score": 0.7 @@ -10114,8 +10336,8 @@ "name": "DashboardHub.getSortIndicator", "type": "Function", "tier": "STANDARD", - "start_line": 719, - "end_line": 730, + "start_line": 722, + "end_line": 733, "tags": { "PURPOSE": "Return visual indicator for active/inactive sort header.", "PRE": "column belongs to sortable set.", @@ -10129,12 +10351,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 719 + "line_number": 722 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 719 + "line_number": 722 } ], "score": 0.7 @@ -10144,8 +10366,8 @@ "name": "DashboardHub.applyGridTransforms", "type": "Function", "tier": "STANDARD", - "start_line": 732, - "end_line": 759, + "start_line": 735, + "end_line": 762, "tags": { "PURPOSE": "Apply search + column filters + sort + pagination to grid data.", "PRE": "allDashboards is current source collection.", @@ -10160,12 +10382,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 732 + "line_number": 735 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 732 + "line_number": 735 } ], "score": 0.7 @@ -10183,7 +10405,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 2774, + "end_line": 2777, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/dashboards/+page.svelte", "TIER": "TRIVIAL", @@ -10195,8 +10417,8 @@ "name": "handleDocumentClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 144, - "end_line": 144, + "start_line": 147, + "end_line": 147, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10213,8 +10435,8 @@ "name": "normalizeTaskStatus", "type": "Function", "tier": "TRIVIAL", - "start_line": 165, - "end_line": 165, + "start_line": 168, + "end_line": 168, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10231,8 +10453,8 @@ "name": "normalizeValidationStatus", "type": "Function", "tier": "TRIVIAL", - "start_line": 180, - "end_line": 180, + "start_line": 183, + "end_line": 183, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10249,8 +10471,8 @@ "name": "getValidationBadgeClass", "type": "Function", "tier": "TRIVIAL", - "start_line": 197, - "end_line": 197, + "start_line": 200, + "end_line": 200, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10267,8 +10489,8 @@ "name": "getValidationLabel", "type": "Function", "tier": "TRIVIAL", - "start_line": 213, - "end_line": 213, + "start_line": 216, + "end_line": 216, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10285,8 +10507,8 @@ "name": "normalizeOwners", "type": "Function", "tier": "TRIVIAL", - "start_line": 228, - "end_line": 228, + "start_line": 231, + "end_line": 231, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10303,8 +10525,8 @@ "name": "loadDashboards", "type": "Function", "tier": "TRIVIAL", - "start_line": 268, - "end_line": 268, + "start_line": 271, + "end_line": 271, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10321,8 +10543,8 @@ "name": "handleSearch", "type": "Function", "tier": "TRIVIAL", - "start_line": 364, - "end_line": 364, + "start_line": 367, + "end_line": 367, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10339,8 +10561,8 @@ "name": "handlePageChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 369, - "end_line": 369, + "start_line": 372, + "end_line": 372, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10357,8 +10579,8 @@ "name": "handlePageSizeChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 376, - "end_line": 376, + "start_line": 379, + "end_line": 379, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10375,8 +10597,8 @@ "name": "handleTemporaryShowAll", "type": "Function", "tier": "TRIVIAL", - "start_line": 388, - "end_line": 388, + "start_line": 391, + "end_line": 391, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10393,8 +10615,8 @@ "name": "handleRestoreProfileFilter", "type": "Function", "tier": "TRIVIAL", - "start_line": 402, - "end_line": 402, + "start_line": 405, + "end_line": 405, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10411,8 +10633,8 @@ "name": "updateSelectionState", "type": "Function", "tier": "TRIVIAL", - "start_line": 411, - "end_line": 411, + "start_line": 414, + "end_line": 414, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10429,8 +10651,8 @@ "name": "handleCheckboxChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 421, - "end_line": 421, + "start_line": 424, + "end_line": 424, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10447,8 +10669,8 @@ "name": "handleSelectAll", "type": "Function", "tier": "TRIVIAL", - "start_line": 432, - "end_line": 432, + "start_line": 435, + "end_line": 435, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10465,8 +10687,8 @@ "name": "handleSelectVisible", "type": "Function", "tier": "TRIVIAL", - "start_line": 443, - "end_line": 443, + "start_line": 446, + "end_line": 446, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10483,8 +10705,8 @@ "name": "formatDate", "type": "Function", "tier": "TRIVIAL", - "start_line": 461, - "end_line": 461, + "start_line": 464, + "end_line": 464, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10501,8 +10723,8 @@ "name": "getGitSummaryLabel", "type": "Function", "tier": "TRIVIAL", - "start_line": 476, - "end_line": 476, + "start_line": 479, + "end_line": 479, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10519,8 +10741,8 @@ "name": "getLlmSummaryLabel", "type": "Function", "tier": "TRIVIAL", - "start_line": 496, - "end_line": 496, + "start_line": 499, + "end_line": 499, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10537,8 +10759,8 @@ "name": "getColumnCellValue", "type": "Function", "tier": "TRIVIAL", - "start_line": 510, - "end_line": 510, + "start_line": 513, + "end_line": 513, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10555,8 +10777,8 @@ "name": "getFilterOptions", "type": "Function", "tier": "TRIVIAL", - "start_line": 529, - "end_line": 529, + "start_line": 532, + "end_line": 532, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10573,8 +10795,8 @@ "name": "getVisibleFilterOptions", "type": "Function", "tier": "TRIVIAL", - "start_line": 546, - "end_line": 546, + "start_line": 549, + "end_line": 549, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10591,8 +10813,8 @@ "name": "toggleFilterDropdown", "type": "Function", "tier": "TRIVIAL", - "start_line": 561, - "end_line": 561, + "start_line": 564, + "end_line": 564, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10609,8 +10831,8 @@ "name": "toggleFilterValue", "type": "Function", "tier": "TRIVIAL", - "start_line": 592, - "end_line": 592, + "start_line": 595, + "end_line": 595, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10627,8 +10849,8 @@ "name": "clearColumnFilter", "type": "Function", "tier": "TRIVIAL", - "start_line": 612, - "end_line": 612, + "start_line": 615, + "end_line": 615, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10645,8 +10867,8 @@ "name": "selectAllColumnFilterValues", "type": "Function", "tier": "TRIVIAL", - "start_line": 626, - "end_line": 626, + "start_line": 629, + "end_line": 629, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10663,8 +10885,8 @@ "name": "updateColumnFilterSearch", "type": "Function", "tier": "TRIVIAL", - "start_line": 643, - "end_line": 643, + "start_line": 646, + "end_line": 646, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10681,8 +10903,8 @@ "name": "hasColumnFilter", "type": "Function", "tier": "TRIVIAL", - "start_line": 655, - "end_line": 655, + "start_line": 658, + "end_line": 658, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10699,8 +10921,8 @@ "name": "doesDashboardPassColumnFilters", "type": "Function", "tier": "TRIVIAL", - "start_line": 667, - "end_line": 667, + "start_line": 670, + "end_line": 670, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10717,8 +10939,8 @@ "name": "getSortValue", "type": "Function", "tier": "TRIVIAL", - "start_line": 686, - "end_line": 686, + "start_line": 689, + "end_line": 689, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10735,8 +10957,8 @@ "name": "handleSort", "type": "Function", "tier": "TRIVIAL", - "start_line": 706, - "end_line": 706, + "start_line": 709, + "end_line": 709, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10753,8 +10975,8 @@ "name": "getSortIndicator", "type": "Function", "tier": "TRIVIAL", - "start_line": 725, - "end_line": 725, + "start_line": 728, + "end_line": 728, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10771,8 +10993,8 @@ "name": "applyGridTransforms", "type": "Function", "tier": "TRIVIAL", - "start_line": 739, - "end_line": 739, + "start_line": 742, + "end_line": 742, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10789,8 +11011,8 @@ "name": "toggleActionDropdown", "type": "Function", "tier": "TRIVIAL", - "start_line": 762, - "end_line": 762, + "start_line": 765, + "end_line": 765, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10807,8 +11029,8 @@ "name": "closeActionDropdown", "type": "Function", "tier": "TRIVIAL", - "start_line": 769, - "end_line": 769, + "start_line": 772, + "end_line": 772, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10825,8 +11047,8 @@ "name": "handleAction", "type": "Function", "tier": "TRIVIAL", - "start_line": 774, - "end_line": 774, + "start_line": 777, + "end_line": 777, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10843,8 +11065,8 @@ "name": "handleValidate", "type": "Function", "tier": "TRIVIAL", - "start_line": 818, - "end_line": 818, + "start_line": 821, + "end_line": 821, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10861,8 +11083,8 @@ "name": "handleTargetEnvChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 856, - "end_line": 856, + "start_line": 859, + "end_line": 859, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10879,8 +11101,8 @@ "name": "loadDatabases", "type": "Function", "tier": "TRIVIAL", - "start_line": 869, - "end_line": 869, + "start_line": 872, + "end_line": 872, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10897,8 +11119,8 @@ "name": "handleMappingUpdate", "type": "Function", "tier": "TRIVIAL", - "start_line": 887, - "end_line": 887, + "start_line": 890, + "end_line": 890, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10915,8 +11137,8 @@ "name": "loadDbMappings", "type": "Function", "tier": "TRIVIAL", - "start_line": 894, - "end_line": 894, + "start_line": 897, + "end_line": 897, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10933,8 +11155,8 @@ "name": "calculateDryRun", "type": "Function", "tier": "TRIVIAL", - "start_line": 925, - "end_line": 925, + "start_line": 928, + "end_line": 928, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10951,8 +11173,8 @@ "name": "handleBulkMigrate", "type": "Function", "tier": "TRIVIAL", - "start_line": 976, - "end_line": 976, + "start_line": 979, + "end_line": 979, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10969,8 +11191,8 @@ "name": "handleBulkBackup", "type": "Function", "tier": "TRIVIAL", - "start_line": 1023, - "end_line": 1023, + "start_line": 1026, + "end_line": 1026, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -10987,8 +11209,8 @@ "name": "handleTaskStatusClick", "type": "Function", "tier": "TRIVIAL", - "start_line": 1060, - "end_line": 1060, + "start_line": 1063, + "end_line": 1063, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11005,8 +11227,8 @@ "name": "navigateToDashboardDetail", "type": "Function", "tier": "TRIVIAL", - "start_line": 1069, - "end_line": 1069, + "start_line": 1072, + "end_line": 1072, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11023,8 +11245,8 @@ "name": "getStatusBadgeClass", "type": "Function", "tier": "TRIVIAL", - "start_line": 1078, - "end_line": 1078, + "start_line": 1081, + "end_line": 1081, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11041,8 +11263,8 @@ "name": "isGitBusy", "type": "Function", "tier": "TRIVIAL", - "start_line": 1090, - "end_line": 1090, + "start_line": 1093, + "end_line": 1093, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11059,8 +11281,8 @@ "name": "setGitBusy", "type": "Function", "tier": "TRIVIAL", - "start_line": 1094, - "end_line": 1094, + "start_line": 1097, + "end_line": 1097, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11077,8 +11299,8 @@ "name": "ensureGitConfigs", "type": "Function", "tier": "TRIVIAL", - "start_line": 1103, - "end_line": 1103, + "start_line": 1106, + "end_line": 1106, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11095,8 +11317,8 @@ "name": "updateDashboardGitState", "type": "Function", "tier": "TRIVIAL", - "start_line": 1109, - "end_line": 1109, + "start_line": 1112, + "end_line": 1112, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11113,8 +11335,8 @@ "name": "normalizeRepositoryStatusPayload", "type": "Function", "tier": "TRIVIAL", - "start_line": 1122, - "end_line": 1122, + "start_line": 1125, + "end_line": 1125, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11131,8 +11353,8 @@ "name": "fetchDashboardGitStatusesBatch", "type": "Function", "tier": "TRIVIAL", - "start_line": 1159, - "end_line": 1159, + "start_line": 1162, + "end_line": 1162, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11149,8 +11371,8 @@ "name": "refreshDashboardGitState", "type": "Function", "tier": "TRIVIAL", - "start_line": 1215, - "end_line": 1215, + "start_line": 1218, + "end_line": 1218, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11167,8 +11389,8 @@ "name": "hydrateVisibleGitStatusesBatch", "type": "Function", "tier": "TRIVIAL", - "start_line": 1219, - "end_line": 1219, + "start_line": 1222, + "end_line": 1222, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11185,8 +11407,8 @@ "name": "handleGitInit", "type": "Function", "tier": "TRIVIAL", - "start_line": 1232, - "end_line": 1232, + "start_line": 1235, + "end_line": 1235, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11203,8 +11425,8 @@ "name": "handleGitSync", "type": "Function", "tier": "TRIVIAL", - "start_line": 1268, - "end_line": 1268, + "start_line": 1271, + "end_line": 1271, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11221,8 +11443,8 @@ "name": "handleGitCommit", "type": "Function", "tier": "TRIVIAL", - "start_line": 1281, - "end_line": 1281, + "start_line": 1284, + "end_line": 1284, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11239,8 +11461,8 @@ "name": "handleGitPull", "type": "Function", "tier": "TRIVIAL", - "start_line": 1309, - "end_line": 1309, + "start_line": 1312, + "end_line": 1312, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11257,8 +11479,8 @@ "name": "handleGitPush", "type": "Function", "tier": "TRIVIAL", - "start_line": 1323, - "end_line": 1323, + "start_line": 1326, + "end_line": 1326, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11275,8 +11497,8 @@ "name": "getTaskStatusIcon", "type": "Function", "tier": "TRIVIAL", - "start_line": 1338, - "end_line": 1338, + "start_line": 1341, + "end_line": 1341, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11293,8 +11515,8 @@ "name": "getPaginationRange", "type": "Function", "tier": "TRIVIAL", - "start_line": 1359, - "end_line": 1359, + "start_line": 1362, + "end_line": 1362, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11388,7 +11610,7 @@ "type": "Page", "tier": "STANDARD", "start_line": 1, - "end_line": 1054, + "end_line": 1056, "tags": { "TIER": "CRITICAL", "PURPOSE": "Dashboard Detail View - Overview of charts and datasets linked to a dashboard", @@ -11413,7 +11635,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 1054, + "end_line": 1056, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/dashboards/[id]/+page.svelte", "TIER": "TRIVIAL", @@ -11425,8 +11647,8 @@ "name": "loadDashboardPage", "type": "Function", "tier": "TRIVIAL", - "start_line": 84, - "end_line": 84, + "start_line": 86, + "end_line": 86, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11443,8 +11665,8 @@ "name": "loadDashboardDetail", "type": "Function", "tier": "TRIVIAL", - "start_line": 94, - "end_line": 94, + "start_line": 96, + "end_line": 96, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11461,8 +11683,8 @@ "name": "loadTaskHistory", "type": "Function", "tier": "TRIVIAL", - "start_line": 113, - "end_line": 113, + "start_line": 115, + "end_line": 115, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11479,8 +11701,8 @@ "name": "releaseThumbnailUrl", "type": "Function", "tier": "TRIVIAL", - "start_line": 130, - "end_line": 130, + "start_line": 132, + "end_line": 132, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11497,8 +11719,8 @@ "name": "loadThumbnail", "type": "Function", "tier": "TRIVIAL", - "start_line": 137, - "end_line": 137, + "start_line": 139, + "end_line": 139, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11515,8 +11737,8 @@ "name": "runBackupTask", "type": "Function", "tier": "TRIVIAL", - "start_line": 162, - "end_line": 162, + "start_line": 164, + "end_line": 164, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11533,8 +11755,8 @@ "name": "runLlmValidationTask", "type": "Function", "tier": "TRIVIAL", - "start_line": 191, - "end_line": 191, + "start_line": 193, + "end_line": 193, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11551,8 +11773,8 @@ "name": "openLlmReport", "type": "Function", "tier": "TRIVIAL", - "start_line": 230, - "end_line": 230, + "start_line": 232, + "end_line": 232, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11569,8 +11791,8 @@ "name": "toTaskTypeLabel", "type": "Function", "tier": "TRIVIAL", - "start_line": 239, - "end_line": 239, + "start_line": 241, + "end_line": 241, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11587,8 +11809,8 @@ "name": "getTaskStatusClasses", "type": "Function", "tier": "TRIVIAL", - "start_line": 246, - "end_line": 246, + "start_line": 248, + "end_line": 248, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11605,8 +11827,8 @@ "name": "getValidationStatus", "type": "Function", "tier": "TRIVIAL", - "start_line": 258, - "end_line": 258, + "start_line": 260, + "end_line": 260, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11623,8 +11845,8 @@ "name": "getValidationStatusClasses", "type": "Function", "tier": "TRIVIAL", - "start_line": 275, - "end_line": 275, + "start_line": 277, + "end_line": 277, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11641,8 +11863,8 @@ "name": "goBack", "type": "Function", "tier": "TRIVIAL", - "start_line": 285, - "end_line": 285, + "start_line": 287, + "end_line": 287, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11659,8 +11881,8 @@ "name": "openDataset", "type": "Function", "tier": "TRIVIAL", - "start_line": 289, - "end_line": 289, + "start_line": 291, + "end_line": 291, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11677,8 +11899,8 @@ "name": "formatDate", "type": "Function", "tier": "TRIVIAL", - "start_line": 293, - "end_line": 293, + "start_line": 295, + "end_line": 295, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11695,8 +11917,8 @@ "name": "loadLlmStatus", "type": "Function", "tier": "TRIVIAL", - "start_line": 300, - "end_line": 300, + "start_line": 302, + "end_line": 302, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11713,8 +11935,8 @@ "name": "hasGitRepository", "type": "Function", "tier": "TRIVIAL", - "start_line": 311, - "end_line": 311, + "start_line": 313, + "end_line": 313, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11731,8 +11953,8 @@ "name": "resolveGitSyncState", "type": "Function", "tier": "TRIVIAL", - "start_line": 317, - "end_line": 317, + "start_line": 319, + "end_line": 319, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11749,8 +11971,8 @@ "name": "allChangedFiles", "type": "Function", "tier": "TRIVIAL", - "start_line": 342, - "end_line": 342, + "start_line": 344, + "end_line": 344, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11767,8 +11989,8 @@ "name": "countChangedByAnyPath", "type": "Function", "tier": "TRIVIAL", - "start_line": 350, - "end_line": 350, + "start_line": 352, + "end_line": 352, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11785,8 +12007,8 @@ "name": "getGitStatusMeta", "type": "Function", "tier": "TRIVIAL", - "start_line": 356, - "end_line": 356, + "start_line": 358, + "end_line": 358, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11803,8 +12025,8 @@ "name": "loadGitStatus", "type": "Function", "tier": "TRIVIAL", - "start_line": 400, - "end_line": 400, + "start_line": 402, + "end_line": 402, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11821,8 +12043,8 @@ "name": "loadGitDiffPreview", "type": "Function", "tier": "TRIVIAL", - "start_line": 428, - "end_line": 428, + "start_line": 430, + "end_line": 430, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11839,8 +12061,8 @@ "name": "runGitSyncAndOpenCommit", "type": "Function", "tier": "TRIVIAL", - "start_line": 450, - "end_line": 450, + "start_line": 452, + "end_line": 452, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11857,8 +12079,8 @@ "name": "runGitPull", "type": "Function", "tier": "TRIVIAL", - "start_line": 469, - "end_line": 469, + "start_line": 471, + "end_line": 471, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11875,8 +12097,8 @@ "name": "runGitPush", "type": "Function", "tier": "TRIVIAL", - "start_line": 483, - "end_line": 483, + "start_line": 485, + "end_line": 485, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -11893,8 +12115,8 @@ "name": "handleBranchChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 497, - "end_line": 497, + "start_line": 499, + "end_line": 499, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14270,7 +14492,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 418, + "end_line": 773, "tags": { "PURPOSE": "Auto-generated module for frontend/src/routes/profile/+page.svelte", "TIER": "TRIVIAL", @@ -14278,12 +14500,66 @@ }, "relations": [], "children": [ + { + "name": "createSecuritySummaryDefault", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 38, + "end_line": 38, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "normalizeStartPage", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 49, + "end_line": 49, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "normalizeDensity", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 58, + "end_line": 58, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "parseValidationErrorsFromError", "type": "Function", "tier": "TRIVIAL", - "start_line": 89, - "end_line": 89, + "start_line": 168, + "end_line": 168, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14300,8 +14576,44 @@ "name": "setSavedSnapshot", "type": "Function", "tier": "TRIVIAL", - "start_line": 103, - "end_line": 103, + "start_line": 182, + "end_line": 182, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "syncLocalUiPreferenceCaches", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 196, + "end_line": 196, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "applyPreferenceResponse", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 207, + "end_line": 207, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14318,8 +14630,8 @@ "name": "loadPreference", "type": "Function", "tier": "TRIVIAL", - "start_line": 111, - "end_line": 111, + "start_line": 242, + "end_line": 242, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14336,8 +14648,8 @@ "name": "loadLookupCandidates", "type": "Function", "tier": "TRIVIAL", - "start_line": 119, - "end_line": 119, + "start_line": 247, + "end_line": 247, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14354,8 +14666,44 @@ "name": "handleSelectCandidate", "type": "Function", "tier": "TRIVIAL", - "start_line": 154, - "end_line": 154, + "start_line": 282, + "end_line": 282, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleGitTokenInput", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 287, + "end_line": 287, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleClearGitToken", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 294, + "end_line": 294, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14372,8 +14720,8 @@ "name": "handleEnvironmentChange", "type": "Function", "tier": "TRIVIAL", - "start_line": 159, - "end_line": 159, + "start_line": 302, + "end_line": 302, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14390,8 +14738,8 @@ "name": "handleSave", "type": "Function", "tier": "TRIVIAL", - "start_line": 166, - "end_line": 166, + "start_line": 309, + "end_line": 309, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14408,8 +14756,8 @@ "name": "handleCancel", "type": "Function", "tier": "TRIVIAL", - "start_line": 208, - "end_line": 208, + "start_line": 357, + "end_line": 357, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -14434,7 +14782,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 204, + "end_line": 269, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, profile, integration, preload, cancel, reload", @@ -14466,7 +14814,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 197, + "end_line": 252, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, profile, integration, lookup, persistence, fallback", @@ -15444,7 +15792,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 339, + "end_line": 532, "tags": { "SEMANTICS": "git, settings, configuration, integration", "PURPOSE": "Manage Git server configurations for dashboard versioning.", @@ -15458,8 +15806,8 @@ "name": "loadConfigs", "type": "Function", "tier": "STANDARD", - "start_line": 45, - "end_line": 58, + "start_line": 48, + "end_line": 61, "tags": { "PURPOSE": "Fetches existing git configurations.", "PRE": "Component is mounted.", @@ -15473,12 +15821,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.7 @@ -15488,8 +15836,8 @@ "name": "handleTest", "type": "Function", "tier": "STANDARD", - "start_line": 62, - "end_line": 83, + "start_line": 65, + "end_line": 93, "tags": { "PURPOSE": "Tests connection to a git server with current form data.", "PRE": "newConfig contains valid provider, url, and pat.", @@ -15503,12 +15851,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 62 + "line_number": 65 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 62 + "line_number": 65 } ], "score": 0.7 @@ -15518,8 +15866,8 @@ "name": "handleSave", "type": "Function", "tier": "STANDARD", - "start_line": 85, - "end_line": 101, + "start_line": 95, + "end_line": 129, "tags": { "PURPOSE": "Saves a new git configuration.", "PRE": "newConfig is valid and tested.", @@ -15533,23 +15881,111 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 95 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 95 } ], "score": 0.7 } }, + { + "name": "handleEdit", + "type": "Function", + "tier": "STANDARD", + "start_line": 131, + "end_line": 151, + "tags": { + "PURPOSE": "Populates the form with an existing config to edit.", + "PARAM": "{Object} config - Configuration object to edit.", + "POST": "Form is populated and isEditing state is set." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 131 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 131 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 131 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 131 + } + ], + "score": 0.30000000000000004 + } + }, + { + "name": "resetForm", + "type": "Function", + "tier": "STANDARD", + "start_line": 153, + "end_line": 169, + "tags": { + "PURPOSE": "Resets the configuration form." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 153 + } + ], + "score": 0.0 + } + }, { "name": "handleDelete", "type": "Function", "tier": "STANDARD", - "start_line": 103, - "end_line": 124, + "start_line": 172, + "end_line": 193, "tags": { "PURPOSE": "Deletes a git configuration by ID.", "PARAM": "{string} id - Configuration ID.", @@ -15564,12 +16000,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 103 + "line_number": 172 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 103 + "line_number": 172 } ], "score": 0.7 @@ -15579,8 +16015,8 @@ "name": "loadGiteaRepos", "type": "Function", "tier": "STANDARD", - "start_line": 126, - "end_line": 147, + "start_line": 195, + "end_line": 218, "tags": { "PURPOSE": "Loads repositories from selected Gitea config.", "PRE": "selectedGiteaConfigId is set.", @@ -15594,12 +16030,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 126 + "line_number": 195 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 126 + "line_number": 195 } ], "score": 0.7 @@ -15609,8 +16045,8 @@ "name": "handleCreateGiteaRepo", "type": "Function", "tier": "STANDARD", - "start_line": 149, - "end_line": 178, + "start_line": 220, + "end_line": 249, "tags": { "PURPOSE": "Creates new repository on selected Gitea server.", "PRE": "selectedGiteaConfigId and newGiteaRepo.name are set.", @@ -15624,12 +16060,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 149 + "line_number": 220 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 149 + "line_number": 220 } ], "score": 0.7 @@ -15639,8 +16075,8 @@ "name": "handleDeleteGiteaRepo", "type": "Function", "tier": "STANDARD", - "start_line": 180, - "end_line": 208, + "start_line": 251, + "end_line": 284, "tags": { "PURPOSE": "Deletes repository from selected Gitea server.", "PRE": "selectedGiteaConfigId is set.", @@ -15654,12 +16090,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 180 + "line_number": 251 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 180 + "line_number": 251 } ], "score": 0.7 @@ -15696,100 +16132,175 @@ { "store": "t", "type": "READS_FROM", - "line": 73 + "line": 80 }, { "store": "t", "type": "READS_FROM", - "line": 75 + "line": 83 }, { "store": "t", "type": "READS_FROM", - "line": 78 + "line": 88 }, { "store": "t", "type": "READS_FROM", - "line": 95 + "line": 112 }, { "store": "t", "type": "READS_FROM", - "line": 111 + "line": 120 }, { "store": "t", "type": "READS_FROM", - "line": 115 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 217 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 221 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 223 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 239 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 252 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 254 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 254 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 256 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 264 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 265 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 266 + "line": 180 }, { "store": "t", "type": "READS_FROM", - "line": 270 + "line": 184 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 293 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 297 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 299 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 330 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 346 }, { "store": "t", "type": "READS_FROM", - "line": 273 + "line": 371 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 372 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 376 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 378 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 381 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 390 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 394 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 399 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 404 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 416 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 420 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 422 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 426 } ] }, + { + "name": "frontend.src.routes.settings.git.__tests__.git_settings_page_ux_test", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 209, + "tags": { + "PURPOSE": "Test UX states and transitions for the Git Settings page", + "UX_STATE": "Editing form state", + "UX_FEEDBACK": "Save configuration" + }, + "relations": [ + { + "type": "VERIFIES", + "target": "../+page.svelte" + } + ], + "children": [], + "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 + }, + { + "message": "Invalid @RELATION predicate: VERIFIES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.17500000000000004 + } + }, { "name": "GitDashboardPage", "type": "Component", @@ -16622,7 +17133,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 383, + "end_line": 468, "tags": { "TIER": "STANDARD", "SEMANTICS": "git, service, api, client", @@ -16637,7 +17148,7 @@ "type": "Action", "tier": "STANDARD", "start_line": 22, - "end_line": 381, + "end_line": 466, "tags": { "PURPOSE": "Promotes changes between branches via MR or direct merge.", "PRE": "Dashboard repository must be initialized.", @@ -17571,6 +18082,49 @@ "score": 1.0 } }, + { + "name": "frontend.src.services.__tests__.gitService_test", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 245, + "tags": { + "PURPOSE": "API client tests ensuring correct endpoints are called per contract" + }, + "relations": [ + { + "type": "VERIFIES", + "target": "../gitService.js" + } + ], + "children": [], + "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 + }, + { + "message": "Invalid @RELATION predicate: VERIFIES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.17500000000000004 + } + }, { "name": "DashboardGrid", "type": "Component", @@ -23189,6 +23743,11 @@ "deploy" ], "data_flow": [ + { + "store": "bindable", + "type": "WRITES_TO", + "line": 22 + }, { "store": "props", "type": "WRITES_TO", @@ -23301,7 +23860,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 181, + "end_line": 180, "tags": { "SEMANTICS": "git, conflict, resolution, merge", "PURPOSE": "UI for resolving merge conflicts (Keep Mine / Keep Theirs).", @@ -23316,8 +23875,8 @@ "name": "resolve", "type": "Function", "tier": "STANDARD", - "start_line": 32, - "end_line": 48, + "start_line": 31, + "end_line": 47, "tags": { "PURPOSE": "Set resolution strategy for a file.", "PRE": "file path must exist in conflicts array.", @@ -23333,12 +23892,12 @@ { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 32 + "line_number": 31 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 32 + "line_number": 31 } ], "score": 0.7 @@ -23348,8 +23907,8 @@ "name": "handleSave", "type": "Function", "tier": "STANDARD", - "start_line": 50, - "end_line": 76, + "start_line": 49, + "end_line": 75, "tags": { "PURPOSE": "Validate and submit resolutions.", "PRE": "All conflicts must have a resolution.", @@ -23385,15 +23944,20 @@ "resolve" ], "data_flow": [ + { + "store": "bindable", + "type": "WRITES_TO", + "line": 20 + }, { "store": "props", "type": "WRITES_TO", - "line": 22 + "line": 21 }, { "store": "state", "type": "WRITES_TO", - "line": 29 + "line": 28 } ] }, @@ -23834,6 +24398,11 @@ "change" ], "data_flow": [ + { + "store": "bindable", + "type": "WRITES_TO", + "line": 25 + }, { "store": "props", "type": "WRITES_TO", @@ -23901,7 +24470,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 862, + "end_line": 1204, "tags": { "SEMANTICS": "git, manager, dashboard, version_control, tabs, workflow", "PURPOSE": "\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 UI \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f Git \u0441 \u0444\u043e\u043a\u0443\u0441\u043e\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 (commit -> promote -> deploy).", @@ -23914,8 +24483,8 @@ "name": "normalizeEnvStage", "type": "Function", "tier": "STANDARD", - "start_line": 85, - "end_line": 96, + "start_line": 97, + "end_line": 108, "tags": { "PURPOSE": "Normalize environment stage with legacy fallback.", "POST": "Returns DEV/PREPROD/PROD." @@ -23928,22 +24497,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 97 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 97 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 85 + "line_number": 97 } ], "score": 0.30000000000000004 @@ -23953,8 +24522,8 @@ "name": "stageBadgeClass", "type": "Function", "tier": "STANDARD", - "start_line": 98, - "end_line": 108, + "start_line": 110, + "end_line": 120, "tags": { "PURPOSE": "Return visual class for environment stage badges.", "POST": "Stage badge is color-coded by risk level." @@ -23967,22 +24536,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 110 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 110 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 110 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 98 + "line_number": 110 } ], "score": 0.30000000000000004 @@ -23992,8 +24561,8 @@ "name": "resolveCurrentEnvironmentId", "type": "Function", "tier": "STANDARD", - "start_line": 110, - "end_line": 120, + "start_line": 122, + "end_line": 132, "tags": { "PURPOSE": "Resolve active environment id for current dashboard session.", "POST": "Returns env id from prop or selected_env_id in localStorage." @@ -24006,22 +24575,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 110 + "line_number": 122 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 110 + "line_number": 122 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 110 + "line_number": 122 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 110 + "line_number": 122 } ], "score": 0.30000000000000004 @@ -24031,8 +24600,8 @@ "name": "applyGitflowStageDefaults", "type": "Function", "tier": "STANDARD", - "start_line": 122, - "end_line": 145, + "start_line": 134, + "end_line": 157, "tags": { "PURPOSE": "Apply GitFlow defaults by current environment stage.", "POST": "Promote branches and preferred deploy target stage are set." @@ -24045,22 +24614,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 134 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 134 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 134 } ], "score": 0.30000000000000004 @@ -24070,8 +24639,8 @@ "name": "loadCurrentEnvironmentStage", "type": "Function", "tier": "STANDARD", - "start_line": 147, - "end_line": 165, + "start_line": 159, + "end_line": 177, "tags": { "PURPOSE": "Detect current environment stage and bind GitFlow defaults.", "POST": "currentEnvStage and promote/deploy defaults are refreshed." @@ -24084,22 +24653,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 147 + "line_number": 159 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 147 + "line_number": 159 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 147 + "line_number": 159 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 147 + "line_number": 159 } ], "score": 0.30000000000000004 @@ -24109,8 +24678,8 @@ "name": "isNumericDashboardRef", "type": "Function", "tier": "STANDARD", - "start_line": 167, - "end_line": 175, + "start_line": 179, + "end_line": 187, "tags": { "PURPOSE": "Checks whether current dashboard reference is numeric ID.", "POST": "Returns true when dashboardId is digits-only." @@ -24123,22 +24692,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 167 + "line_number": 179 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 167 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 167 + "line_number": 179 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 167 + "line_number": 179 } ], "score": 0.30000000000000004 @@ -24148,8 +24717,8 @@ "name": "checkStatus", "type": "Function", "tier": "STANDARD", - "start_line": 177, - "end_line": 203, + "start_line": 189, + "end_line": 215, "tags": { "PURPOSE": "Verify repository initialization for dashboard slug.", "POST": "initialized status and config list are updated." @@ -24162,22 +24731,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 177 + "line_number": 189 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 177 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 177 + "line_number": 189 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 177 + "line_number": 189 } ], "score": 0.30000000000000004 @@ -24187,8 +24756,8 @@ "name": "loadWorkspace", "type": "Function", "tier": "STANDARD", - "start_line": 205, - "end_line": 225, + "start_line": 217, + "end_line": 237, "tags": { "PURPOSE": "Load current git status and combined diff for workspace tab.", "POST": "workspace status/diff are refreshed." @@ -24201,22 +24770,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 205 + "line_number": 217 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 205 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 205 + "line_number": 217 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 205 + "line_number": 217 } ], "score": 0.30000000000000004 @@ -24226,8 +24795,8 @@ "name": "handleSync", "type": "Function", "tier": "STANDARD", - "start_line": 227, - "end_line": 249, + "start_line": 239, + "end_line": 261, "tags": { "PURPOSE": "Sync latest dashboard config from Superset to git workspace.", "POST": "Workspace status is refreshed." @@ -24240,22 +24809,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 227 + "line_number": 239 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 227 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 227 + "line_number": 239 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 227 + "line_number": 239 } ], "score": 0.30000000000000004 @@ -24265,8 +24834,8 @@ "name": "handleGenerateMessage", "type": "Function", "tier": "STANDARD", - "start_line": 251, - "end_line": 270, + "start_line": 263, + "end_line": 282, "tags": { "PURPOSE": "Generate commit message from diff using LLM.", "POST": "commitMessage gets generated content." @@ -24279,22 +24848,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 263 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 263 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 263 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 263 } ], "score": 0.30000000000000004 @@ -24304,8 +24873,8 @@ "name": "handleCommit", "type": "Function", "tier": "STANDARD", - "start_line": 272, - "end_line": 296, + "start_line": 284, + "end_line": 308, "tags": { "PURPOSE": "Commit current workspace changes with provided message.", "POST": "Changes are committed and workspace is refreshed." @@ -24318,22 +24887,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 272 + "line_number": 284 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 272 + "line_number": 284 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 272 + "line_number": 284 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 272 + "line_number": 284 } ], "score": 0.30000000000000004 @@ -24343,8 +24912,8 @@ "name": "handlePull", "type": "Function", "tier": "STANDARD", - "start_line": 298, - "end_line": 315, + "start_line": 310, + "end_line": 507, "tags": { "PURPOSE": "Pull remote changes for current branch.", "POST": "Workspace status is refreshed." @@ -24357,22 +24926,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 298 + "line_number": 310 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 298 + "line_number": 310 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 298 + "line_number": 310 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 298 + "line_number": 310 } ], "score": 0.30000000000000004 @@ -24382,8 +24951,8 @@ "name": "handlePush", "type": "Function", "tier": "STANDARD", - "start_line": 317, - "end_line": 334, + "start_line": 509, + "end_line": 526, "tags": { "PURPOSE": "Push local commits to remote repository.", "POST": "Workspace status is refreshed." @@ -24396,22 +24965,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 317 + "line_number": 509 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 317 + "line_number": 509 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 317 + "line_number": 509 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 317 + "line_number": 509 } ], "score": 0.30000000000000004 @@ -24421,8 +24990,8 @@ "name": "handlePromote", "type": "Function", "tier": "STANDARD", - "start_line": 336, - "end_line": 384, + "start_line": 528, + "end_line": 576, "tags": { "PURPOSE": "Promote branch to the next stage via MR or unsafe direct mode.", "POST": "Promotion result is shown to user." @@ -24435,22 +25004,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 336 + "line_number": 528 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 336 + "line_number": 528 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 336 + "line_number": 528 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 336 + "line_number": 528 } ], "score": 0.30000000000000004 @@ -24460,8 +25029,8 @@ "name": "openDeployModal", "type": "Function", "tier": "STANDARD", - "start_line": 386, - "end_line": 402, + "start_line": 578, + "end_line": 594, "tags": { "PURPOSE": "Open deploy modal with extra confirmation for PROD context.", "POST": "Deploy modal is shown when confirmation passes." @@ -24474,22 +25043,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 386 + "line_number": 578 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 386 + "line_number": 578 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 386 + "line_number": 578 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 386 + "line_number": 578 } ], "score": 0.30000000000000004 @@ -24499,8 +25068,8 @@ "name": "getSelectedConfig", "type": "Function", "tier": "STANDARD", - "start_line": 404, - "end_line": 412, + "start_line": 596, + "end_line": 604, "tags": { "PURPOSE": "Return currently selected git server config.", "POST": "Config object or null." @@ -24513,22 +25082,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 404 + "line_number": 596 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 404 + "line_number": 596 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 404 + "line_number": 596 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 404 + "line_number": 596 } ], "score": 0.30000000000000004 @@ -24538,8 +25107,8 @@ "name": "resolveDefaultConfig", "type": "Function", "tier": "STANDARD", - "start_line": 414, - "end_line": 428, + "start_line": 606, + "end_line": 620, "tags": { "PURPOSE": "Resolve default git config for current session.", "POST": "Returns config by selected -> is_default -> CONNECTED -> first." @@ -24552,22 +25121,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 414 + "line_number": 606 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 414 + "line_number": 606 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 414 + "line_number": 606 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 414 + "line_number": 606 } ], "score": 0.30000000000000004 @@ -24577,8 +25146,8 @@ "name": "resolvePushProviderLabel", "type": "Function", "tier": "STANDARD", - "start_line": 430, - "end_line": 442, + "start_line": 622, + "end_line": 634, "tags": { "PURPOSE": "Resolve lower-case provider label for auto-push checkbox.", "POST": "Returns provider label, fallback \"git\"." @@ -24591,22 +25160,61 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 430 + "line_number": 622 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 430 + "line_number": 622 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 430 + "line_number": 622 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 430 + "line_number": 622 + } + ], + "score": 0.30000000000000004 + } + }, + { + "name": "extractHttpHost", + "type": "Function", + "tier": "STANDARD", + "start_line": 636, + "end_line": 652, + "tags": { + "PURPOSE": "Extract comparable host[:port] from URL string.", + "POST": "Returns lowercase host token or empty string." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 636 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 636 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 636 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 636 } ], "score": 0.30000000000000004 @@ -24616,8 +25224,8 @@ "name": "buildSuggestedRepoName", "type": "Function", "tier": "STANDARD", - "start_line": 444, - "end_line": 457, + "start_line": 654, + "end_line": 667, "tags": { "PURPOSE": "Build deterministic repository name from dashboard title/id.", "POST": "Returns kebab-case repository name." @@ -24630,22 +25238,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 444 + "line_number": 654 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 444 + "line_number": 654 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 444 + "line_number": 654 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 444 + "line_number": 654 } ], "score": 0.30000000000000004 @@ -24655,8 +25263,8 @@ "name": "handleCreateRemoteRepo", "type": "Function", "tier": "STANDARD", - "start_line": 459, - "end_line": 497, + "start_line": 669, + "end_line": 707, "tags": { "PURPOSE": "Create remote repository on selected Git provider.", "POST": "remoteUrl is filled from provider response." @@ -24669,22 +25277,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 459 + "line_number": 669 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 459 + "line_number": 669 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 459 + "line_number": 669 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 459 + "line_number": 669 } ], "score": 0.30000000000000004 @@ -24694,8 +25302,8 @@ "name": "handleInit", "type": "Function", "tier": "STANDARD", - "start_line": 499, - "end_line": 523, + "start_line": 709, + "end_line": 733, "tags": { "PURPOSE": "Initialize git repository for dashboard.", "POST": "Repository is linked and workspace is loaded." @@ -24708,22 +25316,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 499 + "line_number": 709 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 499 + "line_number": 709 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 499 + "line_number": 709 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 499 + "line_number": 709 } ], "score": 0.30000000000000004 @@ -24733,8 +25341,8 @@ "name": "closeModal", "type": "Function", "tier": "STANDARD", - "start_line": 525, - "end_line": 533, + "start_line": 735, + "end_line": 743, "tags": { "PURPOSE": "Close git manager modal.", "POST": "show=false." @@ -24747,22 +25355,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 525 + "line_number": 735 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 525 + "line_number": 735 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 525 + "line_number": 735 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 525 + "line_number": 735 } ], "score": 0.30000000000000004 @@ -24772,8 +25380,8 @@ "name": "handleBackdropClick", "type": "Function", "tier": "STANDARD", - "start_line": 535, - "end_line": 545, + "start_line": 745, + "end_line": 755, "tags": { "PURPOSE": "Close modal on backdrop click.", "POST": "show=false if clicked on overlay." @@ -24786,22 +25394,22 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 535 + "line_number": 745 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 535 + "line_number": 745 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 535 + "line_number": 745 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 535 + "line_number": 745 } ], "score": 0.30000000000000004 @@ -24828,17 +25436,12 @@ { "store": "bindable", "type": "WRITES_TO", - "line": 28 + "line": 29 }, { "store": "props", "type": "WRITES_TO", - "line": 29 - }, - { - "store": "state", - "type": "WRITES_TO", - "line": 33 + "line": 30 }, { "store": "state", @@ -24863,7 +25466,7 @@ { "store": "state", "type": "WRITES_TO", - "line": 39 + "line": 38 }, { "store": "state", @@ -24883,7 +25486,7 @@ { "store": "state", "type": "WRITES_TO", - "line": 44 + "line": 43 }, { "store": "state", @@ -24928,7 +25531,7 @@ { "store": "state", "type": "WRITES_TO", - "line": 54 + "line": 53 }, { "store": "state", @@ -24976,112 +25579,576 @@ "line": 63 }, { - "store": "derived", + "store": "state", + "type": "WRITES_TO", + "line": 64 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 65 + }, + { + "store": "state", "type": "WRITES_TO", "line": 66 }, + { + "store": "state", + "type": "WRITES_TO", + "line": 67 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 68 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 69 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 70 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 71 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 72 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 73 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 74 + }, + { + "store": "state", + "type": "WRITES_TO", + "line": 75 + }, { "store": "derived", "type": "WRITES_TO", - "line": 76 + "line": 78 }, { - "store": "t", - "type": "READS_FROM", - "line": 241 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 263 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 265 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 284 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 286 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 307 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 326 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 467 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 506 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 512 - }, - { - "store": "t", + "store": "derived", "type": "WRITES_TO", - "line": 584 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 591 + "line": 88 }, { "store": "t", "type": "READS_FROM", - "line": 603 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 608 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 613 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 617 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 619 + "line": 253 }, { "store": "t", "type": "READS_FROM", - "line": 637 + "line": 275 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 277 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 296 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 298 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 371 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 382 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 400 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 405 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 418 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 425 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 430 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 440 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 444 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 454 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 458 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 473 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 482 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 484 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 494 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 518 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 677 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 716 }, { "store": "t", "type": "READS_FROM", "line": 722 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 757 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 758 + }, + { + "store": "derived", + "type": "WRITES_TO", + "line": 759 + }, + { + "store": "effect", + "type": "READS_FROM", + "line": 764 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 808 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 815 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 827 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 832 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 837 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 841 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 843 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 861 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 955 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 1090 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1094 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1097 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 1102 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 1106 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1120 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1133 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1146 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1154 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1162 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1171 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1178 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 1181 } ] }, + { + "name": "GitManager", + "type": "Module", + "tier": "TRIVIAL", + "start_line": 1, + "end_line": 1204, + "tags": { + "PURPOSE": "Auto-generated module for frontend/src/components/git/GitManager.svelte", + "TIER": "TRIVIAL", + "LAYER": "Unknown" + }, + "relations": [], + "children": [ + { + "name": "tryParseJsonObject", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 315, + "end_line": 315, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "extractUnfinishedMergeContext", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 326, + "end_line": 326, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "openUnfinishedMergeDialogFromError", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 353, + "end_line": 353, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "loadMergeRecoveryState", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 361, + "end_line": 361, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "closeUnfinishedMergeDialog", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 388, + "end_line": 388, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleOpenConflictResolver", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 395, + "end_line": 395, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleResolveConflicts", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 411, + "end_line": 411, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleAbortUnfinishedMerge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 436, + "end_line": 436, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleContinueUnfinishedMerge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 450, + "end_line": 450, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "getUnfinishedMergeCommandsText", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 465, + "end_line": 465, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "handleCopyUnfinishedMergeCommands", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 470, + "end_line": 470, + "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": "frontend.src.components.git.__tests__.git_manager_unfinished_merge_integration", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 43, + "tags": { + "TIER": "STANDARD", + "SEMANTICS": "git-manager, unfinished-merge, dialog, integration-test", + "PURPOSE": "Protect unresolved-merge dialog contract in GitManager pull flow.", + "LAYER": "UI Tests" + }, + "relations": [ + { + "type": "VERIFIES", + "target": "frontend/src/components/git/GitManager.svelte" + } + ], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Invalid @RELATION predicate: VERIFIES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.85 + } + }, { "name": "DocPreview", "type": "Component", @@ -26646,7 +27713,7 @@ "name": "CleanReleaseTUI", "type": "Class", "tier": "STANDARD", - "start_line": 80, + "start_line": 44, "end_line": null, "tags": { "PURPOSE": "Curses-based application for compliance monitoring.", @@ -26659,7 +27726,7 @@ "name": "run_checks", "type": "Function", "tier": "STANDARD", - "start_line": 183, + "start_line": 277, "end_line": null, "tags": { "PURPOSE": "Execute compliance orchestrator run and update UI state." @@ -26670,64 +27737,64 @@ "valid": false, "issues": [ { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 183", + "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 277", "severity": "ERROR", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 183", + "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 277", "severity": "ERROR", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 183", + "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 277", "severity": "ERROR", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 183 + "line_number": 277 } ], "score": 0.0 @@ -26738,24 +27805,24 @@ "valid": false, "issues": [ { - "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 80", + "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 44", "severity": "ERROR", - "line_number": 80 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 80 + "line_number": 44 }, { - "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 80", + "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 44", "severity": "ERROR", - "line_number": 80 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 80 + "line_number": 44 } ], "score": 0.0 @@ -26765,8 +27832,8 @@ "name": "__init__", "type": "Function", "tier": "TRIVIAL", - "start_line": 45, - "end_line": 45, + "start_line": 52, + "end_line": 52, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26780,11 +27847,65 @@ } }, { - "name": "__init__", + "name": "_build_repository", "type": "Function", "tier": "TRIVIAL", - "start_line": 88, - "end_line": 88, + "start_line": 72, + "end_line": 72, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_bootstrap_demo_repository", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 79, + "end_line": 79, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_bootstrap_real_repository", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 119, + "end_line": 119, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_resolve_candidate_id", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 180, + "end_line": 180, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26801,8 +27922,8 @@ "name": "draw_header", "type": "Function", "tier": "TRIVIAL", - "start_line": 105, - "end_line": 105, + "start_line": 190, + "end_line": 190, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26819,8 +27940,8 @@ "name": "draw_checks", "type": "Function", "tier": "TRIVIAL", - "start_line": 116, - "end_line": 116, + "start_line": 203, + "end_line": 203, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26837,8 +27958,8 @@ "name": "draw_sources", "type": "Function", "tier": "TRIVIAL", - "start_line": 149, - "end_line": 149, + "start_line": 236, + "end_line": 236, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26855,8 +27976,8 @@ "name": "draw_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 158, - "end_line": 158, + "start_line": 250, + "end_line": 250, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26873,8 +27994,8 @@ "name": "draw_footer", "type": "Function", "tier": "TRIVIAL", - "start_line": 177, - "end_line": 177, + "start_line": 271, + "end_line": 271, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26891,8 +28012,8 @@ "name": "clear_history", "type": "Function", "tier": "TRIVIAL", - "start_line": 241, - "end_line": 241, + "start_line": 367, + "end_line": 367, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26909,8 +28030,8 @@ "name": "refresh_screen", "type": "Function", "tier": "TRIVIAL", - "start_line": 249, - "end_line": 249, + "start_line": 376, + "end_line": 376, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26927,8 +28048,8 @@ "name": "loop", "type": "Function", "tier": "TRIVIAL", - "start_line": 262, - "end_line": 262, + "start_line": 389, + "end_line": 389, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26945,8 +28066,8 @@ "name": "tui_main", "type": "Function", "tier": "TRIVIAL", - "start_line": 275, - "end_line": 275, + "start_line": 402, + "end_line": 402, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -26963,8 +28084,8 @@ "name": "main", "type": "Function", "tier": "TRIVIAL", - "start_line": 281, - "end_line": 281, + "start_line": 408, + "end_line": 408, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -27365,7 +28486,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 116, + "end_line": 118, "tags": { "SEMANTICS": "setup, database, auth, permissions, seeding", "PURPOSE": "Populates the auth database with initial system permissions.", @@ -27388,7 +28509,7 @@ "type": "Constant", "tier": "STANDARD", "start_line": 24, - "end_line": 49, + "end_line": 50, "tags": {}, "relations": [], "children": [], @@ -27402,8 +28523,8 @@ "name": "seed_permissions", "type": "Function", "tier": "STANDARD", - "start_line": 51, - "end_line": 111, + "start_line": 52, + "end_line": 113, "tags": { "PURPOSE": "Inserts missing permissions into the database.", "POST": "All INITIAL_PERMISSIONS exist in the DB." @@ -27416,12 +28537,12 @@ { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 51 + "line_number": 52 }, { "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", "severity": "WARNING", - "line_number": 51 + "line_number": 52 } ], "score": 0.6 @@ -28140,13 +29261,13 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 98, + "end_line": 159, "tags": { "TIER": "STANDARD", - "SEMANTICS": "profile, schemas, pydantic, preferences, superset, lookup", - "PURPOSE": "Defines API schemas for profile preference persistence and Superset account lookup flows.", + "SEMANTICS": "profile, schemas, pydantic, preferences, superset, lookup, security, git, ux", + "PURPOSE": "Defines API schemas for profile preference persistence, security read-only snapshot, and Superset account lookup.", "LAYER": "API", - "INVARIANT": "Schema shapes stay stable for profile UI states and dashboards filter metadata." + "INVARIANT": "Schema shapes stay stable for profile UI states and backend preference contracts." }, "relations": [ { @@ -28156,11 +29277,47 @@ ], "children": [ { - "name": "ProfilePreference", + "name": "ProfilePermissionState", "type": "Class", "tier": "STANDARD", "start_line": 18, - "end_line": 31, + "end_line": 24, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Represents one permission badge state for profile read-only security view." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "ProfileSecuritySummary", + "type": "Class", + "tier": "STANDARD", + "start_line": 27, + "end_line": 37, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Read-only security and access snapshot for current user." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "ProfilePreference", + "type": "Class", + "tier": "STANDARD", + "start_line": 40, + "end_line": 63, "tags": { "TIER": "STANDARD", "PURPOSE": "Represents persisted profile preference for a single authenticated user." @@ -28177,11 +29334,11 @@ "name": "ProfilePreferenceUpdateRequest", "type": "Class", "tier": "STANDARD", - "start_line": 34, - "end_line": 46, + "start_line": 66, + "end_line": 106, "tags": { "TIER": "STANDARD", - "PURPOSE": "Request payload for updating current user's dashboard filter preference." + "PURPOSE": "Request payload for updating current user's profile settings." }, "relations": [], "children": [], @@ -28195,8 +29352,8 @@ "name": "ProfilePreferenceResponse", "type": "Class", "tier": "STANDARD", - "start_line": 49, - "end_line": 57, + "start_line": 109, + "end_line": 118, "tags": { "TIER": "STANDARD", "PURPOSE": "Response envelope for profile preference read/update endpoints." @@ -28213,8 +29370,8 @@ "name": "SupersetAccountLookupRequest", "type": "Class", "tier": "STANDARD", - "start_line": 60, - "end_line": 70, + "start_line": 121, + "end_line": 131, "tags": { "TIER": "STANDARD", "PURPOSE": "Query contract for Superset account lookup by selected environment." @@ -28231,8 +29388,8 @@ "name": "SupersetAccountCandidate", "type": "Class", "tier": "STANDARD", - "start_line": 73, - "end_line": 82, + "start_line": 134, + "end_line": 143, "tags": { "TIER": "STANDARD", "PURPOSE": "Canonical account candidate projected from Superset users payload." @@ -28249,8 +29406,8 @@ "name": "SupersetAccountLookupResponse", "type": "Class", "tier": "STANDARD", - "start_line": 85, - "end_line": 96, + "start_line": 146, + "end_line": 157, "tags": { "TIER": "STANDARD", "PURPOSE": "Response envelope for Superset account lookup (success or degraded mode)." @@ -31339,7 +32496,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 152, + "end_line": 252, "tags": { "TIER": "STANDARD", "SEMANTICS": "database, postgresql, sqlalchemy, session, persistence", @@ -31539,11 +32696,131 @@ } }, { - "name": "init_db", + "name": "_ensure_user_dashboard_preferences_columns", "type": "Function", "tier": "CRITICAL", "start_line": 98, - "end_line": 108, + "end_line": 156, + "tags": { + "PURPOSE": "Applies additive schema upgrades for user_dashboard_preferences table.", + "PRE": "bind_engine points to application database where profile table is stored.", + "POST": "Missing columns are added without data loss." + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 98 + } + ], + "score": 0.0 + } + }, + { + "name": "_ensure_git_server_configs_columns", + "type": "Function", + "tier": "CRITICAL", + "start_line": 159, + "end_line": 193, + "tags": { + "PURPOSE": "Applies additive schema upgrades for git_server_configs table.", + "PRE": "bind_engine points to application database.", + "POST": "Missing columns are added without data loss." + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 159 + } + ], + "score": 0.0 + } + }, + { + "name": "init_db", + "type": "Function", + "tier": "CRITICAL", + "start_line": 196, + "end_line": 208, "tags": { "PURPOSE": "Initializes the database by creating all tables.", "PRE": "engine, tasks_engine and auth_engine are initialized.", @@ -31558,42 +32835,42 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 196 } ], "score": 0.0 @@ -31603,8 +32880,8 @@ "name": "get_db", "type": "Function", "tier": "CRITICAL", - "start_line": 110, - "end_line": 122, + "start_line": 210, + "end_line": 222, "tags": { "PURPOSE": "Dependency for getting a database session.", "PRE": "SessionLocal is initialized.", @@ -31619,42 +32896,42 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 110 + "line_number": 210 } ], "score": 0.0 @@ -31664,8 +32941,8 @@ "name": "get_tasks_db", "type": "Function", "tier": "CRITICAL", - "start_line": 124, - "end_line": 136, + "start_line": 224, + "end_line": 236, "tags": { "PURPOSE": "Dependency for getting a tasks database session.", "PRE": "TasksSessionLocal is initialized.", @@ -31680,42 +32957,42 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 124 + "line_number": 224 } ], "score": 0.0 @@ -31725,8 +33002,8 @@ "name": "get_auth_db", "type": "Function", "tier": "CRITICAL", - "start_line": 138, - "end_line": 150, + "start_line": 238, + "end_line": 250, "tags": { "PURPOSE": "Dependency for getting an authentication database session.", "PRE": "AuthSessionLocal is initialized.", @@ -31741,42 +33018,42 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 238 } ], "score": 0.0 @@ -42029,7 +43306,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 1069, + "end_line": 1351, "tags": { "TIER": "STANDARD", "SEMANTICS": "git, routes, api, fastapi, repository, deployment", @@ -42056,8 +43333,8 @@ "name": "_build_no_repo_status_payload", "type": "Function", "tier": "STANDARD", - "start_line": 46, - "end_line": 67, + "start_line": 49, + "end_line": 70, "tags": { "PURPOSE": "Build a consistent status payload for dashboards without initialized repositories.", "PRE": "None.", @@ -42072,12 +43349,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 49 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 49 } ], "score": 0.7 @@ -42087,8 +43364,8 @@ "name": "_handle_unexpected_git_route_error", "type": "Function", "tier": "STANDARD", - "start_line": 70, - "end_line": 79, + "start_line": 73, + "end_line": 82, "tags": { "PURPOSE": "Convert unexpected route-level exceptions to stable 500 API responses.", "PRE": "`error` is a non-HTTPException instance.", @@ -42103,12 +43380,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 70 + "line_number": 73 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 70 + "line_number": 73 } ], "score": 0.7 @@ -42118,8 +43395,8 @@ "name": "_resolve_repository_status", "type": "Function", "tier": "STANDARD", - "start_line": 82, - "end_line": 105, + "start_line": 85, + "end_line": 108, "tags": { "PURPOSE": "Resolve repository status for one dashboard with graceful NO_REPO semantics.", "PRE": "`dashboard_id` is a valid integer.", @@ -42135,12 +43412,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 82 + "line_number": 85 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 82 + "line_number": 85 } ], "score": 0.7 @@ -42150,8 +43427,8 @@ "name": "_get_git_config_or_404", "type": "Function", "tier": "STANDARD", - "start_line": 108, - "end_line": 117, + "start_line": 111, + "end_line": 120, "tags": { "PURPOSE": "Resolve GitServerConfig by id or raise 404.", "PRE": "db session is available.", @@ -42165,12 +43442,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 108 + "line_number": 111 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 108 + "line_number": 111 } ], "score": 0.7 @@ -42180,8 +43457,8 @@ "name": "_find_dashboard_id_by_slug", "type": "Function", "tier": "STANDARD", - "start_line": 120, - "end_line": 143, + "start_line": 123, + "end_line": 146, "tags": { "PURPOSE": "Resolve dashboard numeric ID by slug in a specific environment.", "PRE": "dashboard_slug is non-empty.", @@ -42195,12 +43472,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 120 + "line_number": 123 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 120 + "line_number": 123 } ], "score": 0.7 @@ -42210,8 +43487,8 @@ "name": "_resolve_dashboard_id_from_ref", "type": "Function", "tier": "STANDARD", - "start_line": 146, - "end_line": 177, + "start_line": 149, + "end_line": 180, "tags": { "PURPOSE": "Resolve dashboard ID from slug-or-id reference for Git routes.", "PRE": "dashboard_ref is provided; env_id is required for slug values.", @@ -42225,12 +43502,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 146 + "line_number": 149 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 146 + "line_number": 149 } ], "score": 0.7 @@ -42240,8 +43517,8 @@ "name": "_resolve_repo_key_from_ref", "type": "Function", "tier": "STANDARD", - "start_line": 180, - "end_line": 209, + "start_line": 183, + "end_line": 212, "tags": { "PURPOSE": "Resolve repository folder key with slug-first strategy and deterministic fallback.", "PRE": "dashboard_id is resolved and valid.", @@ -42256,12 +43533,105 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 180 + "line_number": 183 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 180 + "line_number": 183 + } + ], + "score": 0.7 + } + }, + { + "name": "_sanitize_optional_identity_value", + "type": "Function", + "tier": "STANDARD", + "start_line": 215, + "end_line": 225, + "tags": { + "PURPOSE": "Normalize optional identity value into trimmed string or None.", + "PRE": "value may be None or blank.", + "POST": "Returns sanitized value suitable for git identity configuration.", + "RETURN": "Optional[str]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 215 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 215 + } + ], + "score": 0.7 + } + }, + { + "name": "_resolve_current_user_git_identity", + "type": "Function", + "tier": "STANDARD", + "start_line": 228, + "end_line": 266, + "tags": { + "PURPOSE": "Resolve configured Git username/email from current user's profile preferences.", + "PRE": "`db` may be stubbed in tests; `current_user` may be absent for direct handler invocations.", + "POST": "Returns tuple(username, email) only when both values are configured.", + "RETURN": "Optional[tuple[str, str]]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 228 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 228 + } + ], + "score": 0.7 + } + }, + { + "name": "_apply_git_identity_from_profile", + "type": "Function", + "tier": "STANDARD", + "start_line": 269, + "end_line": 289, + "tags": { + "PURPOSE": "Apply user-scoped Git identity to repository-local config before write/pull operations.", + "PRE": "dashboard_id is resolved; db/current_user may be missing in direct test invocation context.", + "POST": "git_service.configure_identity is called only when identity and method are available.", + "RETURN": "None" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 269 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 269 } ], "score": 0.7 @@ -42271,8 +43641,8 @@ "name": "get_git_configs", "type": "Function", "tier": "STANDARD", - "start_line": 211, - "end_line": 223, + "start_line": 292, + "end_line": 310, "tags": { "PURPOSE": "List all configured Git servers.", "PRE": "Database session `db` is available.", @@ -42291,8 +43661,8 @@ "name": "create_git_config", "type": "Function", "tier": "STANDARD", - "start_line": 225, - "end_line": 243, + "start_line": 312, + "end_line": 331, "tags": { "PURPOSE": "Register a new Git server configuration.", "PRE": "`config` contains valid GitServerConfigCreate data.", @@ -42308,12 +43678,33 @@ "score": 1.0 } }, + { + "name": "update_git_config", + "type": "Function", + "tier": "STANDARD", + "start_line": 333, + "end_line": 365, + "tags": { + "PURPOSE": "Update an existing Git server configuration.", + "PRE": "`config_id` corresponds to an existing configuration.", + "POST": "The configuration record is updated in the database.", + "PARAM": "config_update (GitServerConfigUpdate)", + "RETURN": "GitServerConfigSchema" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "delete_git_config", "type": "Function", "tier": "STANDARD", - "start_line": 245, - "end_line": 264, + "start_line": 367, + "end_line": 386, "tags": { "PURPOSE": "Remove a Git server configuration.", "PRE": "`config_id` corresponds to an existing configuration.", @@ -42332,8 +43723,8 @@ "name": "test_git_config", "type": "Function", "tier": "STANDARD", - "start_line": 266, - "end_line": 282, + "start_line": 388, + "end_line": 416, "tags": { "PURPOSE": "Validate connection to a Git server using provided credentials.", "PRE": "`config` contains provider, url, and pat.", @@ -42352,8 +43743,8 @@ "name": "list_gitea_repositories", "type": "Function", "tier": "STANDARD", - "start_line": 285, - "end_line": 312, + "start_line": 419, + "end_line": 446, "tags": { "PURPOSE": "List repositories in Gitea for a saved Gitea config.", "PRE": "config_id exists and provider is GITEA.", @@ -42371,8 +43762,8 @@ "name": "create_gitea_repository", "type": "Function", "tier": "STANDARD", - "start_line": 315, - "end_line": 348, + "start_line": 449, + "end_line": 482, "tags": { "PURPOSE": "Create a repository in Gitea for a saved Gitea config.", "PRE": "config_id exists and provider is GITEA.", @@ -42390,8 +43781,8 @@ "name": "create_remote_repository", "type": "Function", "tier": "STANDARD", - "start_line": 351, - "end_line": 408, + "start_line": 485, + "end_line": 542, "tags": { "PURPOSE": "Create repository on remote Git server using selected provider config.", "PRE": "config_id exists and PAT has creation permissions.", @@ -42409,8 +43800,8 @@ "name": "delete_gitea_repository", "type": "Function", "tier": "STANDARD", - "start_line": 411, - "end_line": 434, + "start_line": 545, + "end_line": 568, "tags": { "PURPOSE": "Delete repository in Gitea for a saved Gitea config.", "PRE": "config_id exists and provider is GITEA.", @@ -42428,8 +43819,8 @@ "name": "init_repository", "type": "Function", "tier": "STANDARD", - "start_line": 436, - "end_line": 491, + "start_line": 570, + "end_line": 625, "tags": { "PURPOSE": "Link a dashboard to a Git repository and perform initial clone/init.", "PRE": "`dashboard_ref` exists and `init_data` contains valid config_id and remote_url.", @@ -42448,8 +43839,8 @@ "name": "get_repository_binding", "type": "Function", "tier": "STANDARD", - "start_line": 493, - "end_line": 525, + "start_line": 627, + "end_line": 659, "tags": { "PURPOSE": "Return repository binding with provider metadata for selected dashboard.", "PRE": "`dashboard_ref` resolves to a valid dashboard and repository is initialized.", @@ -42469,8 +43860,8 @@ "name": "delete_repository", "type": "Function", "tier": "STANDARD", - "start_line": 527, - "end_line": 549, + "start_line": 661, + "end_line": 683, "tags": { "PURPOSE": "Delete local repository workspace and DB binding for selected dashboard.", "PRE": "`dashboard_ref` resolves to a valid dashboard.", @@ -42490,8 +43881,8 @@ "name": "get_branches", "type": "Function", "tier": "STANDARD", - "start_line": 551, - "end_line": 572, + "start_line": 685, + "end_line": 706, "tags": { "PURPOSE": "List all branches for a dashboard's repository.", "PRE": "Repository for `dashboard_ref` is initialized.", @@ -42511,8 +43902,8 @@ "name": "create_branch", "type": "Function", "tier": "STANDARD", - "start_line": 574, - "end_line": 597, + "start_line": 708, + "end_line": 734, "tags": { "PURPOSE": "Create a new branch in the dashboard's repository.", "PRE": "`dashboard_ref` repository exists and `branch_data` has name and from_branch.", @@ -42531,8 +43922,8 @@ "name": "checkout_branch", "type": "Function", "tier": "STANDARD", - "start_line": 599, - "end_line": 622, + "start_line": 736, + "end_line": 759, "tags": { "PURPOSE": "Switch the dashboard's repository to a specific branch.", "PRE": "`dashboard_ref` repository exists and branch `checkout_data.name` exists.", @@ -42551,8 +43942,8 @@ "name": "commit_changes", "type": "Function", "tier": "STANDARD", - "start_line": 624, - "end_line": 647, + "start_line": 761, + "end_line": 787, "tags": { "PURPOSE": "Stage and commit changes in the dashboard's repository.", "PRE": "`dashboard_ref` repository exists and `commit_data` has message and files.", @@ -42571,8 +43962,8 @@ "name": "push_changes", "type": "Function", "tier": "STANDARD", - "start_line": 649, - "end_line": 670, + "start_line": 789, + "end_line": 810, "tags": { "PURPOSE": "Push local commits to the remote repository.", "PRE": "`dashboard_ref` repository exists and has a remote configured.", @@ -42591,8 +43982,8 @@ "name": "pull_changes", "type": "Function", "tier": "STANDARD", - "start_line": 672, - "end_line": 693, + "start_line": 812, + "end_line": 857, "tags": { "PURPOSE": "Pull changes from the remote repository.", "PRE": "`dashboard_ref` repository exists and has a remote configured.", @@ -42607,12 +43998,107 @@ "score": 1.0 } }, + { + "name": "get_merge_status", + "type": "Function", + "tier": "STANDARD", + "start_line": 859, + "end_line": 878, + "tags": { + "PURPOSE": "Return unfinished-merge status for repository (web-only recovery support).", + "PRE": "`dashboard_ref` resolves to a valid dashboard repository.", + "POST": "Returns merge status payload." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "get_merge_conflicts", + "type": "Function", + "tier": "STANDARD", + "start_line": 881, + "end_line": 900, + "tags": { + "PURPOSE": "Return conflicted files with mine/theirs previews for web conflict resolver.", + "PRE": "`dashboard_ref` resolves to a valid dashboard repository.", + "POST": "Returns conflict file list." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "resolve_merge_conflicts", + "type": "Function", + "tier": "STANDARD", + "start_line": 903, + "end_line": 927, + "tags": { + "PURPOSE": "Apply mine/theirs/manual conflict resolutions from WebUI and stage files.", + "PRE": "`dashboard_ref` resolves; request contains at least one resolution item.", + "POST": "Resolved files are staged in index." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "abort_merge", + "type": "Function", + "tier": "STANDARD", + "start_line": 930, + "end_line": 949, + "tags": { + "PURPOSE": "Abort unfinished merge from WebUI flow.", + "PRE": "`dashboard_ref` resolves to repository.", + "POST": "Merge operation is aborted or reports no active merge." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "continue_merge", + "type": "Function", + "tier": "STANDARD", + "start_line": 952, + "end_line": 972, + "tags": { + "PURPOSE": "Finalize unfinished merge from WebUI flow.", + "PRE": "All conflicts are resolved and staged.", + "POST": "Merge commit is created." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "sync_dashboard", "type": "Function", "tier": "STANDARD", - "start_line": 695, - "end_line": 723, + "start_line": 975, + "end_line": 1003, "tags": { "PURPOSE": "Sync dashboard state from Superset to Git using the GitPlugin.", "PRE": "`dashboard_ref` is valid; GitPlugin is available.", @@ -42631,8 +44117,8 @@ "name": "promote_dashboard", "type": "Function", "tier": "STANDARD", - "start_line": 726, - "end_line": 824, + "start_line": 1006, + "end_line": 1106, "tags": { "PURPOSE": "Promote changes between branches via MR or direct merge.", "PRE": "dashboard repository is initialized and Git config is valid.", @@ -42650,8 +44136,8 @@ "name": "get_environments", "type": "Function", "tier": "STANDARD", - "start_line": 826, - "end_line": 846, + "start_line": 1108, + "end_line": 1128, "tags": { "PURPOSE": "List all deployment environments.", "PRE": "Config manager is accessible.", @@ -42670,8 +44156,8 @@ "name": "deploy_dashboard", "type": "Function", "tier": "STANDARD", - "start_line": 848, - "end_line": 876, + "start_line": 1130, + "end_line": 1158, "tags": { "PURPOSE": "Deploy dashboard from Git to a target environment.", "PRE": "`dashboard_ref` and `deploy_data.environment_id` are valid.", @@ -42690,8 +44176,8 @@ "name": "get_history", "type": "Function", "tier": "STANDARD", - "start_line": 878, - "end_line": 901, + "start_line": 1160, + "end_line": 1183, "tags": { "PURPOSE": "View commit history for a dashboard's repository.", "PRE": "`dashboard_ref` repository exists.", @@ -42711,8 +44197,8 @@ "name": "get_repository_status", "type": "Function", "tier": "STANDARD", - "start_line": 903, - "end_line": 924, + "start_line": 1185, + "end_line": 1206, "tags": { "PURPOSE": "Get current Git status for a dashboard repository.", "PRE": "`dashboard_ref` resolves to a valid dashboard.", @@ -42732,8 +44218,8 @@ "name": "get_repository_status_batch", "type": "Function", "tier": "STANDARD", - "start_line": 927, - "end_line": 968, + "start_line": 1209, + "end_line": 1250, "tags": { "PURPOSE": "Get Git statuses for multiple dashboard repositories in one request.", "PRE": "`request.dashboard_ids` is provided.", @@ -42753,8 +44239,8 @@ "name": "get_repository_diff", "type": "Function", "tier": "STANDARD", - "start_line": 970, - "end_line": 996, + "start_line": 1252, + "end_line": 1278, "tags": { "PURPOSE": "Get Git diff for a dashboard repository.", "PRE": "`dashboard_ref` repository exists.", @@ -42774,8 +44260,8 @@ "name": "generate_commit_message", "type": "Function", "tier": "STANDARD", - "start_line": 998, - "end_line": 1067, + "start_line": 1280, + "end_line": 1349, "tags": { "PURPOSE": "Generate a suggested commit message using LLM.", "PRE": "Repository for `dashboard_ref` is initialized.", @@ -44705,7 +46191,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 244, + "end_line": 293, "tags": { "TIER": "STANDARD", "SEMANTICS": "git, schemas, pydantic, api, contracts", @@ -44725,7 +46211,7 @@ "type": "Class", "tier": "TRIVIAL", "start_line": 16, - "end_line": 25, + "end_line": 27, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Base schema for Git server configuration attributes." @@ -44738,12 +46224,40 @@ "score": 1.0 } }, + { + "name": "GitServerConfigUpdate", + "type": "Class", + "tier": "STANDARD", + "start_line": 29, + "end_line": 38, + "tags": { + "PURPOSE": "Schema for updating an existing Git server configuration." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 29 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 29 + } + ], + "score": 0.5499999999999999 + } + }, { "name": "GitServerConfigCreate", "type": "Class", "tier": "STANDARD", - "start_line": 27, - "end_line": 32, + "start_line": 40, + "end_line": 45, "tags": { "PURPOSE": "Schema for creating a new Git server configuration." }, @@ -44755,12 +46269,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 27 + "line_number": 40 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 27 + "line_number": 40 } ], "score": 0.5499999999999999 @@ -44770,8 +46284,8 @@ "name": "GitServerConfigSchema", "type": "Class", "tier": "STANDARD", - "start_line": 34, - "end_line": 44, + "start_line": 47, + "end_line": 57, "tags": { "PURPOSE": "Schema for representing a Git server configuration with metadata." }, @@ -44783,12 +46297,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 47 } ], "score": 0.5499999999999999 @@ -44798,8 +46312,8 @@ "name": "GitRepositorySchema", "type": "Class", "tier": "STANDARD", - "start_line": 46, - "end_line": 60, + "start_line": 59, + "end_line": 73, "tags": { "PURPOSE": "Schema for tracking a local Git repository linked to a dashboard." }, @@ -44811,12 +46325,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 46 + "line_number": 59 } ], "score": 0.5499999999999999 @@ -44826,8 +46340,8 @@ "name": "BranchSchema", "type": "Class", "tier": "STANDARD", - "start_line": 62, - "end_line": 70, + "start_line": 75, + "end_line": 83, "tags": { "PURPOSE": "Schema for representing a Git branch metadata." }, @@ -44839,12 +46353,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 62 + "line_number": 75 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 62 + "line_number": 75 } ], "score": 0.5499999999999999 @@ -44854,8 +46368,8 @@ "name": "CommitSchema", "type": "Class", "tier": "STANDARD", - "start_line": 72, - "end_line": 82, + "start_line": 85, + "end_line": 95, "tags": { "PURPOSE": "Schema for representing Git commit details." }, @@ -44867,12 +46381,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 72 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 72 + "line_number": 85 } ], "score": 0.5499999999999999 @@ -44882,8 +46396,8 @@ "name": "BranchCreate", "type": "Class", "tier": "STANDARD", - "start_line": 84, - "end_line": 90, + "start_line": 97, + "end_line": 103, "tags": { "PURPOSE": "Schema for branch creation requests." }, @@ -44895,12 +46409,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 84 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 84 + "line_number": 97 } ], "score": 0.5499999999999999 @@ -44910,8 +46424,8 @@ "name": "BranchCheckout", "type": "Class", "tier": "STANDARD", - "start_line": 92, - "end_line": 97, + "start_line": 105, + "end_line": 110, "tags": { "PURPOSE": "Schema for branch checkout requests." }, @@ -44923,12 +46437,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 92 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 92 + "line_number": 105 } ], "score": 0.5499999999999999 @@ -44938,8 +46452,8 @@ "name": "CommitCreate", "type": "Class", "tier": "STANDARD", - "start_line": 99, - "end_line": 105, + "start_line": 112, + "end_line": 118, "tags": { "PURPOSE": "Schema for staging and committing changes." }, @@ -44951,12 +46465,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 112 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 112 } ], "score": 0.5499999999999999 @@ -44966,8 +46480,8 @@ "name": "ConflictResolution", "type": "Class", "tier": "STANDARD", - "start_line": 107, - "end_line": 114, + "start_line": 120, + "end_line": 127, "tags": { "PURPOSE": "Schema for resolving merge conflicts." }, @@ -44979,12 +46493,124 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 107 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 107 + "line_number": 120 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "MergeStatusSchema", + "type": "Class", + "tier": "STANDARD", + "start_line": 130, + "end_line": 140, + "tags": { + "PURPOSE": "Schema representing unfinished merge status for repository." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 130 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 130 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "MergeConflictFileSchema", + "type": "Class", + "tier": "STANDARD", + "start_line": 143, + "end_line": 149, + "tags": { + "PURPOSE": "Schema describing one conflicted file with optional side snapshots." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 143 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 143 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "MergeResolveRequest", + "type": "Class", + "tier": "STANDARD", + "start_line": 152, + "end_line": 156, + "tags": { + "PURPOSE": "Request schema for resolving one or multiple merge conflicts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 152 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 152 + } + ], + "score": 0.5499999999999999 + } + }, + { + "name": "MergeContinueRequest", + "type": "Class", + "tier": "STANDARD", + "start_line": 159, + "end_line": 163, + "tags": { + "PURPOSE": "Request schema for finishing merge with optional explicit commit message." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 159 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 159 } ], "score": 0.5499999999999999 @@ -44994,8 +46620,8 @@ "name": "DeploymentEnvironmentSchema", "type": "Class", "tier": "STANDARD", - "start_line": 116, - "end_line": 127, + "start_line": 165, + "end_line": 176, "tags": { "PURPOSE": "Schema for representing a target deployment environment." }, @@ -45007,12 +46633,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 116 + "line_number": 165 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 116 + "line_number": 165 } ], "score": 0.5499999999999999 @@ -45022,8 +46648,8 @@ "name": "DeployRequest", "type": "Class", "tier": "STANDARD", - "start_line": 129, - "end_line": 134, + "start_line": 178, + "end_line": 183, "tags": { "PURPOSE": "Schema for dashboard deployment requests." }, @@ -45035,12 +46661,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 129 + "line_number": 178 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 129 + "line_number": 178 } ], "score": 0.5499999999999999 @@ -45050,8 +46676,8 @@ "name": "RepoInitRequest", "type": "Class", "tier": "STANDARD", - "start_line": 136, - "end_line": 142, + "start_line": 185, + "end_line": 191, "tags": { "PURPOSE": "Schema for repository initialization requests." }, @@ -45063,12 +46689,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 136 + "line_number": 185 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 136 + "line_number": 185 } ], "score": 0.5499999999999999 @@ -45078,8 +46704,8 @@ "name": "RepositoryBindingSchema", "type": "Class", "tier": "STANDARD", - "start_line": 145, - "end_line": 153, + "start_line": 194, + "end_line": 202, "tags": { "PURPOSE": "Schema describing repository-to-config binding and provider metadata." }, @@ -45091,12 +46717,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 145 + "line_number": 194 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 145 + "line_number": 194 } ], "score": 0.5499999999999999 @@ -45106,8 +46732,8 @@ "name": "RepoStatusBatchRequest", "type": "Class", "tier": "STANDARD", - "start_line": 155, - "end_line": 159, + "start_line": 204, + "end_line": 208, "tags": { "PURPOSE": "Schema for requesting repository statuses for multiple dashboards in a single call." }, @@ -45119,12 +46745,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 155 + "line_number": 204 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 155 + "line_number": 204 } ], "score": 0.5499999999999999 @@ -45134,8 +46760,8 @@ "name": "RepoStatusBatchResponse", "type": "Class", "tier": "STANDARD", - "start_line": 162, - "end_line": 166, + "start_line": 211, + "end_line": 215, "tags": { "PURPOSE": "Schema for returning repository statuses keyed by dashboard ID." }, @@ -45147,12 +46773,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 162 + "line_number": 211 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 162 + "line_number": 211 } ], "score": 0.5499999999999999 @@ -45162,8 +46788,8 @@ "name": "GiteaRepoSchema", "type": "Class", "tier": "STANDARD", - "start_line": 169, - "end_line": 179, + "start_line": 218, + "end_line": 228, "tags": { "PURPOSE": "Schema describing a Gitea repository." }, @@ -45175,12 +46801,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 169 + "line_number": 218 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 169 + "line_number": 218 } ], "score": 0.5499999999999999 @@ -45190,8 +46816,8 @@ "name": "GiteaRepoCreateRequest", "type": "Class", "tier": "STANDARD", - "start_line": 182, - "end_line": 190, + "start_line": 231, + "end_line": 239, "tags": { "PURPOSE": "Request schema for creating a Gitea repository." }, @@ -45203,12 +46829,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 182 + "line_number": 231 } ], "score": 0.5499999999999999 @@ -45218,8 +46844,8 @@ "name": "RemoteRepoSchema", "type": "Class", "tier": "STANDARD", - "start_line": 193, - "end_line": 204, + "start_line": 242, + "end_line": 253, "tags": { "PURPOSE": "Provider-agnostic remote repository payload." }, @@ -45231,12 +46857,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 193 + "line_number": 242 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 193 + "line_number": 242 } ], "score": 0.5499999999999999 @@ -45246,8 +46872,8 @@ "name": "RemoteRepoCreateRequest", "type": "Class", "tier": "STANDARD", - "start_line": 207, - "end_line": 215, + "start_line": 256, + "end_line": 264, "tags": { "PURPOSE": "Provider-agnostic repository creation request." }, @@ -45259,12 +46885,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 207 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 207 + "line_number": 256 } ], "score": 0.5499999999999999 @@ -45274,8 +46900,8 @@ "name": "PromoteRequest", "type": "Class", "tier": "STANDARD", - "start_line": 218, - "end_line": 229, + "start_line": 267, + "end_line": 278, "tags": { "PURPOSE": "Request schema for branch promotion workflow." }, @@ -45287,12 +46913,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 218 + "line_number": 267 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 218 + "line_number": 267 } ], "score": 0.5499999999999999 @@ -45302,8 +46928,8 @@ "name": "PromoteResponse", "type": "Class", "tier": "STANDARD", - "start_line": 232, - "end_line": 242, + "start_line": 281, + "end_line": 291, "tags": { "PURPOSE": "Response schema for promotion operation result." }, @@ -45315,12 +46941,12 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 232 + "line_number": 281 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 232 + "line_number": 281 } ], "score": 0.5499999999999999 @@ -47052,7 +48678,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 136, + "end_line": 147, "tags": { "TIER": "CRITICAL", "SEMANTICS": "api, profile, preferences, self-service, account-lookup", @@ -47082,8 +48708,8 @@ "name": "_get_profile_service", "type": "Function", "tier": "STANDARD", - "start_line": 45, - "end_line": 51, + "start_line": 49, + "end_line": 59, "tags": { "PURPOSE": "Build profile service for current request scope.", "PRE": "db session and config manager are available.", @@ -47097,12 +48723,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 49 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 45 + "line_number": 49 } ], "score": 0.7 @@ -47112,8 +48738,8 @@ "name": "get_preferences", "type": "Function", "tier": "STANDARD", - "start_line": 54, - "end_line": 68, + "start_line": 62, + "end_line": 77, "tags": { "PURPOSE": "Get authenticated user's dashboard filter preference.", "PRE": "Valid JWT and authenticated user context.", @@ -47131,8 +48757,8 @@ "name": "update_preferences", "type": "Function", "tier": "STANDARD", - "start_line": 71, - "end_line": 93, + "start_line": 80, + "end_line": 103, "tags": { "PURPOSE": "Update authenticated user's dashboard filter preference.", "PRE": "Valid JWT and valid request payload.", @@ -47150,8 +48776,8 @@ "name": "lookup_superset_accounts", "type": "Function", "tier": "STANDARD", - "start_line": 96, - "end_line": 134, + "start_line": 106, + "end_line": 145, "tags": { "PURPOSE": "Lookup Superset account candidates in selected environment.", "PRE": "Valid JWT, authenticated context, and environment_id query parameter.", @@ -49437,7 +51063,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 198, + "end_line": 440, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, git, api, status, no_repo", @@ -49455,8 +51081,8 @@ "name": "test_get_repository_status_returns_no_repo_payload_for_missing_repo", "type": "Function", "tier": "STANDARD", - "start_line": 15, - "end_line": 35, + "start_line": 16, + "end_line": 36, "tags": { "PURPOSE": "Ensure missing local repository is represented as NO_REPO payload instead of an API error.", "PRE": "GitService.get_status raises HTTPException(404).", @@ -49470,12 +51096,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 16 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 15 + "line_number": 16 } ], "score": 0.7 @@ -49485,8 +51111,8 @@ "name": "test_get_repository_status_propagates_non_404_http_exception", "type": "Function", "tier": "STANDARD", - "start_line": 38, - "end_line": 58, + "start_line": 39, + "end_line": 59, "tags": { "PURPOSE": "Ensure HTTP exceptions other than 404 are not masked.", "PRE": "GitService.get_status raises HTTPException with non-404 status.", @@ -49500,12 +51126,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 38 + "line_number": 39 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 38 + "line_number": 39 } ], "score": 0.7 @@ -49515,8 +51141,8 @@ "name": "test_get_repository_diff_propagates_http_exception", "type": "Function", "tier": "STANDARD", - "start_line": 61, - "end_line": 77, + "start_line": 62, + "end_line": 78, "tags": { "PURPOSE": "Ensure diff endpoint preserves domain HTTP errors from GitService.", "PRE": "GitService.get_diff raises HTTPException.", @@ -49530,12 +51156,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 61 + "line_number": 62 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 61 + "line_number": 62 } ], "score": 0.7 @@ -49545,8 +51171,8 @@ "name": "test_get_history_wraps_unexpected_error_as_500", "type": "Function", "tier": "STANDARD", - "start_line": 80, - "end_line": 96, + "start_line": 81, + "end_line": 97, "tags": { "PURPOSE": "Ensure non-HTTP exceptions in history endpoint become deterministic 500 errors.", "PRE": "GitService.get_commit_history raises ValueError.", @@ -49560,12 +51186,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 80 + "line_number": 81 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 80 + "line_number": 81 } ], "score": 0.7 @@ -49575,8 +51201,8 @@ "name": "test_commit_changes_wraps_unexpected_error_as_500", "type": "Function", "tier": "STANDARD", - "start_line": 99, - "end_line": 119, + "start_line": 100, + "end_line": 120, "tags": { "PURPOSE": "Ensure commit endpoint does not leak unexpected errors as 400.", "PRE": "GitService.commit_changes raises RuntimeError.", @@ -49590,12 +51216,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 100 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 99 + "line_number": 100 } ], "score": 0.7 @@ -49605,8 +51231,8 @@ "name": "test_get_repository_status_batch_returns_mixed_statuses", "type": "Function", "tier": "STANDARD", - "start_line": 122, - "end_line": 146, + "start_line": 123, + "end_line": 147, "tags": { "PURPOSE": "Ensure batch endpoint returns per-dashboard statuses in one response.", "PRE": "Some repositories are missing and some are initialized.", @@ -49620,12 +51246,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 123 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 122 + "line_number": 123 } ], "score": 0.7 @@ -49635,8 +51261,8 @@ "name": "test_get_repository_status_batch_marks_item_as_error_on_service_failure", "type": "Function", "tier": "STANDARD", - "start_line": 149, - "end_line": 171, + "start_line": 150, + "end_line": 172, "tags": { "PURPOSE": "Ensure batch endpoint marks failed items as ERROR without failing entire request.", "PRE": "GitService raises non-HTTP exception for one dashboard.", @@ -49650,12 +51276,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 149 + "line_number": 150 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 149 + "line_number": 150 } ], "score": 0.7 @@ -49665,8 +51291,8 @@ "name": "test_get_repository_status_batch_deduplicates_and_truncates_ids", "type": "Function", "tier": "STANDARD", - "start_line": 174, - "end_line": 196, + "start_line": 175, + "end_line": 197, "tags": { "PURPOSE": "Ensure batch endpoint protects server from oversized payloads.", "PRE": "request includes duplicate IDs and more than MAX_REPOSITORY_STATUS_BATCH entries.", @@ -49680,12 +51306,192 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 174 + "line_number": 175 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 174 + "line_number": 175 + } + ], + "score": 0.7 + } + }, + { + "name": "test_commit_changes_applies_profile_identity_before_commit", + "type": "Function", + "tier": "STANDARD", + "start_line": 200, + "end_line": 258, + "tags": { + "PURPOSE": "Ensure commit route configures repository identity from profile preferences before commit call.", + "PRE": "Profile preference contains git_username/git_email for current user.", + "POST": "git_service.configure_identity receives resolved identity and commit proceeds." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 200 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 200 + } + ], + "score": 0.7 + } + }, + { + "name": "test_pull_changes_applies_profile_identity_before_pull", + "type": "Function", + "tier": "STANDARD", + "start_line": 261, + "end_line": 314, + "tags": { + "PURPOSE": "Ensure pull route configures repository identity from profile preferences before pull call.", + "PRE": "Profile preference contains git_username/git_email for current user.", + "POST": "git_service.configure_identity receives resolved identity and pull proceeds." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 261 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 261 + } + ], + "score": 0.7 + } + }, + { + "name": "test_get_merge_status_returns_service_payload", + "type": "Function", + "tier": "STANDARD", + "start_line": 317, + "end_line": 346, + "tags": { + "PURPOSE": "Ensure merge status route returns service payload as-is.", + "PRE": "git_service.get_merge_status returns unfinished merge payload.", + "POST": "Route response contains has_unfinished_merge=True." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 317 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 317 + } + ], + "score": 0.7 + } + }, + { + "name": "test_resolve_merge_conflicts_passes_resolution_items_to_service", + "type": "Function", + "tier": "STANDARD", + "start_line": 349, + "end_line": 383, + "tags": { + "PURPOSE": "Ensure merge resolve route forwards parsed resolutions to service.", + "PRE": "resolve_data has one file strategy.", + "POST": "Service receives normalized list and route returns resolved files." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 349 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 349 + } + ], + "score": 0.7 + } + }, + { + "name": "test_abort_merge_calls_service_and_returns_result", + "type": "Function", + "tier": "STANDARD", + "start_line": 386, + "end_line": 407, + "tags": { + "PURPOSE": "Ensure abort route delegates to service.", + "PRE": "Service abort_merge returns aborted status.", + "POST": "Route returns aborted status." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 386 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 386 + } + ], + "score": 0.7 + } + }, + { + "name": "test_continue_merge_passes_message_and_returns_commit", + "type": "Function", + "tier": "STANDARD", + "start_line": 410, + "end_line": 437, + "tags": { + "PURPOSE": "Ensure continue route passes commit message to service.", + "PRE": "continue_data.message is provided.", + "POST": "Route returns committed status and hash." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 410 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 410 } ], "score": 0.7 @@ -49695,8 +51501,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "TRIVIAL", - "start_line": 21, - "end_line": 21, + "start_line": 22, + "end_line": 22, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49713,8 +51519,8 @@ "name": "get_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 24, - "end_line": 24, + "start_line": 25, + "end_line": 25, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49731,8 +51537,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "TRIVIAL", - "start_line": 44, - "end_line": 44, + "start_line": 45, + "end_line": 45, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49749,8 +51555,8 @@ "name": "get_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 47, - "end_line": 47, + "start_line": 48, + "end_line": 48, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49767,8 +51573,8 @@ "name": "get_diff", "type": "Function", "tier": "TRIVIAL", - "start_line": 67, - "end_line": 67, + "start_line": 68, + "end_line": 68, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49785,8 +51591,8 @@ "name": "get_commit_history", "type": "Function", "tier": "TRIVIAL", - "start_line": 86, - "end_line": 86, + "start_line": 87, + "end_line": 87, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49803,8 +51609,8 @@ "name": "commit_changes", "type": "Function", "tier": "TRIVIAL", - "start_line": 105, - "end_line": 105, + "start_line": 106, + "end_line": 106, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49821,8 +51627,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "TRIVIAL", - "start_line": 128, - "end_line": 128, + "start_line": 129, + "end_line": 129, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49839,8 +51645,8 @@ "name": "get_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 131, - "end_line": 131, + "start_line": 132, + "end_line": 132, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49857,8 +51663,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "TRIVIAL", - "start_line": 155, - "end_line": 155, + "start_line": 156, + "end_line": 156, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49875,8 +51681,8 @@ "name": "get_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 158, - "end_line": 158, + "start_line": 159, + "end_line": 159, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49893,8 +51699,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "TRIVIAL", - "start_line": 180, - "end_line": 180, + "start_line": 181, + "end_line": 181, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -49911,8 +51717,314 @@ "name": "get_status", "type": "Function", "tier": "TRIVIAL", - "start_line": 183, - "end_line": 183, + "start_line": 184, + "end_line": 184, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "__init__", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 206, + "end_line": 206, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "configure_identity", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 210, + "end_line": 210, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "commit_changes", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 213, + "end_line": 213, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "filter", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 221, + "end_line": 221, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "first", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 224, + "end_line": 224, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "query", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 228, + "end_line": 228, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "__init__", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 267, + "end_line": 267, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "configure_identity", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 271, + "end_line": 271, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "pull_changes", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 274, + "end_line": 274, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "filter", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 282, + "end_line": 282, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "first", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 285, + "end_line": 285, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "query", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 289, + "end_line": 289, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "get_merge_status", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 323, + "end_line": 323, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "resolve_merge_conflicts", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 357, + "end_line": 357, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "dict", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 364, + "end_line": 364, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "abort_merge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 392, + "end_line": 392, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "continue_merge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 416, + "end_line": 416, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -51028,7 +53140,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 243, + "end_line": 293, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, profile, api, preferences, lookup, contract", @@ -51046,8 +53158,8 @@ "name": "mock_profile_route_dependencies", "type": "Function", "tier": "STANDARD", - "start_line": 34, - "end_line": 51, + "start_line": 36, + "end_line": 53, "tags": { "PURPOSE": "Provides deterministic dependency overrides for profile route tests.", "PRE": "App instance is initialized.", @@ -51061,12 +53173,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 36 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 36 } ], "score": 0.7 @@ -51076,8 +53188,8 @@ "name": "profile_route_deps_fixture", "type": "Function", "tier": "STANDARD", - "start_line": 54, - "end_line": 66, + "start_line": 56, + "end_line": 68, "tags": { "PURPOSE": "Pytest fixture wrapper for profile route dependency overrides.", "PRE": "None.", @@ -51091,12 +53203,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 54 + "line_number": 56 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 54 + "line_number": 56 } ], "score": 0.7 @@ -51106,8 +53218,8 @@ "name": "_build_preference_response", "type": "Function", "tier": "STANDARD", - "start_line": 69, - "end_line": 87, + "start_line": 71, + "end_line": 107, "tags": { "PURPOSE": "Builds stable profile preference response payload for route tests.", "PRE": "user_id is provided.", @@ -51121,12 +53233,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 69 + "line_number": 71 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 69 + "line_number": 71 } ], "score": 0.7 @@ -51136,8 +53248,8 @@ "name": "test_get_profile_preferences_returns_self_payload", "type": "Function", "tier": "STANDARD", - "start_line": 90, - "end_line": 108, + "start_line": 110, + "end_line": 138, "tags": { "PURPOSE": "Verifies GET /api/profile/preferences returns stable self-scoped payload.", "PRE": "Authenticated user context is available.", @@ -51151,12 +53263,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 90 + "line_number": 110 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 90 + "line_number": 110 } ], "score": 0.7 @@ -51166,8 +53278,8 @@ "name": "test_patch_profile_preferences_success", "type": "Function", "tier": "STANDARD", - "start_line": 111, - "end_line": 135, + "start_line": 141, + "end_line": 185, "tags": { "PURPOSE": "Verifies PATCH /api/profile/preferences persists valid payload through route mapping.", "PRE": "Valid request payload and authenticated user.", @@ -51181,12 +53293,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 111 + "line_number": 141 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 111 + "line_number": 141 } ], "score": 0.7 @@ -51196,8 +53308,8 @@ "name": "test_patch_profile_preferences_validation_error", "type": "Function", "tier": "STANDARD", - "start_line": 138, - "end_line": 161, + "start_line": 188, + "end_line": 211, "tags": { "PURPOSE": "Verifies route maps domain validation failure to HTTP 422 with actionable details.", "PRE": "Service raises ProfileValidationError.", @@ -51211,12 +53323,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 138 + "line_number": 188 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 138 + "line_number": 188 } ], "score": 0.7 @@ -51226,8 +53338,8 @@ "name": "test_patch_profile_preferences_cross_user_denied", "type": "Function", "tier": "STANDARD", - "start_line": 164, - "end_line": 186, + "start_line": 214, + "end_line": 236, "tags": { "PURPOSE": "Verifies route maps domain authorization guard failure to HTTP 403.", "PRE": "Service raises ProfileAuthorizationError.", @@ -51241,12 +53353,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 164 + "line_number": 214 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 164 + "line_number": 214 } ], "score": 0.7 @@ -51256,8 +53368,8 @@ "name": "test_lookup_superset_accounts_success", "type": "Function", "tier": "STANDARD", - "start_line": 189, - "end_line": 222, + "start_line": 239, + "end_line": 272, "tags": { "PURPOSE": "Verifies lookup route returns success payload with normalized candidates.", "PRE": "Valid environment_id and service success response.", @@ -51271,12 +53383,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 239 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 239 } ], "score": 0.7 @@ -51286,8 +53398,8 @@ "name": "test_lookup_superset_accounts_env_not_found", "type": "Function", "tier": "STANDARD", - "start_line": 225, - "end_line": 241, + "start_line": 275, + "end_line": 291, "tags": { "PURPOSE": "Verifies lookup route maps missing environment to HTTP 404.", "PRE": "Service raises EnvironmentNotFoundError.", @@ -51301,12 +53413,12 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 225 + "line_number": 275 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 225 + "line_number": 275 } ], "score": 0.7 @@ -52133,6 +54245,698 @@ "score": 1.0 } }, + { + "name": "backend.src.api.routes.__tests__.test_git_api", + "type": "Module", + "tier": "STANDARD", + "start_line": 1, + "end_line": 310, + "tags": { + "PURPOSE": "API tests for Git configurations and repository operations." + }, + "relations": [ + { + "type": "VERIFIES", + "target": "src.api.routes.git" + } + ], + "children": [ + { + "name": "__init__", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 13, + "end_line": 13, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "query", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 18, + "end_line": 18, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "filter", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 22, + "end_line": 22, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "first", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 31, + "end_line": 31, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "all", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 37, + "end_line": 37, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "add", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 40, + "end_line": 40, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "delete", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 46, + "end_line": 46, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "commit", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 51, + "end_line": 51, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "refresh", + "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": "test_get_git_configs_masks_pat", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 60, + "end_line": 60, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_create_git_config_persists_config", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 77, + "end_line": 77, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_update_git_config_modifies_record", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 100, + "end_line": 100, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "query", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 112, + "end_line": 112, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "filter", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 113, + "end_line": 113, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "first", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 114, + "end_line": 114, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "commit", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 115, + "end_line": 115, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "refresh", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 116, + "end_line": 116, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_update_git_config_raises_404_if_not_found", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 127, + "end_line": 127, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_delete_git_config_removes_record", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 141, + "end_line": 141, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "query", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 148, + "end_line": 148, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "filter", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 149, + "end_line": 149, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "first", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 150, + "end_line": 150, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "delete", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 151, + "end_line": 151, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "commit", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 152, + "end_line": 152, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_test_git_config_validates_connection_successfully", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 161, + "end_line": 161, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_connection", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 167, + "end_line": 167, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_test_git_config_fails_validation", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 183, + "end_line": 183, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_connection", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 189, + "end_line": 189, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_list_gitea_repositories_returns_payload", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 207, + "end_line": 207, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "list_gitea_repositories", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 213, + "end_line": 213, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_list_gitea_repositories_rejects_non_gitea", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 229, + "end_line": 229, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_create_remote_repository_creates_provider_repo", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 246, + "end_line": 246, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "create_gitlab_repository", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 252, + "end_line": 252, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "test_init_repository_initializes_and_saves_binding", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 276, + "end_line": 276, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "init_repo", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 284, + "end_line": 284, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_get_repo_path", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 286, + "end_line": 286, + "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 + }, + { + "message": "Invalid @RELATION predicate: VERIFIES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.17500000000000004 + } + }, { "name": "backend.src.api.routes.__tests__.test_assistant_api", "type": "Module", @@ -53897,7 +56701,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 73, + "end_line": 74, "tags": { "TIER": "TRIVIAL", "SEMANTICS": "git, models, sqlalchemy, database, schema", @@ -53912,7 +56716,7 @@ "type": "Class", "tier": "TRIVIAL", "start_line": 29, - "end_line": 43, + "end_line": 44, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Configuration for a Git server connection." @@ -53929,8 +56733,8 @@ "name": "GitRepository", "type": "Class", "tier": "TRIVIAL", - "start_line": 45, - "end_line": 58, + "start_line": 46, + "end_line": 59, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Tracking for a local Git repository linked to a dashboard." @@ -53947,8 +56751,8 @@ "name": "DeploymentEnvironment", "type": "Class", "tier": "TRIVIAL", - "start_line": 60, - "end_line": 71, + "start_line": 61, + "end_line": 72, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Target Superset environments for dashboard deployment." @@ -55882,13 +58686,13 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 46, + "end_line": 55, "tags": { "TIER": "STANDARD", - "SEMANTICS": "profile, preferences, persistence, user, dashboard-filter, sqlalchemy", - "PURPOSE": "Defines persistent per-user dashboard filter preferences.", + "SEMANTICS": "profile, preferences, persistence, user, dashboard-filter, git, ui-preferences, sqlalchemy", + "PURPOSE": "Defines persistent per-user profile settings for dashboard filter, Git identity/token, and UX preferences.", "LAYER": "Domain", - "INVARIANT": "Exactly one preference row exists per user_id." + "INVARIANT": "Sensitive Git token is stored encrypted and never returned in plaintext." }, "relations": [ { @@ -55905,8 +58709,8 @@ "name": "UserDashboardPreference", "type": "Class", "tier": "STANDARD", - "start_line": 21, - "end_line": 44, + "start_line": 22, + "end_line": 53, "tags": { "TIER": "STANDARD", "PURPOSE": "Stores Superset username binding and default \"my dashboards\" toggle for one authenticated user." @@ -56691,7 +59495,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 374, + "end_line": 675, "tags": { "TIER": "CRITICAL", "SEMANTICS": "profile, service, validation, ownership, filtering, superset, preferences", @@ -56734,8 +59538,8 @@ "name": "ProfileValidationError", "type": "Class", "tier": "STANDARD", - "start_line": 46, - "end_line": 53, + "start_line": 53, + "end_line": 60, "tags": { "TIER": "STANDARD", "PURPOSE": "Domain validation error for profile preference update requests." @@ -56752,8 +59556,8 @@ "name": "EnvironmentNotFoundError", "type": "Class", "tier": "STANDARD", - "start_line": 56, - "end_line": 61, + "start_line": 63, + "end_line": 68, "tags": { "TIER": "STANDARD", "PURPOSE": "Raised when environment_id from lookup request is unknown in app configuration." @@ -56770,8 +59574,8 @@ "name": "ProfileAuthorizationError", "type": "Class", "tier": "STANDARD", - "start_line": 64, - "end_line": 69, + "start_line": 71, + "end_line": 76, "tags": { "TIER": "STANDARD", "PURPOSE": "Raised when caller attempts cross-user preference mutation." @@ -56788,8 +59592,8 @@ "name": "ProfileService", "type": "Class", "tier": "CRITICAL", - "start_line": 72, - "end_line": 372, + "start_line": 79, + "end_line": 673, "tags": { "TIER": "CRITICAL", "PURPOSE": "Implements profile preference read/update flow and Superset account lookup degradation strategy." @@ -56800,8 +59604,8 @@ "name": "__init__", "type": "Function", "tier": "STANDARD", - "start_line": 76, - "end_line": 84, + "start_line": 83, + "end_line": 93, "tags": { "PURPOSE": "Initialize service with DB session and config manager.", "PRE": "db session is active and config_manager supports get_environments().", @@ -56819,8 +59623,8 @@ "name": "get_my_preference", "type": "Function", "tier": "STANDARD", - "start_line": 86, - "end_line": 105, + "start_line": 95, + "end_line": 118, "tags": { "PURPOSE": "Return current user's persisted preference or default non-configured view.", "PRE": "current_user is authenticated.", @@ -56838,8 +59642,8 @@ "name": "update_my_preference", "type": "Function", "tier": "STANDARD", - "start_line": 107, - "end_line": 146, + "start_line": 120, + "end_line": 222, "tags": { "PURPOSE": "Validate and persist current user's profile preference in self-scoped mode.", "PRE": "current_user is authenticated and payload is provided.", @@ -56857,8 +59661,8 @@ "name": "lookup_superset_accounts", "type": "Function", "tier": "STANDARD", - "start_line": 148, - "end_line": 222, + "start_line": 224, + "end_line": 298, "tags": { "PURPOSE": "Query Superset users in selected environment and project canonical account candidates.", "PRE": "current_user is authenticated and environment_id exists.", @@ -56876,8 +59680,8 @@ "name": "matches_dashboard_actor", "type": "Function", "tier": "STANDARD", - "start_line": 224, - "end_line": 246, + "start_line": 300, + "end_line": 322, "tags": { "PURPOSE": "Apply trim+case-insensitive actor match across owners OR modified_by.", "PRE": "bound_username can be empty; owners may contain mixed payload.", @@ -56891,17 +59695,332 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 224 + "line_number": 300 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 224 + "line_number": 300 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 224 + "line_number": 300 + } + ], + "score": 0.55 + } + }, + { + "name": "_build_security_summary", + "type": "Function", + "tier": "STANDARD", + "start_line": 324, + "end_line": 382, + "tags": { + "PURPOSE": "Build read-only security snapshot with role and permission badges.", + "PRE": "current_user is authenticated.", + "POST": "Returns deterministic security projection for profile UI." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 324 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 324 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 324 + } + ], + "score": 0.55 + } + }, + { + "name": "_collect_user_permission_pairs", + "type": "Function", + "tier": "STANDARD", + "start_line": 384, + "end_line": 399, + "tags": { + "PURPOSE": "Collect effective permission tuples from current user's roles.", + "PRE": "current_user can include role/permission graph.", + "POST": "Returns unique normalized (resource, ACTION) tuples." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 384 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 384 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 384 + } + ], + "score": 0.55 + } + }, + { + "name": "_format_permission_key", + "type": "Function", + "tier": "STANDARD", + "start_line": 401, + "end_line": 411, + "tags": { + "PURPOSE": "Convert normalized permission pair to compact UI key.", + "PRE": "resource and action are normalized.", + "POST": "Returns user-facing badge key." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 401 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 401 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 401 + } + ], + "score": 0.55 + } + }, + { + "name": "_to_preference_payload", + "type": "Function", + "tier": "STANDARD", + "start_line": 413, + "end_line": 459, + "tags": { + "PURPOSE": "Map ORM preference row to API DTO with token metadata.", + "PRE": "preference row can contain nullable optional fields.", + "POST": "Returns normalized ProfilePreference object." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 413 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 413 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 413 + } + ], + "score": 0.55 + } + }, + { + "name": "_mask_secret_value", + "type": "Function", + "tier": "STANDARD", + "start_line": 461, + "end_line": 472, + "tags": { + "PURPOSE": "Build a safe display value for sensitive secrets.", + "PRE": "secret may be None or plaintext.", + "POST": "Returns masked representation or None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 461 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 461 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 461 + } + ], + "score": 0.55 + } + }, + { + "name": "_sanitize_text", + "type": "Function", + "tier": "STANDARD", + "start_line": 474, + "end_line": 483, + "tags": { + "PURPOSE": "Normalize optional text into trimmed form or None.", + "PRE": "value may be empty or None.", + "POST": "Returns trimmed value or None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 474 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 474 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 474 + } + ], + "score": 0.55 + } + }, + { + "name": "_sanitize_secret", + "type": "Function", + "tier": "STANDARD", + "start_line": 485, + "end_line": 496, + "tags": { + "PURPOSE": "Normalize secret input into trimmed form or None.", + "PRE": "value may be None or blank.", + "POST": "Returns trimmed secret or None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 485 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 485 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 485 + } + ], + "score": 0.55 + } + }, + { + "name": "_normalize_start_page", + "type": "Function", + "tier": "STANDARD", + "start_line": 498, + "end_line": 509, + "tags": { + "PURPOSE": "Normalize supported start page aliases to canonical values.", + "PRE": "value may be None or alias.", + "POST": "Returns one of SUPPORTED_START_PAGES." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 498 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 498 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 498 + } + ], + "score": 0.55 + } + }, + { + "name": "_normalize_density", + "type": "Function", + "tier": "STANDARD", + "start_line": 511, + "end_line": 522, + "tags": { + "PURPOSE": "Normalize supported density aliases to canonical values.", + "PRE": "value may be None or alias.", + "POST": "Returns one of SUPPORTED_DENSITIES." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 511 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 511 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 511 } ], "score": 0.55 @@ -56911,8 +60030,8 @@ "name": "_resolve_environment", "type": "Function", "tier": "STANDARD", - "start_line": 248, - "end_line": 258, + "start_line": 524, + "end_line": 534, "tags": { "PURPOSE": "Resolve environment model from configured environments by id.", "PRE": "environment_id is provided.", @@ -56926,17 +60045,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 248 + "line_number": 524 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 248 + "line_number": 524 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 248 + "line_number": 524 } ], "score": 0.55 @@ -56946,8 +60065,8 @@ "name": "_get_preference_row", "type": "Function", "tier": "STANDARD", - "start_line": 260, - "end_line": 266, + "start_line": 536, + "end_line": 542, "tags": { "PURPOSE": "Return persisted preference row for user or None.", "PRE": "user_id is provided.", @@ -56961,17 +60080,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 260 + "line_number": 536 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 260 + "line_number": 536 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 260 + "line_number": 536 } ], "score": 0.55 @@ -56981,8 +60100,8 @@ "name": "_get_or_create_preference_row", "type": "Function", "tier": "STANDARD", - "start_line": 268, - "end_line": 277, + "start_line": 544, + "end_line": 553, "tags": { "PURPOSE": "Return existing preference row or create new unsaved row.", "PRE": "user_id is provided.", @@ -56996,17 +60115,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 268 + "line_number": 544 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 268 + "line_number": 544 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 268 + "line_number": 544 } ], "score": 0.55 @@ -57016,8 +60135,8 @@ "name": "_build_default_preference", "type": "Function", "tier": "STANDARD", - "start_line": 279, - "end_line": 293, + "start_line": 555, + "end_line": 576, "tags": { "PURPOSE": "Build non-persisted default preference DTO for unconfigured users.", "PRE": "user_id is provided.", @@ -57031,17 +60150,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 279 + "line_number": 555 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 279 + "line_number": 555 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 279 + "line_number": 555 } ], "score": 0.55 @@ -57051,8 +60170,8 @@ "name": "_validate_update_payload", "type": "Function", "tier": "STANDARD", - "start_line": 295, - "end_line": 313, + "start_line": 578, + "end_line": 617, "tags": { "PURPOSE": "Validate username/toggle constraints for preference mutation.", "PRE": "payload is provided.", @@ -57066,17 +60185,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 295 + "line_number": 578 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 295 + "line_number": 578 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 295 + "line_number": 578 } ], "score": 0.55 @@ -57086,8 +60205,8 @@ "name": "_sanitize_username", "type": "Function", "tier": "STANDARD", - "start_line": 315, - "end_line": 324, + "start_line": 619, + "end_line": 625, "tags": { "PURPOSE": "Normalize raw username into trimmed form or None for empty input.", "PRE": "value can be empty or None.", @@ -57101,17 +60220,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 315 + "line_number": 619 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 315 + "line_number": 619 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 315 + "line_number": 619 } ], "score": 0.55 @@ -57121,8 +60240,8 @@ "name": "_normalize_username", "type": "Function", "tier": "STANDARD", - "start_line": 326, - "end_line": 335, + "start_line": 627, + "end_line": 636, "tags": { "PURPOSE": "Apply deterministic trim+lower normalization for actor matching.", "PRE": "value can be empty or None.", @@ -57136,17 +60255,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 326 + "line_number": 627 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 326 + "line_number": 627 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 326 + "line_number": 627 } ], "score": 0.55 @@ -57156,8 +60275,8 @@ "name": "_normalize_owner_tokens", "type": "Function", "tier": "STANDARD", - "start_line": 337, - "end_line": 371, + "start_line": 638, + "end_line": 672, "tags": { "PURPOSE": "Normalize owners payload into deduplicated lower-cased tokens.", "PRE": "owners can be iterable of scalars or dict-like values.", @@ -57171,17 +60290,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 337 + "line_number": 638 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 337 + "line_number": 638 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 337 + "line_number": 638 } ], "score": 0.55 @@ -57194,22 +60313,22 @@ { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 72 + "line_number": 79 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 72 + "line_number": 79 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 72 + "line_number": 79 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 72 + "line_number": 79 } ], "score": 0.0 @@ -57219,8 +60338,8 @@ "name": "__init__", "type": "Function", "tier": "TRIVIAL", - "start_line": 50, - "end_line": 50, + "start_line": 57, + "end_line": 57, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -58939,7 +62058,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 1471, + "end_line": 1944, "tags": { "TIER": "STANDARD", "SEMANTICS": "git, service, gitpython, repository, version_control", @@ -58978,8 +62097,8 @@ "name": "GitService", "type": "Class", "tier": "STANDARD", - "start_line": 34, - "end_line": 1470, + "start_line": 35, + "end_line": 1943, "tags": { "PURPOSE": "Wrapper for GitPython operations with semantic logging and error handling." }, @@ -58989,8 +62108,8 @@ "name": "__init__", "type": "Function", "tier": "STANDARD", - "start_line": 41, - "end_line": 52, + "start_line": 42, + "end_line": 53, "tags": { "PURPOSE": "Initializes the GitService with a base path for repositories.", "PARAM": "base_path (str) - Root directory for all Git clones.", @@ -59009,8 +62128,8 @@ "name": "_ensure_base_path_exists", "type": "Function", "tier": "STANDARD", - "start_line": 54, - "end_line": 64, + "start_line": 55, + "end_line": 65, "tags": { "PURPOSE": "Ensure the repositories root directory exists and is a directory.", "PRE": "self.base_path is resolved to filesystem path.", @@ -59025,17 +62144,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 54 + "line_number": 55 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 54 + "line_number": 55 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 54 + "line_number": 55 } ], "score": 0.55 @@ -59045,8 +62164,8 @@ "name": "_resolve_base_path", "type": "Function", "tier": "STANDARD", - "start_line": 66, - "end_line": 106, + "start_line": 67, + "end_line": 107, "tags": { "PURPOSE": "Resolve base repository directory from explicit argument or global storage settings.", "PRE": "base_path is a string path.", @@ -59061,17 +62180,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 66 + "line_number": 67 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 66 + "line_number": 67 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 66 + "line_number": 67 } ], "score": 0.55 @@ -59081,8 +62200,8 @@ "name": "_normalize_repo_key", "type": "Function", "tier": "STANDARD", - "start_line": 108, - "end_line": 117, + "start_line": 109, + "end_line": 118, "tags": { "PURPOSE": "Convert user/dashboard-provided key to safe filesystem directory name.", "PRE": "repo_key can be None/empty.", @@ -59097,17 +62216,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 108 + "line_number": 109 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 108 + "line_number": 109 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 108 + "line_number": 109 } ], "score": 0.55 @@ -59117,8 +62236,8 @@ "name": "_update_repo_local_path", "type": "Function", "tier": "STANDARD", - "start_line": 119, - "end_line": 140, + "start_line": 120, + "end_line": 141, "tags": { "PURPOSE": "Persist repository local_path in GitRepository table when record exists.", "PRE": "dashboard_id is valid integer.", @@ -59133,17 +62252,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 119 + "line_number": 120 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 119 + "line_number": 120 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 119 + "line_number": 120 } ], "score": 0.55 @@ -59153,8 +62272,8 @@ "name": "_migrate_repo_directory", "type": "Function", "tier": "STANDARD", - "start_line": 142, - "end_line": 170, + "start_line": 143, + "end_line": 171, "tags": { "PURPOSE": "Move legacy repository directory to target path and sync DB metadata.", "PRE": "source_path exists.", @@ -59169,17 +62288,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 142 + "line_number": 143 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 142 + "line_number": 143 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 142 + "line_number": 143 } ], "score": 0.55 @@ -59189,8 +62308,8 @@ "name": "_ensure_gitflow_branches", "type": "Function", "tier": "STANDARD", - "start_line": 172, - "end_line": 254, + "start_line": 173, + "end_line": 255, "tags": { "PURPOSE": "Ensure standard GitFlow branches (main/dev/preprod) exist locally and on origin.", "PRE": "repo is a valid GitPython Repo instance.", @@ -59209,8 +62328,8 @@ "name": "_get_repo_path", "type": "Function", "tier": "STANDARD", - "start_line": 256, - "end_line": 302, + "start_line": 257, + "end_line": 303, "tags": { "PURPOSE": "Resolves the local filesystem path for a dashboard's repository.", "PARAM": "repo_key (Optional[str]) - Slug-like key used when DB local_path is absent.", @@ -59230,8 +62349,8 @@ "name": "init_repo", "type": "Function", "tier": "STANDARD", - "start_line": 304, - "end_line": 346, + "start_line": 305, + "end_line": 347, "tags": { "PURPOSE": "Initialize or clone a repository for a dashboard.", "PARAM": "repo_key (Optional[str]) - Slug-like key for deterministic folder naming on first init.", @@ -59251,8 +62370,8 @@ "name": "delete_repo", "type": "Function", "tier": "STANDARD", - "start_line": 348, - "end_line": 394, + "start_line": 349, + "end_line": 395, "tags": { "PURPOSE": "Remove local repository and DB binding for a dashboard.", "PRE": "dashboard_id is a valid integer.", @@ -59271,8 +62390,8 @@ "name": "get_repo", "type": "Function", "tier": "STANDARD", - "start_line": 396, - "end_line": 412, + "start_line": 397, + "end_line": 413, "tags": { "PURPOSE": "Get Repo object for a dashboard.", "PRE": "Repository must exist on disk for the given dashboard_id.", @@ -59287,12 +62406,32 @@ "score": 1.0 } }, + { + "name": "configure_identity", + "type": "Function", + "tier": "STANDARD", + "start_line": 415, + "end_line": 444, + "tags": { + "PURPOSE": "Configure repository-local Git committer identity for user-scoped operations.", + "PRE": "dashboard_id repository exists; git_username/git_email may be empty.", + "POST": "Repository config has user.name and user.email when both identity values are provided.", + "RETURN": "None" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "list_branches", "type": "Function", "tier": "STANDARD", - "start_line": 414, - "end_line": 466, + "start_line": 446, + "end_line": 498, "tags": { "PURPOSE": "List all branches for a dashboard's repository.", "PRE": "Repository for dashboard_id exists.", @@ -59311,8 +62450,8 @@ "name": "create_branch", "type": "Function", "tier": "STANDARD", - "start_line": 468, - "end_line": 502, + "start_line": 500, + "end_line": 534, "tags": { "PURPOSE": "Create a new branch from an existing one.", "PARAM": "from_branch (str) - Source branch.", @@ -59331,8 +62470,8 @@ "name": "checkout_branch", "type": "Function", "tier": "STANDARD", - "start_line": 504, - "end_line": 513, + "start_line": 536, + "end_line": 545, "tags": { "PURPOSE": "Switch to a specific branch.", "PRE": "Repository exists and the specified branch name exists.", @@ -59350,8 +62489,8 @@ "name": "commit_changes", "type": "Function", "tier": "STANDARD", - "start_line": 515, - "end_line": 539, + "start_line": 547, + "end_line": 571, "tags": { "PURPOSE": "Stage and commit changes.", "PARAM": "files (List[str]) - Optional list of specific files to stage.", @@ -59366,12 +62505,156 @@ "score": 1.0 } }, + { + "name": "_extract_http_host", + "type": "Function", + "tier": "STANDARD", + "start_line": 573, + "end_line": 594, + "tags": { + "PURPOSE": "Extract normalized host[:port] from HTTP(S) URL.", + "PRE": "url_value may be empty.", + "POST": "Returns lowercase host token or None.", + "RETURN": "Optional[str]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 573 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 573 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 573 + } + ], + "score": 0.55 + } + }, + { + "name": "_strip_url_credentials", + "type": "Function", + "tier": "STANDARD", + "start_line": 596, + "end_line": 615, + "tags": { + "PURPOSE": "Remove credentials from URL while preserving scheme/host/path.", + "PRE": "url_value may contain credentials.", + "POST": "Returns URL without username/password.", + "RETURN": "str" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + } + ], + "score": 0.55 + } + }, + { + "name": "_replace_host_in_url", + "type": "Function", + "tier": "STANDARD", + "start_line": 617, + "end_line": 653, + "tags": { + "PURPOSE": "Replace source URL host with host from configured server URL.", + "PRE": "source_url and config_url are HTTP(S) URLs.", + "POST": "Returns source URL with updated host (credentials preserved) or None.", + "RETURN": "Optional[str]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 617 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 617 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 617 + } + ], + "score": 0.55 + } + }, + { + "name": "_align_origin_host_with_config", + "type": "Function", + "tier": "STANDARD", + "start_line": 655, + "end_line": 719, + "tags": { + "PURPOSE": "Auto-align local origin host to configured Git server host when they drift.", + "PRE": "origin remote exists.", + "POST": "origin URL host updated and DB binding normalized when mismatch detected.", + "RETURN": "Optional[str]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 655 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 655 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 655 + } + ], + "score": 0.55 + } + }, { "name": "push_changes", "type": "Function", "tier": "STANDARD", - "start_line": 541, - "end_line": 595, + "start_line": 721, + "end_line": 832, "tags": { "PURPOSE": "Push local commits to remote.", "PRE": "Repository exists and has an 'origin' remote.", @@ -59389,8 +62672,8 @@ "name": "pull_changes", "type": "Function", "tier": "STANDARD", - "start_line": 597, - "end_line": 640, + "start_line": 834, + "end_line": 1113, "tags": { "PURPOSE": "Pull changes from remote.", "PRE": "Repository exists and has an 'origin' remote.", @@ -59408,8 +62691,8 @@ "name": "get_status", "type": "Function", "tier": "STANDARD", - "start_line": 642, - "end_line": 716, + "start_line": 1115, + "end_line": 1189, "tags": { "PURPOSE": "Get current repository status (dirty files, untracked, etc.)", "PRE": "Repository for dashboard_id exists.", @@ -59428,8 +62711,8 @@ "name": "get_diff", "type": "Function", "tier": "STANDARD", - "start_line": 718, - "end_line": 735, + "start_line": 1191, + "end_line": 1208, "tags": { "PURPOSE": "Generate diff for a file or the whole repository.", "PARAM": "staged (bool) - Whether to show staged changes.", @@ -59449,8 +62732,8 @@ "name": "get_commit_history", "type": "Function", "tier": "STANDARD", - "start_line": 737, - "end_line": 765, + "start_line": 1210, + "end_line": 1238, "tags": { "PURPOSE": "Retrieve commit history for a repository.", "PARAM": "limit (int) - Max number of commits to return.", @@ -59470,8 +62753,8 @@ "name": "test_connection", "type": "Function", "tier": "STANDARD", - "start_line": 767, - "end_line": 815, + "start_line": 1240, + "end_line": 1288, "tags": { "PURPOSE": "Test connection to Git provider using PAT.", "PARAM": "pat (str)", @@ -59491,8 +62774,8 @@ "name": "_normalize_git_server_url", "type": "Function", "tier": "STANDARD", - "start_line": 817, - "end_line": 827, + "start_line": 1290, + "end_line": 1300, "tags": { "PURPOSE": "Normalize Git server URL for provider API calls.", "PRE": "raw_url is non-empty.", @@ -59507,17 +62790,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 817 + "line_number": 1290 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 817 + "line_number": 1290 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 817 + "line_number": 1290 } ], "score": 0.55 @@ -59527,8 +62810,8 @@ "name": "_gitea_headers", "type": "Function", "tier": "STANDARD", - "start_line": 829, - "end_line": 843, + "start_line": 1302, + "end_line": 1316, "tags": { "PURPOSE": "Build Gitea API authorization headers.", "PRE": "pat is provided.", @@ -59543,17 +62826,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 829 + "line_number": 1302 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 829 + "line_number": 1302 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 829 + "line_number": 1302 } ], "score": 0.55 @@ -59563,8 +62846,8 @@ "name": "_gitea_request", "type": "Function", "tier": "STANDARD", - "start_line": 845, - "end_line": 891, + "start_line": 1318, + "end_line": 1364, "tags": { "PURPOSE": "Execute HTTP request against Gitea API with stable error mapping.", "PRE": "method and endpoint are valid.", @@ -59579,17 +62862,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 845 + "line_number": 1318 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 845 + "line_number": 1318 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 845 + "line_number": 1318 } ], "score": 0.55 @@ -59599,8 +62882,8 @@ "name": "get_gitea_current_user", "type": "Function", "tier": "STANDARD", - "start_line": 893, - "end_line": 904, + "start_line": 1366, + "end_line": 1377, "tags": { "PURPOSE": "Resolve current Gitea user for PAT.", "PRE": "server_url and pat are valid.", @@ -59615,17 +62898,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 893 + "line_number": 1366 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 893 + "line_number": 1366 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 893 + "line_number": 1366 } ], "score": 0.55 @@ -59635,8 +62918,8 @@ "name": "list_gitea_repositories", "type": "Function", "tier": "STANDARD", - "start_line": 906, - "end_line": 921, + "start_line": 1379, + "end_line": 1394, "tags": { "PURPOSE": "List repositories visible to authenticated Gitea user.", "PRE": "server_url and pat are valid.", @@ -59651,17 +62934,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 906 + "line_number": 1379 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 906 + "line_number": 1379 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 906 + "line_number": 1379 } ], "score": 0.55 @@ -59671,8 +62954,8 @@ "name": "create_gitea_repository", "type": "Function", "tier": "STANDARD", - "start_line": 923, - "end_line": 957, + "start_line": 1396, + "end_line": 1430, "tags": { "PURPOSE": "Create repository in Gitea for authenticated user.", "PRE": "name is non-empty and PAT has repo creation permission.", @@ -59687,17 +62970,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 923 + "line_number": 1396 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 923 + "line_number": 1396 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 923 + "line_number": 1396 } ], "score": 0.55 @@ -59707,8 +62990,8 @@ "name": "delete_gitea_repository", "type": "Function", "tier": "STANDARD", - "start_line": 959, - "end_line": 978, + "start_line": 1432, + "end_line": 1451, "tags": { "PURPOSE": "Delete repository in Gitea.", "PRE": "owner and repo_name are non-empty.", @@ -59722,17 +63005,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 959 + "line_number": 1432 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 959 + "line_number": 1432 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 959 + "line_number": 1432 } ], "score": 0.55 @@ -59742,8 +63025,8 @@ "name": "_gitea_branch_exists", "type": "Function", "tier": "STANDARD", - "start_line": 980, - "end_line": 1003, + "start_line": 1453, + "end_line": 1476, "tags": { "PURPOSE": "Check whether a branch exists in Gitea repository.", "PRE": "owner/repo/branch are non-empty.", @@ -59758,17 +63041,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 980 + "line_number": 1453 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 980 + "line_number": 1453 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 980 + "line_number": 1453 } ], "score": 0.55 @@ -59778,8 +63061,8 @@ "name": "_build_gitea_pr_404_detail", "type": "Function", "tier": "STANDARD", - "start_line": 1005, - "end_line": 1038, + "start_line": 1478, + "end_line": 1511, "tags": { "PURPOSE": "Build actionable error detail for Gitea PR 404 responses.", "PRE": "owner/repo/from_branch/to_branch are provided.", @@ -59794,17 +63077,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1005 + "line_number": 1478 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1005 + "line_number": 1478 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1005 + "line_number": 1478 } ], "score": 0.55 @@ -59814,8 +63097,8 @@ "name": "create_github_repository", "type": "Function", "tier": "STANDARD", - "start_line": 1040, - "end_line": 1090, + "start_line": 1513, + "end_line": 1563, "tags": { "PURPOSE": "Create repository in GitHub or GitHub Enterprise.", "PRE": "PAT has repository create permission.", @@ -59830,17 +63113,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1040 + "line_number": 1513 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1040 + "line_number": 1513 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1040 + "line_number": 1513 } ], "score": 0.55 @@ -59850,8 +63133,8 @@ "name": "create_gitlab_repository", "type": "Function", "tier": "STANDARD", - "start_line": 1092, - "end_line": 1150, + "start_line": 1565, + "end_line": 1623, "tags": { "PURPOSE": "Create repository(project) in GitLab.", "PRE": "PAT has api scope.", @@ -59866,17 +63149,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1092 + "line_number": 1565 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1092 + "line_number": 1565 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1092 + "line_number": 1565 } ], "score": 0.55 @@ -59886,8 +63169,8 @@ "name": "_parse_remote_repo_identity", "type": "Function", "tier": "STANDARD", - "start_line": 1152, - "end_line": 1185, + "start_line": 1625, + "end_line": 1658, "tags": { "PURPOSE": "Parse owner/repo from remote URL for Git server API operations.", "PRE": "remote_url is a valid git URL.", @@ -59902,17 +63185,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1152 + "line_number": 1625 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1152 + "line_number": 1625 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1152 + "line_number": 1625 } ], "score": 0.55 @@ -59922,8 +63205,8 @@ "name": "_derive_server_url_from_remote", "type": "Function", "tier": "STANDARD", - "start_line": 1187, - "end_line": 1207, + "start_line": 1660, + "end_line": 1680, "tags": { "PURPOSE": "Build API base URL from remote repository URL without credentials.", "PRE": "remote_url may be any git URL.", @@ -59938,17 +63221,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1187 + "line_number": 1660 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1187 + "line_number": 1660 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1187 + "line_number": 1660 } ], "score": 0.55 @@ -59958,8 +63241,8 @@ "name": "promote_direct_merge", "type": "Function", "tier": "STANDARD", - "start_line": 1209, - "end_line": 1272, + "start_line": 1682, + "end_line": 1745, "tags": { "PURPOSE": "Perform direct merge between branches in local repo and push target branch.", "PRE": "Repository exists and both branches are valid.", @@ -59978,8 +63261,8 @@ "name": "create_gitea_pull_request", "type": "Function", "tier": "STANDARD", - "start_line": 1274, - "end_line": 1360, + "start_line": 1747, + "end_line": 1833, "tags": { "PURPOSE": "Create pull request in Gitea.", "PRE": "Config and remote URL are valid.", @@ -59994,17 +63277,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1274 + "line_number": 1747 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1274 + "line_number": 1747 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1274 + "line_number": 1747 } ], "score": 0.55 @@ -60014,8 +63297,8 @@ "name": "create_github_pull_request", "type": "Function", "tier": "STANDARD", - "start_line": 1362, - "end_line": 1414, + "start_line": 1835, + "end_line": 1887, "tags": { "PURPOSE": "Create pull request in GitHub or GitHub Enterprise.", "PRE": "Config and remote URL are valid.", @@ -60030,17 +63313,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1362 + "line_number": 1835 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1362 + "line_number": 1835 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1362 + "line_number": 1835 } ], "score": 0.55 @@ -60050,8 +63333,8 @@ "name": "create_gitlab_merge_request", "type": "Function", "tier": "STANDARD", - "start_line": 1416, - "end_line": 1468, + "start_line": 1889, + "end_line": 1941, "tags": { "PURPOSE": "Create merge request in GitLab.", "PRE": "Config and remote URL are valid.", @@ -60066,17 +63349,17 @@ { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1416 + "line_number": 1889 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1416 + "line_number": 1889 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1416 + "line_number": 1889 } ], "score": 0.55 @@ -60089,16 +63372,160 @@ { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 35 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 34 + "line_number": 35 } ], "score": 0.5499999999999999 } + }, + { + "name": "_read_blob_text", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 838, + "end_line": 838, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_get_unmerged_file_paths", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 847, + "end_line": 847, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "_build_unfinished_merge_payload", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 854, + "end_line": 854, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "get_merge_status", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 904, + "end_line": 904, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "get_merge_conflicts", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 934, + "end_line": 934, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "resolve_merge_conflicts", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 956, + "end_line": 956, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "abort_merge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 990, + "end_line": 990, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "continue_merge", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 1003, + "end_line": 1003, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } } ], "compliance": { @@ -73707,7 +77134,7 @@ "type": "Module", "tier": "TRIVIAL", "start_line": 1, - "end_line": 115, + "end_line": 132, "tags": { "PURPOSE": "Auto-generated module for backend/tests/core/test_defensive_guards.py", "TIER": "TRIVIAL", @@ -73966,6 +77393,24 @@ "issues": [], "score": 1.0 } + }, + { + "name": "test_git_service_configure_identity_updates_repo_local_config", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 118, + "end_line": 118, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } } ], "compliance": {