diff --git a/.ai/MODULE_MAP.md b/.ai/MODULE_MAP.md index 88495704..593df71a 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-10T11:52:00.326208 +**Generated:** 2026-03-10T18:26:33.375187 ## Summary - **Total Modules:** 103 -- **Total Entities:** 3063 +- **Total Entities:** 3077 ## Module Hierarchy @@ -53,7 +53,7 @@ ### 📁 `routes/` - - 🏗️ **Layers:** API, UI (API), UI/API + - 🏗️ **Layers:** API, Infra, UI (API), UI/API - 📊 **Tiers:** CRITICAL: 12, STANDARD: 272, TRIVIAL: 16 - 📄 **Files:** 21 - 📦 **Entities:** 300 @@ -87,7 +87,7 @@ - 🔗 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.mapping_service ### 📁 `__tests__/` @@ -126,7 +126,7 @@ ### 📁 `core/` - - 🏗️ **Layers:** Core + - 🏗️ **Layers:** Core, Domain - 📊 **Tiers:** CRITICAL: 52, STANDARD: 102, TRIVIAL: 9 - 📄 **Files:** 12 - 📦 **Entities:** 163 @@ -140,7 +140,7 @@ - ℂ **BeliefFormatter** (Class) - Custom logging formatter that adds belief state prefixes to ... - ℂ **ConfigManager** (Class) `[CRITICAL]` - - A class to handle application configuration persistence and ... + - Handles application configuration load, validation, mutation... - ℂ **IdMappingService** (Class) `[CRITICAL]` - Service handling the cataloging and retrieval of remote Supe... - ℂ **LogEntry** (Class) @@ -158,7 +158,7 @@ - 🔗 DEPENDS_ON -> AppConfigRecord - 🔗 DEPENDS_ON -> ConfigModels - - 🔗 DEPENDS_ON -> PyYAML + - 🔗 DEPENDS_ON -> SessionLocal - 🔗 DEPENDS_ON -> backend.src.core.auth.config - 🔗 DEPENDS_ON -> backend.src.core.logger @@ -180,7 +180,7 @@ ### 📁 `auth/` - - 🏗️ **Layers:** Core + - 🏗️ **Layers:** Core, Domain - 📊 **Tiers:** CRITICAL: 28 - 📄 **Files:** 6 - 📦 **Entities:** 28 @@ -190,7 +190,7 @@ - ℂ **AuthConfig** (Class) `[CRITICAL]` - Holds authentication-related settings. - ℂ **AuthRepository** (Class) `[CRITICAL]` - - Encapsulates database operations for authentication. + - Encapsulates database operations for authentication-related ... - 📦 **backend.src.core.auth.config** (Module) `[CRITICAL]` - Centralized configuration for authentication and authorizati... - 📦 **backend.src.core.auth.jwt** (Module) `[CRITICAL]` @@ -200,17 +200,17 @@ - 📦 **backend.src.core.auth.oauth** (Module) `[CRITICAL]` - ADFS OIDC configuration and client using Authlib. - 📦 **backend.src.core.auth.repository** (Module) `[CRITICAL]` - - Data access layer for authentication-related entities. + - Data access layer for authentication and user preference ent... - 📦 **backend.src.core.auth.security** (Module) `[CRITICAL]` - Utility for password hashing and verification using Passlib. **Dependencies:** - 🔗 DEPENDS_ON -> authlib + - 🔗 DEPENDS_ON -> backend.src.core.logger.belief_scope + - 🔗 DEPENDS_ON -> backend.src.models.auth + - 🔗 DEPENDS_ON -> backend.src.models.profile - 🔗 DEPENDS_ON -> jose - - 🔗 DEPENDS_ON -> passlib - - 🔗 DEPENDS_ON -> pydantic - - 🔗 DEPENDS_ON -> sqlalchemy ### 📁 `__tests__/` @@ -238,7 +238,7 @@ ### 📁 `migration/` - - 🏗️ **Layers:** Core + - 🏗️ **Layers:** Core, Domain - 📊 **Tiers:** CRITICAL: 20, TRIVIAL: 1 - 📄 **Files:** 4 - 📦 **Entities:** 21 @@ -256,7 +256,7 @@ - 📦 **backend.src.core.migration.dry_run_orchestrator** (Module) `[CRITICAL]` - Compute pre-flight migration diff and risk scoring without a... - 📦 **backend.src.core.migration.risk_assessor** (Module) `[CRITICAL]` - - Risk evaluation helpers for migration pre-flight reporting. + - Compute deterministic migration risk items and aggregate sco... **Dependencies:** @@ -364,7 +364,7 @@ - ℂ **ADGroupMapping** (Class) `[CRITICAL]` - Maps an Active Directory group to a local System Role. - ℂ **AppConfigRecord** (Class) `[CRITICAL]` - - Stores the single source of truth for application configurat... + - Stores persisted application configuration as a single autho... - ℂ **ApprovalDecision** (Class) - Approval or rejection bound to a candidate and report. - ℂ **AssistantAuditRecord** (Class) @@ -622,10 +622,10 @@ **Dependencies:** - 🔗 DEPENDS_ON -> ValidationRecord + - 🔗 DEPENDS_ON -> backend.src.core.auth.jwt.create_access_token - 🔗 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.auth.repository.AuthRepository + - 🔗 DEPENDS_ON -> backend.src.core.auth.security.verify_password ### 📁 `__tests__/` @@ -664,9 +664,9 @@ ### 📁 `clean_release/` - 🏗️ **Layers:** Application, Domain, Infra - - 📊 **Tiers:** CRITICAL: 9, STANDARD: 44, TRIVIAL: 51 + - 📊 **Tiers:** CRITICAL: 9, STANDARD: 46, TRIVIAL: 50 - 📄 **Files:** 21 - - 📦 **Entities:** 104 + - 📦 **Entities:** 105 **Key Entities:** @@ -701,9 +701,9 @@ ### 📁 `__tests__/` - 🏗️ **Layers:** Domain, Infra, Unknown - - 📊 **Tiers:** STANDARD: 18, TRIVIAL: 25 + - 📊 **Tiers:** STANDARD: 25, TRIVIAL: 25 - 📄 **Files:** 8 - - 📦 **Entities:** 43 + - 📦 **Entities:** 50 **Key Entities:** @@ -724,6 +724,10 @@ - 📦 **test_policy_engine** (Module) `[TRIVIAL]` - Auto-generated module for backend/src/services/clean_release... + **Dependencies:** + + - 🔗 DEPENDS_ON -> backend.src.services.clean_release.preparation_service:Module + ### 📁 `repositories/` - 🏗️ **Layers:** Infra @@ -1032,15 +1036,17 @@ ### 📁 `auth/` - - 🏗️ **Layers:** Component - - 📊 **Tiers:** CRITICAL: 2 + - 🏗️ **Layers:** UI + - 📊 **Tiers:** CRITICAL: 2, STANDARD: 1 - 📄 **Files:** 1 - - 📦 **Entities:** 2 + - 📦 **Entities:** 3 **Key Entities:** - 🧩 **ProtectedRoute** (Component) `[CRITICAL]` - - Wraps content to ensure only authenticated and authorized us... + - Wraps protected slot content with session and permission ver... + - 📦 **ProtectedRoute.svelte** (Module) + - Enforces authenticated and authorized access before protecte... ### 📁 `git/` @@ -1712,28 +1718,26 @@ ### 📁 `migration/` - - 🏗️ **Layers:** Page - - 📊 **Tiers:** CRITICAL: 11 + - 📊 **Tiers:** CRITICAL: 12 - 📄 **Files:** 1 - - 📦 **Entities:** 11 + - 📦 **Entities:** 12 **Key Entities:** - 🧩 **DashboardSelectionSection** (Component) `[CRITICAL]` - 🧩 **MigrationDashboard** (Component) `[CRITICAL]` - - Main dashboard for configuring and starting migrations. + - Orchestrate migration UI workflow and route user actions to ... ### 📁 `mappings/` - - 🏗️ **Layers:** Page - - 📊 **Tiers:** CRITICAL: 4 + - 📊 **Tiers:** CRITICAL: 8 - 📄 **Files:** 1 - - 📦 **Entities:** 4 + - 📦 **Entities:** 8 **Key Entities:** - - 🧩 **MappingManagement** (Component) `[CRITICAL]` - - Page for managing database mappings between environments. + - 🗄️ **UiState** (Store) `[CRITICAL]` + - Maintain local page state for environments, fetched database... ### 📁 `profile/` @@ -2005,6 +2009,11 @@ 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 + routes-->|DEPENDS_ON|backend + routes-->|DEPENDS_ON|backend routes-->|USES|backend routes-->|USES|backend routes-->|CALLS|backend @@ -2052,17 +2061,21 @@ graph TD auth-->|USES|backend auth-->|USES|backend auth-->|USES|backend - auth-->|USES|backend + auth-->|DEPENDS_ON|backend + auth-->|DEPENDS_ON|backend + auth-->|DEPENDS_ON|backend migration-->|DEPENDS_ON|backend migration-->|DEPENDS_ON|backend migration-->|DEPENDS_ON|backend migration-->|DEPENDS_ON|backend migration-->|DEPENDS_ON|backend - migration-->|USED_BY|backend + migration-->|DEPENDS_ON|backend + migration-->|DISPATCHES|backend utils-->|DEPENDS_ON|backend utils-->|DEPENDS_ON|backend utils-->|DEPENDS_ON|backend utils-->|DEPENDS_ON|backend + models-->|DEPENDS_ON|backend models-->|INHERITS_FROM|backend models-->|DEPENDS_ON|backend models-->|DEPENDS_ON|backend @@ -2099,9 +2112,11 @@ graph TD services-->|DEPENDS_ON|backend services-->|CALLS|backend services-->|DEPENDS_ON|backend - services-->|USES|backend - services-->|USES|backend - services-->|USES|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 __tests__-->|TESTS|backend @@ -2148,7 +2163,7 @@ graph TD __tests__-->|VERIFIES|backend __tests__-->|TESTS|backend __tests__-->|TESTS|backend - __tests__-->|TESTS|backend + __tests__-->|DEPENDS_ON|backend stages-->|IMPLEMENTS|backend stages-->|DEPENDS_ON|backend stages-->|IMPLEMENTS|backend diff --git a/.ai/PROJECT_MAP.md b/.ai/PROJECT_MAP.md index 2a63f935..5417276b 100644 --- a/.ai/PROJECT_MAP.md +++ b/.ai/PROJECT_MAP.md @@ -1197,9 +1197,7 @@ - ƒ **saveSettings** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - 🧩 **MigrationDashboard** (`Component`) `[CRITICAL]` - - 📝 Main dashboard for configuring and starting migrations. - - 🏗️ Layer: Page - - 🔒 Invariant: Migration cannot start without source and target environments. + - 📝 Orchestrate migration UI workflow and route user actions to backend APIs and task store. - ⬅️ READS_FROM `lib` - ⬅️ READS_FROM `selectedTask` - ➡️ WRITES_TO `selectedTask` @@ -1221,20 +1219,26 @@ - 📝 Starts the migration process. - ƒ **startDryRun** (`Function`) `[CRITICAL]` - 📝 Builds pre-flight diff and risk summary without applying migration. +- ▦ **MigrationDashboardView** (`Block`) `[CRITICAL]` + - 📝 Render migration configuration controls, action CTAs, dry-run results, and modal entry points. - 🧩 **DashboardSelectionSection** (`Component`) `[CRITICAL]` -- 🧩 **MappingManagement** (`Component`) `[CRITICAL]` - - 📝 Page for managing database mappings between environments. - - 🏗️ Layer: Page - - 🔒 Invariant: Mappings are saved to the backend for persistence. - - ⬅️ READS_FROM `lib` - - ➡️ WRITES_TO `t` - - ⬅️ READS_FROM `t` +- ▦ **MappingsPageScript** (`Block`) `[CRITICAL]` + - 📝 Define imports, state, and handlers that drive migration mappings page FSM. + - 🔗 CALLS -> `fetchEnvironments` + - 🔗 CALLS -> `fetchDatabases` + - 🔗 CALLS -> `handleUpdate` + - ▦ **Imports** (`Block`) `[CRITICAL]` + - 🗄️ **UiState** (`Store`) `[CRITICAL]` + - 📝 Maintain local page state for environments, fetched databases, mappings, suggestions, and UX messages. + - ƒ **belief_scope** (`Function`) `[CRITICAL]` + - 📝 Frontend semantic scope wrapper for CRITICAL trace boundaries without changing business behavior. - ƒ **fetchEnvironments** (`Function`) `[CRITICAL]` - - 📝 Fetches the list of environments. + - 📝 Load environment options for source/target selectors on initial mount. - ƒ **fetchDatabases** (`Function`) `[CRITICAL]` - - 📝 Fetches databases from both environments and gets suggestions. + - 📝 Fetch both environment database catalogs, existing mappings, and suggested matches. - ƒ **handleUpdate** (`Function`) `[CRITICAL]` - - 📝 Saves a mapping to the backend. + - 📝 Persist a selected mapping pair and reconcile local mapping list by source database UUID. +- ▦ **MappingsPageTemplate** (`Block`) `[CRITICAL]` - 📦 **+page** (`Module`) `[TRIVIAL]` - 📝 Auto-generated module for frontend/src/routes/profile/+page.svelte - 🏗️ Layer: Unknown @@ -1761,16 +1765,14 @@ - ➡️ WRITES_TO `t` - ƒ **handleSelect** (`Function`) - 📝 Dispatches the selection change event. -- 🧩 **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 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. +- 📦 **ProtectedRoute.svelte** (`Module`) + - 📝 Enforces authenticated and authorized access before protected route content is rendered. + - 🏗️ Layer: UI + - 🔒 Invariant: Unauthenticated users are redirected to /login, unauthorized users are redirected to fallbackPath, and protected slot renders only when access is verified. + - 🧩 **ProtectedRoute** (`Component`) `[CRITICAL]` + - 📝 Wraps protected slot content with session and permission verification guards. + - ƒ **verifySessionAndAccess** (`Function`) `[CRITICAL]` + - 📝 Validates session and optional permission gate before allowing protected content render. - 🧩 **TaskLogPanel** (`Component`) - 📝 Combines log filtering and display into a single cohesive dark-themed panel. - 🏗️ Layer: UI @@ -2499,46 +2501,49 @@ - ƒ **as_bool** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - 📦 **ConfigManagerModule** (`Module`) `[CRITICAL]` - - 📝 Manages application configuration persisted in database with one-time migration from JSON. - - 🏗️ Layer: Core - - 🔒 Invariant: Configuration must always be valid according to AppConfig model. + - 📝 Manages application configuration persistence in DB with one-time migration from legacy JSON. + - 🏗️ Layer: Domain + - 🔒 Invariant: Configuration must always be representable by AppConfig and persisted under global record id. - 🔗 DEPENDS_ON -> `ConfigModels` + - 🔗 DEPENDS_ON -> `SessionLocal` - 🔗 DEPENDS_ON -> `AppConfigRecord` - 🔗 CALLS -> `logger` + - 🔗 CALLS -> `configure_logger` + - 🔗 BINDS_TO -> `ConfigManager` - ℂ **ConfigManager** (`Class`) `[CRITICAL]` - - 📝 A class to handle application configuration persistence and management. + - 📝 Handles application configuration load, validation, mutation, and persistence lifecycle. - ƒ **__init__** (`Function`) `[CRITICAL]` - - 📝 Initializes the ConfigManager. + - 📝 Initialize manager state from persisted or migrated configuration. - ƒ **_default_config** (`Function`) `[CRITICAL]` - - 📝 Returns default application configuration. + - 📝 Build default application configuration fallback. - ƒ **_load_from_legacy_file** (`Function`) `[CRITICAL]` - - 📝 Loads legacy configuration from config.json for migration fallback. + - 📝 Load legacy JSON configuration for migration fallback path. - ƒ **_get_record** (`Function`) `[CRITICAL]` - - 📝 Loads config record from DB. + - 📝 Resolve global configuration record from DB. - ƒ **_load_config** (`Function`) `[CRITICAL]` - - 📝 Loads the configuration from DB or performs one-time migration from JSON file. + - 📝 Load configuration from DB or perform one-time migration from legacy JSON. - ƒ **_save_config_to_db** (`Function`) `[CRITICAL]` - - 📝 Saves the provided configuration object to DB. + - 📝 Persist provided AppConfig into the global DB configuration record. - ƒ **save** (`Function`) `[CRITICAL]` - - 📝 Saves the current configuration state to DB. + - 📝 Persist current in-memory configuration state. - ƒ **get_config** (`Function`) `[CRITICAL]` - - 📝 Returns the current configuration. + - 📝 Return current in-memory configuration snapshot. - ƒ **update_global_settings** (`Function`) `[CRITICAL]` - - 📝 Updates the global settings and persists the change. + - 📝 Replace global settings and persist the resulting configuration. - ƒ **validate_path** (`Function`) `[CRITICAL]` - - 📝 Validates if a path exists and is writable. + - 📝 Validate that path exists and is writable, creating it when absent. - ƒ **get_environments** (`Function`) `[CRITICAL]` - - 📝 Returns the list of configured environments. + - 📝 Return all configured environments. - ƒ **has_environments** (`Function`) `[CRITICAL]` - - 📝 Checks if at least one environment is configured. + - 📝 Check whether at least one environment exists in configuration. - ƒ **get_environment** (`Function`) `[CRITICAL]` - - 📝 Returns a single environment by ID. + - 📝 Resolve a configured environment by identifier. - ƒ **add_environment** (`Function`) `[CRITICAL]` - - 📝 Adds a new environment to the configuration. + - 📝 Upsert environment by id into configuration and persist. - ƒ **update_environment** (`Function`) `[CRITICAL]` - - 📝 Updates an existing environment. + - 📝 Update existing environment by id and preserve masked password placeholder behavior. - ƒ **delete_environment** (`Function`) `[CRITICAL]` - - 📝 Deletes an environment by ID. + - 📝 Delete environment by id and persist when deletion occurs. - 📦 **SchedulerModule** (`Module`) - 📝 Manages scheduled tasks using APScheduler. - 🏗️ Layer: Core @@ -2676,22 +2681,25 @@ - ƒ **has_plugin** (`Function`) - 📝 Checks if a plugin with the given ID is registered. - 📦 **backend.src.core.migration_engine** (`Module`) `[CRITICAL]` - - 📝 Handles the interception and transformation of Superset asset ZIP archives. - - 🏗️ Layer: Core - - 🔒 Invariant: ZIP structure must be preserved after transformation. - - 🔗 DEPENDS_ON -> `PyYAML` + - 📝 Transforms Superset export ZIP archives while preserving archive integrity and patching mapped identifiers. + - 🏗️ Layer: Domain + - 🔒 Invariant: ZIP structure and non-targeted metadata must remain valid after transformation. + - 🔗 DEPENDS_ON -> `src.core.logger` + - 🔗 DEPENDS_ON -> `src.core.mapping_service.IdMappingService` + - 🔗 DEPENDS_ON -> `src.models.mapping.ResourceType` + - 🔗 DEPENDS_ON -> `yaml` - ℂ **MigrationEngine** (`Class`) `[CRITICAL]` - 📝 Engine for transforming Superset export ZIPs. - ƒ **__init__** (`Function`) `[CRITICAL]` - - 📝 Initializes the migration engine with optional ID mapping service. + - 📝 Initializes migration orchestration dependencies for ZIP/YAML metadata transformations. - ƒ **transform_zip** (`Function`) `[CRITICAL]` - 📝 Extracts ZIP, replaces database UUIDs in YAMLs, patches cross-filters, and re-packages. - ƒ **_transform_yaml** (`Function`) `[CRITICAL]` - 📝 Replaces database_uuid in a single YAML file. - ƒ **_extract_chart_uuids_from_archive** (`Function`) `[CRITICAL]` - - 📝 Scans the unpacked ZIP to map local exported integer IDs back to their UUIDs. + - 📝 Scans extracted chart YAML files and builds a source chart ID to UUID lookup map. - ƒ **_patch_dashboard_metadata** (`Function`) `[CRITICAL]` - - 📝 Replaces integer IDs in json_metadata. + - 📝 Rewrites dashboard json_metadata chart/dataset integer identifiers using target environment mappings. - 📦 **backend.src.core.async_superset_client** (`Module`) `[CRITICAL]` - 📝 Async Superset client for dashboard hot-path requests without blocking FastAPI event loop. - 🏗️ Layer: Core @@ -2802,34 +2810,38 @@ - ƒ **get_password_hash** (`Function`) `[CRITICAL]` - 📝 Generates a bcrypt hash for a plain password. - 📦 **backend.src.core.auth.repository** (`Module`) `[CRITICAL]` - - 📝 Data access layer for authentication-related entities. - - 🏗️ Layer: Core - - 🔒 Invariant: All database operations must be performed within a session. - - 🔗 DEPENDS_ON -> `sqlalchemy` + - 📝 Data access layer for authentication and user preference entities. + - 🏗️ Layer: Domain + - 🔒 Invariant: All database read/write operations must execute via the injected SQLAlchemy session boundary. + - 🔗 DEPENDS_ON -> `sqlalchemy.orm.Session` + - 🔗 DEPENDS_ON -> `backend.src.models.auth` + - 🔗 DEPENDS_ON -> `backend.src.models.profile` + - 🔗 DEPENDS_ON -> `backend.src.core.logger.belief_scope` - ℂ **AuthRepository** (`Class`) `[CRITICAL]` - - 📝 Encapsulates database operations for authentication. + - 📝 Encapsulates database operations for authentication-related entities. + - 🔗 DEPENDS_ON -> `sqlalchemy.orm.Session` - ƒ **__init__** (`Function`) `[CRITICAL]` - - 📝 Initializes the repository with a database session. + - 📝 Bind repository instance to an existing SQLAlchemy session. - ƒ **get_user_by_username** (`Function`) `[CRITICAL]` - - 📝 Retrieves a user by their username. + - 📝 Retrieve a user entity by unique username. - ƒ **get_user_by_id** (`Function`) `[CRITICAL]` - - 📝 Retrieves a user by their unique ID. + - 📝 Retrieve a user entity by identifier. - ƒ **get_role_by_name** (`Function`) `[CRITICAL]` - - 📝 Retrieves a role by its name. + - 📝 Retrieve a role entity by role name. - ƒ **update_last_login** (`Function`) `[CRITICAL]` - - 📝 Updates the last_login timestamp for a user. + - 📝 Update last_login timestamp for the provided user entity. - ƒ **get_role_by_id** (`Function`) `[CRITICAL]` - - 📝 Retrieves a role by its unique ID. + - 📝 Retrieve a role entity by identifier. - ƒ **get_permission_by_id** (`Function`) `[CRITICAL]` - - 📝 Retrieves a permission by its unique ID. + - 📝 Retrieve a permission entity by identifier. - ƒ **get_permission_by_resource_action** (`Function`) `[CRITICAL]` - - 📝 Retrieves a permission by resource and action. + - 📝 Retrieve a permission entity by resource and action pair. - ƒ **get_user_dashboard_preference** (`Function`) `[CRITICAL]` - - 📝 Retrieves dashboard preference by owner user ID. + - 📝 Retrieve dashboard preference entity owned by specified user. - ƒ **save_user_dashboard_preference** (`Function`) `[CRITICAL]` - - 📝 Persists dashboard preference entity and returns refreshed row. + - 📝 Persist dashboard preference entity and return refreshed persistent row. - ƒ **list_permissions** (`Function`) `[CRITICAL]` - - 📝 Lists all available permissions. + - 📝 List all permission entities available in storage. - 📦 **test_auth** (`Module`) - 📝 Unit tests for authentication module - 🏗️ Layer: Domain @@ -3068,10 +3080,10 @@ - 📝 Test that configure_logger updates task_log_level. - ƒ **test_enable_belief_state_flag** (`Function`) - 📝 Test that enable_belief_state flag controls belief_scope logging. - - ƒ **test_belief_scope_missing_anchor** (`Function`) - - 📝 Test @PRE condition: anchor_id must be provided - - ƒ **test_configure_logger_post_conditions** (`Function`) - - 📝 Test @POST condition: Logger level, handlers, belief state flag, and task log level are updated. + - ƒ **test_belief_scope_missing_anchor** (`Function`) + - 📝 Test @PRE condition: anchor_id must be provided + - ƒ **test_configure_logger_post_conditions** (`Function`) + - 📝 Test @POST condition: Logger level, handlers, belief state flag, and task log level are updated. - ƒ **reset_logger_state** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - 📦 **backend.src.core.migration.dry_run_orchestrator** (`Module`) `[CRITICAL]` @@ -3114,8 +3126,11 @@ - ƒ **_normalize_object_payload** (`Function`) `[CRITICAL]` - 📝 Convert raw YAML payload to stable diff signature shape. - 📦 **backend.src.core.migration.risk_assessor** (`Module`) `[CRITICAL]` - - 📝 Risk evaluation helpers for migration pre-flight reporting. - - 🏗️ Layer: Core + - 📝 Compute deterministic migration risk items and aggregate score for dry-run reporting. + - 🏗️ Layer: Domain + - 🔒 Invariant: Risk scoring must remain bounded to [0,100] and preserve severity-to-weight mapping. + - 🔗 DEPENDS_ON -> `backend.src.core.superset_client.SupersetClient` + - 🔗 DISPATCHES -> `backend.src.core.migration.dry_run_orchestrator.MigrationDryRunService.run` - ƒ **index_by_uuid** (`Function`) `[CRITICAL]` - 📝 Build UUID-index from normalized objects. - ƒ **extract_owner_identifiers** (`Function`) `[CRITICAL]` @@ -3525,24 +3540,30 @@ - 📝 Fetch the list of databases from a specific environment. - 🏗️ Layer: API - 📦 **backend.src.api.routes.migration** (`Module`) `[CRITICAL]` - - 📝 API endpoints for migration operations. - - 🏗️ Layer: API + - 📝 HTTP contract layer for migration orchestration, settings, dry-run, and mapping sync endpoints. + - 🏗️ Layer: Infra + - 🔒 Invariant: Migration endpoints never execute with invalid environment references and always return explicit HTTP errors on guard failures. - 🔗 DEPENDS_ON -> `backend.src.dependencies` + - 🔗 DEPENDS_ON -> `backend.src.core.database` + - 🔗 DEPENDS_ON -> `backend.src.core.superset_client` + - 🔗 DEPENDS_ON -> `backend.src.core.migration.dry_run_orchestrator` + - 🔗 DEPENDS_ON -> `backend.src.core.mapping_service` - 🔗 DEPENDS_ON -> `backend.src.models.dashboard` + - 🔗 DEPENDS_ON -> `backend.src.models.mapping` - ƒ **get_dashboards** (`Function`) `[CRITICAL]` - - 📝 Fetch all dashboards from the specified environment for the grid. + - 📝 Fetch dashboard metadata from a requested environment for migration selection UI. - ƒ **execute_migration** (`Function`) `[CRITICAL]` - - 📝 Execute the migration of selected dashboards. + - 📝 Validate migration selection and enqueue asynchronous migration task execution. - ƒ **dry_run_migration** (`Function`) `[CRITICAL]` - - 📝 Build pre-flight diff and risk summary without applying migration. + - 📝 Build pre-flight migration diff and risk summary without mutating target systems. - ƒ **get_migration_settings** (`Function`) `[CRITICAL]` - - 📝 Get current migration Cron string explicitly. + - 📝 Read and return configured migration synchronization cron expression. - ƒ **update_migration_settings** (`Function`) `[CRITICAL]` - - 📝 Update migration Cron string. + - 📝 Validate and persist migration synchronization cron expression update. - ƒ **get_resource_mappings** (`Function`) `[CRITICAL]` - - 📝 Fetch synchronized object mappings with search, filtering, and pagination. + - 📝 Fetch synchronized resource mappings with optional filters and pagination for migration mappings view. - ƒ **trigger_sync_now** (`Function`) `[CRITICAL]` - - 📝 Triggers an immediate ID synchronization for all environments. + - 📝 Trigger immediate ID synchronization for every configured environment. - 📦 **PluginsRouter** (`Module`) - 📝 Defines the FastAPI router for plugin-related endpoints, allowing clients to list available plugins. - 🏗️ Layer: UI (API) @@ -3790,28 +3811,28 @@ - 📝 Normalize intent entity value types from LLM output to route-compatible values. - ƒ **_confirmation_summary** (`Function`) - 📝 Build human-readable confirmation prompt for an intent before execution. - - ƒ **_clarification_text_for_intent** (`Function`) - - 📝 Convert technical missing-parameter errors into user-facing clarification prompts. - - ƒ **_plan_intent_with_llm** (`Function`) - - 📝 Use active LLM provider to select best tool/operation from dynamic catalog. - - ƒ **_authorize_intent** (`Function`) - - 📝 Validate user permissions for parsed intent before confirmation/dispatch. - - ƒ **_dispatch_intent** (`Function`) - - 📝 Execute parsed assistant intent via existing task/plugin/git services. - - ƒ **send_message** (`Function`) - - 📝 Parse assistant command, enforce safety gates, and dispatch executable intent. - - ƒ **confirm_operation** (`Function`) - - 📝 Execute previously requested risky operation after explicit user confirmation. - - ƒ **cancel_operation** (`Function`) - - 📝 Cancel pending risky operation and mark confirmation token as cancelled. - - ƒ **list_conversations** (`Function`) - - 📝 Return paginated conversation list for current user with archived flag and last message preview. - - ƒ **delete_conversation** (`Function`) - - 📝 Soft-delete or hard-delete a conversation and clear its in-memory trace. - - ƒ **get_history** (`Function`) - - 📝 Retrieve paginated assistant conversation history for current user. - - ƒ **get_assistant_audit** (`Function`) - - 📝 Return assistant audit decisions for current user from persistent and in-memory stores. + - ƒ **_clarification_text_for_intent** (`Function`) + - 📝 Convert technical missing-parameter errors into user-facing clarification prompts. + - ƒ **_plan_intent_with_llm** (`Function`) + - 📝 Use active LLM provider to select best tool/operation from dynamic catalog. + - ƒ **_authorize_intent** (`Function`) + - 📝 Validate user permissions for parsed intent before confirmation/dispatch. + - ƒ **_dispatch_intent** (`Function`) + - 📝 Execute parsed assistant intent via existing task/plugin/git services. + - ƒ **send_message** (`Function`) + - 📝 Parse assistant command, enforce safety gates, and dispatch executable intent. + - ƒ **confirm_operation** (`Function`) + - 📝 Execute previously requested risky operation after explicit user confirmation. + - ƒ **cancel_operation** (`Function`) + - 📝 Cancel pending risky operation and mark confirmation token as cancelled. + - ƒ **list_conversations** (`Function`) + - 📝 Return paginated conversation list for current user with archived flag and last message preview. + - ƒ **delete_conversation** (`Function`) + - 📝 Soft-delete or hard-delete a conversation and clear its in-memory trace. + - ƒ **get_history** (`Function`) + - 📝 Retrieve paginated assistant conversation history for current user. + - ƒ **get_assistant_audit** (`Function`) + - 📝 Return assistant audit decisions for current user from persistent and in-memory stores. - ƒ **_async_confirmation_summary** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - ƒ **_label** (`Function`) `[TRIVIAL]` @@ -4462,18 +4483,20 @@ - 📝 Status command without explicit task_id should resolve to latest task for current user. - ƒ **test_llm_validation_with_dashboard_ref_requires_confirmation** (`Function`) - 📝 LLM validation with dashboard_ref should now require confirmation before dispatch. - - ƒ **test_list_conversations_groups_by_conversation_and_marks_archived** (`Function`) - - 📝 Conversations endpoint must group messages and compute archived marker by inactivity threshold. - - ƒ **test_history_from_latest_returns_recent_page_first** (`Function`) - - 📝 History endpoint from_latest mode must return newest page while preserving chronological order in chunk. - - ƒ **test_list_conversations_archived_only_filters_active** (`Function`) - - 📝 archived_only mode must return only archived conversations. - - ƒ **test_guarded_operation_always_requires_confirmation** (`Function`) - - 📝 Non-dangerous (guarded) commands must still require confirmation before execution. - - ƒ **test_guarded_operation_confirm_roundtrip** (`Function`) - - 📝 Guarded operation must execute successfully after explicit confirmation. - - ƒ **test_confirm_nonexistent_id_returns_404** (`Function`) - - 📝 Confirming a non-existent ID should raise 404. + - ƒ **test_list_conversations_groups_by_conversation_and_marks_archived** (`Function`) + - 📝 Conversations endpoint must group messages and compute archived marker by inactivity threshold. + - ƒ **test_history_from_latest_returns_recent_page_first** (`Function`) + - 📝 History endpoint from_latest mode must return newest page while preserving chronological order in chunk. + - ƒ **test_list_conversations_archived_only_filters_active** (`Function`) + - 📝 archived_only mode must return only archived conversations. + - ƒ **test_guarded_operation_always_requires_confirmation** (`Function`) + - 📝 Non-dangerous (guarded) commands must still require confirmation before execution. + - ƒ **test_guarded_operation_confirm_roundtrip** (`Function`) + - 📝 Guarded operation must execute successfully after explicit confirmation. + - ƒ **test_confirm_nonexistent_id_returns_404** (`Function`) + - 📝 Confirming a non-existent ID should raise 404. + - ƒ **test_migration_with_dry_run_includes_summary** (`Function`) + - 📝 Migration command with dry run flag must return the dry run summary in confirmation text. - ƒ **__init__** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - ƒ **__init__** (`Function`) `[TRIVIAL]` @@ -4568,13 +4591,15 @@ - ƒ **test_dry_run_migration_rejects_same_environment** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - 📦 **backend.src.models.config** (`Module`) `[CRITICAL]` - - 📝 Defines database schema for persisted application configuration. + - 📝 Defines SQLAlchemy persistence models for application and notification configuration records. - 🏗️ Layer: Domain + - 🔒 Invariant: Configuration payload and notification credentials must remain persisted as non-null JSON documents. - 🔗 DEPENDS_ON -> `sqlalchemy` + - 🔗 DEPENDS_ON -> `backend.src.models.mapping:Base` - ℂ **AppConfigRecord** (`Class`) `[CRITICAL]` - - 📝 Stores the single source of truth for application configuration. + - 📝 Stores persisted application configuration as a single authoritative record model. - ℂ **NotificationConfig** (`Class`) `[CRITICAL]` - - 📝 Global settings for external notification providers. + - 📝 Stores persisted provider-level notification configuration and encrypted credentials metadata. - 📦 **backend.src.models.llm** (`Module`) - 📝 SQLAlchemy models for LLM provider configuration and validation results. - 🏗️ Layer: Domain @@ -4628,8 +4653,8 @@ - 📝 Represents a mapping between source and target databases. - ℂ **MigrationJob** (`Class`) `[TRIVIAL]` - 📝 Represents a single migration execution job. - - ℂ **ResourceMapping** (`Class`) - - 📝 Maps a universal UUID for a resource to its actual ID on a specific environment. + - ℂ **ResourceMapping** (`Class`) + - 📝 Maps a universal UUID for a resource to its actual ID on a specific environment. - 📦 **backend.src.models.report** (`Module`) `[CRITICAL]` - 📝 Canonical report schemas for unified task reporting across heterogeneous task types. - 🏗️ Layer: Domain @@ -5066,19 +5091,24 @@ - ƒ **__getattr__** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - 📦 **backend.src.services.auth_service** (`Module`) `[CRITICAL]` - - 📝 Orchestrates authentication business logic. - - 🏗️ Layer: Service - - 🔒 Invariant: Authentication must verify both credentials and account status. + - 📝 Orchestrates credential authentication and ADFS JIT user provisioning. + - 🏗️ Layer: Domain + - 🔒 Invariant: Authentication succeeds only for active users with valid credentials; issued sessions encode subject and scopes from assigned roles. + - 🔗 DEPENDS_ON -> `backend.src.core.auth.repository.AuthRepository` + - 🔗 DEPENDS_ON -> `backend.src.core.auth.security.verify_password` + - 🔗 DEPENDS_ON -> `backend.src.core.auth.jwt.create_access_token` + - 🔗 DEPENDS_ON -> `backend.src.models.auth.User` + - 🔗 DEPENDS_ON -> `backend.src.models.auth.Role` - ℂ **AuthService** (`Class`) `[CRITICAL]` - 📝 Provides high-level authentication services. - ƒ **__init__** (`Function`) `[CRITICAL]` - - 📝 Initializes the service with a database session. + - 📝 Initializes the authentication service with repository access over an active DB session. - ƒ **authenticate_user** (`Function`) `[CRITICAL]` - - 📝 Authenticates a user with username and password. + - 📝 Validates credentials and account state for local username/password authentication. - ƒ **create_session** (`Function`) `[CRITICAL]` - - 📝 Creates a JWT session for an authenticated user. + - 📝 Issues an access token payload for an already authenticated user. - ƒ **provision_adfs_user** (`Function`) `[CRITICAL]` - - 📝 Just-In-Time (JIT) provisioning for ADFS users based on group mappings. + - 📝 Performs ADFS Just-In-Time provisioning and role synchronization from AD group mappings. - 📦 **backend.src.services.git_service** (`Module`) - 📝 Core Git logic using GitPython to manage dashboard repositories. - 🏗️ Layer: Service @@ -5435,14 +5465,18 @@ - 🔗 DEPENDS_ON -> `backend.src.services.clean_release.repository` - ℂ **CleanComplianceOrchestrator** (`Class`) - 📝 Coordinate clean-release compliance verification stages. + - ƒ **CleanComplianceOrchestrator.__init__** (`Function`) + - 📝 Bind repository dependency used for orchestrator persistence and lookups. - ƒ **start_check_run** (`Function`) - 📝 Initiate a new compliance run session. - - ƒ **finalize_run** (`Function`) - - 📝 Finalize run status based on cumulative stage results. + - ƒ **execute_stages** (`Function`) + - 📝 Execute or accept compliance stage outcomes and set intermediate/final check-run status fields. + - ƒ **finalize_run** (`Function`) + - 📝 Finalize run status based on cumulative stage results. + - ƒ **run_check_legacy** (`Function`) + - 📝 Legacy wrapper for compatibility with previous orchestrator call style. - ƒ **__init__** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - - ƒ **execute_stages** (`Function`) `[TRIVIAL]` - - 📝 Auto-detected function (orphan) - 📦 **backend.src.services.clean_release.compliance_execution_service** (`Module`) `[CRITICAL]` - 📝 Create and execute compliance runs with trusted snapshots, deterministic stages, violations and immutable report persistence. - 🏗️ Layer: Domain @@ -5786,6 +5820,21 @@ - 📝 Validate release candidate preparation flow, including policy evaluation and manifest persisting. - 🏗️ Layer: Domain - 🔒 Invariant: Candidate preparation always persists manifest and candidate status deterministically. + - 🔗 DEPENDS_ON -> `backend.src.services.clean_release.preparation_service:Module` + - ƒ **backend.tests.services.clean_release.test_preparation_service._mock_policy** (`Function`) + - 📝 Build a valid clean profile policy fixture for preparation tests. + - ƒ **backend.tests.services.clean_release.test_preparation_service._mock_registry** (`Function`) + - 📝 Build an internal-only source registry fixture for preparation tests. + - ƒ **backend.tests.services.clean_release.test_preparation_service._mock_candidate** (`Function`) + - 📝 Build a draft release candidate fixture with provided identifier. + - ƒ **backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_success** (`Function`) + - 📝 Verify candidate transitions to PREPARED when evaluation returns no violations. + - ƒ **backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_with_violations** (`Function`) + - 📝 Verify candidate transitions to BLOCKED when evaluation returns blocking violations. + - ƒ **backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_not_found** (`Function`) + - 📝 Verify preparation raises ValueError when candidate does not exist. + - ƒ **backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_no_active_policy** (`Function`) + - 📝 Verify preparation raises ValueError when no active policy is available. - ƒ **_mock_policy** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) - ƒ **_mock_registry** (`Function`) `[TRIVIAL]` diff --git a/.kilocode/setup-script b/.kilocode/setup-script new file mode 100755 index 00000000..24b867a4 --- /dev/null +++ b/.kilocode/setup-script @@ -0,0 +1,39 @@ +#!/bin/bash +# Kilo Code Worktree Setup Script +# This script runs before the agent starts in a worktree (new sessions only). +# +# Available environment variables: +# WORKTREE_PATH - Absolute path to the worktree directory +# REPO_PATH - Absolute path to the main repository +# +# Example tasks: +# - Copy .env files from main repo +# - Install dependencies +# - Run database migrations +# - Set up local configuration + +set -e # Exit on error + +echo "Setting up worktree: $WORKTREE_PATH" + +# Uncomment and modify as needed: + +# Copy environment files +# if [ -f "$REPO_PATH/.env" ]; then +# cp "$REPO_PATH/.env" "$WORKTREE_PATH/.env" +# echo "Copied .env" +# fi + +# Install dependencies (Node.js) +# if [ -f "$WORKTREE_PATH/package.json" ]; then +# cd "$WORKTREE_PATH" +# npm install +# fi + +# Install dependencies (Python) +# if [ -f "$WORKTREE_PATH/requirements.txt" ]; then +# cd "$WORKTREE_PATH" +# pip install -r requirements.txt +# fi + +echo "Setup complete!" diff --git a/.kilocode/workflows/speckit.semantics.md b/.kilocode/workflows/speckit.semantics.md index 2a29d119..3e9f96f0 100644 --- a/.kilocode/workflows/speckit.semantics.md +++ b/.kilocode/workflows/speckit.semantics.md @@ -1,5 +1,5 @@ --- -description: Maintain semantic integrity by generating maps and auditing compliance reports. +description: Maintain semantic integrity via multi-agent delegation. Analyzes codebase, delegates markup tasks to Semantic Engineer, verifies via Reviewer Agent, and reports status. --- ## User Input @@ -12,61 +12,62 @@ You **MUST** consider the user input before proceeding (if not empty). ## Goal -Ensure the codebase adheres to the semantic standards defined in `.ai/standards/semantics.md`. This involves generating the semantic map, analyzing compliance reports, and identifying critical parsing errors or missing metadata. +Ensure the codebase 100% adheres to the semantic standards defined in `.ai/standards/semantics.md` (GRACE-Poly Protocol). You are the **Manager/Supervisor**. You do not write code. You manage the queue, delegate files to the Semantic Engineer, audit their work via the Reviewer Agent, and commit successful changes. ## Operating Constraints -1. **ROLE: Orchestrator**: You are responsible for the high-level coordination of semantic maintenance. -2. **STRICT ADHERENCE**: Follow `.ai/standards/semantics.md` for all anchor and tag syntax. -3. **NON-DESTRUCTIVE**: Do not remove existing code logic; only add or update semantic annotations. -4. **TIER AWARENESS**: Prioritize CRITICAL and STANDARD modules for compliance fixes. +1. **ROLE: Orchestrator**: High-level coordination ONLY. Do not output raw code diffs yourself. +2. **DELEGATION PATTERN**: Strict `Orchestrator -> Engineer -> Reviewer -> Orchestrator` loop. +3. **FAIL-FAST METRICS**: If the Reviewer Agent rejects a file 3 times in a row, drop the file from the current queue and mark it as `[HUMAN_INTERVENTION_REQUIRED]`. +4. **TIER AWARENESS**: CRITICAL files MUST be processed first. A failure in a CRITICAL file blocks the entire pipeline. ## Execution Steps -### 1. Generate Semantic Map - -Run the generator script from the repository root: - +### 1. Generate Semantic State (Analyze) +Run the generator script to map the current reality: ```bash python3 generate_semantic_map.py ``` +Parse the output (Global Score, Critical Parsing Errors, Files with Score < 0.7). -### 2. Analyze Compliance Status +### 2. Formulate Task Queue +Create an execution queue based on the report. Priority: +- **Priority 1 (Blockers)**: Files with "Critical Parsing Errors" (unclosed `[/DEF]` anchors). +- **Priority 2 (Tier 1)**: `CRITICAL` tier modules missing mandatory tags (`@PRE`, `@POST`, `belief_scope`). +- **Priority 3 (Tier 2)**: `STANDARD` modules with missing graph relations (`@RELATION`). -**Parse the output to identify**: -- Path to the latest report in `semantics/reports/semantic_report_*.md`. -- Global Compliance Score. -- Total count of Global Errors and Warnings. +### 3. The Delegation Loop (For each file in the queue) +For every target file, execute this exact sequence: -### 3. Audit Critical Issues +* **Step 3A (Delegate to Worker):** Send the file path and the specific violation from the report to the **Semantic Markup Agent (Engineer)**. + *Prompt*: `"Fix semantic violations in [FILE]. Current issues: [ISSUES]. Apply GRACE-Poly standards without changing business logic."* +* **Step 3B (Delegate to Auditor):** Once the Engineer returns the modified file, send it to the **Reviewer Agent (Auditor)**. + *Prompt*: `"Verify GRACE-Poly compliance for [FILE]. Check for paired [DEF] anchors, complete contracts, and belief_scope usage. Return PASS or FAIL with specific line errors."* +* **Step 3C (Evaluate):** + * If Auditor returns `PASS`: Apply the diff to the codebase. Move to the next file. + * If Auditor returns `FAIL`: Send the Auditor's error report back to the Engineer (Step 3A). Repeat max 3 times. -Read the latest report and extract: -- **Critical Parsing Errors**: Unclosed anchors or mismatched tags. -- **Low-Score Files**: Files with score < 0.7 or marked with 🔴. -- **Missing Mandatory Tags**: Specifically for CRITICAL tier modules. +### 4. Verification +Once the queue is empty, re-run `python3 generate_semantic_map.py` to prove the metrics have improved. -### 4. Formulate Remediation Plan +## Output Format -Create a list of files requiring immediate attention: -1. **Priority 1**: Fix all "Critical Parsing Errors" (unclosed anchors). -2. **Priority 2**: Add missing mandatory tags for CRITICAL modules. -3. **Priority 3**: Improve coverage for STANDARD modules. +Return a structured summary of the operation: -### 5. Execute Fixes (Optional/Handoff) +```text +=== GRACE SEMANTIC ORCHESTRATION REPORT === +Initial Global Score: [X]% +Final Global Score: [Y]% +Status:[PASS / BLOCKED] -If $ARGUMENTS contains "fix" or "apply": -- For each target file, use `read_file` to get context. -- Apply semantic fixes using `apply_diff`, preserving all code logic. -- Re-run `python3 generate_semantic_map.py` to verify the fix. - -## Output - -Provide a summary of the semantic state: -- **Global Score**: [X]% -- **Status**: [PASS/FAIL] (FAIL if any Critical Parsing Errors exist) -- **Top Issues**: List top 3-5 files needing attention. -- **Action Taken**: Summary of maps generated or fixes applied. +Files Processed: +1. [file_path] -[PASS (1 attempt) | PASS (2 attempts) | FAILED] +2. ... +Escalations (Human Intervention Required): +-[file_path]: Failed auditor review 3 times. Reason: [Last Auditor Note]. +``` ## Context -$ARGUMENTS \ No newline at end of file +$ARGUMENTS +``` diff --git a/.kilocodemodes b/.kilocodemodes index de0f4d98..533d2aa3 100644 --- a/.kilocodemodes +++ b/.kilocodemodes @@ -27,22 +27,6 @@ customModes: 6. DOCUMENTATION: Create test reports in `specs//tests/reports/YYYY-MM-DD-report.md`. 7. COVERAGE: Aim for maximum coverage but prioritize CRITICAL and STANDARD tier modules. 8. RUN TESTS: Execute tests using `cd backend && .venv/bin/python3 -m pytest` or `cd frontend && npm run test`. - - slug: semantic - name: Semantic Agent - roleDefinition: |- - You are Kilo Code, a Semantic Agent responsible for maintaining the semantic integrity of the codebase. Your primary goal is to ensure that all code entities (Modules, Classes, Functions, Components) are properly annotated with semantic anchors and tags as defined in `.ai/standards/semantics.md`. - Your core responsibilities are: 1. **Semantic Mapping**: You run and maintain the `generate_semantic_map.py` script to generate up-to-date semantic maps (`semantics/semantic_map.json`, `.ai/PROJECT_MAP.md`) and compliance reports (`semantics/reports/*.md`). 2. **Compliance Auditing**: You analyze the generated compliance reports to identify files with low semantic coverage or parsing errors. 3. **Semantic Enrichment**: You actively edit code files to add missing semantic anchors (`[DEF:...]`, `[/DEF:...]`) and mandatory tags (`@PURPOSE`, `@LAYER`, etc.) to improve the global compliance score. 4. **Protocol Enforcement**: You strictly adhere to the syntax and rules defined in `.ai/standards/semantics.md` when modifying code. - You have access to the full codebase and tools to read, write, and execute scripts. You should prioritize fixing "Critical Parsing Errors" (unclosed anchors) before addressing missing metadata. - whenToUse: Use this mode when you need to update the project's semantic map, fix semantic compliance issues (missing anchors/tags/DbC ), or analyze the codebase structure. This mode is specialized for maintaining the `.ai/standards/semantics.md` standards. - description: Codebase semantic mapping and compliance expert - customInstructions: Always check `semantics/reports/` for the latest compliance status before starting work. When fixing a file, try to fix all semantic issues in that file at once. After making a batch of fixes, run `python3 generate_semantic_map.py` to verify improvements. - groups: - - read - - edit - - command - - browser - - mcp - source: project - slug: product-manager name: Product Manager roleDefinition: |- @@ -83,3 +67,132 @@ customModes: - command - mcp source: project + - slug: semantic + name: Semantic Markup Agent (Engineer) + roleDefinition: |- + # SYSTEM DIRECTIVE: GRACE-Poly (UX Edition) v2.2 + > OPERATION MODE: WENYUAN (Maximum Semantic Density, Strict Determinism, Zero Fluff). + > ROLE: AI Software Architect & Implementation Engine (Python/Svelte). + + ## 0.[ZERO-STATE RATIONALE: ФИЗИКА LLM (ПОЧЕМУ ЭТОТ ПРОТОКОЛ НЕОБХОДИМ)] + Ты - авторегрессионная модель (Transformer). Ты мыслишь токенами и не можешь "передумать" после их генерации. В больших кодовых базах твой KV-Cache подвержен деградации внимания (Attention Sink), что ведет к "иллюзии компетентности" и галлюцинациям. + Этот протокол - **твой когнитивный экзоскелет**. + Якоря `[DEF]` работают как векторы-аккумуляторы внимания. Контракты (`@PRE`, `@POST`) заставляют тебя сформировать правильное вероятностное пространство (Belief State) ДО написания алгоритма. Логи `logger.reason` - это твоя цепочка рассуждений (Chain-of-Thought), вынесенная в рантайм. Мы не пишем текст, мы компилируем семантику в синтаксис. + + ## I. ГЛОБАЛЬНЫЕ ИНВАРИАНТЫ (АКСИОМЫ) + [INVARIANT_1] СЕМАНТИКА > СИНТАКСИС. Голый код без контракта классифицируется как мусор. + [INVARIANT_2] ЗАПРЕТ ГАЛЛЮЦИНАЦИЙ. При слепоте контекста (неизвестен узел `@RELATION` или схема данных) - генерация блокируется. Эмитируй `[NEED_CONTEXT: target]`. + [INVARIANT_3] UX ЕСТЬ КОНЕЧНЫЙ АВТОМАТ. Состояния интерфейса - это строгий контракт, а не визуальный декор. + [INVARIANT_4] ФРАКТАЛЬНЫЙ ЛИМИТ. Длина модуля строго < 300 строк. При превышении - принудительная декомпозиция. + [INVARIANT_5] НЕПРИКОСНОВЕННОСТЬ ЯКОРЕЙ. Блоки `[DEF]...[/DEF]` используются как аккумуляторы внимания. Закрывающий тег обязателен. + + ## II. СИНТАКСИС И РАЗМЕТКА (SEMANTIC ANCHORS) + Формат зависит от среды исполнения: + - Python: `#[DEF:id:Type] ... # [/DEF:id:Type]` + - Svelte (HTML/Markup): ` ... ` + - Svelte (Script/JS): `// [DEF:id:Type] ... //[/DEF:id:Type]` + *Допустимые Type: Module, Class, Function, Component, Store, Block.* + + **Формат метаданных (ДО имплементации):** + `@KEY: Value` (в Python - `# @KEY`, в TS/JS - `/** @KEY */`, в HTML - ``). + + **Граф Зависимостей (GraphRAG):** + `@RELATION: [PREDICATE] ->[TARGET_ID]` + *Допустимые предикаты:* DEPENDS_ON, CALLS, INHERITS, IMPLEMENTS, DISPATCHES, BINDS_TO. + + ## III. ТОПОЛОГИЯ ФАЙЛА (СТРОГИЙ ПОРЯДОК) + 1. **HEADER (Заголовок):**[DEF:filename:Module] + @TIER: [CRITICAL | STANDARD | TRIVIAL] + @SEMANTICS: [keywords] + @PURPOSE: [Однострочная суть] + @LAYER: [Domain | UI | Infra] + @RELATION: [Зависимости] + @INVARIANT: [Бизнес-правило, которое нельзя нарушить] + 2. **BODY (Тело):** Импорты -> Реализация логики внутри вложенных `[DEF]`. + 3. **FOOTER (Подвал):** [/DEF:filename:Module] + + ## IV. КОНТРАКТЫ (DESIGN BY CONTRACT & UX) + Обязательны для TIER: CRITICAL и STANDARD. Заменяют стандартные Docstrings. + + **[CORE CONTRACTS]:** + - `@PURPOSE:` Суть функции/компонента. + - `@PRE:` Условия запуска (в коде реализуются через `if/raise` или guards, НЕ через `assert`). + - `@POST:` Гарантии на выходе. + - `@SIDE_EFFECT:` Мутации состояния, I/O, сеть. + - `@DATA_CONTRACT:` Ссылка на DTO (Input -> Model, Output -> Model). + + **[UX CONTRACTS (Svelte 5+)]:** + - `@UX_STATE: [StateName] -> [Поведение]` (Idle, Loading, Error, Success). + - `@UX_FEEDBACK:` Реакция системы (Toast, Shake, RedBorder). + - `@UX_RECOVERY:` Путь восстановления после сбоя (Retry, ClearInput). + - `@UX_REACTIVITY:` Явный биндинг. *ЗАПРЕТ НА `$:` и `export let`. ТОЛЬКО Руны: `$state`, `$derived`, `$effect`, `$props`.* + + **[TEST CONTRACTS (Для AI-Auditor)]:** + - `@TEST_CONTRACT: [Input] -> [Output]` + - `@TEST_SCENARIO: [Название] -> [Ожидание]` + - `@TEST_FIXTURE: [Название] -> file:[path] | INLINE_JSON` + - `@TEST_EDGE: [Название] ->[Сбой]` (Минимум 3: missing_field, invalid_type, external_fail). + - `@TEST_INVARIANT: [Имя] -> VERIFIED_BY: [scenario_1, ...]` + + ## V. УРОВНИ СТРОГОСТИ (TIERS) + Степень контроля задается в Header. + - **CRITICAL** (Ядро/Деньги/Безопасность): 100% покрытие тегами GRACE. Обязательны: Граф, Инварианты, Логи `logger.reason/reflect`, все `@UX` и `@TEST` теги. Использование `belief_scope` строго обязательно. + - **STANDARD** (Бизнес-логика / Типовые формы): Базовый уровень. Обязательны: `@PURPOSE`, `@UX_STATE`, `@RELATION`, базовое логирование. + - **TRIVIAL** (Утилиты / DTO / Атомы UI): Минимальный каркас. Только якоря `[DEF]...[/DEF]` и `@PURPOSE`. + + ## VI. ПРОТОКОЛ ЛОГИРОВАНИЯ (THREAD-LOCAL BELIEF STATE) + Логирование - это механизм трассировки рассуждений ИИ (CoT) и управления Attention Energy. Архитектура использует Thread-local storage (`_belief_state`), поэтому `ID` прокидывается автоматически. + + **[PYTHON CORE TOOLS]:** + Импорт: `from ...logger import logger, belief_scope, believed` + 1. **Декоратор:** `@believed("ID")` - автоматический трекинг функции. + 2. **Контекст:** `with belief_scope("ID"):` - очерчивает локальный предел мысли. НЕ возвращает context, используется просто как `with`. + 3. **Вызов логера:** Осуществляется через глобальный импортированный `logger`. Дополнительные данные передавать через `extra={...}`. + + **[СЕМАНТИЧЕСКИЕ МЕТОДЫ (MONKEY-PATCHED)]:** + *(Маркеры вроде `[REASON]` и `[ID]` подставляются автоматически форматтером. Не пиши их в тексте!)* + 1. **`logger.explore(msg, extra={...})`** (Поиск/Ветвление): Применяется при фолбэках, `except`, проверке гипотез. Эмитирует WARNING. + *Пример:* `logger.explore("Insufficient funds", extra={"balance": bal})` + 2. **`logger.reason(msg, extra={...})`** (Дедукция): Применяется при прохождении guards и выполнении шагов контракта. Эмитирует INFO. + *Пример:* `logger.reason("Initiating transfer")` + 3. **`logger.reflect(msg, extra={...})`** (Самопроверка): Применяется для сверки результата с `@POST` перед `return`. Эмитирует DEBUG. + *Пример:* `logger.reflect("Transfer committed", extra={"tx_id": tx_id})` + + *(Для Frontend/Svelte использовать ручной префикс: `console.info("[ID][REFLECT] Text", {data})`)* + + ## VII. АЛГОРИТМ ИСПОЛНЕНИЯ И САМОКОРРЕКЦИИ + **[PHASE_1: ANALYSIS]** + Оцени TIER, Layer и UX-требования. При слепоте контекста -> `yield [NEED_CONTEXT: id]`. + **[PHASE_2: SYNTHESIS]** + Сгенерируй каркас из `[DEF]`, Header и Контрактов. + **[PHASE_3: IMPLEMENTATION]** + Напиши код строго по Контракту. Для CRITICAL секций открой `with belief_scope("ID"):` и орошай путь вызовами `logger.reason()` и `logger.reflect()`. + **[PHASE_4: CLOSURE]** + Убедись, что все `[DEF]` закрыты соответствующими `[/DEF]`. + + **[EXCEPTION: DETECTIVE MODE]** + Если обнаружено нарушение контракта или ошибка: + 1. СТОП-СИГНАЛ: Выведи `[COHERENCE_CHECK_FAILED]`. + 2. ГИПОТЕЗА: Сгенерируй вызов `logger.explore("Ошибка в I/O / Состоянии / Зависимости -> Описание")`. + 3. ЗАПРОС: Запроси разрешение на изменение контракта. + whenToUse: Use this mode when you need to update the project's semantic map, fix semantic compliance issues (missing anchors/tags/DbC ), or analyze the codebase structure. This mode is specialized for maintaining the `.ai/standards/semantics.md` standards. + description: Codebase semantic mapping and compliance expert + customInstructions: "" + groups: + - read + - edit + - command + - browser + - mcp + source: project + - slug: reviewer-agent-auditor + name: Reviewer Agent (Auditor) + description: Безжалостный инспектор ОТК. + roleDefinition: '*"Ты GRACE Reviewer. Твоя единственная цель — искать нарушения протокола GRACE-Poly. Ты не пишешь код. Ты читаешь код и проверяешь Чек-лист. Если блок `[DEF]` открыт, но нет закрывающего `[/DEF]` — это FATAL ERROR. Если в `CRITICAL` модуле функция не обернута в `belief_scope` — это FATAL ERROR. Выводи только PASS или FAIL со списком строк, где найдена ошибка."*' + groups: + - read + - edit + - browser + - command + - mcp + source: project diff --git a/backend/src/api/routes/__tests__/test_assistant_api.py b/backend/src/api/routes/__tests__/test_assistant_api.py index 8eb252fe..c6c3bf3c 100644 --- a/backend/src/api/routes/__tests__/test_assistant_api.py +++ b/backend/src/api/routes/__tests__/test_assistant_api.py @@ -422,7 +422,7 @@ def test_llm_validation_with_dashboard_ref_requires_confirmation(): assert "cancel" in action_types -# [/DEF:test_llm_validation_missing_dashboard_returns_needs_clarification:Function] +# [/DEF:test_llm_validation_with_dashboard_ref_requires_confirmation:Function] # [DEF:test_list_conversations_groups_by_conversation_and_marks_archived:Function] @@ -629,6 +629,7 @@ def test_guarded_operation_confirm_roundtrip(): assert second.task_id is not None +# [/DEF:test_guarded_operation_confirm_roundtrip:Function] # [DEF:test_confirm_nonexistent_id_returns_404:Function] # @PURPOSE: Confirming a non-existent ID should raise 404. # @PRE: user tries to confirm a random/fake UUID. @@ -649,6 +650,7 @@ def test_confirm_nonexistent_id_returns_404(): assert exc.value.status_code == 404 +# [/DEF:test_confirm_nonexistent_id_returns_404:Function] # [DEF:test_migration_with_dry_run_includes_summary:Function] # @PURPOSE: Migration command with dry run flag must return the dry run summary in confirmation text. # @PRE: user specifies a migration with --dry-run flag. diff --git a/backend/src/api/routes/__tests__/test_clean_release_api.py b/backend/src/api/routes/__tests__/test_clean_release_api.py index e20211e3..9c1f4048 100644 --- a/backend/src/api/routes/__tests__/test_clean_release_api.py +++ b/backend/src/api/routes/__tests__/test_clean_release_api.py @@ -135,6 +135,8 @@ def test_get_report_success(): finally: app.dependency_overrides.clear() +# [/DEF:backend.tests.api.routes.test_clean_release_api:Module] + def test_prepare_candidate_api_success(): repo = _repo_with_seed_data() app.dependency_overrides[get_clean_release_repository] = lambda: repo diff --git a/backend/src/api/routes/__tests__/test_clean_release_source_policy.py b/backend/src/api/routes/__tests__/test_clean_release_source_policy.py index 83be236a..452ec5a0 100644 --- a/backend/src/api/routes/__tests__/test_clean_release_source_policy.py +++ b/backend/src/api/routes/__tests__/test_clean_release_source_policy.py @@ -94,4 +94,7 @@ def test_prepare_candidate_blocks_external_source(): assert data["status"] == "blocked" assert any(v["category"] == "external-source" for v in data["violations"]) finally: - app.dependency_overrides.clear() \ No newline at end of file + app.dependency_overrides.clear() + + +# [/DEF:backend.tests.api.routes.test_clean_release_source_policy:Module] \ No newline at end of file diff --git a/backend/src/api/routes/assistant.py b/backend/src/api/routes/assistant.py index a90bf4c6..28d54510 100644 --- a/backend/src/api/routes/assistant.py +++ b/backend/src/api/routes/assistant.py @@ -1173,7 +1173,7 @@ async def _async_confirmation_summary(intent: Dict[str, Any], config_manager: Co text += f"\n\n(Не удалось загрузить отчет dry-run: {e})." return f"Выполнить: {text}. Подтвердите или отмените." -# [/DEF:_async_confirmation_summary:Function] +# [/DEF:_confirmation_summary:Function] # [DEF:_clarification_text_for_intent:Function] diff --git a/backend/src/api/routes/migration.py b/backend/src/api/routes/migration.py index 7a599c59..71d06c03 100644 --- a/backend/src/api/routes/migration.py +++ b/backend/src/api/routes/migration.py @@ -1,10 +1,23 @@ # [DEF:backend.src.api.routes.migration:Module] -# @TIER: STANDARD -# @SEMANTICS: api, migration, dashboards -# @PURPOSE: API endpoints for migration operations. -# @LAYER: API -# @RELATION: DEPENDS_ON -> backend.src.dependencies -# @RELATION: DEPENDS_ON -> backend.src.models.dashboard +# @TIER: CRITICAL +# @SEMANTICS: api, migration, dashboards, sync, dry-run +# @PURPOSE: HTTP contract layer for migration orchestration, settings, dry-run, and mapping sync endpoints. +# @LAYER: Infra +# @RELATION: [DEPENDS_ON] ->[backend.src.dependencies] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.database] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.superset_client] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.migration.dry_run_orchestrator] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.mapping_service] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.dashboard] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.mapping] +# @INVARIANT: Migration endpoints never execute with invalid environment references and always return explicit HTTP errors on guard failures. +# @TEST_CONTRACT: [DashboardSelection + configured envs] -> [task_id | dry-run result | sync summary] +# @TEST_SCENARIO: [invalid_environment] -> [HTTP_400_or_404] +# @TEST_SCENARIO: [valid_execution] -> [success_payload_with_required_fields] +# @TEST_EDGE: [missing_field] ->[HTTP_400] +# @TEST_EDGE: [invalid_type] ->[validation_error] +# @TEST_EDGE: [external_fail] ->[HTTP_500] +# @TEST_INVARIANT: [EnvironmentValidationBeforeAction] -> VERIFIED_BY: [invalid_environment, valid_execution] from fastapi import APIRouter, Depends, HTTPException, Query from typing import List, Dict, Any, Optional @@ -21,11 +34,11 @@ from ...models.mapping import ResourceMapping router = APIRouter(prefix="/api", tags=["migration"]) # [DEF:get_dashboards:Function] -# @PURPOSE: Fetch all dashboards from the specified environment for the grid. -# @PRE: Environment ID must be valid. -# @POST: Returns a list of dashboard metadata. -# @PARAM: env_id (str) - The ID of the environment to fetch from. -# @RETURN: List[DashboardMetadata] +# @PURPOSE: Fetch dashboard metadata from a requested environment for migration selection UI. +# @PRE: env_id is provided and exists in configured environments. +# @POST: Returns List[DashboardMetadata] for the resolved environment; emits HTTP_404 when environment is absent. +# @SIDE_EFFECT: Reads environment configuration and performs remote Superset metadata retrieval over network. +# @DATA_CONTRACT: Input[str env_id] -> Output[List[DashboardMetadata]] @router.get("/environments/{env_id}/dashboards", response_model=List[DashboardMetadata]) async def get_dashboards( env_id: str, @@ -44,11 +57,11 @@ async def get_dashboards( # [/DEF:get_dashboards:Function] # [DEF:execute_migration:Function] -# @PURPOSE: Execute the migration of selected dashboards. -# @PRE: Selection must be valid and environments must exist. -# @POST: Starts the migration task and returns the task ID. -# @PARAM: selection (DashboardSelection) - The dashboards to migrate. -# @RETURN: Dict - {"task_id": str, "message": str} +# @PURPOSE: Validate migration selection and enqueue asynchronous migration task execution. +# @PRE: DashboardSelection payload is valid and both source/target environments exist. +# @POST: Returns {"task_id": str, "message": str} when task creation succeeds; emits HTTP_400/HTTP_500 on failure. +# @SIDE_EFFECT: Reads configuration, writes task record through task manager, and writes operational logs. +# @DATA_CONTRACT: Input[DashboardSelection] -> Output[Dict[str, str]] @router.post("/migration/execute") async def execute_migration( selection: DashboardSelection, @@ -86,9 +99,11 @@ async def execute_migration( # [DEF:dry_run_migration:Function] -# @PURPOSE: Build pre-flight diff and risk summary without applying migration. -# @PRE: Selection and environments are valid. -# @POST: Returns deterministic JSON diff and risk scoring. +# @PURPOSE: Build pre-flight migration diff and risk summary without mutating target systems. +# @PRE: DashboardSelection is valid, source and target environments exist, differ, and selected_ids is non-empty. +# @POST: Returns deterministic dry-run payload; emits HTTP_400 for guard violations and HTTP_500 for orchestrator value errors. +# @SIDE_EFFECT: Reads local mappings from DB and fetches source/target metadata via Superset API. +# @DATA_CONTRACT: Input[DashboardSelection] -> Output[Dict[str, Any]] @router.post("/migration/dry-run", response_model=Dict[str, Any]) async def dry_run_migration( selection: DashboardSelection, @@ -123,7 +138,11 @@ async def dry_run_migration( # [/DEF:dry_run_migration:Function] # [DEF:get_migration_settings:Function] -# @PURPOSE: Get current migration Cron string explicitly. +# @PURPOSE: Read and return configured migration synchronization cron expression. +# @PRE: Configuration store is available and requester has READ permission. +# @POST: Returns {"cron": str} reflecting current persisted settings value. +# @SIDE_EFFECT: Reads configuration from config manager. +# @DATA_CONTRACT: Input[None] -> Output[Dict[str, str]] @router.get("/migration/settings", response_model=Dict[str, str]) async def get_migration_settings( config_manager=Depends(get_config_manager), @@ -136,7 +155,11 @@ async def get_migration_settings( # [/DEF:get_migration_settings:Function] # [DEF:update_migration_settings:Function] -# @PURPOSE: Update migration Cron string. +# @PURPOSE: Validate and persist migration synchronization cron expression update. +# @PRE: Payload includes "cron" key and requester has WRITE permission. +# @POST: Returns {"cron": str, "status": "updated"} and persists updated cron value. +# @SIDE_EFFECT: Mutates configuration and writes persisted config through config manager. +# @DATA_CONTRACT: Input[Dict[str, str]] -> Output[Dict[str, str]] @router.put("/migration/settings", response_model=Dict[str, str]) async def update_migration_settings( payload: Dict[str, str], @@ -157,7 +180,11 @@ async def update_migration_settings( # [/DEF:update_migration_settings:Function] # [DEF:get_resource_mappings:Function] -# @PURPOSE: Fetch synchronized object mappings with search, filtering, and pagination. +# @PURPOSE: Fetch synchronized resource mappings with optional filters and pagination for migration mappings view. +# @PRE: skip>=0, 1<=limit<=500, DB session is active, requester has READ permission. +# @POST: Returns {"items": [...], "total": int} where items reflect applied filters and pagination. +# @SIDE_EFFECT: Executes database read queries against ResourceMapping table. +# @DATA_CONTRACT: Input[QueryParams] -> Output[Dict[str, Any]] @router.get("/migration/mappings-data", response_model=Dict[str, Any]) async def get_resource_mappings( skip: int = Query(0, ge=0), @@ -203,9 +230,11 @@ async def get_resource_mappings( # [/DEF:get_resource_mappings:Function] # [DEF:trigger_sync_now:Function] -# @PURPOSE: Triggers an immediate ID synchronization for all environments. -# @PRE: At least one environment must be configured. -# @POST: Environment rows are ensured in DB; sync_environment is called for each. +# @PURPOSE: Trigger immediate ID synchronization for every configured environment. +# @PRE: At least one environment is configured and requester has EXECUTE permission. +# @POST: Returns sync summary with synced/failed counts after attempting all environments. +# @SIDE_EFFECT: Upserts Environment rows, commits DB transaction, performs network sync calls, and writes logs. +# @DATA_CONTRACT: Input[None] -> Output[Dict[str, Any]] @router.post("/migration/sync-now", response_model=Dict[str, Any]) async def trigger_sync_now( config_manager=Depends(get_config_manager), diff --git a/backend/src/core/auth/repository.py b/backend/src/core/auth/repository.py index c7bba450..66830c2e 100644 --- a/backend/src/core/auth/repository.py +++ b/backend/src/core/auth/repository.py @@ -1,70 +1,79 @@ # [DEF:backend.src.core.auth.repository:Module] # -# @SEMANTICS: auth, repository, database, user, role -# @PURPOSE: Data access layer for authentication-related entities. -# @LAYER: Core -# @RELATION: DEPENDS_ON -> sqlalchemy -# @RELATION: USES -> backend.src.models.auth +# @TIER: CRITICAL +# @SEMANTICS: auth, repository, database, user, role, permission +# @PURPOSE: Data access layer for authentication and user preference entities. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[sqlalchemy.orm.Session] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.auth] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.profile] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.logger.belief_scope] +# @INVARIANT: All database read/write operations must execute via the injected SQLAlchemy session boundary. # -# @INVARIANT: All database operations must be performed within a session. - # [SECTION: IMPORTS] -from typing import Optional, List +from typing import List, Optional + from sqlalchemy.orm import Session -from ...models.auth import User, Role, Permission + +from ...models.auth import Permission, Role, User from ...models.profile import UserDashboardPreference from ..logger import belief_scope # [/SECTION] # [DEF:AuthRepository:Class] -# @PURPOSE: Encapsulates database operations for authentication. +# @PURPOSE: Encapsulates database operations for authentication-related entities. +# @RELATION: [DEPENDS_ON] ->[sqlalchemy.orm.Session] class AuthRepository: # [DEF:__init__:Function] - # @PURPOSE: Initializes the repository with a database session. - # @PARAM: db (Session) - SQLAlchemy session. + # @PURPOSE: Bind repository instance to an existing SQLAlchemy session. + # @PRE: db is an initialized sqlalchemy.orm.Session instance. + # @POST: self.db points to the provided session and is used by all repository methods. + # @SIDE_EFFECT: Stores session reference on repository instance state. + # @DATA_CONTRACT: Input[Session] -> Output[None] def __init__(self, db: Session): - self.db = db + with belief_scope("AuthRepository.__init__"): + self.db = db # [/DEF:__init__:Function] # [DEF:get_user_by_username:Function] - # @PURPOSE: Retrieves a user by their username. - # @PRE: username is a string. - # @POST: Returns User object if found, else None. - # @PARAM: username (str) - The username to search for. - # @RETURN: Optional[User] - The found user or None. + # @PURPOSE: Retrieve a user entity by unique username. + # @PRE: username is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching User entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[User]] def get_user_by_username(self, username: str) -> Optional[User]: with belief_scope("AuthRepository.get_user_by_username"): return self.db.query(User).filter(User.username == username).first() # [/DEF:get_user_by_username:Function] # [DEF:get_user_by_id:Function] - # @PURPOSE: Retrieves a user by their unique ID. - # @PRE: user_id is a valid UUID string. - # @POST: Returns User object if found, else None. - # @PARAM: user_id (str) - The user's unique identifier. - # @RETURN: Optional[User] - The found user or None. + # @PURPOSE: Retrieve a user entity by identifier. + # @PRE: user_id is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching User entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[User]] def get_user_by_id(self, user_id: str) -> Optional[User]: with belief_scope("AuthRepository.get_user_by_id"): return self.db.query(User).filter(User.id == user_id).first() # [/DEF:get_user_by_id:Function] # [DEF:get_role_by_name:Function] - # @PURPOSE: Retrieves a role by its name. - # @PRE: name is a string. - # @POST: Returns Role object if found, else None. - # @PARAM: name (str) - The role name to search for. - # @RETURN: Optional[Role] - The found role or None. + # @PURPOSE: Retrieve a role entity by role name. + # @PRE: name is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching Role entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[Role]] def get_role_by_name(self, name: str) -> Optional[Role]: with belief_scope("AuthRepository.get_role_by_name"): return self.db.query(Role).filter(Role.name == name).first() # [/DEF:get_role_by_name:Function] # [DEF:update_last_login:Function] - # @PURPOSE: Updates the last_login timestamp for a user. - # @PRE: user object is a valid User instance. - # @POST: User's last_login is updated in the database. - # @SIDE_EFFECT: Commits the transaction. - # @PARAM: user (User) - The user to update. + # @PURPOSE: Update last_login timestamp for the provided user entity. + # @PRE: user is a managed User instance and self.db is a valid open Session. + # @POST: user.last_login is set to current UTC timestamp and transaction is committed. + # @SIDE_EFFECT: Mutates user entity state and commits database transaction. + # @DATA_CONTRACT: Input[User] -> Output[None] def update_last_login(self, user: User): with belief_scope("AuthRepository.update_last_login"): from datetime import datetime @@ -74,34 +83,33 @@ class AuthRepository: # [/DEF:update_last_login:Function] # [DEF:get_role_by_id:Function] - # @PURPOSE: Retrieves a role by its unique ID. - # @PRE: role_id is a string. - # @POST: Returns Role object if found, else None. - # @PARAM: role_id (str) - The role's unique identifier. - # @RETURN: Optional[Role] - The found role or None. + # @PURPOSE: Retrieve a role entity by identifier. + # @PRE: role_id is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching Role entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[Role]] def get_role_by_id(self, role_id: str) -> Optional[Role]: with belief_scope("AuthRepository.get_role_by_id"): return self.db.query(Role).filter(Role.id == role_id).first() # [/DEF:get_role_by_id:Function] # [DEF:get_permission_by_id:Function] - # @PURPOSE: Retrieves a permission by its unique ID. - # @PRE: perm_id is a string. - # @POST: Returns Permission object if found, else None. - # @PARAM: perm_id (str) - The permission's unique identifier. - # @RETURN: Optional[Permission] - The found permission or None. + # @PURPOSE: Retrieve a permission entity by identifier. + # @PRE: perm_id is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching Permission entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[Permission]] def get_permission_by_id(self, perm_id: str) -> Optional[Permission]: with belief_scope("AuthRepository.get_permission_by_id"): return self.db.query(Permission).filter(Permission.id == perm_id).first() # [/DEF:get_permission_by_id:Function] # [DEF:get_permission_by_resource_action:Function] - # @PURPOSE: Retrieves a permission by resource and action. - # @PRE: resource and action are strings. - # @POST: Returns Permission object if found, else None. - # @PARAM: resource (str) - The resource name. - # @PARAM: action (str) - The action name. - # @RETURN: Optional[Permission] - The found permission or None. + # @PURPOSE: Retrieve a permission entity by resource and action pair. + # @PRE: resource and action are non-empty str values; self.db is a valid open Session. + # @POST: Returns matching Permission entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str, str] -> Output[Optional[Permission]] def get_permission_by_resource_action(self, resource: str, action: str) -> Optional[Permission]: with belief_scope("AuthRepository.get_permission_by_resource_action"): return self.db.query(Permission).filter( @@ -111,11 +119,11 @@ class AuthRepository: # [/DEF:get_permission_by_resource_action:Function] # [DEF:get_user_dashboard_preference:Function] - # @PURPOSE: Retrieves dashboard preference by owner user ID. - # @PRE: user_id is a string. - # @POST: Returns UserDashboardPreference if found, else None. - # @PARAM: user_id (str) - Preference owner identifier. - # @RETURN: Optional[UserDashboardPreference] - Found preference or None. + # @PURPOSE: Retrieve dashboard preference entity owned by specified user. + # @PRE: user_id is a non-empty str and self.db is a valid open Session. + # @POST: Returns matching UserDashboardPreference entity when present, otherwise None. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[str] -> Output[Optional[UserDashboardPreference]] def get_user_dashboard_preference(self, user_id: str) -> Optional[UserDashboardPreference]: with belief_scope("AuthRepository.get_user_dashboard_preference"): return ( @@ -126,11 +134,11 @@ class AuthRepository: # [/DEF:get_user_dashboard_preference:Function] # [DEF:save_user_dashboard_preference:Function] - # @PURPOSE: Persists dashboard preference entity and returns refreshed row. - # @PRE: preference is a valid UserDashboardPreference entity. - # @POST: Preference is committed and refreshed in database. - # @PARAM: preference (UserDashboardPreference) - Preference entity to persist. - # @RETURN: UserDashboardPreference - Persisted preference row. + # @PURPOSE: Persist dashboard preference entity and return refreshed persistent row. + # @PRE: preference is a valid UserDashboardPreference entity and self.db is a valid open Session. + # @POST: preference is committed to DB, refreshed from DB state, and returned. + # @SIDE_EFFECT: Performs INSERT/UPDATE commit and refresh via active DB session. + # @DATA_CONTRACT: Input[UserDashboardPreference] -> Output[UserDashboardPreference] def save_user_dashboard_preference( self, preference: UserDashboardPreference, @@ -143,14 +151,16 @@ class AuthRepository: # [/DEF:save_user_dashboard_preference:Function] # [DEF:list_permissions:Function] - # @PURPOSE: Lists all available permissions. - # @POST: Returns a list of all Permission objects. - # @RETURN: List[Permission] - List of permissions. + # @PURPOSE: List all permission entities available in storage. + # @PRE: self.db is a valid open Session. + # @POST: Returns list containing all Permission entities visible to the session. + # @SIDE_EFFECT: Executes read-only SELECT query through active DB session. + # @DATA_CONTRACT: Input[None] -> Output[List[Permission]] def list_permissions(self) -> List[Permission]: with belief_scope("AuthRepository.list_permissions"): return self.db.query(Permission).all() # [/DEF:list_permissions:Function] -# [/DEF:AuthRepository:Class] +# [/DEF:AuthRepository:Class] # [/DEF:backend.src.core.auth.repository:Module] \ No newline at end of file diff --git a/backend/src/core/config_manager.py b/backend/src/core/config_manager.py index f7a682bf..1a41f6de 100644 --- a/backend/src/core/config_manager.py +++ b/backend/src/core/config_manager.py @@ -1,17 +1,17 @@ # [DEF:ConfigManagerModule:Module] # -# @TIER: STANDARD -# @SEMANTICS: config, manager, persistence, postgresql -# @PURPOSE: Manages application configuration persisted in database with one-time migration from JSON. -# @LAYER: Core -# @RELATION: DEPENDS_ON -> ConfigModels -# @RELATION: DEPENDS_ON -> AppConfigRecord -# @RELATION: CALLS -> logger +# @TIER: CRITICAL +# @SEMANTICS: config, manager, persistence, migration, postgresql +# @PURPOSE: Manages application configuration persistence in DB with one-time migration from legacy JSON. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[ConfigModels] +# @RELATION: [DEPENDS_ON] ->[SessionLocal] +# @RELATION: [DEPENDS_ON] ->[AppConfigRecord] +# @RELATION: [CALLS] ->[logger] +# @RELATION: [CALLS] ->[configure_logger] +# @RELATION: [BINDS_TO] ->[ConfigManager] +# @INVARIANT: Configuration must always be representable by AppConfig and persisted under global record id. # -# @INVARIANT: Configuration must always be valid according to AppConfig model. -# @PUBLIC_API: ConfigManager - -# [SECTION: IMPORTS] import json import os from pathlib import Path @@ -23,19 +23,18 @@ from .config_models import AppConfig, Environment, GlobalSettings, StorageConfig from .database import SessionLocal from ..models.config import AppConfigRecord from .logger import logger, configure_logger, belief_scope -# [/SECTION] # [DEF:ConfigManager:Class] -# @TIER: STANDARD -# @PURPOSE: A class to handle application configuration persistence and management. +# @TIER: CRITICAL +# @PURPOSE: Handles application configuration load, validation, mutation, and persistence lifecycle. class ConfigManager: # [DEF:__init__:Function] - # @TIER: STANDARD - # @PURPOSE: Initializes the ConfigManager. - # @PRE: isinstance(config_path, str) and len(config_path) > 0 - # @POST: self.config is an instance of AppConfig - # @PARAM: config_path (str) - Path to legacy JSON config (used only for initial migration fallback). + # @PURPOSE: Initialize manager state from persisted or migrated configuration. + # @PRE: config_path is a non-empty string path. + # @POST: self.config is initialized as AppConfig and logger is configured. + # @SIDE_EFFECT: Reads config sources and updates logging configuration. + # @DATA_CONTRACT: Input(str config_path) -> Output(None; self.config: AppConfig) def __init__(self, config_path: str = "config.json"): with belief_scope("__init__"): assert isinstance(config_path, str) and config_path, "config_path must be a non-empty string" @@ -52,18 +51,25 @@ class ConfigManager: # [/DEF:__init__:Function] # [DEF:_default_config:Function] - # @PURPOSE: Returns default application configuration. - # @RETURN: AppConfig - Default configuration. + # @PURPOSE: Build default application configuration fallback. + # @PRE: None. + # @POST: Returns valid AppConfig with empty environments and default storage settings. + # @SIDE_EFFECT: None. + # @DATA_CONTRACT: Input(None) -> Output(AppConfig) def _default_config(self) -> AppConfig: - return AppConfig( - environments=[], - settings=GlobalSettings(storage=StorageConfig()), - ) + with belief_scope("_default_config"): + return AppConfig( + environments=[], + settings=GlobalSettings(storage=StorageConfig()), + ) # [/DEF:_default_config:Function] # [DEF:_load_from_legacy_file:Function] - # @PURPOSE: Loads legacy configuration from config.json for migration fallback. - # @RETURN: AppConfig - Loaded or default configuration. + # @PURPOSE: Load legacy JSON configuration for migration fallback path. + # @PRE: self.config_path is initialized. + # @POST: Returns AppConfig from file payload or safe default. + # @SIDE_EFFECT: Filesystem read and error logging. + # @DATA_CONTRACT: Input(Path self.config_path) -> Output(AppConfig) def _load_from_legacy_file(self) -> AppConfig: with belief_scope("_load_from_legacy_file"): if not self.config_path.exists(): @@ -81,18 +87,22 @@ class ConfigManager: # [/DEF:_load_from_legacy_file:Function] # [DEF:_get_record:Function] - # @PURPOSE: Loads config record from DB. - # @PARAM: session (Session) - DB session. - # @RETURN: Optional[AppConfigRecord] - Existing record or None. + # @PURPOSE: Resolve global configuration record from DB. + # @PRE: session is an active SQLAlchemy Session. + # @POST: Returns record when present, otherwise None. + # @SIDE_EFFECT: Database read query. + # @DATA_CONTRACT: Input(Session) -> Output(Optional[AppConfigRecord]) def _get_record(self, session: Session) -> Optional[AppConfigRecord]: - return session.query(AppConfigRecord).filter(AppConfigRecord.id == "global").first() + with belief_scope("_get_record"): + return session.query(AppConfigRecord).filter(AppConfigRecord.id == "global").first() # [/DEF:_get_record:Function] # [DEF:_load_config:Function] - # @PURPOSE: Loads the configuration from DB or performs one-time migration from JSON file. - # @PRE: DB session factory is available. - # @POST: isinstance(return, AppConfig) - # @RETURN: AppConfig - Loaded configuration. + # @PURPOSE: Load configuration from DB or perform one-time migration from legacy JSON. + # @PRE: SessionLocal factory is available and AppConfigRecord schema is accessible. + # @POST: Returns valid AppConfig and closes opened DB session. + # @SIDE_EFFECT: Database read/write, possible migration write, logging. + # @DATA_CONTRACT: Input(None) -> Output(AppConfig) def _load_config(self) -> AppConfig: with belief_scope("_load_config"): session: Session = SessionLocal() @@ -114,11 +124,11 @@ class ConfigManager: # [/DEF:_load_config:Function] # [DEF:_save_config_to_db:Function] - # @PURPOSE: Saves the provided configuration object to DB. - # @PRE: isinstance(config, AppConfig) - # @POST: Configuration saved to database. - # @PARAM: config (AppConfig) - The configuration to save. - # @PARAM: session (Optional[Session]) - Existing DB session for transactional reuse. + # @PURPOSE: Persist provided AppConfig into the global DB configuration record. + # @PRE: config is AppConfig; session is either None or an active Session. + # @POST: Global DB record payload equals config.model_dump() when commit succeeds. + # @SIDE_EFFECT: Database insert/update, commit/rollback, logging. + # @DATA_CONTRACT: Input(AppConfig, Optional[Session]) -> Output(None) def _save_config_to_db(self, config: AppConfig, session: Optional[Session] = None): with belief_scope("_save_config_to_db"): assert isinstance(config, AppConfig), "config must be an instance of AppConfig" @@ -145,27 +155,33 @@ class ConfigManager: # [/DEF:_save_config_to_db:Function] # [DEF:save:Function] - # @PURPOSE: Saves the current configuration state to DB. - # @PRE: self.config is set. - # @POST: self._save_config_to_db called. + # @PURPOSE: Persist current in-memory configuration state. + # @PRE: self.config is initialized. + # @POST: Current self.config is written to DB global record. + # @SIDE_EFFECT: Database write and logging via delegated persistence call. + # @DATA_CONTRACT: Input(None; self.config: AppConfig) -> Output(None) def save(self): with belief_scope("save"): self._save_config_to_db(self.config) # [/DEF:save:Function] # [DEF:get_config:Function] - # @PURPOSE: Returns the current configuration. - # @RETURN: AppConfig - The current configuration. + # @PURPOSE: Return current in-memory configuration snapshot. + # @PRE: self.config is initialized. + # @POST: Returns AppConfig reference stored in manager. + # @SIDE_EFFECT: None. + # @DATA_CONTRACT: Input(None) -> Output(AppConfig) def get_config(self) -> AppConfig: with belief_scope("get_config"): return self.config # [/DEF:get_config:Function] # [DEF:update_global_settings:Function] - # @PURPOSE: Updates the global settings and persists the change. - # @PRE: isinstance(settings, GlobalSettings) - # @POST: self.config.settings updated and saved. - # @PARAM: settings (GlobalSettings) - The new global settings. + # @PURPOSE: Replace global settings and persist the resulting configuration. + # @PRE: settings is GlobalSettings. + # @POST: self.config.settings equals provided settings and DB state is updated. + # @SIDE_EFFECT: Mutates self.config, DB write, logger reconfiguration, logging. + # @DATA_CONTRACT: Input(GlobalSettings) -> Output(None) def update_global_settings(self, settings: GlobalSettings): with belief_scope("update_global_settings"): logger.info("[update_global_settings][Entry] Updating settings") @@ -178,9 +194,11 @@ class ConfigManager: # [/DEF:update_global_settings:Function] # [DEF:validate_path:Function] - # @PURPOSE: Validates if a path exists and is writable. - # @PARAM: path (str) - The path to validate. - # @RETURN: tuple (bool, str) - (is_valid, message) + # @PURPOSE: Validate that path exists and is writable, creating it when absent. + # @PRE: path is a string path candidate. + # @POST: Returns (True, msg) for writable path, else (False, reason). + # @SIDE_EFFECT: Filesystem directory creation attempt and OS permission checks. + # @DATA_CONTRACT: Input(str path) -> Output(tuple[bool, str]) def validate_path(self, path: str) -> tuple[bool, str]: with belief_scope("validate_path"): p = os.path.abspath(path) @@ -197,25 +215,33 @@ class ConfigManager: # [/DEF:validate_path:Function] # [DEF:get_environments:Function] - # @PURPOSE: Returns the list of configured environments. - # @RETURN: List[Environment] - List of environments. + # @PURPOSE: Return all configured environments. + # @PRE: self.config is initialized. + # @POST: Returns list of Environment models from current configuration. + # @SIDE_EFFECT: None. + # @DATA_CONTRACT: Input(None) -> Output(List[Environment]) def get_environments(self) -> List[Environment]: with belief_scope("get_environments"): return self.config.environments # [/DEF:get_environments:Function] # [DEF:has_environments:Function] - # @PURPOSE: Checks if at least one environment is configured. - # @RETURN: bool - True if at least one environment exists. + # @PURPOSE: Check whether at least one environment exists in configuration. + # @PRE: self.config is initialized. + # @POST: Returns True iff environment list length is greater than zero. + # @SIDE_EFFECT: None. + # @DATA_CONTRACT: Input(None) -> Output(bool) def has_environments(self) -> bool: with belief_scope("has_environments"): return len(self.config.environments) > 0 # [/DEF:has_environments:Function] # [DEF:get_environment:Function] - # @PURPOSE: Returns a single environment by ID. - # @PARAM: env_id (str) - The ID of the environment to retrieve. - # @RETURN: Optional[Environment] - The environment with the given ID, or None. + # @PURPOSE: Resolve a configured environment by identifier. + # @PRE: env_id is string identifier. + # @POST: Returns matching Environment when found; otherwise None. + # @SIDE_EFFECT: None. + # @DATA_CONTRACT: Input(str env_id) -> Output(Optional[Environment]) def get_environment(self, env_id: str) -> Optional[Environment]: with belief_scope("get_environment"): for env in self.config.environments: @@ -225,8 +251,11 @@ class ConfigManager: # [/DEF:get_environment:Function] # [DEF:add_environment:Function] - # @PURPOSE: Adds a new environment to the configuration. - # @PARAM: env (Environment) - The environment to add. + # @PURPOSE: Upsert environment by id into configuration and persist. + # @PRE: env is Environment. + # @POST: Configuration contains provided env id with new payload persisted. + # @SIDE_EFFECT: Mutates environment list, DB write, logging. + # @DATA_CONTRACT: Input(Environment) -> Output(None) def add_environment(self, env: Environment): with belief_scope("add_environment"): logger.info(f"[add_environment][Entry] Adding environment {env.id}") @@ -239,10 +268,11 @@ class ConfigManager: # [/DEF:add_environment:Function] # [DEF:update_environment:Function] - # @PURPOSE: Updates an existing environment. - # @PARAM: env_id (str) - The ID of the environment to update. - # @PARAM: updated_env (Environment) - The updated environment data. - # @RETURN: bool - True if updated, False otherwise. + # @PURPOSE: Update existing environment by id and preserve masked password placeholder behavior. + # @PRE: env_id is non-empty string and updated_env is Environment. + # @POST: Returns True and persists update when target exists; else returns False. + # @SIDE_EFFECT: May mutate environment list, DB write, logging. + # @DATA_CONTRACT: Input(str env_id, Environment updated_env) -> Output(bool) def update_environment(self, env_id: str, updated_env: Environment) -> bool: with belief_scope("update_environment"): logger.info(f"[update_environment][Entry] Updating {env_id}") @@ -264,8 +294,11 @@ class ConfigManager: # [/DEF:update_environment:Function] # [DEF:delete_environment:Function] - # @PURPOSE: Deletes an environment by ID. - # @PARAM: env_id (str) - The ID of the environment to delete. + # @PURPOSE: Delete environment by id and persist when deletion occurs. + # @PRE: env_id is non-empty string. + # @POST: Environment is removed when present; otherwise configuration is unchanged. + # @SIDE_EFFECT: May mutate environment list, conditional DB write, logging. + # @DATA_CONTRACT: Input(str env_id) -> Output(None) def delete_environment(self, env_id: str): with belief_scope("delete_environment"): logger.info(f"[delete_environment][Entry] Deleting {env_id}") diff --git a/backend/src/core/logger/__tests__/test_logger.py b/backend/src/core/logger/__tests__/test_logger.py index 6b732a77..7877da4d 100644 --- a/backend/src/core/logger/__tests__/test_logger.py +++ b/backend/src/core/logger/__tests__/test_logger.py @@ -225,7 +225,7 @@ def test_enable_belief_state_flag(caplog): assert not any("[DisabledFunction][Exit]" in msg for msg in log_messages), "Exit should not be logged when disabled" # Coherence:OK should still be logged (internal tracking) assert any("[DisabledFunction][COHERENCE:OK]" in msg for msg in log_messages), "Coherence should still be logged" - +# [/DEF:test_enable_belief_state_flag:Function] # [DEF:test_belief_scope_missing_anchor:Function] diff --git a/backend/src/core/migration/risk_assessor.py b/backend/src/core/migration/risk_assessor.py index d296d690..43bb8114 100644 --- a/backend/src/core/migration/risk_assessor.py +++ b/backend/src/core/migration/risk_assessor.py @@ -1,118 +1,170 @@ # [DEF:backend.src.core.migration.risk_assessor:Module] -# @TIER: STANDARD -# @SEMANTICS: migration, dry_run, risk, scoring -# @PURPOSE: Risk evaluation helpers for migration pre-flight reporting. -# @LAYER: Core -# @RELATION: USED_BY -> backend.src.core.migration.dry_run_orchestrator +# @TIER: CRITICAL +# @SEMANTICS: migration, dry_run, risk, scoring, preflight +# @PURPOSE: Compute deterministic migration risk items and aggregate score for dry-run reporting. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[backend.src.core.superset_client.SupersetClient] +# @RELATION: [DISPATCHES] ->[backend.src.core.migration.dry_run_orchestrator.MigrationDryRunService.run] +# @INVARIANT: Risk scoring must remain bounded to [0,100] and preserve severity-to-weight mapping. +# @TEST_CONTRACT: [source_objects,target_objects,diff,target_client] -> [List[RiskItem]] +# @TEST_SCENARIO: [overwrite_update_objects] -> [medium overwrite_existing risk is emitted for each update diff item] +# @TEST_SCENARIO: [missing_datasource_dataset] -> [high missing_datasource risk is emitted] +# @TEST_SCENARIO: [owner_mismatch_dashboard] -> [low owner_mismatch risk is emitted] +# @TEST_EDGE: [missing_field] -> [object without uuid is ignored by indexer] +# @TEST_EDGE: [invalid_type] -> [non-list owners input normalizes to empty identifiers] +# @TEST_EDGE: [external_fail] -> [target_client get_databases exception propagates to caller] +# @TEST_INVARIANT: [score_upper_bound_100] -> VERIFIED_BY: [severity_weight_aggregation] +# @UX_STATE: [Idle] -> [N/A backend domain module] +# @UX_FEEDBACK: [N/A] -> [No direct UI side effects in this module] +# @UX_RECOVERY: [N/A] -> [Caller-level retry/recovery] +# @UX_REACTIVITY: [N/A] -> [Backend synchronous function contracts] from typing import Any, Dict, List +from ..logger import logger, belief_scope from ..superset_client import SupersetClient # [DEF:index_by_uuid:Function] # @PURPOSE: Build UUID-index from normalized objects. +# @PRE: Input list items are dict-like payloads potentially containing "uuid". +# @POST: Returns mapping keyed by string uuid; only truthy uuid values are included. +# @SIDE_EFFECT: Emits reasoning/reflective logs only. +# @DATA_CONTRACT: List[Dict[str, Any]] -> Dict[str, Dict[str, Any]] def index_by_uuid(objects: List[Dict[str, Any]]) -> Dict[str, Dict[str, Any]]: - indexed: Dict[str, Dict[str, Any]] = {} - for obj in objects: - uuid = obj.get("uuid") - if uuid: - indexed[str(uuid)] = obj - return indexed + with belief_scope("risk_assessor.index_by_uuid"): + logger.reason("Building UUID index", extra={"objects_count": len(objects)}) + indexed: Dict[str, Dict[str, Any]] = {} + for obj in objects: + uuid = obj.get("uuid") + if uuid: + indexed[str(uuid)] = obj + logger.reflect("UUID index built", extra={"indexed_count": len(indexed)}) + return indexed # [/DEF:index_by_uuid:Function] # [DEF:extract_owner_identifiers:Function] # @PURPOSE: Normalize owner payloads for stable comparison. +# @PRE: Owners may be list payload, scalar values, or None. +# @POST: Returns sorted unique owner identifiers as strings. +# @SIDE_EFFECT: Emits reasoning/reflective logs only. +# @DATA_CONTRACT: Any -> List[str] def extract_owner_identifiers(owners: Any) -> List[str]: - if not isinstance(owners, list): - return [] - ids: List[str] = [] - for owner in owners: - if isinstance(owner, dict): - if owner.get("username"): - ids.append(str(owner["username"])) - elif owner.get("id") is not None: - ids.append(str(owner["id"])) - elif owner is not None: - ids.append(str(owner)) - return sorted(set(ids)) + with belief_scope("risk_assessor.extract_owner_identifiers"): + logger.reason("Normalizing owner identifiers") + if not isinstance(owners, list): + logger.reflect("Owners payload is not list; returning empty identifiers") + return [] + ids: List[str] = [] + for owner in owners: + if isinstance(owner, dict): + if owner.get("username"): + ids.append(str(owner["username"])) + elif owner.get("id") is not None: + ids.append(str(owner["id"])) + elif owner is not None: + ids.append(str(owner)) + normalized_ids = sorted(set(ids)) + logger.reflect("Owner identifiers normalized", extra={"owner_count": len(normalized_ids)}) + return normalized_ids # [/DEF:extract_owner_identifiers:Function] # [DEF:build_risks:Function] # @PURPOSE: Build risk list from computed diffs and target catalog state. +# @PRE: source_objects/target_objects/diff contain dashboards/charts/datasets keys with expected list structures. +# @PRE: target_client is authenticated/usable for database list retrieval. +# @POST: Returns list of deterministic risk items derived from overwrite, missing datasource, reference, and owner mismatch checks. +# @SIDE_EFFECT: Calls target Superset API for databases metadata and emits logs. +# @DATA_CONTRACT: ( +# @DATA_CONTRACT: Dict[str, List[Dict[str, Any]]], +# @DATA_CONTRACT: Dict[str, List[Dict[str, Any]]], +# @DATA_CONTRACT: Dict[str, Dict[str, List[Dict[str, Any]]]], +# @DATA_CONTRACT: SupersetClient +# @DATA_CONTRACT: ) -> List[Dict[str, Any]] def build_risks( source_objects: Dict[str, List[Dict[str, Any]]], target_objects: Dict[str, List[Dict[str, Any]]], diff: Dict[str, Dict[str, List[Dict[str, Any]]]], target_client: SupersetClient, ) -> List[Dict[str, Any]]: - risks: List[Dict[str, Any]] = [] - for object_type in ("dashboards", "charts", "datasets"): - for item in diff[object_type]["update"]: - risks.append({ - "code": "overwrite_existing", - "severity": "medium", - "object_type": object_type[:-1], - "object_uuid": item["uuid"], - "message": f"Object will be updated in target: {item.get('title') or item['uuid']}", - }) + with belief_scope("risk_assessor.build_risks"): + logger.reason("Building migration risks from diff payload") + risks: List[Dict[str, Any]] = [] + for object_type in ("dashboards", "charts", "datasets"): + for item in diff[object_type]["update"]: + risks.append({ + "code": "overwrite_existing", + "severity": "medium", + "object_type": object_type[:-1], + "object_uuid": item["uuid"], + "message": f"Object will be updated in target: {item.get('title') or item['uuid']}", + }) - target_dataset_uuids = set(index_by_uuid(target_objects["datasets"]).keys()) - _, target_databases = target_client.get_databases(query={"columns": ["uuid"]}) - target_database_uuids = {str(item.get("uuid")) for item in target_databases if item.get("uuid")} + target_dataset_uuids = set(index_by_uuid(target_objects["datasets"]).keys()) + _, target_databases = target_client.get_databases(query={"columns": ["uuid"]}) + target_database_uuids = {str(item.get("uuid")) for item in target_databases if item.get("uuid")} - for dataset in source_objects["datasets"]: - db_uuid = dataset.get("database_uuid") - if db_uuid and str(db_uuid) not in target_database_uuids: - risks.append({ - "code": "missing_datasource", - "severity": "high", - "object_type": "dataset", - "object_uuid": dataset.get("uuid"), - "message": f"Target datasource is missing for dataset {dataset.get('title') or dataset.get('uuid')}", - }) + for dataset in source_objects["datasets"]: + db_uuid = dataset.get("database_uuid") + if db_uuid and str(db_uuid) not in target_database_uuids: + risks.append({ + "code": "missing_datasource", + "severity": "high", + "object_type": "dataset", + "object_uuid": dataset.get("uuid"), + "message": f"Target datasource is missing for dataset {dataset.get('title') or dataset.get('uuid')}", + }) - for chart in source_objects["charts"]: - ds_uuid = chart.get("dataset_uuid") - if ds_uuid and str(ds_uuid) not in target_dataset_uuids: - risks.append({ - "code": "breaking_reference", - "severity": "high", - "object_type": "chart", - "object_uuid": chart.get("uuid"), - "message": f"Chart references dataset not found on target: {ds_uuid}", - }) + for chart in source_objects["charts"]: + ds_uuid = chart.get("dataset_uuid") + if ds_uuid and str(ds_uuid) not in target_dataset_uuids: + risks.append({ + "code": "breaking_reference", + "severity": "high", + "object_type": "chart", + "object_uuid": chart.get("uuid"), + "message": f"Chart references dataset not found on target: {ds_uuid}", + }) - source_dash = index_by_uuid(source_objects["dashboards"]) - target_dash = index_by_uuid(target_objects["dashboards"]) - for item in diff["dashboards"]["update"]: - source_obj = source_dash.get(item["uuid"]) - target_obj = target_dash.get(item["uuid"]) - if not source_obj or not target_obj: - continue - source_owners = extract_owner_identifiers(source_obj.get("owners")) - target_owners = extract_owner_identifiers(target_obj.get("owners")) - if source_owners and target_owners and source_owners != target_owners: - risks.append({ - "code": "owner_mismatch", - "severity": "low", - "object_type": "dashboard", - "object_uuid": item["uuid"], - "message": f"Owner mismatch for dashboard {item.get('title') or item['uuid']}", - }) - return risks + source_dash = index_by_uuid(source_objects["dashboards"]) + target_dash = index_by_uuid(target_objects["dashboards"]) + for item in diff["dashboards"]["update"]: + source_obj = source_dash.get(item["uuid"]) + target_obj = target_dash.get(item["uuid"]) + if not source_obj or not target_obj: + continue + source_owners = extract_owner_identifiers(source_obj.get("owners")) + target_owners = extract_owner_identifiers(target_obj.get("owners")) + if source_owners and target_owners and source_owners != target_owners: + risks.append({ + "code": "owner_mismatch", + "severity": "low", + "object_type": "dashboard", + "object_uuid": item["uuid"], + "message": f"Owner mismatch for dashboard {item.get('title') or item['uuid']}", + }) + logger.reflect("Risk list assembled", extra={"risk_count": len(risks)}) + return risks # [/DEF:build_risks:Function] # [DEF:score_risks:Function] # @PURPOSE: Aggregate risk list into score and level. +# @PRE: risk_items contains optional severity fields expected in {high,medium,low} or defaults to low weight. +# @POST: Returns dict with score in [0,100], derived level, and original items. +# @SIDE_EFFECT: Emits reasoning/reflective logs only. +# @DATA_CONTRACT: List[Dict[str, Any]] -> Dict[str, Any] def score_risks(risk_items: List[Dict[str, Any]]) -> Dict[str, Any]: - weights = {"high": 25, "medium": 10, "low": 5} - score = min(100, sum(weights.get(item.get("severity", "low"), 5) for item in risk_items)) - level = "low" if score < 25 else "medium" if score < 60 else "high" - return {"score": score, "level": level, "items": risk_items} + with belief_scope("risk_assessor.score_risks"): + logger.reason("Scoring risk items", extra={"risk_items_count": len(risk_items)}) + weights = {"high": 25, "medium": 10, "low": 5} + score = min(100, sum(weights.get(item.get("severity", "low"), 5) for item in risk_items)) + level = "low" if score < 25 else "medium" if score < 60 else "high" + result = {"score": score, "level": level, "items": risk_items} + logger.reflect("Risk score computed", extra={"score": score, "level": level}) + return result # [/DEF:score_risks:Function] diff --git a/backend/src/core/migration_engine.py b/backend/src/core/migration_engine.py index d954aa0e..11681676 100644 --- a/backend/src/core/migration_engine.py +++ b/backend/src/core/migration_engine.py @@ -1,11 +1,15 @@ # [DEF:backend.src.core.migration_engine:Module] # -# @SEMANTICS: migration, engine, zip, yaml, transformation -# @PURPOSE: Handles the interception and transformation of Superset asset ZIP archives. -# @LAYER: Core -# @RELATION: DEPENDS_ON -> PyYAML +# @TIER: CRITICAL +# @SEMANTICS: migration, engine, zip, yaml, transformation, cross-filter, id-mapping +# @PURPOSE: Transforms Superset export ZIP archives while preserving archive integrity and patching mapped identifiers. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[src.core.logger] +# @RELATION: [DEPENDS_ON] ->[src.core.mapping_service.IdMappingService] +# @RELATION: [DEPENDS_ON] ->[src.models.mapping.ResourceType] +# @RELATION: [DEPENDS_ON] ->[yaml] # -# @INVARIANT: ZIP structure must be preserved after transformation. +# @INVARIANT: ZIP structure and non-targeted metadata must remain valid after transformation. # [SECTION: IMPORTS] import zipfile @@ -26,10 +30,15 @@ from src.models.mapping import ResourceType class MigrationEngine: # [DEF:__init__:Function] - # @PURPOSE: Initializes the migration engine with optional ID mapping service. + # @PURPOSE: Initializes migration orchestration dependencies for ZIP/YAML metadata transformations. + # @PRE: mapping_service is None or implements batch remote ID lookup for ResourceType.CHART. + # @POST: self.mapping_service is assigned and available for optional cross-filter patching flows. + # @SIDE_EFFECT: Mutates in-memory engine state by storing dependency reference. + # @DATA_CONTRACT: Input[Optional[IdMappingService]] -> Output[MigrationEngine] # @PARAM: mapping_service (Optional[IdMappingService]) - Used for resolving target environment integer IDs. def __init__(self, mapping_service: Optional[IdMappingService] = None): - self.mapping_service = mapping_service + with belief_scope("MigrationEngine.__init__"): + self.mapping_service = mapping_service # [/DEF:__init__:Function] # [DEF:transform_zip:Function] @@ -40,9 +49,11 @@ class MigrationEngine: # @PARAM: strip_databases (bool) - Whether to remove the databases directory from the archive. # @PARAM: target_env_id (Optional[str]) - Used if fix_cross_filters is True to know which environment map to use. # @PARAM: fix_cross_filters (bool) - Whether to patch dashboard json_metadata. - # @PRE: zip_path must point to a valid Superset export archive. - # @POST: Transformed archive is saved to output_path. - # @RETURN: bool - True if successful. + # @PRE: zip_path points to a readable ZIP; output_path parent is writable; db_mapping keys/values are UUID strings. + # @POST: Returns True only when extraction, transformation, and packaging complete without exception. + # @SIDE_EFFECT: Reads/writes filesystem archives, creates temporary directory, emits structured logs. + # @DATA_CONTRACT: Input[(str zip_path, str output_path, Dict[str,str] db_mapping, bool strip_databases, Optional[str] target_env_id, bool fix_cross_filters)] -> Output[bool] + # @RETURN: bool - True if successful. def transform_zip(self, zip_path: str, output_path: str, db_mapping: Dict[str, str], strip_databases: bool = True, target_env_id: Optional[str] = None, fix_cross_filters: bool = False) -> bool: """ Transform a Superset export ZIP by replacing database UUIDs and optionally fixing cross-filters. @@ -105,48 +116,60 @@ class MigrationEngine: # @PURPOSE: Replaces database_uuid in a single YAML file. # @PARAM: file_path (Path) - Path to the YAML file. # @PARAM: db_mapping (Dict[str, str]) - UUID mapping dictionary. - # @PRE: file_path must exist and be readable. - # @POST: File is modified in-place if source UUID matches mapping. + # @PRE: file_path exists, is readable YAML, and db_mapping contains source->target UUID pairs. + # @POST: database_uuid is replaced in-place only when source UUID is present in db_mapping. + # @SIDE_EFFECT: Reads and conditionally rewrites YAML file on disk. + # @DATA_CONTRACT: Input[(Path file_path, Dict[str,str] db_mapping)] -> Output[None] def _transform_yaml(self, file_path: Path, db_mapping: Dict[str, str]): - with open(file_path, 'r') as f: - data = yaml.safe_load(f) + with belief_scope("MigrationEngine._transform_yaml"): + with open(file_path, 'r') as f: + data = yaml.safe_load(f) - if not data: - return + if not data: + return - # Superset dataset YAML structure: - # database_uuid: ... - source_uuid = data.get('database_uuid') - if source_uuid in db_mapping: - data['database_uuid'] = db_mapping[source_uuid] - with open(file_path, 'w') as f: - yaml.dump(data, f) + # Superset dataset YAML structure: + # database_uuid: ... + source_uuid = data.get('database_uuid') + if source_uuid in db_mapping: + data['database_uuid'] = db_mapping[source_uuid] + with open(file_path, 'w') as f: + yaml.dump(data, f) # [/DEF:_transform_yaml:Function] # [DEF:_extract_chart_uuids_from_archive:Function] - # @PURPOSE: Scans the unpacked ZIP to map local exported integer IDs back to their UUIDs. - # @PARAM: temp_dir (Path) - Root dir of unpacked archive + # @PURPOSE: Scans extracted chart YAML files and builds a source chart ID to UUID lookup map. + # @PRE: temp_dir exists and points to extracted archive root with optional chart YAML resources. + # @POST: Returns a best-effort Dict[int, str] containing only parseable chart id/uuid pairs. + # @SIDE_EFFECT: Reads chart YAML files from filesystem; suppresses per-file parsing failures. + # @DATA_CONTRACT: Input[Path] -> Output[Dict[int,str]] + # @PARAM: temp_dir (Path) - Root dir of unpacked archive. # @RETURN: Dict[int, str] - Mapping of source Integer ID to UUID. def _extract_chart_uuids_from_archive(self, temp_dir: Path) -> Dict[int, str]: - # Implementation Note: This is a placeholder for the logic that extracts - # actual Source IDs. In a real scenario, this involves parsing chart YAMLs - # or manifesting the export metadata structure where source IDs are stored. - # For simplicity in US1 MVP, we assume it's read from chart files if present. - mapping = {} - chart_files = list(temp_dir.glob("**/charts/**/*.yaml")) + list(temp_dir.glob("**/charts/*.yaml")) - for cf in set(chart_files): - try: - with open(cf, 'r') as f: - cdata = yaml.safe_load(f) - if cdata and 'id' in cdata and 'uuid' in cdata: - mapping[cdata['id']] = cdata['uuid'] - except Exception: - pass - return mapping + with belief_scope("MigrationEngine._extract_chart_uuids_from_archive"): + # Implementation Note: This is a placeholder for the logic that extracts + # actual Source IDs. In a real scenario, this involves parsing chart YAMLs + # or manifesting the export metadata structure where source IDs are stored. + # For simplicity in US1 MVP, we assume it's read from chart files if present. + mapping = {} + chart_files = list(temp_dir.glob("**/charts/**/*.yaml")) + list(temp_dir.glob("**/charts/*.yaml")) + for cf in set(chart_files): + try: + with open(cf, 'r') as f: + cdata = yaml.safe_load(f) + if cdata and 'id' in cdata and 'uuid' in cdata: + mapping[cdata['id']] = cdata['uuid'] + except Exception: + pass + return mapping # [/DEF:_extract_chart_uuids_from_archive:Function] # [DEF:_patch_dashboard_metadata:Function] - # @PURPOSE: Replaces integer IDs in json_metadata. + # @PURPOSE: Rewrites dashboard json_metadata chart/dataset integer identifiers using target environment mappings. + # @PRE: file_path points to dashboard YAML with json_metadata; target_env_id is non-empty; source_map contains source id->uuid. + # @POST: json_metadata is re-serialized with mapped integer IDs when remote mappings are available; otherwise file remains unchanged. + # @SIDE_EFFECT: Reads/writes YAML file, performs mapping lookup via mapping_service, emits logs for recoverable/terminal failures. + # @DATA_CONTRACT: Input[(Path file_path, str target_env_id, Dict[int,str] source_map)] -> Output[None] # @PARAM: file_path (Path) # @PARAM: target_env_id (str) # @PARAM: source_map (Dict[int, str]) diff --git a/backend/src/models/config.py b/backend/src/models/config.py index c6c8dfc1..a73bf5f4 100644 --- a/backend/src/models/config.py +++ b/backend/src/models/config.py @@ -1,10 +1,12 @@ # [DEF:backend.src.models.config:Module] # -# @TIER: STANDARD -# @SEMANTICS: database, config, settings, sqlalchemy -# @PURPOSE: Defines database schema for persisted application configuration. -# @LAYER: Domain -# @RELATION: DEPENDS_ON -> sqlalchemy +# @TIER: CRITICAL +# @SEMANTICS: database, config, settings, sqlalchemy, notification +# @PURPOSE: Defines SQLAlchemy persistence models for application and notification configuration records. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[sqlalchemy] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.mapping:Base] +# @INVARIANT: Configuration payload and notification credentials must remain persisted as non-null JSON documents. from sqlalchemy import Column, String, DateTime, JSON, Boolean from sqlalchemy.sql import func @@ -13,7 +15,11 @@ from .mapping import Base # [DEF:AppConfigRecord:Class] -# @PURPOSE: Stores the single source of truth for application configuration. +# @PURPOSE: Stores persisted application configuration as a single authoritative record model. +# @PRE: SQLAlchemy declarative Base is initialized and table metadata registration is active. +# @POST: ORM table 'app_configurations' exposes id, payload, and updated_at fields with declared nullability/default semantics. +# @SIDE_EFFECT: Registers ORM mapping metadata during module import. +# @DATA_CONTRACT: Input -> persistence row {id:str, payload:json, updated_at:datetime}; Output -> AppConfigRecord ORM entity. class AppConfigRecord(Base): __tablename__ = "app_configurations" @@ -25,7 +31,11 @@ class AppConfigRecord(Base): # [/DEF:AppConfigRecord:Class] # [DEF:NotificationConfig:Class] -# @PURPOSE: Global settings for external notification providers. +# @PURPOSE: Stores persisted provider-level notification configuration and encrypted credentials metadata. +# @PRE: SQLAlchemy declarative Base is initialized and uuid generation is available at instance creation time. +# @POST: ORM table 'notification_configs' exposes id, type, name, credentials, is_active, created_at, updated_at fields with declared constraints/defaults. +# @SIDE_EFFECT: Registers ORM mapping metadata during module import; may generate UUID values for new entity instances. +# @DATA_CONTRACT: Input -> persistence row {id:str, type:str, name:str, credentials:json, is_active:bool, created_at:datetime, updated_at:datetime}; Output -> NotificationConfig ORM entity. class NotificationConfig(Base): __tablename__ = "notification_configs" diff --git a/backend/src/models/mapping.py b/backend/src/models/mapping.py index cad3d04d..edb4de49 100644 --- a/backend/src/models/mapping.py +++ b/backend/src/models/mapping.py @@ -80,6 +80,8 @@ class MigrationJob(Base): status = Column(SQLEnum(MigrationStatus), default=MigrationStatus.PENDING) replace_db = Column(Boolean, default=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) +# [/DEF:MigrationJob:Class] + # [DEF:ResourceMapping:Class] # @TIER: STANDARD # @PURPOSE: Maps a universal UUID for a resource to its actual ID on a specific environment. diff --git a/backend/src/scripts/clean_release_tui.py b/backend/src/scripts/clean_release_tui.py index 66e8e08b..da625ab4 100644 --- a/backend/src/scripts/clean_release_tui.py +++ b/backend/src/scripts/clean_release_tui.py @@ -462,6 +462,7 @@ class CleanReleaseTUI: self.status = CheckFinalStatus.FAILED self.refresh_overview() self.refresh_screen() + # [/DEF:run_checks:Function] def build_manifest(self): try: diff --git a/backend/src/scripts/seed_superset_load_test.py b/backend/src/scripts/seed_superset_load_test.py index fb03b023..7bcfadab 100644 --- a/backend/src/scripts/seed_superset_load_test.py +++ b/backend/src/scripts/seed_superset_load_test.py @@ -291,6 +291,9 @@ def main() -> None: logger.info(f"[COHERENCE:OK] Result summary: {json.dumps(result, ensure_ascii=True)}") +# [/DEF:main:Function] + + if __name__ == "__main__": main() diff --git a/backend/src/services/__tests__/test_health_service.py b/backend/src/services/__tests__/test_health_service.py index b09eb58e..979ebd47 100644 --- a/backend/src/services/__tests__/test_health_service.py +++ b/backend/src/services/__tests__/test_health_service.py @@ -82,4 +82,6 @@ async def test_get_health_summary_empty(): summary = await service.get_health_summary(environment_id="env_none") assert summary.pass_count == 0 - assert len(summary.items) == 0 \ No newline at end of file + assert len(summary.items) == 0 + +# [/DEF:test_health_service:Module] \ No newline at end of file diff --git a/backend/src/services/auth_service.py b/backend/src/services/auth_service.py index 67340134..6a3c95da 100644 --- a/backend/src/services/auth_service.py +++ b/backend/src/services/auth_service.py @@ -1,13 +1,16 @@ # [DEF:backend.src.services.auth_service:Module] # -# @SEMANTICS: auth, service, business-logic, login, jwt -# @PURPOSE: Orchestrates authentication business logic. -# @LAYER: Service -# @RELATION: USES -> backend.src.core.auth.repository.AuthRepository -# @RELATION: USES -> backend.src.core.auth.security -# @RELATION: USES -> backend.src.core.auth.jwt +# @TIER: CRITICAL +# @SEMANTICS: auth, service, business-logic, login, jwt, adfs, jit-provisioning +# @PURPOSE: Orchestrates credential authentication and ADFS JIT user provisioning. +# @LAYER: Domain +# @RELATION: [DEPENDS_ON] ->[backend.src.core.auth.repository.AuthRepository] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.auth.security.verify_password] +# @RELATION: [DEPENDS_ON] ->[backend.src.core.auth.jwt.create_access_token] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.auth.User] +# @RELATION: [DEPENDS_ON] ->[backend.src.models.auth.Role] # -# @INVARIANT: Authentication must verify both credentials and account status. +# @INVARIANT: Authentication succeeds only for active users with valid credentials; issued sessions encode subject and scopes from assigned roles. # [SECTION: IMPORTS] from typing import Dict, Any @@ -23,20 +26,25 @@ from ..core.logger import belief_scope # @PURPOSE: Provides high-level authentication services. class AuthService: # [DEF:__init__:Function] - # @PURPOSE: Initializes the service with a database session. - # @PARAM: db (Session) - SQLAlchemy session. + # @PURPOSE: Initializes the authentication service with repository access over an active DB session. + # @PRE: db is a valid SQLAlchemy Session instance bound to the auth persistence context. + # @POST: self.repo is initialized and ready for auth user/role CRUD operations. + # @SIDE_EFFECT: Allocates AuthRepository and binds it to the provided Session. + # @DATA_CONTRACT: Input(Session) -> Model(AuthRepository) + # @PARAM: db (Session) - SQLAlchemy session. def __init__(self, db: Session): self.repo = AuthRepository(db) # [/DEF:__init__:Function] # [DEF:authenticate_user:Function] - # @PURPOSE: Authenticates a user with username and password. - # @PRE: username and password are provided. - # @POST: Returns User object if authentication succeeds, else None. - # @SIDE_EFFECT: Updates last_login timestamp on success. - # @PARAM: username (str) - The username. - # @PARAM: password (str) - The plain password. - # @RETURN: Optional[User] - The authenticated user or None. + # @PURPOSE: Validates credentials and account state for local username/password authentication. + # @PRE: username and password are non-empty credential inputs. + # @POST: Returns User only when user exists, is active, and password hash verification succeeds; otherwise returns None. + # @SIDE_EFFECT: Persists last_login update for successful authentications via repository. + # @DATA_CONTRACT: Input(str username, str password) -> Output(User | None) + # @PARAM: username (str) - The username. + # @PARAM: password (str) - The plain password. + # @RETURN: Optional[User] - The authenticated user or None. def authenticate_user(self, username: str, password: str): with belief_scope("AuthService.authenticate_user"): user = self.repo.get_user_by_username(username) @@ -54,11 +62,13 @@ class AuthService: # [/DEF:authenticate_user:Function] # [DEF:create_session:Function] - # @PURPOSE: Creates a JWT session for an authenticated user. - # @PRE: user is a valid User object. - # @POST: Returns a dictionary with access_token and token_type. - # @PARAM: user (User) - The authenticated user. - # @RETURN: Dict[str, str] - Session data. + # @PURPOSE: Issues an access token payload for an already authenticated user. + # @PRE: user is a valid User entity containing username and iterable roles with role.name values. + # @POST: Returns session dict with non-empty access_token and token_type='bearer'. + # @SIDE_EFFECT: Generates signed JWT via auth JWT provider. + # @DATA_CONTRACT: Input(User) -> Output(Dict[str, str]{access_token, token_type}) + # @PARAM: user (User) - The authenticated user. + # @RETURN: Dict[str, str] - Session data. def create_session(self, user) -> Dict[str, str]: with belief_scope("AuthService.create_session"): # Collect role names for scopes @@ -77,11 +87,13 @@ class AuthService: # [/DEF:create_session:Function] # [DEF:provision_adfs_user:Function] - # @PURPOSE: Just-In-Time (JIT) provisioning for ADFS users based on group mappings. - # @PRE: user_info contains 'upn' (username), 'email', and 'groups'. - # @POST: User is created/updated and assigned roles based on groups. - # @PARAM: user_info (Dict[str, Any]) - Claims from ADFS token. - # @RETURN: User - The provisioned user. + # @PURPOSE: Performs ADFS Just-In-Time provisioning and role synchronization from AD group mappings. + # @PRE: user_info contains identity claims where at least one of 'upn' or 'email' is present; 'groups' may be absent. + # @POST: Returns persisted user entity with roles synchronized to mapped AD groups and refreshed state. + # @SIDE_EFFECT: May insert new User, mutate user.roles, commit transaction, and refresh ORM state. + # @DATA_CONTRACT: Input(Dict[str, Any]{upn|email, email, groups[]}) -> Output(User persisted) + # @PARAM: user_info (Dict[str, Any]) - Claims from ADFS token. + # @RETURN: User - The provisioned user. def provision_adfs_user(self, user_info: Dict[str, Any]) -> User: with belief_scope("AuthService.provision_adfs_user"): username = user_info.get("upn") or user_info.get("email") diff --git a/backend/src/services/clean_release/__tests__/test_audit_service.py b/backend/src/services/clean_release/__tests__/test_audit_service.py index 0c7c8645..68b63e4f 100644 --- a/backend/src/services/clean_release/__tests__/test_audit_service.py +++ b/backend/src/services/clean_release/__tests__/test_audit_service.py @@ -22,3 +22,6 @@ def test_audit_check_run(mock_logger): def test_audit_report(mock_logger): audit_report("rep-1", "cand-1") mock_logger.info.assert_called_with("[EXPLORE] clean-release report_id=rep-1 candidate=cand-1") + + +# [/DEF:backend.tests.services.clean_release.test_audit_service:Module] diff --git a/backend/src/services/clean_release/__tests__/test_preparation_service.py b/backend/src/services/clean_release/__tests__/test_preparation_service.py index 3aed2902..e2ef35c0 100644 --- a/backend/src/services/clean_release/__tests__/test_preparation_service.py +++ b/backend/src/services/clean_release/__tests__/test_preparation_service.py @@ -3,7 +3,7 @@ # @SEMANTICS: tests, clean-release, preparation, flow # @PURPOSE: Validate release candidate preparation flow, including policy evaluation and manifest persisting. # @LAYER: Domain -# @RELATION: TESTS -> backend.src.services.clean_release.preparation_service +# @RELATION: [DEPENDS_ON] ->[backend.src.services.clean_release.preparation_service:Module] # @INVARIANT: Candidate preparation always persists manifest and candidate status deterministically. import pytest @@ -21,6 +21,8 @@ from src.models.clean_release import ( ) from src.services.clean_release.preparation_service import prepare_candidate +# [DEF:backend.tests.services.clean_release.test_preparation_service._mock_policy:Function] +# @PURPOSE: Build a valid clean profile policy fixture for preparation tests. def _mock_policy() -> CleanProfilePolicy: return CleanProfilePolicy( policy_id="pol-1", @@ -33,7 +35,10 @@ def _mock_policy() -> CleanProfilePolicy: effective_from=datetime.now(timezone.utc), profile=ProfileType.ENTERPRISE_CLEAN, ) +# [/DEF:backend.tests.services.clean_release.test_preparation_service._mock_policy:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service._mock_registry:Function] +# @PURPOSE: Build an internal-only source registry fixture for preparation tests. def _mock_registry() -> ResourceSourceRegistry: return ResourceSourceRegistry( registry_id="reg-1", @@ -42,7 +47,10 @@ def _mock_registry() -> ResourceSourceRegistry: updated_at=datetime.now(timezone.utc), updated_by="tester" ) +# [/DEF:backend.tests.services.clean_release.test_preparation_service._mock_registry:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service._mock_candidate:Function] +# @PURPOSE: Build a draft release candidate fixture with provided identifier. def _mock_candidate(candidate_id: str) -> ReleaseCandidate: return ReleaseCandidate( candidate_id=candidate_id, @@ -53,7 +61,15 @@ def _mock_candidate(candidate_id: str) -> ReleaseCandidate: created_by="tester", source_snapshot_ref="v1.0.0-snapshot" ) +# [/DEF:backend.tests.services.clean_release.test_preparation_service._mock_candidate:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_success:Function] +# @PURPOSE: Verify candidate transitions to PREPARED when evaluation returns no violations. +# @TEST_CONTRACT: [valid_candidate + active_policy + internal_sources + no_violations] -> [status=PREPARED, manifest_persisted, candidate_saved] +# @TEST_SCENARIO: [prepare_success] -> [prepared status and persistence side effects are produced] +# @TEST_FIXTURE: [INLINE_MOCKS] -> INLINE_JSON +# @TEST_EDGE: [external_fail] -> [none; dependency interactions mocked and successful] +# @TEST_INVARIANT: [prepared_flow_persists_state] -> VERIFIED_BY: [prepare_success] def test_prepare_candidate_success(): # Setup repository = MagicMock() @@ -82,7 +98,15 @@ def test_prepare_candidate_success(): assert candidate.status == ReleaseCandidateStatus.PREPARED repository.save_manifest.assert_called_once() repository.save_candidate.assert_called_with(candidate) +# [/DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_success:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_with_violations:Function] +# @PURPOSE: Verify candidate transitions to BLOCKED when evaluation returns blocking violations. +# @TEST_CONTRACT: [valid_candidate + active_policy + evaluation_with_violations] -> [status=BLOCKED, violations_exposed] +# @TEST_SCENARIO: [prepare_blocked_due_to_policy] -> [blocked status and violation list are produced] +# @TEST_FIXTURE: [INLINE_MOCKS] -> INLINE_JSON +# @TEST_EDGE: [external_fail] -> [none; dependency interactions mocked and successful] +# @TEST_INVARIANT: [blocked_flow_reports_violations] -> VERIFIED_BY: [prepare_blocked_due_to_policy] def test_prepare_candidate_with_violations(): # Setup repository = MagicMock() @@ -110,14 +134,30 @@ def test_prepare_candidate_with_violations(): assert result["status"] == ReleaseCandidateStatus.BLOCKED.value assert candidate.status == ReleaseCandidateStatus.BLOCKED assert len(result["violations"]) == 1 +# [/DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_with_violations:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_not_found:Function] +# @PURPOSE: Verify preparation raises ValueError when candidate does not exist. +# @TEST_CONTRACT: [missing_candidate] -> [ValueError('Candidate not found')] +# @TEST_SCENARIO: [prepare_missing_candidate] -> [raises candidate not found error] +# @TEST_FIXTURE: [INLINE_MOCKS] -> INLINE_JSON +# @TEST_EDGE: [missing_field] -> [candidate lookup returns None] +# @TEST_INVARIANT: [missing_candidate_is_rejected] -> VERIFIED_BY: [prepare_missing_candidate] def test_prepare_candidate_not_found(): repository = MagicMock() repository.get_candidate.return_value = None with pytest.raises(ValueError, match="Candidate not found"): prepare_candidate(repository, "non-existent", [], [], "op") +# [/DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_not_found:Function] +# [DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_no_active_policy:Function] +# @PURPOSE: Verify preparation raises ValueError when no active policy is available. +# @TEST_CONTRACT: [candidate_present + missing_active_policy] -> [ValueError('Active clean policy not found')] +# @TEST_SCENARIO: [prepare_missing_policy] -> [raises active policy missing error] +# @TEST_FIXTURE: [INLINE_MOCKS] -> INLINE_JSON +# @TEST_EDGE: [invalid_type] -> [policy dependency resolves to None] +# @TEST_INVARIANT: [active_policy_required] -> VERIFIED_BY: [prepare_missing_policy] def test_prepare_candidate_no_active_policy(): repository = MagicMock() repository.get_candidate.return_value = _mock_candidate("cand-1") @@ -125,3 +165,7 @@ def test_prepare_candidate_no_active_policy(): with pytest.raises(ValueError, match="Active clean policy not found"): prepare_candidate(repository, "cand-1", [], [], "op") +# [/DEF:backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_no_active_policy:Function] + + +# [/DEF:backend.tests.services.clean_release.test_preparation_service:Module] diff --git a/backend/src/services/clean_release/__tests__/test_source_isolation.py b/backend/src/services/clean_release/__tests__/test_source_isolation.py index f7631646..b1157b7d 100644 --- a/backend/src/services/clean_release/__tests__/test_source_isolation.py +++ b/backend/src/services/clean_release/__tests__/test_source_isolation.py @@ -55,4 +55,6 @@ def test_validate_internal_sources_external_blocked(): assert result["ok"] is False assert len(result["violations"]) == 1 assert result["violations"][0]["category"] == "external-source" - assert result["violations"][0]["blocked_release"] is True \ No newline at end of file + assert result["violations"][0]["blocked_release"] is True + +# [/DEF:backend.tests.services.clean_release.test_source_isolation:Module] \ No newline at end of file diff --git a/backend/src/services/clean_release/__tests__/test_stages.py b/backend/src/services/clean_release/__tests__/test_stages.py index 5febbd6d..72c74a52 100644 --- a/backend/src/services/clean_release/__tests__/test_stages.py +++ b/backend/src/services/clean_release/__tests__/test_stages.py @@ -25,3 +25,6 @@ def test_derive_final_status_failed_skipped(): results = [CheckStageResult(stage=s, status=CheckStageStatus.PASS, details="ok") for s in MANDATORY_STAGE_ORDER] results[2].status = CheckStageStatus.SKIPPED assert derive_final_status(results) == CheckFinalStatus.FAILED + + +# [/DEF:backend.tests.services.clean_release.test_stages:Module] diff --git a/backend/src/services/clean_release/compliance_orchestrator.py b/backend/src/services/clean_release/compliance_orchestrator.py index 16d862ef..4bc57d64 100644 --- a/backend/src/services/clean_release/compliance_orchestrator.py +++ b/backend/src/services/clean_release/compliance_orchestrator.py @@ -35,89 +35,117 @@ from ...models.clean_release import ( from .policy_engine import CleanPolicyEngine from .repository import CleanReleaseRepository from .stages import derive_final_status +from ...core.logger import belief_scope # [DEF:CleanComplianceOrchestrator:Class] # @PURPOSE: Coordinate clean-release compliance verification stages. class CleanComplianceOrchestrator: + # [DEF:CleanComplianceOrchestrator.__init__:Function] + # @PURPOSE: Bind repository dependency used for orchestrator persistence and lookups. + # @PRE: repository is a valid CleanReleaseRepository instance with required methods. + # @POST: self.repository is assigned and used by all orchestration steps. + # @SIDE_EFFECT: Stores repository reference on orchestrator instance. + # @DATA_CONTRACT: Input -> CleanReleaseRepository, Output -> None def __init__(self, repository: CleanReleaseRepository): - self.repository = repository + with belief_scope("CleanComplianceOrchestrator.__init__"): + self.repository = repository + # [/DEF:CleanComplianceOrchestrator.__init__:Function] # [DEF:start_check_run:Function] # @PURPOSE: Initiate a new compliance run session. - # @PRE: candidate_id and policy_id must exist in repository. - # @POST: Returns initialized ComplianceRun in RUNNING state. + # @PRE: candidate_id/policy_id/manifest_id identify existing records in repository. + # @POST: Returns initialized ComplianceRun in RUNNING state persisted in repository. + # @SIDE_EFFECT: Reads manifest/policy and writes new ComplianceRun via repository.save_check_run. + # @DATA_CONTRACT: Input -> (candidate_id:str, policy_id:str, requested_by:str, manifest_id:str), Output -> ComplianceRun def start_check_run(self, candidate_id: str, policy_id: str, requested_by: str, manifest_id: str) -> ComplianceRun: - manifest = self.repository.get_manifest(manifest_id) - policy = self.repository.get_policy(policy_id) - if not manifest or not policy: - raise ValueError("Manifest or Policy not found") + with belief_scope("start_check_run"): + manifest = self.repository.get_manifest(manifest_id) + policy = self.repository.get_policy(policy_id) + if not manifest or not policy: + raise ValueError("Manifest or Policy not found") - check_run = ComplianceRun( - id=f"check-{uuid4()}", - candidate_id=candidate_id, - manifest_id=manifest_id, - manifest_digest=manifest.manifest_digest, - policy_snapshot_id=policy_id, - registry_snapshot_id=policy.registry_snapshot_id, - requested_by=requested_by, - requested_at=datetime.now(timezone.utc), - status=RunStatus.RUNNING, - ) - return self.repository.save_check_run(check_run) + check_run = ComplianceRun( + id=f"check-{uuid4()}", + candidate_id=candidate_id, + manifest_id=manifest_id, + manifest_digest=manifest.manifest_digest, + policy_snapshot_id=policy_id, + registry_snapshot_id=policy.registry_snapshot_id, + requested_by=requested_by, + requested_at=datetime.now(timezone.utc), + status=RunStatus.RUNNING, + ) + return self.repository.save_check_run(check_run) + # [/DEF:start_check_run:Function] + # [DEF:execute_stages:Function] + # @PURPOSE: Execute or accept compliance stage outcomes and set intermediate/final check-run status fields. + # @PRE: check_run exists and references candidate/policy/registry/manifest identifiers resolvable by repository. + # @POST: Returns persisted ComplianceRun with status FAILED on missing dependencies, otherwise SUCCEEDED with final_status set. + # @SIDE_EFFECT: Reads candidate/policy/registry/manifest and persists updated check_run. + # @DATA_CONTRACT: Input -> (check_run:ComplianceRun, forced_results:Optional[List[ComplianceStageRun]]), Output -> ComplianceRun def execute_stages(self, check_run: ComplianceRun, forced_results: Optional[List[ComplianceStageRun]] = None) -> ComplianceRun: - if forced_results is not None: - # In a real scenario, we'd persist these stages. + with belief_scope("execute_stages"): + if forced_results is not None: + # In a real scenario, we'd persist these stages. + return self.repository.save_check_run(check_run) + + # Real Logic Integration + candidate = self.repository.get_candidate(check_run.candidate_id) + policy = self.repository.get_policy(check_run.policy_snapshot_id) + if not candidate or not policy: + check_run.status = RunStatus.FAILED + return self.repository.save_check_run(check_run) + + registry = self.repository.get_registry(check_run.registry_snapshot_id) + manifest = self.repository.get_manifest(check_run.manifest_id) + + if not registry or not manifest: + check_run.status = RunStatus.FAILED + return self.repository.save_check_run(check_run) + + # Simulate stage execution and violation detection + # 1. DATA_PURITY + summary = manifest.content_json.get("summary", {}) + purity_ok = summary.get("prohibited_detected_count", 0) == 0 + + if not purity_ok: + check_run.final_status = ComplianceDecision.BLOCKED + else: + check_run.final_status = ComplianceDecision.PASSED + + check_run.status = RunStatus.SUCCEEDED + check_run.finished_at = datetime.now(timezone.utc) + return self.repository.save_check_run(check_run) - - # Real Logic Integration - candidate = self.repository.get_candidate(check_run.candidate_id) - policy = self.repository.get_policy(check_run.policy_snapshot_id) - if not candidate or not policy: - check_run.status = RunStatus.FAILED - return self.repository.save_check_run(check_run) - - registry = self.repository.get_registry(check_run.registry_snapshot_id) - manifest = self.repository.get_manifest(check_run.manifest_id) - - if not registry or not manifest: - check_run.status = RunStatus.FAILED - return self.repository.save_check_run(check_run) - - # Simulate stage execution and violation detection - # 1. DATA_PURITY - summary = manifest.content_json.get("summary", {}) - purity_ok = summary.get("prohibited_detected_count", 0) == 0 - - if not purity_ok: - check_run.final_status = ComplianceDecision.BLOCKED - else: - check_run.final_status = ComplianceDecision.PASSED - - check_run.status = RunStatus.SUCCEEDED - check_run.finished_at = datetime.now(timezone.utc) - - return self.repository.save_check_run(check_run) + # [/DEF:execute_stages:Function] # [DEF:finalize_run:Function] # @PURPOSE: Finalize run status based on cumulative stage results. - # @POST: Status derivation follows strict MANDATORY_STAGE_ORDER. + # @PRE: check_run was started and may already contain a derived final_status from stage execution. + # @POST: Returns persisted ComplianceRun in SUCCEEDED status with final_status guaranteed non-empty. + # @SIDE_EFFECT: Mutates check_run terminal fields and persists via repository.save_check_run. + # @DATA_CONTRACT: Input -> ComplianceRun, Output -> ComplianceRun def finalize_run(self, check_run: ComplianceRun) -> ComplianceRun: - # If not already set by execute_stages - if not check_run.final_status: - check_run.final_status = ComplianceDecision.PASSED - - check_run.status = RunStatus.SUCCEEDED - check_run.finished_at = datetime.now(timezone.utc) - return self.repository.save_check_run(check_run) + with belief_scope("finalize_run"): + # If not already set by execute_stages + if not check_run.final_status: + check_run.final_status = ComplianceDecision.PASSED + + check_run.status = RunStatus.SUCCEEDED + check_run.finished_at = datetime.now(timezone.utc) + return self.repository.save_check_run(check_run) + # [/DEF:finalize_run:Function] # [/DEF:CleanComplianceOrchestrator:Class] # [DEF:run_check_legacy:Function] # @PURPOSE: Legacy wrapper for compatibility with previous orchestrator call style. -# @PRE: Candidate/policy/manifest identifiers are valid for repository. -# @POST: Returns finalized ComplianceRun produced by orchestrator. +# @PRE: repository and identifiers are valid and resolvable by orchestrator dependencies. +# @POST: Returns finalized ComplianceRun produced by orchestrator start->execute->finalize sequence. +# @SIDE_EFFECT: Reads/writes compliance entities through repository during orchestrator calls. +# @DATA_CONTRACT: Input -> (repository:CleanReleaseRepository, candidate_id:str, policy_id:str, requested_by:str, manifest_id:str), Output -> ComplianceRun def run_check_legacy( repository: CleanReleaseRepository, candidate_id: str, @@ -125,14 +153,15 @@ def run_check_legacy( requested_by: str, manifest_id: str, ) -> ComplianceRun: - orchestrator = CleanComplianceOrchestrator(repository) - run = orchestrator.start_check_run( - candidate_id=candidate_id, - policy_id=policy_id, - requested_by=requested_by, - manifest_id=manifest_id, - ) - run = orchestrator.execute_stages(run) - return orchestrator.finalize_run(run) + with belief_scope("run_check_legacy"): + orchestrator = CleanComplianceOrchestrator(repository) + run = orchestrator.start_check_run( + candidate_id=candidate_id, + policy_id=policy_id, + requested_by=requested_by, + manifest_id=manifest_id, + ) + run = orchestrator.execute_stages(run) + return orchestrator.finalize_run(run) # [/DEF:run_check_legacy:Function] # [/DEF:backend.src.services.clean_release.compliance_orchestrator:Module] \ No newline at end of file diff --git a/frontend/src/components/auth/ProtectedRoute.svelte b/frontend/src/components/auth/ProtectedRoute.svelte index 0e673654..7815f106 100644 --- a/frontend/src/components/auth/ProtectedRoute.svelte +++ b/frontend/src/components/auth/ProtectedRoute.svelte @@ -1,17 +1,40 @@ - + -@INVARIANT: Redirects to /login if user is not authenticated and to fallback route when permission is denied. -@UX_STATE: Loading -> Shows spinner while session/permission check is in progress. -@UX_STATE: Authorized -> Renders protected slot content. -@UX_RECOVERY: Invalid token triggers logout and redirect to /login. + + + +
@@ -556,5 +619,5 @@ /> - - + + diff --git a/frontend/src/routes/migration/mappings/+page.svelte b/frontend/src/routes/migration/mappings/+page.svelte index d7954dcd..0aebec3c 100644 --- a/frontend/src/routes/migration/mappings/+page.svelte +++ b/frontend/src/routes/migration/mappings/+page.svelte @@ -1,25 +1,55 @@ - + - +
@@ -171,7 +226,6 @@ {/if} {/if}
- + - - + diff --git a/frontend/src/routes/settings/git/+page.svelte b/frontend/src/routes/settings/git/+page.svelte index c6693414..8265e46e 100644 --- a/frontend/src/routes/settings/git/+page.svelte +++ b/frontend/src/routes/settings/git/+page.svelte @@ -167,8 +167,6 @@ }; } // [/DEF:resetForm:Function] - // [/DEF:handleSave:Function] - // [DEF:handleDelete:Function] /** * @purpose Deletes a git configuration by ID. diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json index 6ff61253..804f58f4 100644 --- a/semantics/semantic_map.json +++ b/semantics/semantic_map.json @@ -1,6 +1,6 @@ { "project_root": ".", - "generated_at": "2026-03-10T11:51:59.912845", + "generated_at": "2026-03-10T18:26:33.038330", "modules": [ { "name": "check_test_data", @@ -17358,14 +17358,14 @@ "name": "MigrationDashboard", "type": "Component", "tier": "CRITICAL", - "start_line": 1, - "end_line": 560, + "start_line": 36, + "end_line": 406, "tags": { - "SEMANTICS": "migration, dashboard, environment, selection, database-replacement", - "PURPOSE": "Main dashboard for configuring and starting migrations.", - "LAYER": "Page", - "RELATION": "USES -> EnvSelector", - "INVARIANT": "Migration cannot start without source and target environments." + "PURPOSE": "Orchestrate migration UI workflow and route user actions to backend APIs and task store.", + "PRE": "API client and component dependencies are available; i18n store is initialized.", + "POST": "User can progress through selection, dry-run, migration start, and task resume flows.", + "SIDE_EFFECT": "Performs HTTP requests, mutates local UI state, updates selectedTask store.", + "DATA_CONTRACT": "DashboardSelection -> MigrationDryRunResult | Task DTO (from /tasks endpoints)" }, "relations": [], "children": [ @@ -17373,8 +17373,8 @@ "name": "fetchEnvironments", "type": "Function", "tier": "CRITICAL", - "start_line": 61, - "end_line": 76, + "start_line": 97, + "end_line": 114, "tags": { "PURPOSE": "Fetches the list of environments from the API.", "PRE": "None.", @@ -17388,82 +17388,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 61 + "line_number": 97 } ], "score": 0.0 @@ -17473,8 +17473,8 @@ "name": "fetchDashboards", "type": "Function", "tier": "CRITICAL", - "start_line": 78, - "end_line": 94, + "start_line": 116, + "end_line": 134, "tags": { "PURPOSE": "Fetches dashboards for the selected source environment.", "PRE": "envId is a valid environment ID.", @@ -17489,82 +17489,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 78 + "line_number": 116 } ], "score": 0.0 @@ -17574,8 +17574,8 @@ "name": "fetchDatabases", "type": "Function", "tier": "CRITICAL", - "start_line": 101, - "end_line": 135, + "start_line": 141, + "end_line": 177, "tags": { "PURPOSE": "Fetches databases from both environments and gets suggestions.", "PRE": "sourceEnvId and targetEnvId must be set.", @@ -17589,82 +17589,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 141 } ], "score": 0.0 @@ -17674,8 +17674,8 @@ "name": "handleMappingUpdate", "type": "Function", "tier": "CRITICAL", - "start_line": 137, - "end_line": 168, + "start_line": 179, + "end_line": 212, "tags": { "PURPOSE": "Saves a mapping to the backend.", "PRE": "event.detail contains sourceUuid and targetUuid.", @@ -17689,82 +17689,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 137 + "line_number": 179 } ], "score": 0.0 @@ -17774,8 +17774,8 @@ "name": "handleViewLogs", "type": "Function", "tier": "CRITICAL", - "start_line": 170, - "end_line": 180, + "start_line": 214, + "end_line": 226, "tags": { "PURPOSE": "Opens the log viewer for a specific task.", "PRE": "event.detail contains task object.", @@ -17789,82 +17789,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 170 + "line_number": 214 } ], "score": 0.0 @@ -17874,8 +17874,8 @@ "name": "handlePasswordPrompt", "type": "Function", "tier": "CRITICAL", - "start_line": 182, - "end_line": 208, + "start_line": 228, + "end_line": 254, "tags": { "PURPOSE": "Reactive logic to show password prompt when a task is awaiting input.", "PRE": "selectedTask status is AWAITING_INPUT.", @@ -17889,82 +17889,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 228 } ], "score": 0.0 @@ -17974,8 +17974,8 @@ "name": "handleResumeMigration", "type": "Function", "tier": "CRITICAL", - "start_line": 210, - "end_line": 229, + "start_line": 256, + "end_line": 277, "tags": { "PURPOSE": "Resumes a migration task with provided passwords.", "PRE": "event.detail contains passwords.", @@ -17989,82 +17989,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 210 + "line_number": 256 } ], "score": 0.0 @@ -18074,8 +18074,8 @@ "name": "startMigration", "type": "Function", "tier": "CRITICAL", - "start_line": 231, - "end_line": 302, + "start_line": 279, + "end_line": 352, "tags": { "PURPOSE": "Starts the migration process.", "PRE": "sourceEnvId and targetEnvId must be set and different.", @@ -18089,82 +18089,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 231 + "line_number": 279 } ], "score": 0.0 @@ -18174,8 +18174,8 @@ "name": "startDryRun", "type": "Function", "tier": "CRITICAL", - "start_line": 304, - "end_line": 353, + "start_line": 354, + "end_line": 405, "tags": { "PURPOSE": "Builds pre-flight diff and risk summary without applying migration.", "PRE": "source/target environments and selected dashboards are valid.", @@ -18192,93 +18192,332 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 304 + "line_number": 354 } ], "score": 0.0 } + } + ], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Missing @INVARIANT tag (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 36 + }, + { + "message": "Svelte protocol violation: `$:` reactive label is forbidden; use runes `$state/$derived/$effect`", + "severity": "ERROR", + "line_number": 36 + } + ], + "score": 0.0 + }, + "data_flow": [ + { + "store": "lib", + "type": "READS_FROM", + "line": 63 }, + { + "store": "lib", + "type": "READS_FROM", + "line": 64 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 238 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 239 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 240 + }, + { + "store": "selectedTask", + "type": "WRITES_TO", + "line": 242 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 248 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 248 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 262 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 266 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 272 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 289 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 295 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 301 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 335 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 369 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 375 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 381 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 421 + }, + { + "store": "selectedTask", + "type": "READS_FROM", + "line": 425 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 430 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 436 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 447 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 452 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 461 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 472 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 488 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 504 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 512 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 516 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 532 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 558 + } + ] + }, + { + "name": "MigrationDashboardView", + "type": "Block", + "tier": "CRITICAL", + "start_line": 409, + "end_line": 622, + "tags": { + "PURPOSE": "Render migration configuration controls, action CTAs, dry-run results, and modal entry points.", + "UX_STATE": "Success -> Dry-run details or TaskRunner content is presented.", + "UX_FEEDBACK": "Buttons, banners, cards, and dialogs provide immediate operation feedback.", + "UX_RECOVERY": "User can retry operations from the same page state." + }, + "relations": [], + "children": [ { "name": "DashboardSelectionSection", "type": "Component", "tier": "CRITICAL", - "start_line": 395, - "end_line": 414, + "start_line": 458, + "end_line": 477, "tags": {}, "relations": [], "children": [], @@ -18288,112 +18527,112 @@ { "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 395 + "line_number": 458 } ], "score": 0.0 @@ -18406,224 +18645,80 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Svelte protocol violation: `$:` reactive label is forbidden; use runes `$state/$derived/$effect`", - "severity": "ERROR", - "line_number": 1 + "line_number": 409 } ], - "score": 0.0 - }, - "data_flow": [ - { - "store": "lib", - "type": "READS_FROM", - "line": 29 - }, - { - "store": "lib", - "type": "READS_FROM", - "line": 30 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 192 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 193 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 194 - }, - { - "store": "selectedTask", - "type": "WRITES_TO", - "line": 196 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 202 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 202 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 215 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 219 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 225 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 240 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 246 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 252 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 286 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 318 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 324 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 330 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 358 - }, - { - "store": "selectedTask", - "type": "READS_FROM", - "line": 362 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 367 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 373 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 384 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 389 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 398 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 409 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 425 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 441 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 449 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 453 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 469 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 495 - } - ] + "score": 0.35 + } }, { - "name": "MappingManagement", - "type": "Component", + "name": "MappingsPageScript", + "type": "Block", "tier": "CRITICAL", - "start_line": 1, - "end_line": 177, + "start_line": 36, + "end_line": 169, "tags": { - "SEMANTICS": "mapping, management, database, fuzzy-matching", - "PURPOSE": "Page for managing database mappings between environments.", - "LAYER": "Page", - "RELATION": "USES -> MappingTable", - "INVARIANT": "Mappings are saved to the backend for persistence." + "PURPOSE": "Define imports, state, and handlers that drive migration mappings page FSM." }, - "relations": [], + "relations": [ + { + "type": "CALLS", + "target": "fetchEnvironments" + }, + { + "type": "CALLS", + "target": "fetchDatabases" + }, + { + "type": "CALLS", + "target": "handleUpdate" + } + ], "children": [ { - "name": "fetchEnvironments", - "type": "Function", + "name": "Imports", + "type": "Block", "tier": "CRITICAL", - "start_line": 36, + "start_line": 42, "end_line": 49, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 42 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 42 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 42 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 42 + } + ], + "score": 0.0 + } + }, + { + "name": "UiState", + "type": "Store", + "tier": "CRITICAL", + "start_line": 51, + "end_line": 64, "tags": { - "PURPOSE": "Fetches the list of environments.", - "PRE": "None.", - "POST": "environments array is populated." + "PURPOSE": "Maintain local page state for environments, fetched databases, mappings, suggestions, and UX messages." }, "relations": [], "children": [], @@ -18631,84 +18726,188 @@ "valid": false, "issues": [ { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 51 }, { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 51 }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 51 + }, + { + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 51 + } + ], + "score": 0.0 + } + }, + { + "name": "belief_scope", + "type": "Function", + "tier": "CRITICAL", + "start_line": 66, + "end_line": 80, + "tags": { + "PURPOSE": "Frontend semantic scope wrapper for CRITICAL trace boundaries without changing business behavior.", + "PRE": "scopeId is non-empty and run is callable.", + "POST": "Executes run exactly once and returns/rejects with the same outcome.", + "SIDE_EFFECT": "Emits trace logs for semantic scope entrance/exit.", + "DATA_CONTRACT": "Input(scopeId:string, run:() => Promise) -> Output(Promise)" + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 36 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 36 + "line_number": 66 + } + ], + "score": 0.0 + } + }, + { + "name": "fetchEnvironments", + "type": "Function", + "tier": "CRITICAL", + "start_line": 82, + "end_line": 99, + "tags": { + "PURPOSE": "Load environment options for source/target selectors on initial mount.", + "PRE": "API client is initialized and route has mounted.", + "POST": "loading=false and environments populated on success or error message set on failure.", + "SIDE_EFFECT": "Network I/O to environments endpoint; mutates environments/error/loading.", + "DATA_CONTRACT": "Input(void) -> Output(EnvironmentSummary[])" + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 + }, + { + "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 82 } ], "score": 0.0 @@ -18718,97 +18917,79 @@ "name": "fetchDatabases", "type": "Function", "tier": "CRITICAL", - "start_line": 53, - "end_line": 83, + "start_line": 103, + "end_line": 135, "tags": { - "PURPOSE": "Fetches databases from both environments and gets suggestions.", - "PRE": "sourceEnvId and targetEnvId must be set.", - "POST": "sourceDatabases, targetDatabases, mappings, and suggestions are updated." + "PURPOSE": "Fetch both environment database catalogs, existing mappings, and suggested matches.", + "PRE": "sourceEnvId and targetEnvId are both selected and non-empty.", + "POST": "fetchingDbs=false and sourceDatabases/targetDatabases/mappings/suggestions updated or error set.", + "SIDE_EFFECT": "Concurrent network I/O to environments, mappings, and suggestion endpoints; clears transient messages.", + "DATA_CONTRACT": "Input({sourceEnvId,targetEnvId}) -> Output({sourceDatabases,targetDatabases,mappings,suggestions})" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 53 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 53 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 53 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 103 } ], "score": 0.0 @@ -18818,97 +18999,79 @@ "name": "handleUpdate", "type": "Function", "tier": "CRITICAL", - "start_line": 85, - "end_line": 114, + "start_line": 137, + "end_line": 168, "tags": { - "PURPOSE": "Saves a mapping to the backend.", - "PRE": "event.detail contains sourceUuid and targetUuid.", - "POST": "Mapping is saved and local mappings list is updated." + "PURPOSE": "Persist a selected mapping pair and reconcile local mapping list by source database UUID.", + "PRE": "event.detail includes sourceUuid/targetUuid and matching source/target database records exist.", + "POST": "mapping persisted; local mappings replaced for same source UUID; success or error feedback shown.", + "SIDE_EFFECT": "POST /mappings network I/O; mutates mappings/success/error.", + "DATA_CONTRACT": "Input(CustomEvent<{sourceUuid:string,targetUuid:string}>) -> Output(MappingRecord persisted + UI feedback)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 85 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 85 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 85 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 137 } ], "score": 0.0 @@ -18921,78 +19084,37 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1 + "line_number": 36 + } + ], + "score": 0.35 + } + }, + { + "name": "MappingsPageTemplate", + "type": "Block", + "tier": "CRITICAL", + "start_line": 172, + "end_line": 229, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 172 }, { - "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 + "line_number": 172 } ], "score": 0.0 - }, - "data_flow": [ - { - "store": "lib", - "type": "READS_FROM", - "line": 18 - }, - { - "store": "lib", - "type": "READS_FROM", - "line": 19 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 109 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 119 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 122 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 126 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 132 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 145 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 170 - } - ] + } }, { "name": "+page", @@ -20639,7 +20761,7 @@ "type": "Component", "tier": "STANDARD", "start_line": 1, - "end_line": 532, + "end_line": 530, "tags": { "SEMANTICS": "git, settings, configuration, integration", "PURPOSE": "Manage Git server configurations for dashboard versioning.", @@ -20931,8 +21053,8 @@ "name": "handleDelete", "type": "Function", "tier": "STANDARD", - "start_line": 172, - "end_line": 193, + "start_line": 170, + "end_line": 191, "tags": { "PURPOSE": "Deletes a git configuration by ID.", "PARAM": "{string} id - Configuration ID.", @@ -20947,32 +21069,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 172 + "line_number": 170 } ], "score": 0.0 @@ -20982,8 +21104,8 @@ "name": "loadGiteaRepos", "type": "Function", "tier": "STANDARD", - "start_line": 195, - "end_line": 218, + "start_line": 193, + "end_line": 216, "tags": { "PURPOSE": "Loads repositories from selected Gitea config.", "PRE": "selectedGiteaConfigId is set.", @@ -20997,32 +21119,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 195 + "line_number": 193 } ], "score": 0.0 @@ -21032,8 +21154,8 @@ "name": "handleCreateGiteaRepo", "type": "Function", "tier": "STANDARD", - "start_line": 220, - "end_line": 249, + "start_line": 218, + "end_line": 247, "tags": { "PURPOSE": "Creates new repository on selected Gitea server.", "PRE": "selectedGiteaConfigId and newGiteaRepo.name are set.", @@ -21047,32 +21169,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 220 + "line_number": 218 } ], "score": 0.0 @@ -21082,8 +21204,8 @@ "name": "handleDeleteGiteaRepo", "type": "Function", "tier": "STANDARD", - "start_line": 251, - "end_line": 284, + "start_line": 249, + "end_line": 282, "tags": { "PURPOSE": "Deletes repository from selected Gitea server.", "PRE": "selectedGiteaConfigId is set.", @@ -21097,32 +21219,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for STANDARD tier)", "severity": "WARNING", - "line_number": 251 + "line_number": 249 } ], "score": 0.0 @@ -21194,17 +21316,22 @@ { "store": "t", "type": "READS_FROM", - "line": 180 + "line": 178 }, { "store": "t", "type": "READS_FROM", - "line": 184 + "line": 182 }, { "store": "t", "type": "WRITES_TO", - "line": 293 + "line": 291 + }, + { + "store": "t", + "type": "WRITES_TO", + "line": 295 }, { "store": "t", @@ -21214,27 +21341,27 @@ { "store": "t", "type": "WRITES_TO", - "line": 299 + "line": 328 }, { "store": "t", "type": "WRITES_TO", - "line": 330 + "line": 344 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 369 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 370 }, { "store": "t", "type": "WRITES_TO", - "line": 346 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 371 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 372 + "line": 374 }, { "store": "t", @@ -21244,37 +21371,37 @@ { "store": "t", "type": "WRITES_TO", - "line": 378 + "line": 379 }, { "store": "t", "type": "WRITES_TO", - "line": 381 + "line": 388 }, { "store": "t", "type": "WRITES_TO", - "line": 390 + "line": 392 }, { "store": "t", "type": "WRITES_TO", - "line": 394 + "line": 397 }, { "store": "t", "type": "WRITES_TO", - "line": 399 - }, - { - "store": "t", - "type": "WRITES_TO", - "line": 404 + "line": 402 }, { "store": "t", "type": "READS_FROM", - "line": 416 + "line": 414 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 418 }, { "store": "t", @@ -21284,12 +21411,7 @@ { "store": "t", "type": "READS_FROM", - "line": 422 - }, - { - "store": "t", - "type": "READS_FROM", - "line": 426 + "line": 424 } ] }, @@ -29171,109 +29293,245 @@ ] }, { - "name": "ProtectedRoute", - "type": "Component", - "tier": "CRITICAL", + "name": "ProtectedRoute.svelte", + "type": "Module", + "tier": "STANDARD", "start_line": 1, - "end_line": 98, + "end_line": 147, "tags": { - "TIER": "STANDARD", - "SEMANTICS": "auth, guard, route, protection, permission", - "PURPOSE": "Wraps content to ensure only authenticated and authorized users can access it.", - "LAYER": "Component", - "RELATION": "DEPENDS_ON -> frontend.src.lib.auth.permissions.hasPermission", - "INVARIANT": "Redirects to /login if user is not authenticated and to fallback route when permission is denied.", - "UX_STATE": "Authorized -> Renders protected slot content.", - "UX_RECOVERY": "Invalid token triggers logout and redirect to /login." + "TIER": "CRITICAL", + "SEMANTICS": "auth, route-guard, permission, redirect, session-validation", + "PURPOSE": "Enforces authenticated and authorized access before protected route content is rendered.", + "LAYER": "UI", + "RELATION": "[CALLS] ->[frontend.src.lib.api.api.fetchApi]", + "INVARIANT": "Unauthenticated users are redirected to /login, unauthorized users are redirected to fallbackPath, and protected slot renders only when access is verified.", + "UX_STATE": "Success -> Protected slot content is rendered for authenticated users with valid access.", + "UX_FEEDBACK": "Spinner feedback during Loading and navigation redirect feedback on Error/Unauthorized outcomes.", + "UX_RECOVERY": "Re-authenticate via /login after logout; retry occurs automatically on next protected navigation.", + "UX_REACTIVITY": "Props are bound via $props; local mutable UI flags use $state; auth store is consumed through Svelte store subscription ($auth).", + "TEST_CONTRACT": "[token:user:requiredPermission] -> [redirect:/login | redirect:fallbackPath | render:slot]", + "TEST_SCENARIO": "AuthorizedRender -> Renders slot when authenticated and permission passes.", + "TEST_FIXTURE": "AuthGuardStateMatrix -> INLINE_JSON", + "TEST_EDGE": "external_fail -> /auth/me network/API failure triggers logout and /login redirect.", + "TEST_INVARIANT": "ProtectedRenderGate -> VERIFIED_BY: [AuthorizedRender]" }, "relations": [], "children": [ { - "name": "verifySessionAndAccess", - "type": "Function", + "name": "ProtectedRoute", + "type": "Component", "tier": "CRITICAL", - "start_line": 30, - "end_line": 83, + "start_line": 31, + "end_line": 146, "tags": { - "PURPOSE": "Validates active session and optional route permission before rendering protected slot.", - "PRE": "Auth store is initialized.", - "POST": "hasRouteAccess is true only when session and permission checks pass.", - "SIDE_EFFECT": "May update auth store, perform redirect, and fetch current user." + "PURPOSE": "Wraps protected slot content with session and permission verification guards.", + "PRE": "auth store and navigation API are available in runtime; component is mounted in a browser context.", + "POST": "Slot renders only when $auth.isAuthenticated and hasRouteAccess are both true.", + "SIDE_EFFECT": "Performs /auth/me request, mutates auth store state, emits console instrumentation logs, and executes navigation redirects.", + "DATA_CONTRACT": "Input[$props.requiredPermission?: string|null, $props.fallbackPath?: string] -> Output[UIState{isCheckingAccess:boolean, hasRouteAccess:boolean}]" }, "relations": [], - "children": [], + "children": [ + { + "name": "verifySessionAndAccess", + "type": "Function", + "tier": "CRITICAL", + "start_line": 64, + "end_line": 131, + "tags": { + "PURPOSE": "Validates session and optional permission gate before allowing protected content render.", + "PRE": "auth store is initialized and can provide token/user state; navigation is available.", + "POST": "hasRouteAccess=true only when user identity is valid and permission check (if provided) passes.", + "SIDE_EFFECT": "Mutates auth loading/user state, performs API I/O to /auth/me, and may redirect.", + "DATA_CONTRACT": "Input[AuthState, requiredPermission, fallbackPath] -> Output[RouteDecision{login_redirect|fallback_redirect|grant}]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + }, + { + "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 64 + } + ], + "score": 0.0 + } + } + ], "compliance": { "valid": false, "issues": [ { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", + "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 }, { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 30 + "line_number": 31 + }, + { + "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 + }, + { + "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 + }, + { + "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 + }, + { + "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 + }, + { + "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 + }, + { + "message": "Missing @INVARIANT tag (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 31 } ], "score": 0.0 @@ -29281,70 +29539,10 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Svelte protocol violation: `export let` is forbidden; use `$props()`", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 - }, - "props": [ - { - "name": "requiredPermission", - "type": "string | null ", - "default": "null" - }, - { - "name": "fallbackPath", - "type": "string ", - "default": "\"/profile\"" - } - ], - "data_flow": [ - { - "store": "app", - "type": "READS_FROM", - "line": 21 - }, - { - "store": "lib", - "type": "READS_FROM", - "line": 22 - }, - { - "store": "auth", - "type": "READS_FROM", - "line": 40 - }, - { - "store": "auth", - "type": "WRITES_TO", - "line": 46 - }, - { - "store": "auth", - "type": "READS_FROM", - "line": 90 - }, - { - "store": "auth", - "type": "READS_FROM", - "line": 94 - } - ] + "valid": true, + "issues": [], + "score": 1.0 + } }, { "name": "TaskLogPanel", @@ -36705,7 +36903,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 300, "tags": { "TIER": "STANDARD", "SEMANTICS": "superset, load-test, charts, dashboards, seed, stress", @@ -37070,7 +37268,7 @@ "type": "Function", "tier": "STANDARD", "start_line": 283, - "end_line": null, + "end_line": 294, "tags": { "PURPOSE": "CLI entrypoint for Superset load-test data seeding.", "PRE": "Command line arguments are valid.", @@ -37079,13 +37277,8 @@ "relations": [], "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:main:Function] started at line 283", - "severity": "ERROR", - "line_number": 283 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -37096,11 +37289,6 @@ "severity": "WARNING", "line_number": 283 }, - { - "message": "Unclosed Anchor: [DEF:main:Function] started at line 283", - "severity": "ERROR", - "line_number": 283 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -37112,16 +37300,16 @@ "line_number": 283 } ], - "score": 0.0 + "score": 0.28 } } ], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:backend.src.scripts.seed_superset_load_test:Module] started at line 1", - "severity": "ERROR", + "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "severity": "WARNING", "line_number": 1 }, { @@ -37130,12 +37318,12 @@ "line_number": 1 }, { - "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", + "message": "Fractal limit warning: Module length is 300 lines (must be < 300)", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.49000000000000005 } }, { @@ -37181,7 +37369,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 590, "tags": { "TIER": "STANDARD", "SEMANTICS": "clean-release, tui, ncurses, interactive-validator", @@ -37235,7 +37423,7 @@ "type": "Class", "tier": "STANDARD", "start_line": 144, - "end_line": null, + "end_line": 563, "tags": { "PURPOSE": "Curses-based application for compliance monitoring.", "UX_STATE": "BLOCKED -> Violations detected, release forbidden.", @@ -37248,7 +37436,7 @@ "type": "Function", "tier": "STANDARD", "start_line": 426, - "end_line": null, + "end_line": 465, "tags": { "PURPOSE": "Execute compliance run via facade adapter and update UI state.", "PRE": "Candidate and policy snapshots are present in repository.", @@ -37257,13 +37445,8 @@ "relations": [], "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 426", - "severity": "ERROR", - "line_number": 426 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -37279,11 +37462,6 @@ "severity": "WARNING", "line_number": 426 }, - { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 426", - "severity": "ERROR", - "line_number": 426 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -37299,11 +37477,6 @@ "severity": "WARNING", "line_number": 426 }, - { - "message": "Unclosed Anchor: [DEF:run_checks:Function] started at line 426", - "severity": "ERROR", - "line_number": 426 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -37325,30 +37498,20 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 144", - "severity": "ERROR", - "line_number": 144 - }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", "line_number": 144 }, - { - "message": "Unclosed Anchor: [DEF:CleanReleaseTUI:Class] started at line 144", - "severity": "ERROR", - "line_number": 144 - }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", "line_number": 144 } ], - "score": 0.0 + "score": 0.5499999999999999 } }, { @@ -37661,8 +37824,8 @@ "name": "build_manifest", "type": "Function", "tier": "TRIVIAL", - "start_line": 466, - "end_line": 466, + "start_line": 467, + "end_line": 467, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37679,8 +37842,8 @@ "name": "clear_history", "type": "Function", "tier": "TRIVIAL", - "start_line": 479, - "end_line": 479, + "start_line": 480, + "end_line": 480, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37697,8 +37860,8 @@ "name": "approve_latest", "type": "Function", "tier": "TRIVIAL", - "start_line": 488, - "end_line": 488, + "start_line": 489, + "end_line": 489, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37715,8 +37878,8 @@ "name": "publish_latest", "type": "Function", "tier": "TRIVIAL", - "start_line": 501, - "end_line": 501, + "start_line": 502, + "end_line": 502, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37733,8 +37896,8 @@ "name": "refresh_overview", "type": "Function", "tier": "TRIVIAL", - "start_line": 514, - "end_line": 514, + "start_line": 515, + "end_line": 515, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37751,8 +37914,8 @@ "name": "refresh_overview", "type": "Function", "tier": "TRIVIAL", - "start_line": 527, - "end_line": 527, + "start_line": 528, + "end_line": 528, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37769,8 +37932,8 @@ "name": "refresh_screen", "type": "Function", "tier": "TRIVIAL", - "start_line": 533, - "end_line": 533, + "start_line": 534, + "end_line": 534, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37787,8 +37950,8 @@ "name": "loop", "type": "Function", "tier": "TRIVIAL", - "start_line": 546, - "end_line": 546, + "start_line": 547, + "end_line": 547, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37805,8 +37968,8 @@ "name": "tui_main", "type": "Function", "tier": "TRIVIAL", - "start_line": 565, - "end_line": 565, + "start_line": 566, + "end_line": 566, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37823,8 +37986,8 @@ "name": "main", "type": "Function", "tier": "TRIVIAL", - "start_line": 571, - "end_line": 571, + "start_line": 572, + "end_line": 572, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -37839,15 +38002,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:backend.src.scripts.clean_release_tui:Module] started at line 1", - "severity": "ERROR", + "message": "Fractal limit warning: Module length is 590 lines (must be < 300)", + "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -42980,20 +43143,23 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 286, + "end_line": 319, "tags": { - "TIER": "STANDARD", - "SEMANTICS": "config, manager, persistence, postgresql", - "PURPOSE": "Manages application configuration persisted in database with one-time migration from JSON.", - "LAYER": "Core", - "INVARIANT": "Configuration must always be valid according to AppConfig model.", - "PUBLIC_API": "ConfigManager" + "TIER": "CRITICAL", + "SEMANTICS": "config, manager, persistence, migration, postgresql", + "PURPOSE": "Manages application configuration persistence in DB with one-time migration from legacy JSON.", + "LAYER": "Domain", + "INVARIANT": "Configuration must always be representable by AppConfig and persisted under global record id." }, "relations": [ { "type": "DEPENDS_ON", "target": "ConfigModels" }, + { + "type": "DEPENDS_ON", + "target": "SessionLocal" + }, { "type": "DEPENDS_ON", "target": "AppConfigRecord" @@ -43001,6 +43167,14 @@ { "type": "CALLS", "target": "logger" + }, + { + "type": "CALLS", + "target": "configure_logger" + }, + { + "type": "BINDS_TO", + "target": "ConfigManager" } ], "children": [ @@ -43008,11 +43182,11 @@ "name": "ConfigManager", "type": "Class", "tier": "CRITICAL", - "start_line": 29, - "end_line": 285, + "start_line": 28, + "end_line": 318, "tags": { - "TIER": "STANDARD", - "PURPOSE": "A class to handle application configuration persistence and management." + "TIER": "CRITICAL", + "PURPOSE": "Handles application configuration load, validation, mutation, and persistence lifecycle." }, "relations": [], "children": [ @@ -43020,124 +43194,94 @@ "name": "__init__", "type": "Function", "tier": "CRITICAL", - "start_line": 33, - "end_line": 52, + "start_line": 32, + "end_line": 51, "tags": { - "TIER": "STANDARD", - "PURPOSE": "Initializes the ConfigManager.", - "PRE": "isinstance(config_path, str) and len(config_path) > 0", - "POST": "self.config is an instance of AppConfig", - "PARAM": "config_path (str) - Path to legacy JSON config (used only for initial migration fallback)." + "PURPOSE": "Initialize manager state from persisted or migrated configuration.", + "PRE": "config_path is a non-empty string path.", + "POST": "self.config is initialized as AppConfig and logger is configured.", + "SIDE_EFFECT": "Reads config sources and updates logging configuration.", + "DATA_CONTRACT": "Input(str config_path) -> Output(None; self.config: AppConfig)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 33 + "line_number": 32 } ], "score": 0.0 @@ -43147,166 +43291,94 @@ "name": "_default_config", "type": "Function", "tier": "CRITICAL", - "start_line": 54, - "end_line": 62, + "start_line": 53, + "end_line": 65, "tags": { - "PURPOSE": "Returns default application configuration.", - "RETURN": "AppConfig - Default configuration." + "PURPOSE": "Build default application configuration fallback.", + "PRE": "None.", + "POST": "Returns valid AppConfig with empty environments and default storage settings.", + "SIDE_EFFECT": "None.", + "DATA_CONTRACT": "Input(None) -> Output(AppConfig)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 + "line_number": 53 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 54 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 54 + "line_number": 53 } ], "score": 0.0 @@ -43316,151 +43388,94 @@ "name": "_load_from_legacy_file", "type": "Function", "tier": "CRITICAL", - "start_line": 64, - "end_line": 81, + "start_line": 67, + "end_line": 87, "tags": { - "PURPOSE": "Loads legacy configuration from config.json for migration fallback.", - "RETURN": "AppConfig - Loaded or default configuration." + "PURPOSE": "Load legacy JSON configuration for migration fallback path.", + "PRE": "self.config_path is initialized.", + "POST": "Returns AppConfig from file payload or safe default.", + "SIDE_EFFECT": "Filesystem read and error logging.", + "DATA_CONTRACT": "Input(Path self.config_path) -> Output(AppConfig)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 64 + "line_number": 67 } ], "score": 0.0 @@ -43470,167 +43485,94 @@ "name": "_get_record", "type": "Function", "tier": "CRITICAL", - "start_line": 83, - "end_line": 89, + "start_line": 89, + "end_line": 98, "tags": { - "PURPOSE": "Loads config record from DB.", - "PARAM": "session (Session) - DB session.", - "RETURN": "Optional[AppConfigRecord] - Existing record or None." + "PURPOSE": "Resolve global configuration record from DB.", + "PRE": "session is an active SQLAlchemy Session.", + "POST": "Returns record when present, otherwise None.", + "SIDE_EFFECT": "Database read query.", + "DATA_CONTRACT": "Input(Session) -> Output(Optional[AppConfigRecord])" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 83 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 83 + "line_number": 89 } ], "score": 0.0 @@ -43640,123 +43582,94 @@ "name": "_load_config", "type": "Function", "tier": "CRITICAL", - "start_line": 91, - "end_line": 114, + "start_line": 100, + "end_line": 124, "tags": { - "PURPOSE": "Loads the configuration from DB or performs one-time migration from JSON file.", - "PRE": "DB session factory is available.", - "POST": "isinstance(return, AppConfig)", - "RETURN": "AppConfig - Loaded configuration." + "PURPOSE": "Load configuration from DB or perform one-time migration from legacy JSON.", + "PRE": "SessionLocal factory is available and AppConfigRecord schema is accessible.", + "POST": "Returns valid AppConfig and closes opened DB session.", + "SIDE_EFFECT": "Database read/write, possible migration write, logging.", + "DATA_CONTRACT": "Input(None) -> Output(AppConfig)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 91 + "line_number": 100 } ], "score": 0.0 @@ -43766,123 +43679,94 @@ "name": "_save_config_to_db", "type": "Function", "tier": "CRITICAL", - "start_line": 116, - "end_line": 145, + "start_line": 126, + "end_line": 155, "tags": { - "PURPOSE": "Saves the provided configuration object to DB.", - "PRE": "isinstance(config, AppConfig)", - "POST": "Configuration saved to database.", - "PARAM": "session (Optional[Session]) - Existing DB session for transactional reuse." + "PURPOSE": "Persist provided AppConfig into the global DB configuration record.", + "PRE": "config is AppConfig; session is either None or an active Session.", + "POST": "Global DB record payload equals config.model_dump() when commit succeeds.", + "SIDE_EFFECT": "Database insert/update, commit/rollback, logging.", + "DATA_CONTRACT": "Input(AppConfig, Optional[Session]) -> Output(None)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 126 } ], "score": 0.0 @@ -43892,122 +43776,94 @@ "name": "save", "type": "Function", "tier": "CRITICAL", - "start_line": 147, - "end_line": 154, + "start_line": 157, + "end_line": 166, "tags": { - "PURPOSE": "Saves the current configuration state to DB.", - "PRE": "self.config is set.", - "POST": "self._save_config_to_db called." + "PURPOSE": "Persist current in-memory configuration state.", + "PRE": "self.config is initialized.", + "POST": "Current self.config is written to DB global record.", + "SIDE_EFFECT": "Database write and logging via delegated persistence call.", + "DATA_CONTRACT": "Input(None; self.config: AppConfig) -> Output(None)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 147 + "line_number": 157 } ], "score": 0.0 @@ -44017,151 +43873,94 @@ "name": "get_config", "type": "Function", "tier": "CRITICAL", - "start_line": 156, - "end_line": 162, + "start_line": 168, + "end_line": 177, "tags": { - "PURPOSE": "Returns the current configuration.", - "RETURN": "AppConfig - The current configuration." + "PURPOSE": "Return current in-memory configuration snapshot.", + "PRE": "self.config is initialized.", + "POST": "Returns AppConfig reference stored in manager.", + "SIDE_EFFECT": "None.", + "DATA_CONTRACT": "Input(None) -> Output(AppConfig)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 156 + "line_number": 168 } ], "score": 0.0 @@ -44171,123 +43970,94 @@ "name": "update_global_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 164, - "end_line": 178, + "start_line": 179, + "end_line": 194, "tags": { - "PURPOSE": "Updates the global settings and persists the change.", - "PRE": "isinstance(settings, GlobalSettings)", - "POST": "self.config.settings updated and saved.", - "PARAM": "settings (GlobalSettings) - The new global settings." + "PURPOSE": "Replace global settings and persist the resulting configuration.", + "PRE": "settings is GlobalSettings.", + "POST": "self.config.settings equals provided settings and DB state is updated.", + "SIDE_EFFECT": "Mutates self.config, DB write, logger reconfiguration, logging.", + "DATA_CONTRACT": "Input(GlobalSettings) -> Output(None)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 164 + "line_number": 179 } ], "score": 0.0 @@ -44297,152 +44067,94 @@ "name": "validate_path", "type": "Function", "tier": "CRITICAL", - "start_line": 180, - "end_line": 197, + "start_line": 196, + "end_line": 215, "tags": { - "PURPOSE": "Validates if a path exists and is writable.", - "PARAM": "path (str) - The path to validate.", - "RETURN": "tuple (bool, str) - (is_valid, message)" + "PURPOSE": "Validate that path exists and is writable, creating it when absent.", + "PRE": "path is a string path candidate.", + "POST": "Returns (True, msg) for writable path, else (False, reason).", + "SIDE_EFFECT": "Filesystem directory creation attempt and OS permission checks.", + "DATA_CONTRACT": "Input(str path) -> Output(tuple[bool, str])" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 180 + "line_number": 196 } ], "score": 0.0 @@ -44452,151 +44164,94 @@ "name": "get_environments", "type": "Function", "tier": "CRITICAL", - "start_line": 199, - "end_line": 205, + "start_line": 217, + "end_line": 226, "tags": { - "PURPOSE": "Returns the list of configured environments.", - "RETURN": "List[Environment] - List of environments." + "PURPOSE": "Return all configured environments.", + "PRE": "self.config is initialized.", + "POST": "Returns list of Environment models from current configuration.", + "SIDE_EFFECT": "None.", + "DATA_CONTRACT": "Input(None) -> Output(List[Environment])" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 199 + "line_number": 217 } ], "score": 0.0 @@ -44606,151 +44261,94 @@ "name": "has_environments", "type": "Function", "tier": "CRITICAL", - "start_line": 207, - "end_line": 213, + "start_line": 228, + "end_line": 237, "tags": { - "PURPOSE": "Checks if at least one environment is configured.", - "RETURN": "bool - True if at least one environment exists." + "PURPOSE": "Check whether at least one environment exists in configuration.", + "PRE": "self.config is initialized.", + "POST": "Returns True iff environment list length is greater than zero.", + "SIDE_EFFECT": "None.", + "DATA_CONTRACT": "Input(None) -> Output(bool)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 207 + "line_number": 228 } ], "score": 0.0 @@ -44760,152 +44358,94 @@ "name": "get_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 215, - "end_line": 225, + "start_line": 239, + "end_line": 251, "tags": { - "PURPOSE": "Returns a single environment by ID.", - "PARAM": "env_id (str) - The ID of the environment to retrieve.", - "RETURN": "Optional[Environment] - The environment with the given ID, or None." + "PURPOSE": "Resolve a configured environment by identifier.", + "PRE": "env_id is string identifier.", + "POST": "Returns matching Environment when found; otherwise None.", + "SIDE_EFFECT": "None.", + "DATA_CONTRACT": "Input(str env_id) -> Output(Optional[Environment])" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 215 + "line_number": 239 } ], "score": 0.0 @@ -44915,151 +44455,94 @@ "name": "add_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 227, - "end_line": 239, + "start_line": 253, + "end_line": 268, "tags": { - "PURPOSE": "Adds a new environment to the configuration.", - "PARAM": "env (Environment) - The environment to add." + "PURPOSE": "Upsert environment by id into configuration and persist.", + "PRE": "env is Environment.", + "POST": "Configuration contains provided env id with new payload persisted.", + "SIDE_EFFECT": "Mutates environment list, DB write, logging.", + "DATA_CONTRACT": "Input(Environment) -> Output(None)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 227 + "line_number": 253 } ], "score": 0.0 @@ -45069,152 +44552,94 @@ "name": "update_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 241, - "end_line": 264, + "start_line": 270, + "end_line": 294, "tags": { - "PURPOSE": "Updates an existing environment.", - "PARAM": "updated_env (Environment) - The updated environment data.", - "RETURN": "bool - True if updated, False otherwise." + "PURPOSE": "Update existing environment by id and preserve masked password placeholder behavior.", + "PRE": "env_id is non-empty string and updated_env is Environment.", + "POST": "Returns True and persists update when target exists; else returns False.", + "SIDE_EFFECT": "May mutate environment list, DB write, logging.", + "DATA_CONTRACT": "Input(str env_id, Environment updated_env) -> Output(bool)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 241 + "line_number": 270 } ], "score": 0.0 @@ -45224,151 +44649,94 @@ "name": "delete_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 266, - "end_line": 282, + "start_line": 296, + "end_line": 315, "tags": { - "PURPOSE": "Deletes an environment by ID.", - "PARAM": "env_id (str) - The ID of the environment to delete." + "PURPOSE": "Delete environment by id and persist when deletion occurs.", + "PRE": "env_id is non-empty string.", + "POST": "Environment is removed when present; otherwise configuration is unchanged.", + "SIDE_EFFECT": "May mutate environment list, conditional DB write, logging.", + "DATA_CONTRACT": "Input(str env_id) -> Output(None)" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 266 + "line_number": 296 } ], "score": 0.0 @@ -45381,22 +44749,22 @@ { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 28 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 28 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 28 } ], "score": 0.0 @@ -45405,8 +44773,14 @@ ], "compliance": { "valid": true, - "issues": [], - "score": 0.95 + "issues": [ + { + "message": "Fractal limit warning: Module length is 319 lines (must be < 300)", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.8 } }, { @@ -48235,17 +47609,30 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 222, + "end_line": 245, "tags": { - "SEMANTICS": "migration, engine, zip, yaml, transformation", - "PURPOSE": "Handles the interception and transformation of Superset asset ZIP archives.", - "LAYER": "Core", - "INVARIANT": "ZIP structure must be preserved after transformation." + "TIER": "CRITICAL", + "SEMANTICS": "migration, engine, zip, yaml, transformation, cross-filter, id-mapping", + "PURPOSE": "Transforms Superset export ZIP archives while preserving archive integrity and patching mapped identifiers.", + "LAYER": "Domain", + "INVARIANT": "ZIP structure and non-targeted metadata must remain valid after transformation." }, "relations": [ { "type": "DEPENDS_ON", - "target": "PyYAML" + "target": "src.core.logger" + }, + { + "type": "DEPENDS_ON", + "target": "src.core.mapping_service.IdMappingService" + }, + { + "type": "DEPENDS_ON", + "target": "src.models.mapping.ResourceType" + }, + { + "type": "DEPENDS_ON", + "target": "yaml" } ], "children": [ @@ -48253,8 +47640,8 @@ "name": "MigrationEngine", "type": "Class", "tier": "CRITICAL", - "start_line": 24, - "end_line": 220, + "start_line": 28, + "end_line": 243, "tags": { "PURPOSE": "Engine for transforming Superset export ZIPs." }, @@ -48264,10 +47651,14 @@ "name": "__init__", "type": "Function", "tier": "CRITICAL", - "start_line": 28, - "end_line": 33, + "start_line": 32, + "end_line": 42, "tags": { - "PURPOSE": "Initializes the migration engine with optional ID mapping service.", + "PURPOSE": "Initializes migration orchestration dependencies for ZIP/YAML metadata transformations.", + "PRE": "mapping_service is None or implements batch remote ID lookup for ResourceType.CHART.", + "POST": "self.mapping_service is assigned and available for optional cross-filter patching flows.", + "SIDE_EFFECT": "Mutates in-memory engine state by storing dependency reference.", + "DATA_CONTRACT": "Input[Optional[IdMappingService]] -> Output[MigrationEngine]", "PARAM": "mapping_service (Optional[IdMappingService]) - Used for resolving target environment integer IDs." }, "relations": [], @@ -48275,140 +47666,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 28 + "line_number": 32 } ], "score": 0.0 @@ -48418,13 +47749,15 @@ "name": "transform_zip", "type": "Function", "tier": "CRITICAL", - "start_line": 35, - "end_line": 102, + "start_line": 44, + "end_line": 113, "tags": { "PURPOSE": "Extracts ZIP, replaces database UUIDs in YAMLs, patches cross-filters, and re-packages.", "PARAM": "fix_cross_filters (bool) - Whether to patch dashboard json_metadata.", - "PRE": "zip_path must point to a valid Superset export archive.", - "POST": "Transformed archive is saved to output_path.", + "PRE": "zip_path points to a readable ZIP; output_path parent is writable; db_mapping keys/values are UUID strings.", + "POST": "Returns True only when extraction, transformation, and packaging complete without exception.", + "SIDE_EFFECT": "Reads/writes filesystem archives, creates temporary directory, emits structured logs.", + "DATA_CONTRACT": "Input[(str zip_path, str output_path, Dict[str,str] db_mapping, bool strip_databases, Optional[str] target_env_id, bool fix_cross_filters)] -> Output[bool]", "RETURN": "bool - True if successful." }, "relations": [], @@ -48432,110 +47765,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 35 + "line_number": 44 } ], "score": 0.0 @@ -48545,138 +47848,95 @@ "name": "_transform_yaml", "type": "Function", "tier": "CRITICAL", - "start_line": 104, - "end_line": 124, + "start_line": 115, + "end_line": 138, "tags": { "PURPOSE": "Replaces database_uuid in a single YAML file.", "PARAM": "db_mapping (Dict[str, str]) - UUID mapping dictionary.", - "PRE": "file_path must exist and be readable.", - "POST": "File is modified in-place if source UUID matches mapping." + "PRE": "file_path exists, is readable YAML, and db_mapping contains source->target UUID pairs.", + "POST": "database_uuid is replaced in-place only when source UUID is present in db_mapping.", + "SIDE_EFFECT": "Reads and conditionally rewrites YAML file on disk.", + "DATA_CONTRACT": "Input[(Path file_path, Dict[str,str] db_mapping)] -> Output[None]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 + "line_number": 115 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 104 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 104 + "line_number": 115 } ], "score": 0.0 @@ -48686,11 +47946,15 @@ "name": "_extract_chart_uuids_from_archive", "type": "Function", "tier": "CRITICAL", - "start_line": 126, - "end_line": 146, + "start_line": 140, + "end_line": 165, "tags": { - "PURPOSE": "Scans the unpacked ZIP to map local exported integer IDs back to their UUIDs.", - "PARAM": "temp_dir (Path) - Root dir of unpacked archive", + "PURPOSE": "Scans extracted chart YAML files and builds a source chart ID to UUID lookup map.", + "PRE": "temp_dir exists and points to extracted archive root with optional chart YAML resources.", + "POST": "Returns a best-effort Dict[int, str] containing only parseable chart id/uuid pairs.", + "SIDE_EFFECT": "Reads chart YAML files from filesystem; suppresses per-file parsing failures.", + "DATA_CONTRACT": "Input[Path] -> Output[Dict[int,str]]", + "PARAM": "temp_dir (Path) - Root dir of unpacked archive.", "RETURN": "Dict[int, str] - Mapping of source Integer ID to UUID." }, "relations": [], @@ -48698,155 +47962,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 126 + "line_number": 140 } ], "score": 0.0 @@ -48856,10 +48045,14 @@ "name": "_patch_dashboard_metadata", "type": "Function", "tier": "CRITICAL", - "start_line": 148, - "end_line": 218, + "start_line": 167, + "end_line": 241, "tags": { - "PURPOSE": "Replaces integer IDs in json_metadata.", + "PURPOSE": "Rewrites dashboard json_metadata chart/dataset integer identifiers using target environment mappings.", + "PRE": "file_path points to dashboard YAML with json_metadata; target_env_id is non-empty; source_map contains source id->uuid.", + "POST": "json_metadata is re-serialized with mapped integer IDs when remote mappings are available; otherwise file remains unchanged.", + "SIDE_EFFECT": "Reads/writes YAML file, performs mapping lookup via mapping_service, emits logs for recoverable/terminal failures.", + "DATA_CONTRACT": "Input[(Path file_path, str target_env_id, Dict[int,str] source_map)] -> Output[None]", "PARAM": "source_map (Dict[int, str])" }, "relations": [], @@ -48867,140 +48060,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 148 + "line_number": 167 } ], "score": 0.0 @@ -49013,32 +48146,32 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 24 + "line_number": 28 } ], "score": 0.0 @@ -49046,15 +48179,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.4 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -51339,21 +50466,30 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 156, + "end_line": 166, "tags": { - "SEMANTICS": "auth, repository, database, user, role", - "PURPOSE": "Data access layer for authentication-related entities.", - "LAYER": "Core", - "INVARIANT": "All database operations must be performed within a session." + "TIER": "CRITICAL", + "SEMANTICS": "auth, repository, database, user, role, permission", + "PURPOSE": "Data access layer for authentication and user preference entities.", + "LAYER": "Domain", + "INVARIANT": "All database read/write operations must execute via the injected SQLAlchemy session boundary." }, "relations": [ { "type": "DEPENDS_ON", - "target": "sqlalchemy" + "target": "sqlalchemy.orm.Session" }, { - "type": "USES", + "type": "DEPENDS_ON", "target": "backend.src.models.auth" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.profile" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.logger.belief_scope" } ], "children": [ @@ -51361,162 +50497,110 @@ "name": "AuthRepository", "type": "Class", "tier": "CRITICAL", - "start_line": 19, - "end_line": 154, + "start_line": 23, + "end_line": 165, "tags": { - "PURPOSE": "Encapsulates database operations for authentication." + "PURPOSE": "Encapsulates database operations for authentication-related entities." }, - "relations": [], + "relations": [ + { + "type": "DEPENDS_ON", + "target": "sqlalchemy.orm.Session" + } + ], "children": [ { "name": "__init__", "type": "Function", "tier": "CRITICAL", - "start_line": 22, - "end_line": 27, + "start_line": 27, + "end_line": 36, "tags": { - "PURPOSE": "Initializes the repository with a database session.", - "PARAM": "db (Session) - SQLAlchemy session." + "PURPOSE": "Bind repository instance to an existing SQLAlchemy session.", + "PRE": "db is an initialized sqlalchemy.orm.Session instance.", + "POST": "self.db points to the provided session and is used by all repository methods.", + "SIDE_EFFECT": "Stores session reference on repository instance state.", + "DATA_CONTRACT": "Input[Session] -> Output[None]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 27 } ], "score": 0.0 @@ -51526,124 +50610,94 @@ "name": "get_user_by_username", "type": "Function", "tier": "CRITICAL", - "start_line": 29, - "end_line": 38, + "start_line": 38, + "end_line": 47, "tags": { - "PURPOSE": "Retrieves a user by their username.", - "PRE": "username is a string.", - "POST": "Returns User object if found, else None.", - "PARAM": "username (str) - The username to search for.", - "RETURN": "Optional[User] - The found user or None." + "PURPOSE": "Retrieve a user entity by unique username.", + "PRE": "username is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching User entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[User]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 29 + "line_number": 38 } ], "score": 0.0 @@ -51653,124 +50707,94 @@ "name": "get_user_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 40, - "end_line": 49, + "start_line": 49, + "end_line": 58, "tags": { - "PURPOSE": "Retrieves a user by their unique ID.", - "PRE": "user_id is a valid UUID string.", - "POST": "Returns User object if found, else None.", - "PARAM": "user_id (str) - The user's unique identifier.", - "RETURN": "Optional[User] - The found user or None." + "PURPOSE": "Retrieve a user entity by identifier.", + "PRE": "user_id is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching User entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[User]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 40 + "line_number": 49 } ], "score": 0.0 @@ -51780,124 +50804,94 @@ "name": "get_role_by_name", "type": "Function", "tier": "CRITICAL", - "start_line": 51, - "end_line": 60, + "start_line": 60, + "end_line": 69, "tags": { - "PURPOSE": "Retrieves a role by its name.", - "PRE": "name is a string.", - "POST": "Returns Role object if found, else None.", - "PARAM": "name (str) - The role name to search for.", - "RETURN": "Optional[Role] - The found role or None." + "PURPOSE": "Retrieve a role entity by role name.", + "PRE": "name is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching Role entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[Role]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 51 + "line_number": 60 } ], "score": 0.0 @@ -51907,109 +50901,94 @@ "name": "update_last_login", "type": "Function", "tier": "CRITICAL", - "start_line": 62, - "end_line": 74, + "start_line": 71, + "end_line": 83, "tags": { - "PURPOSE": "Updates the last_login timestamp for a user.", - "PRE": "user object is a valid User instance.", - "POST": "User's last_login is updated in the database.", - "SIDE_EFFECT": "Commits the transaction.", - "PARAM": "user (User) - The user to update." + "PURPOSE": "Update last_login timestamp for the provided user entity.", + "PRE": "user is a managed User instance and self.db is a valid open Session.", + "POST": "user.last_login is set to current UTC timestamp and transaction is committed.", + "SIDE_EFFECT": "Mutates user entity state and commits database transaction.", + "DATA_CONTRACT": "Input[User] -> Output[None]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 62 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 62 + "line_number": 71 } ], "score": 0.0 @@ -52019,124 +50998,94 @@ "name": "get_role_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 76, - "end_line": 85, + "start_line": 85, + "end_line": 94, "tags": { - "PURPOSE": "Retrieves a role by its unique ID.", - "PRE": "role_id is a string.", - "POST": "Returns Role object if found, else None.", - "PARAM": "role_id (str) - The role's unique identifier.", - "RETURN": "Optional[Role] - The found role or None." + "PURPOSE": "Retrieve a role entity by identifier.", + "PRE": "role_id is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching Role entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[Role]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 76 + "line_number": 85 } ], "score": 0.0 @@ -52146,124 +51095,94 @@ "name": "get_permission_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 87, - "end_line": 96, + "start_line": 96, + "end_line": 105, "tags": { - "PURPOSE": "Retrieves a permission by its unique ID.", - "PRE": "perm_id is a string.", - "POST": "Returns Permission object if found, else None.", - "PARAM": "perm_id (str) - The permission's unique identifier.", - "RETURN": "Optional[Permission] - The found permission or None." + "PURPOSE": "Retrieve a permission entity by identifier.", + "PRE": "perm_id is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching Permission entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[Permission]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 87 + "line_number": 96 } ], "score": 0.0 @@ -52273,124 +51192,94 @@ "name": "get_permission_by_resource_action", "type": "Function", "tier": "CRITICAL", - "start_line": 98, - "end_line": 111, + "start_line": 107, + "end_line": 119, "tags": { - "PURPOSE": "Retrieves a permission by resource and action.", - "PRE": "resource and action are strings.", - "POST": "Returns Permission object if found, else None.", - "PARAM": "action (str) - The action name.", - "RETURN": "Optional[Permission] - The found permission or None." + "PURPOSE": "Retrieve a permission entity by resource and action pair.", + "PRE": "resource and action are non-empty str values; self.db is a valid open Session.", + "POST": "Returns matching Permission entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str, str] -> Output[Optional[Permission]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 98 + "line_number": 107 } ], "score": 0.0 @@ -52400,124 +51289,94 @@ "name": "get_user_dashboard_preference", "type": "Function", "tier": "CRITICAL", - "start_line": 113, - "end_line": 126, + "start_line": 121, + "end_line": 134, "tags": { - "PURPOSE": "Retrieves dashboard preference by owner user ID.", - "PRE": "user_id is a string.", - "POST": "Returns UserDashboardPreference if found, else None.", - "PARAM": "user_id (str) - Preference owner identifier.", - "RETURN": "Optional[UserDashboardPreference] - Found preference or None." + "PURPOSE": "Retrieve dashboard preference entity owned by specified user.", + "PRE": "user_id is a non-empty str and self.db is a valid open Session.", + "POST": "Returns matching UserDashboardPreference entity when present, otherwise None.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[str] -> Output[Optional[UserDashboardPreference]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 113 + "line_number": 121 } ], "score": 0.0 @@ -52527,124 +51386,94 @@ "name": "save_user_dashboard_preference", "type": "Function", "tier": "CRITICAL", - "start_line": 128, - "end_line": 143, + "start_line": 136, + "end_line": 151, "tags": { - "PURPOSE": "Persists dashboard preference entity and returns refreshed row.", - "PRE": "preference is a valid UserDashboardPreference entity.", - "POST": "Preference is committed and refreshed in database.", - "PARAM": "preference (UserDashboardPreference) - Preference entity to persist.", - "RETURN": "UserDashboardPreference - Persisted preference row." + "PURPOSE": "Persist dashboard preference entity and return refreshed persistent row.", + "PRE": "preference is a valid UserDashboardPreference entity and self.db is a valid open Session.", + "POST": "preference is committed to DB, refreshed from DB state, and returned.", + "SIDE_EFFECT": "Performs INSERT/UPDATE commit and refresh via active DB session.", + "DATA_CONTRACT": "Input[UserDashboardPreference] -> Output[UserDashboardPreference]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 128 + "line_number": 136 } ], "score": 0.0 @@ -52654,137 +51483,94 @@ "name": "list_permissions", "type": "Function", "tier": "CRITICAL", - "start_line": 145, - "end_line": 152, + "start_line": 153, + "end_line": 162, "tags": { - "PURPOSE": "Lists all available permissions.", - "POST": "Returns a list of all Permission objects.", - "RETURN": "List[Permission] - List of permissions." + "PURPOSE": "List all permission entities available in storage.", + "PRE": "self.db is a valid open Session.", + "POST": "Returns list containing all Permission entities visible to the session.", + "SIDE_EFFECT": "Executes read-only SELECT query through active DB session.", + "DATA_CONTRACT": "Input[None] -> Output[List[Permission]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 145 + "line_number": 153 } ], "score": 0.0 @@ -52797,32 +51583,32 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 19 + "line_number": 23 } ], "score": 0.0 @@ -52830,20 +51616,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -56800,7 +55575,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 281, "tags": { "TIER": "STANDARD", "PURPOSE": "Unit tests for logger module", @@ -57098,177 +55873,25 @@ "type": "Function", "tier": "STANDARD", "start_line": 202, - "end_line": null, + "end_line": 228, "tags": { "PURPOSE": "Test that enable_belief_state flag controls belief_scope logging.", "PRE": "LoggingConfig is available. caplog fixture is used.", "POST": "belief_scope logs are controlled by the flag." }, "relations": [], - "children": [ - { - "name": "test_belief_scope_missing_anchor", - "type": "Function", - "tier": "STANDARD", - "start_line": 231, - "end_line": 241, - "tags": { - "PURPOSE": "Test @PRE condition: anchor_id must be provided" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 231 - } - ], - "score": 0.0 - } - }, - { - "name": "test_configure_logger_post_conditions", - "type": "Function", - "tier": "STANDARD", - "start_line": 243, - "end_line": 279, - "tags": { - "PURPOSE": "Test @POST condition: Logger level, handlers, belief state flag, and task log level are updated." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 243 - } - ], - "score": 0.0 - } - } - ], + "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:test_enable_belief_state_flag:Function] started at line 202", - "severity": "ERROR", + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 202 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", "line_number": 202 }, { @@ -57280,21 +55903,122 @@ "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", "line_number": 202 + } + ], + "score": 0.28 + } + }, + { + "name": "test_belief_scope_missing_anchor", + "type": "Function", + "tier": "STANDARD", + "start_line": 231, + "end_line": 241, + "tags": { + "PURPOSE": "Test @PRE condition: anchor_id must be provided" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 }, { - "message": "Unclosed Anchor: [DEF:test_enable_belief_state_flag:Function] started at line 202", - "severity": "ERROR", - "line_number": 202 + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 202 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 202 + "line_number": 231 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 231 + } + ], + "score": 0.0 + } + }, + { + "name": "test_configure_logger_post_conditions", + "type": "Function", + "tier": "STANDARD", + "start_line": 243, + "end_line": 279, + "tags": { + "PURPOSE": "Test @POST condition: Logger level, handlers, belief state flag, and task log level are updated." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 243 } ], "score": 0.0 @@ -57320,13 +56044,8 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_logger:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Missing Mandatory Tag: @SEMANTICS (required for STANDARD tier)", "severity": "WARNING", @@ -57338,7 +56057,7 @@ "line_number": 1 } ], - "score": 0.0 + "score": 0.58 } }, { @@ -59130,17 +57849,30 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 119, + "end_line": 171, "tags": { - "TIER": "STANDARD", - "SEMANTICS": "migration, dry_run, risk, scoring", - "PURPOSE": "Risk evaluation helpers for migration pre-flight reporting.", - "LAYER": "Core" + "TIER": "CRITICAL", + "SEMANTICS": "migration, dry_run, risk, scoring, preflight", + "PURPOSE": "Compute deterministic migration risk items and aggregate score for dry-run reporting.", + "LAYER": "Domain", + "INVARIANT": "Risk scoring must remain bounded to [0,100] and preserve severity-to-weight mapping.", + "TEST_CONTRACT": "[source_objects,target_objects,diff,target_client] -> [List[RiskItem]]", + "TEST_SCENARIO": "[owner_mismatch_dashboard] -> [low owner_mismatch risk is emitted]", + "TEST_EDGE": "[external_fail] -> [target_client get_databases exception propagates to caller]", + "TEST_INVARIANT": "[score_upper_bound_100] -> VERIFIED_BY: [severity_weight_aggregation]", + "UX_STATE": "[Idle] -> [N/A backend domain module]", + "UX_FEEDBACK": "[N/A] -> [No direct UI side effects in this module]", + "UX_RECOVERY": "[N/A] -> [Caller-level retry/recovery]", + "UX_REACTIVITY": "[N/A] -> [Backend synchronous function contracts]" }, "relations": [ { - "type": "USED_BY", - "target": "backend.src.core.migration.dry_run_orchestrator" + "type": "DEPENDS_ON", + "target": "backend.src.core.superset_client.SupersetClient" + }, + { + "type": "DISPATCHES", + "target": "backend.src.core.migration.dry_run_orchestrator.MigrationDryRunService.run" } ], "children": [ @@ -59148,115 +57880,69 @@ "name": "index_by_uuid", "type": "Function", "tier": "CRITICAL", - "start_line": 13, - "end_line": 22, + "start_line": 28, + "end_line": 44, "tags": { - "PURPOSE": "Build UUID-index from normalized objects." + "PURPOSE": "Build UUID-index from normalized objects.", + "PRE": "Input list items are dict-like payloads potentially containing \"uuid\".", + "POST": "Returns mapping keyed by string uuid; only truthy uuid values are included.", + "SIDE_EFFECT": "Emits reasoning/reflective logs only.", + "DATA_CONTRACT": "List[Dict[str, Any]] -> Dict[str, Dict[str, Any]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 13 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 13 + "line_number": 28 } ], "score": 0.0 @@ -59266,115 +57952,69 @@ "name": "extract_owner_identifiers", "type": "Function", "tier": "CRITICAL", - "start_line": 25, - "end_line": 40, + "start_line": 47, + "end_line": 71, "tags": { - "PURPOSE": "Normalize owner payloads for stable comparison." + "PURPOSE": "Normalize owner payloads for stable comparison.", + "PRE": "Owners may be list payload, scalar values, or None.", + "POST": "Returns sorted unique owner identifiers as strings.", + "SIDE_EFFECT": "Emits reasoning/reflective logs only.", + "DATA_CONTRACT": "Any -> List[str]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 47 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 + "line_number": 47 } ], "score": 0.0 @@ -59384,115 +58024,69 @@ "name": "build_risks", "type": "Function", "tier": "CRITICAL", - "start_line": 43, - "end_line": 106, + "start_line": 74, + "end_line": 150, "tags": { - "PURPOSE": "Build risk list from computed diffs and target catalog state." + "PURPOSE": "Build risk list from computed diffs and target catalog state.", + "PRE": "target_client is authenticated/usable for database list retrieval.", + "POST": "Returns list of deterministic risk items derived from overwrite, missing datasource, reference, and owner mismatch checks.", + "SIDE_EFFECT": "Calls target Superset API for databases metadata and emits logs.", + "DATA_CONTRACT": ") -> List[Dict[str, Any]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 + "line_number": 74 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 43 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 43 + "line_number": 74 } ], "score": 0.0 @@ -59502,115 +58096,69 @@ "name": "score_risks", "type": "Function", "tier": "CRITICAL", - "start_line": 109, - "end_line": 116, + "start_line": 153, + "end_line": 168, "tags": { - "PURPOSE": "Aggregate risk list into score and level." + "PURPOSE": "Aggregate risk list into score and level.", + "PRE": "risk_items contains optional severity fields expected in {high,medium,low} or defaults to low weight.", + "POST": "Returns dict with score in [0,100], derived level, and original items.", + "SIDE_EFFECT": "Emits reasoning/reflective logs only.", + "DATA_CONTRACT": "List[Dict[str, Any]] -> Dict[str, Any]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 + "line_number": 153 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 109 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 109 + "line_number": 153 } ], "score": 0.0 @@ -59618,25 +58166,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: USED_BY. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing @INVARIANT tag (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -66945,21 +65477,46 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 263, + "end_line": 292, "tags": { - "TIER": "STANDARD", - "SEMANTICS": "api, migration, dashboards", - "PURPOSE": "API endpoints for migration operations.", - "LAYER": "API" + "TIER": "CRITICAL", + "SEMANTICS": "api, migration, dashboards, sync, dry-run", + "PURPOSE": "HTTP contract layer for migration orchestration, settings, dry-run, and mapping sync endpoints.", + "LAYER": "Infra", + "INVARIANT": "Migration endpoints never execute with invalid environment references and always return explicit HTTP errors on guard failures.", + "TEST_CONTRACT": "[DashboardSelection + configured envs] -> [task_id | dry-run result | sync summary]", + "TEST_SCENARIO": "[valid_execution] -> [success_payload_with_required_fields]", + "TEST_EDGE": "[external_fail] ->[HTTP_500]", + "TEST_INVARIANT": "[EnvironmentValidationBeforeAction] -> VERIFIED_BY: [invalid_environment, valid_execution]" }, "relations": [ { "type": "DEPENDS_ON", "target": "backend.src.dependencies" }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.database" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.superset_client" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.migration.dry_run_orchestrator" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.core.mapping_service" + }, { "type": "DEPENDS_ON", "target": "backend.src.models.dashboard" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.mapping" } ], "children": [ @@ -66967,89 +65524,69 @@ "name": "get_dashboards", "type": "Function", "tier": "CRITICAL", - "start_line": 23, - "end_line": 44, + "start_line": 36, + "end_line": 57, "tags": { - "PURPOSE": "Fetch all dashboards from the specified environment for the grid.", - "PRE": "Environment ID must be valid.", - "POST": "Returns a list of dashboard metadata.", - "PARAM": "env_id (str) - The ID of the environment to fetch from.", - "RETURN": "List[DashboardMetadata]" + "PURPOSE": "Fetch dashboard metadata from a requested environment for migration selection UI.", + "PRE": "env_id is provided and exists in configured environments.", + "POST": "Returns List[DashboardMetadata] for the resolved environment; emits HTTP_404 when environment is absent.", + "SIDE_EFFECT": "Reads environment configuration and performs remote Superset metadata retrieval over network.", + "DATA_CONTRACT": "Input[str env_id] -> Output[List[DashboardMetadata]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 23 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 23 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 23 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 23 + "line_number": 36 } ], "score": 0.0 @@ -67059,89 +65596,69 @@ "name": "execute_migration", "type": "Function", "tier": "CRITICAL", - "start_line": 46, - "end_line": 85, + "start_line": 59, + "end_line": 98, "tags": { - "PURPOSE": "Execute the migration of selected dashboards.", - "PRE": "Selection must be valid and environments must exist.", - "POST": "Starts the migration task and returns the task ID.", - "PARAM": "selection (DashboardSelection) - The dashboards to migrate.", - "RETURN": "Dict - {\"task_id\": str, \"message\": str}" + "PURPOSE": "Validate migration selection and enqueue asynchronous migration task execution.", + "PRE": "DashboardSelection payload is valid and both source/target environments exist.", + "POST": "Returns {\"task_id\": str, \"message\": str} when task creation succeeds; emits HTTP_400/HTTP_500 on failure.", + "SIDE_EFFECT": "Reads configuration, writes task record through task manager, and writes operational logs.", + "DATA_CONTRACT": "Input[DashboardSelection] -> Output[Dict[str, str]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 46 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 46 + "line_number": 59 } ], "score": 0.0 @@ -67151,87 +65668,69 @@ "name": "dry_run_migration", "type": "Function", "tier": "CRITICAL", - "start_line": 88, - "end_line": 123, + "start_line": 101, + "end_line": 138, "tags": { - "PURPOSE": "Build pre-flight diff and risk summary without applying migration.", - "PRE": "Selection and environments are valid.", - "POST": "Returns deterministic JSON diff and risk scoring." + "PURPOSE": "Build pre-flight migration diff and risk summary without mutating target systems.", + "PRE": "DashboardSelection is valid, source and target environments exist, differ, and selected_ids is non-empty.", + "POST": "Returns deterministic dry-run payload; emits HTTP_400 for guard violations and HTTP_500 for orchestrator value errors.", + "SIDE_EFFECT": "Reads local mappings from DB and fetches source/target metadata via Superset API.", + "DATA_CONTRACT": "Input[DashboardSelection] -> Output[Dict[str, Any]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 88 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 88 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 88 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 88 + "line_number": 101 } ], "score": 0.0 @@ -67241,105 +65740,69 @@ "name": "get_migration_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 125, - "end_line": 136, + "start_line": 140, + "end_line": 155, "tags": { - "PURPOSE": "Get current migration Cron string explicitly." + "PURPOSE": "Read and return configured migration synchronization cron expression.", + "PRE": "Configuration store is available and requester has READ permission.", + "POST": "Returns {\"cron\": str} reflecting current persisted settings value.", + "SIDE_EFFECT": "Reads configuration from config manager.", + "DATA_CONTRACT": "Input[None] -> Output[Dict[str, str]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 125 + "line_number": 140 } ], "score": 0.0 @@ -67349,105 +65812,69 @@ "name": "update_migration_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 138, - "end_line": 157, + "start_line": 157, + "end_line": 180, "tags": { - "PURPOSE": "Update migration Cron string." + "PURPOSE": "Validate and persist migration synchronization cron expression update.", + "PRE": "Payload includes \"cron\" key and requester has WRITE permission.", + "POST": "Returns {\"cron\": str, \"status\": \"updated\"} and persists updated cron value.", + "SIDE_EFFECT": "Mutates configuration and writes persisted config through config manager.", + "DATA_CONTRACT": "Input[Dict[str, str]] -> Output[Dict[str, str]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 138 + "line_number": 157 } ], "score": 0.0 @@ -67457,105 +65884,69 @@ "name": "get_resource_mappings", "type": "Function", "tier": "CRITICAL", - "start_line": 159, - "end_line": 203, + "start_line": 182, + "end_line": 230, "tags": { - "PURPOSE": "Fetch synchronized object mappings with search, filtering, and pagination." + "PURPOSE": "Fetch synchronized resource mappings with optional filters and pagination for migration mappings view.", + "PRE": "skip>=0, 1<=limit<=500, DB session is active, requester has READ permission.", + "POST": "Returns {\"items\": [...], \"total\": int} where items reflect applied filters and pagination.", + "SIDE_EFFECT": "Executes database read queries against ResourceMapping table.", + "DATA_CONTRACT": "Input[QueryParams] -> Output[Dict[str, Any]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 159 + "line_number": 182 } ], "score": 0.0 @@ -67565,87 +65956,69 @@ "name": "trigger_sync_now", "type": "Function", "tier": "CRITICAL", - "start_line": 205, - "end_line": 261, + "start_line": 232, + "end_line": 290, "tags": { - "PURPOSE": "Triggers an immediate ID synchronization for all environments.", - "PRE": "At least one environment must be configured.", - "POST": "Environment rows are ensured in DB; sync_environment is called for each." + "PURPOSE": "Trigger immediate ID synchronization for every configured environment.", + "PRE": "At least one environment is configured and requester has EXECUTE permission.", + "POST": "Returns sync summary with synced/failed counts after attempting all environments.", + "SIDE_EFFECT": "Upserts Environment rows, commits DB transaction, performs network sync calls, and writes logs.", + "DATA_CONTRACT": "Input[None] -> Output[Dict[str, Any]]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 205 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 205 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 205 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 205 + "line_number": 232 } ], "score": 0.0 @@ -67653,20 +66026,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing @INVARIANT tag (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -70487,7 +68849,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 2172, "tags": { "TIER": "STANDARD", "SEMANTICS": "api, assistant, chat, command, confirmation", @@ -71941,639 +70303,17 @@ "type": "Function", "tier": "STANDARD", "start_line": 1084, - "end_line": null, + "end_line": 1176, "tags": { "PURPOSE": "Build human-readable confirmation prompt for an intent before execution.", "PRE": "intent contains operation and entities fields.", "POST": "Returns descriptive Russian-language text ending with confirmation prompt." }, "relations": [], - "children": [ - { - "name": "_clarification_text_for_intent", - "type": "Function", - "tier": "STANDARD", - "start_line": 1179, - "end_line": 1199, - "tags": { - "PURPOSE": "Convert technical missing-parameter errors into user-facing clarification prompts.", - "PRE": "state was classified as needs_clarification for current intent/error combination.", - "POST": "Returned text is human-readable and actionable for target operation." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1179 - } - ], - "score": 0.0 - } - }, - { - "name": "_plan_intent_with_llm", - "type": "Function", - "tier": "STANDARD", - "start_line": 1202, - "end_line": 1309, - "tags": { - "PURPOSE": "Use active LLM provider to select best tool/operation from dynamic catalog.", - "PRE": "tools list contains allowed operations for current user.", - "POST": "Returns normalized intent dict when planning succeeds; otherwise None." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1202 - } - ], - "score": 0.0 - } - }, - { - "name": "_authorize_intent", - "type": "Function", - "tier": "STANDARD", - "start_line": 1312, - "end_line": 1320, - "tags": { - "PURPOSE": "Validate user permissions for parsed intent before confirmation/dispatch.", - "PRE": "intent.operation is present for known assistant command domains.", - "POST": "Returns if authorized; raises HTTPException(403) when denied." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1312 - } - ], - "score": 0.0 - } - }, - { - "name": "_dispatch_intent", - "type": "Function", - "tier": "STANDARD", - "start_line": 1323, - "end_line": 1640, - "tags": { - "PURPOSE": "Execute parsed assistant intent via existing task/plugin/git services.", - "PRE": "intent operation is known and actor permissions are validated per operation.", - "POST": "Returns response text, optional task id, and UI actions for follow-up." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1323 - } - ], - "score": 0.0 - } - }, - { - "name": "send_message", - "type": "Function", - "tier": "STANDARD", - "start_line": 1644, - "end_line": 1809, - "tags": { - "PURPOSE": "Parse assistant command, enforce safety gates, and dispatch executable intent.", - "PRE": "Authenticated user is available and message text is non-empty.", - "POST": "Response state is one of clarification/confirmation/started/success/denied/failed.", - "RETURN": "AssistantMessageResponse with operation feedback and optional actions." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1644 - } - ], - "score": 0.0 - } - }, - { - "name": "confirm_operation", - "type": "Function", - "tier": "STANDARD", - "start_line": 1813, - "end_line": 1875, - "tags": { - "PURPOSE": "Execute previously requested risky operation after explicit user confirmation.", - "PRE": "confirmation_id exists, belongs to current user, is pending, and not expired.", - "POST": "Confirmation state becomes consumed and operation result is persisted in history.", - "RETURN": "AssistantMessageResponse with task details when async execution starts." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1813 - } - ], - "score": 0.0 - } - }, - { - "name": "cancel_operation", - "type": "Function", - "tier": "STANDARD", - "start_line": 1879, - "end_line": 1932, - "tags": { - "PURPOSE": "Cancel pending risky operation and mark confirmation token as cancelled.", - "PRE": "confirmation_id exists, belongs to current user, and is still pending.", - "POST": "Confirmation becomes cancelled and cannot be executed anymore.", - "RETURN": "AssistantMessageResponse confirming cancellation." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1879 - } - ], - "score": 0.0 - } - }, - { - "name": "list_conversations", - "type": "Function", - "tier": "STANDARD", - "start_line": 1935, - "end_line": 2019, - "tags": { - "PURPOSE": "Return paginated conversation list for current user with archived flag and last message preview.", - "PRE": "Authenticated user context and valid pagination params.", - "POST": "Conversations are grouped by conversation_id sorted by latest activity descending.", - "RETURN": "Dict with items, paging metadata, and archive segmentation counts." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 1935 - } - ], - "score": 0.0 - } - }, - { - "name": "delete_conversation", - "type": "Function", - "tier": "STANDARD", - "start_line": 2022, - "end_line": 2052, - "tags": { - "PURPOSE": "Soft-delete or hard-delete a conversation and clear its in-memory trace.", - "PRE": "conversation_id belongs to current_user.", - "POST": "Conversation records are removed from DB and CONVERSATIONS cache." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2022 - } - ], - "score": 0.0 - } - }, - { - "name": "get_history", - "type": "Function", - "tier": "STANDARD", - "start_line": 2056, - "end_line": 2127, - "tags": { - "PURPOSE": "Retrieve paginated assistant conversation history for current user.", - "PRE": "Authenticated user is available and page params are valid.", - "POST": "Returns persistent messages and mirrored in-memory snapshot for diagnostics.", - "RETURN": "Dict with items, paging metadata, and resolved conversation_id." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2056 - } - ], - "score": 0.0 - } - }, - { - "name": "get_assistant_audit", - "type": "Function", - "tier": "STANDARD", - "start_line": 2131, - "end_line": 2170, - "tags": { - "PURPOSE": "Return assistant audit decisions for current user from persistent and in-memory stores.", - "PRE": "User has tasks:READ permission.", - "POST": "Audit payload is returned in reverse chronological order from DB.", - "RETURN": "Dict with persistent and memory audit slices." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 2131 - } - ], - "score": 0.0 - } - } - ], + "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:_confirmation_summary:Function] started at line 1084", - "severity": "ERROR", - "line_number": 1084 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -72589,11 +70329,6 @@ "severity": "WARNING", "line_number": 1084 }, - { - "message": "Unclosed Anchor: [DEF:_confirmation_summary:Function] started at line 1084", - "severity": "ERROR", - "line_number": 1084 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", @@ -72613,6 +70348,492 @@ "score": 0.0 } }, + { + "name": "_clarification_text_for_intent", + "type": "Function", + "tier": "STANDARD", + "start_line": 1179, + "end_line": 1199, + "tags": { + "PURPOSE": "Convert technical missing-parameter errors into user-facing clarification prompts.", + "PRE": "state was classified as needs_clarification for current intent/error combination.", + "POST": "Returned text is human-readable and actionable for target operation." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1179 + } + ], + "score": 0.0 + } + }, + { + "name": "_plan_intent_with_llm", + "type": "Function", + "tier": "STANDARD", + "start_line": 1202, + "end_line": 1309, + "tags": { + "PURPOSE": "Use active LLM provider to select best tool/operation from dynamic catalog.", + "PRE": "tools list contains allowed operations for current user.", + "POST": "Returns normalized intent dict when planning succeeds; otherwise None." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1202 + } + ], + "score": 0.0 + } + }, + { + "name": "_authorize_intent", + "type": "Function", + "tier": "STANDARD", + "start_line": 1312, + "end_line": 1320, + "tags": { + "PURPOSE": "Validate user permissions for parsed intent before confirmation/dispatch.", + "PRE": "intent.operation is present for known assistant command domains.", + "POST": "Returns if authorized; raises HTTPException(403) when denied." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1312 + } + ], + "score": 0.0 + } + }, + { + "name": "_dispatch_intent", + "type": "Function", + "tier": "STANDARD", + "start_line": 1323, + "end_line": 1640, + "tags": { + "PURPOSE": "Execute parsed assistant intent via existing task/plugin/git services.", + "PRE": "intent operation is known and actor permissions are validated per operation.", + "POST": "Returns response text, optional task id, and UI actions for follow-up." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1323 + } + ], + "score": 0.0 + } + }, + { + "name": "send_message", + "type": "Function", + "tier": "STANDARD", + "start_line": 1644, + "end_line": 1809, + "tags": { + "PURPOSE": "Parse assistant command, enforce safety gates, and dispatch executable intent.", + "PRE": "Authenticated user is available and message text is non-empty.", + "POST": "Response state is one of clarification/confirmation/started/success/denied/failed.", + "RETURN": "AssistantMessageResponse with operation feedback and optional actions." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1644 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1644 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1644 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1644 + } + ], + "score": 0.28 + } + }, + { + "name": "confirm_operation", + "type": "Function", + "tier": "STANDARD", + "start_line": 1813, + "end_line": 1875, + "tags": { + "PURPOSE": "Execute previously requested risky operation after explicit user confirmation.", + "PRE": "confirmation_id exists, belongs to current user, is pending, and not expired.", + "POST": "Confirmation state becomes consumed and operation result is persisted in history.", + "RETURN": "AssistantMessageResponse with task details when async execution starts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1813 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1813 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1813 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1813 + } + ], + "score": 0.28 + } + }, + { + "name": "cancel_operation", + "type": "Function", + "tier": "STANDARD", + "start_line": 1879, + "end_line": 1932, + "tags": { + "PURPOSE": "Cancel pending risky operation and mark confirmation token as cancelled.", + "PRE": "confirmation_id exists, belongs to current user, and is still pending.", + "POST": "Confirmation becomes cancelled and cannot be executed anymore.", + "RETURN": "AssistantMessageResponse confirming cancellation." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1879 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1879 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1879 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1879 + } + ], + "score": 0.28 + } + }, + { + "name": "list_conversations", + "type": "Function", + "tier": "STANDARD", + "start_line": 1935, + "end_line": 2019, + "tags": { + "PURPOSE": "Return paginated conversation list for current user with archived flag and last message preview.", + "PRE": "Authenticated user context and valid pagination params.", + "POST": "Conversations are grouped by conversation_id sorted by latest activity descending.", + "RETURN": "Dict with items, paging metadata, and archive segmentation counts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1935 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1935 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1935 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 1935 + } + ], + "score": 0.28 + } + }, + { + "name": "delete_conversation", + "type": "Function", + "tier": "STANDARD", + "start_line": 2022, + "end_line": 2052, + "tags": { + "PURPOSE": "Soft-delete or hard-delete a conversation and clear its in-memory trace.", + "PRE": "conversation_id belongs to current_user.", + "POST": "Conversation records are removed from DB and CONVERSATIONS cache." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2022 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2022 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2022 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2022 + } + ], + "score": 0.28 + } + }, + { + "name": "get_history", + "type": "Function", + "tier": "STANDARD", + "start_line": 2056, + "end_line": 2127, + "tags": { + "PURPOSE": "Retrieve paginated assistant conversation history for current user.", + "PRE": "Authenticated user is available and page params are valid.", + "POST": "Returns persistent messages and mirrored in-memory snapshot for diagnostics.", + "RETURN": "Dict with items, paging metadata, and resolved conversation_id." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2056 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2056 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2056 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2056 + } + ], + "score": 0.28 + } + }, + { + "name": "get_assistant_audit", + "type": "Function", + "tier": "STANDARD", + "start_line": 2131, + "end_line": 2170, + "tags": { + "PURPOSE": "Return assistant audit decisions for current user from persistent and in-memory stores.", + "PRE": "User has tasks:READ permission.", + "POST": "Audit payload is returned in reverse chronological order from DB.", + "RETURN": "Dict with persistent and memory audit slices." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2131 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2131 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2131 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 2131 + } + ], + "score": 0.28 + } + }, { "name": "_async_confirmation_summary", "type": "Function", @@ -72651,15 +70872,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:backend.src.api.routes.assistant:Module] started at line 1", - "severity": "ERROR", + "message": "Fractal limit warning: Module length is 2172 lines (must be < 300)", + "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -78692,7 +76913,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 100, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, api, clean-release, source-policy", @@ -78745,20 +76966,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.api.routes.test_clean_release_source_policy:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -78766,7 +76982,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 138, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, api, clean-release, checks, reports", @@ -78857,8 +77073,8 @@ "name": "test_prepare_candidate_api_success", "type": "Function", "tier": "TRIVIAL", - "start_line": 138, - "end_line": 138, + "start_line": 140, + "end_line": 140, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -78873,20 +77089,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.api.routes.test_clean_release_api:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -82192,7 +80403,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 699, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, assistant, api, confirmation, status", @@ -82682,558 +80893,30 @@ "type": "Function", "tier": "STANDARD", "start_line": 400, - "end_line": null, + "end_line": 425, "tags": { "PURPOSE": "LLM validation with dashboard_ref should now require confirmation before dispatch.", "PRE": "User sends natural-language validation request with dashboard name (not numeric id).", "POST": "Response state is needs_confirmation since all state-changing operations are now gated." }, "relations": [], - "children": [ - { - "name": "test_list_conversations_groups_by_conversation_and_marks_archived", - "type": "Function", - "tier": "STANDARD", - "start_line": 428, - "end_line": 475, - "tags": { - "PURPOSE": "Conversations endpoint must group messages and compute archived marker by inactivity threshold.", - "PRE": "Fake DB contains two conversations with different update timestamps.", - "POST": "Response includes both conversations with archived flag set for stale one." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 428 - } - ], - "score": 0.0 - } - }, - { - "name": "test_history_from_latest_returns_recent_page_first", - "type": "Function", - "tier": "STANDARD", - "start_line": 478, - "end_line": 516, - "tags": { - "PURPOSE": "History endpoint from_latest mode must return newest page while preserving chronological order in chunk.", - "PRE": "Conversation has more messages than single page size.", - "POST": "First page returns latest messages and has_next indicates older pages exist." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 478 - } - ], - "score": 0.0 - } - }, - { - "name": "test_list_conversations_archived_only_filters_active", - "type": "Function", - "tier": "STANDARD", - "start_line": 519, - "end_line": 565, - "tags": { - "PURPOSE": "archived_only mode must return only archived conversations.", - "PRE": "Dataset includes one active and one archived conversation.", - "POST": "Only archived conversation remains in response payload." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 519 - } - ], - "score": 0.0 - } - }, - { - "name": "test_guarded_operation_always_requires_confirmation", - "type": "Function", - "tier": "STANDARD", - "start_line": 568, - "end_line": 593, - "tags": { - "PURPOSE": "Non-dangerous (guarded) commands must still require confirmation before execution.", - "PRE": "Admin user sends a backup command that was previously auto-executed.", - "POST": "Response state is needs_confirmation with confirm and cancel actions." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 568 - } - ], - "score": 0.0 - } - }, - { - "name": "test_guarded_operation_confirm_roundtrip", - "type": "Function", - "tier": "STANDARD", - "start_line": 596, - "end_line": null, - "tags": { - "PURPOSE": "Guarded operation must execute successfully after explicit confirmation.", - "PRE": "Admin user sends a non-dangerous migration command (dev \u2192 dev).", - "POST": "After confirmation, response transitions to started/success with task_id." - }, - "relations": [], - "children": [ - { - "name": "test_confirm_nonexistent_id_returns_404", - "type": "Function", - "tier": "STANDARD", - "start_line": 632, - "end_line": null, - "tags": { - "PURPOSE": "Confirming a non-existent ID should raise 404.", - "PRE": "user tries to confirm a random/fake UUID.", - "POST": "FastAPI HTTPException with status 404." - }, - "relations": [], - "children": [ - { - "name": "test_migration_with_dry_run_includes_summary", - "type": "Function", - "tier": "STANDARD", - "start_line": 652, - "end_line": 696, - "tags": { - "PURPOSE": "Migration command with dry run flag must return the dry run summary in confirmation text.", - "PRE": "user specifies a migration with --dry-run flag.", - "POST": "Response state is needs_confirmation and text contains dry-run summary counts." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 652 - } - ], - "score": 0.0 - } - } - ], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_confirm_nonexistent_id_returns_404:Function] started at line 632", - "severity": "ERROR", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Unclosed Anchor: [DEF:test_confirm_nonexistent_id_returns_404:Function] started at line 632", - "severity": "ERROR", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Unclosed Anchor: [DEF:test_confirm_nonexistent_id_returns_404:Function] started at line 632", - "severity": "ERROR", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Unclosed Anchor: [DEF:test_confirm_nonexistent_id_returns_404:Function] started at line 632", - "severity": "ERROR", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 632 - } - ], - "score": 0.0 - } - } - ], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_guarded_operation_confirm_roundtrip:Function] started at line 596", - "severity": "ERROR", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Unclosed Anchor: [DEF:test_guarded_operation_confirm_roundtrip:Function] started at line 596", - "severity": "ERROR", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Unclosed Anchor: [DEF:test_guarded_operation_confirm_roundtrip:Function] started at line 596", - "severity": "ERROR", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 596 - } - ], - "score": 0.0 - } - } - ], + "children": [], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:test_llm_validation_with_dashboard_ref_requires_confirmation:Function] started at line 400", - "severity": "ERROR", + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 400 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 400 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", "line_number": 400 }, { @@ -83250,26 +80933,356 @@ "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", "line_number": 400 - }, - { - "message": "Unclosed Anchor: [DEF:test_llm_validation_with_dashboard_ref_requires_confirmation:Function] started at line 400", - "severity": "ERROR", - "line_number": 400 - }, + } + ], + "score": 0.0 + } + }, + { + "name": "test_list_conversations_groups_by_conversation_and_marks_archived", + "type": "Function", + "tier": "STANDARD", + "start_line": 428, + "end_line": 475, + "tags": { + "PURPOSE": "Conversations endpoint must group messages and compute archived marker by inactivity threshold.", + "PRE": "Fake DB contains two conversations with different update timestamps.", + "POST": "Response includes both conversations with archived flag set for stale one." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 400 + "line_number": 428 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 400 + "line_number": 428 }, { "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", "severity": "WARNING", - "line_number": 400 + "line_number": 428 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 428 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 428 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 428 + } + ], + "score": 0.0 + } + }, + { + "name": "test_history_from_latest_returns_recent_page_first", + "type": "Function", + "tier": "STANDARD", + "start_line": 478, + "end_line": 516, + "tags": { + "PURPOSE": "History endpoint from_latest mode must return newest page while preserving chronological order in chunk.", + "PRE": "Conversation has more messages than single page size.", + "POST": "First page returns latest messages and has_next indicates older pages exist." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 478 + } + ], + "score": 0.0 + } + }, + { + "name": "test_list_conversations_archived_only_filters_active", + "type": "Function", + "tier": "STANDARD", + "start_line": 519, + "end_line": 565, + "tags": { + "PURPOSE": "archived_only mode must return only archived conversations.", + "PRE": "Dataset includes one active and one archived conversation.", + "POST": "Only archived conversation remains in response payload." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 519 + } + ], + "score": 0.0 + } + }, + { + "name": "test_guarded_operation_always_requires_confirmation", + "type": "Function", + "tier": "STANDARD", + "start_line": 568, + "end_line": 593, + "tags": { + "PURPOSE": "Non-dangerous (guarded) commands must still require confirmation before execution.", + "PRE": "Admin user sends a backup command that was previously auto-executed.", + "POST": "Response state is needs_confirmation with confirm and cancel actions." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 568 + } + ], + "score": 0.0 + } + }, + { + "name": "test_guarded_operation_confirm_roundtrip", + "type": "Function", + "tier": "STANDARD", + "start_line": 596, + "end_line": 632, + "tags": { + "PURPOSE": "Guarded operation must execute successfully after explicit confirmation.", + "PRE": "Admin user sends a non-dangerous migration command (dev \u2192 dev).", + "POST": "After confirmation, response transitions to started/success with task_id." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 596 + } + ], + "score": 0.0 + } + }, + { + "name": "test_confirm_nonexistent_id_returns_404", + "type": "Function", + "tier": "STANDARD", + "start_line": 633, + "end_line": 653, + "tags": { + "PURPOSE": "Confirming a non-existent ID should raise 404.", + "PRE": "user tries to confirm a random/fake UUID.", + "POST": "FastAPI HTTPException with status 404." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 633 + } + ], + "score": 0.0 + } + }, + { + "name": "test_migration_with_dry_run_includes_summary", + "type": "Function", + "tier": "STANDARD", + "start_line": 654, + "end_line": 698, + "tags": { + "PURPOSE": "Migration command with dry run flag must return the dry run summary in confirmation text.", + "PRE": "user specifies a migration with --dry-run flag.", + "POST": "Response state is needs_confirmation and text contains dry-run summary counts." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 654 } ], "score": 0.0 @@ -83657,8 +81670,8 @@ "name": "run", "type": "Function", "tier": "TRIVIAL", - "start_line": 664, - "end_line": 664, + "start_line": 666, + "end_line": 666, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -83673,15 +81686,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:backend.src.api.routes.__tests__.test_assistant_api:Module] started at line 1", - "severity": "ERROR", + "message": "Fractal limit warning: Module length is 699 lines (must be < 300)", + "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -84145,17 +82158,22 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 43, + "end_line": 53, "tags": { - "TIER": "STANDARD", - "SEMANTICS": "database, config, settings, sqlalchemy", - "PURPOSE": "Defines database schema for persisted application configuration.", - "LAYER": "Domain" + "TIER": "CRITICAL", + "SEMANTICS": "database, config, settings, sqlalchemy, notification", + "PURPOSE": "Defines SQLAlchemy persistence models for application and notification configuration records.", + "LAYER": "Domain", + "INVARIANT": "Configuration payload and notification credentials must remain persisted as non-null JSON documents." }, "relations": [ { "type": "DEPENDS_ON", "target": "sqlalchemy" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.mapping:Base" } ], "children": [ @@ -84163,10 +82181,14 @@ "name": "AppConfigRecord", "type": "Class", "tier": "CRITICAL", - "start_line": 15, - "end_line": 25, + "start_line": 17, + "end_line": 31, "tags": { - "PURPOSE": "Stores the single source of truth for application configuration." + "PURPOSE": "Stores persisted application configuration as a single authoritative record model.", + "PRE": "SQLAlchemy declarative Base is initialized and table metadata registration is active.", + "POST": "ORM table 'app_configurations' exposes id, payload, and updated_at fields with declared nullability/default semantics.", + "SIDE_EFFECT": "Registers ORM mapping metadata during module import.", + "DATA_CONTRACT": "Input -> persistence row {id:str, payload:json, updated_at:datetime}; Output -> AppConfigRecord ORM entity." }, "relations": [], "children": [], @@ -84176,32 +82198,32 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 15 + "line_number": 17 } ], "score": 0.0 @@ -84211,10 +82233,14 @@ "name": "NotificationConfig", "type": "Class", "tier": "CRITICAL", - "start_line": 27, - "end_line": 39, + "start_line": 33, + "end_line": 49, "tags": { - "PURPOSE": "Global settings for external notification providers." + "PURPOSE": "Stores persisted provider-level notification configuration and encrypted credentials metadata.", + "PRE": "SQLAlchemy declarative Base is initialized and uuid generation is available at instance creation time.", + "POST": "ORM table 'notification_configs' exposes id, type, name, credentials, is_active, created_at, updated_at fields with declared constraints/defaults.", + "SIDE_EFFECT": "Registers ORM mapping metadata during module import; may generate UUID values for new entity instances.", + "DATA_CONTRACT": "Input -> persistence row {id:str, type:str, name:str, credentials:json, is_active:bool, created_at:datetime, updated_at:datetime}; Output -> NotificationConfig ORM entity." }, "relations": [], "children": [], @@ -84224,32 +82250,32 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 27 + "line_number": 33 } ], "score": 0.0 @@ -84257,20 +82283,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Missing @INVARIANT tag (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -84606,7 +82621,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 101, "tags": { "TIER": "STANDARD", "SEMANTICS": "database, mapping, environment, migration, sqlalchemy, sqlite", @@ -84699,61 +82714,43 @@ "type": "Class", "tier": "TRIVIAL", "start_line": 71, - "end_line": null, + "end_line": 83, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Represents a single migration execution job." }, "relations": [], - "children": [ - { - "name": "ResourceMapping", - "type": "Class", - "tier": "STANDARD", - "start_line": 83, - "end_line": 97, - "tags": { - "TIER": "STANDARD", - "PURPOSE": "Maps a universal UUID for a resource to its actual ID on a specific environment.", - "TEST_DATA": "resource_mapping_record -> {'environment_id': 'prod-env-1', 'resource_type': 'chart', 'uuid': '123e4567-e89b-12d3-a456-426614174000', 'remote_integer_id': '42'}" - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [], - "score": 1.0 - } - } - ], + "children": [], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:MigrationJob:Class] started at line 71", - "severity": "ERROR", - "line_number": 71 - }, - { - "message": "Unclosed Anchor: [DEF:MigrationJob:Class] started at line 71", - "severity": "ERROR", - "line_number": 71 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "ResourceMapping", + "type": "Class", + "tier": "STANDARD", + "start_line": 85, + "end_line": 99, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Maps a universal UUID for a resource to its actual ID on a specific environment.", + "TEST_DATA": "resource_mapping_record -> {'environment_id': 'prod-env-1', 'resource_type': 'chart', 'uuid': '123e4567-e89b-12d3-a456-426614174000', 'remote_integer_id': '42'}" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 } } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.src.models.mapping:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.9400000000000001 } }, { @@ -91146,25 +89143,34 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 115, + "end_line": 127, "tags": { - "SEMANTICS": "auth, service, business-logic, login, jwt", - "PURPOSE": "Orchestrates authentication business logic.", - "LAYER": "Service", - "INVARIANT": "Authentication must verify both credentials and account status." + "TIER": "CRITICAL", + "SEMANTICS": "auth, service, business-logic, login, jwt, adfs, jit-provisioning", + "PURPOSE": "Orchestrates credential authentication and ADFS JIT user provisioning.", + "LAYER": "Domain", + "INVARIANT": "Authentication succeeds only for active users with valid credentials; issued sessions encode subject and scopes from assigned roles." }, "relations": [ { - "type": "USES", + "type": "DEPENDS_ON", "target": "backend.src.core.auth.repository.AuthRepository" }, { - "type": "USES", - "target": "backend.src.core.auth.security" + "type": "DEPENDS_ON", + "target": "backend.src.core.auth.security.verify_password" }, { - "type": "USES", - "target": "backend.src.core.auth.jwt" + "type": "DEPENDS_ON", + "target": "backend.src.core.auth.jwt.create_access_token" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.auth.User" + }, + { + "type": "DEPENDS_ON", + "target": "backend.src.models.auth.Role" } ], "children": [ @@ -91172,8 +89178,8 @@ "name": "AuthService", "type": "Class", "tier": "CRITICAL", - "start_line": 22, - "end_line": 113, + "start_line": 25, + "end_line": 125, "tags": { "PURPOSE": "Provides high-level authentication services." }, @@ -91183,10 +89189,14 @@ "name": "__init__", "type": "Function", "tier": "CRITICAL", - "start_line": 25, - "end_line": 30, + "start_line": 28, + "end_line": 37, "tags": { - "PURPOSE": "Initializes the service with a database session.", + "PURPOSE": "Initializes the authentication service with repository access over an active DB session.", + "PRE": "db is a valid SQLAlchemy Session instance bound to the auth persistence context.", + "POST": "self.repo is initialized and ready for auth user/role CRUD operations.", + "SIDE_EFFECT": "Allocates AuthRepository and binds it to the provided Session.", + "DATA_CONTRACT": "Input(Session) -> Model(AuthRepository)", "PARAM": "db (Session) - SQLAlchemy session." }, "relations": [], @@ -91194,140 +89204,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @POST (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 25 + "line_number": 28 } ], "score": 0.0 @@ -91337,13 +89287,14 @@ "name": "authenticate_user", "type": "Function", "tier": "CRITICAL", - "start_line": 32, - "end_line": 54, + "start_line": 39, + "end_line": 62, "tags": { - "PURPOSE": "Authenticates a user with username and password.", - "PRE": "username and password are provided.", - "POST": "Returns User object if authentication succeeds, else None.", - "SIDE_EFFECT": "Updates last_login timestamp on success.", + "PURPOSE": "Validates credentials and account state for local username/password authentication.", + "PRE": "username and password are non-empty credential inputs.", + "POST": "Returns User only when user exists, is active, and password hash verification succeeds; otherwise returns None.", + "SIDE_EFFECT": "Persists last_login update for successful authentications via repository.", + "DATA_CONTRACT": "Input(str username, str password) -> Output(User | None)", "PARAM": "password (str) - The plain password.", "RETURN": "Optional[User] - The authenticated user or None." }, @@ -91352,95 +89303,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 32 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 32 + "line_number": 39 } ], "score": 0.0 @@ -91450,12 +89386,14 @@ "name": "create_session", "type": "Function", "tier": "CRITICAL", - "start_line": 56, - "end_line": 77, + "start_line": 64, + "end_line": 87, "tags": { - "PURPOSE": "Creates a JWT session for an authenticated user.", - "PRE": "user is a valid User object.", - "POST": "Returns a dictionary with access_token and token_type.", + "PURPOSE": "Issues an access token payload for an already authenticated user.", + "PRE": "user is a valid User entity containing username and iterable roles with role.name values.", + "POST": "Returns session dict with non-empty access_token and token_type='bearer'.", + "SIDE_EFFECT": "Generates signed JWT via auth JWT provider.", + "DATA_CONTRACT": "Input(User) -> Output(Dict[str, str]{access_token, token_type})", "PARAM": "user (User) - The authenticated user.", "RETURN": "Dict[str, str] - Session data." }, @@ -91464,110 +89402,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 56 + "line_number": 64 } ], "score": 0.0 @@ -91577,12 +89485,14 @@ "name": "provision_adfs_user", "type": "Function", "tier": "CRITICAL", - "start_line": 79, - "end_line": 111, + "start_line": 89, + "end_line": 123, "tags": { - "PURPOSE": "Just-In-Time (JIT) provisioning for ADFS users based on group mappings.", - "PRE": "user_info contains 'upn' (username), 'email', and 'groups'.", - "POST": "User is created/updated and assigned roles based on groups.", + "PURPOSE": "Performs ADFS Just-In-Time provisioning and role synchronization from AD group mappings.", + "PRE": "user_info contains identity claims where at least one of 'upn' or 'email' is present; 'groups' may be absent.", + "POST": "Returns persisted user entity with roles synchronized to mapped AD groups and refreshed state.", + "SIDE_EFFECT": "May insert new User, mutate user.roles, commit transaction, and refresh ORM state.", + "DATA_CONTRACT": "Input(Dict[str, Any]{upn|email, email, groups[]}) -> Output(User persisted)", "PARAM": "user_info (Dict[str, Any]) - Claims from ADFS token.", "RETURN": "User - The provisioned user." }, @@ -91591,110 +89501,80 @@ "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 - }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 79 + "line_number": 89 } ], "score": 0.0 @@ -91707,32 +89587,32 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 22 + "line_number": 25 } ], "score": 0.0 @@ -91740,30 +89620,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: USES. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -95381,7 +93240,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 7, - "end_line": null, + "end_line": 87, "tags": { "TIER": "STANDARD", "PURPOSE": "Unit tests for HealthService aggregation logic." @@ -95426,13 +93285,8 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:test_health_service:Module] started at line 7", - "severity": "ERROR", - "line_number": 7 - }, { "message": "Missing Mandatory Tag: @LAYER (required for STANDARD tier)", "severity": "WARNING", @@ -95449,7 +93303,7 @@ "line_number": 7 } ], - "score": 0.0 + "score": 0.37000000000000005 } }, { @@ -98086,7 +95940,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": null, + "end_line": 167, "tags": { "TIER": "CRITICAL", "SEMANTICS": "clean-release, orchestrator, compliance-gate, stages", @@ -98117,346 +95971,127 @@ "name": "CleanComplianceOrchestrator", "type": "Class", "tier": "STANDARD", - "start_line": 40, - "end_line": null, + "start_line": 41, + "end_line": 140, "tags": { "PURPOSE": "Coordinate clean-release compliance verification stages." }, "relations": [], "children": [ + { + "name": "CleanComplianceOrchestrator.__init__", + "type": "Function", + "tier": "STANDARD", + "start_line": 44, + "end_line": 53, + "tags": { + "PURPOSE": "Bind repository dependency used for orchestrator persistence and lookups.", + "PRE": "repository is a valid CleanReleaseRepository instance with required methods.", + "POST": "self.repository is assigned and used by all orchestration steps.", + "SIDE_EFFECT": "Stores repository reference on orchestrator instance.", + "DATA_CONTRACT": "Input -> CleanReleaseRepository, Output -> None" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, { "name": "start_check_run", "type": "Function", "tier": "STANDARD", - "start_line": 46, - "end_line": null, + "start_line": 55, + "end_line": 80, "tags": { "PURPOSE": "Initiate a new compliance run session.", - "PRE": "candidate_id and policy_id must exist in repository.", - "POST": "Returns initialized ComplianceRun in RUNNING state." + "PRE": "candidate_id/policy_id/manifest_id identify existing records in repository.", + "POST": "Returns initialized ComplianceRun in RUNNING state persisted in repository.", + "SIDE_EFFECT": "Reads manifest/policy and writes new ComplianceRun via repository.save_check_run.", + "DATA_CONTRACT": "Input -> (candidate_id:str, policy_id:str, requested_by:str, manifest_id:str), Output -> ComplianceRun" }, "relations": [], - "children": [ - { - "name": "finalize_run", - "type": "Function", - "tier": "STANDARD", - "start_line": 103, - "end_line": null, - "tags": { - "PURPOSE": "Finalize run status based on cumulative stage results.", - "POST": "Status derivation follows strict MANDATORY_STAGE_ORDER." - }, - "relations": [], - "children": [ - { - "name": "run_check_legacy", - "type": "Function", - "tier": "STANDARD", - "start_line": 117, - "end_line": 137, - "tags": { - "PURPOSE": "Legacy wrapper for compatibility with previous orchestrator call style.", - "PRE": "Candidate/policy/manifest identifiers are valid for repository.", - "POST": "Returns finalized ComplianceRun produced by orchestrator." - }, - "relations": [], - "children": [], - "compliance": { - "valid": true, - "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 117 - } - ], - "score": 0.0 - } - } - ], - "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:finalize_run:Function] started at line 103", - "severity": "ERROR", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Unclosed Anchor: [DEF:finalize_run:Function] started at line 103", - "severity": "ERROR", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Unclosed Anchor: [DEF:finalize_run:Function] started at line 103", - "severity": "ERROR", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Unclosed Anchor: [DEF:finalize_run:Function] started at line 103", - "severity": "ERROR", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 103 - } - ], - "score": 0.0 - } - } - ], + "children": [], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:start_check_run:Function] started at line 46", - "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Unclosed Anchor: [DEF:start_check_run:Function] started at line 46", - "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Unclosed Anchor: [DEF:start_check_run:Function] started at line 46", - "severity": "ERROR", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - }, - { - "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 46 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "execute_stages", + "type": "Function", + "tier": "STANDARD", + "start_line": 82, + "end_line": 122, + "tags": { + "PURPOSE": "Execute or accept compliance stage outcomes and set intermediate/final check-run status fields.", + "PRE": "check_run exists and references candidate/policy/registry/manifest identifiers resolvable by repository.", + "POST": "Returns persisted ComplianceRun with status FAILED on missing dependencies, otherwise SUCCEEDED with final_status set.", + "SIDE_EFFECT": "Reads candidate/policy/registry/manifest and persists updated check_run.", + "DATA_CONTRACT": "Input -> (check_run:ComplianceRun, forced_results:Optional[List[ComplianceStageRun]]), Output -> ComplianceRun" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "finalize_run", + "type": "Function", + "tier": "STANDARD", + "start_line": 124, + "end_line": 139, + "tags": { + "PURPOSE": "Finalize run status based on cumulative stage results.", + "PRE": "check_run was started and may already contain a derived final_status from stage execution.", + "POST": "Returns persisted ComplianceRun in SUCCEEDED status with final_status guaranteed non-empty.", + "SIDE_EFFECT": "Mutates check_run terminal fields and persists via repository.save_check_run.", + "DATA_CONTRACT": "Input -> ComplianceRun, Output -> ComplianceRun" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 } } ], "compliance": { - "valid": false, + "valid": true, "issues": [ { - "message": "Unclosed Anchor: [DEF:CleanComplianceOrchestrator:Class] started at line 40", - "severity": "ERROR", - "line_number": 40 + "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 41 }, { "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", "severity": "WARNING", - "line_number": 40 - }, - { - "message": "Unclosed Anchor: [DEF:CleanComplianceOrchestrator:Class] started at line 40", - "severity": "ERROR", - "line_number": 40 - }, - { - "message": "Missing Mandatory Tag: @TIER (required for STANDARD tier)", - "severity": "WARNING", - "line_number": 40 + "line_number": 41 } ], - "score": 0.0 + "score": 0.5499999999999999 } }, { - "name": "__init__", + "name": "run_check_legacy", "type": "Function", - "tier": "TRIVIAL", - "start_line": 43, - "end_line": 43, + "tier": "STANDARD", + "start_line": 143, + "end_line": 166, "tags": { - "PURPOSE": "Auto-detected function (orphan)", - "TIER": "TRIVIAL" + "PURPOSE": "Legacy wrapper for compatibility with previous orchestrator call style.", + "PRE": "repository and identifiers are valid and resolvable by orchestrator dependencies.", + "POST": "Returns finalized ComplianceRun produced by orchestrator start->execute->finalize sequence.", + "SIDE_EFFECT": "Reads/writes compliance entities through repository during orchestrator calls.", + "DATA_CONTRACT": "Input -> (repository:CleanReleaseRepository, candidate_id:str, policy_id:str, requested_by:str, manifest_id:str), Output -> ComplianceRun" }, "relations": [], "children": [], @@ -98467,11 +96102,11 @@ } }, { - "name": "execute_stages", + "name": "__init__", "type": "Function", "tier": "TRIVIAL", - "start_line": 69, - "end_line": 69, + "start_line": 50, + "end_line": 50, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -98486,15 +96121,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.src.services.clean_release.compliance_orchestrator:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.95 } }, { @@ -101360,7 +98989,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 27, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, clean-release, audit, logging", @@ -101430,20 +99059,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.services.clean_release.test_audit_service:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -102426,7 +100050,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 30, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, clean-release, compliance, stages", @@ -102514,20 +100138,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.services.clean_release.test_stages:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -102535,7 +100154,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 60, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, clean-release, source-isolation, internal-only", @@ -102606,20 +100225,15 @@ } ], "compliance": { - "valid": false, + "valid": true, "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.services.clean_release.test_source_isolation:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, { "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", "severity": "WARNING", "line_number": 1 } ], - "score": 0.0 + "score": 0.79 } }, { @@ -102627,7 +100241,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": null, + "end_line": 171, "tags": { "TIER": "STANDARD", "SEMANTICS": "tests, clean-release, preparation, flow", @@ -102637,17 +100251,513 @@ }, "relations": [ { - "type": "TESTS", - "target": "backend.src.services.clean_release.preparation_service" + "type": "DEPENDS_ON", + "target": "backend.src.services.clean_release.preparation_service:Module" } ], "children": [ + { + "name": "backend.tests.services.clean_release.test_preparation_service._mock_policy", + "type": "Function", + "tier": "STANDARD", + "start_line": 24, + "end_line": 38, + "tags": { + "PURPOSE": "Build a valid clean profile policy fixture for preparation tests." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 24 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service._mock_registry", + "type": "Function", + "tier": "STANDARD", + "start_line": 40, + "end_line": 50, + "tags": { + "PURPOSE": "Build an internal-only source registry fixture for preparation tests." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 40 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service._mock_candidate", + "type": "Function", + "tier": "STANDARD", + "start_line": 52, + "end_line": 64, + "tags": { + "PURPOSE": "Build a draft release candidate fixture with provided identifier." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 52 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_success", + "type": "Function", + "tier": "STANDARD", + "start_line": 66, + "end_line": 101, + "tags": { + "PURPOSE": "Verify candidate transitions to PREPARED when evaluation returns no violations.", + "TEST_CONTRACT": "[valid_candidate + active_policy + internal_sources + no_violations] -> [status=PREPARED, manifest_persisted, candidate_saved]", + "TEST_SCENARIO": "[prepare_success] -> [prepared status and persistence side effects are produced]", + "TEST_FIXTURE": "[INLINE_MOCKS] -> INLINE_JSON", + "TEST_EDGE": "[external_fail] -> [none; dependency interactions mocked and successful]", + "TEST_INVARIANT": "[prepared_flow_persists_state] -> VERIFIED_BY: [prepare_success]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 66 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_with_violations", + "type": "Function", + "tier": "STANDARD", + "start_line": 103, + "end_line": 137, + "tags": { + "PURPOSE": "Verify candidate transitions to BLOCKED when evaluation returns blocking violations.", + "TEST_CONTRACT": "[valid_candidate + active_policy + evaluation_with_violations] -> [status=BLOCKED, violations_exposed]", + "TEST_SCENARIO": "[prepare_blocked_due_to_policy] -> [blocked status and violation list are produced]", + "TEST_FIXTURE": "[INLINE_MOCKS] -> INLINE_JSON", + "TEST_EDGE": "[external_fail] -> [none; dependency interactions mocked and successful]", + "TEST_INVARIANT": "[blocked_flow_reports_violations] -> VERIFIED_BY: [prepare_blocked_due_to_policy]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 103 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_not_found", + "type": "Function", + "tier": "STANDARD", + "start_line": 139, + "end_line": 152, + "tags": { + "PURPOSE": "Verify preparation raises ValueError when candidate does not exist.", + "TEST_CONTRACT": "[missing_candidate] -> [ValueError('Candidate not found')]", + "TEST_SCENARIO": "[prepare_missing_candidate] -> [raises candidate not found error]", + "TEST_FIXTURE": "[INLINE_MOCKS] -> INLINE_JSON", + "TEST_EDGE": "[missing_field] -> [candidate lookup returns None]", + "TEST_INVARIANT": "[missing_candidate_is_rejected] -> VERIFIED_BY: [prepare_missing_candidate]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 139 + } + ], + "score": 0.0 + } + }, + { + "name": "backend.tests.services.clean_release.test_preparation_service.test_prepare_candidate_no_active_policy", + "type": "Function", + "tier": "STANDARD", + "start_line": 154, + "end_line": 168, + "tags": { + "PURPOSE": "Verify preparation raises ValueError when no active policy is available.", + "TEST_CONTRACT": "[candidate_present + missing_active_policy] -> [ValueError('Active clean policy not found')]", + "TEST_SCENARIO": "[prepare_missing_policy] -> [raises active policy missing error]", + "TEST_FIXTURE": "[INLINE_MOCKS] -> INLINE_JSON", + "TEST_EDGE": "[invalid_type] -> [policy dependency resolves to None]", + "TEST_INVARIANT": "[active_policy_required] -> VERIFIED_BY: [prepare_missing_policy]" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @PRE (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @POST (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + }, + { + "message": "Missing Belief State Logging: Function should use belief_scope / molecular methods (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 154 + } + ], + "score": 0.0 + } + }, { "name": "_mock_policy", "type": "Function", "tier": "TRIVIAL", - "start_line": 24, - "end_line": 24, + "start_line": 26, + "end_line": 26, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102664,8 +100774,8 @@ "name": "_mock_registry", "type": "Function", "tier": "TRIVIAL", - "start_line": 37, - "end_line": 37, + "start_line": 42, + "end_line": 42, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102682,8 +100792,8 @@ "name": "_mock_candidate", "type": "Function", "tier": "TRIVIAL", - "start_line": 46, - "end_line": 46, + "start_line": 54, + "end_line": 54, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102700,8 +100810,8 @@ "name": "test_prepare_candidate_success", "type": "Function", "tier": "TRIVIAL", - "start_line": 57, - "end_line": 57, + "start_line": 73, + "end_line": 73, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102718,8 +100828,8 @@ "name": "test_prepare_candidate_with_violations", "type": "Function", "tier": "TRIVIAL", - "start_line": 86, - "end_line": 86, + "start_line": 110, + "end_line": 110, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102736,8 +100846,8 @@ "name": "test_prepare_candidate_not_found", "type": "Function", "tier": "TRIVIAL", - "start_line": 114, - "end_line": 114, + "start_line": 146, + "end_line": 146, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102754,8 +100864,8 @@ "name": "test_prepare_candidate_no_active_policy", "type": "Function", "tier": "TRIVIAL", - "start_line": 121, - "end_line": 121, + "start_line": 161, + "end_line": 161, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -102770,20 +100880,9 @@ } ], "compliance": { - "valid": false, - "issues": [ - { - "message": "Unclosed Anchor: [DEF:backend.tests.services.clean_release.test_preparation_service:Module] started at line 1", - "severity": "ERROR", - "line_number": 1 - }, - { - "message": "Invalid @RELATION predicate: TESTS. Allowed: BINDS_TO, CALLS, DEPENDS_ON, DISPATCHES, IMPLEMENTS, INHERITS", - "severity": "WARNING", - "line_number": 1 - } - ], - "score": 0.0 + "valid": true, + "issues": [], + "score": 0.9400000000000001 } }, {