tui rework
This commit is contained in:
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
> High-level module structure for AI Context. Generated automatically.
|
> High-level module structure for AI Context. Generated automatically.
|
||||||
|
|
||||||
**Generated:** 2026-03-06T15:13:36.187520
|
**Generated:** 2026-03-09T13:33:22.105511
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
- **Total Modules:** 90
|
- **Total Modules:** 93
|
||||||
- **Total Entities:** 2508
|
- **Total Entities:** 2649
|
||||||
|
|
||||||
## Module Hierarchy
|
## Module Hierarchy
|
||||||
|
|
||||||
@@ -54,9 +54,9 @@
|
|||||||
### 📁 `routes/`
|
### 📁 `routes/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** API, UI (API)
|
- 🏗️ **Layers:** API, UI (API)
|
||||||
- 📊 **Tiers:** CRITICAL: 12, STANDARD: 240, TRIVIAL: 8
|
- 📊 **Tiers:** CRITICAL: 12, STANDARD: 254, TRIVIAL: 8
|
||||||
- 📄 **Files:** 19
|
- 📄 **Files:** 19
|
||||||
- 📦 **Entities:** 260
|
- 📦 **Entities:** 274
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -92,9 +92,9 @@
|
|||||||
### 📁 `__tests__/`
|
### 📁 `__tests__/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** API, Domain, Domain (Tests), UI (API Tests), Unknown
|
- 🏗️ **Layers:** API, Domain, Domain (Tests), UI (API Tests), Unknown
|
||||||
- 📊 **Tiers:** STANDARD: 81, TRIVIAL: 134
|
- 📊 **Tiers:** STANDARD: 88, TRIVIAL: 187
|
||||||
- 📄 **Files:** 13
|
- 📄 **Files:** 14
|
||||||
- 📦 **Entities:** 215
|
- 📦 **Entities:** 275
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -126,9 +126,9 @@
|
|||||||
### 📁 `core/`
|
### 📁 `core/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Core
|
- 🏗️ **Layers:** Core
|
||||||
- 📊 **Tiers:** CRITICAL: 45, STANDARD: 94, TRIVIAL: 8
|
- 📊 **Tiers:** CRITICAL: 47, STANDARD: 94, TRIVIAL: 8
|
||||||
- 📄 **Files:** 11
|
- 📄 **Files:** 11
|
||||||
- 📦 **Entities:** 147
|
- 📦 **Entities:** 149
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -509,9 +509,9 @@
|
|||||||
### 📁 `schemas/`
|
### 📁 `schemas/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** API
|
- 🏗️ **Layers:** API
|
||||||
- 📊 **Tiers:** CRITICAL: 10, STANDARD: 7, TRIVIAL: 3
|
- 📊 **Tiers:** CRITICAL: 10, STANDARD: 9, TRIVIAL: 3
|
||||||
- 📄 **Files:** 2
|
- 📄 **Files:** 2
|
||||||
- 📦 **Entities:** 20
|
- 📦 **Entities:** 22
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -521,20 +521,20 @@
|
|||||||
- Represents an AD Group to Role mapping in API responses.
|
- Represents an AD Group to Role mapping in API responses.
|
||||||
- ℂ **PermissionSchema** (Class) `[TRIVIAL]`
|
- ℂ **PermissionSchema** (Class) `[TRIVIAL]`
|
||||||
- Represents a permission in API responses.
|
- Represents a permission in API responses.
|
||||||
|
- ℂ **ProfilePermissionState** (Class)
|
||||||
|
- Represents one permission badge state for profile read-only ...
|
||||||
- ℂ **ProfilePreference** (Class)
|
- ℂ **ProfilePreference** (Class)
|
||||||
- Represents persisted profile preference for a single authent...
|
- Represents persisted profile preference for a single authent...
|
||||||
- ℂ **ProfilePreferenceResponse** (Class)
|
- ℂ **ProfilePreferenceResponse** (Class)
|
||||||
- Response envelope for profile preference read/update endpoin...
|
- Response envelope for profile preference read/update endpoin...
|
||||||
- ℂ **ProfilePreferenceUpdateRequest** (Class)
|
- ℂ **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]`
|
- ℂ **RoleCreate** (Class) `[CRITICAL]`
|
||||||
- Schema for creating a new role.
|
- Schema for creating a new role.
|
||||||
- ℂ **RoleSchema** (Class) `[CRITICAL]`
|
- ℂ **RoleSchema** (Class) `[CRITICAL]`
|
||||||
- Represents a role in API responses.
|
- 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:**
|
**Dependencies:**
|
||||||
|
|
||||||
@@ -543,9 +543,9 @@
|
|||||||
### 📁 `scripts/`
|
### 📁 `scripts/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Scripts, UI, Unknown
|
- 🏗️ **Layers:** Scripts, UI, Unknown
|
||||||
- 📊 **Tiers:** CRITICAL: 2, STANDARD: 27, TRIVIAL: 14
|
- 📊 **Tiers:** CRITICAL: 2, STANDARD: 27, TRIVIAL: 17
|
||||||
- 📄 **Files:** 7
|
- 📄 **Files:** 7
|
||||||
- 📦 **Entities:** 43
|
- 📦 **Entities:** 46
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -574,9 +574,9 @@
|
|||||||
### 📁 `services/`
|
### 📁 `services/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Core, Domain, Service
|
- 🏗️ **Layers:** Core, Domain, Service
|
||||||
- 📊 **Tiers:** CRITICAL: 9, STANDARD: 104, TRIVIAL: 7
|
- 📊 **Tiers:** CRITICAL: 9, STANDARD: 118, TRIVIAL: 15
|
||||||
- 📄 **Files:** 9
|
- 📄 **Files:** 9
|
||||||
- 📦 **Entities:** 120
|
- 📦 **Entities:** 142
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -773,9 +773,9 @@
|
|||||||
### 📁 `core/`
|
### 📁 `core/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Domain, Unknown
|
- 🏗️ **Layers:** Domain, Unknown
|
||||||
- 📊 **Tiers:** STANDARD: 6, TRIVIAL: 45
|
- 📊 **Tiers:** STANDARD: 6, TRIVIAL: 46
|
||||||
- 📄 **Files:** 4
|
- 📄 **Files:** 4
|
||||||
- 📦 **Entities:** 51
|
- 📦 **Entities:** 52
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -870,10 +870,10 @@
|
|||||||
|
|
||||||
### 📁 `git/`
|
### 📁 `git/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Component
|
- 🏗️ **Layers:** Component, Unknown
|
||||||
- 📊 **Tiers:** STANDARD: 46
|
- 📊 **Tiers:** STANDARD: 47, TRIVIAL: 12
|
||||||
- 📄 **Files:** 6
|
- 📄 **Files:** 6
|
||||||
- 📦 **Entities:** 46
|
- 📦 **Entities:** 59
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -889,6 +889,20 @@
|
|||||||
- Modal for deploying a dashboard to a target environment.
|
- Modal for deploying a dashboard to a target environment.
|
||||||
- 🧩 **GitManager** (Component)
|
- 🧩 **GitManager** (Component)
|
||||||
- Центральный UI управления Git с фокусом на рабочий поток ана...
|
- Центральный 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/`
|
### 📁 `llm/`
|
||||||
|
|
||||||
@@ -1090,9 +1104,9 @@
|
|||||||
### 📁 `layout/`
|
### 📁 `layout/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** UI, Unknown
|
- 🏗️ **Layers:** UI, Unknown
|
||||||
- 📊 **Tiers:** STANDARD: 11, TRIVIAL: 47
|
- 📊 **Tiers:** STANDARD: 11, TRIVIAL: 48
|
||||||
- 📄 **Files:** 5
|
- 📄 **Files:** 5
|
||||||
- 📦 **Entities:** 58
|
- 📦 **Entities:** 59
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -1221,9 +1235,9 @@
|
|||||||
### 📁 `stores/`
|
### 📁 `stores/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** UI, UI-State, Unknown
|
- 🏗️ **Layers:** UI, UI-State, Unknown
|
||||||
- 📊 **Tiers:** CRITICAL: 1, STANDARD: 8, TRIVIAL: 21
|
- 📊 **Tiers:** CRITICAL: 1, STANDARD: 8, TRIVIAL: 25
|
||||||
- 📄 **Files:** 5
|
- 📄 **Files:** 5
|
||||||
- 📦 **Entities:** 30
|
- 📦 **Entities:** 34
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -1339,13 +1353,15 @@
|
|||||||
|
|
||||||
### 📁 `routes/`
|
### 📁 `routes/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Infra, UI
|
- 🏗️ **Layers:** Infra, UI, Unknown
|
||||||
- 📊 **Tiers:** CRITICAL: 1, STANDARD: 3, TRIVIAL: 1
|
- 📊 **Tiers:** CRITICAL: 1, STANDARD: 3, TRIVIAL: 5
|
||||||
- 📄 **Files:** 5
|
- 📄 **Files:** 5
|
||||||
- 📦 **Entities:** 5
|
- 📦 **Entities:** 9
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
|
- 📦 **+page** (Module) `[TRIVIAL]`
|
||||||
|
- Auto-generated module for frontend/src/routes/+page.svelte
|
||||||
- 📦 **RootLayoutConfig** (Module) `[TRIVIAL]`
|
- 📦 **RootLayoutConfig** (Module) `[TRIVIAL]`
|
||||||
- Root layout configuration (SPA mode)
|
- Root layout configuration (SPA mode)
|
||||||
- 📦 **layout** (Module)
|
- 📦 **layout** (Module)
|
||||||
@@ -1513,9 +1529,9 @@
|
|||||||
### 📁 `profile/`
|
### 📁 `profile/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Unknown
|
- 🏗️ **Layers:** Unknown
|
||||||
- 📊 **Tiers:** TRIVIAL: 9
|
- 📊 **Tiers:** TRIVIAL: 16
|
||||||
- 📄 **Files:** 1
|
- 📄 **Files:** 1
|
||||||
- 📦 **Entities:** 9
|
- 📦 **Entities:** 16
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -1600,15 +1616,26 @@
|
|||||||
### 📁 `git/`
|
### 📁 `git/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Page
|
- 🏗️ **Layers:** Page
|
||||||
- 📊 **Tiers:** STANDARD: 8
|
- 📊 **Tiers:** STANDARD: 10
|
||||||
- 📄 **Files:** 1
|
- 📄 **Files:** 1
|
||||||
- 📦 **Entities:** 8
|
- 📦 **Entities:** 10
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
- 🧩 **GitSettingsPage** (Component)
|
- 🧩 **GitSettingsPage** (Component)
|
||||||
- Manage Git server configurations for dashboard versioning.
|
- 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/`
|
### 📁 `storage/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Page
|
- 🏗️ **Layers:** Page
|
||||||
@@ -1678,6 +1705,17 @@
|
|||||||
|
|
||||||
- 🔗 DEPENDS_ON -> frontend.src.lib.api
|
- 🔗 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/`
|
### 📁 `types/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** Domain
|
- 🏗️ **Layers:** Domain
|
||||||
@@ -1693,9 +1731,9 @@
|
|||||||
### 📁 `root/`
|
### 📁 `root/`
|
||||||
|
|
||||||
- 🏗️ **Layers:** DevOps/Tooling, Unknown
|
- 🏗️ **Layers:** DevOps/Tooling, Unknown
|
||||||
- 📊 **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 9
|
- 📊 **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 12
|
||||||
- 📄 **Files:** 2
|
- 📄 **Files:** 3
|
||||||
- 📦 **Entities:** 37
|
- 📦 **Entities:** 40
|
||||||
|
|
||||||
**Key Entities:**
|
**Key Entities:**
|
||||||
|
|
||||||
@@ -1713,6 +1751,8 @@
|
|||||||
- Auto-generated module for check_test_data.py
|
- Auto-generated module for check_test_data.py
|
||||||
- 📦 **generate_semantic_map** (Module)
|
- 📦 **generate_semantic_map** (Module)
|
||||||
- Scans the codebase to generate a Semantic Map, Module Map, a...
|
- 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
|
## Cross-Module Dependencies
|
||||||
|
|
||||||
@@ -1869,6 +1909,7 @@ graph TD
|
|||||||
scripts-->|TESTS|backend
|
scripts-->|TESTS|backend
|
||||||
__tests__-->|VERIFIES|components
|
__tests__-->|VERIFIES|components
|
||||||
__tests__-->|VERIFIES|components
|
__tests__-->|VERIFIES|components
|
||||||
|
__tests__-->|VERIFIES|components
|
||||||
__tests__-->|TESTS|lib
|
__tests__-->|TESTS|lib
|
||||||
__tests__-->|VERIFIES|lib
|
__tests__-->|VERIFIES|lib
|
||||||
__tests__-->|TESTS|lib
|
__tests__-->|TESTS|lib
|
||||||
|
|||||||
@@ -84,6 +84,13 @@
|
|||||||
- 📝 Flattens entity tree for easier grouping.
|
- 📝 Flattens entity tree for easier grouping.
|
||||||
- ƒ **to_dict** (`Function`) `[TRIVIAL]`
|
- ƒ **to_dict** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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]`
|
- 📦 **DashboardTypes** (`Module`) `[TRIVIAL]`
|
||||||
- 📝 TypeScript interfaces for Dashboard entities
|
- 📝 TypeScript interfaces for Dashboard entities
|
||||||
- 🏗️ Layer: Domain
|
- 🏗️ Layer: Domain
|
||||||
@@ -207,8 +214,16 @@
|
|||||||
- 📦 **taskDrawer** (`Module`) `[TRIVIAL]`
|
- 📦 **taskDrawer** (`Module`) `[TRIVIAL]`
|
||||||
- 📝 Auto-generated module for frontend/src/lib/stores/taskDrawer.js
|
- 📝 Auto-generated module for frontend/src/lib/stores/taskDrawer.js
|
||||||
- 🏗️ Layer: Unknown
|
- 🏗️ Layer: Unknown
|
||||||
|
- ƒ **readAutoOpenTaskDrawerPreference** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **openDrawerForTask** (`Function`) `[TRIVIAL]`
|
- ƒ **openDrawerForTask** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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]`
|
- ƒ **openDrawer** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **closeDrawer** (`Function`) `[TRIVIAL]`
|
- ƒ **closeDrawer** (`Function`) `[TRIVIAL]`
|
||||||
@@ -570,6 +585,8 @@
|
|||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **handleAssistantClick** (`Function`) `[TRIVIAL]`
|
- ƒ **handleAssistantClick** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
|
- ƒ **hydrateTaskDrawerPreference** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **handleSearchFocus** (`Function`) `[TRIVIAL]`
|
- ƒ **handleSearchFocus** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **clearSearchState** (`Function`) `[TRIVIAL]`
|
- ƒ **clearSearchState** (`Function`) `[TRIVIAL]`
|
||||||
@@ -692,9 +709,18 @@
|
|||||||
- 📝 Root layout configuration (SPA mode)
|
- 📝 Root layout configuration (SPA mode)
|
||||||
- 🏗️ Layer: Infra
|
- 🏗️ Layer: Infra
|
||||||
- 📦 **HomePage** (`Page`) `[CRITICAL]`
|
- 📦 **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
|
- 🏗️ 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`)
|
- ƒ **load** (`Function`)
|
||||||
- 📝 Loads initial plugin data for the dashboard.
|
- 📝 Loads initial plugin data for the dashboard.
|
||||||
- 📦 **layout** (`Module`)
|
- 📦 **layout** (`Module`)
|
||||||
@@ -1176,16 +1202,30 @@
|
|||||||
- 📦 **+page** (`Module`) `[TRIVIAL]`
|
- 📦 **+page** (`Module`) `[TRIVIAL]`
|
||||||
- 📝 Auto-generated module for frontend/src/routes/profile/+page.svelte
|
- 📝 Auto-generated module for frontend/src/routes/profile/+page.svelte
|
||||||
- 🏗️ Layer: Unknown
|
- 🏗️ 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]`
|
- ƒ **parseValidationErrorsFromError** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **setSavedSnapshot** (`Function`) `[TRIVIAL]`
|
- ƒ **setSavedSnapshot** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
|
- ƒ **syncLocalUiPreferenceCaches** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
|
- ƒ **applyPreferenceResponse** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **loadPreference** (`Function`) `[TRIVIAL]`
|
- ƒ **loadPreference** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **loadLookupCandidates** (`Function`) `[TRIVIAL]`
|
- ƒ **loadLookupCandidates** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **handleSelectCandidate** (`Function`) `[TRIVIAL]`
|
- ƒ **handleSelectCandidate** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
|
- ƒ **handleGitTokenInput** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
|
- ƒ **handleClearGitToken** (`Function`) `[TRIVIAL]`
|
||||||
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **handleEnvironmentChange** (`Function`) `[TRIVIAL]`
|
- ƒ **handleEnvironmentChange** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **handleSave** (`Function`) `[TRIVIAL]`
|
- ƒ **handleSave** (`Function`) `[TRIVIAL]`
|
||||||
@@ -1306,6 +1346,10 @@
|
|||||||
- 📝 Tests connection to a git server with current form data.
|
- 📝 Tests connection to a git server with current form data.
|
||||||
- ƒ **handleSave** (`Function`)
|
- ƒ **handleSave** (`Function`)
|
||||||
- 📝 Saves a new git configuration.
|
- 📝 Saves a new git configuration.
|
||||||
|
- ƒ **handleEdit** (`Function`)
|
||||||
|
- 📝 Populates the form with an existing config to edit.
|
||||||
|
- ƒ **resetForm** (`Function`)
|
||||||
|
- 📝 Resets the configuration form.
|
||||||
- ƒ **handleDelete** (`Function`)
|
- ƒ **handleDelete** (`Function`)
|
||||||
- 📝 Deletes a git configuration by ID.
|
- 📝 Deletes a git configuration by ID.
|
||||||
- ƒ **loadGiteaRepos** (`Function`)
|
- ƒ **loadGiteaRepos** (`Function`)
|
||||||
@@ -1314,6 +1358,8 @@
|
|||||||
- 📝 Creates new repository on selected Gitea server.
|
- 📝 Creates new repository on selected Gitea server.
|
||||||
- ƒ **handleDeleteGiteaRepo** (`Function`)
|
- ƒ **handleDeleteGiteaRepo** (`Function`)
|
||||||
- 📝 Deletes repository from selected Gitea server.
|
- 📝 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`)
|
- 🧩 **GitDashboardPage** (`Component`)
|
||||||
- 📝 Dashboard management page for Git integration.
|
- 📝 Dashboard management page for Git integration.
|
||||||
- 🏗️ Layer: Page
|
- 🏗️ Layer: Page
|
||||||
@@ -1429,6 +1475,8 @@
|
|||||||
- 📝 Returns the URL for downloading a file.
|
- 📝 Returns the URL for downloading a file.
|
||||||
- ƒ **downloadFile** (`Function`)
|
- ƒ **downloadFile** (`Function`)
|
||||||
- 📝 Downloads a file using authenticated fetch and saves it in browser.
|
- 📝 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`)
|
- 🧩 **DashboardGrid** (`Component`)
|
||||||
- 📝 Displays a grid of dashboards with selection and pagination.
|
- 📝 Displays a grid of dashboards with selection and pagination.
|
||||||
- 🏗️ Layer: Component
|
- 🏗️ Layer: Component
|
||||||
@@ -1792,9 +1840,9 @@
|
|||||||
- 🏗️ Layer: Component
|
- 🏗️ Layer: Component
|
||||||
- 🔒 Invariant: Cannot deploy without a selected environment.
|
- 🔒 Invariant: Cannot deploy without a selected environment.
|
||||||
- ⚡ Events: deploy
|
- ⚡ Events: deploy
|
||||||
|
- ➡️ WRITES_TO `bindable`
|
||||||
- ➡️ WRITES_TO `props`
|
- ➡️ WRITES_TO `props`
|
||||||
- ➡️ WRITES_TO `state`
|
- ➡️ WRITES_TO `state`
|
||||||
- ➡️ WRITES_TO `derived`
|
|
||||||
- 📦 **loadStatus** (`Watcher`)
|
- 📦 **loadStatus** (`Watcher`)
|
||||||
- ƒ **normalizeEnvStage** (`Function`)
|
- ƒ **normalizeEnvStage** (`Function`)
|
||||||
- 📝 Normalize environment stage with legacy production fallback.
|
- 📝 Normalize environment stage with legacy production fallback.
|
||||||
@@ -1809,6 +1857,7 @@
|
|||||||
- 🏗️ Layer: Component
|
- 🏗️ Layer: Component
|
||||||
- 🔒 Invariant: User must resolve all conflicts before saving.
|
- 🔒 Invariant: User must resolve all conflicts before saving.
|
||||||
- ⚡ Events: resolve
|
- ⚡ Events: resolve
|
||||||
|
- ➡️ WRITES_TO `bindable`
|
||||||
- ➡️ WRITES_TO `props`
|
- ➡️ WRITES_TO `props`
|
||||||
- ➡️ WRITES_TO `state`
|
- ➡️ WRITES_TO `state`
|
||||||
- ƒ **resolve** (`Function`)
|
- ƒ **resolve** (`Function`)
|
||||||
@@ -1832,9 +1881,9 @@
|
|||||||
- 📝 UI для выбора и создания веток Git.
|
- 📝 UI для выбора и создания веток Git.
|
||||||
- 🏗️ Layer: Component
|
- 🏗️ Layer: Component
|
||||||
- ⚡ Events: change
|
- ⚡ Events: change
|
||||||
|
- ➡️ WRITES_TO `bindable`
|
||||||
- ➡️ WRITES_TO `props`
|
- ➡️ WRITES_TO `props`
|
||||||
- ➡️ WRITES_TO `state`
|
- ➡️ WRITES_TO `state`
|
||||||
- ⬅️ READS_FROM `t`
|
|
||||||
- ƒ **onMount** (`Function`)
|
- ƒ **onMount** (`Function`)
|
||||||
- 📝 Load branches when component is mounted.
|
- 📝 Load branches when component is mounted.
|
||||||
- ƒ **loadBranches** (`Function`)
|
- ƒ **loadBranches** (`Function`)
|
||||||
@@ -1887,6 +1936,8 @@
|
|||||||
- 📝 Resolve default git config for current session.
|
- 📝 Resolve default git config for current session.
|
||||||
- ƒ **resolvePushProviderLabel** (`Function`)
|
- ƒ **resolvePushProviderLabel** (`Function`)
|
||||||
- 📝 Resolve lower-case provider label for auto-push checkbox.
|
- 📝 Resolve lower-case provider label for auto-push checkbox.
|
||||||
|
- ƒ **extractHttpHost** (`Function`)
|
||||||
|
- 📝 Extract comparable host[:port] from URL string.
|
||||||
- ƒ **buildSuggestedRepoName** (`Function`)
|
- ƒ **buildSuggestedRepoName** (`Function`)
|
||||||
- 📝 Build deterministic repository name from dashboard title/id.
|
- 📝 Build deterministic repository name from dashboard title/id.
|
||||||
- ƒ **handleCreateRemoteRepo** (`Function`)
|
- ƒ **handleCreateRemoteRepo** (`Function`)
|
||||||
@@ -1897,6 +1948,34 @@
|
|||||||
- 📝 Close git manager modal.
|
- 📝 Close git manager modal.
|
||||||
- ƒ **handleBackdropClick** (`Function`)
|
- ƒ **handleBackdropClick** (`Function`)
|
||||||
- 📝 Close modal on backdrop click.
|
- 📝 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`)
|
- 🧩 **DocPreview** (`Component`)
|
||||||
- 📝 UI component for previewing generated dataset documentation before saving.
|
- 📝 UI component for previewing generated dataset documentation before saving.
|
||||||
- 🏗️ Layer: UI
|
- 🏗️ Layer: UI
|
||||||
@@ -2039,7 +2118,13 @@
|
|||||||
- 📝 Execute compliance orchestrator run and update UI state.
|
- 📝 Execute compliance orchestrator run and update UI state.
|
||||||
- ƒ **__init__** (`Function`) `[TRIVIAL]`
|
- ƒ **__init__** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **draw_header** (`Function`) `[TRIVIAL]`
|
- ƒ **draw_header** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
@@ -2132,14 +2217,18 @@
|
|||||||
- ℂ **User** (`Class`) `[CRITICAL]`
|
- ℂ **User** (`Class`) `[CRITICAL]`
|
||||||
- 📝 Schema for user data in API responses.
|
- 📝 Schema for user data in API responses.
|
||||||
- 📦 **backend.src.schemas.profile** (`Module`)
|
- 📦 **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
|
- 🏗️ 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`
|
- 🔗 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`)
|
- ℂ **ProfilePreference** (`Class`)
|
||||||
- 📝 Represents persisted profile preference for a single authenticated user.
|
- 📝 Represents persisted profile preference for a single authenticated user.
|
||||||
- ℂ **ProfilePreferenceUpdateRequest** (`Class`)
|
- ℂ **ProfilePreferenceUpdateRequest** (`Class`)
|
||||||
- 📝 Request payload for updating current user's dashboard filter preference.
|
- 📝 Request payload for updating current user's profile settings.
|
||||||
- ℂ **ProfilePreferenceResponse** (`Class`)
|
- ℂ **ProfilePreferenceResponse** (`Class`)
|
||||||
- 📝 Response envelope for profile preference read/update endpoints.
|
- 📝 Response envelope for profile preference read/update endpoints.
|
||||||
- ℂ **SupersetAccountLookupRequest** (`Class`)
|
- ℂ **SupersetAccountLookupRequest** (`Class`)
|
||||||
@@ -2348,6 +2437,10 @@
|
|||||||
- 📝 A session factory for the tasks execution database.
|
- 📝 A session factory for the tasks execution database.
|
||||||
- ℂ **AuthSessionLocal** (`Class`) `[TRIVIAL]`
|
- ℂ **AuthSessionLocal** (`Class`) `[TRIVIAL]`
|
||||||
- 📝 A session factory for the authentication database.
|
- 📝 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]`
|
- ƒ **init_db** (`Function`) `[CRITICAL]`
|
||||||
- 📝 Initializes the database by creating all tables.
|
- 📝 Initializes the database by creating all tables.
|
||||||
- ƒ **get_db** (`Function`) `[CRITICAL]`
|
- ƒ **get_db** (`Function`) `[CRITICAL]`
|
||||||
@@ -3075,10 +3168,18 @@
|
|||||||
- 📝 Resolve dashboard ID from slug-or-id reference for Git routes.
|
- 📝 Resolve dashboard ID from slug-or-id reference for Git routes.
|
||||||
- ƒ **_resolve_repo_key_from_ref** (`Function`)
|
- ƒ **_resolve_repo_key_from_ref** (`Function`)
|
||||||
- 📝 Resolve repository folder key with slug-first strategy and deterministic fallback.
|
- 📝 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`)
|
- ƒ **get_git_configs** (`Function`)
|
||||||
- 📝 List all configured Git servers.
|
- 📝 List all configured Git servers.
|
||||||
- ƒ **create_git_config** (`Function`)
|
- ƒ **create_git_config** (`Function`)
|
||||||
- 📝 Register a new Git server configuration.
|
- 📝 Register a new Git server configuration.
|
||||||
|
- ƒ **update_git_config** (`Function`)
|
||||||
|
- 📝 Update an existing Git server configuration.
|
||||||
- ƒ **delete_git_config** (`Function`)
|
- ƒ **delete_git_config** (`Function`)
|
||||||
- 📝 Remove a Git server configuration.
|
- 📝 Remove a Git server configuration.
|
||||||
- ƒ **test_git_config** (`Function`)
|
- ƒ **test_git_config** (`Function`)
|
||||||
@@ -3109,6 +3210,16 @@
|
|||||||
- 📝 Push local commits to the remote repository.
|
- 📝 Push local commits to the remote repository.
|
||||||
- ƒ **pull_changes** (`Function`)
|
- ƒ **pull_changes** (`Function`)
|
||||||
- 📝 Pull changes from the remote repository.
|
- 📝 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** (`Function`)
|
||||||
- 📝 Sync dashboard state from Superset to Git using the GitPlugin.
|
- 📝 Sync dashboard state from Superset to Git using the GitPlugin.
|
||||||
- ƒ **promote_dashboard** (`Function`)
|
- ƒ **promote_dashboard** (`Function`)
|
||||||
@@ -3279,6 +3390,8 @@
|
|||||||
- 🔗 DEPENDS_ON -> `backend.src.models.git`
|
- 🔗 DEPENDS_ON -> `backend.src.models.git`
|
||||||
- ℂ **GitServerConfigBase** (`Class`) `[TRIVIAL]`
|
- ℂ **GitServerConfigBase** (`Class`) `[TRIVIAL]`
|
||||||
- 📝 Base schema for Git server configuration attributes.
|
- 📝 Base schema for Git server configuration attributes.
|
||||||
|
- ℂ **GitServerConfigUpdate** (`Class`)
|
||||||
|
- 📝 Schema for updating an existing Git server configuration.
|
||||||
- ℂ **GitServerConfigCreate** (`Class`)
|
- ℂ **GitServerConfigCreate** (`Class`)
|
||||||
- 📝 Schema for creating a new Git server configuration.
|
- 📝 Schema for creating a new Git server configuration.
|
||||||
- ℂ **GitServerConfigSchema** (`Class`)
|
- ℂ **GitServerConfigSchema** (`Class`)
|
||||||
@@ -3297,6 +3410,14 @@
|
|||||||
- 📝 Schema for staging and committing changes.
|
- 📝 Schema for staging and committing changes.
|
||||||
- ℂ **ConflictResolution** (`Class`)
|
- ℂ **ConflictResolution** (`Class`)
|
||||||
- 📝 Schema for resolving merge conflicts.
|
- 📝 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`)
|
- ℂ **DeploymentEnvironmentSchema** (`Class`)
|
||||||
- 📝 Schema for representing a target deployment environment.
|
- 📝 Schema for representing a target deployment environment.
|
||||||
- ℂ **DeployRequest** (`Class`)
|
- ℂ **DeployRequest** (`Class`)
|
||||||
@@ -3636,6 +3757,18 @@
|
|||||||
- 📝 Ensure batch endpoint marks failed items as ERROR without failing entire request.
|
- 📝 Ensure batch endpoint marks failed items as ERROR without failing entire request.
|
||||||
- ƒ **test_get_repository_status_batch_deduplicates_and_truncates_ids** (`Function`)
|
- ƒ **test_get_repository_status_batch_deduplicates_and_truncates_ids** (`Function`)
|
||||||
- 📝 Ensure batch endpoint protects server from oversized payloads.
|
- 📝 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]`
|
- ƒ **_get_repo_path** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **get_status** (`Function`) `[TRIVIAL]`
|
- ƒ **get_status** (`Function`) `[TRIVIAL]`
|
||||||
@@ -3662,6 +3795,40 @@
|
|||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **get_status** (`Function`) `[TRIVIAL]`
|
- ƒ **get_status** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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`)
|
- 📦 **backend.tests.test_reports_openapi_conformance** (`Module`)
|
||||||
- 📝 Validate implemented reports payload shape against OpenAPI-required top-level contract fields.
|
- 📝 Validate implemented reports payload shape against OpenAPI-required top-level contract fields.
|
||||||
- 🏗️ Layer: Domain (Tests)
|
- 🏗️ Layer: Domain (Tests)
|
||||||
@@ -3858,6 +4025,80 @@
|
|||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **rollback** (`Function`) `[TRIVIAL]`
|
- ƒ **rollback** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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`)
|
- 📦 **backend.src.api.routes.__tests__.test_assistant_api** (`Module`)
|
||||||
- 📝 Validate assistant API endpoint logic via direct async handler invocation.
|
- 📝 Validate assistant API endpoint logic via direct async handler invocation.
|
||||||
- 🏗️ Layer: UI (API Tests)
|
- 🏗️ Layer: UI (API Tests)
|
||||||
@@ -4201,9 +4442,9 @@
|
|||||||
- 📝 Maps an Active Directory group to a local System Role.
|
- 📝 Maps an Active Directory group to a local System Role.
|
||||||
- 🔗 DEPENDS_ON -> `Role`
|
- 🔗 DEPENDS_ON -> `Role`
|
||||||
- 📦 **backend.src.models.profile** (`Module`)
|
- 📦 **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
|
- 🏗️ 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`
|
- 🔗 DEPENDS_ON -> `backend.src.models.auth`
|
||||||
- ℂ **UserDashboardPreference** (`Class`)
|
- ℂ **UserDashboardPreference** (`Class`)
|
||||||
- 📝 Stores Superset username binding and default "my dashboards" toggle for one authenticated user.
|
- 📝 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.
|
- 📝 Query Superset users in selected environment and project canonical account candidates.
|
||||||
- ƒ **matches_dashboard_actor** (`Function`)
|
- ƒ **matches_dashboard_actor** (`Function`)
|
||||||
- 📝 Apply trim+case-insensitive actor match across owners OR modified_by.
|
- 📝 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** (`Function`)
|
||||||
- 📝 Resolve environment model from configured environments by id.
|
- 📝 Resolve environment model from configured environments by id.
|
||||||
- ƒ **_get_preference_row** (`Function`)
|
- ƒ **_get_preference_row** (`Function`)
|
||||||
@@ -4504,6 +4763,8 @@
|
|||||||
- 📝 Remove local repository and DB binding for a dashboard.
|
- 📝 Remove local repository and DB binding for a dashboard.
|
||||||
- ƒ **get_repo** (`Function`)
|
- ƒ **get_repo** (`Function`)
|
||||||
- 📝 Get Repo object for a dashboard.
|
- 📝 Get Repo object for a dashboard.
|
||||||
|
- ƒ **configure_identity** (`Function`)
|
||||||
|
- 📝 Configure repository-local Git committer identity for user-scoped operations.
|
||||||
- ƒ **list_branches** (`Function`)
|
- ƒ **list_branches** (`Function`)
|
||||||
- 📝 List all branches for a dashboard's repository.
|
- 📝 List all branches for a dashboard's repository.
|
||||||
- ƒ **create_branch** (`Function`)
|
- ƒ **create_branch** (`Function`)
|
||||||
@@ -4512,6 +4773,14 @@
|
|||||||
- 📝 Switch to a specific branch.
|
- 📝 Switch to a specific branch.
|
||||||
- ƒ **commit_changes** (`Function`)
|
- ƒ **commit_changes** (`Function`)
|
||||||
- 📝 Stage and commit changes.
|
- 📝 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_changes** (`Function`)
|
||||||
- 📝 Push local commits to remote.
|
- 📝 Push local commits to remote.
|
||||||
- ƒ **pull_changes** (`Function`)
|
- ƒ **pull_changes** (`Function`)
|
||||||
@@ -4558,6 +4827,22 @@
|
|||||||
- 📝 Create pull request in GitHub or GitHub Enterprise.
|
- 📝 Create pull request in GitHub or GitHub Enterprise.
|
||||||
- ƒ **create_gitlab_merge_request** (`Function`)
|
- ƒ **create_gitlab_merge_request** (`Function`)
|
||||||
- 📝 Create merge request in GitLab.
|
- 📝 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`)
|
- 📦 **backend.src.services.mapping_service** (`Module`)
|
||||||
- 📝 Orchestrates database fetching and fuzzy matching suggestions.
|
- 📝 Orchestrates database fetching and fuzzy matching suggestions.
|
||||||
- 🏗️ Layer: Service
|
- 🏗️ Layer: Service
|
||||||
@@ -5757,6 +6042,8 @@
|
|||||||
- 📝 Auto-detected function (orphan)
|
- 📝 Auto-detected function (orphan)
|
||||||
- ƒ **remote** (`Function`) `[TRIVIAL]`
|
- ƒ **remote** (`Function`) `[TRIVIAL]`
|
||||||
- 📝 Auto-detected function (orphan)
|
- 📝 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`)
|
- 📦 **backend.tests.core.test_migration_engine** (`Module`)
|
||||||
- 📝 Unit tests for MigrationEngine's cross-filter patching algorithms.
|
- 📝 Unit tests for MigrationEngine's cross-filter patching algorithms.
|
||||||
- 🏗️ Layer: Domain
|
- 🏗️ Layer: Domain
|
||||||
|
|||||||
14
artifacts.json
Normal file
14
artifacts.json
Normal file
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
# @INVARIANT: TUI must provide a headless fallback for non-TTY environments.
|
# @INVARIANT: TUI must provide a headless fallback for non-TTY environments.
|
||||||
|
|
||||||
import curses
|
import curses
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
@@ -32,51 +33,14 @@ from backend.src.models.clean_release import (
|
|||||||
ReleaseCandidate,
|
ReleaseCandidate,
|
||||||
ResourceSourceEntry,
|
ResourceSourceEntry,
|
||||||
ResourceSourceRegistry,
|
ResourceSourceRegistry,
|
||||||
|
RegistryStatus,
|
||||||
|
ReleaseCandidateStatus,
|
||||||
)
|
)
|
||||||
from backend.src.services.clean_release.compliance_orchestrator import CleanComplianceOrchestrator
|
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.repository import CleanReleaseRepository
|
||||||
from backend.src.services.clean_release.manifest_builder import build_distribution_manifest
|
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]
|
# [DEF:CleanReleaseTUI:Class]
|
||||||
# @PURPOSE: Curses-based application for compliance monitoring.
|
# @PURPOSE: Curses-based application for compliance monitoring.
|
||||||
# @UX_STATE: READY -> Waiting for operator to start checks (F5).
|
# @UX_STATE: READY -> Waiting for operator to start checks (F5).
|
||||||
@@ -87,12 +51,15 @@ class FakeRepository(CleanReleaseRepository):
|
|||||||
class CleanReleaseTUI:
|
class CleanReleaseTUI:
|
||||||
def __init__(self, stdscr: curses.window):
|
def __init__(self, stdscr: curses.window):
|
||||||
self.stdscr = stdscr
|
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.orchestrator = CleanComplianceOrchestrator(self.repo)
|
||||||
|
self.candidate_id = self._resolve_candidate_id()
|
||||||
self.status: Any = "READY"
|
self.status: Any = "READY"
|
||||||
self.checks_progress: List[Dict[str, Any]] = []
|
self.checks_progress: List[Dict[str, Any]] = []
|
||||||
self.violations_list: List[ComplianceViolation] = []
|
self.violations_list: List[ComplianceViolation] = []
|
||||||
self.report_id: Optional[str] = None
|
self.report_id: Optional[str] = None
|
||||||
|
self.last_error: Optional[str] = None
|
||||||
|
|
||||||
curses.start_color()
|
curses.start_color()
|
||||||
curses.use_default_colors()
|
curses.use_default_colors()
|
||||||
@@ -102,6 +69,124 @@ class CleanReleaseTUI:
|
|||||||
curses.init_pair(4, curses.COLOR_YELLOW, -1) # RUNNING
|
curses.init_pair(4, curses.COLOR_YELLOW, -1) # RUNNING
|
||||||
curses.init_pair(5, curses.COLOR_CYAN, -1) # Text
|
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):
|
def draw_header(self, max_y: int, max_x: int):
|
||||||
header_text = " Enterprise Clean Release Validator (TUI) "
|
header_text = " Enterprise Clean Release Validator (TUI) "
|
||||||
self.stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
|
self.stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
|
||||||
@@ -110,7 +195,9 @@ class CleanReleaseTUI:
|
|||||||
self.stdscr.addstr(0, 0, centered[:max_x])
|
self.stdscr.addstr(0, 0, centered[:max_x])
|
||||||
self.stdscr.attroff(curses.color_pair(1) | curses.A_BOLD)
|
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])
|
self.stdscr.addstr(2, 0, info_line_text[:max_x])
|
||||||
|
|
||||||
def draw_checks(self):
|
def draw_checks(self):
|
||||||
@@ -148,12 +235,17 @@ class CleanReleaseTUI:
|
|||||||
|
|
||||||
def draw_sources(self):
|
def draw_sources(self):
|
||||||
self.stdscr.addstr(12, 3, "Allowed Internal Sources:", curses.A_BOLD)
|
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
|
row = 13
|
||||||
if reg:
|
if reg:
|
||||||
for entry in reg.entries:
|
for entry in reg.entries:
|
||||||
self.stdscr.addstr(row, 3, f" - {entry.host}")
|
self.stdscr.addstr(row, 3, f" - {entry.host}")
|
||||||
row += 1
|
row += 1
|
||||||
|
else:
|
||||||
|
self.stdscr.addstr(row, 3, " - (none)")
|
||||||
|
|
||||||
def draw_status(self):
|
def draw_status(self):
|
||||||
color = curses.color_pair(5)
|
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)
|
v_cat = str(v.category.value if hasattr(v.category, "value") else v.category)
|
||||||
msg_text = f"[{v_cat}] {v.remediation} (Loc: {v.location})"
|
msg_text = f"[{v_cat}] {v.remediation} (Loc: {v.location})"
|
||||||
self.stdscr.addstr(row + i, 5, msg_text[:70], curses.color_pair(3))
|
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):
|
def draw_footer(self, max_y: int, max_x: int):
|
||||||
footer_text = " F5 Run Check F7 Clear History F10 Exit ".center(max_x)
|
footer_text = " F5 Run Check F7 Clear History F10 Exit ".center(max_x)
|
||||||
@@ -187,28 +281,60 @@ class CleanReleaseTUI:
|
|||||||
self.report_id = None
|
self.report_id = None
|
||||||
self.violations_list = []
|
self.violations_list = []
|
||||||
self.checks_progress = []
|
self.checks_progress = []
|
||||||
|
self.last_error = None
|
||||||
|
|
||||||
candidate = self.repo.get_candidate("2026.03.03-rc1")
|
candidate = self.repo.get_candidate(self.candidate_id) if self.candidate_id else None
|
||||||
policy = self.repo.get_active_policy()
|
policy = self.repo.get_active_policy()
|
||||||
|
|
||||||
if not candidate or not policy:
|
if not candidate or not policy:
|
||||||
self.status = "FAILED"
|
self.status = "FAILED"
|
||||||
|
self.last_error = "Candidate or active policy not found. Set CLEAN_TUI_CANDIDATE_ID and prepare repository data."
|
||||||
self.refresh_screen()
|
self.refresh_screen()
|
||||||
return
|
return
|
||||||
|
|
||||||
# Prepare a manifest with a deliberate violation for demo
|
if self.mode == "demo":
|
||||||
artifacts = [
|
# Prepare a manifest with a deliberate violation for demonstration mode.
|
||||||
{"path": "src/main.py", "category": "core", "reason": "source code", "classification": "allowed"},
|
artifacts = [
|
||||||
{"path": "test/data.csv", "category": "test-data", "reason": "test payload", "classification": "excluded-prohibited"},
|
{"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}",
|
manifest = build_distribution_manifest(
|
||||||
candidate_id=candidate.candidate_id,
|
manifest_id=f"manifest-{candidate.candidate_id}",
|
||||||
policy_id=policy.policy_id,
|
candidate_id=candidate.candidate_id,
|
||||||
generated_by="operator",
|
policy_id=policy.policy_id,
|
||||||
artifacts=artifacts
|
generated_by="operator",
|
||||||
)
|
artifacts=artifacts
|
||||||
self.repo.save_manifest(manifest)
|
)
|
||||||
|
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
|
# Init orchestrator sequence
|
||||||
check_run = self.orchestrator.start_check_run(candidate.candidate_id, policy.policy_id, "operator", "tui")
|
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.report_id = None
|
||||||
self.violations_list = []
|
self.violations_list = []
|
||||||
self.checks_progress = []
|
self.checks_progress = []
|
||||||
|
self.last_error = None
|
||||||
self.refresh_screen()
|
self.refresh_screen()
|
||||||
|
|
||||||
def refresh_screen(self):
|
def refresh_screen(self):
|
||||||
|
|||||||
17
bootstrap.json
Normal file
17
bootstrap.json
Normal file
@@ -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"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -295,7 +295,7 @@ export RETENTION_PERIOD_DAYS=90
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /home/busya/dev/ss-tools
|
cd /home/busya/dev/ss-tools
|
||||||
./backend/.venv/bin/python3 -m backend.src.scripts.clean_release_tui
|
./run_clean_tui.sh <candidate_id>
|
||||||
```
|
```
|
||||||
|
|
||||||
Ожидаемый flow:
|
Ожидаемый flow:
|
||||||
@@ -306,6 +306,41 @@ cd /home/busya/dev/ss-tools
|
|||||||
- `COMPLIANT` — кандидат готов к следующему этапу выпуска;
|
- `COMPLIANT` — кандидат готов к следующему этапу выпуска;
|
||||||
- `BLOCKED` — выпуск запрещён до устранения нарушений.
|
- `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)
|
### Политика источников (internal-only)
|
||||||
|
|
||||||
Разрешены только хосты из внутреннего реестра компании, например:
|
Разрешены только хосты из внутреннего реестра компании, например:
|
||||||
|
|||||||
@@ -8,11 +8,22 @@ set -e
|
|||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
echo "Starting Enterprise Clean Release Validator..."
|
echo "Starting Enterprise Clean Release Validator (real mode)..."
|
||||||
|
|
||||||
# Set up environment
|
# Set up environment
|
||||||
export PYTHONPATH="$SCRIPT_DIR/backend"
|
export PYTHONPATH="$SCRIPT_DIR/backend"
|
||||||
export TERM="xterm-256color"
|
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
|
# Run the TUI
|
||||||
./backend/.venv/bin/python3 -m backend.src.scripts.clean_release_tui
|
./backend/.venv/bin/python3 -m backend.src.scripts.clean_release_tui
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user