diff --git a/.ai/MODULE_MAP.md b/.ai/MODULE_MAP.md
index 9a4892f..3cc0dcc 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-04T13:18:11.370535
+**Generated:** 2026-03-06T15:13:36.187520
## Summary
-- **Total Modules:** 83
-- **Total Entities:** 2349
+- **Total Modules:** 90
+- **Total Entities:** 2508
## Module Hierarchy
@@ -54,9 +54,9 @@
### π `routes/`
- ποΈ **Layers:** API, UI (API)
- - π **Tiers:** CRITICAL: 11, STANDARD: 226, TRIVIAL: 8
- - π **Files:** 18
- - π¦ **Entities:** 245
+ - π **Tiers:** CRITICAL: 12, STANDARD: 240, TRIVIAL: 8
+ - π **Files:** 19
+ - π¦ **Entities:** 260
**Key Entities:**
@@ -86,15 +86,15 @@
- π DEPENDS_ON -> ConfigManager
- π DEPENDS_ON -> ConfigModels
- π DEPENDS_ON -> backend.src.core.database
+ - π DEPENDS_ON -> backend.src.core.database.get_db
- π DEPENDS_ON -> backend.src.core.superset_client
- - π DEPENDS_ON -> backend.src.core.task_manager
### π `__tests__/`
- ποΈ **Layers:** API, Domain, Domain (Tests), UI (API Tests), Unknown
- - π **Tiers:** STANDARD: 63, TRIVIAL: 134
- - π **Files:** 12
- - π¦ **Entities:** 197
+ - π **Tiers:** STANDARD: 81, TRIVIAL: 134
+ - π **Files:** 13
+ - π¦ **Entities:** 215
**Key Entities:**
@@ -126,9 +126,9 @@
### π `core/`
- ποΈ **Layers:** Core
- - π **Tiers:** CRITICAL: 45, STANDARD: 88, TRIVIAL: 8
- - π **Files:** 10
- - π¦ **Entities:** 141
+ - π **Tiers:** CRITICAL: 45, STANDARD: 94, TRIVIAL: 8
+ - π **Files:** 11
+ - π¦ **Entities:** 147
**Key Entities:**
@@ -161,12 +161,26 @@
- π DEPENDS_ON -> backend.src.core.auth.config
- π DEPENDS_ON -> backend.src.core.logger
+ ### π `__tests__/`
+
+ - ποΈ **Layers:** Domain
+ - π **Tiers:** STANDARD: 7
+ - π **Files:** 1
+ - π¦ **Entities:** 7
+
+ **Key Entities:**
+
+ - β **_RecordingNetworkClient** (Class)
+ - Records request payloads and returns scripted responses for ...
+ - π¦ **backend.src.core.__tests__.test_superset_profile_lookup** (Module)
+ - Verifies Superset profile lookup adapter payload normalizati...
+
### π `auth/`
- ποΈ **Layers:** Core
- - π **Tiers:** CRITICAL: 26
+ - π **Tiers:** CRITICAL: 28
- π **Files:** 6
- - π¦ **Entities:** 26
+ - π¦ **Entities:** 28
**Key Entities:**
@@ -252,9 +266,9 @@
### π `task_manager/`
- ποΈ **Layers:** Core
- - π **Tiers:** CRITICAL: 10, STANDARD: 63, TRIVIAL: 5
+ - π **Tiers:** CRITICAL: 10, STANDARD: 63, TRIVIAL: 6
- π **Files:** 7
- - π¦ **Entities:** 78
+ - π¦ **Entities:** 79
**Key Entities:**
@@ -338,9 +352,9 @@
### π `models/`
- ποΈ **Layers:** Domain, Model
- - π **Tiers:** CRITICAL: 20, STANDARD: 33, TRIVIAL: 29
- - π **Files:** 12
- - π¦ **Entities:** 82
+ - π **Tiers:** CRITICAL: 20, STANDARD: 35, TRIVIAL: 29
+ - π **Files:** 13
+ - π¦ **Entities:** 84
**Key Entities:**
@@ -370,8 +384,8 @@
- π DEPENDS_ON -> Role
- π DEPENDS_ON -> TaskRecord
- π DEPENDS_ON -> backend.src.core.task_manager.models
+ - π DEPENDS_ON -> backend.src.models.auth
- π DEPENDS_ON -> backend.src.models.mapping
- - π DEPENDS_ON -> sqlalchemy
### π `__tests__/`
@@ -495,9 +509,9 @@
### π `schemas/`
- ποΈ **Layers:** API
- - π **Tiers:** CRITICAL: 10, TRIVIAL: 3
- - π **Files:** 1
- - π¦ **Entities:** 13
+ - π **Tiers:** CRITICAL: 10, STANDARD: 7, TRIVIAL: 3
+ - π **Files:** 2
+ - π¦ **Entities:** 20
**Key Entities:**
@@ -507,20 +521,20 @@
- Represents an AD Group to Role mapping in API responses.
- β **PermissionSchema** (Class) `[TRIVIAL]`
- Represents a permission in API responses.
+ - β **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...
- β **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.
- - β **Token** (Class) `[TRIVIAL]`
- - Represents a JWT access token response.
- - β **TokenData** (Class) `[TRIVIAL]`
- - Represents the data encoded in a JWT token.
- - β **User** (Class) `[CRITICAL]`
- - Schema for user data in API responses.
- - β **UserBase** (Class) `[CRITICAL]`
- - Base schema for user data.
+ - β **SupersetAccountCandidate** (Class)
+ - Canonical account candidate projected from Superset users pa...
**Dependencies:**
@@ -529,14 +543,16 @@
### π `scripts/`
- ποΈ **Layers:** Scripts, UI, Unknown
- - π **Tiers:** CRITICAL: 2, STANDARD: 25, TRIVIAL: 3
+ - π **Tiers:** CRITICAL: 2, STANDARD: 27, TRIVIAL: 14
- π **Files:** 7
- - π¦ **Entities:** 30
+ - π¦ **Entities:** 43
**Key Entities:**
+ - β **CleanReleaseTUI** (Class)
+ - Curses-based application for compliance monitoring.
- π¦ **backend.src.scripts.clean_release_tui** (Module)
- - Provide clean release TUI entrypoint placeholder for phased ...
+ - Interactive terminal interface for Enterprise Clean Release ...
- π¦ **backend.src.scripts.create_admin** (Module)
- CLI tool for creating the initial admin user.
- π¦ **backend.src.scripts.init_auth_db** (Module) `[CRITICAL]`
@@ -550,12 +566,17 @@
- π¦ **test_dataset_dashboard_relations** (Module) `[TRIVIAL]`
- Auto-generated module for backend/src/scripts/test_dataset_d...
+ **Dependencies:**
+
+ - π DEPENDS_ON -> backend.src.services.clean_release.compliance_orchestrator
+ - π DEPENDS_ON -> backend.src.services.clean_release.repository
+
### π `services/`
- ποΈ **Layers:** Core, Domain, Service
- - π **Tiers:** CRITICAL: 7, STANDARD: 76, TRIVIAL: 6
- - π **Files:** 7
- - π¦ **Entities:** 89
+ - π **Tiers:** CRITICAL: 9, STANDARD: 104, TRIVIAL: 7
+ - π **Files:** 9
+ - π¦ **Entities:** 120
**Key Entities:**
@@ -563,37 +584,37 @@
- Provides high-level authentication services.
- β **EncryptionManager** (Class) `[CRITICAL]`
- Handles encryption and decryption of sensitive data like API...
+ - β **EnvironmentNotFoundError** (Class)
+ - Raised when environment_id from lookup request is unknown in...
- β **GitService** (Class)
- Wrapper for GitPython operations with semantic logging and e...
- β **LLMProviderService** (Class)
- Service to manage LLM provider lifecycle.
- β **MappingService** (Class)
- Service for handling database mapping logic.
+ - β **ProfileAuthorizationError** (Class)
+ - Raised when caller attempts cross-user preference mutation.
+ - β **ProfileService** (Class) `[CRITICAL]`
+ - Implements profile preference read/update flow and Superset ...
+ - β **ProfileValidationError** (Class)
+ - Domain validation error for profile preference update reques...
- β **ResourceService** (Class)
- Provides centralized access to resource data with enhanced m...
- - π¦ **backend.src.services** (Module)
- - Package initialization for services module
- - π¦ **backend.src.services.auth_service** (Module) `[CRITICAL]`
- - Orchestrates authentication business logic.
- - π¦ **backend.src.services.git_service** (Module)
- - Core Git logic using GitPython to manage dashboard repositor...
- - π¦ **backend.src.services.llm_prompt_templates** (Module)
- - Provide default LLM prompt templates and normalization helpe...
**Dependencies:**
+ - π DEPENDS_ON -> backend.src.core.auth.repository
- π DEPENDS_ON -> backend.src.core.config_manager
- π DEPENDS_ON -> backend.src.core.database
- π DEPENDS_ON -> backend.src.core.superset_client
- π DEPENDS_ON -> backend.src.core.task_manager
- - π DEPENDS_ON -> backend.src.core.utils.matching
### π `__tests__/`
- - ποΈ **Layers:** Domain, Domain Tests, Service, Unknown
- - π **Tiers:** STANDARD: 24, TRIVIAL: 17
- - π **Files:** 4
- - π¦ **Entities:** 41
+ - ποΈ **Layers:** Domain, Domain Tests, Service, Service Tests, Unknown
+ - π **Tiers:** STANDARD: 29, TRIVIAL: 17
+ - π **Files:** 5
+ - π¦ **Entities:** 46
**Key Entities:**
@@ -601,6 +622,8 @@
- Validate EncryptionManager encrypt/decrypt roundtrip, unique...
- π¦ **backend.src.services.__tests__.test_llm_prompt_templates** (Module)
- Validate normalization and rendering behavior for configurab...
+ - π¦ **backend.src.services.__tests__.test_rbac_permission_catalog** (Module)
+ - Verifies RBAC permission catalog discovery and idempotent sy...
- π¦ **backend.src.services.__tests__.test_resource_service** (Module)
- Unit tests for ResourceService
- π¦ **test_encryption_manager** (Module)
@@ -615,13 +638,17 @@
### π `clean_release/`
- ποΈ **Layers:** Domain, Infra
- - π **Tiers:** CRITICAL: 3, STANDARD: 12, TRIVIAL: 33
+ - π **Tiers:** CRITICAL: 3, STANDARD: 16, TRIVIAL: 32
- π **Files:** 10
- - π¦ **Entities:** 48
+ - π¦ **Entities:** 51
**Key Entities:**
+ - β **CleanComplianceOrchestrator** (Class)
+ - Coordinate clean-release compliance verification stages.
- β **CleanPolicyEngine** (Class)
+ - β **CleanReleaseRepository** (Class)
+ - Data access object for clean release lifecycle.
- π¦ **backend.src.services.clean_release** (Module)
- Initialize clean release service package and provide explici...
- π¦ **backend.src.services.clean_release.audit_service** (Module)
@@ -636,10 +663,6 @@
- Prepare release candidate by policy evaluation and determini...
- π¦ **backend.src.services.clean_release.report_builder** (Module) `[CRITICAL]`
- Build and persist compliance reports with consistent counter...
- - π¦ **backend.src.services.clean_release.repository** (Module)
- - Provide repository adapter for clean release entities with d...
- - π¦ **backend.src.services.clean_release.source_isolation** (Module)
- - Validate that all resource endpoints belong to the approved ...
**Dependencies:**
@@ -720,9 +743,9 @@
### π `tests/`
- ποΈ **Layers:** Core, Domain (Tests), Logging (Tests), Test, Unknown
- - π **Tiers:** STANDARD: 86, TRIVIAL: 85
+ - π **Tiers:** STANDARD: 87, TRIVIAL: 85
- π **Files:** 10
- - π¦ **Entities:** 171
+ - π¦ **Entities:** 172
**Key Entities:**
@@ -750,9 +773,9 @@
### π `core/`
- ποΈ **Layers:** Domain, Unknown
- - π **Tiers:** STANDARD: 5, TRIVIAL: 33
+ - π **Tiers:** STANDARD: 6, TRIVIAL: 45
- π **Files:** 4
- - π¦ **Entities:** 38
+ - π¦ **Entities:** 51
**Key Entities:**
@@ -779,12 +802,24 @@
- π¦ **backend.tests.core.migration.test_dry_run_orchestrator** (Module)
- Unit tests for MigrationDryRunService diff and risk computat...
+ ### π `scripts/`
+
+ - ποΈ **Layers:** Scripts
+ - π **Tiers:** STANDARD: 1, TRIVIAL: 7
+ - π **Files:** 1
+ - π¦ **Entities:** 8
+
+ **Key Entities:**
+
+ - π¦ **backend.tests.scripts.test_clean_release_tui** (Module)
+ - Unit tests for the interactive curses TUI of the clean relea...
+
### π `components/`
- ποΈ **Layers:** Component, Feature, UI, UI -->, Unknown
- - π **Tiers:** STANDARD: 69, TRIVIAL: 4
+ - π **Tiers:** STANDARD: 73, TRIVIAL: 4
- π **Files:** 14
- - π¦ **Entities:** 73
+ - π¦ **Entities:** 77
**Key Entities:**
@@ -824,21 +859,21 @@
### π `auth/`
- ποΈ **Layers:** Component
- - π **Tiers:** TRIVIAL: 1
+ - π **Tiers:** CRITICAL: 2
- π **Files:** 1
- - π¦ **Entities:** 1
+ - π¦ **Entities:** 2
**Key Entities:**
- - π§© **ProtectedRoute** (Component) `[TRIVIAL]`
- - Wraps content to ensure only authenticated users can access ...
+ - π§© **ProtectedRoute** (Component) `[CRITICAL]`
+ - Wraps content to ensure only authenticated and authorized us...
### π `git/`
- ποΈ **Layers:** Component
- - π **Tiers:** STANDARD: 45
+ - π **Tiers:** STANDARD: 46
- π **Files:** 6
- - π¦ **Entities:** 45
+ - π¦ **Entities:** 46
**Key Entities:**
@@ -890,9 +925,9 @@
### π `storage/`
- ποΈ **Layers:** UI
- - π **Tiers:** STANDARD: 7
+ - π **Tiers:** STANDARD: 8
- π **Files:** 2
- - π¦ **Entities:** 7
+ - π¦ **Entities:** 8
**Key Entities:**
@@ -1002,16 +1037,30 @@
### π `auth/`
- - ποΈ **Layers:** Feature
- - π **Tiers:** CRITICAL: 7
- - π **Files:** 1
- - π¦ **Entities:** 7
+ - ποΈ **Layers:** Domain, Feature
+ - π **Tiers:** CRITICAL: 11, TRIVIAL: 1
+ - π **Files:** 2
+ - π¦ **Entities:** 12
**Key Entities:**
+ - π¦ **frontend.src.lib.auth.permissions** (Module) `[CRITICAL]`
+ - Shared frontend RBAC utilities for route guards and menu vis...
- ποΈ **authStore** (Store) `[CRITICAL]`
- Manages the global authentication state on the frontend.
+ ### π `__tests__/`
+
+ - ποΈ **Layers:** UI (Tests)
+ - π **Tiers:** STANDARD: 1
+ - π **Files:** 1
+ - π¦ **Entities:** 1
+
+ **Key Entities:**
+
+ - π¦ **frontend.src.lib.auth.__tests__.permissions** (Module)
+ - Verifies frontend RBAC permission parsing and access checks.
+
### π `assistant/`
- ποΈ **Layers:** UI, Unknown
@@ -1041,9 +1090,9 @@
### π `layout/`
- ποΈ **Layers:** UI, Unknown
- - π **Tiers:** STANDARD: 8, TRIVIAL: 48
- - π **Files:** 4
- - π¦ **Entities:** 56
+ - π **Tiers:** STANDARD: 11, TRIVIAL: 47
+ - π **Files:** 5
+ - π¦ **Entities:** 58
**Key Entities:**
@@ -1063,16 +1112,24 @@
- Auto-generated module for frontend/src/lib/components/layout...
- π¦ **TopNavbar** (Module) `[TRIVIAL]`
- Auto-generated module for frontend/src/lib/components/layout...
+ - π¦ **frontend.src.lib.components.layout.sidebarNavigation** (Module)
+ - Build sidebar navigation categories filtered by current user...
+
+ **Dependencies:**
+
+ - π DEPENDS_ON -> frontend.src.lib.auth.permissions.hasPermission
### π `__tests__/`
- - ποΈ **Layers:** Unknown
- - π **Tiers:** TRIVIAL: 3
- - π **Files:** 1
- - π¦ **Entities:** 3
+ - ποΈ **Layers:** UI (Tests), Unknown
+ - π **Tiers:** STANDARD: 1, TRIVIAL: 4
+ - π **Files:** 2
+ - π¦ **Entities:** 5
**Key Entities:**
+ - π¦ **frontend.src.lib.components.layout.__tests__.sidebarNavigation** (Module)
+ - Verifies RBAC-based sidebar category and subitem visibility.
- π¦ **test_breadcrumbs.svelte** (Module) `[TRIVIAL]`
- Auto-generated module for frontend/src/lib/components/layout...
@@ -1347,9 +1404,9 @@
### π `dashboards/`
- ποΈ **Layers:** UI, Unknown
- - π **Tiers:** STANDARD: 24, TRIVIAL: 61
+ - π **Tiers:** STANDARD: 26, TRIVIAL: 63
- π **Files:** 1
- - π¦ **Entities:** 85
+ - π¦ **Entities:** 89
**Key Entities:**
@@ -1368,6 +1425,18 @@
- π¦ **+page** (Module) `[TRIVIAL]`
- Auto-generated module for frontend/src/routes/dashboards/[id...
+ ### π `__tests__/`
+
+ - ποΈ **Layers:** UI (Tests)
+ - π **Tiers:** STANDARD: 1, TRIVIAL: 2
+ - π **Files:** 1
+ - π¦ **Entities:** 3
+
+ **Key Entities:**
+
+ - π¦ **frontend.src.routes.dashboards.__tests__.dashboard_profile_override_integration** (Module)
+ - Verifies temporary show-all override and restore-on-return b...
+
### π `datasets/`
- ποΈ **Layers:** UI, Unknown
@@ -1441,6 +1510,43 @@
- π§© **MappingManagement** (Component) `[CRITICAL]`
- Page for managing database mappings between environments.
+ ### π `profile/`
+
+ - ποΈ **Layers:** Unknown
+ - π **Tiers:** TRIVIAL: 9
+ - π **Files:** 1
+ - π¦ **Entities:** 9
+
+ **Key Entities:**
+
+ - π¦ **+page** (Module) `[TRIVIAL]`
+ - Auto-generated module for frontend/src/routes/profile/+page....
+
+ ### π `__tests__/`
+
+ - ποΈ **Layers:** UI (Tests)
+ - π **Tiers:** STANDARD: 2
+ - π **Files:** 2
+ - π¦ **Entities:** 2
+
+ **Key Entities:**
+
+ - π¦ **frontend.src.routes.profile.__tests__.profile_preferences_integration** (Module)
+ - Verifies profile binding happy path and degraded lookup manu...
+ - π¦ **frontend.src.routes.profile.__tests__.profile_settings_state_integration** (Module)
+ - Verifies profile settings preload, cancel without persistenc...
+
+ ### π `fixtures/`
+
+ - π **Tiers:** TRIVIAL: 1
+ - π **Files:** 1
+ - π¦ **Entities:** 1
+
+ **Key Entities:**
+
+ - π¦ **frontend.src.routes.profile.__tests__.fixtures.profile_fixtures** (Module) `[TRIVIAL]`
+ - Shared fixture placeholders for profile page integration tes...
+
### π `reports/`
- ποΈ **Layers:** UI, Unknown
@@ -1512,9 +1618,9 @@
### π `repos/`
- - π **Tiers:** STANDARD: 3
+ - π **Tiers:** STANDARD: 4
- π **Files:** 1
- - π¦ **Entities:** 3
+ - π¦ **Entities:** 4
### π `debug/`
@@ -1543,9 +1649,9 @@
### π `storage/`
- ποΈ **Layers:** UI
- - π **Tiers:** STANDARD: 6
+ - π **Tiers:** STANDARD: 7
- π **Files:** 1
- - π¦ **Entities:** 6
+ - π¦ **Entities:** 7
**Key Entities:**
@@ -1555,9 +1661,9 @@
### π `services/`
- ποΈ **Layers:** Service
- - π **Tiers:** STANDARD: 33, TRIVIAL: 1
+ - π **Tiers:** STANDARD: 35, TRIVIAL: 1
- π **Files:** 6
- - π¦ **Entities:** 34
+ - π¦ **Entities:** 36
**Key Entities:**
@@ -1586,17 +1692,15 @@
### π `root/`
-- ποΈ **Layers:** DevOps/Tooling, Domain, Unknown
-- π **Tiers:** CRITICAL: 11, STANDARD: 27, TRIVIAL: 12
-- π **Files:** 4
-- π¦ **Entities:** 50
+- ποΈ **Layers:** DevOps/Tooling, Unknown
+- π **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 9
+- π **Files:** 2
+- π¦ **Entities:** 37
**Key Entities:**
- β **ComplianceIssue** (Class) `[TRIVIAL]`
- Represents a single compliance issue with severity.
- - β **ReportsService** (Class)
- - Service layer for list/detail report retrieval and normaliza...
- β **SemanticEntity** (Class) `[CRITICAL]`
- Represents a code entity (Module, Function, Component) found...
- β **SemanticMapGenerator** (Class) `[CRITICAL]`
@@ -1605,20 +1709,10 @@
- Severity levels for compliance issues.
- β **Tier** (Class) `[TRIVIAL]`
- Enumeration of semantic tiers defining validation strictness...
- - π¦ **backend.src.services.reports.report_service** (Module)
- - Aggregate, normalize, filter, and paginate task reports for ...
- π¦ **check_test_data** (Module) `[TRIVIAL]`
- Auto-generated module for check_test_data.py
- π¦ **generate_semantic_map** (Module)
- Scans the codebase to generate a Semantic Map, Module Map, a...
- - π¦ **test_analyze** (Module) `[TRIVIAL]`
- - Auto-generated module for test_analyze.py
-
-**Dependencies:**
-
- - π DEPENDS_ON -> backend.src.core.task_manager.manager.TaskManager
- - π DEPENDS_ON -> backend.src.models.report
- - π DEPENDS_ON -> backend.src.services.reports.normalizer
## Cross-Module Dependencies
@@ -1655,6 +1749,10 @@ graph TD
routes-->|DEPENDS_ON|backend
routes-->|DEPENDS_ON|backend
routes-->|DEPENDS_ON|backend
+ routes-->|DEPENDS_ON|backend
+ routes-->|DEPENDS_ON|backend
+ routes-->|DEPENDS_ON|backend
+ __tests__-->|TESTS|backend
__tests__-->|TESTS|backend
__tests__-->|TESTS|backend
__tests__-->|TESTS|backend
@@ -1664,12 +1762,15 @@ graph TD
__tests__-->|DEPENDS_ON|backend
__tests__-->|DEPENDS_ON|backend
__tests__-->|VERIFIES|backend
+ core-->|DEPENDS_ON|backend
+ core-->|DEPENDS_ON|backend
core-->|USES|backend
core-->|USES|backend
core-->|DEPENDS_ON|backend
core-->|DEPENDS_ON|backend
core-->|DEPENDS_ON|backend
core-->|DEPENDS_ON|backend
+ __tests__-->|TESTS|backend
auth-->|USES|backend
auth-->|USES|backend
auth-->|USES|backend
@@ -1688,12 +1789,16 @@ graph TD
models-->|DEPENDS_ON|backend
models-->|USED_BY|backend
models-->|INHERITS_FROM|backend
+ models-->|DEPENDS_ON|backend
+ models-->|INHERITS_FROM|backend
__tests__-->|TESTS|backend
llm_analysis-->|IMPLEMENTS|backend
llm_analysis-->|IMPLEMENTS|backend
storage-->|DEPENDS_ON|backend
scripts-->|USES|backend
scripts-->|USES|backend
+ scripts-->|DEPENDS_ON|backend
+ scripts-->|DEPENDS_ON|backend
scripts-->|READS_FROM|backend
scripts-->|READS_FROM|backend
scripts-->|USES|backend
@@ -1708,6 +1813,13 @@ graph TD
services-->|DEPENDS_ON|backend
services-->|DEPENDS_ON|backend
services-->|DEPENDS_ON|backend
+ services-->|DEPENDS_ON|backend
+ services-->|DEPENDS_ON|backend
+ services-->|DEPENDS_ON|backend
+ services-->|DEPENDS_ON|backend
+ services-->|DEPENDS_ON|backend
+ services-->|CALLS|backend
+ services-->|DEPENDS_ON|backend
services-->|USES|backend
services-->|USES|backend
services-->|USES|backend
@@ -1716,6 +1828,7 @@ graph TD
__tests__-->|TESTS|backend
__tests__-->|DEPENDS_ON|backend
__tests__-->|TESTS|backend
+ __tests__-->|TESTS|backend
clean_release-->|DEPENDS_ON|backend
clean_release-->|DEPENDS_ON|backend
clean_release-->|DEPENDS_ON|backend
@@ -1753,9 +1866,12 @@ graph TD
core-->|VERIFIES|backend
migration-->|VERIFIES|backend
migration-->|VERIFIES|backend
+ scripts-->|TESTS|backend
__tests__-->|VERIFIES|components
__tests__-->|VERIFIES|components
+ __tests__-->|TESTS|lib
__tests__-->|VERIFIES|lib
+ __tests__-->|TESTS|lib
reports-->|DEPENDS_ON|lib
__tests__-->|TESTS|routes
__tests__-->|TESTS|routes
@@ -1763,7 +1879,7 @@ graph TD
__tests__-->|TESTS|lib
__tests__-->|TESTS|lib
__tests__-->|TESTS|routes
- root-->|DEPENDS_ON|backend
- root-->|DEPENDS_ON|backend
- root-->|DEPENDS_ON|backend
+ __tests__-->|TESTS|routes
+ __tests__-->|TESTS|routes
+ __tests__-->|TESTS|routes
```
diff --git a/.ai/PROJECT_MAP.md b/.ai/PROJECT_MAP.md
index 1fa1447..e9d1b1b 100644
--- a/.ai/PROJECT_MAP.md
+++ b/.ai/PROJECT_MAP.md
@@ -7,45 +7,6 @@
- ποΈ Layer: Unknown
- Ζ **check_file** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
-- π¦ **backend.src.services.reports.report_service** (`Module`)
- - π Aggregate, normalize, filter, and paginate task reports for unified list/detail API use cases.
- - ποΈ Layer: Domain
- - π Invariant: List responses are deterministic and include applied filter echo metadata.
- - π DEPENDS_ON -> `backend.src.core.task_manager.manager.TaskManager`
- - π DEPENDS_ON -> `backend.src.models.report`
- - π DEPENDS_ON -> `backend.src.services.reports.normalizer`
- - β **ReportsService** (`Class`)
- - π Service layer for list/detail report retrieval and normalization.
- - π Invariant: Service methods are read-only over task history source.
- - Ζ **__init__** (`Function`)
- - π Initialize service with TaskManager dependency.
- - π Invariant: Constructor performs no task mutations.
- - Ζ **_load_normalized_reports** (`Function`)
- - π Build normalized reports from all available tasks.
- - π Invariant: Every returned item is a TaskReport.
- - Ζ **_to_utc_datetime** (`Function`)
- - π Normalize naive/aware datetime values to UTC-aware datetime for safe comparisons.
- - π Invariant: Naive datetimes are interpreted as UTC to preserve deterministic ordering/filtering.
- - Ζ **_datetime_sort_key** (`Function`)
- - π Produce stable numeric sort key for report timestamps.
- - π Invariant: Mixed naive/aware datetimes never raise TypeError.
- - Ζ **_matches_query** (`Function`)
- - π Apply query filtering to a report.
- - π Invariant: Filter evaluation is side-effect free.
- - Ζ **_sort_reports** (`Function`)
- - π Sort reports deterministically according to query settings.
- - π Invariant: Sorting criteria are deterministic for equal input.
- - Ζ **list_reports** (`Function`)
- - π Return filtered, sorted, paginated report collection.
- - Ζ **get_report_detail** (`Function`)
- - π Return one normalized report with timeline/diagnostics/next actions.
- - Ζ **print_entity** (`Function`) `[TRIVIAL]`
- - π Auto-detected function (orphan)
-- π¦ **test_analyze** (`Module`) `[TRIVIAL]`
- - π Auto-generated module for test_analyze.py
- - ποΈ Layer: Unknown
- - Ζ **print_issues** (`Function`) `[TRIVIAL]`
- - π Auto-detected function (orphan)
- π¦ **generate_semantic_map** (`Module`)
- π Scans the codebase to generate a Semantic Map, Module Map, and Compliance Report based on the System Standard.
- ποΈ Layer: DevOps/Tooling
@@ -206,6 +167,21 @@
- π Clears authentication state and storage.
- Ζ **setLoading** (`Function`) `[CRITICAL]`
- π Updates the loading state.
+- π¦ **frontend.src.lib.auth.permissions** (`Module`) `[CRITICAL]`
+ - π Shared frontend RBAC utilities for route guards and menu visibility.
+ - ποΈ Layer: Domain
+ - π Invariant: Admin role always bypasses explicit permission checks.
+ - Ζ **normalizePermissionRequirement** (`Function`) `[CRITICAL]`
+ - π Convert permission requirement string to canonical resource/action tuple.
+ - Ζ **isAdminUser** (`Function`) `[CRITICAL]`
+ - π Determine whether user has Admin role.
+ - Ζ **hasPermission** (`Function`) `[CRITICAL]`
+ - π Check if user has a required resource/action permission.
+ - Ζ **normalizeAction** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+- π¦ **frontend.src.lib.auth.__tests__.permissions** (`Module`)
+ - π Verifies frontend RBAC permission parsing and access checks.
+ - ποΈ Layer: UI (Tests)
- π¦ **Debounce** (`Module`) `[TRIVIAL]`
- π Debounce utility for limiting function execution rate
- ποΈ Layer: Infra
@@ -559,12 +535,10 @@
- π Invariant: Always shows active category and item
- β¬
οΈ READS_FROM `app`
- β¬
οΈ READS_FROM `lib`
- - β¬
οΈ READS_FROM `t`
+ - β¬
οΈ READS_FROM `sidebarStore`
- π¦ **Sidebar** (`Module`) `[TRIVIAL]`
- π Auto-generated module for frontend/src/lib/components/layout/Sidebar.svelte
- ποΈ Layer: Unknown
- - Ζ **buildCategories** (`Function`) `[TRIVIAL]`
- - π Auto-detected function (orphan)
- Ζ **handleItemClick** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- Ζ **handleCategoryToggle** (`Function`) `[TRIVIAL]`
@@ -690,6 +664,15 @@
- π Auto-detected function (orphan)
- Ζ **connectWebSocket** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **frontend.src.lib.components.layout.sidebarNavigation** (`Module`)
+ - π Build sidebar navigation categories filtered by current user permissions.
+ - ποΈ Layer: UI
+ - π Invariant: Admin role can access all categories and subitems through permission utility.
+ - π DEPENDS_ON -> `frontend.src.lib.auth.permissions.hasPermission`
+ - Ζ **isItemAllowed** (`Function`)
+ - π Check whether a single menu node can be shown for a given user.
+ - Ζ **buildSidebarCategories** (`Function`)
+ - π Build translated sidebar categories and filter them by RBAC permissions.
- π¦ **test_breadcrumbs.svelte** (`Module`) `[TRIVIAL]`
- π Auto-generated module for frontend/src/lib/components/layout/__tests__/test_breadcrumbs.svelte.js
- ποΈ Layer: Unknown
@@ -697,6 +680,11 @@
- π Auto-detected function (orphan)
- Ζ **formatBreadcrumbLabel** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **frontend.src.lib.components.layout.__tests__.sidebarNavigation** (`Module`)
+ - π Verifies RBAC-based sidebar category and subitem visibility.
+ - ποΈ Layer: UI (Tests)
+ - Ζ **makeUser** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- π¦ **ErrorPage** (`Page`)
- π Global error page displaying HTTP status and messages
- ποΈ Layer: UI
@@ -830,6 +818,8 @@
- π Fetches the list of available environments.
- Ζ **fetchDashboards** (`Function`)
- π Fetches dashboards for a specific environment.
+ - Ζ **filterDashboardsWithRepositories** (`Function`)
+ - π Keep only dashboards that already have initialized Git repositories.
- π¦ **DashboardHub** (`Page`)
- π Dashboard Hub - Central hub for managing dashboards with Git status and task actions
- ποΈ Layer: UI
@@ -846,6 +836,10 @@
- π Normalize owners payload to unique non-empty display labels.
- Ζ **DashboardHub.loadDashboards** (`Function`)
- π Load full dashboard dataset for current environment and hydrate grid projection.
+ - Ζ **DashboardHub.handleTemporaryShowAll** (`Function`)
+ - π Temporarily disable profile-default dashboard filter for current page context.
+ - Ζ **DashboardHub.handleRestoreProfileFilter** (`Function`)
+ - π Re-enable persisted profile-default filtering after temporary override.
- Ζ **DashboardHub.formatDate** (`Function`)
- π Convert ISO timestamp to locale date string.
- Ζ **DashboardHub.getGitSummaryLabel** (`Function`)
@@ -903,6 +897,10 @@
- π Auto-detected function (orphan)
- Ζ **handlePageSizeChange** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+ - Ζ **handleTemporaryShowAll** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **handleRestoreProfileFilter** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- Ζ **updateSelectionState** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- Ζ **handleCheckboxChange** (`Function`) `[TRIVIAL]`
@@ -1003,6 +1001,13 @@
- π Auto-detected function (orphan)
- Ζ **getPaginationRange** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **frontend.src.routes.dashboards.__tests__.dashboard_profile_override_integration** (`Module`)
+ - π Verifies temporary show-all override and restore-on-return behavior for profile-default dashboard filtering.
+ - ποΈ Layer: UI (Tests)
+ - Ζ **buildFilteredResponse** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **buildUnfilteredResponse** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- π¦ **DashboardDetail** (`Page`)
- π Dashboard Detail View - Overview of charts and datasets linked to a dashboard
- ποΈ Layer: UI
@@ -1168,6 +1173,33 @@
- π Fetches databases from both environments and gets suggestions.
- Ζ **handleUpdate** (`Function`) `[CRITICAL]`
- π Saves a mapping to the backend.
+- π¦ **+page** (`Module`) `[TRIVIAL]`
+ - π Auto-generated module for frontend/src/routes/profile/+page.svelte
+ - ποΈ Layer: Unknown
+ - Ζ **parseValidationErrorsFromError** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **setSavedSnapshot** (`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)
+ - Ζ **handleEnvironmentChange** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **handleSave** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **handleCancel** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+- π¦ **frontend.src.routes.profile.__tests__.profile_settings_state_integration** (`Module`)
+ - π Verifies profile settings preload, cancel without persistence, and saved-state reload behavior.
+ - ποΈ Layer: UI (Tests)
+- π¦ **frontend.src.routes.profile.__tests__.profile_preferences_integration** (`Module`)
+ - π Verifies profile binding happy path and degraded lookup manual fallback save flow.
+ - ποΈ Layer: UI (Tests)
+- π¦ **frontend.src.routes.profile.__tests__.fixtures.profile_fixtures** (`Module`) `[TRIVIAL]`
+ - π Shared fixture placeholders for profile page integration tests.
- π§© **StoragePage** (`Component`)
- π Main page for unified file storage management.
- ποΈ Layer: UI
@@ -1177,6 +1209,8 @@
- β‘οΈ WRITES_TO `page`
- Ζ **loadFiles** (`Function`)
- π Fetches the list of files from the server.
+ - Ζ **resolveStorageQueryFromPath** (`Function`)
+ - π Splits UI path into storage API category and category-local subpath.
- Ζ **handleDelete** (`Function`)
- π Handles the file deletion process.
- Ζ **handleNavigate** (`Function`)
@@ -1383,6 +1417,8 @@
- ποΈ Layer: Service
- Ζ **getStorageAuthHeaders** (`Function`)
- π Returns headers with Authorization for storage API calls.
+ - Ζ **encodeStoragePath** (`Function`)
+ - π Encodes a storage-relative path preserving slash separators.
- Ζ **listFiles** (`Function`)
- π Fetches the list of files for a given category and subpath.
- Ζ **uploadFile** (`Function`)
@@ -1391,6 +1427,8 @@
- π Deletes a file or directory from storage.
- Ζ **downloadFileUrl** (`Function`)
- π Returns the URL for downloading a file.
+ - Ζ **downloadFile** (`Function`)
+ - π Downloads a file using authenticated fetch and saves it in browser.
- π§© **DashboardGrid** (`Component`)
- π Displays a grid of dashboards with selection and pagination.
- ποΈ Layer: Component
@@ -1423,8 +1461,16 @@
- Ζ **handleBulkCommit** (`Function`)
- Ζ **handleBulkPull** (`Function`)
- Ζ **handleBulkPush** (`Function`)
+ - Ζ **handleBulkDelete** (`Function`)
+ - π Removes selected repositories from storage and binding table.
- Ζ **handleManageSelected** (`Function`)
- π Opens Git manager for exactly one selected dashboard.
+ - Ζ **resolveDashboardRef** (`Function`)
+ - π Resolves dashboard slug from payload fields.
+ - Ζ **openGitManagerForDashboard** (`Function`)
+ - π Opens Git manager for provided dashboard metadata.
+ - Ζ **handleInitializeRepositories** (`Function`)
+ - π Opens Git manager from bulk actions to initialize selected repository.
- Ζ **getSortStatusValue** (`Function`)
- π Returns sort value for status column based on mode.
- Ζ **getStatusLabel** (`Function`)
@@ -1597,12 +1643,16 @@
- β‘οΈ WRITES_TO `t`
- Ζ **handleSelect** (`Function`)
- π Dispatches the selection change event.
-- π§© **ProtectedRoute** (`Component`) `[TRIVIAL]`
- - π Wraps content to ensure only authenticated users can access it.
+- π§© **ProtectedRoute** (`Component`) `[CRITICAL]`
+ - π Wraps content to ensure only authenticated and authorized users can access it.
- ποΈ Layer: Component
- - π Invariant: Redirects to /login if user is not authenticated.
+ - π Invariant: Redirects to /login if user is not authenticated and to fallback route when permission is denied.
+ - π₯ Props: requiredPermission: string | null , fallbackPath: string
- β¬
οΈ READS_FROM `app`
+ - β¬
οΈ READS_FROM `lib`
- β¬
οΈ READS_FROM `auth`
+ - Ζ **verifySessionAndAccess** (`Function`) `[CRITICAL]`
+ - π Validates active session and optional route permission before rendering protected slot.
- π§© **TaskLogPanel** (`Component`)
- π Combines log filtering and display into a single cohesive dark-themed panel.
- ποΈ Layer: UI
@@ -1668,6 +1718,8 @@
- π Formats file size in bytes into a human-readable string.
- Ζ **formatDate** (`Function`)
- π Formats an ISO date string into a localized readable format.
+ - Ζ **handleDownload** (`Function`)
+ - π Downloads selected file through authenticated API request.
- π§© **FileUpload** (`Component`)
- π Provides a form for uploading files to a specific category.
- ποΈ Layer: UI
@@ -1796,9 +1848,9 @@
- π§© **GitManager** (`Component`)
- π Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ UI ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Git Ρ ΡΠΎΠΊΡΡΠΎΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° (commit -> promote -> deploy).
- ποΈ Layer: Component
+ - β‘οΈ WRITES_TO `bindable`
- β‘οΈ WRITES_TO `props`
- β‘οΈ WRITES_TO `state`
- - β‘οΈ WRITES_TO `derived`
- Ζ **normalizeEnvStage** (`Function`)
- π Normalize environment stage with legacy fallback.
- Ζ **stageBadgeClass** (`Function`)
@@ -1833,6 +1885,8 @@
- π Return currently selected git server config.
- Ζ **resolveDefaultConfig** (`Function`)
- π Resolve default git config for current session.
+ - Ζ **resolvePushProviderLabel** (`Function`)
+ - π Resolve lower-case provider label for auto-push checkbox.
- Ζ **buildSuggestedRepoName** (`Function`)
- π Build deterministic repository name from dashboard title/id.
- Ζ **handleCreateRemoteRepo** (`Function`)
@@ -1974,10 +2028,37 @@
- Ζ **test_dashboard_dataset_relations** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- π¦ **backend.src.scripts.clean_release_tui** (`Module`)
- - π Provide clean release TUI entrypoint placeholder for phased implementation.
+ - π Interactive terminal interface for Enterprise Clean Release compliance validation.
- ποΈ Layer: UI
- - π Invariant: Entry point is executable and does not mutate release data in placeholder mode.
- - π BINDS_TO -> `specs/023-clean-repo-enterprise/ux_reference.md`
+ - π Invariant: TUI must provide a headless fallback for non-TTY environments.
+ - π DEPENDS_ON -> `backend.src.services.clean_release.compliance_orchestrator`
+ - π DEPENDS_ON -> `backend.src.services.clean_release.repository`
+ - β **CleanReleaseTUI** (`Class`)
+ - π Curses-based application for compliance monitoring.
+ - Ζ **run_checks** (`Function`)
+ - π Execute compliance orchestrator run and update UI state.
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **draw_header** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **draw_checks** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **draw_sources** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **draw_status** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **draw_footer** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **clear_history** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **refresh_screen** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **loop** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **tui_main** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- Ζ **main** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- π¦ **backend.src.scripts.migrate_sqlite_to_postgres** (`Module`)
@@ -2050,6 +2131,39 @@
- π Schema for updating an existing user.
- β **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.
+ - ποΈ Layer: API
+ - π Invariant: Schema shapes stay stable for profile UI states and dashboards filter metadata.
+ - π DEPENDS_ON -> `pydantic`
+ - β **ProfilePreference** (`Class`)
+ - π Represents persisted profile preference for a single authenticated user.
+ - β **ProfilePreferenceUpdateRequest** (`Class`)
+ - π Request payload for updating current user's dashboard filter preference.
+ - β **ProfilePreferenceResponse** (`Class`)
+ - π Response envelope for profile preference read/update endpoints.
+ - β **SupersetAccountLookupRequest** (`Class`)
+ - π Query contract for Superset account lookup by selected environment.
+ - β **SupersetAccountCandidate** (`Class`)
+ - π Canonical account candidate projected from Superset users payload.
+ - β **SupersetAccountLookupResponse** (`Class`)
+ - π Response envelope for Superset account lookup (success or degraded mode).
+- π¦ **backend.src.core.superset_profile_lookup** (`Module`)
+ - π Provides environment-scoped Superset account lookup adapter with stable normalized output.
+ - ποΈ Layer: Core
+ - π Invariant: Adapter never leaks raw upstream payload shape to API consumers.
+ - π DEPENDS_ON -> `backend.src.core.utils.network.APIClient`
+ - π DEPENDS_ON -> `backend.src.core.logger`
+ - β **SupersetAccountLookupAdapter** (`Class`)
+ - π Lookup Superset users and normalize candidates for profile binding.
+ - Ζ **__init__** (`Function`)
+ - π Initializes lookup adapter with authenticated API client and environment context.
+ - Ζ **get_users_page** (`Function`)
+ - π Fetch one users page from Superset with passthrough search/sort parameters.
+ - Ζ **_normalize_lookup_payload** (`Function`)
+ - π Convert Superset users response variants into stable candidates payload.
+ - Ζ **normalize_user_payload** (`Function`)
+ - π Project raw Superset user object to canonical candidate shape.
- π¦ **backend.src.core.superset_client** (`Module`)
- π ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Superset REST API, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ.
- ποΈ Layer: Core
@@ -2425,6 +2539,10 @@
- π Retrieves a permission by its unique ID.
- Ζ **get_permission_by_resource_action** (`Function`) `[CRITICAL]`
- π Retrieves a permission by resource and action.
+ - Ζ **get_user_dashboard_preference** (`Function`) `[CRITICAL]`
+ - π Retrieves dashboard preference by owner user ID.
+ - Ζ **save_user_dashboard_preference** (`Function`) `[CRITICAL]`
+ - π Persists dashboard preference entity and returns refreshed row.
- Ζ **list_permissions** (`Function`) `[CRITICAL]`
- π Lists all available permissions.
- π¦ **test_auth** (`Module`)
@@ -2580,6 +2698,21 @@
- π CALLS -> `self.load_excel_mappings`
- π CALLS -> `superset_client.get_dataset`
- π CALLS -> `superset_client.update_dataset`
+- π¦ **backend.src.core.__tests__.test_superset_profile_lookup** (`Module`)
+ - π Verifies Superset profile lookup adapter payload normalization and fallback error precedence.
+ - ποΈ Layer: Domain
+ - β **_RecordingNetworkClient** (`Class`)
+ - π Records request payloads and returns scripted responses for deterministic adapter tests.
+ - Ζ **__init__** (`Function`)
+ - π Initializes scripted network responses.
+ - Ζ **request** (`Function`)
+ - π Mimics APIClient.request while capturing call arguments.
+ - Ζ **test_get_users_page_sends_lowercase_order_direction** (`Function`)
+ - π Ensures adapter sends lowercase order_direction compatible with Superset rison schema.
+ - Ζ **test_get_users_page_preserves_primary_schema_error_over_fallback_auth_error** (`Function`)
+ - π Ensures fallback auth error does not mask primary schema/query failure.
+ - Ζ **test_get_users_page_uses_fallback_endpoint_when_primary_fails** (`Function`)
+ - π Verifies adapter retries second users endpoint and succeeds when fallback is healthy.
- π¦ **test_logger** (`Module`)
- π Unit tests for logger module
- ποΈ Layer: Infra
@@ -2694,7 +2827,7 @@
- Ζ **_parse_datetime** (`Function`)
- π Safely parse a datetime string from the database
- Ζ **_resolve_environment_id** (`Function`)
- - π Resolve environment id based on provided value or fallback to default
+ - π Resolve environment id into existing environments.id value to satisfy FK constraints.
- Ζ **__init__** (`Function`)
- π Initializes the persistence service.
- Ζ **persist_task** (`Function`)
@@ -2723,6 +2856,8 @@
- π Delete all logs for a specific task.
- Ζ **delete_logs_for_tasks** (`Function`)
- π Delete all logs for multiple tasks.
+ - Ζ **normalize_token** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- Ζ **json_serializable** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- π¦ **TaskManagerModule** (`Module`) `[CRITICAL]`
@@ -2958,6 +3093,10 @@
- π Delete repository in Gitea for a saved Gitea config.
- Ζ **init_repository** (`Function`)
- π Link a dashboard to a Git repository and perform initial clone/init.
+ - Ζ **get_repository_binding** (`Function`)
+ - π Return repository binding with provider metadata for selected dashboard.
+ - Ζ **delete_repository** (`Function`)
+ - π Delete local repository workspace and DB binding for selected dashboard.
- Ζ **get_branches** (`Function`)
- π List all branches for a dashboard's repository.
- Ζ **create_branch** (`Function`)
@@ -3164,6 +3303,8 @@
- π Schema for dashboard deployment requests.
- β **RepoInitRequest** (`Class`)
- π Schema for repository initialization requests.
+ - β **RepositoryBindingSchema** (`Class`)
+ - π Schema describing repository-to-config binding and provider metadata.
- β **RepoStatusBatchRequest** (`Class`)
- π Schema for requesting repository statuses for multiple dashboards in a single call.
- β **RepoStatusBatchResponse** (`Class`)
@@ -3327,6 +3468,21 @@
- π Return paginated unified reports list.
- Ζ **get_report_detail** (`Function`)
- π Return one normalized report detail with diagnostics and next actions.
+- π¦ **backend.src.api.routes.profile** (`Module`) `[CRITICAL]`
+ - π Exposes self-scoped profile preference endpoints and environment-based Superset account lookup.
+ - ποΈ Layer: API
+ - π Invariant: Endpoints are self-scoped and never mutate another user preference.
+ - π DEPENDS_ON -> `backend.src.services.profile_service`
+ - π DEPENDS_ON -> `backend.src.dependencies.get_current_user`
+ - π DEPENDS_ON -> `backend.src.core.database.get_db`
+ - Ζ **_get_profile_service** (`Function`)
+ - π Build profile service for current request scope.
+ - Ζ **get_preferences** (`Function`)
+ - π Get authenticated user's dashboard filter preference.
+ - Ζ **update_preferences** (`Function`)
+ - π Update authenticated user's dashboard filter preference.
+ - Ζ **lookup_superset_accounts** (`Function`)
+ - π Lookup Superset account candidates in selected environment.
- π¦ **backend.src.api.routes.__init__** (`Module`)
- π Provide lazy route module loading to avoid heavyweight imports during tests.
- ποΈ Layer: API
@@ -3365,6 +3521,7 @@
- π¦ **GitStatus** (`DataClass`)
- π¦ **LastTask** (`DataClass`)
- π¦ **DashboardItem** (`DataClass`)
+ - π¦ **EffectiveProfileFilter** (`DataClass`)
- π¦ **DashboardsResponse** (`DataClass`)
- π¦ **DashboardChartItem** (`DataClass`)
- π¦ **DashboardDatasetItem** (`DataClass`)
@@ -3381,6 +3538,18 @@
- π Normalize query filter values to lower-cased non-empty tokens.
- Ζ **_dashboard_git_filter_value** (`Function`)
- π Build comparable git status token for dashboards filtering.
+ - Ζ **_normalize_actor_alias_token** (`Function`)
+ - π Normalize actor alias token to comparable trim+lower text.
+ - Ζ **_normalize_owner_display_token** (`Function`)
+ - π Project owner payload value into stable display string for API response contracts.
+ - Ζ **_normalize_dashboard_owner_values** (`Function`)
+ - π Normalize dashboard owners payload to optional list of display strings.
+ - Ζ **_project_dashboard_response_items** (`Function`)
+ - π Project dashboard payloads to response-contract-safe shape.
+ - Ζ **_resolve_profile_actor_aliases** (`Function`)
+ - π Resolve stable actor aliases for profile filtering without per-dashboard detail fan-out.
+ - Ζ **_matches_dashboard_actor_aliases** (`Function`)
+ - π Apply profile actor matching against multiple aliases (username + optional display name).
- Ζ **get_dashboards** (`Function`)
- π Fetch list of dashboards from a specific environment with Git status and last task status
- π CALLS -> `ResourceService.get_dashboards_with_status`
@@ -3431,6 +3600,16 @@
- Ζ **test_get_database_mappings_env_not_found** (`Function`)
- Ζ **test_get_dashboard_tasks_history_filters_success** (`Function`)
- Ζ **test_get_dashboard_thumbnail_success** (`Function`)
+ - Ζ **_build_profile_preference_stub** (`Function`)
+ - π Creates profile preference payload stub for dashboards filter contract tests.
+ - Ζ **_matches_actor_case_insensitive** (`Function`)
+ - π Applies trim + case-insensitive owners OR modified_by matching used by route contract tests.
+ - Ζ **test_get_dashboards_profile_filter_contract_owners_or_modified_by** (`Function`)
+ - Ζ **test_get_dashboards_override_show_all_contract** (`Function`)
+ - Ζ **test_get_dashboards_profile_filter_no_match_results_contract** (`Function`)
+ - Ζ **test_get_dashboards_page_context_other_disables_profile_default** (`Function`)
+ - Ζ **test_get_dashboards_profile_filter_matches_display_alias_without_detail_fanout** (`Function`)
+ - Ζ **test_get_dashboards_profile_filter_matches_owner_object_payload_contract** (`Function`)
- Ζ **mock_deps** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- Ζ **mock_get_dashboards** (`Function`) `[TRIVIAL]`
@@ -3571,6 +3750,27 @@
- Ζ **test_get_datasets_superset_failure** (`Function`)
- Ζ **mock_deps** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **backend.src.api.routes.__tests__.test_profile_api** (`Module`)
+ - π Verifies profile API route contracts for preference read/update and Superset account lookup.
+ - ποΈ Layer: API
+ - Ζ **mock_profile_route_dependencies** (`Function`)
+ - π Provides deterministic dependency overrides for profile route tests.
+ - Ζ **profile_route_deps_fixture** (`Function`)
+ - π Pytest fixture wrapper for profile route dependency overrides.
+ - Ζ **_build_preference_response** (`Function`)
+ - π Builds stable profile preference response payload for route tests.
+ - Ζ **test_get_profile_preferences_returns_self_payload** (`Function`)
+ - π Verifies GET /api/profile/preferences returns stable self-scoped payload.
+ - Ζ **test_patch_profile_preferences_success** (`Function`)
+ - π Verifies PATCH /api/profile/preferences persists valid payload through route mapping.
+ - Ζ **test_patch_profile_preferences_validation_error** (`Function`)
+ - π Verifies route maps domain validation failure to HTTP 422 with actionable details.
+ - Ζ **test_patch_profile_preferences_cross_user_denied** (`Function`)
+ - π Verifies route maps domain authorization guard failure to HTTP 403.
+ - Ζ **test_lookup_superset_accounts_success** (`Function`)
+ - π Verifies lookup route returns success payload with normalized candidates.
+ - Ζ **test_lookup_superset_accounts_env_not_found** (`Function`)
+ - π Verifies lookup route maps missing environment to HTTP 404.
- π¦ **backend.tests.test_reports_detail_api** (`Module`)
- π Contract tests for GET /api/reports/{report_id} detail endpoint behavior.
- ποΈ Layer: Domain (Tests)
@@ -4000,6 +4200,13 @@
- β **ADGroupMapping** (`Class`) `[CRITICAL]`
- π 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.
+ - ποΈ Layer: Domain
+ - π Invariant: Exactly one preference row exists per user_id.
+ - π DEPENDS_ON -> `backend.src.models.auth`
+ - β **UserDashboardPreference** (`Class`)
+ - π Stores Superset username binding and default "my dashboards" toggle for one authenticated user.
- π¦ **test_models** (`Module`) `[TRIVIAL]`
- π Unit tests for data models
- ποΈ Layer: Domain
@@ -4083,6 +4290,52 @@
- π Auto-detected function (orphan)
- Ζ **test_report_validation** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **backend.src.services.profile_service** (`Module`) `[CRITICAL]`
+ - π Orchestrates profile preference persistence, Superset account lookup, and deterministic actor matching.
+ - ποΈ Layer: Domain
+ - π Invariant: Username normalization is trim+lower and shared by save and matching paths.
+ - π DEPENDS_ON -> `backend.src.models.profile`
+ - π DEPENDS_ON -> `backend.src.schemas.profile`
+ - π DEPENDS_ON -> `backend.src.core.superset_client`
+ - π DEPENDS_ON -> `backend.src.core.auth.repository`
+ - π DEPENDS_ON -> `backend.src.models.auth`
+ - π DEPENDS_ON -> `sqlalchemy.orm.Session`
+ - β **ProfileValidationError** (`Class`)
+ - π Domain validation error for profile preference update requests.
+ - β **EnvironmentNotFoundError** (`Class`)
+ - π Raised when environment_id from lookup request is unknown in app configuration.
+ - β **ProfileAuthorizationError** (`Class`)
+ - π Raised when caller attempts cross-user preference mutation.
+ - β **ProfileService** (`Class`) `[CRITICAL]`
+ - π Implements profile preference read/update flow and Superset account lookup degradation strategy.
+ - Ζ **__init__** (`Function`)
+ - π Initialize service with DB session and config manager.
+ - Ζ **get_my_preference** (`Function`)
+ - π Return current user's persisted preference or default non-configured view.
+ - Ζ **update_my_preference** (`Function`)
+ - π Validate and persist current user's profile preference in self-scoped mode.
+ - Ζ **lookup_superset_accounts** (`Function`)
+ - π 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.
+ - Ζ **_resolve_environment** (`Function`)
+ - π Resolve environment model from configured environments by id.
+ - Ζ **_get_preference_row** (`Function`)
+ - π Return persisted preference row for user or None.
+ - Ζ **_get_or_create_preference_row** (`Function`)
+ - π Return existing preference row or create new unsaved row.
+ - Ζ **_build_default_preference** (`Function`)
+ - π Build non-persisted default preference DTO for unconfigured users.
+ - Ζ **_validate_update_payload** (`Function`)
+ - π Validate username/toggle constraints for preference mutation.
+ - Ζ **_sanitize_username** (`Function`)
+ - π Normalize raw username into trimmed form or None for empty input.
+ - Ζ **_normalize_username** (`Function`)
+ - π Apply deterministic trim+lower normalization for actor matching.
+ - Ζ **_normalize_owner_tokens** (`Function`)
+ - π Normalize owners payload into deduplicated lower-cased tokens.
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- π¦ **backend.src.services.resource_service** (`Module`)
- π Shared service for fetching resource data with Git status and task status
- ποΈ Layer: Service
@@ -4181,6 +4434,26 @@
- π Auto-detected function (orphan)
- Ζ **__init__** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **backend.src.services.rbac_permission_catalog** (`Module`)
+ - π Discovers declared RBAC permissions from API routes/plugins and synchronizes them into auth database.
+ - ποΈ Layer: Service
+ - π Invariant: Synchronization is idempotent for existing (resource, action) permission pairs.
+ - π CALLS -> `backend.src.core.plugin_loader.PluginLoader.get_all_plugin_configs`
+ - π DEPENDS_ON -> `backend.src.models.auth.Permission`
+ - π¦ **HAS_PERMISSION_PATTERN** (`Constant`)
+ - π Regex pattern for extracting has_permission("resource", "ACTION") declarations.
+ - π¦ **ROUTES_DIR** (`Constant`)
+ - π Absolute directory path where API route RBAC declarations are defined.
+ - Ζ **_iter_route_files** (`Function`)
+ - π Iterates API route files that may contain RBAC declarations.
+ - Ζ **_discover_route_permissions** (`Function`)
+ - π Extracts explicit has_permission declarations from API route source code.
+ - Ζ **_discover_plugin_execute_permissions** (`Function`)
+ - π Derives dynamic task permissions of form plugin:{plugin_id}:EXECUTE from plugin registry.
+ - Ζ **discover_declared_permissions** (`Function`)
+ - π Builds canonical RBAC permission catalog from routes and plugin registry.
+ - Ζ **sync_permission_catalog** (`Function`)
+ - π Persists missing RBAC permission pairs into auth database.
- π¦ **backend.src.services** (`Module`)
- π Package initialization for services module
- ποΈ Layer: Core
@@ -4221,10 +4494,14 @@
- π Persist repository local_path in GitRepository table when record exists.
- Ζ **_migrate_repo_directory** (`Function`)
- π Move legacy repository directory to target path and sync DB metadata.
+ - Ζ **_ensure_gitflow_branches** (`Function`)
+ - π Ensure standard GitFlow branches (main/dev/preprod) exist locally and on origin.
- Ζ **_get_repo_path** (`Function`)
- π Resolves the local filesystem path for a dashboard's repository.
- Ζ **init_repo** (`Function`)
- π Initialize or clone a repository for a dashboard.
+ - Ζ **delete_repo** (`Function`)
+ - π Remove local repository and DB binding for a dashboard.
- Ζ **get_repo** (`Function`)
- π Get Repo object for a dashboard.
- Ζ **list_branches** (`Function`)
@@ -4261,6 +4538,10 @@
- π Create repository in Gitea for authenticated user.
- Ζ **delete_gitea_repository** (`Function`)
- π Delete repository in Gitea.
+ - Ζ **_gitea_branch_exists** (`Function`)
+ - π Check whether a branch exists in Gitea repository.
+ - Ζ **_build_gitea_pr_404_detail** (`Function`)
+ - π Build actionable error detail for Gitea PR 404 responses.
- Ζ **create_github_repository** (`Function`)
- π Create repository in GitHub or GitHub Enterprise.
- Ζ **create_gitlab_repository** (`Function`)
@@ -4374,6 +4655,18 @@
- Ζ **test_extract_resource_name_from_task** (`Function`)
- Ζ **test_get_last_task_for_resource_empty_tasks** (`Function`)
- Ζ **test_get_last_task_for_resource_no_match** (`Function`)
+- π¦ **backend.src.services.__tests__.test_rbac_permission_catalog** (`Module`)
+ - π Verifies RBAC permission catalog discovery and idempotent synchronization behavior.
+ - ποΈ Layer: Service Tests
+ - π Invariant: Synchronization adds only missing normalized permission pairs.
+ - Ζ **test_discover_route_permissions_extracts_declared_pairs_and_ignores_tests** (`Function`)
+ - π Ensures route-scanner extracts has_permission pairs from route files and skips __tests__.
+ - Ζ **test_discover_declared_permissions_unions_route_and_plugin_permissions** (`Function`)
+ - π Ensures full catalog includes route-level permissions plus dynamic plugin EXECUTE rights.
+ - Ζ **test_sync_permission_catalog_inserts_only_missing_normalized_pairs** (`Function`)
+ - π Ensures synchronization inserts only missing pairs and normalizes action/resource tokens.
+ - Ζ **test_sync_permission_catalog_is_noop_when_all_permissions_exist** (`Function`)
+ - π Ensures synchronization is idempotent when all declared pairs already exist.
- π¦ **backend.src.services.clean_release.compliance_orchestrator** (`Module`) `[CRITICAL]`
- π Execute mandatory clean compliance stages and produce final COMPLIANT/BLOCKED/FAILED outcome.
- ποΈ Layer: Domain
@@ -4381,14 +4674,16 @@
- π DEPENDS_ON -> `backend.src.services.clean_release.stages`
- π DEPENDS_ON -> `backend.src.services.clean_release.report_builder`
- π DEPENDS_ON -> `backend.src.services.clean_release.repository`
+ - β **CleanComplianceOrchestrator** (`Class`)
+ - π Coordinate clean-release compliance verification stages.
+ - Ζ **start_check_run** (`Function`)
+ - π Initiate a new compliance run session.
+ - Ζ **finalize_run** (`Function`)
+ - π Finalize run status based on cumulative stage results.
- Ζ **__init__** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- - Ζ **start_check_run** (`Function`) `[TRIVIAL]`
- - π Auto-detected function (orphan)
- Ζ **execute_stages** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- - Ζ **finalize_run** (`Function`) `[TRIVIAL]`
- - π Auto-detected function (orphan)
- π¦ **backend.src.services.clean_release.manifest_builder** (`Module`)
- π Build deterministic distribution manifest from classified artifact input.
- ποΈ Layer: Domain
@@ -4461,6 +4756,8 @@
- ποΈ Layer: Infra
- π Invariant: Repository operations are side-effect free outside explicit save/update calls.
- π DEPENDS_ON -> `backend.src.models.clean_release`
+ - β **CleanReleaseRepository** (`Class`)
+ - π Data access object for clean release lifecycle.
- Ζ **save_candidate** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- Ζ **get_candidate** (`Function`) `[TRIVIAL]`
@@ -4491,6 +4788,8 @@
- π Auto-detected function (orphan)
- Ζ **get_violations_by_check_run** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+ - Ζ **clear_history** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- π¦ **backend.src.services.clean_release.preparation_service** (`Module`)
- π Prepare release candidate by policy evaluation and deterministic manifest creation.
- ποΈ Layer: Domain
@@ -5066,6 +5365,8 @@
- π Test deleting with empty list (no-op).
- Ζ **test_persist_task_with_datetime_in_params** (`Function`)
- π Test json_serializable handles datetime in params.
+ - Ζ **test_persist_task_resolves_environment_slug_to_existing_id** (`Function`)
+ - π Ensure slug-like environment token resolves to environments.id before persisting task.
- Ζ **_patched** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- Ζ **_make_task** (`Function`) `[TRIVIAL]`
@@ -5360,6 +5661,24 @@
- π Test deleting with empty list (no-op).
- Ζ **_patched** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+- π¦ **backend.tests.scripts.test_clean_release_tui** (`Module`)
+ - π Unit tests for the interactive curses TUI of the clean release process.
+ - ποΈ Layer: Scripts
+ - π Invariant: TUI initializes, handles hotkeys (F5, F10) and safely falls back without TTY.
+ - Ζ **mock_stdscr** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_headless_fallback** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_tui_initial_render** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_tui_run_checks_f5** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **side_effect** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_tui_exit_f10** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_tui_clear_history_f7** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- π¦ **backend.tests.core.test_git_service_gitea_pr** (`Module`)
- π Validate Gitea PR creation fallback behavior when configured server URL is stale.
- ποΈ Layer: Domain
@@ -5368,6 +5687,10 @@
- π Ensure helper returns host base URL and removes embedded credentials.
- Ζ **test_create_gitea_pull_request_retries_with_remote_host_on_404** (`Function`)
- π Verify create_gitea_pull_request retries with remote URL host after primary 404.
+ - Ζ **test_create_gitea_pull_request_returns_branch_error_when_target_missing** (`Function`)
+ - π Ensure Gitea 404 on PR creation is mapped to actionable target-branch validation error.
+ - Ζ **fake_gitea_request** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
- Ζ **fake_gitea_request** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
- π¦ **backend.tests.core.test_mapping_service** (`Module`)
@@ -5412,6 +5735,28 @@
- π Auto-detected function (orphan)
- Ζ **test_superset_client_import_dashboard_guard** (`Function`) `[TRIVIAL]`
- π Auto-detected function (orphan)
+ - Ζ **test_git_service_init_repo_reclones_when_path_is_not_a_git_repo** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **test_git_service_ensure_gitflow_branches_creates_and_pushes_missing_defaults** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **fetch** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **push** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **__init__** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **create_head** (`Function`) `[TRIVIAL]`
+ - π Auto-detected function (orphan)
+ - Ζ **remote** (`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/frontend/src/components/storage/FileList.svelte b/frontend/src/components/storage/FileList.svelte
index 5e3f668..97d3046 100644
--- a/frontend/src/components/storage/FileList.svelte
+++ b/frontend/src/components/storage/FileList.svelte
@@ -13,8 +13,9 @@
@@ -112,13 +128,13 @@
{formatDate(file.created_at)} |
{#if !isDirectory(file)}
- handleDownload(file)}
class="text-indigo-600 hover:text-indigo-900 mr-4"
>
{$t.storage.table.download}
-
+
{/if}
|