diff --git a/.ai/MODULE_MAP.md b/.ai/MODULE_MAP.md index 593df71a..70023518 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-10T18:26:33.375187 +**Generated:** 2026-03-10T20:52:01.801581 ## Summary - **Total Modules:** 103 -- **Total Entities:** 3077 +- **Total Entities:** 3088 ## Module Hierarchy @@ -1718,9 +1718,9 @@ ### 📁 `migration/` - - 📊 **Tiers:** CRITICAL: 12 + - 📊 **Tiers:** CRITICAL: 21 - 📄 **Files:** 1 - - 📦 **Entities:** 12 + - 📦 **Entities:** 21 **Key Entities:** @@ -1972,9 +1972,9 @@ ### 📁 `root/` - 🏗️ **Layers:** DevOps/Tooling, Unknown -- 📊 **Tiers:** CRITICAL: 11, STANDARD: 17, TRIVIAL: 9 +- 📊 **Tiers:** CRITICAL: 11, STANDARD: 18, TRIVIAL: 10 - 📄 **Files:** 2 -- 📦 **Entities:** 37 +- 📦 **Entities:** 39 **Key Entities:** diff --git a/.ai/PROJECT_MAP.md b/.ai/PROJECT_MAP.md index 5417276b..b7e436d5 100644 --- a/.ai/PROJECT_MAP.md +++ b/.ai/PROJECT_MAP.md @@ -68,6 +68,8 @@ - 📝 Calculate score and determine module's max tier for weighted global score - ƒ **_generate_artifacts** (`Function`) `[CRITICAL]` - 📝 Writes output files with tier-based compliance data. + - ƒ **_print_agent_report** (`Function`) + - 📝 Prints a JSON report optimized for AI agent orchestration and control. - ƒ **_generate_report** (`Function`) `[CRITICAL]` - 📝 Generates the Markdown compliance report with severity levels. - ƒ **_collect_issues** (`Function`) @@ -84,6 +86,8 @@ - 📝 Flattens entity tree for easier grouping. - ƒ **to_dict** (`Function`) `[TRIVIAL]` - 📝 Auto-detected function (orphan) + - ƒ **collect_recursive** (`Function`) `[TRIVIAL]` + - 📝 Auto-detected function (orphan) - 📦 **DashboardTypes** (`Module`) `[TRIVIAL]` - 📝 TypeScript interfaces for Dashboard entities - 🏗️ Layer: Domain @@ -1205,6 +1209,8 @@ - 📝 Fetches the list of environments from the API. - ƒ **fetchDashboards** (`Function`) `[CRITICAL]` - 📝 Fetches dashboards for the selected source environment. + - ▦ **ReactiveDashboardFetch** (`Block`) `[CRITICAL]` + - 📝 Automatically fetch dashboards when the source environment is changed. - ƒ **fetchDatabases** (`Function`) `[CRITICAL]` - 📝 Fetches databases from both environments and gets suggestions. - ƒ **handleMappingUpdate** (`Function`) `[CRITICAL]` @@ -1213,15 +1219,25 @@ - 📝 Opens the log viewer for a specific task. - ƒ **handlePasswordPrompt** (`Function`) `[CRITICAL]` - 📝 Reactive logic to show password prompt when a task is awaiting input. + - ▦ **ReactivePasswordPrompt** (`Block`) `[CRITICAL]` + - 📝 Monitor selected task for input requests and trigger password prompt. - ƒ **handleResumeMigration** (`Function`) `[CRITICAL]` - 📝 Resumes a migration task with provided passwords. - ƒ **startMigration** (`Function`) `[CRITICAL]` - - 📝 Starts the migration process. + - 📝 Initiates the migration process by sending the selection to the backend. - ƒ **startDryRun** (`Function`) `[CRITICAL]` - - 📝 Builds pre-flight diff and risk summary without applying migration. + - 📝 Performs a dry-run migration to identify potential risks and changes. - ▦ **MigrationDashboardView** (`Block`) `[CRITICAL]` - 📝 Render migration configuration controls, action CTAs, dry-run results, and modal entry points. + - ▦ **MigrationHeader** (`Block`) `[CRITICAL]` + - ▦ **TaskHistorySection** (`Block`) `[CRITICAL]` + - ▦ **ActiveTaskSection** (`Block`) `[CRITICAL]` + - ▦ **EnvironmentSelectionSection** (`Block`) `[CRITICAL]` - 🧩 **DashboardSelectionSection** (`Component`) `[CRITICAL]` + - ▦ **MigrationOptionsSection** (`Block`) `[CRITICAL]` + - ▦ **DryRunResultsSection** (`Block`) `[CRITICAL]` + - ▦ **MigrationModals** (`Block`) `[CRITICAL]` + - 📝 Render overlay components for log viewing and password entry. - ▦ **MappingsPageScript** (`Block`) `[CRITICAL]` - 📝 Define imports, state, and handlers that drive migration mappings page FSM. - 🔗 CALLS -> `fetchEnvironments` diff --git a/.kilocode/workflows/speckit.semantics.md b/.kilocode/workflows/speckit.semantics.md index 3e9f96f0..16ba95fc 100644 --- a/.kilocode/workflows/speckit.semantics.md +++ b/.kilocode/workflows/speckit.semantics.md @@ -1,5 +1,5 @@ --- -description: Maintain semantic integrity via multi-agent delegation. Analyzes codebase, delegates markup tasks to Semantic Engineer, verifies via Reviewer Agent, and reports status. +description: Maintain semantic integrity by generating maps and auditing compliance reports. --- ## User Input @@ -12,62 +12,63 @@ You **MUST** consider the user input before proceeding (if not empty). ## Goal -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. +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. ## Operating Constraints -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. +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. +5. **NO PSEUDO-CONTRACTS (CRITICAL)**: You are STRICTLY FORBIDDEN from using automated scripts (e.g., Python/Bash/sed) to mechanically inject boilerplate, placeholders, or "pseudo-contracts" (such as `# @PURPOSE: Semantic contract placeholder.` or `# @PRE: Inputs satisfy function contract.`) merely to artificially inflate the compliance score. Every semantic tag, anchor, and contract you add MUST reflect a genuine, deep understanding of the specific code's actual logic and business requirements. Automated "stubbing" of semantics is classified as codebase corruption. ## Execution Steps -### 1. Generate Semantic State (Analyze) -Run the generator script to map the current reality: +### 1. Generate Semantic Map + +Run the generator script from the repository root with the agent report option: + ```bash -python3 generate_semantic_map.py +python3 generate_semantic_map.py --agent-report ``` -Parse the output (Global Score, Critical Parsing Errors, Files with Score < 0.7). -### 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`). +### 2. Analyze Compliance Status -### 3. The Delegation Loop (For each file in the queue) -For every target file, execute this exact sequence: +**Parse the JSON output to identify**: +- `global_score`: The overall compliance percentage. +- `critical_parsing_errors_count`: Number of Priority 1 blockers. +- `priority_2_tier1_critical_missing_mandatory_tags_files`: Number of CRITICAL files needing metadata. +- `targets`: Status of key architectural files. -* **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. +### 3. Audit Critical Issues -### 4. Verification -Once the queue is empty, re-run `python3 generate_semantic_map.py` to prove the metrics have improved. +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. -## Output Format +### 4. Formulate Remediation Plan -Return a structured summary of the operation: +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. -```text -=== GRACE SEMANTIC ORCHESTRATION REPORT === -Initial Global Score: [X]% -Final Global Score: [Y]% -Status:[PASS / BLOCKED] +### 5. Execute Fixes (Optional/Handoff) -Files Processed: -1. [file_path] -[PASS (1 attempt) | PASS (2 attempts) | FAILED] -2. ... +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 --agent-report` 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. -Escalations (Human Intervention Required): --[file_path]: Failed auditor review 3 times. Reason: [Last Auditor Note]. -``` ## Context $ARGUMENTS -``` diff --git a/backend/src/api/routes/migration.py b/backend/src/api/routes/migration.py index 71d06c03..b32c2143 100644 --- a/backend/src/api/routes/migration.py +++ b/backend/src/api/routes/migration.py @@ -26,7 +26,7 @@ from ...dependencies import get_config_manager, get_task_manager, has_permission from ...core.database import get_db from ...models.dashboard import DashboardMetadata, DashboardSelection from ...core.superset_client import SupersetClient -from ...core.logger import belief_scope +from ...core.logger import logger, belief_scope from ...core.migration.dry_run_orchestrator import MigrationDryRunService from ...core.mapping_service import IdMappingService from ...models.mapping import ResourceMapping @@ -46,14 +46,18 @@ async def get_dashboards( _ = Depends(has_permission("plugin:migration", "EXECUTE")) ): with belief_scope("get_dashboards", f"env_id={env_id}"): + logger.reason(f"Fetching dashboards for environment: {env_id}") environments = config_manager.get_environments() - env = next((e for e in environments if e.id == env_id), None) - if not env: - raise HTTPException(status_code=404, detail="Environment not found") + env = next((e for e in environments if e.id == env_id), None) + + if not env: + logger.explore(f"Environment {env_id} not found in configuration") + raise HTTPException(status_code=404, detail="Environment not found") - client = SupersetClient(env) - dashboards = client.get_dashboards_summary() - return dashboards + client = SupersetClient(env) + dashboards = client.get_dashboards_summary() + logger.reflect(f"Retrieved {len(dashboards)} dashboards from {env_id}") + return dashboards # [/DEF:get_dashboards:Function] # [DEF:execute_migration:Function] @@ -70,31 +74,30 @@ async def execute_migration( _ = Depends(has_permission("plugin:migration", "EXECUTE")) ): with belief_scope("execute_migration"): + logger.reason(f"Initiating migration from {selection.source_env_id} to {selection.target_env_id}") + # Validate environments exist environments = config_manager.get_environments() - env_ids = {e.id for e in environments} - if selection.source_env_id not in env_ids or selection.target_env_id not in env_ids: - raise HTTPException(status_code=400, detail="Invalid source or target environment") + env_ids = {e.id for e in environments} + + if selection.source_env_id not in env_ids or selection.target_env_id not in env_ids: + logger.explore("Invalid environment selection", extra={"source": selection.source_env_id, "target": selection.target_env_id}) + raise HTTPException(status_code=400, detail="Invalid source or target environment") - # Create migration task with debug logging - from ...core.logger import logger - - # Include replace_db_config and fix_cross_filters in the task parameters - task_params = selection.dict() - task_params['replace_db_config'] = selection.replace_db_config - task_params['fix_cross_filters'] = selection.fix_cross_filters - - logger.info(f"Creating migration task with params: {task_params}") - logger.info(f"Available environments: {env_ids}") - logger.info(f"Source env: {selection.source_env_id}, Target env: {selection.target_env_id}") - - try: - task = await task_manager.create_task("superset-migration", task_params) - logger.info(f"Task created successfully: {task.id}") - return {"task_id": task.id, "message": "Migration initiated"} - except Exception as e: - logger.error(f"Task creation failed: {e}") - raise HTTPException(status_code=500, detail=f"Failed to create migration task: {str(e)}") + # Include replace_db_config and fix_cross_filters in the task parameters + task_params = selection.dict() + task_params['replace_db_config'] = selection.replace_db_config + task_params['fix_cross_filters'] = selection.fix_cross_filters + + logger.reason(f"Creating migration task with {len(selection.selected_ids)} dashboards") + + try: + task = await task_manager.create_task("superset-migration", task_params) + logger.reflect(f"Migration task created: {task.id}") + return {"task_id": task.id, "message": "Migration initiated"} + except Exception as e: + logger.explore(f"Task creation failed: {e}") + raise HTTPException(status_code=500, detail=f"Failed to create migration task: {str(e)}") # [/DEF:execute_migration:Function] @@ -112,29 +115,41 @@ async def dry_run_migration( _ = Depends(has_permission("plugin:migration", "EXECUTE")) ): with belief_scope("dry_run_migration"): + logger.reason(f"Starting dry run: {selection.source_env_id} -> {selection.target_env_id}") + environments = config_manager.get_environments() - env_map = {env.id: env for env in environments} - source_env = env_map.get(selection.source_env_id) - target_env = env_map.get(selection.target_env_id) - if not source_env or not target_env: - raise HTTPException(status_code=400, detail="Invalid source or target environment") - if selection.source_env_id == selection.target_env_id: - raise HTTPException(status_code=400, detail="Source and target environments must be different") - if not selection.selected_ids: - raise HTTPException(status_code=400, detail="No dashboards selected for dry run") + env_map = {env.id: env for env in environments} + source_env = env_map.get(selection.source_env_id) + target_env = env_map.get(selection.target_env_id) + + if not source_env or not target_env: + logger.explore("Invalid environment selection for dry run") + raise HTTPException(status_code=400, detail="Invalid source or target environment") + + if selection.source_env_id == selection.target_env_id: + logger.explore("Source and target environments are identical") + raise HTTPException(status_code=400, detail="Source and target environments must be different") + + if not selection.selected_ids: + logger.explore("No dashboards selected for dry run") + raise HTTPException(status_code=400, detail="No dashboards selected for dry run") - service = MigrationDryRunService() - source_client = SupersetClient(source_env) - target_client = SupersetClient(target_env) - try: - return service.run( - selection=selection, - source_client=source_client, - target_client=target_client, - db=db, - ) - except ValueError as exc: - raise HTTPException(status_code=500, detail=str(exc)) from exc + service = MigrationDryRunService() + source_client = SupersetClient(source_env) + target_client = SupersetClient(target_env) + + try: + result = service.run( + selection=selection, + source_client=source_client, + target_client=target_client, + db=db, + ) + logger.reflect("Dry run analysis complete") + return result + except ValueError as exc: + logger.explore(f"Dry run orchestrator failed: {exc}") + raise HTTPException(status_code=500, detail=str(exc)) from exc # [/DEF:dry_run_migration:Function] # [DEF:get_migration_settings:Function] diff --git a/backend/src/core/auth/repository.py b/backend/src/core/auth/repository.py index 66830c2e..440f3f84 100644 --- a/backend/src/core/auth/repository.py +++ b/backend/src/core/auth/repository.py @@ -32,7 +32,13 @@ class AuthRepository: # @DATA_CONTRACT: Input[Session] -> Output[None] def __init__(self, db: Session): with belief_scope("AuthRepository.__init__"): + if not isinstance(db, Session): + logger.explore("Invalid session provided to AuthRepository", extra={"type": type(db)}) + raise TypeError("db must be an instance of sqlalchemy.orm.Session") + + logger.reason("Binding AuthRepository to database session") self.db = db + logger.reflect("AuthRepository initialized") # [/DEF:__init__:Function] # [DEF:get_user_by_username:Function] @@ -43,7 +49,17 @@ class AuthRepository: # @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() + if not username or not isinstance(username, str): + raise ValueError("username must be a non-empty string") + + logger.reason(f"Querying user by username: {username}") + user = self.db.query(User).filter(User.username == username).first() + + if user: + logger.reflect(f"User found: {username}") + else: + logger.explore(f"User not found: {username}") + return user # [/DEF:get_user_by_username:Function] # [DEF:get_user_by_id:Function] @@ -54,7 +70,17 @@ class AuthRepository: # @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() + if not user_id or not isinstance(user_id, str): + raise ValueError("user_id must be a non-empty string") + + logger.reason(f"Querying user by ID: {user_id}") + user = self.db.query(User).filter(User.id == user_id).first() + + if user: + logger.reflect(f"User found by ID: {user_id}") + else: + logger.explore(f"User not found by ID: {user_id}") + return user # [/DEF:get_user_by_id:Function] # [DEF:get_role_by_name:Function] @@ -76,10 +102,15 @@ class AuthRepository: # @DATA_CONTRACT: Input[User] -> Output[None] def update_last_login(self, user: User): with belief_scope("AuthRepository.update_last_login"): + if not isinstance(user, User): + raise TypeError("user must be an instance of User") + from datetime import datetime + logger.reason(f"Updating last login for user: {user.username}") user.last_login = datetime.utcnow() self.db.add(user) self.db.commit() + logger.reflect(f"Last login updated and committed for user: {user.username}") # [/DEF:update_last_login:Function] # [DEF:get_role_by_id:Function] @@ -144,9 +175,14 @@ class AuthRepository: preference: UserDashboardPreference, ) -> UserDashboardPreference: with belief_scope("AuthRepository.save_user_dashboard_preference"): + if not isinstance(preference, UserDashboardPreference): + raise TypeError("preference must be an instance of UserDashboardPreference") + + logger.reason(f"Saving dashboard preference for user: {preference.user_id}") self.db.add(preference) self.db.commit() self.db.refresh(preference) + logger.reflect(f"Dashboard preference saved and refreshed for user: {preference.user_id}") return preference # [/DEF:save_user_dashboard_preference:Function] diff --git a/backend/src/core/config_manager.py b/backend/src/core/config_manager.py index 1a41f6de..7965e5c1 100644 --- a/backend/src/core/config_manager.py +++ b/backend/src/core/config_manager.py @@ -36,18 +36,23 @@ class ConfigManager: # @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" + with belief_scope("ConfigManager.__init__"): + if not isinstance(config_path, str) or not config_path: + logger.explore("Invalid config_path provided", extra={"path": config_path}) + raise ValueError("config_path must be a non-empty string") - logger.info(f"[ConfigManager][Entry] Initializing with legacy path {config_path}") + logger.reason(f"Initializing ConfigManager with legacy path: {config_path}") self.config_path = Path(config_path) self.config: AppConfig = self._load_config() configure_logger(self.config.settings.logging) - assert isinstance(self.config, AppConfig), "self.config must be an instance of AppConfig" + + if not isinstance(self.config, AppConfig): + logger.explore("Config loading resulted in invalid type", extra={"type": type(self.config)}) + raise TypeError("self.config must be an instance of AppConfig") - logger.info("[ConfigManager][Exit] Initialized") + logger.reflect("ConfigManager initialization complete") # [/DEF:__init__:Function] # [DEF:_default_config:Function] @@ -104,20 +109,23 @@ class ConfigManager: # @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"): + with belief_scope("ConfigManager._load_config"): session: Session = SessionLocal() try: record = self._get_record(session) if record and record.payload: - logger.info("[_load_config][Coherence:OK] Configuration loaded from database") - return AppConfig(**record.payload) + logger.reason("Configuration found in database") + config = AppConfig(**record.payload) + logger.reflect("Database configuration validated") + return config - logger.info("[_load_config][Action] No database config found, migrating legacy config") + logger.reason("No database config found, initiating legacy migration") config = self._load_from_legacy_file() self._save_config_to_db(config, session=session) + logger.reflect("Legacy configuration migrated to database") return config except Exception as e: - logger.error(f"[_load_config][Coherence:Failed] Error loading config from DB: {e}") + logger.explore(f"Error loading config from DB: {e}") return self._default_config() finally: session.close() @@ -130,8 +138,9 @@ class ConfigManager: # @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" + with belief_scope("ConfigManager._save_config_to_db"): + if not isinstance(config, AppConfig): + raise TypeError("config must be an instance of AppConfig") owns_session = session is None db = session or SessionLocal() @@ -139,15 +148,17 @@ class ConfigManager: record = self._get_record(db) payload = config.model_dump() if record is None: + logger.reason("Creating new global configuration record") record = AppConfigRecord(id="global", payload=payload) db.add(record) else: + logger.reason("Updating existing global configuration record") record.payload = payload db.commit() - logger.info("[_save_config_to_db][Action] Configuration saved to database") + logger.reflect("Configuration successfully committed to database") except Exception as e: db.rollback() - logger.error(f"[_save_config_to_db][Coherence:Failed] Failed to save: {e}") + logger.explore(f"Failed to save configuration: {e}") raise finally: if owns_session: @@ -183,14 +194,15 @@ class ConfigManager: # @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") - - assert isinstance(settings, GlobalSettings), "settings must be an instance of GlobalSettings" + with belief_scope("ConfigManager.update_global_settings"): + if not isinstance(settings, GlobalSettings): + raise TypeError("settings must be an instance of GlobalSettings") + + logger.reason("Updating global settings and persisting") self.config.settings = settings self.save() configure_logger(settings.logging) - logger.info("[update_global_settings][Exit] Settings updated") + logger.reflect("Global settings updated and logger reconfigured") # [/DEF:update_global_settings:Function] # [DEF:validate_path:Function] @@ -257,14 +269,15 @@ class ConfigManager: # @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}") - assert isinstance(env, Environment), "env must be an instance of Environment" + with belief_scope("ConfigManager.add_environment"): + if not isinstance(env, Environment): + raise TypeError("env must be an instance of Environment") + logger.reason(f"Adding/Updating environment: {env.id}") self.config.environments = [e for e in self.config.environments if e.id != env.id] self.config.environments.append(env) self.save() - logger.info("[add_environment][Exit] Environment added") + logger.reflect(f"Environment {env.id} persisted") # [/DEF:add_environment:Function] # [DEF:update_environment:Function] @@ -274,22 +287,25 @@ class ConfigManager: # @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}") - assert env_id and isinstance(env_id, str), "env_id must be a non-empty string" - assert isinstance(updated_env, Environment), "updated_env must be an instance of Environment" + with belief_scope("ConfigManager.update_environment"): + if not env_id or not isinstance(env_id, str): + raise ValueError("env_id must be a non-empty string") + if not isinstance(updated_env, Environment): + raise TypeError("updated_env must be an instance of Environment") + logger.reason(f"Attempting to update environment: {env_id}") for i, env in enumerate(self.config.environments): if env.id == env_id: if updated_env.password == "********": + logger.reason("Preserving existing password for masked update") updated_env.password = env.password self.config.environments[i] = updated_env self.save() - logger.info(f"[update_environment][Coherence:OK] Updated {env_id}") + logger.reflect(f"Environment {env_id} updated and saved") return True - logger.warning(f"[update_environment][Coherence:Failed] Environment {env_id} not found") + logger.explore(f"Environment {env_id} not found for update") return False # [/DEF:update_environment:Function] @@ -300,18 +316,19 @@ class ConfigManager: # @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}") - assert env_id and isinstance(env_id, str), "env_id must be a non-empty string" + with belief_scope("ConfigManager.delete_environment"): + if not env_id or not isinstance(env_id, str): + raise ValueError("env_id must be a non-empty string") + logger.reason(f"Attempting to delete environment: {env_id}") original_count = len(self.config.environments) self.config.environments = [e for e in self.config.environments if e.id != env_id] if len(self.config.environments) < original_count: self.save() - logger.info(f"[delete_environment][Action] Deleted {env_id}") + logger.reflect(f"Environment {env_id} deleted and configuration saved") else: - logger.warning(f"[delete_environment][Coherence:Failed] Environment {env_id} not found") + logger.explore(f"Environment {env_id} not found for deletion") # [/DEF:delete_environment:Function] diff --git a/backend/src/core/migration_engine.py b/backend/src/core/migration_engine.py index 11681676..fb479b10 100644 --- a/backend/src/core/migration_engine.py +++ b/backend/src/core/migration_engine.py @@ -38,7 +38,9 @@ class MigrationEngine: # @PARAM: mapping_service (Optional[IdMappingService]) - Used for resolving target environment integer IDs. def __init__(self, mapping_service: Optional[IdMappingService] = None): with belief_scope("MigrationEngine.__init__"): + logger.reason("Initializing MigrationEngine") self.mapping_service = mapping_service + logger.reflect("MigrationEngine initialized") # [/DEF:__init__:Function] # [DEF:transform_zip:Function] @@ -59,12 +61,14 @@ class MigrationEngine: Transform a Superset export ZIP by replacing database UUIDs and optionally fixing cross-filters. """ with belief_scope("MigrationEngine.transform_zip"): + logger.reason(f"Starting ZIP transformation: {zip_path} -> {output_path}") + with tempfile.TemporaryDirectory() as temp_dir_str: temp_dir = Path(temp_dir_str) try: # 1. Extract - logger.info(f"[MigrationEngine.transform_zip][Action] Extracting ZIP: {zip_path}") + logger.reason(f"Extracting source archive to {temp_dir}") with zipfile.ZipFile(zip_path, 'r') as zf: zf.extractall(temp_dir) @@ -72,33 +76,33 @@ class MigrationEngine: dataset_files = list(temp_dir.glob("**/datasets/**/*.yaml")) + list(temp_dir.glob("**/datasets/*.yaml")) dataset_files = list(set(dataset_files)) - logger.info(f"[MigrationEngine.transform_zip][State] Found {len(dataset_files)} dataset files.") + logger.reason(f"Transforming {len(dataset_files)} dataset YAML files") for ds_file in dataset_files: - logger.info(f"[MigrationEngine.transform_zip][Action] Transforming dataset: {ds_file}") self._transform_yaml(ds_file, db_mapping) # 2.5 Patch Cross-Filters (Dashboards) - if fix_cross_filters and self.mapping_service and target_env_id: - dash_files = list(temp_dir.glob("**/dashboards/**/*.yaml")) + list(temp_dir.glob("**/dashboards/*.yaml")) - dash_files = list(set(dash_files)) - - logger.info(f"[MigrationEngine.transform_zip][State] Found {len(dash_files)} dashboard files for patching.") - - # Gather all source UUID-to-ID mappings from the archive first - source_id_to_uuid_map = self._extract_chart_uuids_from_archive(temp_dir) - - for dash_file in dash_files: - logger.info(f"[MigrationEngine.transform_zip][Action] Patching dashboard: {dash_file}") - self._patch_dashboard_metadata(dash_file, target_env_id, source_id_to_uuid_map) + if fix_cross_filters: + if self.mapping_service and target_env_id: + dash_files = list(temp_dir.glob("**/dashboards/**/*.yaml")) + list(temp_dir.glob("**/dashboards/*.yaml")) + dash_files = list(set(dash_files)) + + logger.reason(f"Patching cross-filters for {len(dash_files)} dashboards") + + # Gather all source UUID-to-ID mappings from the archive first + source_id_to_uuid_map = self._extract_chart_uuids_from_archive(temp_dir) + + for dash_file in dash_files: + self._patch_dashboard_metadata(dash_file, target_env_id, source_id_to_uuid_map) + else: + logger.explore("Cross-filter patching requested but mapping service or target_env_id is missing") # 3. Re-package - logger.info(f"[MigrationEngine.transform_zip][Action] Re-packaging ZIP to: {output_path} (strip_databases={strip_databases})") + logger.reason(f"Re-packaging transformed archive (strip_databases={strip_databases})") with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zf: for root, dirs, files in os.walk(temp_dir): rel_root = Path(root).relative_to(temp_dir) if strip_databases and "databases" in rel_root.parts: - logger.info(f"[MigrationEngine.transform_zip][Action] Skipping file in databases directory: {rel_root}") continue for file in files: @@ -106,9 +110,10 @@ class MigrationEngine: arcname = file_path.relative_to(temp_dir) zf.write(file_path, arcname) + logger.reflect("ZIP transformation completed successfully") return True except Exception as e: - logger.error(f"[MigrationEngine.transform_zip][Coherence:Failed] Error transforming ZIP: {e}") + logger.explore(f"Error transforming ZIP: {e}") return False # [/DEF:transform_zip:Function] @@ -122,19 +127,23 @@ class MigrationEngine: # @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 belief_scope("MigrationEngine._transform_yaml"): + if not file_path.exists(): + logger.explore(f"YAML file not found: {file_path}") + return + with open(file_path, 'r') as f: data = yaml.safe_load(f) if not data: return - # Superset dataset YAML structure: - # database_uuid: ... source_uuid = data.get('database_uuid') if source_uuid in db_mapping: + logger.reason(f"Replacing database UUID in {file_path.name}") data['database_uuid'] = db_mapping[source_uuid] with open(file_path, 'w') as f: yaml.dump(data, f) + logger.reflect(f"Database UUID patched in {file_path.name}") # [/DEF:_transform_yaml:Function] # [DEF:_extract_chart_uuids_from_archive:Function] @@ -176,6 +185,9 @@ class MigrationEngine: def _patch_dashboard_metadata(self, file_path: Path, target_env_id: str, source_map: Dict[int, str]): with belief_scope("MigrationEngine._patch_dashboard_metadata"): try: + if not file_path.exists(): + return + with open(file_path, 'r') as f: data = yaml.safe_load(f) @@ -186,18 +198,13 @@ class MigrationEngine: if not metadata_str: return - metadata = json.loads(metadata_str) - modified = False - - # We need to deeply traverse and replace. For MVP, string replacement over the raw JSON is an option, - # but careful dict traversal is safer. - # Fetch target UUIDs for everything we know: uuids_needed = list(source_map.values()) + logger.reason(f"Resolving {len(uuids_needed)} remote IDs for dashboard metadata patching") target_ids = self.mapping_service.get_remote_ids_batch(target_env_id, ResourceType.CHART, uuids_needed) if not target_ids: - logger.info("[MigrationEngine._patch_dashboard_metadata][Reflect] No remote target IDs found in mapping database.") + logger.reflect("No remote target IDs found in mapping database for this dashboard.") return # Map Source Int -> Target Int @@ -210,21 +217,16 @@ class MigrationEngine: missing_targets.append(s_id) if missing_targets: - logger.warning(f"[MigrationEngine._patch_dashboard_metadata][Coherence:Recoverable] Missing target IDs for source IDs: {missing_targets}. Cross-filters for these IDs might break.") + logger.explore(f"Missing target IDs for source IDs: {missing_targets}. Cross-filters might break.") if not source_to_target: - logger.info("[MigrationEngine._patch_dashboard_metadata][Reflect] No source IDs matched remotely. Skipping patch.") + logger.reflect("No source IDs matched remotely. Skipping patch.") return - # Complex metadata traversal would go here (e.g. for native_filter_configuration) - # We use regex replacement over the string for safety over unknown nested dicts. - + logger.reason(f"Patching {len(source_to_target)} ID references in json_metadata") new_metadata_str = metadata_str - # Replace chartId and datasetId assignments explicitly. - # Pattern: "datasetId": 42 or "chartId": 42 for s_id, t_id in source_to_target.items(): - # Replace in native_filter_configuration targets new_metadata_str = re.sub(r'("datasetId"\s*:\s*)' + str(s_id) + r'(\b)', r'\g<1>' + str(t_id) + r'\g<2>', new_metadata_str) new_metadata_str = re.sub(r'("chartId"\s*:\s*)' + str(s_id) + r'(\b)', r'\g<1>' + str(t_id) + r'\g<2>', new_metadata_str) @@ -233,10 +235,10 @@ class MigrationEngine: with open(file_path, 'w') as f: yaml.dump(data, f) - logger.info(f"[MigrationEngine._patch_dashboard_metadata][Reason] Re-serialized modified JSON metadata for dashboard.") + logger.reflect(f"Dashboard metadata patched and saved: {file_path.name}") except Exception as e: - logger.error(f"[MigrationEngine._patch_dashboard_metadata][Coherence:Failed] Metadata patch failed: {e}") + logger.explore(f"Metadata patch failed for {file_path.name}: {e}") # [/DEF:_patch_dashboard_metadata:Function] diff --git a/frontend/src/routes/migration/+page.svelte b/frontend/src/routes/migration/+page.svelte index 47c4f1c0..814f1d38 100644 --- a/frontend/src/routes/migration/+page.svelte +++ b/frontend/src/routes/migration/+page.svelte @@ -15,10 +15,10 @@ @RELATION: [BINDS_TO] ->[frontend/src/components/TaskLogViewer.svelte] @RELATION: [BINDS_TO] ->[frontend/src/components/PasswordPrompt.svelte] @INVARIANT: Migration start is blocked unless source and target environments are selected, distinct, and at least one dashboard is selected. -@UX_STATE: Idle -> User configures source/target environments, dashboard selection, and migration options. -@UX_STATE: Loading -> Environment/database/dry-run fetch operations disable relevant actions and show progress text. -@UX_STATE: Error -> Error banner/prompt message is shown while keeping user input intact for correction. -@UX_STATE: Success -> Dry-run summary or active task view is rendered after successful API operations. +@UX_STATE: [Idle] -> User configures source/target environments, dashboard selection, and migration options. +@UX_STATE: [Loading] -> Environment/database/dry-run fetch operations disable relevant actions and show progress text. +@UX_STATE: [Error] -> Error banner/prompt message is shown while keeping user input intact for correction. +@UX_STATE: [Success] -> Dry-run summary or active task view is rendered after successful API operations. @UX_FEEDBACK: Inline error banner, disabled CTA states, loading labels, dry-run summary cards, modal dialogs. @UX_RECOVERY: User can adjust selection, refresh databases, retry dry-run/migration, resume task with passwords, or cancel modal flow. @UX_REACTIVITY: State transitions rely on Svelte reactive bindings and store subscription to selectedTask. @@ -102,9 +102,12 @@ */ async function fetchEnvironments() { return belief_scope("fetchEnvironments", async () => { + console.info("[fetchEnvironments][REASON] Initializing environment list for selection"); try { environments = await api.getEnvironmentsList(); + console.info("[fetchEnvironments][REFLECT] Environments loaded", { count: environments.length }); } catch (e) { + console.error("[fetchEnvironments][EXPLORE] Failed to fetch environments", e); error = e.message; } finally { loading = false; @@ -122,10 +125,13 @@ */ async function fetchDashboards(envId: string) { return belief_scope("fetchDashboards", async () => { + console.info("[fetchDashboards][REASON] Fetching dashboards for environment", { envId }); try { dashboards = await api.requestApi(`/environments/${envId}/dashboards`); selectedDashboardIds = []; // Reset selection when env changes + console.info("[fetchDashboards][REFLECT] Dashboards loaded", { count: dashboards.length }); } catch (e) { + console.error("[fetchDashboards][EXPLORE] Failed to fetch dashboards", e); error = e.message; dashboards = []; } @@ -135,8 +141,18 @@ onMount(fetchEnvironments); - // Reactive: fetch dashboards when source env changes - $: if (sourceEnvId) fetchDashboards(sourceEnvId); + // [DEF:ReactiveDashboardFetch:Block] + /** + * @PURPOSE: Automatically fetch dashboards when the source environment is changed. + * @PRE: sourceEnvId is not empty. + * @POST: fetchDashboards is called with the new sourceEnvId. + * @UX_STATE: [Loading] -> Triggered when sourceEnvId changes. + */ + $: if (sourceEnvId) { + console.info("[ReactiveDashboardFetch][REASON] Source environment changed, fetching dashboards", { sourceEnvId }); + fetchDashboards(sourceEnvId); + } + // [/DEF:ReactiveDashboardFetch:Block] // [DEF:fetchDatabases:Function] /** @@ -146,7 +162,11 @@ */ async function fetchDatabases() { return belief_scope("fetchDatabases", async () => { - if (!sourceEnvId || !targetEnvId) return; + if (!sourceEnvId || !targetEnvId) { + console.warn("[fetchDatabases][EXPLORE] Missing environment IDs for database fetch"); + return; + } + console.info("[fetchDatabases][REASON] Fetching databases and suggestions for mapping", { sourceEnvId, targetEnvId }); fetchingDbs = true; error = ""; @@ -167,7 +187,13 @@ targetDatabases = tgt; mappings = maps; suggestions = sugs; + console.info("[fetchDatabases][REFLECT] Databases and mappings loaded", { + sourceCount: src.length, + targetCount: tgt.length, + mappingCount: maps.length + }); } catch (e) { + console.error("[fetchDatabases][EXPLORE] Failed to fetch databases", e); error = e.message; } finally { fetchingDbs = false; @@ -188,8 +214,12 @@ const sDb = sourceDatabases.find((d) => d.uuid === sourceUuid); const tDb = targetDatabases.find((d) => d.uuid === targetUuid); - if (!sDb || !tDb) return; + if (!sDb || !tDb) { + console.warn("[handleMappingUpdate][EXPLORE] Database not found for mapping", { sourceUuid, targetUuid }); + return; + } + console.info("[handleMappingUpdate][REASON] Updating database mapping", { sourceUuid, targetUuid }); try { const savedMapping = await api.postApi("/mappings", { source_env_id: sourceEnvId, @@ -204,7 +234,9 @@ ...mappings.filter((m) => m.source_db_uuid !== sourceUuid), savedMapping, ]; + console.info("[handleMappingUpdate][REFLECT] Mapping saved successfully"); } catch (e) { + console.error("[handleMappingUpdate][EXPLORE] Failed to save mapping", e); error = e.message; } }); @@ -234,6 +266,13 @@ // Ideally, TaskHistory or TaskRunner emits an event when input is needed. // Or we watch selectedTask. + // [DEF:ReactivePasswordPrompt:Block] + /** + * @PURPOSE: Monitor selected task for input requests and trigger password prompt. + * @PRE: $selectedTask is not null and status is AWAITING_INPUT. + * @POST: showPasswordPrompt is set to true if input_request is database_password. + * @UX_STATE: [AwaitingInput] -> Password prompt modal is displayed. + */ $: if ( $selectedTask && $selectedTask.status === "AWAITING_INPUT" && @@ -241,6 +280,7 @@ ) { const req = $selectedTask.input_request; if (req.type === "database_password") { + console.info("[ReactivePasswordPrompt][REASON] Task awaiting database passwords", { taskId: $selectedTask.id }); passwordPromptDatabases = req.databases || []; passwordPromptErrorMessage = req.error_message || ""; showPasswordPrompt = true; @@ -251,6 +291,7 @@ // showPasswordPrompt = false; // Actually, don't auto-close, let the user or success handler close it. } + // [/DEF:ReactivePasswordPrompt:Block] // [/DEF:handlePasswordPrompt:Function] // [DEF:handleResumeMigration:Function] @@ -278,31 +319,41 @@ // [DEF:startMigration:Function] /** - * @purpose Starts the migration process. - * @pre sourceEnvId and targetEnvId must be set and different. - * @post Migration task is started and selectedTask is updated. + * @PURPOSE: Initiates the migration process by sending the selection to the backend. + * @PRE: sourceEnvId and targetEnvId are set and different; at least one dashboard is selected. + * @POST: A migration task is created and selectedTask store is updated. + * @SIDE_EFFECT: Resets dryRunResult; updates error state on failure. + * @UX_STATE: [Loading] -> [Success] or [Error] */ async function startMigration() { return belief_scope("startMigration", async () => { if (!sourceEnvId || !targetEnvId) { + console.warn("[startMigration][EXPLORE] Missing environment selection"); error = $t.migration?.select_both_envs || "Please select both source and target environments."; return; } if (sourceEnvId === targetEnvId) { + console.warn("[startMigration][EXPLORE] Source and target environments are identical"); error = $t.migration?.different_envs || "Source and target environments must be different."; return; } if (selectedDashboardIds.length === 0) { + console.warn("[startMigration][EXPLORE] No dashboards selected"); error = $t.migration?.select_dashboards || "Please select at least one dashboard to migrate."; return; } + console.info("[startMigration][REASON] Initiating migration execution", { + sourceEnvId, + targetEnvId, + dashboardCount: selectedDashboardIds.length + }); error = ""; try { dryRunResult = null; @@ -313,14 +364,9 @@ replace_db_config: replaceDb, fix_cross_filters: fixCrossFilters, }; - console.log( - `[MigrationDashboard][Action] Starting migration with selection:`, - selection, - ); + const result = await api.postApi("/migration/execute", selection); - console.log( - `[MigrationDashboard][Action] Migration started: ${result.task_id} - ${result.message}`, - ); + console.info("[startMigration][REFLECT] Migration task created", { taskId: result.task_id }); // Wait a brief moment for the backend to ensure the task is retrievable await new Promise((r) => setTimeout(r, 500)); @@ -329,12 +375,9 @@ try { const task = await api.getTask(result.task_id); selectedTask.set(task); + console.info("[startMigration][REFLECT] Task details fetched and store updated"); } catch (fetchErr) { - // Fallback: create a temporary task object to switch view immediately - console.warn( - $t.migration?.task_placeholder_warn || - "Could not fetch task details immediately, using placeholder.", - ); + console.warn("[startMigration][EXPLORE] Could not fetch task details immediately, using placeholder", fetchErr); selectedTask.set({ id: result.task_id, plugin_id: "superset-migration", @@ -344,7 +387,7 @@ }); } } catch (e) { - console.error(`[MigrationDashboard][Failure] Migration failed:`, e); + console.error("[startMigration][EXPLORE] Migration initiation failed", e); error = e.message; } }); @@ -353,36 +396,38 @@ // [DEF:startDryRun:Function] /** - * @purpose Builds pre-flight diff and risk summary without applying migration. - * @pre source/target environments and selected dashboards are valid. - * @post dryRunResult is populated with backend response. - * @UX_STATE: Idle -> Dry Run button is enabled when selection is valid. - * @UX_STATE: Loading -> Dry Run button shows "Dry Run..." and stays disabled. - * @UX_STATE: Error -> error banner is displayed and dryRunResult resets to null. + * @PURPOSE: Performs a dry-run migration to identify potential risks and changes. + * @PRE: source/target environments and selected dashboards are valid. + * @POST: dryRunResult is populated with the pre-flight analysis. + * @UX_STATE: [Loading] -> [Success] or [Error] * @UX_FEEDBACK: User sees summary cards + risk block + JSON details after success. * @UX_RECOVERY: User can adjust selection and press Dry Run again. */ async function startDryRun() { return belief_scope("startDryRun", async () => { if (!sourceEnvId || !targetEnvId) { + console.warn("[startDryRun][EXPLORE] Missing environment selection"); error = $t.migration?.select_both_envs || "Please select both source and target environments."; return; } if (sourceEnvId === targetEnvId) { + console.warn("[startDryRun][EXPLORE] Source and target environments are identical"); error = $t.migration?.different_envs || "Source and target environments must be different."; return; } if (selectedDashboardIds.length === 0) { + console.warn("[startDryRun][EXPLORE] No dashboards selected"); error = $t.migration?.select_dashboards || "Please select at least one dashboard to migrate."; return; } + console.info("[startDryRun][REASON] Initiating dry-run analysis", { sourceEnvId, targetEnvId }); error = ""; dryRunLoading = true; try { @@ -394,7 +439,9 @@ fix_cross_filters: fixCrossFilters, }; dryRunResult = await api.postApi("/migration/dry-run", selection); + console.info("[startDryRun][REFLECT] Dry-run analysis completed", { riskScore: dryRunResult.risk.score }); } catch (e) { + console.error("[startDryRun][EXPLORE] Dry-run analysis failed", e); error = e.message; dryRunResult = null; } finally { @@ -418,20 +465,29 @@ -->
+ + + + + {#if $selectedTask}
-
{:else} + {#if loading}

{$t.migration?.loading_envs }

{:else if error} @@ -442,6 +498,7 @@
{/if} +
+
@@ -476,6 +534,7 @@
+
{ + console.info("[MigrationOptionsSection][REASON] Database replacement toggled", { replaceDb }); if (replaceDb && sourceDatabases.length === 0) fetchDatabases(); }} class="h-4 w-4 text-indigo-600 focus:ring-indigo-500 border-gray-300 rounded" @@ -505,6 +565,7 @@
+ {#if replaceDb}
@@ -559,6 +620,7 @@
+ {#if dryRunResult}

Pre-flight Diff

@@ -599,15 +661,24 @@
{/if} + {/if} - + + (showLogViewer = false)} + on:close={() => { + console.info("[MigrationModals][REASON] Closing log viewer"); + showLogViewer = false; + }} /> (showPasswordPrompt = false)} + on:cancel={() => { + console.info("[MigrationModals][REASON] User cancelled password prompt"); + showPasswordPrompt = false; + }} /> + diff --git a/generate_semantic_map.py b/generate_semantic_map.py index 1206f9fc..f9b1755c 100644 --- a/generate_semantic_map.py +++ b/generate_semantic_map.py @@ -18,6 +18,7 @@ import re import json import datetime import fnmatch +import argparse from enum import Enum from dataclasses import dataclass, field from typing import Dict, List, Optional, Any, Pattern, Tuple, Set @@ -965,6 +966,106 @@ class SemanticMapGenerator: self._generate_module_map() # [/DEF:_generate_artifacts:Function] + # [DEF:_print_agent_report:Function] + # @TIER: STANDARD + # @PURPOSE: Prints a JSON report optimized for AI agent orchestration and control. + # @PRE: Validation and artifact generation are complete. + # @POST: JSON report printed to stdout. + def _print_agent_report(self): + with belief_scope("_print_agent_report"): + # Calculate global score (re-using logic from _generate_report) + total_weighted_score = 0 + total_weight = 0 + for file_path, data in self.file_scores.items(): + tier = data["tier"] + score = data["score"] + weight = 3 if tier == Tier.CRITICAL else (2 if tier == Tier.STANDARD else 1) + total_weighted_score += score * weight + total_weight += weight + gs = total_weighted_score / total_weight if total_weight > 0 else 0 + + # Flatten entities to get per-file issues + file_data = {} + def collect_recursive(entities): + for e in entities: + path = e.file_path + if path not in file_data: + file_data[path] = {"issues": [], "tier": e.get_tier().value, "score": self.file_scores.get(path, {}).get("score", 0)} + file_data[path]["issues"].extend([i.to_dict() for i in e.compliance_issues]) + collect_recursive(e.children) + collect_recursive(self.entities) + + # Critical parsing errors + cpe = [] + for path, data in file_data.items(): + for i in data["issues"]: + msg = i.get("message", "").lower() + sev = i.get("severity", "").lower() + if "parsing" in msg and (sev == "error" or "critical" in msg): + cpe.append({"file": path, "severity": i.get("severity"), "message": i.get("message")}) + + # <0.7 by tier + lt = {"CRITICAL": 0, "STANDARD": 0, "TRIVIAL": 0, "UNKNOWN": 0} + for path, data in file_data.items(): + if data["score"] < 0.7: + tier = data["tier"] + lt[tier if tier in lt else "UNKNOWN"] += 1 + + # Priority counts + p2 = 0 + p3 = 0 + for path, data in file_data.items(): + tier = data["tier"] + issues = data["issues"] + if tier == "CRITICAL" and any("Missing Mandatory Tag" in i.get("message", "") for i in issues): + p2 += 1 + if tier == "STANDARD" and any("@RELATION" in i.get("message", "") and "Missing Mandatory Tag" in i.get("message", "") for i in issues): + p3 += 1 + + # Target files status + targets = [ + 'frontend/src/routes/migration/+page.svelte', + 'frontend/src/routes/migration/mappings/+page.svelte', + 'frontend/src/components/auth/ProtectedRoute.svelte', + 'backend/src/core/auth/repository.py', + 'backend/src/core/migration/risk_assessor.py', + 'backend/src/api/routes/migration.py', + 'backend/src/models/config.py', + 'backend/src/services/auth_service.py', + 'backend/src/core/config_manager.py', + 'backend/src/core/migration_engine.py' + ] + status = [] + for t in targets: + f = file_data.get(t) + if not f: + status.append({"path": t, "found": False}) + continue + sc = f["score"] + status.append({ + "path": t, + "found": True, + "score": sc, + "tier": f["tier"], + "under_0_7": sc < 0.7, + "violations": len(f["issues"]) > 0, + "issues_count": len(f["issues"]) + }) + + out = { + "global_score": gs, + "critical_parsing_errors_count": len(cpe), + "critical_parsing_errors": cpe[:50], + "lt_0_7_by_tier": lt, + "priority_1_blockers": len(cpe), + "priority_2_tier1_critical_missing_mandatory_tags_files": p2, + "priority_3_tier2_standard_missing_relation_files": p3, + "targets": status, + "total_files": len(file_data) + } + print(json.dumps(out, ensure_ascii=False)) + # [/DEF:_print_agent_report:Function] + # [DEF:_generate_report:Function] # @TIER: CRITICAL # @PURPOSE: Generates the Markdown compliance report with severity levels. @@ -1306,7 +1407,14 @@ class SemanticMapGenerator: if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Generate Semantic Map and Compliance Reports") + parser.add_argument("--agent-report", action="store_true", help="Output JSON report for AI agents") + args = parser.parse_args() + generator = SemanticMapGenerator(PROJECT_ROOT) generator.run() + if args.agent_report: + generator._print_agent_report() + # [/DEF:generate_semantic_map:Module] diff --git a/semantics/semantic_map.json b/semantics/semantic_map.json index 804f58f4..a30738a9 100644 --- a/semantics/semantic_map.json +++ b/semantics/semantic_map.json @@ -1,6 +1,6 @@ { "project_root": ".", - "generated_at": "2026-03-10T18:26:33.038330", + "generated_at": "2026-03-10T20:52:01.456257", "modules": [ { "name": "check_test_data", @@ -45,7 +45,7 @@ "type": "Module", "tier": "STANDARD", "start_line": 1, - "end_line": 1312, + "end_line": 1420, "tags": { "PURPOSE": "Scans the codebase to generate a Semantic Map, Module Map, and Compliance Report based on the System Standard.", "PRE": "Valid directory containing code to scan.", @@ -82,8 +82,8 @@ "name": "__init__", "type": "Function", "tier": "TRIVIAL", - "start_line": 27, - "end_line": 34, + "start_line": 28, + "end_line": 35, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Mock init for self-containment.", @@ -102,8 +102,8 @@ "name": "__enter__", "type": "Function", "tier": "TRIVIAL", - "start_line": 36, - "end_line": 43, + "start_line": 37, + "end_line": 44, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Mock enter.", @@ -122,8 +122,8 @@ "name": "__exit__", "type": "Function", "tier": "TRIVIAL", - "start_line": 45, - "end_line": 52, + "start_line": 46, + "end_line": 53, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Mock exit.", @@ -142,8 +142,8 @@ "name": "Tier", "type": "Class", "tier": "TRIVIAL", - "start_line": 59, - "end_line": 65, + "start_line": 60, + "end_line": 66, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Enumeration of semantic tiers defining validation strictness." @@ -160,8 +160,8 @@ "name": "Severity", "type": "Class", "tier": "TRIVIAL", - "start_line": 69, - "end_line": 75, + "start_line": 70, + "end_line": 76, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Severity levels for compliance issues." @@ -178,8 +178,8 @@ "name": "ComplianceIssue", "type": "Class", "tier": "TRIVIAL", - "start_line": 138, - "end_line": 153, + "start_line": 139, + "end_line": 154, "tags": { "TIER": "TRIVIAL", "PURPOSE": "Represents a single compliance issue with severity." @@ -196,8 +196,8 @@ "name": "SemanticEntity", "type": "Class", "tier": "CRITICAL", - "start_line": 156, - "end_line": 413, + "start_line": 157, + "end_line": 414, "tags": { "TIER": "CRITICAL", "PURPOSE": "Represents a code entity (Module, Function, Component) found during parsing.", @@ -209,8 +209,8 @@ "name": "__init__", "type": "Function", "tier": "STANDARD", - "start_line": 161, - "end_line": 187, + "start_line": 162, + "end_line": 188, "tags": { "TIER": "STANDARD", "PURPOSE": "Initializes a new SemanticEntity instance.", @@ -225,32 +225,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 161 + "line_number": 162 } ], "score": 0.0 @@ -260,8 +260,8 @@ "name": "get_tier", "type": "Function", "tier": "STANDARD", - "start_line": 189, - "end_line": 228, + "start_line": 190, + "end_line": 229, "tags": { "TIER": "STANDARD", "PURPOSE": "Returns the tier of the entity, defaulting to STANDARD.", @@ -276,32 +276,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 189 + "line_number": 190 } ], "score": 0.0 @@ -311,8 +311,8 @@ "name": "to_dict", "type": "Function", "tier": "STANDARD", - "start_line": 230, - "end_line": 259, + "start_line": 231, + "end_line": 260, "tags": { "TIER": "STANDARD", "PURPOSE": "Serializes the entity to a dictionary for JSON output.", @@ -327,32 +327,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 230 + "line_number": 231 } ], "score": 0.0 @@ -362,8 +362,8 @@ "name": "validate", "type": "Function", "tier": "CRITICAL", - "start_line": 261, - "end_line": 366, + "start_line": 262, + "end_line": 367, "tags": { "TIER": "CRITICAL", "PURPOSE": "Checks for semantic compliance based on TIER requirements.", @@ -379,92 +379,92 @@ { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 261 + "line_number": 262 } ], "score": 0.0 @@ -474,8 +474,8 @@ "name": "get_score", "type": "Function", "tier": "STANDARD", - "start_line": 368, - "end_line": 412, + "start_line": 369, + "end_line": 413, "tags": { "TIER": "STANDARD", "PURPOSE": "Calculates a compliance score (0.0 to 1.0) based on tier requirements.", @@ -490,32 +490,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 368 + "line_number": 369 } ], "score": 0.0 @@ -532,8 +532,8 @@ "name": "get_patterns", "type": "Function", "tier": "STANDARD", - "start_line": 416, - "end_line": 454, + "start_line": 417, + "end_line": 455, "tags": { "TIER": "STANDARD", "PURPOSE": "Returns regex patterns for a specific language.", @@ -549,22 +549,22 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 416 + "line_number": 417 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 416 + "line_number": 417 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 416 + "line_number": 417 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 416 + "line_number": 417 } ], "score": 0.28 @@ -574,8 +574,8 @@ "name": "extract_svelte_props", "type": "Function", "tier": "STANDARD", - "start_line": 457, - "end_line": 483, + "start_line": 458, + "end_line": 484, "tags": { "TIER": "STANDARD", "PURPOSE": "Extracts props from Svelte component script section.", @@ -590,22 +590,22 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 457 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 457 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 457 + "line_number": 458 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 457 + "line_number": 458 } ], "score": 0.28 @@ -615,8 +615,8 @@ "name": "extract_svelte_events", "type": "Function", "tier": "STANDARD", - "start_line": 486, - "end_line": 520, + "start_line": 487, + "end_line": 521, "tags": { "TIER": "STANDARD", "PURPOSE": "Extracts dispatched events from Svelte component.", @@ -631,22 +631,22 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 486 + "line_number": 487 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 486 + "line_number": 487 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 486 + "line_number": 487 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 486 + "line_number": 487 } ], "score": 0.28 @@ -656,8 +656,8 @@ "name": "extract_data_flow", "type": "Function", "tier": "STANDARD", - "start_line": 523, - "end_line": 573, + "start_line": 524, + "end_line": 574, "tags": { "TIER": "STANDARD", "PURPOSE": "Extracts store subscriptions and data flow from Svelte component.", @@ -672,22 +672,22 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 524 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 524 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 524 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 523 + "line_number": 524 } ], "score": 0.28 @@ -697,8 +697,8 @@ "name": "parse_file", "type": "Function", "tier": "CRITICAL", - "start_line": 576, - "end_line": 772, + "start_line": 577, + "end_line": 773, "tags": { "TIER": "CRITICAL", "PURPOSE": "Parses a single file to extract semantic entities with tier awareness and enhanced Svelte analysis.", @@ -715,72 +715,72 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 576 + "line_number": 577 } ], "score": 0.0 @@ -790,8 +790,8 @@ "name": "SemanticMapGenerator", "type": "Class", "tier": "CRITICAL", - "start_line": 775, - "end_line": 1305, + "start_line": 776, + "end_line": 1406, "tags": { "TIER": "CRITICAL", "PURPOSE": "Orchestrates the mapping process with tier-based validation.", @@ -803,8 +803,8 @@ "name": "__init__", "type": "Function", "tier": "STANDARD", - "start_line": 780, - "end_line": 792, + "start_line": 781, + "end_line": 793, "tags": { "TIER": "STANDARD", "PURPOSE": "Initializes the generator with a root directory.", @@ -819,32 +819,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 780 + "line_number": 781 } ], "score": 0.0 @@ -854,8 +854,8 @@ "name": "_load_gitignore", "type": "Function", "tier": "STANDARD", - "start_line": 794, - "end_line": 810, + "start_line": 795, + "end_line": 811, "tags": { "TIER": "STANDARD", "PURPOSE": "Loads patterns from .gitignore file.", @@ -870,32 +870,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 794 + "line_number": 795 } ], "score": 0.0 @@ -905,8 +905,8 @@ "name": "_is_ignored", "type": "Function", "tier": "STANDARD", - "start_line": 812, - "end_line": 853, + "start_line": 813, + "end_line": 854, "tags": { "TIER": "STANDARD", "PURPOSE": "Checks if a path should be ignored based on .gitignore or hardcoded defaults.", @@ -921,32 +921,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 812 + "line_number": 813 } ], "score": 0.0 @@ -956,8 +956,8 @@ "name": "run", "type": "Function", "tier": "CRITICAL", - "start_line": 855, - "end_line": 868, + "start_line": 856, + "end_line": 869, "tags": { "TIER": "CRITICAL", "PURPOSE": "Main execution flow.", @@ -981,107 +981,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 855 + "line_number": 856 } ], "score": 0.0 @@ -1091,8 +1091,8 @@ "name": "_walk_and_parse", "type": "Function", "tier": "CRITICAL", - "start_line": 870, - "end_line": 899, + "start_line": 871, + "end_line": 900, "tags": { "TIER": "CRITICAL", "PURPOSE": "Recursively walks directories and triggers parsing.", @@ -1107,107 +1107,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 870 + "line_number": 871 } ], "score": 0.0 @@ -1217,8 +1217,8 @@ "name": "_process_file_results", "type": "Function", "tier": "STANDARD", - "start_line": 901, - "end_line": 943, + "start_line": 902, + "end_line": 944, "tags": { "TIER": "STANDARD", "PURPOSE": "Validates entities and calculates file scores with tier awareness.", @@ -1231,8 +1231,8 @@ "name": "validate_recursive", "type": "Function", "tier": "STANDARD", - "start_line": 912, - "end_line": 933, + "start_line": 913, + "end_line": 934, "tags": { "TIER": "STANDARD", "PURPOSE": "Calculate score and determine module's max tier for weighted global score", @@ -1247,42 +1247,42 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 912 + "line_number": 913 } ], "score": 0.0 @@ -1295,32 +1295,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 901 + "line_number": 902 } ], "score": 0.0 @@ -1330,8 +1330,8 @@ "name": "_generate_artifacts", "type": "Function", "tier": "CRITICAL", - "start_line": 945, - "end_line": 966, + "start_line": 946, + "end_line": 967, "tags": { "TIER": "CRITICAL", "PURPOSE": "Writes output files with tier-based compliance data.", @@ -1346,107 +1346,158 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 945 + "line_number": 946 + } + ], + "score": 0.0 + } + }, + { + "name": "_print_agent_report", + "type": "Function", + "tier": "STANDARD", + "start_line": 969, + "end_line": 1067, + "tags": { + "TIER": "STANDARD", + "PURPOSE": "Prints a JSON report optimized for AI agent orchestration and control.", + "PRE": "Validation and artifact generation are complete.", + "POST": "JSON report printed to stdout." + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [ + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 + }, + { + "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 + }, + { + "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", + "severity": "WARNING", + "line_number": 969 } ], "score": 0.0 @@ -1456,8 +1507,8 @@ "name": "_generate_report", "type": "Function", "tier": "CRITICAL", - "start_line": 968, - "end_line": 1040, + "start_line": 1069, + "end_line": 1141, "tags": { "TIER": "CRITICAL", "PURPOSE": "Generates the Markdown compliance report with severity levels.", @@ -1472,107 +1523,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 968 + "line_number": 1069 } ], "score": 0.0 @@ -1582,8 +1633,8 @@ "name": "_collect_issues", "type": "Function", "tier": "STANDARD", - "start_line": 1042, - "end_line": 1054, + "start_line": 1143, + "end_line": 1155, "tags": { "TIER": "STANDARD", "PURPOSE": "Helper to collect issues for a specific file from the entity tree.", @@ -1598,32 +1649,32 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1042 + "line_number": 1143 } ], "score": 0.0 @@ -1633,8 +1684,8 @@ "name": "_generate_compressed_map", "type": "Function", "tier": "CRITICAL", - "start_line": 1056, - "end_line": 1073, + "start_line": 1157, + "end_line": 1174, "tags": { "TIER": "CRITICAL", "PURPOSE": "Generates the token-optimized project map with enhanced Svelte details.", @@ -1649,107 +1700,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1056 + "line_number": 1157 } ], "score": 0.0 @@ -1759,8 +1810,8 @@ "name": "_write_entity_md", "type": "Function", "tier": "CRITICAL", - "start_line": 1075, - "end_line": 1144, + "start_line": 1176, + "end_line": 1245, "tags": { "TIER": "CRITICAL", "PURPOSE": "Recursive helper to write entity tree to Markdown with tier badges and enhanced details.", @@ -1775,107 +1826,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1075 + "line_number": 1176 } ], "score": 0.0 @@ -1885,8 +1936,8 @@ "name": "_generate_module_map", "type": "Function", "tier": "CRITICAL", - "start_line": 1146, - "end_line": 1303, + "start_line": 1247, + "end_line": 1404, "tags": { "TIER": "CRITICAL", "PURPOSE": "Generates a module-centric map grouping entities by directory structure.", @@ -1899,8 +1950,8 @@ "name": "_get_module_path", "type": "Function", "tier": "STANDARD", - "start_line": 1158, - "end_line": 1171, + "start_line": 1259, + "end_line": 1272, "tags": { "TIER": "STANDARD", "PURPOSE": "Extracts the module path from a file path.", @@ -1915,42 +1966,42 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1158 + "line_number": 1259 } ], "score": 0.0 @@ -1960,8 +2011,8 @@ "name": "_collect_all_entities", "type": "Function", "tier": "STANDARD", - "start_line": 1173, - "end_line": 1183, + "start_line": 1274, + "end_line": 1284, "tags": { "TIER": "STANDARD", "PURPOSE": "Flattens entity tree for easier grouping.", @@ -1976,42 +2027,42 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for STANDARD tier)", "severity": "WARNING", - "line_number": 1173 + "line_number": 1274 } ], "score": 0.0 @@ -2024,107 +2075,107 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 1146 + "line_number": 1247 } ], "score": 0.0 @@ -2141,8 +2192,26 @@ "name": "to_dict", "type": "Function", "tier": "TRIVIAL", - "start_line": 147, - "end_line": 147, + "start_line": 148, + "end_line": 148, + "tags": { + "PURPOSE": "Auto-detected function (orphan)", + "TIER": "TRIVIAL" + }, + "relations": [], + "children": [], + "compliance": { + "valid": true, + "issues": [], + "score": 1.0 + } + }, + { + "name": "collect_recursive", + "type": "Function", + "tier": "TRIVIAL", + "start_line": 989, + "end_line": 989, "tags": { "PURPOSE": "Auto-detected function (orphan)", "TIER": "TRIVIAL" @@ -2185,7 +2254,7 @@ "line_number": 1 }, { - "message": "Fractal limit warning: Module length is 1312 lines (must be < 300)", + "message": "Fractal limit warning: Module length is 1420 lines (must be < 300)", "severity": "WARNING", "line_number": 1 } @@ -17359,7 +17428,7 @@ "type": "Component", "tier": "CRITICAL", "start_line": 36, - "end_line": 406, + "end_line": 453, "tags": { "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.", @@ -17374,7 +17443,7 @@ "type": "Function", "tier": "CRITICAL", "start_line": 97, - "end_line": 114, + "end_line": 117, "tags": { "PURPOSE": "Fetches the list of environments from the API.", "PRE": "None.", @@ -17420,11 +17489,6 @@ "severity": "ERROR", "line_number": 97 }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 97 - }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", @@ -17459,11 +17523,6 @@ "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", "line_number": 97 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 97 } ], "score": 0.0 @@ -17473,8 +17532,8 @@ "name": "fetchDashboards", "type": "Function", "tier": "CRITICAL", - "start_line": 116, - "end_line": 134, + "start_line": 119, + "end_line": 140, "tags": { "PURPOSE": "Fetches dashboards for the selected source environment.", "PRE": "envId is a valid environment ID.", @@ -17489,82 +17548,103 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 119 + } + ], + "score": 0.0 + } + }, + { + "name": "ReactiveDashboardFetch", + "type": "Block", + "tier": "CRITICAL", + "start_line": 144, + "end_line": 155, + "tags": { + "PURPOSE": "Automatically fetch dashboards when the source environment is changed.", + "PRE": "sourceEnvId is not empty.", + "POST": "fetchDashboards is called with the new sourceEnvId.", + "UX_STATE": "[Loading] -> Triggered when sourceEnvId changes." + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 144 }, { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 116 + "line_number": 144 } ], "score": 0.0 @@ -17574,8 +17654,8 @@ "name": "fetchDatabases", "type": "Function", "tier": "CRITICAL", - "start_line": 141, - "end_line": 177, + "start_line": 157, + "end_line": 203, "tags": { "PURPOSE": "Fetches databases from both environments and gets suggestions.", "PRE": "sourceEnvId and targetEnvId must be set.", @@ -17589,82 +17669,72 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 + "line_number": 157 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 141 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 141 + "line_number": 157 } ], "score": 0.0 @@ -17674,8 +17744,8 @@ "name": "handleMappingUpdate", "type": "Function", "tier": "CRITICAL", - "start_line": 179, - "end_line": 212, + "start_line": 205, + "end_line": 244, "tags": { "PURPOSE": "Saves a mapping to the backend.", "PRE": "event.detail contains sourceUuid and targetUuid.", @@ -17689,82 +17759,72 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 205 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 179 + "line_number": 205 } ], "score": 0.0 @@ -17774,8 +17834,8 @@ "name": "handleViewLogs", "type": "Function", "tier": "CRITICAL", - "start_line": 214, - "end_line": 226, + "start_line": 246, + "end_line": 258, "tags": { "PURPOSE": "Opens the log viewer for a specific task.", "PRE": "event.detail contains task object.", @@ -17789,82 +17849,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 214 + "line_number": 246 } ], "score": 0.0 @@ -17874,97 +17934,134 @@ "name": "handlePasswordPrompt", "type": "Function", "tier": "CRITICAL", - "start_line": 228, - "end_line": 254, + "start_line": 260, + "end_line": 295, "tags": { "PURPOSE": "Reactive logic to show password prompt when a task is awaiting input.", "PRE": "selectedTask status is AWAITING_INPUT.", "POST": "showPasswordPrompt set to true with request data." }, "relations": [], - "children": [], + "children": [ + { + "name": "ReactivePasswordPrompt", + "type": "Block", + "tier": "CRITICAL", + "start_line": 269, + "end_line": 294, + "tags": { + "PURPOSE": "Monitor selected task for input requests and trigger password prompt.", + "PRE": "$selectedTask is not null and status is AWAITING_INPUT.", + "POST": "showPasswordPrompt is set to true if input_request is database_password.", + "UX_STATE": "[AwaitingInput] -> Password prompt modal is displayed." + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 269 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 269 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 269 + } + ], + "score": 0.0 + } + } + ], "compliance": { "valid": false, "issues": [ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 260 } ], "score": 0.0 @@ -17974,8 +18071,8 @@ "name": "handleResumeMigration", "type": "Function", "tier": "CRITICAL", - "start_line": 256, - "end_line": 277, + "start_line": 297, + "end_line": 318, "tags": { "PURPOSE": "Resumes a migration task with provided passwords.", "PRE": "event.detail contains passwords.", @@ -17989,82 +18086,82 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 }, { "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 256 + "line_number": 297 } ], "score": 0.0 @@ -18074,97 +18171,79 @@ "name": "startMigration", "type": "Function", "tier": "CRITICAL", - "start_line": 279, - "end_line": 352, + "start_line": 320, + "end_line": 395, "tags": { - "PURPOSE": "Starts the migration process.", - "PRE": "sourceEnvId and targetEnvId must be set and different.", - "POST": "Migration task is started and selectedTask is updated." + "PURPOSE": "Initiates the migration process by sending the selection to the backend.", + "PRE": "sourceEnvId and targetEnvId are set and different; at least one dashboard is selected.", + "POST": "A migration task is created and selectedTask store is updated.", + "SIDE_EFFECT": "Resets dryRunResult; updates error state on failure.", + "UX_STATE": "[Loading] -> [Success] or [Error]" }, "relations": [], "children": [], "compliance": { "valid": false, "issues": [ - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 279 - }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 279 - }, - { - "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 + "line_number": 320 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 279 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 279 + "line_number": 320 } ], "score": 0.0 @@ -18174,13 +18253,13 @@ "name": "startDryRun", "type": "Function", "tier": "CRITICAL", - "start_line": 354, - "end_line": 405, + "start_line": 397, + "end_line": 452, "tags": { - "PURPOSE": "Builds pre-flight diff and risk summary without applying migration.", + "PURPOSE": "Performs a dry-run migration to identify potential risks and changes.", "PRE": "source/target environments and selected dashboards are valid.", - "POST": "dryRunResult is populated with backend response.", - "UX_STATE": "Error -> error banner is displayed and dryRunResult resets to null.", + "POST": "dryRunResult is populated with the pre-flight analysis.", + "UX_STATE": "[Loading] -> [Success] or [Error]", "UX_FEEDBACK": "User sees summary cards + risk block + JSON details after success.", "UX_RECOVERY": "User can adjust selection and press Dry Run again." }, @@ -18192,82 +18271,72 @@ { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @SIDE_EFFECT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @DATA_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 + "line_number": 397 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 354 - }, - { - "message": "Missing Belief State Logging: Function should use console.log with [ID][STATE] (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 354 + "line_number": 397 } ], "score": 0.0 @@ -18326,11 +18395,6 @@ "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 @@ -18349,152 +18413,152 @@ { "store": "selectedTask", "type": "READS_FROM", - "line": 238 + "line": 277 }, { "store": "selectedTask", "type": "READS_FROM", - "line": 239 + "line": 278 }, { "store": "selectedTask", "type": "READS_FROM", - "line": 240 + "line": 279 }, { "store": "selectedTask", "type": "WRITES_TO", - "line": 242 + "line": 281 }, { "store": "selectedTask", "type": "READS_FROM", - "line": 248 + "line": 283 }, { "store": "selectedTask", "type": "READS_FROM", - "line": 248 + "line": 288 }, { "store": "selectedTask", "type": "READS_FROM", - "line": 262 + "line": 288 }, { "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 + "line": 303 }, { "store": "selectedTask", "type": "READS_FROM", + "line": 307 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 313 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 333 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 340 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 347 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 411 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 418 + }, + { + "store": "t", + "type": "READS_FROM", "line": 425 }, { "store": "t", + "type": "WRITES_TO", + "line": 469 + }, + { + "store": "selectedTask", "type": "READS_FROM", - "line": 430 + "line": 477 }, { "store": "t", "type": "READS_FROM", - "line": 436 + "line": 485 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 492 }, { "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 + "type": "WRITES_TO", + "line": 509 }, { "store": "t", "type": "READS_FROM", - "line": 516 + "line": 519 }, { "store": "t", "type": "READS_FROM", - "line": 532 + "line": 530 }, { "store": "t", "type": "READS_FROM", - "line": 558 + "line": 547 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 564 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 573 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 577 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 593 + }, + { + "store": "t", + "type": "READS_FROM", + "line": 619 } ] }, @@ -18502,8 +18566,8 @@ "name": "MigrationDashboardView", "type": "Block", "tier": "CRITICAL", - "start_line": 409, - "end_line": 622, + "start_line": 456, + "end_line": 697, "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.", @@ -18513,11 +18577,11 @@ "relations": [], "children": [ { - "name": "DashboardSelectionSection", - "type": "Component", + "name": "MigrationHeader", + "type": "Block", "tier": "CRITICAL", - "start_line": 458, - "end_line": 477, + "start_line": 468, + "end_line": 470, "tags": {}, "relations": [], "children": [], @@ -18527,112 +18591,357 @@ { "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 + "line_number": 468 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing @INVARIANT tag (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 + "line_number": 468 }, { "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 - }, - { - "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", - "severity": "ERROR", - "line_number": 458 + "line_number": 468 }, { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 468 + } + ], + "score": 0.0 + } + }, + { + "name": "TaskHistorySection", + "type": "Block", + "tier": "CRITICAL", + "start_line": 472, + "end_line": 474, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 472 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 472 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 472 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 472 + } + ], + "score": 0.0 + } + }, + { + "name": "ActiveTaskSection", + "type": "Block", + "tier": "CRITICAL", + "start_line": 476, + "end_line": 490, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 476 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 476 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 476 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 476 + } + ], + "score": 0.0 + } + }, + { + "name": "EnvironmentSelectionSection", + "type": "Block", + "tier": "CRITICAL", + "start_line": 501, + "end_line": 514, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 501 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 501 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 501 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 501 + } + ], + "score": 0.0 + } + }, + { + "name": "DashboardSelectionSection", + "type": "Component", + "tier": "CRITICAL", + "start_line": 516, + "end_line": 535, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 }, { "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 }, { "message": "Missing @INVARIANT tag (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 458 + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @LAYER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @SEMANTICS (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @INVARIANT (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @RELATION (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @UX_STATE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @UX_FEEDBACK (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @UX_RECOVERY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing Mandatory Tag: @UX_REACTIVITY (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + }, + { + "message": "Missing @INVARIANT tag (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 516 + } + ], + "score": 0.0 + } + }, + { + "name": "MigrationOptionsSection", + "type": "Block", + "tier": "CRITICAL", + "start_line": 537, + "end_line": 568, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 537 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 537 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 537 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 537 + } + ], + "score": 0.0 + } + }, + { + "name": "DryRunResultsSection", + "type": "Block", + "tier": "CRITICAL", + "start_line": 623, + "end_line": 664, + "tags": {}, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 623 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 623 + }, + { + "message": "Missing Mandatory Tag: @PURPOSE (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 623 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 623 + } + ], + "score": 0.0 + } + }, + { + "name": "MigrationModals", + "type": "Block", + "tier": "CRITICAL", + "start_line": 668, + "end_line": 694, + "tags": { + "PURPOSE": "Render overlay components for log viewing and password entry.", + "UX_STATE": "[AwaitingInput] -> PasswordPrompt is visible." + }, + "relations": [], + "children": [], + "compliance": { + "valid": false, + "issues": [ + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 668 + }, + { + "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", + "severity": "ERROR", + "line_number": 668 } ], "score": 0.0 @@ -18645,7 +18954,7 @@ { "message": "Missing Mandatory Tag: @TIER (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 409 + "line_number": 456 } ], "score": 0.35 @@ -43143,7 +43452,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 319, + "end_line": 336, "tags": { "TIER": "CRITICAL", "SEMANTICS": "config, manager, persistence, migration, postgresql", @@ -43183,7 +43492,7 @@ "type": "Class", "tier": "CRITICAL", "start_line": 28, - "end_line": 318, + "end_line": 335, "tags": { "TIER": "CRITICAL", "PURPOSE": "Handles application configuration load, validation, mutation, and persistence lifecycle." @@ -43195,7 +43504,7 @@ "type": "Function", "tier": "CRITICAL", "start_line": 32, - "end_line": 51, + "end_line": 56, "tags": { "PURPOSE": "Initialize manager state from persisted or migrated configuration.", "PRE": "config_path is a non-empty string path.", @@ -43291,8 +43600,8 @@ "name": "_default_config", "type": "Function", "tier": "CRITICAL", - "start_line": 53, - "end_line": 65, + "start_line": 58, + "end_line": 70, "tags": { "PURPOSE": "Build default application configuration fallback.", "PRE": "None.", @@ -43308,77 +43617,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 53 + "line_number": 58 } ], "score": 0.0 @@ -43388,8 +43697,8 @@ "name": "_load_from_legacy_file", "type": "Function", "tier": "CRITICAL", - "start_line": 67, - "end_line": 87, + "start_line": 72, + "end_line": 92, "tags": { "PURPOSE": "Load legacy JSON configuration for migration fallback path.", "PRE": "self.config_path is initialized.", @@ -43405,77 +43714,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 67 + "line_number": 72 } ], "score": 0.0 @@ -43485,8 +43794,8 @@ "name": "_get_record", "type": "Function", "tier": "CRITICAL", - "start_line": 89, - "end_line": 98, + "start_line": 94, + "end_line": 103, "tags": { "PURPOSE": "Resolve global configuration record from DB.", "PRE": "session is an active SQLAlchemy Session.", @@ -43502,77 +43811,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 89 + "line_number": 94 } ], "score": 0.0 @@ -43582,8 +43891,8 @@ "name": "_load_config", "type": "Function", "tier": "CRITICAL", - "start_line": 100, - "end_line": 124, + "start_line": 105, + "end_line": 132, "tags": { "PURPOSE": "Load configuration from DB or perform one-time migration from legacy JSON.", "PRE": "SessionLocal factory is available and AppConfigRecord schema is accessible.", @@ -43599,77 +43908,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 100 + "line_number": 105 } ], "score": 0.0 @@ -43679,8 +43988,8 @@ "name": "_save_config_to_db", "type": "Function", "tier": "CRITICAL", - "start_line": 126, - "end_line": 155, + "start_line": 134, + "end_line": 166, "tags": { "PURPOSE": "Persist provided AppConfig into the global DB configuration record.", "PRE": "config is AppConfig; session is either None or an active Session.", @@ -43696,77 +44005,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 126 + "line_number": 134 } ], "score": 0.0 @@ -43776,8 +44085,8 @@ "name": "save", "type": "Function", "tier": "CRITICAL", - "start_line": 157, - "end_line": 166, + "start_line": 168, + "end_line": 177, "tags": { "PURPOSE": "Persist current in-memory configuration state.", "PRE": "self.config is initialized.", @@ -43793,77 +44102,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 168 } ], "score": 0.0 @@ -43873,8 +44182,8 @@ "name": "get_config", "type": "Function", "tier": "CRITICAL", - "start_line": 168, - "end_line": 177, + "start_line": 179, + "end_line": 188, "tags": { "PURPOSE": "Return current in-memory configuration snapshot.", "PRE": "self.config is initialized.", @@ -43890,77 +44199,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 168 + "line_number": 179 } ], "score": 0.0 @@ -43970,8 +44279,8 @@ "name": "update_global_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 179, - "end_line": 194, + "start_line": 190, + "end_line": 206, "tags": { "PURPOSE": "Replace global settings and persist the resulting configuration.", "PRE": "settings is GlobalSettings.", @@ -43987,77 +44296,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 179 + "line_number": 190 } ], "score": 0.0 @@ -44067,8 +44376,8 @@ "name": "validate_path", "type": "Function", "tier": "CRITICAL", - "start_line": 196, - "end_line": 215, + "start_line": 208, + "end_line": 227, "tags": { "PURPOSE": "Validate that path exists and is writable, creating it when absent.", "PRE": "path is a string path candidate.", @@ -44084,77 +44393,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 196 + "line_number": 208 } ], "score": 0.0 @@ -44164,8 +44473,8 @@ "name": "get_environments", "type": "Function", "tier": "CRITICAL", - "start_line": 217, - "end_line": 226, + "start_line": 229, + "end_line": 238, "tags": { "PURPOSE": "Return all configured environments.", "PRE": "self.config is initialized.", @@ -44181,77 +44490,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 217 + "line_number": 229 } ], "score": 0.0 @@ -44261,8 +44570,8 @@ "name": "has_environments", "type": "Function", "tier": "CRITICAL", - "start_line": 228, - "end_line": 237, + "start_line": 240, + "end_line": 249, "tags": { "PURPOSE": "Check whether at least one environment exists in configuration.", "PRE": "self.config is initialized.", @@ -44278,77 +44587,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 228 + "line_number": 240 } ], "score": 0.0 @@ -44358,8 +44667,8 @@ "name": "get_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 239, - "end_line": 251, + "start_line": 251, + "end_line": 263, "tags": { "PURPOSE": "Resolve a configured environment by identifier.", "PRE": "env_id is string identifier.", @@ -44375,77 +44684,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 239 + "line_number": 251 } ], "score": 0.0 @@ -44455,8 +44764,8 @@ "name": "add_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 253, - "end_line": 268, + "start_line": 265, + "end_line": 281, "tags": { "PURPOSE": "Upsert environment by id into configuration and persist.", "PRE": "env is Environment.", @@ -44472,77 +44781,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 253 + "line_number": 265 } ], "score": 0.0 @@ -44552,8 +44861,8 @@ "name": "update_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 270, - "end_line": 294, + "start_line": 283, + "end_line": 310, "tags": { "PURPOSE": "Update existing environment by id and preserve masked password placeholder behavior.", "PRE": "env_id is non-empty string and updated_env is Environment.", @@ -44569,77 +44878,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 270 + "line_number": 283 } ], "score": 0.0 @@ -44649,8 +44958,8 @@ "name": "delete_environment", "type": "Function", "tier": "CRITICAL", - "start_line": 296, - "end_line": 315, + "start_line": 312, + "end_line": 332, "tags": { "PURPOSE": "Delete environment by id and persist when deletion occurs.", "PRE": "env_id is non-empty string.", @@ -44666,77 +44975,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 296 + "line_number": 312 } ], "score": 0.0 @@ -44775,7 +45084,7 @@ "valid": true, "issues": [ { - "message": "Fractal limit warning: Module length is 319 lines (must be < 300)", + "message": "Fractal limit warning: Module length is 336 lines (must be < 300)", "severity": "WARNING", "line_number": 1 } @@ -47609,7 +47918,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 245, + "end_line": 247, "tags": { "TIER": "CRITICAL", "SEMANTICS": "migration, engine, zip, yaml, transformation, cross-filter, id-mapping", @@ -47641,7 +47950,7 @@ "type": "Class", "tier": "CRITICAL", "start_line": 28, - "end_line": 243, + "end_line": 245, "tags": { "PURPOSE": "Engine for transforming Superset export ZIPs." }, @@ -47652,7 +47961,7 @@ "type": "Function", "tier": "CRITICAL", "start_line": 32, - "end_line": 42, + "end_line": 44, "tags": { "PURPOSE": "Initializes migration orchestration dependencies for ZIP/YAML metadata transformations.", "PRE": "mapping_service is None or implements batch remote ID lookup for ResourceType.CHART.", @@ -47749,8 +48058,8 @@ "name": "transform_zip", "type": "Function", "tier": "CRITICAL", - "start_line": 44, - "end_line": 113, + "start_line": 46, + "end_line": 118, "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.", @@ -47768,77 +48077,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 44 + "line_number": 46 } ], "score": 0.0 @@ -47848,8 +48157,8 @@ "name": "_transform_yaml", "type": "Function", "tier": "CRITICAL", - "start_line": 115, - "end_line": 138, + "start_line": 120, + "end_line": 147, "tags": { "PURPOSE": "Replaces database_uuid in a single YAML file.", "PARAM": "db_mapping (Dict[str, str]) - UUID mapping dictionary.", @@ -47866,77 +48175,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 115 + "line_number": 120 } ], "score": 0.0 @@ -47946,8 +48255,8 @@ "name": "_extract_chart_uuids_from_archive", "type": "Function", "tier": "CRITICAL", - "start_line": 140, - "end_line": 165, + "start_line": 149, + "end_line": 174, "tags": { "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.", @@ -47965,77 +48274,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 149 } ], "score": 0.0 @@ -48045,8 +48354,8 @@ "name": "_patch_dashboard_metadata", "type": "Function", "tier": "CRITICAL", - "start_line": 167, - "end_line": 241, + "start_line": 176, + "end_line": 243, "tags": { "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.", @@ -48063,77 +48372,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 167 + "line_number": 176 } ], "score": 0.0 @@ -50466,7 +50775,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 166, + "end_line": 202, "tags": { "TIER": "CRITICAL", "SEMANTICS": "auth, repository, database, user, role, permission", @@ -50498,7 +50807,7 @@ "type": "Class", "tier": "CRITICAL", "start_line": 23, - "end_line": 165, + "end_line": 201, "tags": { "PURPOSE": "Encapsulates database operations for authentication-related entities." }, @@ -50514,7 +50823,7 @@ "type": "Function", "tier": "CRITICAL", "start_line": 27, - "end_line": 36, + "end_line": 42, "tags": { "PURPOSE": "Bind repository instance to an existing SQLAlchemy session.", "PRE": "db is an initialized sqlalchemy.orm.Session instance.", @@ -50610,8 +50919,8 @@ "name": "get_user_by_username", "type": "Function", "tier": "CRITICAL", - "start_line": 38, - "end_line": 47, + "start_line": 44, + "end_line": 63, "tags": { "PURPOSE": "Retrieve a user entity by unique username.", "PRE": "username is a non-empty str and self.db is a valid open Session.", @@ -50627,77 +50936,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 38 + "line_number": 44 } ], "score": 0.0 @@ -50707,8 +51016,8 @@ "name": "get_user_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 49, - "end_line": 58, + "start_line": 65, + "end_line": 84, "tags": { "PURPOSE": "Retrieve a user entity by identifier.", "PRE": "user_id is a non-empty str and self.db is a valid open Session.", @@ -50724,77 +51033,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 49 + "line_number": 65 } ], "score": 0.0 @@ -50804,8 +51113,8 @@ "name": "get_role_by_name", "type": "Function", "tier": "CRITICAL", - "start_line": 60, - "end_line": 69, + "start_line": 86, + "end_line": 95, "tags": { "PURPOSE": "Retrieve a role entity by role name.", "PRE": "name is a non-empty str and self.db is a valid open Session.", @@ -50821,77 +51130,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 60 + "line_number": 86 } ], "score": 0.0 @@ -50901,8 +51210,8 @@ "name": "update_last_login", "type": "Function", "tier": "CRITICAL", - "start_line": 71, - "end_line": 83, + "start_line": 97, + "end_line": 114, "tags": { "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.", @@ -50918,77 +51227,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 71 + "line_number": 97 } ], "score": 0.0 @@ -50998,8 +51307,8 @@ "name": "get_role_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 85, - "end_line": 94, + "start_line": 116, + "end_line": 125, "tags": { "PURPOSE": "Retrieve a role entity by identifier.", "PRE": "role_id is a non-empty str and self.db is a valid open Session.", @@ -51015,77 +51324,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 85 + "line_number": 116 } ], "score": 0.0 @@ -51095,8 +51404,8 @@ "name": "get_permission_by_id", "type": "Function", "tier": "CRITICAL", - "start_line": 96, - "end_line": 105, + "start_line": 127, + "end_line": 136, "tags": { "PURPOSE": "Retrieve a permission entity by identifier.", "PRE": "perm_id is a non-empty str and self.db is a valid open Session.", @@ -51112,77 +51421,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 96 + "line_number": 127 } ], "score": 0.0 @@ -51192,8 +51501,8 @@ "name": "get_permission_by_resource_action", "type": "Function", "tier": "CRITICAL", - "start_line": 107, - "end_line": 119, + "start_line": 138, + "end_line": 150, "tags": { "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.", @@ -51209,77 +51518,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 107 + "line_number": 138 } ], "score": 0.0 @@ -51289,8 +51598,8 @@ "name": "get_user_dashboard_preference", "type": "Function", "tier": "CRITICAL", - "start_line": 121, - "end_line": 134, + "start_line": 152, + "end_line": 165, "tags": { "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.", @@ -51306,77 +51615,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 121 + "line_number": 152 } ], "score": 0.0 @@ -51386,8 +51695,8 @@ "name": "save_user_dashboard_preference", "type": "Function", "tier": "CRITICAL", - "start_line": 136, - "end_line": 151, + "start_line": 167, + "end_line": 187, "tags": { "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.", @@ -51403,77 +51712,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 136 + "line_number": 167 } ], "score": 0.0 @@ -51483,8 +51792,8 @@ "name": "list_permissions", "type": "Function", "tier": "CRITICAL", - "start_line": 153, - "end_line": 162, + "start_line": 189, + "end_line": 198, "tags": { "PURPOSE": "List all permission entities available in storage.", "PRE": "self.db is a valid open Session.", @@ -51500,77 +51809,77 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 153 + "line_number": 189 } ], "score": 0.0 @@ -65477,7 +65786,7 @@ "type": "Module", "tier": "CRITICAL", "start_line": 1, - "end_line": 292, + "end_line": 307, "tags": { "TIER": "CRITICAL", "SEMANTICS": "api, migration, dashboards, sync, dry-run", @@ -65525,7 +65834,7 @@ "type": "Function", "tier": "CRITICAL", "start_line": 36, - "end_line": 57, + "end_line": 61, "tags": { "PURPOSE": "Fetch dashboard metadata from a requested environment for migration selection UI.", "PRE": "env_id is provided and exists in configured environments.", @@ -65596,8 +65905,8 @@ "name": "execute_migration", "type": "Function", "tier": "CRITICAL", - "start_line": 59, - "end_line": 98, + "start_line": 63, + "end_line": 101, "tags": { "PURPOSE": "Validate migration selection and enqueue asynchronous migration task execution.", "PRE": "DashboardSelection payload is valid and both source/target environments exist.", @@ -65613,52 +65922,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 59 + "line_number": 63 } ], "score": 0.0 @@ -65668,8 +65977,8 @@ "name": "dry_run_migration", "type": "Function", "tier": "CRITICAL", - "start_line": 101, - "end_line": 138, + "start_line": 104, + "end_line": 153, "tags": { "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.", @@ -65685,52 +65994,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 101 + "line_number": 104 } ], "score": 0.0 @@ -65740,8 +66049,8 @@ "name": "get_migration_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 140, - "end_line": 155, + "start_line": 155, + "end_line": 170, "tags": { "PURPOSE": "Read and return configured migration synchronization cron expression.", "PRE": "Configuration store is available and requester has READ permission.", @@ -65757,52 +66066,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 140 + "line_number": 155 } ], "score": 0.0 @@ -65812,8 +66121,8 @@ "name": "update_migration_settings", "type": "Function", "tier": "CRITICAL", - "start_line": 157, - "end_line": 180, + "start_line": 172, + "end_line": 195, "tags": { "PURPOSE": "Validate and persist migration synchronization cron expression update.", "PRE": "Payload includes \"cron\" key and requester has WRITE permission.", @@ -65829,52 +66138,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 157 + "line_number": 172 } ], "score": 0.0 @@ -65884,8 +66193,8 @@ "name": "get_resource_mappings", "type": "Function", "tier": "CRITICAL", - "start_line": 182, - "end_line": 230, + "start_line": 197, + "end_line": 245, "tags": { "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.", @@ -65901,52 +66210,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 182 + "line_number": 197 } ], "score": 0.0 @@ -65956,8 +66265,8 @@ "name": "trigger_sync_now", "type": "Function", "tier": "CRITICAL", - "start_line": 232, - "end_line": 290, + "start_line": 247, + "end_line": 305, "tags": { "PURPOSE": "Trigger immediate ID synchronization for every configured environment.", "PRE": "At least one environment is configured and requester has EXECUTE permission.", @@ -65973,52 +66282,52 @@ { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_CONTRACT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_SCENARIO (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_FIXTURE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_EDGE (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 }, { "message": "Missing Mandatory Tag: @TEST_INVARIANT (required for CRITICAL tier)", "severity": "ERROR", - "line_number": 232 + "line_number": 247 } ], "score": 0.0 @@ -66027,8 +66336,14 @@ ], "compliance": { "valid": true, - "issues": [], - "score": 0.95 + "issues": [ + { + "message": "Fractal limit warning: Module length is 307 lines (must be < 300)", + "severity": "WARNING", + "line_number": 1 + } + ], + "score": 0.8 } }, {