From ee08e2f3dd94eaa53f2fc862d0d240a32f784006 Mon Sep 17 00:00:00 2001 From: busya Date: Tue, 26 May 2026 18:15:37 +0300 Subject: [PATCH] fix --- .axiom/semantic_index/index.json | 20186 ++++++++++------ .../api/routes/git/_repo_operations_routes.py | 4 +- backend/src/plugins/git_plugin.py | 4 +- backend/src/services/git/_gitea.py | 18 +- frontend/package.json | 3 +- frontend/src/components/DashboardGrid.svelte | 1 + .../src/components/git/BranchSelector.svelte | 108 +- frontend/src/components/git/GitManager.svelte | 13 +- .../components/git/GitWorkspacePanel.svelte | 21 +- ...nager.unfinished_merge.integration.test.js | 4 +- frontend/src/components/git/useGitManager.js | 173 +- frontend/src/lib/api.js | 6 +- .../ui/DatabaseSearchCombobox.svelte | 214 + .../ui/DatasetSearchCombobox.svelte | 204 + frontend/src/services/gitService.js | 445 +- 15 files changed, 13702 insertions(+), 7702 deletions(-) create mode 100644 frontend/src/lib/components/ui/DatabaseSearchCombobox.svelte create mode 100644 frontend/src/lib/components/ui/DatasetSearchCombobox.svelte diff --git a/.axiom/semantic_index/index.json b/.axiom/semantic_index/index.json index 94f7e45b..af8636c9 100644 --- a/.axiom/semantic_index/index.json +++ b/.axiom/semantic_index/index.json @@ -1,9 +1,9 @@ { - "generated_at": "2026-05-26T07:44:28.125947395Z", + "generated_at": "2026-05-26T13:03:36.710236723Z", "root_path": "/home/busya/dev/ss-tools", - "contract_count": 3195, - "edge_count": 2140, - "file_count": 690, + "contract_count": 3299, + "edge_count": 2156, + "file_count": 694, "contracts": [ { "contract_id": "SrcRoot", @@ -44,7 +44,7 @@ "contract_type": "Module", "file_path": "backend/src/api/auth.py", "start_line": 1, - "end_line": 145, + "end_line": 176, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -68,14 +68,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthApi [C:5] [TYPE Module] [SEMANTICS fastapi, auth, api]\n# @BRIEF Authentication API endpoints.\n# @LAYER API\n# @PRE Python environment and dependencies installed; database available.\n# @POST FastAPI app instance with auth routes registered.\n# @SIDE_EFFECT Registers API routes; configures OAuth and CORS middleware.\n# @DATA_CONTRACT Input -> OAuth2PasswordRequestForm -> Token, User\n# @INVARIANT All auth endpoints must return consistent error codes.\n# @RELATION DEPENDS_ON -> [is_adfs_configured]\n\nfrom fastapi import APIRouter, Depends, HTTPException, status\nfrom fastapi.security import OAuth2PasswordRequestForm\nfrom sqlalchemy.orm import Session\nimport starlette.requests\n\nfrom ..core.auth.logger import log_security_event\nfrom ..core.auth.oauth import is_adfs_configured, oauth\nfrom ..core.database import get_auth_db\nfrom ..core.logger import belief_scope\nfrom ..dependencies import get_current_user\nfrom ..schemas.auth import Token, User as UserSchema\nfrom ..services.auth_service import AuthService\n\n# #region router [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:fastapi.APIRouter]\n# @BRIEF APIRouter instance for authentication routes.\nrouter = APIRouter(prefix=\"/api/auth\", tags=[\"auth\"])\n# #endregion router\n\n\n# #region login_for_access_token [C:4] [TYPE Function]\n# @BRIEF Authenticates a user and returns a JWT access token.\n# @PRE form_data contains username and password.\n# @POST Returns a Token object on success.\n# @SIDE_EFFECT DB read/write for auth session; writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.post(\"/login\", response_model=Token)\nasync def login_for_access_token(\n form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_auth_db)\n):\n with belief_scope(\"api.auth.login\"):\n auth_service = AuthService(db)\n user = auth_service.authenticate_user(form_data.username, form_data.password)\n if not user:\n log_security_event(\n \"LOGIN_FAILED\", form_data.username, {\"reason\": \"Invalid credentials\"}\n )\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Incorrect username or password\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n log_security_event(\"LOGIN_SUCCESS\", user.username, {\"source\": \"LOCAL\"})\n return auth_service.create_session(user)\n\n\n# #endregion login_for_access_token\n\n# #region read_users_me [C:4] [TYPE Function]\n# @BRIEF Retrieves the profile of the currently authenticated user.\n# @PRE Valid JWT token provided.\n# @POST Returns the current user's data.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @SIDE_EFFECT Reads current user from DB via auth middleware; writes security event log.\n\n@router.get(\"/me\", response_model=UserSchema)\nasync def read_users_me(current_user: UserSchema = Depends(get_current_user)):\n with belief_scope(\"api.auth.me\"):\n return current_user\n\n\n# #endregion read_users_me\n\n\n# #region logout [C:4] [TYPE Function]\n# @BRIEF Logs out the current user (placeholder for session revocation).\n# @PRE Valid JWT token provided.\n# @POST Returns success message.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @SIDE_EFFECT Writes security event LOGOUT event.\n\n@router.post(\"/logout\")\nasync def logout(current_user: UserSchema = Depends(get_current_user)):\n with belief_scope(\"api.auth.logout\"):\n log_security_event(\"LOGOUT\", current_user.username)\n # In a stateless JWT setup, client-side token deletion is primary.\n # Server-side revocation (blacklisting) can be added here if needed.\n return {\"message\": \"Successfully logged out\"}\n\n\n# #endregion logout\n\n\n# #region login_adfs [C:4] [TYPE Function]\n# @BRIEF Initiates the ADFS OIDC login flow.\n# @POST Redirects the user to ADFS.\n# @RELATION CALLS -> [is_adfs_configured]\n# @SIDE_EFFECT Redirects user to ADFS external OIDC provider.\n\n@router.get(\"/login/adfs\")\nasync def login_adfs(request: starlette.requests.Request):\n with belief_scope(\"api.auth.login_adfs\"):\n if not is_adfs_configured():\n raise HTTPException(\n status_code=status.HTTP_503_SERVICE_UNAVAILABLE,\n detail=\"ADFS is not configured. Please set ADFS_CLIENT_ID, ADFS_CLIENT_SECRET, and ADFS_METADATA_URL environment variables.\",\n )\n redirect_uri = request.url_for(\"auth_callback_adfs\")\n return await oauth.adfs.authorize_redirect(request, str(redirect_uri))\n\n\n# #endregion login_adfs\n\n\n# #region auth_callback_adfs [C:4] [TYPE Function]\n# @BRIEF Handles the callback from ADFS after successful authentication.\n# @POST Provisions user JIT and returns session token.\n# @SIDE_EFFECT Provisions user in DB, creates auth session, writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.get(\"/callback/adfs\", name=\"auth_callback_adfs\")\nasync def auth_callback_adfs(\n request: starlette.requests.Request, db: Session = Depends(get_auth_db)\n):\n with belief_scope(\"api.auth.callback_adfs\"):\n if not is_adfs_configured():\n raise HTTPException(\n status_code=status.HTTP_503_SERVICE_UNAVAILABLE,\n detail=\"ADFS is not configured. Please set ADFS_CLIENT_ID, ADFS_CLIENT_SECRET, and ADFS_METADATA_URL environment variables.\",\n )\n token = await oauth.adfs.authorize_access_token(request)\n user_info = token.get(\"userinfo\")\n if not user_info:\n raise HTTPException(\n status_code=400, detail=\"Failed to retrieve user info from ADFS\"\n )\n\n auth_service = AuthService(db)\n user = auth_service.provision_adfs_user(user_info)\n return auth_service.create_session(user)\n\n\n# #endregion auth_callback_adfs\n# #endregion AuthApi\n" + "body": "# #region AuthApi [C:5] [TYPE Module] [SEMANTICS fastapi, auth, api]\n# @BRIEF Authentication API endpoints.\n# @LAYER API\n# @PRE Python environment and dependencies installed; database available.\n# @POST FastAPI app instance with auth routes registered.\n# @SIDE_EFFECT Registers API routes; configures OAuth and CORS middleware.\n# @DATA_CONTRACT Input -> OAuth2PasswordRequestForm -> Token, User\n# @INVARIANT All auth endpoints must return consistent error codes.\n# @RELATION DEPENDS_ON -> [is_adfs_configured]\n\nfrom fastapi import APIRouter, Depends, HTTPException, status\nfrom fastapi.security import OAuth2PasswordRequestForm\nfrom sqlalchemy.orm import Session\nimport starlette.requests\n\nfrom ..core.auth.jwt import blacklist_token\nfrom ..core.auth.logger import log_security_event\nfrom ..core.auth.oauth import is_adfs_configured, oauth\nfrom ..core.database import get_auth_db\nfrom ..core.logger import belief_scope, logger\nfrom ..core.rate_limiter import rate_limiter\nfrom ..dependencies import get_current_user\nfrom ..schemas.auth import Token, User as UserSchema\nfrom ..services.auth_service import AuthService\n\n# #region router [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:fastapi.APIRouter]\n# @BRIEF APIRouter instance for authentication routes.\nrouter = APIRouter(prefix=\"/api/auth\", tags=[\"auth\"])\n# #endregion router\n\n\n# #region login_for_access_token [C:4] [TYPE Function]\n# @BRIEF Authenticates a user and returns a JWT access token.\n# @PRE form_data contains username and password.\n# @POST Returns a Token object on success.\n# @SIDE_EFFECT DB read/write for auth session; writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.post(\"/login\", response_model=Token)\nasync def login_for_access_token(\n form_data: OAuth2PasswordRequestForm = Depends(),\n db: Session = Depends(get_auth_db),\n request: starlette.requests.Request = None,\n):\n with belief_scope(\"api.auth.login\"):\n # Rate limiting — protect against brute force\n client_ip = request.client.host if request.client else \"unknown\"\n if rate_limiter.is_banned(client_ip):\n log_security_event(\n \"LOGIN_BLOCKED\", form_data.username, {\"reason\": \"Rate limited\", \"ip\": client_ip}\n )\n raise HTTPException(\n status_code=status.HTTP_429_TOO_MANY_REQUESTS,\n detail=\"Too many login attempts. Try again later.\",\n )\n\n auth_service = AuthService(db)\n user = auth_service.authenticate_user(form_data.username, form_data.password)\n if not user:\n rate_limiter.record_attempt(client_ip)\n log_security_event(\n \"LOGIN_FAILED\", form_data.username, {\"reason\": \"Invalid credentials\"}\n )\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Incorrect username or password\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n rate_limiter.record_success(client_ip)\n log_security_event(\"LOGIN_SUCCESS\", user.username, {\"source\": \"LOCAL\"})\n return auth_service.create_session(user)\n\n\n# #endregion login_for_access_token\n\n# #region read_users_me [C:4] [TYPE Function]\n# @BRIEF Retrieves the profile of the currently authenticated user.\n# @PRE Valid JWT token provided.\n# @POST Returns the current user's data.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @SIDE_EFFECT Reads current user from DB via auth middleware; writes security event log.\n\n@router.get(\"/me\", response_model=UserSchema)\nasync def read_users_me(current_user: UserSchema = Depends(get_current_user)):\n with belief_scope(\"api.auth.me\"):\n return current_user\n\n\n# #endregion read_users_me\n\n\n# #region logout [C:4] [TYPE Function]\n# @BRIEF Logs out the current user — blacklists the JWT token server-side.\n# @PRE Valid JWT token provided in Authorization header.\n# @POST Token is added to blacklist; subsequent requests with same token are rejected.\n# @SIDE_EFFECT Writes security event LOGOUT event; writes to token_blacklist table.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @RELATION CALLS -> [blacklist_token]\n\n@router.post(\"/logout\")\nasync def logout(\n current_user: UserSchema = Depends(get_current_user),\n request: starlette.requests.Request = None,\n db: Session = Depends(get_auth_db),\n):\n with belief_scope(\"api.auth.logout\"):\n log_security_event(\"LOGOUT\", current_user.username)\n\n # Extract token from Authorization header and blacklist it\n auth_header = request.headers.get(\"Authorization\", \"\")\n if auth_header.startswith(\"Bearer \"):\n token = auth_header[7:]\n blacklist_token(token, db)\n logger.reason(\n \"Token blacklisted on logout\",\n extra={\"user\": current_user.username},\n )\n\n return {\"message\": \"Successfully logged out\"}\n\n\n# #endregion logout\n\n\n# #region login_adfs [C:4] [TYPE Function]\n# @BRIEF Initiates the ADFS OIDC login flow.\n# @POST Redirects the user to ADFS.\n# @RELATION CALLS -> [is_adfs_configured]\n# @SIDE_EFFECT Redirects user to ADFS external OIDC provider.\n\n@router.get(\"/login/adfs\")\nasync def login_adfs(request: starlette.requests.Request):\n with belief_scope(\"api.auth.login_adfs\"):\n if not is_adfs_configured():\n raise HTTPException(\n status_code=status.HTTP_503_SERVICE_UNAVAILABLE,\n detail=\"ADFS is not configured. Please set ADFS_CLIENT_ID, ADFS_CLIENT_SECRET, and ADFS_METADATA_URL environment variables.\",\n )\n redirect_uri = request.url_for(\"auth_callback_adfs\")\n return await oauth.adfs.authorize_redirect(request, str(redirect_uri))\n\n\n# #endregion login_adfs\n\n\n# #region auth_callback_adfs [C:4] [TYPE Function]\n# @BRIEF Handles the callback from ADFS after successful authentication.\n# @POST Provisions user JIT and returns session token.\n# @SIDE_EFFECT Provisions user in DB, creates auth session, writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.get(\"/callback/adfs\", name=\"auth_callback_adfs\")\nasync def auth_callback_adfs(\n request: starlette.requests.Request, db: Session = Depends(get_auth_db)\n):\n with belief_scope(\"api.auth.callback_adfs\"):\n if not is_adfs_configured():\n raise HTTPException(\n status_code=status.HTTP_503_SERVICE_UNAVAILABLE,\n detail=\"ADFS is not configured. Please set ADFS_CLIENT_ID, ADFS_CLIENT_SECRET, and ADFS_METADATA_URL environment variables.\",\n )\n token = await oauth.adfs.authorize_access_token(request)\n user_info = token.get(\"userinfo\")\n if not user_info:\n raise HTTPException(\n status_code=400, detail=\"Failed to retrieve user info from ADFS\"\n )\n\n auth_service = AuthService(db)\n user = auth_service.provision_adfs_user(user_info)\n return auth_service.create_session(user)\n\n\n# #endregion auth_callback_adfs\n# #endregion AuthApi\n" }, { "contract_id": "login_for_access_token", "contract_type": "Function", "file_path": "backend/src/api/auth.py", - "start_line": 31, - "end_line": 58, + "start_line": 33, + "end_line": 75, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -96,14 +96,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region login_for_access_token [C:4] [TYPE Function]\n# @BRIEF Authenticates a user and returns a JWT access token.\n# @PRE form_data contains username and password.\n# @POST Returns a Token object on success.\n# @SIDE_EFFECT DB read/write for auth session; writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.post(\"/login\", response_model=Token)\nasync def login_for_access_token(\n form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_auth_db)\n):\n with belief_scope(\"api.auth.login\"):\n auth_service = AuthService(db)\n user = auth_service.authenticate_user(form_data.username, form_data.password)\n if not user:\n log_security_event(\n \"LOGIN_FAILED\", form_data.username, {\"reason\": \"Invalid credentials\"}\n )\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Incorrect username or password\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n log_security_event(\"LOGIN_SUCCESS\", user.username, {\"source\": \"LOCAL\"})\n return auth_service.create_session(user)\n\n\n# #endregion login_for_access_token\n" + "body": "# #region login_for_access_token [C:4] [TYPE Function]\n# @BRIEF Authenticates a user and returns a JWT access token.\n# @PRE form_data contains username and password.\n# @POST Returns a Token object on success.\n# @SIDE_EFFECT DB read/write for auth session; writes security event log.\n# @RELATION CALLS -> [AuthService]\n\n@router.post(\"/login\", response_model=Token)\nasync def login_for_access_token(\n form_data: OAuth2PasswordRequestForm = Depends(),\n db: Session = Depends(get_auth_db),\n request: starlette.requests.Request = None,\n):\n with belief_scope(\"api.auth.login\"):\n # Rate limiting — protect against brute force\n client_ip = request.client.host if request.client else \"unknown\"\n if rate_limiter.is_banned(client_ip):\n log_security_event(\n \"LOGIN_BLOCKED\", form_data.username, {\"reason\": \"Rate limited\", \"ip\": client_ip}\n )\n raise HTTPException(\n status_code=status.HTTP_429_TOO_MANY_REQUESTS,\n detail=\"Too many login attempts. Try again later.\",\n )\n\n auth_service = AuthService(db)\n user = auth_service.authenticate_user(form_data.username, form_data.password)\n if not user:\n rate_limiter.record_attempt(client_ip)\n log_security_event(\n \"LOGIN_FAILED\", form_data.username, {\"reason\": \"Invalid credentials\"}\n )\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Incorrect username or password\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n rate_limiter.record_success(client_ip)\n log_security_event(\"LOGIN_SUCCESS\", user.username, {\"source\": \"LOCAL\"})\n return auth_service.create_session(user)\n\n\n# #endregion login_for_access_token\n" }, { "contract_id": "read_users_me", "contract_type": "Function", "file_path": "backend/src/api/auth.py", - "start_line": 60, - "end_line": 73, + "start_line": 77, + "end_line": 90, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -130,16 +130,16 @@ "contract_id": "logout", "contract_type": "Function", "file_path": "backend/src/api/auth.py", - "start_line": 76, - "end_line": 92, + "start_line": 93, + "end_line": 123, "tier": "TIER_2", "complexity": 4, "metadata": { - "BRIEF": "Logs out the current user (placeholder for session revocation).", + "BRIEF": "Logs out the current user — blacklists the JWT token server-side.", "COMPLEXITY": 4, - "POST": "Returns success message.", - "PRE": "Valid JWT token provided.", - "SIDE_EFFECT": "Writes security event LOGOUT event." + "POST": "Token is added to blacklist; subsequent requests with same token are rejected.", + "PRE": "Valid JWT token provided in Authorization header.", + "SIDE_EFFECT": "Writes security event LOGOUT event; writes to token_blacklist table." }, "relations": [ { @@ -147,19 +147,25 @@ "relation_type": "DEPENDS_ON", "target_id": "get_current_user", "target_ref": "[get_current_user]" + }, + { + "source_id": "logout", + "relation_type": "CALLS", + "target_id": "blacklist_token", + "target_ref": "[blacklist_token]" } ], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region logout [C:4] [TYPE Function]\n# @BRIEF Logs out the current user (placeholder for session revocation).\n# @PRE Valid JWT token provided.\n# @POST Returns success message.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @SIDE_EFFECT Writes security event LOGOUT event.\n\n@router.post(\"/logout\")\nasync def logout(current_user: UserSchema = Depends(get_current_user)):\n with belief_scope(\"api.auth.logout\"):\n log_security_event(\"LOGOUT\", current_user.username)\n # In a stateless JWT setup, client-side token deletion is primary.\n # Server-side revocation (blacklisting) can be added here if needed.\n return {\"message\": \"Successfully logged out\"}\n\n\n# #endregion logout\n" + "body": "# #region logout [C:4] [TYPE Function]\n# @BRIEF Logs out the current user — blacklists the JWT token server-side.\n# @PRE Valid JWT token provided in Authorization header.\n# @POST Token is added to blacklist; subsequent requests with same token are rejected.\n# @SIDE_EFFECT Writes security event LOGOUT event; writes to token_blacklist table.\n# @RELATION DEPENDS_ON -> [get_current_user]\n# @RELATION CALLS -> [blacklist_token]\n\n@router.post(\"/logout\")\nasync def logout(\n current_user: UserSchema = Depends(get_current_user),\n request: starlette.requests.Request = None,\n db: Session = Depends(get_auth_db),\n):\n with belief_scope(\"api.auth.logout\"):\n log_security_event(\"LOGOUT\", current_user.username)\n\n # Extract token from Authorization header and blacklist it\n auth_header = request.headers.get(\"Authorization\", \"\")\n if auth_header.startswith(\"Bearer \"):\n token = auth_header[7:]\n blacklist_token(token, db)\n logger.reason(\n \"Token blacklisted on logout\",\n extra={\"user\": current_user.username},\n )\n\n return {\"message\": \"Successfully logged out\"}\n\n\n# #endregion logout\n" }, { "contract_id": "login_adfs", "contract_type": "Function", "file_path": "backend/src/api/auth.py", - "start_line": 95, - "end_line": 113, + "start_line": 126, + "end_line": 144, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -185,8 +191,8 @@ "contract_id": "auth_callback_adfs", "contract_type": "Function", "file_path": "backend/src/api/auth.py", - "start_line": 116, - "end_line": 144, + "start_line": 147, + "end_line": 175, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -5557,7 +5563,7 @@ "contract_type": "Module", "file_path": "backend/src/api/routes/assistant/_dispatch.py", "start_line": 1, - "end_line": 304, + "end_line": 317, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -5595,14 +5601,34 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AssistantDispatch [C:5] [TYPE Module] [SEMANTICS assistant, dispatch, confirm, execution, orchestration]\n# @BRIEF Intent dispatch engine, confirmation summary, and clarification text for the assistant API.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [AssistantSchemas]\n# @RELATION DEPENDS_ON -> [AssistantResolvers]\n# @RELATION DEPENDS_ON -> [AssistantLlmPlanner]\n# @RELATION DEPENDS_ON -> [AssistantDatasetReview]\n# @INVARIANT Unsupported operations are rejected via HTTPException(400).\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom fastapi import HTTPException\nfrom sqlalchemy.orm import Session\n\nfrom src.core.config_manager import ConfigManager\nfrom src.core.logger import belief_scope, logger\nfrom src.core.task_manager import TaskManager\nfrom src.schemas.auth import User\nfrom src.services.git_service import GitService\nfrom src.services.llm_provider import LLMProviderService\n\nfrom ._dataset_review_dispatch import _dispatch_dataset_review_intent\nfrom ._history import _coerce_query_bool\nfrom ._llm_planner import _check_any_permission\nfrom ._resolvers import (\n _build_task_observability_summary,\n _extract_result_deep_links,\n _get_environment_name_by_id,\n _resolve_dashboard_id_entity,\n _resolve_env_id,\n _resolve_provider_id,\n)\nfrom ._schemas import (\n _DATASET_REVIEW_OPS,\n AssistantAction,\n)\n\ngit_service = GitService()\n\n\n# #region _clarification_text_for_intent [C:2] [TYPE Function]\n# @BRIEF Convert technical missing-parameter errors into user-facing clarification prompts.\n# @PRE state was classified as needs_clarification for current intent/error combination.\n# @POST Returned text is human-readable and actionable for target operation.\ndef _clarification_text_for_intent(\n intent: dict[str, Any] | None, detail_text: str\n) -> str:\n operation = (intent or {}).get(\"operation\")\n guidance_by_operation: dict[str, str] = {\n \"run_llm_validation\": (\n \"Нужно уточнение для запуска LLM-валидации: Укажите дашборд (id или slug), окружение и провайдер LLM.\"\n ),\n \"run_llm_documentation\": (\n \"Нужно уточнение для генерации документации: Укажите dataset_id, окружение и провайдер LLM.\"\n ),\n \"create_branch\": \"Нужно уточнение: укажите дашборд (id/slug/title) и имя ветки.\",\n \"commit_changes\": \"Нужно уточнение: укажите дашборд (id/slug/title) для коммита.\",\n \"deploy_dashboard\": \"Нужно уточнение: укажите дашборд (id/slug/title) и целевое окружение.\",\n \"execute_migration\": \"Нужно уточнение: укажите дашборд (id/slug/title), source_env и target_env.\",\n \"run_backup\": \"Нужно уточнение: укажите окружение и при необходимости дашборд (id/slug/title).\",\n }\n return guidance_by_operation.get(operation, detail_text)\n\n\n# #endregion _clarification_text_for_intent\n\n\n# #region _async_confirmation_summary [C:4] [TYPE Function]\n# @BRIEF Build human-readable confirmation prompt for an intent before execution.\n# @PRE actions is a non-empty list of planned review actions.\n# @POST Returns a formatted summary string suitable for display to the user.\n# @SIDE_EFFECT None - pure formatting function.\nasync def _async_confirmation_summary(intent: dict[str, Any], config_manager: ConfigManager, db: Session) -> str:\n with belief_scope('_confirmation_summary'):\n logger.reason('Belief protocol reasoning checkpoint for _confirmation_summary')\n operation = intent.get('operation', '')\n entities = intent.get('entities', {})\n descriptions: dict[str, str] = {'create_branch': 'создание ветки{branch} для дашборда{dashboard}', 'commit_changes': 'коммит изменений для дашборда{dashboard}', 'deploy_dashboard': 'деплой дашборда{dashboard} в окружение{env}', 'execute_migration': 'миграция дашборда{dashboard} с{src} на{tgt}', 'run_backup': 'бэкап окружения{env}{dashboard}', 'run_llm_validation': 'LLM-валидация дашборда{dashboard}{env}', 'run_llm_documentation': 'генерация документации для датасета{dataset}{env}'}\n template = descriptions.get(operation)\n if not template:\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return 'Подтвердите выполнение операции или отмените.'\n\n def _label(value: Any, prefix: str=' ') -> str:\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return f'{prefix}{value}' if value else ''\n dashboard = entities.get('dashboard_id') or entities.get('dashboard_ref')\n text = template.format(branch=_label(entities.get('branch_name')), dashboard=_label(dashboard), env=_label(entities.get('environment') or entities.get('target_env')), src=_label(entities.get('source_env')), tgt=_label(entities.get('target_env')), dataset=_label(entities.get('dataset_id')))\n if operation == 'execute_migration':\n flags = []\n flags.append('маппинг БД: ' + ('ВКЛ' if _coerce_query_bool(entities.get('replace_db_config', False)) else 'ВЫКЛ'))\n flags.append('исправление кроссфильтров: ' + ('ВКЛ' if _coerce_query_bool(entities.get('fix_cross_filters', True)) else 'ВЫКЛ'))\n dry_run_enabled = _coerce_query_bool(entities.get('dry_run', False))\n flags.append('отчет dry-run: ' + ('ВКЛ' if dry_run_enabled else 'ВЫКЛ'))\n text += f\" ({', '.join(flags)})\"\n if dry_run_enabled:\n try:\n from src.core.migration.dry_run_orchestrator import MigrationDryRunService\n from src.core.superset_client import SupersetClient\n from src.models.dashboard import DashboardSelection\n src_token = entities.get('source_env')\n tgt_token = entities.get('target_env')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n if dashboard_id and src_token and tgt_token:\n src_env_id = _resolve_env_id(src_token, config_manager)\n tgt_env_id = _resolve_env_id(tgt_token, config_manager)\n if src_env_id and tgt_env_id:\n env_map = {env.id: env for env in config_manager.get_environments()}\n source_env = env_map.get(src_env_id)\n target_env = env_map.get(tgt_env_id)\n if source_env and target_env and (source_env.id != target_env.id):\n selection = DashboardSelection(source_env_id=source_env.id, target_env_id=target_env.id, selected_ids=[dashboard_id], replace_db_config=_coerce_query_bool(entities.get('replace_db_config', False)), fix_cross_filters=_coerce_query_bool(entities.get('fix_cross_filters', True)))\n service = MigrationDryRunService()\n source_client = SupersetClient(source_env)\n target_client = SupersetClient(target_env)\n report = service.run(selection, source_client, target_client, db)\n s = report.get('summary', {})\n dash_s = s.get('dashboards', {})\n charts_s = s.get('charts', {})\n ds_s = s.get('datasets', {})\n creates = dash_s.get('create', 0) + charts_s.get('create', 0) + ds_s.get('create', 0)\n updates = dash_s.get('update', 0) + charts_s.get('update', 0) + ds_s.get('update', 0)\n deletes = dash_s.get('delete', 0) + charts_s.get('delete', 0) + ds_s.get('delete', 0)\n text += f'\\n\\nОтчет dry-run:\\n- Будет создано новых объектов: {creates}\\n- Будет обновлено: {updates}\\n- Будет удалено: {deletes}'\n else:\n text += '\\n\\n(Не удалось загрузить отчет dry-run: неверные окружения).'\n except Exception as e:\n import traceback\n logger.warning('[assistant.dry_run_summary][failed] Exception: %s\\n%s', e, traceback.format_exc())\n text += f'\\n\\n(Не удалось загрузить отчет dry-run: {e}).'\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return f'Выполнить: {text}. Подтвердите или отмените.'\n\n\n# #endregion _async_confirmation_summary\n\n\n# #region _dispatch_intent [C:5] [TYPE Function]\n# @BRIEF Execute parsed assistant intent via existing task/plugin/git services.\n# @DATA_CONTRACT Input[intent,current_user,task_manager,config_manager,db] -> Output[Tuple[text:str,task_id:Optional[str],actions:List[AssistantAction]]]\n# @RELATION DEPENDS_ON -> [_check_any_permission]\n# @RELATION DEPENDS_ON -> [_resolve_dashboard_id_entity]\n# @RELATION DEPENDS_ON -> [TaskManager]\n# @RELATION DEPENDS_ON -> [GitService]\n# @SIDE_EFFECT May enqueue tasks, invoke git operations, and query/update external service state.\n# @PRE intent operation is known and actor permissions are validated per operation.\n# @POST Returns response text, optional task id, and UI actions for follow-up.\n# @INVARIANT unsupported operations are rejected via HTTPException(400).\nasync def _dispatch_intent(intent: dict[str, Any], current_user: User, task_manager: TaskManager, config_manager: ConfigManager, db: Session) -> tuple[str, str | None, list[AssistantAction]]:\n with belief_scope('_dispatch_intent'):\n logger.reason('Belief protocol reasoning checkpoint for _dispatch_intent')\n operation = intent.get('operation')\n entities = intent.get('entities', {})\n if operation in _DATASET_REVIEW_OPS or operation == 'dataset_review_answer_context':\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return await _dispatch_dataset_review_intent(intent, current_user, config_manager, db)\n if operation == 'show_capabilities':\n from ._llm_planner import _build_tool_catalog\n tools_catalog = _build_tool_catalog(current_user, config_manager, db)\n labels = {'create_branch': 'Git: создание ветки', 'commit_changes': 'Git: коммит', 'deploy_dashboard': 'Git: деплой дашборда', 'execute_migration': 'Миграции: запуск переноса', 'run_backup': 'Бэкапы: запуск резервного копирования', 'run_llm_validation': 'LLM: валидация дашборда', 'run_llm_documentation': 'LLM: генерация документации', 'get_task_status': 'Статус: проверка задачи', 'get_health_summary': 'Здоровье: сводка по дашбордам'}\n available = [labels[t['operation']] for t in tools_catalog if t['operation'] in labels]\n if not available:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Сейчас нет доступных для вас операций ассистента.', None, [])\n commands = '\\n'.join(f'- {item}' for item in available)\n text = f'Вот что я могу сделать для вас:\\n{commands}\\n\\nПример: `запусти миграцию с dev на prod для дашборда 42`.'\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, [])\n if operation == 'get_health_summary':\n from src.services.health_service import HealthService\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n service = HealthService(db)\n summary = await service.get_health_summary(environment_id=env_id)\n env_name = _get_environment_name_by_id(env_id, config_manager) if env_id else 'всех окружений'\n text = f'Сводка здоровья дашбордов для {env_name}:\\n- ✅ Прошли проверку: {summary.pass_count}\\n- ⚠️ С предупреждениями: {summary.warn_count}\\n- ❌ Ошибки валидации: {summary.fail_count}\\n- ❓ Неизвестно: {summary.unknown_count}'\n actions = [AssistantAction(type='open_route', label='Открыть Health Center', target='/dashboards/health')]\n if summary.fail_count > 0:\n text += '\\n\\nОбнаружены ошибки в следующих дашбордах:'\n for item in summary.items:\n if item.status == 'FAIL':\n text += f\"\\n- {item.dashboard_id} ({item.environment_id}): {item.summary or 'Нет деталей'}\"\n actions.append(AssistantAction(type='open_route', label=f'Отчет {item.dashboard_id}', target=f'/reports/llm/{item.task_id}'))\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, actions[:5])\n if operation == 'get_task_status':\n _check_any_permission(current_user, [('tasks', 'READ')])\n task_id = entities.get('task_id')\n if not task_id:\n recent = [t for t in task_manager.get_tasks(limit=20, offset=0) if t.user_id == current_user.id]\n if not recent:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('У вас пока нет задач в истории.', None, [])\n task = recent[0]\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Последняя задача: {task.id}, статус: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n task = task_manager.get_task(task_id)\n if not task:\n raise HTTPException(status_code=404, detail=f'Task {task_id} not found')\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Статус задачи {task.id}: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n if operation == 'create_branch':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n branch_name = entities.get('branch_name')\n if not dashboard_id or not branch_name:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or branch_name')\n git_service.create_branch(dashboard_id, branch_name, 'main')\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Ветка `{branch_name}` создана для дашборда {dashboard_id}.', None, [])\n if operation == 'commit_changes':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n commit_message = entities.get('message')\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n git_service.commit_changes(dashboard_id, commit_message, None)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Коммит выполнен успешно.', None, [])\n if operation == 'deploy_dashboard':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id or not env_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or environment')\n task = await task_manager.create_task(plugin_id='git-integration', params={'operation': 'deploy', 'dashboard_id': dashboard_id, 'environment_id': env_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Деплой запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'execute_migration':\n _check_any_permission(current_user, [('plugin:migration', 'EXECUTE'), ('plugin:superset-migration', 'EXECUTE')])\n src_token = entities.get('source_env')\n dashboard_ref = entities.get('dashboard_ref')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n src = _resolve_env_id(src_token, config_manager)\n tgt = _resolve_env_id(entities.get('target_env'), config_manager)\n if not src or not tgt:\n raise HTTPException(status_code=422, detail='Missing source_env/target_env')\n if not dashboard_id and (not dashboard_ref):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n migration_params: dict[str, Any] = {'source_env_id': src, 'target_env_id': tgt, 'replace_db_config': _coerce_query_bool(entities.get('replace_db_config', False)), 'fix_cross_filters': _coerce_query_bool(entities.get('fix_cross_filters', True))}\n if dashboard_id:\n migration_params['selected_ids'] = [dashboard_id]\n else:\n migration_params['dashboard_regex'] = str(dashboard_ref)\n task = await task_manager.create_task(plugin_id='superset-migration', params=migration_params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Миграция запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(tgt, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={tgt}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if dashboard_id else [])])\n if operation == 'run_backup':\n _check_any_permission(current_user, [('plugin:superset-backup', 'EXECUTE'), ('plugin:backup', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n if not env_id:\n raise HTTPException(status_code=400, detail='Missing or unknown environment')\n params: dict[str, Any] = {'environment_id': env_id}\n if entities.get('dashboard_id') or entities.get('dashboard_ref'):\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n params['dashboard_ids'] = [dashboard_id]\n task = await task_manager.create_task(plugin_id='superset-backup', params=params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Бэкап запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(env_id, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={env_id}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if entities.get('dashboard_id') or entities.get('dashboard_ref') else [])])\n if operation == 'run_llm_validation':\n _check_any_permission(current_user, [('plugin:llm_dashboard_validation', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager) or _resolve_env_id(None, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='dashboard_validation')\n if not dashboard_id or not env_id or (not provider_id):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/environment/provider. Укажите ID/slug дашборда или окружение.')\n provider = LLMProviderService(db).get_provider(provider_id)\n if not provider or not bool(provider.is_multimodal):\n raise HTTPException(status_code=422, detail='Selected provider model is not multimodal for dashboard validation. Выберите мультимодальную модель (например, gpt-4o).')\n task = await task_manager.create_task(plugin_id='llm_dashboard_validation', params={'dashboard_id': str(dashboard_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'LLM-валидация запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'run_llm_documentation':\n _check_any_permission(current_user, [('plugin:llm_documentation', 'EXECUTE')])\n dataset_id = entities.get('dataset_id')\n env_id = _resolve_env_id(entities.get('environment'), config_manager)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='documentation')\n if not dataset_id or not env_id or (not provider_id):\n raise HTTPException(status_code=400, detail='Missing dataset_id/environment/provider')\n task = await task_manager.create_task(plugin_id='llm_documentation', params={'dataset_id': str(dataset_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Генерация документации запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n raise HTTPException(status_code=400, detail='Unsupported operation')\n\n\n# #endregion _dispatch_intent\n\n\n# #endregion AssistantDispatch\n" + "body": "# #region AssistantDispatch [C:5] [TYPE Module] [SEMANTICS assistant, dispatch, confirm, execution, orchestration]\n# @BRIEF Intent dispatch engine, confirmation summary, and clarification text for the assistant API.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [AssistantSchemas]\n# @RELATION DEPENDS_ON -> [AssistantResolvers]\n# @RELATION DEPENDS_ON -> [AssistantLlmPlanner]\n# @RELATION DEPENDS_ON -> [AssistantDatasetReview]\n# @INVARIANT Unsupported operations are rejected via HTTPException(400).\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom fastapi import HTTPException\nfrom sqlalchemy.orm import Session\n\nfrom src.core.config_manager import ConfigManager\nfrom src.core.logger import belief_scope, logger\nfrom src.core.task_manager import TaskManager\nfrom src.schemas.auth import User\nfrom src.services.git_service import GitService\nfrom src.services.llm_provider import LLMProviderService\n\nfrom ._dataset_review_dispatch import _dispatch_dataset_review_intent\nfrom ._history import _coerce_query_bool\nfrom ._llm_planner import _check_any_permission\nfrom ._resolvers import (\n _build_task_observability_summary,\n _extract_result_deep_links,\n _get_environment_name_by_id,\n _resolve_dashboard_id_entity,\n _resolve_env_id,\n _resolve_provider_id,\n)\nfrom ._schemas import (\n _DATASET_REVIEW_OPS,\n AssistantAction,\n)\n\n# #region _get_git_service [TYPE Function]\n# @BRIEF Lazy-init GitService singleton to avoid crash at module import time when /app/storage/ is unavailable.\n# @POST Returns GitService instance (created once, cached).\n# @SIDE_EFFECT May attempt to create /app/storage/repositories on first call.\n# @RATIONALE Module-level GitService() instantiation crashed test collection for 33+ test files\n# because /app/storage/ doesn't exist outside Docker — see test fix.\n_git_service_instance: GitService | None = None\n\ndef _get_git_service() -> GitService:\n global _git_service_instance\n if _git_service_instance is None:\n _git_service_instance = GitService()\n return _git_service_instance\n# #endregion _get_git_service\n\n\n# #region _clarification_text_for_intent [C:2] [TYPE Function]\n# @BRIEF Convert technical missing-parameter errors into user-facing clarification prompts.\n# @PRE state was classified as needs_clarification for current intent/error combination.\n# @POST Returned text is human-readable and actionable for target operation.\ndef _clarification_text_for_intent(\n intent: dict[str, Any] | None, detail_text: str\n) -> str:\n operation = (intent or {}).get(\"operation\")\n guidance_by_operation: dict[str, str] = {\n \"run_llm_validation\": (\n \"Нужно уточнение для запуска LLM-валидации: Укажите дашборд (id или slug), окружение и провайдер LLM.\"\n ),\n \"run_llm_documentation\": (\n \"Нужно уточнение для генерации документации: Укажите dataset_id, окружение и провайдер LLM.\"\n ),\n \"create_branch\": \"Нужно уточнение: укажите дашборд (id/slug/title) и имя ветки.\",\n \"commit_changes\": \"Нужно уточнение: укажите дашборд (id/slug/title) для коммита.\",\n \"deploy_dashboard\": \"Нужно уточнение: укажите дашборд (id/slug/title) и целевое окружение.\",\n \"execute_migration\": \"Нужно уточнение: укажите дашборд (id/slug/title), source_env и target_env.\",\n \"run_backup\": \"Нужно уточнение: укажите окружение и при необходимости дашборд (id/slug/title).\",\n }\n return guidance_by_operation.get(operation, detail_text)\n\n\n# #endregion _clarification_text_for_intent\n\n\n# #region _async_confirmation_summary [C:4] [TYPE Function]\n# @BRIEF Build human-readable confirmation prompt for an intent before execution.\n# @PRE actions is a non-empty list of planned review actions.\n# @POST Returns a formatted summary string suitable for display to the user.\n# @SIDE_EFFECT None - pure formatting function.\nasync def _async_confirmation_summary(intent: dict[str, Any], config_manager: ConfigManager, db: Session) -> str:\n with belief_scope('_confirmation_summary'):\n logger.reason('Belief protocol reasoning checkpoint for _confirmation_summary')\n operation = intent.get('operation', '')\n entities = intent.get('entities', {})\n descriptions: dict[str, str] = {'create_branch': 'создание ветки{branch} для дашборда{dashboard}', 'commit_changes': 'коммит изменений для дашборда{dashboard}', 'deploy_dashboard': 'деплой дашборда{dashboard} в окружение{env}', 'execute_migration': 'миграция дашборда{dashboard} с{src} на{tgt}', 'run_backup': 'бэкап окружения{env}{dashboard}', 'run_llm_validation': 'LLM-валидация дашборда{dashboard}{env}', 'run_llm_documentation': 'генерация документации для датасета{dataset}{env}'}\n template = descriptions.get(operation)\n if not template:\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return 'Подтвердите выполнение операции или отмените.'\n\n def _label(value: Any, prefix: str=' ') -> str:\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return f'{prefix}{value}' if value else ''\n dashboard = entities.get('dashboard_id') or entities.get('dashboard_ref')\n text = template.format(branch=_label(entities.get('branch_name')), dashboard=_label(dashboard), env=_label(entities.get('environment') or entities.get('target_env')), src=_label(entities.get('source_env')), tgt=_label(entities.get('target_env')), dataset=_label(entities.get('dataset_id')))\n if operation == 'execute_migration':\n flags = []\n flags.append('маппинг БД: ' + ('ВКЛ' if _coerce_query_bool(entities.get('replace_db_config', False)) else 'ВЫКЛ'))\n flags.append('исправление кроссфильтров: ' + ('ВКЛ' if _coerce_query_bool(entities.get('fix_cross_filters', True)) else 'ВЫКЛ'))\n dry_run_enabled = _coerce_query_bool(entities.get('dry_run', False))\n flags.append('отчет dry-run: ' + ('ВКЛ' if dry_run_enabled else 'ВЫКЛ'))\n text += f\" ({', '.join(flags)})\"\n if dry_run_enabled:\n try:\n from src.core.migration.dry_run_orchestrator import MigrationDryRunService\n from src.core.superset_client import SupersetClient\n from src.models.dashboard import DashboardSelection\n src_token = entities.get('source_env')\n tgt_token = entities.get('target_env')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n if dashboard_id and src_token and tgt_token:\n src_env_id = _resolve_env_id(src_token, config_manager)\n tgt_env_id = _resolve_env_id(tgt_token, config_manager)\n if src_env_id and tgt_env_id:\n env_map = {env.id: env for env in config_manager.get_environments()}\n source_env = env_map.get(src_env_id)\n target_env = env_map.get(tgt_env_id)\n if source_env and target_env and (source_env.id != target_env.id):\n selection = DashboardSelection(source_env_id=source_env.id, target_env_id=target_env.id, selected_ids=[dashboard_id], replace_db_config=_coerce_query_bool(entities.get('replace_db_config', False)), fix_cross_filters=_coerce_query_bool(entities.get('fix_cross_filters', True)))\n service = MigrationDryRunService()\n source_client = SupersetClient(source_env)\n target_client = SupersetClient(target_env)\n report = service.run(selection, source_client, target_client, db)\n s = report.get('summary', {})\n dash_s = s.get('dashboards', {})\n charts_s = s.get('charts', {})\n ds_s = s.get('datasets', {})\n creates = dash_s.get('create', 0) + charts_s.get('create', 0) + ds_s.get('create', 0)\n updates = dash_s.get('update', 0) + charts_s.get('update', 0) + ds_s.get('update', 0)\n deletes = dash_s.get('delete', 0) + charts_s.get('delete', 0) + ds_s.get('delete', 0)\n text += f'\\n\\nОтчет dry-run:\\n- Будет создано новых объектов: {creates}\\n- Будет обновлено: {updates}\\n- Будет удалено: {deletes}'\n else:\n text += '\\n\\n(Не удалось загрузить отчет dry-run: неверные окружения).'\n except Exception as e:\n import traceback\n logger.warning('[assistant.dry_run_summary][failed] Exception: %s\\n%s', e, traceback.format_exc())\n text += f'\\n\\n(Не удалось загрузить отчет dry-run: {e}).'\n logger.reflect('Belief protocol postcondition checkpoint for _confirmation_summary')\n return f'Выполнить: {text}. Подтвердите или отмените.'\n\n\n# #endregion _async_confirmation_summary\n\n\n# #region _dispatch_intent [C:5] [TYPE Function]\n# @BRIEF Execute parsed assistant intent via existing task/plugin/git services.\n# @DATA_CONTRACT Input[intent,current_user,task_manager,config_manager,db] -> Output[Tuple[text:str,task_id:Optional[str],actions:List[AssistantAction]]]\n# @RELATION DEPENDS_ON -> [_check_any_permission]\n# @RELATION DEPENDS_ON -> [_resolve_dashboard_id_entity]\n# @RELATION DEPENDS_ON -> [TaskManager]\n# @RELATION DEPENDS_ON -> [GitService]\n# @SIDE_EFFECT May enqueue tasks, invoke git operations, and query/update external service state.\n# @PRE intent operation is known and actor permissions are validated per operation.\n# @POST Returns response text, optional task id, and UI actions for follow-up.\n# @INVARIANT unsupported operations are rejected via HTTPException(400).\nasync def _dispatch_intent(intent: dict[str, Any], current_user: User, task_manager: TaskManager, config_manager: ConfigManager, db: Session) -> tuple[str, str | None, list[AssistantAction]]:\n with belief_scope('_dispatch_intent'):\n logger.reason('Belief protocol reasoning checkpoint for _dispatch_intent')\n operation = intent.get('operation')\n entities = intent.get('entities', {})\n if operation in _DATASET_REVIEW_OPS or operation == 'dataset_review_answer_context':\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return await _dispatch_dataset_review_intent(intent, current_user, config_manager, db)\n if operation == 'show_capabilities':\n from ._llm_planner import _build_tool_catalog\n tools_catalog = _build_tool_catalog(current_user, config_manager, db)\n labels = {'create_branch': 'Git: создание ветки', 'commit_changes': 'Git: коммит', 'deploy_dashboard': 'Git: деплой дашборда', 'execute_migration': 'Миграции: запуск переноса', 'run_backup': 'Бэкапы: запуск резервного копирования', 'run_llm_validation': 'LLM: валидация дашборда', 'run_llm_documentation': 'LLM: генерация документации', 'get_task_status': 'Статус: проверка задачи', 'get_health_summary': 'Здоровье: сводка по дашбордам'}\n available = [labels[t['operation']] for t in tools_catalog if t['operation'] in labels]\n if not available:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Сейчас нет доступных для вас операций ассистента.', None, [])\n commands = '\\n'.join(f'- {item}' for item in available)\n text = f'Вот что я могу сделать для вас:\\n{commands}\\n\\nПример: `запусти миграцию с dev на prod для дашборда 42`.'\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, [])\n if operation == 'get_health_summary':\n from src.services.health_service import HealthService\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n service = HealthService(db)\n summary = await service.get_health_summary(environment_id=env_id)\n env_name = _get_environment_name_by_id(env_id, config_manager) if env_id else 'всех окружений'\n text = f'Сводка здоровья дашбордов для {env_name}:\\n- ✅ Прошли проверку: {summary.pass_count}\\n- ⚠️ С предупреждениями: {summary.warn_count}\\n- ❌ Ошибки валидации: {summary.fail_count}\\n- ❓ Неизвестно: {summary.unknown_count}'\n actions = [AssistantAction(type='open_route', label='Открыть Health Center', target='/dashboards/health')]\n if summary.fail_count > 0:\n text += '\\n\\nОбнаружены ошибки в следующих дашбордах:'\n for item in summary.items:\n if item.status == 'FAIL':\n text += f\"\\n- {item.dashboard_id} ({item.environment_id}): {item.summary or 'Нет деталей'}\"\n actions.append(AssistantAction(type='open_route', label=f'Отчет {item.dashboard_id}', target=f'/reports/llm/{item.task_id}'))\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, actions[:5])\n if operation == 'get_task_status':\n _check_any_permission(current_user, [('tasks', 'READ')])\n task_id = entities.get('task_id')\n if not task_id:\n recent = [t for t in task_manager.get_tasks(limit=20, offset=0) if t.user_id == current_user.id]\n if not recent:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('У вас пока нет задач в истории.', None, [])\n task = recent[0]\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Последняя задача: {task.id}, статус: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n task = task_manager.get_task(task_id)\n if not task:\n raise HTTPException(status_code=404, detail=f'Task {task_id} not found')\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Статус задачи {task.id}: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n if operation == 'create_branch':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n branch_name = entities.get('branch_name')\n if not dashboard_id or not branch_name:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or branch_name')\n _get_git_service().create_branch(dashboard_id, branch_name, 'main')\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Ветка `{branch_name}` создана для дашборда {dashboard_id}.', None, [])\n if operation == 'commit_changes':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n commit_message = entities.get('message')\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n _get_git_service().commit_changes(dashboard_id, commit_message, None)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Коммит выполнен успешно.', None, [])\n if operation == 'deploy_dashboard':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id or not env_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or environment')\n task = await task_manager.create_task(plugin_id='git-integration', params={'operation': 'deploy', 'dashboard_id': dashboard_id, 'environment_id': env_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Деплой запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'execute_migration':\n _check_any_permission(current_user, [('plugin:migration', 'EXECUTE'), ('plugin:superset-migration', 'EXECUTE')])\n src_token = entities.get('source_env')\n dashboard_ref = entities.get('dashboard_ref')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n src = _resolve_env_id(src_token, config_manager)\n tgt = _resolve_env_id(entities.get('target_env'), config_manager)\n if not src or not tgt:\n raise HTTPException(status_code=422, detail='Missing source_env/target_env')\n if not dashboard_id and (not dashboard_ref):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n migration_params: dict[str, Any] = {'source_env_id': src, 'target_env_id': tgt, 'replace_db_config': _coerce_query_bool(entities.get('replace_db_config', False)), 'fix_cross_filters': _coerce_query_bool(entities.get('fix_cross_filters', True))}\n if dashboard_id:\n migration_params['selected_ids'] = [dashboard_id]\n else:\n migration_params['dashboard_regex'] = str(dashboard_ref)\n task = await task_manager.create_task(plugin_id='superset-migration', params=migration_params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Миграция запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(tgt, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={tgt}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if dashboard_id else [])])\n if operation == 'run_backup':\n _check_any_permission(current_user, [('plugin:superset-backup', 'EXECUTE'), ('plugin:backup', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n if not env_id:\n raise HTTPException(status_code=400, detail='Missing or unknown environment')\n params: dict[str, Any] = {'environment_id': env_id}\n if entities.get('dashboard_id') or entities.get('dashboard_ref'):\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n params['dashboard_ids'] = [dashboard_id]\n task = await task_manager.create_task(plugin_id='superset-backup', params=params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Бэкап запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(env_id, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={env_id}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if entities.get('dashboard_id') or entities.get('dashboard_ref') else [])])\n if operation == 'run_llm_validation':\n _check_any_permission(current_user, [('plugin:llm_dashboard_validation', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager) or _resolve_env_id(None, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='dashboard_validation')\n if not dashboard_id or not env_id or (not provider_id):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/environment/provider. Укажите ID/slug дашборда или окружение.')\n provider = LLMProviderService(db).get_provider(provider_id)\n if not provider or not bool(provider.is_multimodal):\n raise HTTPException(status_code=422, detail='Selected provider model is not multimodal for dashboard validation. Выберите мультимодальную модель (например, gpt-4o).')\n task = await task_manager.create_task(plugin_id='llm_dashboard_validation', params={'dashboard_id': str(dashboard_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'LLM-валидация запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'run_llm_documentation':\n _check_any_permission(current_user, [('plugin:llm_documentation', 'EXECUTE')])\n dataset_id = entities.get('dataset_id')\n env_id = _resolve_env_id(entities.get('environment'), config_manager)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='documentation')\n if not dataset_id or not env_id or (not provider_id):\n raise HTTPException(status_code=400, detail='Missing dataset_id/environment/provider')\n task = await task_manager.create_task(plugin_id='llm_documentation', params={'dataset_id': str(dataset_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Генерация документации запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n raise HTTPException(status_code=400, detail='Unsupported operation')\n\n\n# #endregion _dispatch_intent\n\n\n# #endregion AssistantDispatch\n" + }, + { + "contract_id": "_get_git_service", + "contract_type": "Function", + "file_path": "backend/src/api/routes/assistant/_dispatch.py", + "start_line": 40, + "end_line": 53, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Lazy-init GitService singleton to avoid crash at module import time when /app/storage/ is unavailable.", + "POST": "Returns GitService instance (created once, cached).", + "RATIONALE": "Module-level GitService() instantiation crashed test collection for 33+ test files", + "SIDE_EFFECT": "May attempt to create /app/storage/repositories on first call." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _get_git_service [TYPE Function]\n# @BRIEF Lazy-init GitService singleton to avoid crash at module import time when /app/storage/ is unavailable.\n# @POST Returns GitService instance (created once, cached).\n# @SIDE_EFFECT May attempt to create /app/storage/repositories on first call.\n# @RATIONALE Module-level GitService() instantiation crashed test collection for 33+ test files\n# because /app/storage/ doesn't exist outside Docker — see test fix.\n_git_service_instance: GitService | None = None\n\ndef _get_git_service() -> GitService:\n global _git_service_instance\n if _git_service_instance is None:\n _git_service_instance = GitService()\n return _git_service_instance\n# #endregion _get_git_service\n" }, { "contract_id": "_clarification_text_for_intent", "contract_type": "Function", "file_path": "backend/src/api/routes/assistant/_dispatch.py", - "start_line": 43, - "end_line": 67, + "start_line": 56, + "end_line": 80, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -5621,8 +5647,8 @@ "contract_id": "_async_confirmation_summary", "contract_type": "Function", "file_path": "backend/src/api/routes/assistant/_dispatch.py", - "start_line": 70, - "end_line": 137, + "start_line": 83, + "end_line": 150, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -5642,8 +5668,8 @@ "contract_id": "_dispatch_intent", "contract_type": "Function", "file_path": "backend/src/api/routes/assistant/_dispatch.py", - "start_line": 140, - "end_line": 301, + "start_line": 153, + "end_line": 314, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -5684,7 +5710,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region _dispatch_intent [C:5] [TYPE Function]\n# @BRIEF Execute parsed assistant intent via existing task/plugin/git services.\n# @DATA_CONTRACT Input[intent,current_user,task_manager,config_manager,db] -> Output[Tuple[text:str,task_id:Optional[str],actions:List[AssistantAction]]]\n# @RELATION DEPENDS_ON -> [_check_any_permission]\n# @RELATION DEPENDS_ON -> [_resolve_dashboard_id_entity]\n# @RELATION DEPENDS_ON -> [TaskManager]\n# @RELATION DEPENDS_ON -> [GitService]\n# @SIDE_EFFECT May enqueue tasks, invoke git operations, and query/update external service state.\n# @PRE intent operation is known and actor permissions are validated per operation.\n# @POST Returns response text, optional task id, and UI actions for follow-up.\n# @INVARIANT unsupported operations are rejected via HTTPException(400).\nasync def _dispatch_intent(intent: dict[str, Any], current_user: User, task_manager: TaskManager, config_manager: ConfigManager, db: Session) -> tuple[str, str | None, list[AssistantAction]]:\n with belief_scope('_dispatch_intent'):\n logger.reason('Belief protocol reasoning checkpoint for _dispatch_intent')\n operation = intent.get('operation')\n entities = intent.get('entities', {})\n if operation in _DATASET_REVIEW_OPS or operation == 'dataset_review_answer_context':\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return await _dispatch_dataset_review_intent(intent, current_user, config_manager, db)\n if operation == 'show_capabilities':\n from ._llm_planner import _build_tool_catalog\n tools_catalog = _build_tool_catalog(current_user, config_manager, db)\n labels = {'create_branch': 'Git: создание ветки', 'commit_changes': 'Git: коммит', 'deploy_dashboard': 'Git: деплой дашборда', 'execute_migration': 'Миграции: запуск переноса', 'run_backup': 'Бэкапы: запуск резервного копирования', 'run_llm_validation': 'LLM: валидация дашборда', 'run_llm_documentation': 'LLM: генерация документации', 'get_task_status': 'Статус: проверка задачи', 'get_health_summary': 'Здоровье: сводка по дашбордам'}\n available = [labels[t['operation']] for t in tools_catalog if t['operation'] in labels]\n if not available:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Сейчас нет доступных для вас операций ассистента.', None, [])\n commands = '\\n'.join(f'- {item}' for item in available)\n text = f'Вот что я могу сделать для вас:\\n{commands}\\n\\nПример: `запусти миграцию с dev на prod для дашборда 42`.'\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, [])\n if operation == 'get_health_summary':\n from src.services.health_service import HealthService\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n service = HealthService(db)\n summary = await service.get_health_summary(environment_id=env_id)\n env_name = _get_environment_name_by_id(env_id, config_manager) if env_id else 'всех окружений'\n text = f'Сводка здоровья дашбордов для {env_name}:\\n- ✅ Прошли проверку: {summary.pass_count}\\n- ⚠️ С предупреждениями: {summary.warn_count}\\n- ❌ Ошибки валидации: {summary.fail_count}\\n- ❓ Неизвестно: {summary.unknown_count}'\n actions = [AssistantAction(type='open_route', label='Открыть Health Center', target='/dashboards/health')]\n if summary.fail_count > 0:\n text += '\\n\\nОбнаружены ошибки в следующих дашбордах:'\n for item in summary.items:\n if item.status == 'FAIL':\n text += f\"\\n- {item.dashboard_id} ({item.environment_id}): {item.summary or 'Нет деталей'}\"\n actions.append(AssistantAction(type='open_route', label=f'Отчет {item.dashboard_id}', target=f'/reports/llm/{item.task_id}'))\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, actions[:5])\n if operation == 'get_task_status':\n _check_any_permission(current_user, [('tasks', 'READ')])\n task_id = entities.get('task_id')\n if not task_id:\n recent = [t for t in task_manager.get_tasks(limit=20, offset=0) if t.user_id == current_user.id]\n if not recent:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('У вас пока нет задач в истории.', None, [])\n task = recent[0]\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Последняя задача: {task.id}, статус: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n task = task_manager.get_task(task_id)\n if not task:\n raise HTTPException(status_code=404, detail=f'Task {task_id} not found')\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Статус задачи {task.id}: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n if operation == 'create_branch':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n branch_name = entities.get('branch_name')\n if not dashboard_id or not branch_name:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or branch_name')\n git_service.create_branch(dashboard_id, branch_name, 'main')\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Ветка `{branch_name}` создана для дашборда {dashboard_id}.', None, [])\n if operation == 'commit_changes':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n commit_message = entities.get('message')\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n git_service.commit_changes(dashboard_id, commit_message, None)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Коммит выполнен успешно.', None, [])\n if operation == 'deploy_dashboard':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id or not env_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or environment')\n task = await task_manager.create_task(plugin_id='git-integration', params={'operation': 'deploy', 'dashboard_id': dashboard_id, 'environment_id': env_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Деплой запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'execute_migration':\n _check_any_permission(current_user, [('plugin:migration', 'EXECUTE'), ('plugin:superset-migration', 'EXECUTE')])\n src_token = entities.get('source_env')\n dashboard_ref = entities.get('dashboard_ref')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n src = _resolve_env_id(src_token, config_manager)\n tgt = _resolve_env_id(entities.get('target_env'), config_manager)\n if not src or not tgt:\n raise HTTPException(status_code=422, detail='Missing source_env/target_env')\n if not dashboard_id and (not dashboard_ref):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n migration_params: dict[str, Any] = {'source_env_id': src, 'target_env_id': tgt, 'replace_db_config': _coerce_query_bool(entities.get('replace_db_config', False)), 'fix_cross_filters': _coerce_query_bool(entities.get('fix_cross_filters', True))}\n if dashboard_id:\n migration_params['selected_ids'] = [dashboard_id]\n else:\n migration_params['dashboard_regex'] = str(dashboard_ref)\n task = await task_manager.create_task(plugin_id='superset-migration', params=migration_params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Миграция запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(tgt, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={tgt}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if dashboard_id else [])])\n if operation == 'run_backup':\n _check_any_permission(current_user, [('plugin:superset-backup', 'EXECUTE'), ('plugin:backup', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n if not env_id:\n raise HTTPException(status_code=400, detail='Missing or unknown environment')\n params: dict[str, Any] = {'environment_id': env_id}\n if entities.get('dashboard_id') or entities.get('dashboard_ref'):\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n params['dashboard_ids'] = [dashboard_id]\n task = await task_manager.create_task(plugin_id='superset-backup', params=params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Бэкап запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(env_id, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={env_id}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if entities.get('dashboard_id') or entities.get('dashboard_ref') else [])])\n if operation == 'run_llm_validation':\n _check_any_permission(current_user, [('plugin:llm_dashboard_validation', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager) or _resolve_env_id(None, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='dashboard_validation')\n if not dashboard_id or not env_id or (not provider_id):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/environment/provider. Укажите ID/slug дашборда или окружение.')\n provider = LLMProviderService(db).get_provider(provider_id)\n if not provider or not bool(provider.is_multimodal):\n raise HTTPException(status_code=422, detail='Selected provider model is not multimodal for dashboard validation. Выберите мультимодальную модель (например, gpt-4o).')\n task = await task_manager.create_task(plugin_id='llm_dashboard_validation', params={'dashboard_id': str(dashboard_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'LLM-валидация запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'run_llm_documentation':\n _check_any_permission(current_user, [('plugin:llm_documentation', 'EXECUTE')])\n dataset_id = entities.get('dataset_id')\n env_id = _resolve_env_id(entities.get('environment'), config_manager)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='documentation')\n if not dataset_id or not env_id or (not provider_id):\n raise HTTPException(status_code=400, detail='Missing dataset_id/environment/provider')\n task = await task_manager.create_task(plugin_id='llm_documentation', params={'dataset_id': str(dataset_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Генерация документации запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n raise HTTPException(status_code=400, detail='Unsupported operation')\n\n\n# #endregion _dispatch_intent\n" + "body": "# #region _dispatch_intent [C:5] [TYPE Function]\n# @BRIEF Execute parsed assistant intent via existing task/plugin/git services.\n# @DATA_CONTRACT Input[intent,current_user,task_manager,config_manager,db] -> Output[Tuple[text:str,task_id:Optional[str],actions:List[AssistantAction]]]\n# @RELATION DEPENDS_ON -> [_check_any_permission]\n# @RELATION DEPENDS_ON -> [_resolve_dashboard_id_entity]\n# @RELATION DEPENDS_ON -> [TaskManager]\n# @RELATION DEPENDS_ON -> [GitService]\n# @SIDE_EFFECT May enqueue tasks, invoke git operations, and query/update external service state.\n# @PRE intent operation is known and actor permissions are validated per operation.\n# @POST Returns response text, optional task id, and UI actions for follow-up.\n# @INVARIANT unsupported operations are rejected via HTTPException(400).\nasync def _dispatch_intent(intent: dict[str, Any], current_user: User, task_manager: TaskManager, config_manager: ConfigManager, db: Session) -> tuple[str, str | None, list[AssistantAction]]:\n with belief_scope('_dispatch_intent'):\n logger.reason('Belief protocol reasoning checkpoint for _dispatch_intent')\n operation = intent.get('operation')\n entities = intent.get('entities', {})\n if operation in _DATASET_REVIEW_OPS or operation == 'dataset_review_answer_context':\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return await _dispatch_dataset_review_intent(intent, current_user, config_manager, db)\n if operation == 'show_capabilities':\n from ._llm_planner import _build_tool_catalog\n tools_catalog = _build_tool_catalog(current_user, config_manager, db)\n labels = {'create_branch': 'Git: создание ветки', 'commit_changes': 'Git: коммит', 'deploy_dashboard': 'Git: деплой дашборда', 'execute_migration': 'Миграции: запуск переноса', 'run_backup': 'Бэкапы: запуск резервного копирования', 'run_llm_validation': 'LLM: валидация дашборда', 'run_llm_documentation': 'LLM: генерация документации', 'get_task_status': 'Статус: проверка задачи', 'get_health_summary': 'Здоровье: сводка по дашбордам'}\n available = [labels[t['operation']] for t in tools_catalog if t['operation'] in labels]\n if not available:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Сейчас нет доступных для вас операций ассистента.', None, [])\n commands = '\\n'.join(f'- {item}' for item in available)\n text = f'Вот что я могу сделать для вас:\\n{commands}\\n\\nПример: `запусти миграцию с dev на prod для дашборда 42`.'\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, [])\n if operation == 'get_health_summary':\n from src.services.health_service import HealthService\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n service = HealthService(db)\n summary = await service.get_health_summary(environment_id=env_id)\n env_name = _get_environment_name_by_id(env_id, config_manager) if env_id else 'всех окружений'\n text = f'Сводка здоровья дашбордов для {env_name}:\\n- ✅ Прошли проверку: {summary.pass_count}\\n- ⚠️ С предупреждениями: {summary.warn_count}\\n- ❌ Ошибки валидации: {summary.fail_count}\\n- ❓ Неизвестно: {summary.unknown_count}'\n actions = [AssistantAction(type='open_route', label='Открыть Health Center', target='/dashboards/health')]\n if summary.fail_count > 0:\n text += '\\n\\nОбнаружены ошибки в следующих дашбордах:'\n for item in summary.items:\n if item.status == 'FAIL':\n text += f\"\\n- {item.dashboard_id} ({item.environment_id}): {item.summary or 'Нет деталей'}\"\n actions.append(AssistantAction(type='open_route', label=f'Отчет {item.dashboard_id}', target=f'/reports/llm/{item.task_id}'))\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (text, None, actions[:5])\n if operation == 'get_task_status':\n _check_any_permission(current_user, [('tasks', 'READ')])\n task_id = entities.get('task_id')\n if not task_id:\n recent = [t for t in task_manager.get_tasks(limit=20, offset=0) if t.user_id == current_user.id]\n if not recent:\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('У вас пока нет задач в истории.', None, [])\n task = recent[0]\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Последняя задача: {task.id}, статус: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n task = task_manager.get_task(task_id)\n if not task:\n raise HTTPException(status_code=404, detail=f'Task {task_id} not found')\n actions = [AssistantAction(type='open_task', label='Open Task', target=task.id)]\n if str(task.status).upper() in {'SUCCESS', 'FAILED'}:\n actions.extend(_extract_result_deep_links(task, config_manager))\n summary_line = _build_task_observability_summary(task, config_manager)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Статус задачи {task.id}: {task.status}.' + (f'\\n{summary_line}' if summary_line else ''), task.id, actions)\n if operation == 'create_branch':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n branch_name = entities.get('branch_name')\n if not dashboard_id or not branch_name:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or branch_name')\n _get_git_service().create_branch(dashboard_id, branch_name, 'main')\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Ветка `{branch_name}` создана для дашборда {dashboard_id}.', None, [])\n if operation == 'commit_changes':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager)\n commit_message = entities.get('message')\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n _get_git_service().commit_changes(dashboard_id, commit_message, None)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return ('Коммит выполнен успешно.', None, [])\n if operation == 'deploy_dashboard':\n _check_any_permission(current_user, [('plugin:git', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id or not env_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref or environment')\n task = await task_manager.create_task(plugin_id='git-integration', params={'operation': 'deploy', 'dashboard_id': dashboard_id, 'environment_id': env_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Деплой запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'execute_migration':\n _check_any_permission(current_user, [('plugin:migration', 'EXECUTE'), ('plugin:superset-migration', 'EXECUTE')])\n src_token = entities.get('source_env')\n dashboard_ref = entities.get('dashboard_ref')\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=src_token)\n src = _resolve_env_id(src_token, config_manager)\n tgt = _resolve_env_id(entities.get('target_env'), config_manager)\n if not src or not tgt:\n raise HTTPException(status_code=422, detail='Missing source_env/target_env')\n if not dashboard_id and (not dashboard_ref):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n migration_params: dict[str, Any] = {'source_env_id': src, 'target_env_id': tgt, 'replace_db_config': _coerce_query_bool(entities.get('replace_db_config', False)), 'fix_cross_filters': _coerce_query_bool(entities.get('fix_cross_filters', True))}\n if dashboard_id:\n migration_params['selected_ids'] = [dashboard_id]\n else:\n migration_params['dashboard_regex'] = str(dashboard_ref)\n task = await task_manager.create_task(plugin_id='superset-migration', params=migration_params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Миграция запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(tgt, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={tgt}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if dashboard_id else [])])\n if operation == 'run_backup':\n _check_any_permission(current_user, [('plugin:superset-backup', 'EXECUTE'), ('plugin:backup', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager)\n if not env_id:\n raise HTTPException(status_code=400, detail='Missing or unknown environment')\n params: dict[str, Any] = {'environment_id': env_id}\n if entities.get('dashboard_id') or entities.get('dashboard_ref'):\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n if not dashboard_id:\n raise HTTPException(status_code=422, detail='Missing dashboard_id/dashboard_ref')\n params['dashboard_ids'] = [dashboard_id]\n task = await task_manager.create_task(plugin_id='superset-backup', params=params, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Бэкап запущен. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports'), *([AssistantAction(type='open_route', label=f'Открыть дашборд в {_get_environment_name_by_id(env_id, config_manager)}', target=f'/dashboards/{dashboard_id}?env_id={env_id}'), AssistantAction(type='open_diff', label='Показать Diff', target=str(dashboard_id))] if entities.get('dashboard_id') or entities.get('dashboard_ref') else [])])\n if operation == 'run_llm_validation':\n _check_any_permission(current_user, [('plugin:llm_dashboard_validation', 'EXECUTE')])\n env_token = entities.get('environment')\n env_id = _resolve_env_id(env_token, config_manager) or _resolve_env_id(None, config_manager)\n dashboard_id = _resolve_dashboard_id_entity(entities, config_manager, env_hint=env_token)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='dashboard_validation')\n if not dashboard_id or not env_id or (not provider_id):\n raise HTTPException(status_code=422, detail='Missing dashboard_id/environment/provider. Укажите ID/slug дашборда или окружение.')\n provider = LLMProviderService(db).get_provider(provider_id)\n if not provider or not bool(provider.is_multimodal):\n raise HTTPException(status_code=422, detail='Selected provider model is not multimodal for dashboard validation. Выберите мультимодальную модель (например, gpt-4o).')\n task = await task_manager.create_task(plugin_id='llm_dashboard_validation', params={'dashboard_id': str(dashboard_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'LLM-валидация запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n if operation == 'run_llm_documentation':\n _check_any_permission(current_user, [('plugin:llm_documentation', 'EXECUTE')])\n dataset_id = entities.get('dataset_id')\n env_id = _resolve_env_id(entities.get('environment'), config_manager)\n provider_id = _resolve_provider_id(entities.get('provider'), db, config_manager=config_manager, task_key='documentation')\n if not dataset_id or not env_id or (not provider_id):\n raise HTTPException(status_code=400, detail='Missing dataset_id/environment/provider')\n task = await task_manager.create_task(plugin_id='llm_documentation', params={'dataset_id': str(dataset_id), 'environment_id': env_id, 'provider_id': provider_id}, user_id=current_user.id)\n logger.reflect('Belief protocol postcondition checkpoint for _dispatch_intent')\n return (f'Генерация документации запущена. task_id={task.id}', task.id, [AssistantAction(type='open_task', label='Open Task', target=task.id), AssistantAction(type='open_reports', label='Open Reports', target='/reports')])\n raise HTTPException(status_code=400, detail='Unsupported operation')\n\n\n# #endregion _dispatch_intent\n" }, { "contract_id": "AssistantHistory", @@ -16249,14 +16275,14 @@ "contract_type": "Module", "file_path": "backend/src/app.py", "start_line": 1, - "end_line": 470, + "end_line": 596, "tier": "TIER_3", "complexity": 5, "metadata": { "BRIEF": "The main entry point for the FastAPI application.", "COMPLEXITY": 5, "DATA_CONTRACT": "[HTTP Request | WS Message] -> [HTTP Response | JSON Log Stream]", - "INVARIANT": "All WebSocket connections must be properly cleaned up on disconnect.", + "INVARIANT": "All WebSocket connections must be authenticated via JWT or API key token (see [SEC:C-3]).", "LAYER": "API", "POST": "FastAPI app instance is created, middleware configured, and routes registered.", "PRE": "Python environment and dependencies installed; configuration database available.", @@ -16274,14 +16300,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AppModule [C:5] [TYPE Module] [SEMANTICS fastapi, websocket, startup, scheduler, middleware]\n# @BRIEF The main entry point for the FastAPI application.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [ApiRoutesModule]\n# @INVARIANT All WebSocket connections must be properly cleaned up on disconnect.\n# @PRE Python environment and dependencies installed; configuration database available.\n# @POST FastAPI app instance is created, middleware configured, and routes registered.\n# @SIDE_EFFECT Starts background scheduler and binds network ports for HTTP/WS traffic.\n# @DATA_CONTRACT [HTTP Request | WS Message] -> [HTTP Response | JSON Log Stream]\n# @RATIONALE Duplicate @RELATION and @INVARIANT lines removed from header. Import sorting unified via ruff isort (I) rule across src/ — 139 fixes applied.\n\nimport os\nfrom pathlib import Path\n\n# project_root is used for static files mounting\nproject_root = Path(__file__).resolve().parent.parent.parent\nimport asyncio\n\nfrom fastapi import FastAPI, HTTPException, Request, WebSocket, WebSocketDisconnect\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom fastapi.responses import FileResponse\nfrom fastapi.staticfiles import StaticFiles\nfrom starlette.middleware.sessions import SessionMiddleware\n\nfrom .api import auth\nfrom .api.routes import (\n admin,\n admin_api_keys,\n assistant,\n clean_release,\n clean_release_v2,\n dashboards,\n dataset_review,\n datasets,\n environments,\n git,\n health,\n llm,\n maintenance,\n mappings,\n migration,\n plugins,\n profile,\n reports,\n settings,\n storage,\n tasks,\n translate,\n validation,\n)\nfrom .core.auth.security import get_password_hash\nfrom .core.cot_logger import seed_trace_id\nfrom .core.database import AuthSessionLocal, init_db\nfrom .core.encryption_key import ensure_encryption_key\nfrom .core.logger import belief_scope, logger\nfrom .core.utils.network import NetworkError\nfrom .dependencies import get_scheduler_service, get_task_manager\nfrom .models.auth import Role, User\n\n# #region FastAPI_App [C:3] [TYPE Global] [SEMANTICS app, fastapi, instance, route-registry]\n# @BRIEF Canonical FastAPI application instance for route, middleware, and websocket registration.\n# @RELATION DEPENDS_ON -> [ApiRoutesModule]\n# @RELATION BINDS_TO -> [API_Routes]\napp = FastAPI(\n title=\"Superset Tools API\",\n description=\"API for managing Superset automation tools and plugins.\",\n version=\"1.0.0\",\n)\n# #endregion FastAPI_App\n# #region ensure_initial_admin_user [C:3] [TYPE Function]\n# @BRIEF Ensures initial admin user exists when bootstrap env flags are enabled.\n# @RELATION DEPENDS_ON -> [AuthRepository]\ndef ensure_initial_admin_user() -> None:\n raw_flag = os.getenv(\"INITIAL_ADMIN_CREATE\", \"false\").strip().lower()\n if raw_flag not in {\"1\", \"true\", \"yes\", \"on\"}:\n return\n username = os.getenv(\"INITIAL_ADMIN_USERNAME\", \"\").strip()\n password = os.getenv(\"INITIAL_ADMIN_PASSWORD\", \"\").strip()\n if not username or not password:\n logger.warning(\n \"INITIAL_ADMIN_CREATE is enabled but INITIAL_ADMIN_USERNAME/INITIAL_ADMIN_PASSWORD is missing; skipping bootstrap.\"\n )\n return\n db = AuthSessionLocal()\n try:\n admin_role = db.query(Role).filter(Role.name == \"Admin\").first()\n if not admin_role:\n admin_role = Role(name=\"Admin\", description=\"System Administrator\")\n db.add(admin_role)\n db.commit()\n db.refresh(admin_role)\n existing_user = db.query(User).filter(User.username == username).first()\n if existing_user:\n logger.info(\n \"Initial admin bootstrap skipped: user '%s' already exists.\", username\n )\n return\n new_user = User(\n username=username,\n email=None,\n password_hash=get_password_hash(password),\n auth_source=\"LOCAL\",\n is_active=True,\n )\n new_user.roles.append(admin_role)\n db.add(new_user)\n db.commit()\n logger.info(\n \"Initial admin user '%s' created from environment bootstrap.\", username\n )\n except Exception as exc:\n db.rollback()\n logger.error(\"Failed to bootstrap initial admin user: %s\", exc)\n raise\n finally:\n db.close()\n# #endregion ensure_initial_admin_user\n# #region startup_event [C:3] [TYPE Function]\n# @BRIEF Handles application startup tasks, such as starting the scheduler.\n# @RELATION CALLS -> [AppDependencies]\n# @PRE None.\n# @POST Scheduler is started.\n# Startup event\n@app.on_event(\"startup\")\nasync def startup_event():\n seed_trace_id()\n with belief_scope(\"startup_event\"):\n ensure_encryption_key()\n init_db()\n ensure_initial_admin_user()\n scheduler = get_scheduler_service()\n scheduler.start()\n# #endregion startup_event\n# #region shutdown_event [C:3] [TYPE Function]\n# @BRIEF Handles application shutdown tasks, such as stopping the scheduler.\n# @RELATION CALLS -> [AppDependencies]\n# @PRE None.\n# @POST Scheduler is stopped.\n# Shutdown event\n@app.on_event(\"shutdown\")\nasync def shutdown_event():\n seed_trace_id()\n with belief_scope(\"shutdown_event\"):\n scheduler = get_scheduler_service()\n scheduler.stop()\n# #endregion shutdown_event\n# #region app_middleware [TYPE Block]\n# @BRIEF Configure application-wide middleware (Session, CORS).\n# @RATIONALE CORS allow_origins reads from ALLOWED_ORIGINS env var instead of hardcoded \"*\".\n# Default \"*\" is safe for dev; production must set ALLOWED_ORIGINS to explicit list.\n# @REJECTED Hardcoded allow_origins=[\"*\"] rejected — open CORS allows any origin to access the API,\n# which is a Class 1 security violation in production.\n\n# Configure Session Middleware (required by Authlib for OAuth2 flow)\nfrom .core.auth.config import auth_config\n\napp.add_middleware(SessionMiddleware, secret_key=auth_config.SECRET_KEY)\n# Configure CORS\napp.add_middleware(\n CORSMiddleware,\n allow_origins=os.getenv(\"ALLOWED_ORIGINS\", \"*\").split(\",\"),\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n# #endregion app_middleware\n# #region network_error_handler [C:1] [TYPE Function]\n# @BRIEF Global exception handler for NetworkError.\n# @PRE request is a FastAPI Request object.\n# @POST Returns 503 HTTP Exception.\n@app.exception_handler(NetworkError)\nasync def network_error_handler(request: Request, exc: NetworkError):\n with belief_scope(\"network_error_handler\"):\n logger.error(f\"Network error: {exc}\")\n return HTTPException(\n status_code=503,\n detail=\"Environment unavailable. Please check if the Superset instance is running.\",\n )\n# #endregion network_error_handler\n# #region log_requests [C:3] [TYPE Function]\n# @BRIEF Middleware to log incoming HTTP requests and their response status.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @PRE request is a FastAPI Request object.\n# @POST Logs request and response details.\n@app.middleware(\"http\")\nasync def log_requests(request: Request, call_next):\n with belief_scope(\"log_requests\"):\n # Avoid spamming logs for polling endpoints\n is_polling = request.url.path.endswith(\"/api/tasks\") and request.method == \"GET\"\n if not is_polling:\n logger.info(f\"Incoming request: {request.method} {request.url.path}\")\n try:\n response = await call_next(request)\n if not is_polling:\n logger.info(\n f\"Response status: {response.status_code} for {request.url.path}\"\n )\n return response\n except NetworkError as e:\n logger.error(f\"Network error caught in middleware: {e}\")\n raise HTTPException(\n status_code=503,\n detail=\"Environment unavailable. Please check if the Superset instance is running.\",\n )\n# #endregion log_requests\n# Seed trace_id on every request — MUST be the outermost middleware so trace_id\n# is seeded before log_requests (or any other middleware) runs.\nfrom .core.middleware.trace import TraceContextMiddleware\n\napp.add_middleware(TraceContextMiddleware)\n# #region API_Routes [C:3] [TYPE Block]\n# @BRIEF Register all FastAPI route groups exposed by the application entrypoint.\n# @RELATION DEPENDS_ON -> [FastAPI_App]\n# @RELATION DEPENDS_ON -> [Route_Group_Contracts]\n# @RELATION DEPENDS_ON -> [AuthApi]\n# @RELATION DEPENDS_ON -> [AdminApi]\n# @RELATION DEPENDS_ON -> [PluginsRouter]\n# @RELATION DEPENDS_ON -> [TasksRouter]\n# @RELATION DEPENDS_ON -> [SettingsRouter]\n# @RELATION DEPENDS_ON -> [ReportsRouter]\n# @RELATION DEPENDS_ON -> [LlmRoutes]\n# @RELATION DEPENDS_ON -> [CleanReleaseV2Api]\n# @RELATION DEPENDS_ON -> [ValidationRoutes]\n# @RELATION DEPENDS_ON -> [MaintenanceRouter]\n# Include API routes\napp.include_router(auth.router)\napp.include_router(admin.router)\napp.include_router(admin_api_keys.router)\napp.include_router(plugins.router, prefix=\"/api/plugins\", tags=[\"Plugins\"])\napp.include_router(tasks.router, prefix=\"/api/tasks\", tags=[\"Tasks\"])\napp.include_router(settings.router, prefix=\"/api/settings\", tags=[\"Settings\"])\napp.include_router(environments.router, tags=[\"Environments\"])\napp.include_router(mappings.router, prefix=\"/api/mappings\", tags=[\"Mappings\"])\napp.include_router(migration.router)\napp.include_router(git.router, prefix=\"/api/git\", tags=[\"Git\"])\napp.include_router(llm.router, prefix=\"/api/llm\", tags=[\"LLM\"])\napp.include_router(storage.router, prefix=\"/api/storage\", tags=[\"Storage\"])\napp.include_router(dashboards.router)\napp.include_router(datasets.router)\napp.include_router(reports.router)\napp.include_router(assistant.router, prefix=\"/api/assistant\", tags=[\"Assistant\"])\napp.include_router(clean_release.router)\napp.include_router(clean_release_v2.router)\napp.include_router(profile.router)\napp.include_router(dataset_review.router)\napp.include_router(health.router)\napp.include_router(translate.router)\napp.include_router(validation.router, prefix=\"/api/validation\", tags=[\"Validation\"])\napp.include_router(maintenance.maintenance_router)\n# #endregion API_Routes\n# #region api.include_routers [C:1] [TYPE Action] [SEMANTICS routes, registration, api]\n# @BRIEF Registers all API routers with the FastAPI application.\n# @LAYER API\n# #endregion api.include_routers\n# #region websocket_endpoint [C:5] [TYPE Function]\n# @BRIEF Provides a WebSocket endpoint for real-time log streaming of a task with server-side filtering.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @PRE task_id must be a valid task ID.\n# @POST WebSocket connection is managed and logs are streamed until disconnect.\n# @SIDE_EFFECT Subscribes to TaskManager log queue and broadcasts messages over network.\n# @DATA_CONTRACT [task_id: str, source: str, level: str] -> [JSON log entry objects]\n# @INVARIANT Every accepted WebSocket subscription is unsubscribed exactly once even when streaming fails or the client disconnects.\n# @UX_STATE Connecting -> Streaming -> (Disconnected)\n#\n# @TEST_CONTRACT WebSocketLogStreamApi ->\n# {\n# required_fields: {websocket: WebSocket, task_id: str},\n# optional_fields: {source: str, level: str},\n# invariants: [\n# \"Accepts the WebSocket connection\",\n# \"Applies source and level filters correctly to streamed logs\",\n# \"Cleans up subscriptions on disconnect\"\n# ]\n# }\n# @TEST_FIXTURE valid_ws_connection -> {\"task_id\": \"test_1\", \"source\": \"plugin\"}\n# @TEST_EDGE task_not_found_ws -> closes connection or sends error\n# @TEST_EDGE empty_task_logs -> waits for new logs\n# @TEST_INVARIANT consistent_streaming -> verifies: [valid_ws_connection]\n@app.websocket(\"/ws/logs/{task_id}\")\nasync def websocket_endpoint(\n websocket: WebSocket, task_id: str, source: str = None, level: str = None\n):\n \"\"\"\n WebSocket endpoint for real-time log streaming with optional server-side filtering.\n Query Parameters:\n source: Filter logs by source component (e.g., \"plugin\", \"superset_api\")\n level: Filter logs by minimum level (DEBUG, INFO, WARNING, ERROR)\n \"\"\"\n seed_trace_id()\n with belief_scope(\"websocket_endpoint\", f\"task_id={task_id}\"):\n await websocket.accept()\n source_filter = source.lower() if source else None\n level_filter = level.upper() if level else None\n level_hierarchy = {\"DEBUG\": 0, \"INFO\": 1, \"WARNING\": 2, \"ERROR\": 3}\n min_level = level_hierarchy.get(level_filter, 0) if level_filter else 0\n logger.reason(\n \"Accepted WebSocket log stream connection\",\n extra={\n \"task_id\": task_id,\n \"source_filter\": source_filter,\n \"level_filter\": level_filter,\n \"min_level\": min_level,\n },\n )\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_logs(task_id)\n logger.reason(\n \"Subscribed WebSocket client to task log queue\",\n extra={\"task_id\": task_id},\n )\n def matches_filters(log_entry) -> bool:\n \"\"\"Check if log entry matches the filter criteria.\"\"\"\n log_source = getattr(log_entry, \"source\", None)\n if source_filter and str(log_source or \"\").lower() != source_filter:\n return False\n if level_filter:\n log_level = level_hierarchy.get(str(log_entry.level).upper(), 0)\n if log_level < min_level:\n return False\n return True\n try:\n logger.reason(\n \"Starting task log stream replay and live forwarding\",\n extra={\"task_id\": task_id},\n )\n initial_logs = task_manager.get_task_logs(task_id)\n initial_sent = 0\n for log_entry in initial_logs:\n if matches_filters(log_entry):\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n initial_sent += 1\n logger.reflect(\n \"Initial task log replay completed\",\n extra={\n \"task_id\": task_id,\n \"replayed_logs\": initial_sent,\n \"total_available_logs\": len(initial_logs),\n },\n )\n task = task_manager.get_task(task_id)\n if task and task.status == \"AWAITING_INPUT\" and task.input_request:\n synthetic_log = {\n \"timestamp\": task.logs[-1].timestamp.isoformat()\n if task.logs\n else \"2024-01-01T00:00:00\",\n \"level\": \"INFO\",\n \"message\": \"Task paused for user input (Connection Re-established)\",\n \"context\": {\"input_request\": task.input_request},\n }\n await websocket.send_json(synthetic_log)\n logger.reason(\n \"Replayed awaiting-input prompt to restored WebSocket client\",\n extra={\"task_id\": task_id, \"task_status\": task.status},\n )\n while True:\n log_entry = await queue.get()\n if not matches_filters(log_entry):\n continue\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n logger.reflect(\n \"Forwarded task log entry to WebSocket client\",\n extra={\n \"task_id\": task_id,\n \"level\": log_dict.get(\"level\"),\n },\n )\n if (\n \"Task completed successfully\" in log_entry.message\n or \"Task failed\" in log_entry.message\n ):\n logger.reason(\n \"Observed terminal task log entry; delaying to preserve client visibility\",\n extra={\"task_id\": task_id, \"message\": log_entry.message},\n )\n await asyncio.sleep(2)\n except WebSocketDisconnect:\n logger.reason(\n \"WebSocket client disconnected from task log stream\",\n extra={\"task_id\": task_id},\n )\n except Exception as exc:\n logger.explore(\n \"WebSocket log streaming encountered an unexpected failure\",\n extra={\"task_id\": task_id, \"error\": str(exc)},\n )\n raise\n finally:\n task_manager.unsubscribe_logs(task_id, queue)\n logger.reflect(\n \"Released WebSocket log queue subscription\",\n extra={\"task_id\": task_id},\n )\n# #endregion websocket_endpoint\n# #region dataset_websocket_endpoint [C:4] [TYPE Function]\n# @BRIEF WebSocket endpoint for dataset.updated events — auto-refresh on task completion.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @PRE env_id must reference a known environment.\n# @POST WebSocket streams dataset.updated events until disconnect.\n# @SIDE_EFFECT Subscribes to dataset event queue in task manager lifecycle.\n@app.websocket(\"/ws/datasets/{env_id}\")\nasync def dataset_websocket_endpoint(websocket: WebSocket, env_id: str):\n seed_trace_id()\n with belief_scope(\"dataset_websocket_endpoint\", f\"env_id={env_id}\"):\n await websocket.accept()\n logger.reason(\"Accepted dataset event WebSocket\", extra={\"env_id\": env_id})\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_dataset_events(env_id)\n try:\n while True:\n event = await queue.get()\n await websocket.send_json(event)\n logger.reflect(\"Forwarded dataset.updated event to client\", extra={\"env_id\": env_id})\n except WebSocketDisconnect:\n logger.reason(\"WebSocket client disconnected from dataset events\", extra={\"env_id\": env_id})\n except Exception as exc:\n logger.explore(\"WebSocket dataset streaming failed\", extra={\"env_id\": env_id, \"error\": str(exc)})\n finally:\n task_manager.unsubscribe_dataset_events(env_id, queue)\n logger.reflect(\"Released dataset event subscription\", extra={\"env_id\": env_id})\n# #endregion dataset_websocket_endpoint\n# #region StaticFiles [C:1] [TYPE Mount] [SEMANTICS static, frontend, spa]\n# @BRIEF Mounts the frontend build directory to serve static assets.\nfrontend_path = project_root / \"frontend\" / \"build\"\nif frontend_path.exists():\n app.mount(\n \"/_app\", StaticFiles(directory=str(frontend_path / \"_app\")), name=\"static\"\n )\n # #region serve_spa [TYPE Function] [C:1]\n # @PURPOSE Serves the SPA frontend for any path not matched by API routes.\n # @PRE frontend_path exists.\n # @POST Returns the requested file or index.html.\n @app.get(\"/{file_path:path}\", include_in_schema=False)\n async def serve_spa(file_path: str):\n with belief_scope(\"serve_spa\"):\n # Only serve SPA for non-API paths\n # API routes are registered separately and should be matched by FastAPI first\n if file_path and (\n file_path.startswith(\"api/\")\n or file_path.startswith(\"/api/\")\n or file_path == \"api\"\n ):\n # This should not happen if API routers are properly registered\n # Return 404 instead of serving HTML\n raise HTTPException(\n status_code=404, detail=f\"API endpoint not found: {file_path}\"\n )\n full_path = frontend_path / file_path\n if file_path and full_path.is_file():\n return FileResponse(str(full_path))\n return FileResponse(str(frontend_path / \"index.html\"))\n # #endregion serve_spa\nelse:\n # #region read_root [TYPE Function] [C:1]\n # @PURPOSE A simple root endpoint to confirm that the API is running when frontend is missing.\n # @PRE None.\n # @POST Returns a JSON message indicating API status.\n @app.get(\"/\")\n async def read_root():\n with belief_scope(\"read_root\"):\n return {\n \"message\": \"Superset Tools API is running (Frontend build not found)\"\n }\n # #endregion read_root\n# #endregion StaticFiles\n# #endregion AppModule\n" + "body": "# #region AppModule [C:5] [TYPE Module] [SEMANTICS fastapi, websocket, startup, scheduler, middleware]\n# @BRIEF The main entry point for the FastAPI application.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [ApiRoutesModule]\n# @INVARIANT All WebSocket connections must be properly cleaned up on disconnect.\n# @INVARIANT All WebSocket connections must be authenticated via JWT or API key token (see [SEC:C-3]).\n# @PRE Python environment and dependencies installed; configuration database available.\n# @POST FastAPI app instance is created, middleware configured, and routes registered.\n# @SIDE_EFFECT Starts background scheduler and binds network ports for HTTP/WS traffic.\n# @DATA_CONTRACT [HTTP Request | WS Message] -> [HTTP Response | JSON Log Stream]\n# @RATIONALE Duplicate @RELATION and @INVARIANT lines removed from header. Import sorting unified via ruff isort (I) rule across src/ — 139 fixes applied.\n\nimport os\nfrom pathlib import Path\n\n# project_root is used for static files mounting\nproject_root = Path(__file__).resolve().parent.parent.parent\nimport asyncio\n\nfrom fastapi import FastAPI, HTTPException, Request, WebSocket, WebSocketDisconnect\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom fastapi.responses import FileResponse\nfrom fastapi.staticfiles import StaticFiles\nfrom starlette.middleware.base import BaseHTTPMiddleware\nfrom starlette.middleware.sessions import SessionMiddleware\n\nfrom .api import auth\nfrom .api.routes import (\n admin,\n admin_api_keys,\n assistant,\n clean_release,\n clean_release_v2,\n dashboards,\n dataset_review,\n datasets,\n environments,\n git,\n health,\n llm,\n maintenance,\n mappings,\n migration,\n plugins,\n profile,\n reports,\n settings,\n storage,\n tasks,\n translate,\n validation,\n)\nfrom .core.auth.security import get_password_hash\nfrom .core.cot_logger import seed_trace_id\nfrom .core.database import AuthSessionLocal, init_db\nfrom .core.encryption_key import ensure_encryption_key\nfrom .core.logger import belief_scope, logger\nfrom .core.utils.network import NetworkError\nfrom .dependencies import get_scheduler_service, get_task_manager\nfrom .models.auth import Role, User\n\n# #region FastAPI_App [C:3] [TYPE Global] [SEMANTICS app, fastapi, instance, route-registry]\n# @BRIEF Canonical FastAPI application instance for route, middleware, and websocket registration.\n# @RELATION DEPENDS_ON -> [ApiRoutesModule]\n# @RELATION BINDS_TO -> [API_Routes]\napp = FastAPI(\n title=\"Superset Tools API\",\n description=\"API for managing Superset automation tools and plugins.\",\n version=\"1.0.0\",\n)\n# #endregion FastAPI_App\n# #region ensure_initial_admin_user [C:3] [TYPE Function]\n# @BRIEF Ensures initial admin user exists when bootstrap env flags are enabled.\n# @RELATION DEPENDS_ON -> [AuthRepository]\ndef ensure_initial_admin_user() -> None:\n raw_flag = os.getenv(\"INITIAL_ADMIN_CREATE\", \"false\").strip().lower()\n if raw_flag not in {\"1\", \"true\", \"yes\", \"on\"}:\n return\n username = os.getenv(\"INITIAL_ADMIN_USERNAME\", \"\").strip()\n password = os.getenv(\"INITIAL_ADMIN_PASSWORD\", \"\").strip()\n if not username or not password:\n logger.warning(\n \"INITIAL_ADMIN_CREATE is enabled but INITIAL_ADMIN_USERNAME/INITIAL_ADMIN_PASSWORD is missing; skipping bootstrap.\"\n )\n return\n # Warn about env-var password — visible via /proc to other processes\n logger.warning(\n \"INITIAL_ADMIN_PASSWORD is set via environment variable. \"\n \"This is visible to other processes on the same host. \"\n \"Consider removing the env var after bootstrap.\"\n )\n db = AuthSessionLocal()\n try:\n admin_role = db.query(Role).filter(Role.name == \"Admin\").first()\n if not admin_role:\n admin_role = Role(name=\"Admin\", description=\"System Administrator\", is_admin=True)\n db.add(admin_role)\n db.commit()\n db.refresh(admin_role)\n existing_user = db.query(User).filter(User.username == username).first()\n if existing_user:\n logger.info(\n \"Initial admin bootstrap skipped: user '%s' already exists.\", username\n )\n return\n new_user = User(\n username=username,\n email=None,\n password_hash=get_password_hash(password),\n auth_source=\"LOCAL\",\n is_active=True,\n )\n new_user.roles.append(admin_role)\n db.add(new_user)\n db.commit()\n logger.info(\n \"Initial admin user '%s' created from environment bootstrap.\", username\n )\n except Exception as exc:\n db.rollback()\n logger.error(\"Failed to bootstrap initial admin user: %s\", exc)\n raise\n finally:\n db.close()\n# #endregion ensure_initial_admin_user\n# #region startup_event [C:3] [TYPE Function]\n# @BRIEF Handles application startup tasks, such as starting the scheduler.\n# @RELATION CALLS -> [AppDependencies]\n# @PRE None.\n# @POST Scheduler is started.\n# Startup event\n@app.on_event(\"startup\")\nasync def startup_event():\n seed_trace_id()\n with belief_scope(\"startup_event\"):\n ensure_encryption_key()\n init_db()\n ensure_initial_admin_user()\n scheduler = get_scheduler_service()\n scheduler.start()\n# #endregion startup_event\n# #region shutdown_event [C:3] [TYPE Function]\n# @BRIEF Handles application shutdown tasks, such as stopping the scheduler.\n# @RELATION CALLS -> [AppDependencies]\n# @PRE None.\n# @POST Scheduler is stopped.\n# Shutdown event\n@app.on_event(\"shutdown\")\nasync def shutdown_event():\n seed_trace_id()\n with belief_scope(\"shutdown_event\"):\n scheduler = get_scheduler_service()\n scheduler.stop()\n# #endregion shutdown_event\n# #region app_middleware [TYPE Block]\n# @BRIEF Configure application-wide middleware (Session, CORS).\n# @RATIONALE SessionMiddleware uses SESSION_SECRET_KEY independent of JWT SECRET_KEY (see [SEC:H-4]).\n# CORS allow_origins crashes early if ALLOWED_ORIGINS is unset — no \"*\" fallback (see [SEC:M-1]).\n# @REJECTED Hardcoded allow_origins=[\"*\"] rejected — open CORS allows any origin to access the API,\n# which is a Class 1 security violation in production.\n# @REJECTED SessionMiddleware sharing JWT SECRET_KEY rejected in [SEC:H-4] — key reuse expands blast radius.\n\n# Configure Session Middleware (required by Authlib for OAuth2 flow)\nfrom .core.auth.config import auth_config\n\n_session_secret = os.getenv(\"SESSION_SECRET_KEY\", \"\").strip()\nif not _session_secret:\n _session_secret = auth_config.SECRET_KEY\n logger.warning(\n \"SESSION_SECRET_KEY not set. Falling back to AUTH_SECRET_KEY. \"\n \"Set a separate SESSION_SECRET_KEY in .env for production isolation.\"\n )\napp.add_middleware(SessionMiddleware, secret_key=_session_secret)\n\n# Configure CORS\n_allowed_origins_raw = os.getenv(\"ALLOWED_ORIGINS\", \"\").strip()\nif not _allowed_origins_raw:\n logger.warning(\n \"ALLOWED_ORIGINS not set. CORS will reject all cross-origin requests. \"\n \"Set ALLOWED_ORIGINS to a comma-separated list of allowed origins.\"\n )\n _allowed_origins = []\nelse:\n _allowed_origins = [o.strip() for o in _allowed_origins_raw.split(\",\") if o.strip()]\napp.add_middleware(\n CORSMiddleware,\n allow_origins=_allowed_origins,\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n\n# HSTS — Strict-Transport-Security header (see [SEC:L-2])\n# Only active when FORCE_HTTPS=true (enterprise deployments with proper certs).\n# In dev or behind HTTP-only proxies, HSTS is disabled to avoid lockout.\nclass HSTSMiddleware(BaseHTTPMiddleware):\n \"\"\"Add Strict-Transport-Security header when FORCE_HTTPS=true.\n\n Enterprise note: In production, set HSTS at the nginx/ingress level\n (add_header Strict-Transport-Security ...). This middleware is a\n fallback for environments where nginx is not configured to do so.\n \"\"\"\n def __init__(self, app):\n super().__init__(app)\n self._enabled = os.getenv(\"FORCE_HTTPS\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}\n\n async def dispatch(self, request: Request, call_next):\n response = await call_next(request)\n if self._enabled:\n response.headers[\"Strict-Transport-Security\"] = \"max-age=31536000; includeSubDomains\"\n return response\n\napp.add_middleware(HSTSMiddleware)\n# #endregion app_middleware\n# #region network_error_handler [C:1] [TYPE Function]\n# @BRIEF Global exception handler for NetworkError.\n# @PRE request is a FastAPI Request object.\n# @POST Returns 503 HTTP Exception.\n@app.exception_handler(NetworkError)\nasync def network_error_handler(request: Request, exc: NetworkError):\n with belief_scope(\"network_error_handler\"):\n logger.error(f\"Network error: {exc}\")\n return HTTPException(\n status_code=503,\n detail=\"Environment unavailable. Please check if the Superset instance is running.\",\n )\n# #endregion network_error_handler\n# #region log_requests [C:3] [TYPE Function]\n# @BRIEF Middleware to log incoming HTTP requests and their response status.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @PRE request is a FastAPI Request object.\n# @POST Logs request and response details.\n@app.middleware(\"http\")\nasync def log_requests(request: Request, call_next):\n with belief_scope(\"log_requests\"):\n # Avoid spamming logs for polling endpoints\n is_polling = request.url.path.endswith(\"/api/tasks\") and request.method == \"GET\"\n if not is_polling:\n logger.info(f\"Incoming request: {request.method} {request.url.path}\")\n try:\n response = await call_next(request)\n if not is_polling:\n logger.info(\n f\"Response status: {response.status_code} for {request.url.path}\"\n )\n return response\n except NetworkError as e:\n logger.error(f\"Network error caught in middleware: {e}\")\n raise HTTPException(\n status_code=503,\n detail=\"Environment unavailable. Please check if the Superset instance is running.\",\n )\n# #endregion log_requests\n# Seed trace_id on every request — MUST be the outermost middleware so trace_id\n# is seeded before log_requests (or any other middleware) runs.\nfrom .core.middleware.trace import TraceContextMiddleware\n\napp.add_middleware(TraceContextMiddleware)\n# #region API_Routes [C:3] [TYPE Block]\n# @BRIEF Register all FastAPI route groups exposed by the application entrypoint.\n# @RELATION DEPENDS_ON -> [FastAPI_App]\n# @RELATION DEPENDS_ON -> [Route_Group_Contracts]\n# @RELATION DEPENDS_ON -> [AuthApi]\n# @RELATION DEPENDS_ON -> [AdminApi]\n# @RELATION DEPENDS_ON -> [PluginsRouter]\n# @RELATION DEPENDS_ON -> [TasksRouter]\n# @RELATION DEPENDS_ON -> [SettingsRouter]\n# @RELATION DEPENDS_ON -> [ReportsRouter]\n# @RELATION DEPENDS_ON -> [LlmRoutes]\n# @RELATION DEPENDS_ON -> [CleanReleaseV2Api]\n# @RELATION DEPENDS_ON -> [ValidationRoutes]\n# @RELATION DEPENDS_ON -> [MaintenanceRouter]\n# Include API routes\napp.include_router(auth.router)\napp.include_router(admin.router)\napp.include_router(admin_api_keys.router)\napp.include_router(plugins.router, prefix=\"/api/plugins\", tags=[\"Plugins\"])\napp.include_router(tasks.router, prefix=\"/api/tasks\", tags=[\"Tasks\"])\napp.include_router(settings.router, prefix=\"/api/settings\", tags=[\"Settings\"])\napp.include_router(environments.router, tags=[\"Environments\"])\napp.include_router(mappings.router, prefix=\"/api/mappings\", tags=[\"Mappings\"])\napp.include_router(migration.router)\napp.include_router(git.router, prefix=\"/api/git\", tags=[\"Git\"])\napp.include_router(llm.router, prefix=\"/api/llm\", tags=[\"LLM\"])\napp.include_router(storage.router, prefix=\"/api/storage\", tags=[\"Storage\"])\napp.include_router(dashboards.router)\napp.include_router(datasets.router)\napp.include_router(reports.router)\napp.include_router(assistant.router, prefix=\"/api/assistant\", tags=[\"Assistant\"])\napp.include_router(clean_release.router)\napp.include_router(clean_release_v2.router)\napp.include_router(profile.router)\napp.include_router(dataset_review.router)\napp.include_router(health.router)\napp.include_router(translate.router)\napp.include_router(validation.router, prefix=\"/api/validation\", tags=[\"Validation\"])\napp.include_router(maintenance.maintenance_router)\n# #endregion API_Routes\n# #region api.include_routers [C:1] [TYPE Action] [SEMANTICS routes, registration, api]\n# @BRIEF Registers all API routers with the FastAPI application.\n# @LAYER API\n# #endregion api.include_routers\n# #region _authenticate_websocket [TYPE Function]\n# @BRIEF Authenticate a WebSocket connection via JWT or API key from query param `token`.\n# @PRE websocket is a live Starlette WebSocket before accept().\n# @POST Returns True if token is valid, logs reason; returns False if rejected.\n# @RELATION DEPENDS_ON -> [AuthJwtModule]\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @SIDE_EFFECT Performs DB read to validate API key hash.\nasync def _authenticate_websocket(websocket: WebSocket, endpoint_name: str) -> bool:\n ws_token = websocket.query_params.get(\"token\", \"\")\n if not ws_token:\n logger.warning(\n \"WebSocket connection rejected: missing token\",\n extra={\"endpoint\": endpoint_name},\n )\n return False\n\n # Try JWT first, fallback to API key\n try:\n from .core.auth.jwt import decode_token\n from .core.auth.api_key import hash_api_key\n from .core.database import SessionLocal\n\n # Attempt JWT validation\n payload = decode_token(ws_token)\n user = payload.get(\"sub\")\n if isinstance(user, str) and user:\n logger.reason(\n \"WebSocket authenticated via JWT\",\n extra={\"endpoint\": endpoint_name, \"user\": user},\n )\n return True\n except Exception:\n pass\n\n # Fallback: try API key\n try:\n from .core.auth.api_key import hash_api_key\n from .core.database import SessionLocal\n from .models.api_key import APIKey\n\n key_hash = hash_api_key(ws_token)\n db = SessionLocal()\n try:\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if api_key and api_key.active:\n logger.reason(\n \"WebSocket authenticated via API key\",\n extra={\"endpoint\": endpoint_name, \"key_name\": api_key.name},\n )\n return True\n finally:\n db.close()\n except Exception:\n pass\n\n logger.warning(\n \"WebSocket connection rejected: invalid token\",\n extra={\"endpoint\": endpoint_name},\n )\n return False\n# #endregion _authenticate_websocket\n\n# #region websocket_endpoint [C:5] [TYPE Function]\n# @BRIEF Provides a WebSocket endpoint for real-time log streaming of a task with server-side filtering.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @RELATION CALLS -> [_authenticate_websocket]\n# @PRE task_id must be a valid task ID. WebSocket must be authenticated via `token` query param.\n# @POST WebSocket connection is managed and logs are streamed until disconnect.\n# @SIDE_EFFECT Subscribes to TaskManager log queue and broadcasts messages over network.\n# @DATA_CONTRACT [task_id: str, source: str, level: str] -> [JSON log entry objects]\n# @INVARIANT Every accepted WebSocket subscription is unsubscribed exactly once even when streaming fails or the client disconnects.\n# @UX_STATE Connecting -> Streaming -> (Disconnected)\n#\n# @TEST_CONTRACT WebSocketLogStreamApi ->\n# {\n# required_fields: {websocket: WebSocket, task_id: str},\n# optional_fields: {source: str, level: str},\n# invariants: [\n# \"Accepts the WebSocket connection\",\n# \"Applies source and level filters correctly to streamed logs\",\n# \"Cleans up subscriptions on disconnect\"\n# ]\n# }\n# @TEST_FIXTURE valid_ws_connection -> {\"task_id\": \"test_1\", \"source\": \"plugin\"}\n# @TEST_EDGE task_not_found_ws -> closes connection or sends error\n# @TEST_EDGE empty_task_logs -> waits for new logs\n# @TEST_INVARIANT consistent_streaming -> verifies: [valid_ws_connection]\n# @TEST_EDGE ws_auth_missing_token -> connection rejected with 4001\n# @TEST_EDGE ws_auth_invalid_token -> connection rejected with 4001\n@app.websocket(\"/ws/logs/{task_id}\")\nasync def websocket_endpoint(\n websocket: WebSocket, task_id: str, source: str = None, level: str = None\n):\n \"\"\"\n WebSocket endpoint for real-time log streaming with optional server-side filtering.\n Query Parameters:\n source: Filter logs by source component (e.g., \"plugin\", \"superset_api\")\n level: Filter logs by minimum level (DEBUG, INFO, WARNING, ERROR)\n token: JWT or API key for authentication (required, see [SEC:C-3])\n \"\"\"\n seed_trace_id()\n with belief_scope(\"websocket_endpoint\", f\"task_id={task_id}\"):\n\n # ── WebSocket authentication (see [SEC:C-3]) ──\n if not await _authenticate_websocket(websocket, \"ws/logs\"):\n await websocket.close(code=4001, reason=\"Authentication required\")\n return\n\n await websocket.accept()\n source_filter = source.lower() if source else None\n level_filter = level.upper() if level else None\n level_hierarchy = {\"DEBUG\": 0, \"INFO\": 1, \"WARNING\": 2, \"ERROR\": 3}\n min_level = level_hierarchy.get(level_filter, 0) if level_filter else 0\n logger.reason(\n \"Accepted WebSocket log stream connection\",\n extra={\n \"task_id\": task_id,\n \"source_filter\": source_filter,\n \"level_filter\": level_filter,\n \"min_level\": min_level,\n },\n )\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_logs(task_id)\n logger.reason(\n \"Subscribed WebSocket client to task log queue\",\n extra={\"task_id\": task_id},\n )\n def matches_filters(log_entry) -> bool:\n \"\"\"Check if log entry matches the filter criteria.\"\"\"\n log_source = getattr(log_entry, \"source\", None)\n if source_filter and str(log_source or \"\").lower() != source_filter:\n return False\n if level_filter:\n log_level = level_hierarchy.get(str(log_entry.level).upper(), 0)\n if log_level < min_level:\n return False\n return True\n try:\n logger.reason(\n \"Starting task log stream replay and live forwarding\",\n extra={\"task_id\": task_id},\n )\n initial_logs = task_manager.get_task_logs(task_id)\n initial_sent = 0\n for log_entry in initial_logs:\n if matches_filters(log_entry):\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n initial_sent += 1\n logger.reflect(\n \"Initial task log replay completed\",\n extra={\n \"task_id\": task_id,\n \"replayed_logs\": initial_sent,\n \"total_available_logs\": len(initial_logs),\n },\n )\n task = task_manager.get_task(task_id)\n if task and task.status == \"AWAITING_INPUT\" and task.input_request:\n synthetic_log = {\n \"timestamp\": task.logs[-1].timestamp.isoformat()\n if task.logs\n else \"2024-01-01T00:00:00\",\n \"level\": \"INFO\",\n \"message\": \"Task paused for user input (Connection Re-established)\",\n \"context\": {\"input_request\": task.input_request},\n }\n await websocket.send_json(synthetic_log)\n logger.reason(\n \"Replayed awaiting-input prompt to restored WebSocket client\",\n extra={\"task_id\": task_id, \"task_status\": task.status},\n )\n while True:\n log_entry = await queue.get()\n if not matches_filters(log_entry):\n continue\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n logger.reflect(\n \"Forwarded task log entry to WebSocket client\",\n extra={\n \"task_id\": task_id,\n \"level\": log_dict.get(\"level\"),\n },\n )\n if (\n \"Task completed successfully\" in log_entry.message\n or \"Task failed\" in log_entry.message\n ):\n logger.reason(\n \"Observed terminal task log entry; delaying to preserve client visibility\",\n extra={\"task_id\": task_id, \"message\": log_entry.message},\n )\n await asyncio.sleep(2)\n except WebSocketDisconnect:\n logger.reason(\n \"WebSocket client disconnected from task log stream\",\n extra={\"task_id\": task_id},\n )\n except Exception as exc:\n logger.explore(\n \"WebSocket log streaming encountered an unexpected failure\",\n extra={\"task_id\": task_id, \"error\": str(exc)},\n )\n raise\n finally:\n task_manager.unsubscribe_logs(task_id, queue)\n logger.reflect(\n \"Released WebSocket log queue subscription\",\n extra={\"task_id\": task_id},\n )\n# #endregion websocket_endpoint\n# #region dataset_websocket_endpoint [C:4] [TYPE Function]\n# @BRIEF WebSocket endpoint for dataset.updated events — auto-refresh on task completion.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @PRE env_id must reference a known environment.\n# @POST WebSocket streams dataset.updated events until disconnect.\n# @SIDE_EFFECT Subscribes to dataset event queue in task manager lifecycle.\n@app.websocket(\"/ws/datasets/{env_id}\")\nasync def dataset_websocket_endpoint(websocket: WebSocket, env_id: str):\n seed_trace_id()\n with belief_scope(\"dataset_websocket_endpoint\", f\"env_id={env_id}\"):\n\n # ── WebSocket authentication (see [SEC:C-3]) ──\n if not await _authenticate_websocket(websocket, \"ws/datasets\"):\n await websocket.close(code=4001, reason=\"Authentication required\")\n return\n\n await websocket.accept()\n logger.reason(\"Accepted dataset event WebSocket\", extra={\"env_id\": env_id})\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_dataset_events(env_id)\n try:\n while True:\n event = await queue.get()\n await websocket.send_json(event)\n logger.reflect(\"Forwarded dataset.updated event to client\", extra={\"env_id\": env_id})\n except WebSocketDisconnect:\n logger.reason(\"WebSocket client disconnected from dataset events\", extra={\"env_id\": env_id})\n except Exception as exc:\n logger.explore(\"WebSocket dataset streaming failed\", extra={\"env_id\": env_id, \"error\": str(exc)})\n finally:\n task_manager.unsubscribe_dataset_events(env_id, queue)\n logger.reflect(\"Released dataset event subscription\", extra={\"env_id\": env_id})\n# #endregion dataset_websocket_endpoint\n# #region StaticFiles [C:1] [TYPE Mount] [SEMANTICS static, frontend, spa]\n# @BRIEF Mounts the frontend build directory to serve static assets.\nfrontend_path = project_root / \"frontend\" / \"build\"\nif frontend_path.exists():\n app.mount(\n \"/_app\", StaticFiles(directory=str(frontend_path / \"_app\")), name=\"static\"\n )\n # #region serve_spa [TYPE Function] [C:1]\n # @PURPOSE Serves the SPA frontend for any path not matched by API routes.\n # @PRE frontend_path exists.\n # @POST Returns the requested file or index.html.\n @app.get(\"/{file_path:path}\", include_in_schema=False)\n async def serve_spa(file_path: str):\n with belief_scope(\"serve_spa\"):\n # Only serve SPA for non-API paths\n # API routes are registered separately and should be matched by FastAPI first\n if file_path and (\n file_path.startswith(\"api/\")\n or file_path.startswith(\"/api/\")\n or file_path == \"api\"\n ):\n # This should not happen if API routers are properly registered\n # Return 404 instead of serving HTML\n raise HTTPException(\n status_code=404, detail=f\"API endpoint not found: {file_path}\"\n )\n full_path = frontend_path / file_path\n if file_path and full_path.is_file():\n return FileResponse(str(full_path))\n return FileResponse(str(frontend_path / \"index.html\"))\n # #endregion serve_spa\nelse:\n # #region read_root [TYPE Function] [C:1]\n # @PURPOSE A simple root endpoint to confirm that the API is running when frontend is missing.\n # @PRE None.\n # @POST Returns a JSON message indicating API status.\n @app.get(\"/\")\n async def read_root():\n with belief_scope(\"read_root\"):\n return {\n \"message\": \"Superset Tools API is running (Frontend build not found)\"\n }\n # #endregion read_root\n# #endregion StaticFiles\n# #endregion AppModule\n" }, { "contract_id": "FastAPI_App", "contract_type": "Global", "file_path": "backend/src/app.py", - "start_line": 60, - "end_line": 69, + "start_line": 62, + "end_line": 71, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16311,8 +16337,8 @@ "contract_id": "ensure_initial_admin_user", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 70, - "end_line": 117, + "start_line": 72, + "end_line": 125, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16330,14 +16356,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ensure_initial_admin_user [C:3] [TYPE Function]\n# @BRIEF Ensures initial admin user exists when bootstrap env flags are enabled.\n# @RELATION DEPENDS_ON -> [AuthRepository]\ndef ensure_initial_admin_user() -> None:\n raw_flag = os.getenv(\"INITIAL_ADMIN_CREATE\", \"false\").strip().lower()\n if raw_flag not in {\"1\", \"true\", \"yes\", \"on\"}:\n return\n username = os.getenv(\"INITIAL_ADMIN_USERNAME\", \"\").strip()\n password = os.getenv(\"INITIAL_ADMIN_PASSWORD\", \"\").strip()\n if not username or not password:\n logger.warning(\n \"INITIAL_ADMIN_CREATE is enabled but INITIAL_ADMIN_USERNAME/INITIAL_ADMIN_PASSWORD is missing; skipping bootstrap.\"\n )\n return\n db = AuthSessionLocal()\n try:\n admin_role = db.query(Role).filter(Role.name == \"Admin\").first()\n if not admin_role:\n admin_role = Role(name=\"Admin\", description=\"System Administrator\")\n db.add(admin_role)\n db.commit()\n db.refresh(admin_role)\n existing_user = db.query(User).filter(User.username == username).first()\n if existing_user:\n logger.info(\n \"Initial admin bootstrap skipped: user '%s' already exists.\", username\n )\n return\n new_user = User(\n username=username,\n email=None,\n password_hash=get_password_hash(password),\n auth_source=\"LOCAL\",\n is_active=True,\n )\n new_user.roles.append(admin_role)\n db.add(new_user)\n db.commit()\n logger.info(\n \"Initial admin user '%s' created from environment bootstrap.\", username\n )\n except Exception as exc:\n db.rollback()\n logger.error(\"Failed to bootstrap initial admin user: %s\", exc)\n raise\n finally:\n db.close()\n# #endregion ensure_initial_admin_user\n" + "body": "# #region ensure_initial_admin_user [C:3] [TYPE Function]\n# @BRIEF Ensures initial admin user exists when bootstrap env flags are enabled.\n# @RELATION DEPENDS_ON -> [AuthRepository]\ndef ensure_initial_admin_user() -> None:\n raw_flag = os.getenv(\"INITIAL_ADMIN_CREATE\", \"false\").strip().lower()\n if raw_flag not in {\"1\", \"true\", \"yes\", \"on\"}:\n return\n username = os.getenv(\"INITIAL_ADMIN_USERNAME\", \"\").strip()\n password = os.getenv(\"INITIAL_ADMIN_PASSWORD\", \"\").strip()\n if not username or not password:\n logger.warning(\n \"INITIAL_ADMIN_CREATE is enabled but INITIAL_ADMIN_USERNAME/INITIAL_ADMIN_PASSWORD is missing; skipping bootstrap.\"\n )\n return\n # Warn about env-var password — visible via /proc to other processes\n logger.warning(\n \"INITIAL_ADMIN_PASSWORD is set via environment variable. \"\n \"This is visible to other processes on the same host. \"\n \"Consider removing the env var after bootstrap.\"\n )\n db = AuthSessionLocal()\n try:\n admin_role = db.query(Role).filter(Role.name == \"Admin\").first()\n if not admin_role:\n admin_role = Role(name=\"Admin\", description=\"System Administrator\", is_admin=True)\n db.add(admin_role)\n db.commit()\n db.refresh(admin_role)\n existing_user = db.query(User).filter(User.username == username).first()\n if existing_user:\n logger.info(\n \"Initial admin bootstrap skipped: user '%s' already exists.\", username\n )\n return\n new_user = User(\n username=username,\n email=None,\n password_hash=get_password_hash(password),\n auth_source=\"LOCAL\",\n is_active=True,\n )\n new_user.roles.append(admin_role)\n db.add(new_user)\n db.commit()\n logger.info(\n \"Initial admin user '%s' created from environment bootstrap.\", username\n )\n except Exception as exc:\n db.rollback()\n logger.error(\"Failed to bootstrap initial admin user: %s\", exc)\n raise\n finally:\n db.close()\n# #endregion ensure_initial_admin_user\n" }, { "contract_id": "startup_event", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 118, - "end_line": 133, + "start_line": 126, + "end_line": 141, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16363,8 +16389,8 @@ "contract_id": "shutdown_event", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 134, - "end_line": 146, + "start_line": 142, + "end_line": 154, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16390,26 +16416,26 @@ "contract_id": "app_middleware", "contract_type": "Block", "file_path": "backend/src/app.py", - "start_line": 147, - "end_line": 166, + "start_line": 155, + "end_line": 214, "tier": "TIER_1", "complexity": 1, "metadata": { "BRIEF": "Configure application-wide middleware (Session, CORS).", - "RATIONALE": "CORS allow_origins reads from ALLOWED_ORIGINS env var instead of hardcoded \"*\"." + "RATIONALE": "SessionMiddleware uses SESSION_SECRET_KEY independent of JWT SECRET_KEY (see [SEC:H-4])." }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region app_middleware [TYPE Block]\n# @BRIEF Configure application-wide middleware (Session, CORS).\n# @RATIONALE CORS allow_origins reads from ALLOWED_ORIGINS env var instead of hardcoded \"*\".\n# Default \"*\" is safe for dev; production must set ALLOWED_ORIGINS to explicit list.\n# @REJECTED Hardcoded allow_origins=[\"*\"] rejected — open CORS allows any origin to access the API,\n# which is a Class 1 security violation in production.\n\n# Configure Session Middleware (required by Authlib for OAuth2 flow)\nfrom .core.auth.config import auth_config\n\napp.add_middleware(SessionMiddleware, secret_key=auth_config.SECRET_KEY)\n# Configure CORS\napp.add_middleware(\n CORSMiddleware,\n allow_origins=os.getenv(\"ALLOWED_ORIGINS\", \"*\").split(\",\"),\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n# #endregion app_middleware\n" + "body": "# #region app_middleware [TYPE Block]\n# @BRIEF Configure application-wide middleware (Session, CORS).\n# @RATIONALE SessionMiddleware uses SESSION_SECRET_KEY independent of JWT SECRET_KEY (see [SEC:H-4]).\n# CORS allow_origins crashes early if ALLOWED_ORIGINS is unset — no \"*\" fallback (see [SEC:M-1]).\n# @REJECTED Hardcoded allow_origins=[\"*\"] rejected — open CORS allows any origin to access the API,\n# which is a Class 1 security violation in production.\n# @REJECTED SessionMiddleware sharing JWT SECRET_KEY rejected in [SEC:H-4] — key reuse expands blast radius.\n\n# Configure Session Middleware (required by Authlib for OAuth2 flow)\nfrom .core.auth.config import auth_config\n\n_session_secret = os.getenv(\"SESSION_SECRET_KEY\", \"\").strip()\nif not _session_secret:\n _session_secret = auth_config.SECRET_KEY\n logger.warning(\n \"SESSION_SECRET_KEY not set. Falling back to AUTH_SECRET_KEY. \"\n \"Set a separate SESSION_SECRET_KEY in .env for production isolation.\"\n )\napp.add_middleware(SessionMiddleware, secret_key=_session_secret)\n\n# Configure CORS\n_allowed_origins_raw = os.getenv(\"ALLOWED_ORIGINS\", \"\").strip()\nif not _allowed_origins_raw:\n logger.warning(\n \"ALLOWED_ORIGINS not set. CORS will reject all cross-origin requests. \"\n \"Set ALLOWED_ORIGINS to a comma-separated list of allowed origins.\"\n )\n _allowed_origins = []\nelse:\n _allowed_origins = [o.strip() for o in _allowed_origins_raw.split(\",\") if o.strip()]\napp.add_middleware(\n CORSMiddleware,\n allow_origins=_allowed_origins,\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n\n# HSTS — Strict-Transport-Security header (see [SEC:L-2])\n# Only active when FORCE_HTTPS=true (enterprise deployments with proper certs).\n# In dev or behind HTTP-only proxies, HSTS is disabled to avoid lockout.\nclass HSTSMiddleware(BaseHTTPMiddleware):\n \"\"\"Add Strict-Transport-Security header when FORCE_HTTPS=true.\n\n Enterprise note: In production, set HSTS at the nginx/ingress level\n (add_header Strict-Transport-Security ...). This middleware is a\n fallback for environments where nginx is not configured to do so.\n \"\"\"\n def __init__(self, app):\n super().__init__(app)\n self._enabled = os.getenv(\"FORCE_HTTPS\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}\n\n async def dispatch(self, request: Request, call_next):\n response = await call_next(request)\n if self._enabled:\n response.headers[\"Strict-Transport-Security\"] = \"max-age=31536000; includeSubDomains\"\n return response\n\napp.add_middleware(HSTSMiddleware)\n# #endregion app_middleware\n" }, { "contract_id": "network_error_handler", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 167, - "end_line": 179, + "start_line": 215, + "end_line": 227, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -16428,8 +16454,8 @@ "contract_id": "log_requests", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 180, - "end_line": 205, + "start_line": 228, + "end_line": 253, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16455,8 +16481,8 @@ "contract_id": "API_Routes", "contract_type": "Block", "file_path": "backend/src/app.py", - "start_line": 211, - "end_line": 250, + "start_line": 259, + "end_line": 298, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -16546,8 +16572,8 @@ "contract_id": "api.include_routers", "contract_type": "Action", "file_path": "backend/src/app.py", - "start_line": 251, - "end_line": 254, + "start_line": 299, + "end_line": 302, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -16561,12 +16587,45 @@ "tier_source": "AutoCalculated", "body": "# #region api.include_routers [C:1] [TYPE Action] [SEMANTICS routes, registration, api]\n# @BRIEF Registers all API routers with the FastAPI application.\n# @LAYER API\n# #endregion api.include_routers\n" }, + { + "contract_id": "_authenticate_websocket", + "contract_type": "Function", + "file_path": "backend/src/app.py", + "start_line": 303, + "end_line": 363, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Authenticate a WebSocket connection via JWT or API key from query param `token`.", + "POST": "Returns True if token is valid, logs reason; returns False if rejected.", + "PRE": "websocket is a live Starlette WebSocket before accept().", + "SIDE_EFFECT": "Performs DB read to validate API key hash." + }, + "relations": [ + { + "source_id": "_authenticate_websocket", + "relation_type": "DEPENDS_ON", + "target_id": "AuthJwtModule", + "target_ref": "[AuthJwtModule]" + }, + { + "source_id": "_authenticate_websocket", + "relation_type": "DEPENDS_ON", + "target_id": "APIKeyModel", + "target_ref": "[APIKeyModel]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _authenticate_websocket [TYPE Function]\n# @BRIEF Authenticate a WebSocket connection via JWT or API key from query param `token`.\n# @PRE websocket is a live Starlette WebSocket before accept().\n# @POST Returns True if token is valid, logs reason; returns False if rejected.\n# @RELATION DEPENDS_ON -> [AuthJwtModule]\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @SIDE_EFFECT Performs DB read to validate API key hash.\nasync def _authenticate_websocket(websocket: WebSocket, endpoint_name: str) -> bool:\n ws_token = websocket.query_params.get(\"token\", \"\")\n if not ws_token:\n logger.warning(\n \"WebSocket connection rejected: missing token\",\n extra={\"endpoint\": endpoint_name},\n )\n return False\n\n # Try JWT first, fallback to API key\n try:\n from .core.auth.jwt import decode_token\n from .core.auth.api_key import hash_api_key\n from .core.database import SessionLocal\n\n # Attempt JWT validation\n payload = decode_token(ws_token)\n user = payload.get(\"sub\")\n if isinstance(user, str) and user:\n logger.reason(\n \"WebSocket authenticated via JWT\",\n extra={\"endpoint\": endpoint_name, \"user\": user},\n )\n return True\n except Exception:\n pass\n\n # Fallback: try API key\n try:\n from .core.auth.api_key import hash_api_key\n from .core.database import SessionLocal\n from .models.api_key import APIKey\n\n key_hash = hash_api_key(ws_token)\n db = SessionLocal()\n try:\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if api_key and api_key.active:\n logger.reason(\n \"WebSocket authenticated via API key\",\n extra={\"endpoint\": endpoint_name, \"key_name\": api_key.name},\n )\n return True\n finally:\n db.close()\n except Exception:\n pass\n\n logger.warning(\n \"WebSocket connection rejected: invalid token\",\n extra={\"endpoint\": endpoint_name},\n )\n return False\n# #endregion _authenticate_websocket\n" + }, { "contract_id": "websocket_endpoint", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 255, - "end_line": 398, + "start_line": 365, + "end_line": 518, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -16575,7 +16634,7 @@ "DATA_CONTRACT": "[task_id: str, source: str, level: str] -> [JSON log entry objects]", "INVARIANT": "Every accepted WebSocket subscription is unsubscribed exactly once even when streaming fails or the client disconnects.", "POST": "WebSocket connection is managed and logs are streamed until disconnect.", - "PRE": "task_id must be a valid task ID.", + "PRE": "task_id must be a valid task ID. WebSocket must be authenticated via `token` query param.", "SIDE_EFFECT": "Subscribes to TaskManager log queue and broadcasts messages over network.", "TEST_CONTRACT": "WebSocketLogStreamApi ->", "UX_STATE": "Connecting -> Streaming -> (Disconnected)" @@ -16592,19 +16651,25 @@ "relation_type": "DEPENDS_ON", "target_id": "LoggerModule", "target_ref": "[LoggerModule]" + }, + { + "source_id": "websocket_endpoint", + "relation_type": "CALLS", + "target_id": "_authenticate_websocket", + "target_ref": "[_authenticate_websocket]" } ], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region websocket_endpoint [C:5] [TYPE Function]\n# @BRIEF Provides a WebSocket endpoint for real-time log streaming of a task with server-side filtering.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @PRE task_id must be a valid task ID.\n# @POST WebSocket connection is managed and logs are streamed until disconnect.\n# @SIDE_EFFECT Subscribes to TaskManager log queue and broadcasts messages over network.\n# @DATA_CONTRACT [task_id: str, source: str, level: str] -> [JSON log entry objects]\n# @INVARIANT Every accepted WebSocket subscription is unsubscribed exactly once even when streaming fails or the client disconnects.\n# @UX_STATE Connecting -> Streaming -> (Disconnected)\n#\n# @TEST_CONTRACT WebSocketLogStreamApi ->\n# {\n# required_fields: {websocket: WebSocket, task_id: str},\n# optional_fields: {source: str, level: str},\n# invariants: [\n# \"Accepts the WebSocket connection\",\n# \"Applies source and level filters correctly to streamed logs\",\n# \"Cleans up subscriptions on disconnect\"\n# ]\n# }\n# @TEST_FIXTURE valid_ws_connection -> {\"task_id\": \"test_1\", \"source\": \"plugin\"}\n# @TEST_EDGE task_not_found_ws -> closes connection or sends error\n# @TEST_EDGE empty_task_logs -> waits for new logs\n# @TEST_INVARIANT consistent_streaming -> verifies: [valid_ws_connection]\n@app.websocket(\"/ws/logs/{task_id}\")\nasync def websocket_endpoint(\n websocket: WebSocket, task_id: str, source: str = None, level: str = None\n):\n \"\"\"\n WebSocket endpoint for real-time log streaming with optional server-side filtering.\n Query Parameters:\n source: Filter logs by source component (e.g., \"plugin\", \"superset_api\")\n level: Filter logs by minimum level (DEBUG, INFO, WARNING, ERROR)\n \"\"\"\n seed_trace_id()\n with belief_scope(\"websocket_endpoint\", f\"task_id={task_id}\"):\n await websocket.accept()\n source_filter = source.lower() if source else None\n level_filter = level.upper() if level else None\n level_hierarchy = {\"DEBUG\": 0, \"INFO\": 1, \"WARNING\": 2, \"ERROR\": 3}\n min_level = level_hierarchy.get(level_filter, 0) if level_filter else 0\n logger.reason(\n \"Accepted WebSocket log stream connection\",\n extra={\n \"task_id\": task_id,\n \"source_filter\": source_filter,\n \"level_filter\": level_filter,\n \"min_level\": min_level,\n },\n )\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_logs(task_id)\n logger.reason(\n \"Subscribed WebSocket client to task log queue\",\n extra={\"task_id\": task_id},\n )\n def matches_filters(log_entry) -> bool:\n \"\"\"Check if log entry matches the filter criteria.\"\"\"\n log_source = getattr(log_entry, \"source\", None)\n if source_filter and str(log_source or \"\").lower() != source_filter:\n return False\n if level_filter:\n log_level = level_hierarchy.get(str(log_entry.level).upper(), 0)\n if log_level < min_level:\n return False\n return True\n try:\n logger.reason(\n \"Starting task log stream replay and live forwarding\",\n extra={\"task_id\": task_id},\n )\n initial_logs = task_manager.get_task_logs(task_id)\n initial_sent = 0\n for log_entry in initial_logs:\n if matches_filters(log_entry):\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n initial_sent += 1\n logger.reflect(\n \"Initial task log replay completed\",\n extra={\n \"task_id\": task_id,\n \"replayed_logs\": initial_sent,\n \"total_available_logs\": len(initial_logs),\n },\n )\n task = task_manager.get_task(task_id)\n if task and task.status == \"AWAITING_INPUT\" and task.input_request:\n synthetic_log = {\n \"timestamp\": task.logs[-1].timestamp.isoformat()\n if task.logs\n else \"2024-01-01T00:00:00\",\n \"level\": \"INFO\",\n \"message\": \"Task paused for user input (Connection Re-established)\",\n \"context\": {\"input_request\": task.input_request},\n }\n await websocket.send_json(synthetic_log)\n logger.reason(\n \"Replayed awaiting-input prompt to restored WebSocket client\",\n extra={\"task_id\": task_id, \"task_status\": task.status},\n )\n while True:\n log_entry = await queue.get()\n if not matches_filters(log_entry):\n continue\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n logger.reflect(\n \"Forwarded task log entry to WebSocket client\",\n extra={\n \"task_id\": task_id,\n \"level\": log_dict.get(\"level\"),\n },\n )\n if (\n \"Task completed successfully\" in log_entry.message\n or \"Task failed\" in log_entry.message\n ):\n logger.reason(\n \"Observed terminal task log entry; delaying to preserve client visibility\",\n extra={\"task_id\": task_id, \"message\": log_entry.message},\n )\n await asyncio.sleep(2)\n except WebSocketDisconnect:\n logger.reason(\n \"WebSocket client disconnected from task log stream\",\n extra={\"task_id\": task_id},\n )\n except Exception as exc:\n logger.explore(\n \"WebSocket log streaming encountered an unexpected failure\",\n extra={\"task_id\": task_id, \"error\": str(exc)},\n )\n raise\n finally:\n task_manager.unsubscribe_logs(task_id, queue)\n logger.reflect(\n \"Released WebSocket log queue subscription\",\n extra={\"task_id\": task_id},\n )\n# #endregion websocket_endpoint\n" + "body": "# #region websocket_endpoint [C:5] [TYPE Function]\n# @BRIEF Provides a WebSocket endpoint for real-time log streaming of a task with server-side filtering.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @RELATION CALLS -> [_authenticate_websocket]\n# @PRE task_id must be a valid task ID. WebSocket must be authenticated via `token` query param.\n# @POST WebSocket connection is managed and logs are streamed until disconnect.\n# @SIDE_EFFECT Subscribes to TaskManager log queue and broadcasts messages over network.\n# @DATA_CONTRACT [task_id: str, source: str, level: str] -> [JSON log entry objects]\n# @INVARIANT Every accepted WebSocket subscription is unsubscribed exactly once even when streaming fails or the client disconnects.\n# @UX_STATE Connecting -> Streaming -> (Disconnected)\n#\n# @TEST_CONTRACT WebSocketLogStreamApi ->\n# {\n# required_fields: {websocket: WebSocket, task_id: str},\n# optional_fields: {source: str, level: str},\n# invariants: [\n# \"Accepts the WebSocket connection\",\n# \"Applies source and level filters correctly to streamed logs\",\n# \"Cleans up subscriptions on disconnect\"\n# ]\n# }\n# @TEST_FIXTURE valid_ws_connection -> {\"task_id\": \"test_1\", \"source\": \"plugin\"}\n# @TEST_EDGE task_not_found_ws -> closes connection or sends error\n# @TEST_EDGE empty_task_logs -> waits for new logs\n# @TEST_INVARIANT consistent_streaming -> verifies: [valid_ws_connection]\n# @TEST_EDGE ws_auth_missing_token -> connection rejected with 4001\n# @TEST_EDGE ws_auth_invalid_token -> connection rejected with 4001\n@app.websocket(\"/ws/logs/{task_id}\")\nasync def websocket_endpoint(\n websocket: WebSocket, task_id: str, source: str = None, level: str = None\n):\n \"\"\"\n WebSocket endpoint for real-time log streaming with optional server-side filtering.\n Query Parameters:\n source: Filter logs by source component (e.g., \"plugin\", \"superset_api\")\n level: Filter logs by minimum level (DEBUG, INFO, WARNING, ERROR)\n token: JWT or API key for authentication (required, see [SEC:C-3])\n \"\"\"\n seed_trace_id()\n with belief_scope(\"websocket_endpoint\", f\"task_id={task_id}\"):\n\n # ── WebSocket authentication (see [SEC:C-3]) ──\n if not await _authenticate_websocket(websocket, \"ws/logs\"):\n await websocket.close(code=4001, reason=\"Authentication required\")\n return\n\n await websocket.accept()\n source_filter = source.lower() if source else None\n level_filter = level.upper() if level else None\n level_hierarchy = {\"DEBUG\": 0, \"INFO\": 1, \"WARNING\": 2, \"ERROR\": 3}\n min_level = level_hierarchy.get(level_filter, 0) if level_filter else 0\n logger.reason(\n \"Accepted WebSocket log stream connection\",\n extra={\n \"task_id\": task_id,\n \"source_filter\": source_filter,\n \"level_filter\": level_filter,\n \"min_level\": min_level,\n },\n )\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_logs(task_id)\n logger.reason(\n \"Subscribed WebSocket client to task log queue\",\n extra={\"task_id\": task_id},\n )\n def matches_filters(log_entry) -> bool:\n \"\"\"Check if log entry matches the filter criteria.\"\"\"\n log_source = getattr(log_entry, \"source\", None)\n if source_filter and str(log_source or \"\").lower() != source_filter:\n return False\n if level_filter:\n log_level = level_hierarchy.get(str(log_entry.level).upper(), 0)\n if log_level < min_level:\n return False\n return True\n try:\n logger.reason(\n \"Starting task log stream replay and live forwarding\",\n extra={\"task_id\": task_id},\n )\n initial_logs = task_manager.get_task_logs(task_id)\n initial_sent = 0\n for log_entry in initial_logs:\n if matches_filters(log_entry):\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n initial_sent += 1\n logger.reflect(\n \"Initial task log replay completed\",\n extra={\n \"task_id\": task_id,\n \"replayed_logs\": initial_sent,\n \"total_available_logs\": len(initial_logs),\n },\n )\n task = task_manager.get_task(task_id)\n if task and task.status == \"AWAITING_INPUT\" and task.input_request:\n synthetic_log = {\n \"timestamp\": task.logs[-1].timestamp.isoformat()\n if task.logs\n else \"2024-01-01T00:00:00\",\n \"level\": \"INFO\",\n \"message\": \"Task paused for user input (Connection Re-established)\",\n \"context\": {\"input_request\": task.input_request},\n }\n await websocket.send_json(synthetic_log)\n logger.reason(\n \"Replayed awaiting-input prompt to restored WebSocket client\",\n extra={\"task_id\": task_id, \"task_status\": task.status},\n )\n while True:\n log_entry = await queue.get()\n if not matches_filters(log_entry):\n continue\n log_dict = log_entry.dict()\n log_dict[\"timestamp\"] = log_dict[\"timestamp\"].isoformat()\n await websocket.send_json(log_dict)\n logger.reflect(\n \"Forwarded task log entry to WebSocket client\",\n extra={\n \"task_id\": task_id,\n \"level\": log_dict.get(\"level\"),\n },\n )\n if (\n \"Task completed successfully\" in log_entry.message\n or \"Task failed\" in log_entry.message\n ):\n logger.reason(\n \"Observed terminal task log entry; delaying to preserve client visibility\",\n extra={\"task_id\": task_id, \"message\": log_entry.message},\n )\n await asyncio.sleep(2)\n except WebSocketDisconnect:\n logger.reason(\n \"WebSocket client disconnected from task log stream\",\n extra={\"task_id\": task_id},\n )\n except Exception as exc:\n logger.explore(\n \"WebSocket log streaming encountered an unexpected failure\",\n extra={\"task_id\": task_id, \"error\": str(exc)},\n )\n raise\n finally:\n task_manager.unsubscribe_logs(task_id, queue)\n logger.reflect(\n \"Released WebSocket log queue subscription\",\n extra={\"task_id\": task_id},\n )\n# #endregion websocket_endpoint\n" }, { "contract_id": "dataset_websocket_endpoint", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 399, - "end_line": 425, + "start_line": 519, + "end_line": 551, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -16625,14 +16690,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region dataset_websocket_endpoint [C:4] [TYPE Function]\n# @BRIEF WebSocket endpoint for dataset.updated events — auto-refresh on task completion.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @PRE env_id must reference a known environment.\n# @POST WebSocket streams dataset.updated events until disconnect.\n# @SIDE_EFFECT Subscribes to dataset event queue in task manager lifecycle.\n@app.websocket(\"/ws/datasets/{env_id}\")\nasync def dataset_websocket_endpoint(websocket: WebSocket, env_id: str):\n seed_trace_id()\n with belief_scope(\"dataset_websocket_endpoint\", f\"env_id={env_id}\"):\n await websocket.accept()\n logger.reason(\"Accepted dataset event WebSocket\", extra={\"env_id\": env_id})\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_dataset_events(env_id)\n try:\n while True:\n event = await queue.get()\n await websocket.send_json(event)\n logger.reflect(\"Forwarded dataset.updated event to client\", extra={\"env_id\": env_id})\n except WebSocketDisconnect:\n logger.reason(\"WebSocket client disconnected from dataset events\", extra={\"env_id\": env_id})\n except Exception as exc:\n logger.explore(\"WebSocket dataset streaming failed\", extra={\"env_id\": env_id, \"error\": str(exc)})\n finally:\n task_manager.unsubscribe_dataset_events(env_id, queue)\n logger.reflect(\"Released dataset event subscription\", extra={\"env_id\": env_id})\n# #endregion dataset_websocket_endpoint\n" + "body": "# #region dataset_websocket_endpoint [C:4] [TYPE Function]\n# @BRIEF WebSocket endpoint for dataset.updated events — auto-refresh on task completion.\n# @RELATION CALLS -> [TaskManagerPackage]\n# @PRE env_id must reference a known environment.\n# @POST WebSocket streams dataset.updated events until disconnect.\n# @SIDE_EFFECT Subscribes to dataset event queue in task manager lifecycle.\n@app.websocket(\"/ws/datasets/{env_id}\")\nasync def dataset_websocket_endpoint(websocket: WebSocket, env_id: str):\n seed_trace_id()\n with belief_scope(\"dataset_websocket_endpoint\", f\"env_id={env_id}\"):\n\n # ── WebSocket authentication (see [SEC:C-3]) ──\n if not await _authenticate_websocket(websocket, \"ws/datasets\"):\n await websocket.close(code=4001, reason=\"Authentication required\")\n return\n\n await websocket.accept()\n logger.reason(\"Accepted dataset event WebSocket\", extra={\"env_id\": env_id})\n task_manager = get_task_manager()\n queue = await task_manager.subscribe_dataset_events(env_id)\n try:\n while True:\n event = await queue.get()\n await websocket.send_json(event)\n logger.reflect(\"Forwarded dataset.updated event to client\", extra={\"env_id\": env_id})\n except WebSocketDisconnect:\n logger.reason(\"WebSocket client disconnected from dataset events\", extra={\"env_id\": env_id})\n except Exception as exc:\n logger.explore(\"WebSocket dataset streaming failed\", extra={\"env_id\": env_id, \"error\": str(exc)})\n finally:\n task_manager.unsubscribe_dataset_events(env_id, queue)\n logger.reflect(\"Released dataset event subscription\", extra={\"env_id\": env_id})\n# #endregion dataset_websocket_endpoint\n" }, { "contract_id": "StaticFiles", "contract_type": "Mount", "file_path": "backend/src/app.py", - "start_line": 426, - "end_line": 469, + "start_line": 552, + "end_line": 595, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -16649,8 +16714,8 @@ "contract_id": "serve_spa", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 433, - "end_line": 456, + "start_line": 559, + "end_line": 582, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -16669,8 +16734,8 @@ "contract_id": "read_root", "contract_type": "Function", "file_path": "backend/src/app.py", - "start_line": 458, - "end_line": 468, + "start_line": 584, + "end_line": 594, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -18882,7 +18947,7 @@ "COMPLEXITY": 2, "INVARIANT": "All sensitive configuration must be loaded from environment; no hardcoded secrets.", "LAYER": "Core", - "RATIONALE": "SECRET_KEY and AUTH_DATABASE_URL now crash-early if env vars are missing." + "RATIONALE": "SECRET_KEY and AUTH_DATABASE_URL crash-early if env vars are missing." }, "relations": [ { @@ -18895,13 +18960,13 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthConfigModule [C:2] [TYPE Module] [SEMANTICS pydantic, auth, auth-config, config]\n#\n# @BRIEF Centralized configuration for authentication and authorization.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n#\n# @INVARIANT All sensitive configuration must be loaded from environment; no hardcoded secrets.\n# @RATIONALE SECRET_KEY and AUTH_DATABASE_URL now crash-early if env vars are missing.\n# Dev fallback for AUTH_DATABASE_URL only when DEV_MODE=true.\n# @REJECTED Default secrets in source code rejected — Class 1 security violation:\n# \"super-secret-key-change-in-production\" and \"postgres:postgres\" exposed\n# secrets in version control.\n\nimport os\n\nfrom pydantic import Field, field_validator\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\n\n\n# #region AuthConfig [TYPE Class]\n# @BRIEF Holds authentication-related settings.\n# @PRE Environment variables may be provided via .env file.\n# @POST Returns a configuration object with validated settings.\n# @RELATION INHERITS -> [EXT:Library:pydantic_settings.BaseSettings]\nclass AuthConfig(BaseSettings):\n model_config = SettingsConfigDict(env_file=\".env\", extra=\"ignore\")\n\n # JWT Settings\n SECRET_KEY: str = Field(default=\"\", validation_alias=\"AUTH_SECRET_KEY\")\n ALGORITHM: str = \"HS256\"\n ACCESS_TOKEN_EXPIRE_MINUTES: int = 480\n REFRESH_TOKEN_EXPIRE_DAYS: int = 7\n\n # Database Settings\n AUTH_DATABASE_URL: str = Field(default=\"\", validation_alias=\"AUTH_DATABASE_URL\")\n\n # ADFS Settings\n ADFS_CLIENT_ID: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_ID\")\n ADFS_CLIENT_SECRET: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_SECRET\")\n ADFS_METADATA_URL: str = Field(default=\"\", validation_alias=\"ADFS_METADATA_URL\")\n\n @field_validator(\"SECRET_KEY\", mode=\"after\")\n @classmethod\n def validate_secret_key(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_SECRET_KEY environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n @field_validator(\"AUTH_DATABASE_URL\", mode=\"after\")\n @classmethod\n def validate_auth_db_url(cls, v: str) -> str:\n if v:\n return v\n is_dev = os.getenv(\"DEV_MODE\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}\n if is_dev:\n return \"postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools\"\n raise ValueError(\n \"AUTH_DATABASE_URL environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n# #endregion AuthConfig\n\n# #region auth_config [TYPE Variable]\n# @BRIEF Singleton instance of AuthConfig.\n# @RELATION DEPENDS_ON -> AuthConfig\nauth_config = AuthConfig()\n# #endregion auth_config\n\n# #endregion AuthConfigModule\n" + "body": "# #region AuthConfigModule [C:2] [TYPE Module] [SEMANTICS pydantic, auth, auth-config, config]\n#\n# @BRIEF Centralized configuration for authentication and authorization.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n#\n# @INVARIANT All sensitive configuration must be loaded from environment; no hardcoded secrets.\n# @RATIONALE SECRET_KEY and AUTH_DATABASE_URL crash-early if env vars are missing.\n# Dev fallback for AUTH_DATABASE_URL removed — Class 1 violation restored.\n# @REJECTED Default secrets in source code rejected — Class 1 security violation:\n# \"super-secret-key-change-in-production\" and \"postgres:postgres\" exposed\n# secrets in version control. DEV_MODE fallback for AUTH_DATABASE_URL removed\n# in [SEC:C-4] — hardcoded postgres:postgres is a clear-text credential leak.\n\nfrom pydantic import Field, field_validator\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\n\n\n# #region AuthConfig [TYPE Class]\n# @BRIEF Holds authentication-related settings.\n# @PRE Environment variables may be provided via .env file.\n# @POST Returns a configuration object with validated settings.\n# @RELATION INHERITS -> [EXT:Library:pydantic_settings.BaseSettings]\nclass AuthConfig(BaseSettings):\n model_config = SettingsConfigDict(env_file=\".env\", extra=\"ignore\")\n\n # JWT Settings\n SECRET_KEY: str = Field(default=\"\", validation_alias=\"AUTH_SECRET_KEY\")\n ALGORITHM: str = \"HS256\"\n ACCESS_TOKEN_EXPIRE_MINUTES: int = 480\n REFRESH_TOKEN_EXPIRE_DAYS: int = 7\n JWT_AUDIENCE: str = Field(default=\"ss-tools-api\", validation_alias=\"JWT_AUDIENCE\")\n JWT_ISSUER: str = Field(default=\"ss-tools\", validation_alias=\"JWT_ISSUER\")\n\n # Database Settings\n AUTH_DATABASE_URL: str = Field(default=\"\", validation_alias=\"AUTH_DATABASE_URL\")\n\n # ADFS Settings\n ADFS_CLIENT_ID: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_ID\")\n ADFS_CLIENT_SECRET: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_SECRET\")\n ADFS_METADATA_URL: str = Field(default=\"\", validation_alias=\"ADFS_METADATA_URL\")\n\n @field_validator(\"SECRET_KEY\", mode=\"after\")\n @classmethod\n def validate_secret_key(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_SECRET_KEY environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n @field_validator(\"AUTH_DATABASE_URL\", mode=\"after\")\n @classmethod\n def validate_auth_db_url(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_DATABASE_URL environment variable is required. \"\n \"Set it in .env or export it before starting the server. \"\n \"For local development, create a .env file with AUTH_DATABASE_URL=postgresql+psycopg2://... \"\n \"or use docker-compose.yml with pre-configured PostgreSQL.\"\n )\n\n# #endregion AuthConfig\n\n# #region auth_config [TYPE Variable]\n# @BRIEF Singleton instance of AuthConfig.\n# @RELATION DEPENDS_ON -> AuthConfig\nauth_config = AuthConfig()\n# #endregion auth_config\n\n# #endregion AuthConfigModule\n" }, { "contract_id": "AuthConfig", "contract_type": "Class", "file_path": "backend/src/core/auth/config.py", - "start_line": 20, + "start_line": 19, "end_line": 65, "tier": "TIER_1", "complexity": 1, @@ -18921,7 +18986,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthConfig [TYPE Class]\n# @BRIEF Holds authentication-related settings.\n# @PRE Environment variables may be provided via .env file.\n# @POST Returns a configuration object with validated settings.\n# @RELATION INHERITS -> [EXT:Library:pydantic_settings.BaseSettings]\nclass AuthConfig(BaseSettings):\n model_config = SettingsConfigDict(env_file=\".env\", extra=\"ignore\")\n\n # JWT Settings\n SECRET_KEY: str = Field(default=\"\", validation_alias=\"AUTH_SECRET_KEY\")\n ALGORITHM: str = \"HS256\"\n ACCESS_TOKEN_EXPIRE_MINUTES: int = 480\n REFRESH_TOKEN_EXPIRE_DAYS: int = 7\n\n # Database Settings\n AUTH_DATABASE_URL: str = Field(default=\"\", validation_alias=\"AUTH_DATABASE_URL\")\n\n # ADFS Settings\n ADFS_CLIENT_ID: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_ID\")\n ADFS_CLIENT_SECRET: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_SECRET\")\n ADFS_METADATA_URL: str = Field(default=\"\", validation_alias=\"ADFS_METADATA_URL\")\n\n @field_validator(\"SECRET_KEY\", mode=\"after\")\n @classmethod\n def validate_secret_key(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_SECRET_KEY environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n @field_validator(\"AUTH_DATABASE_URL\", mode=\"after\")\n @classmethod\n def validate_auth_db_url(cls, v: str) -> str:\n if v:\n return v\n is_dev = os.getenv(\"DEV_MODE\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}\n if is_dev:\n return \"postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools\"\n raise ValueError(\n \"AUTH_DATABASE_URL environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n# #endregion AuthConfig\n" + "body": "# #region AuthConfig [TYPE Class]\n# @BRIEF Holds authentication-related settings.\n# @PRE Environment variables may be provided via .env file.\n# @POST Returns a configuration object with validated settings.\n# @RELATION INHERITS -> [EXT:Library:pydantic_settings.BaseSettings]\nclass AuthConfig(BaseSettings):\n model_config = SettingsConfigDict(env_file=\".env\", extra=\"ignore\")\n\n # JWT Settings\n SECRET_KEY: str = Field(default=\"\", validation_alias=\"AUTH_SECRET_KEY\")\n ALGORITHM: str = \"HS256\"\n ACCESS_TOKEN_EXPIRE_MINUTES: int = 480\n REFRESH_TOKEN_EXPIRE_DAYS: int = 7\n JWT_AUDIENCE: str = Field(default=\"ss-tools-api\", validation_alias=\"JWT_AUDIENCE\")\n JWT_ISSUER: str = Field(default=\"ss-tools\", validation_alias=\"JWT_ISSUER\")\n\n # Database Settings\n AUTH_DATABASE_URL: str = Field(default=\"\", validation_alias=\"AUTH_DATABASE_URL\")\n\n # ADFS Settings\n ADFS_CLIENT_ID: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_ID\")\n ADFS_CLIENT_SECRET: str = Field(default=\"\", validation_alias=\"ADFS_CLIENT_SECRET\")\n ADFS_METADATA_URL: str = Field(default=\"\", validation_alias=\"ADFS_METADATA_URL\")\n\n @field_validator(\"SECRET_KEY\", mode=\"after\")\n @classmethod\n def validate_secret_key(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_SECRET_KEY environment variable is required. \"\n \"Set it in .env or export it before starting the server.\"\n )\n\n @field_validator(\"AUTH_DATABASE_URL\", mode=\"after\")\n @classmethod\n def validate_auth_db_url(cls, v: str) -> str:\n if v:\n return v\n raise ValueError(\n \"AUTH_DATABASE_URL environment variable is required. \"\n \"Set it in .env or export it before starting the server. \"\n \"For local development, create a .env file with AUTH_DATABASE_URL=postgresql+psycopg2://... \"\n \"or use docker-compose.yml with pre-configured PostgreSQL.\"\n )\n\n# #endregion AuthConfig\n" }, { "contract_id": "auth_config", @@ -18952,18 +19017,14 @@ "contract_type": "Module", "file_path": "backend/src/core/auth/jwt.py", "start_line": 1, - "end_line": 63, + "end_line": 173, "tier": "TIER_3", "complexity": 5, "metadata": { - "BRIEF": "JWT token generation and validation logic.", + "BRIEF": "JWT token generation and validation logic with server-side revocation.", "COMPLEXITY": 5, - "DATA_CONTRACT": "TokenPayload -> JWT string", - "INVARIANT": "Tokens must include expiration time and user identifier.", - "LAYER": "Core", - "POST": "Token encode/decode functions exported", - "PRE": "JWT secret configured in environment", - "SIDE_EFFECT": "None" + "INVARIANT": "Tokens must include aud, iss, iat, jti, exp, and sub claims.", + "LAYER": "Core" }, "relations": [ { @@ -18971,24 +19032,30 @@ "relation_type": "DEPENDS_ON", "target_id": "auth_config", "target_ref": "[auth_config]" + }, + { + "source_id": "AuthJwtModule", + "relation_type": "DEPENDS_ON", + "target_id": "TokenBlacklist", + "target_ref": "[TokenBlacklist]" } ], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthJwtModule [C:5] [TYPE Module] [SEMANTICS auth, validate, jwt, token]\n#\n# @BRIEF JWT token generation and validation logic.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [auth_config]\n#\n# @INVARIANT Tokens must include expiration time and user identifier.\n# @PRE JWT secret configured in environment\n# @POST Token encode/decode functions exported\n# @SIDE_EFFECT None\n# @DATA_CONTRACT TokenPayload -> JWT string\n\nfrom datetime import datetime, timedelta\n\nfrom jose import jwt\n\nfrom ..logger import belief_scope\nfrom .config import auth_config\n\n\n# #region create_access_token [TYPE Function]\n# @BRIEF Generates a new JWT access token.\n# @PRE data dict contains 'sub' (user_id) and optional 'scopes' (roles).\n# @POST Returns a signed JWT string.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n with belief_scope(\"create_access_token\"):\n to_encode = data.copy()\n if expires_delta:\n expire = datetime.utcnow() + expires_delta\n else:\n expire = datetime.utcnow() + timedelta(\n minutes=auth_config.ACCESS_TOKEN_EXPIRE_MINUTES\n )\n\n to_encode.update({\"exp\": expire})\n encoded_jwt = jwt.encode(\n to_encode, auth_config.SECRET_KEY, algorithm=auth_config.ALGORITHM\n )\n return encoded_jwt\n\n\n# #endregion create_access_token\n\n\n# #region decode_token [TYPE Function]\n# @BRIEF Decodes and validates a JWT token.\n# @PRE token is a signed JWT string.\n# @POST Returns the decoded payload if valid.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef decode_token(token: str) -> dict:\n with belief_scope(\"decode_token\"):\n payload = jwt.decode(\n token, auth_config.SECRET_KEY, algorithms=[auth_config.ALGORITHM]\n )\n return payload\n\n\n# #endregion decode_token\n\n# #endregion AuthJwtModule\n" + "body": "# #region AuthJwtModule [C:5] [TYPE Module] [SEMANTICS auth, validate, jwt, token]\n#\n# @BRIEF JWT token generation and validation logic with server-side revocation.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [auth_config]\n# @RELATION DEPENDS_ON -> [TokenBlacklist]\n#\n# @INVARIANT Tokens must include aud, iss, iat, jti, exp, and sub claims.\n# Revoked tokens are rejected even if not expired.\n# @PRE JWT secret configured in environment\n# @POST Token encode/decode/revoke functions exported\n# @SIDE_EFFECT None\n# @DATA_CONTRACT TokenPayload -> JWT string\n\nimport hashlib\nimport uuid\nfrom datetime import datetime, timedelta, timezone\n\nfrom jose import jwt\nfrom jose.exceptions import JWTError\nfrom sqlalchemy.orm import Session\n\nfrom ...models.auth import TokenBlacklist\nfrom ..logger import belief_scope\nfrom .config import auth_config\n\n\n# #region create_access_token [TYPE Function]\n# @BRIEF Generates a new JWT access token with aud, iss, iat, jti, exp claims.\n# @PRE data dict contains 'sub' (user_id) and optional 'scopes' (roles).\n# @POST Returns a signed JWT string with unique jti for revocation.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n with belief_scope(\"create_access_token\"):\n to_encode = data.copy()\n now = datetime.now(timezone.utc)\n if expires_delta:\n expire = now + expires_delta\n else:\n expire = now + timedelta(\n minutes=auth_config.ACCESS_TOKEN_EXPIRE_MINUTES\n )\n\n to_encode.update({\n \"exp\": expire,\n \"iat\": now,\n \"jti\": str(uuid.uuid4()),\n \"aud\": auth_config.JWT_AUDIENCE,\n \"iss\": auth_config.JWT_ISSUER,\n })\n encoded_jwt = jwt.encode(\n to_encode, auth_config.SECRET_KEY, algorithm=auth_config.ALGORITHM\n )\n return encoded_jwt\n\n\n# #endregion create_access_token\n\n\n# #region decode_token [TYPE Function]\n# @BRIEF Decodes and validates a JWT token — verifies aud, iss, exp, and blacklist.\n# @PRE token is a signed JWT string.\n# @POST Returns the decoded payload if valid. Raises JWTError if invalid.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef decode_token(token: str) -> dict:\n with belief_scope(\"decode_token\"):\n payload = jwt.decode(\n token,\n auth_config.SECRET_KEY,\n algorithms=[auth_config.ALGORITHM],\n audience=auth_config.JWT_AUDIENCE,\n issuer=auth_config.JWT_ISSUER,\n options={\n \"verify_aud\": True,\n \"verify_exp\": True,\n \"verify_iat\": True,\n \"require\": [\"exp\", \"sub\", \"aud\", \"iss\", \"iat\", \"jti\"],\n },\n )\n return payload\n\n\n# #endregion decode_token\n\n\n# #region _hash_token [TYPE Function]\n# @BRIEF SHA-256 hash of a token string for blacklist lookup.\n# @PRE token is a non-empty JWT string.\n# @POST Returns 64-character hex digest.\ndef _hash_token(token: str) -> str:\n return hashlib.sha256(token.encode()).hexdigest()\n\n\n# #endregion _hash_token\n\n\n# #region _prune_blacklist [TYPE Function]\n# @BRIEF Delete expired entries from the token blacklist.\n# @PRE db is a valid SQLAlchemy session.\n# @POST Expired blacklist rows are removed.\ndef _prune_blacklist(db: Session) -> None:\n now = datetime.now(timezone.utc)\n db.query(TokenBlacklist).filter(TokenBlacklist.expires_at < now).delete()\n db.commit()\n\n\n# #endregion _prune_blacklist\n\n\n# #region blacklist_token [TYPE Function]\n# @BRIEF Revoke a JWT token by adding its hash to the blacklist.\n# @PRE token was issued by this service and hasn't expired.\n# @POST Token is blacklisted and subsequent decode_token calls will reject it.\n# @SIDE_EFFECT Writes to token_blacklist table; prunes expired entries.\n# @RELATION DEPENDS_ON -> [TokenBlacklist]\ndef blacklist_token(token: str, db: Session) -> None:\n with belief_scope(\"blacklist_token\"):\n _prune_blacklist(db)\n try:\n payload = decode_token(token)\n except Exception:\n return # Already invalid — no need to blacklist\n\n jti = payload.get(\"jti\")\n exp_raw = payload.get(\"exp\")\n if not jti or not exp_raw:\n return\n\n if isinstance(exp_raw, datetime):\n expires_at = exp_raw\n else:\n expires_at = datetime.fromtimestamp(exp_raw, tz=timezone.utc)\n\n existing = db.query(TokenBlacklist).filter(TokenBlacklist.jti == jti).first()\n if existing:\n return\n\n entry = TokenBlacklist(\n jti=jti,\n token_hash=_hash_token(token),\n expires_at=expires_at,\n )\n db.add(entry)\n db.commit()\n\n\n# #endregion blacklist_token\n\n\n# #region is_token_blacklisted [TYPE Function]\n# @BRIEF Check if a JWT token has been revoked.\n# @PRE db is a valid SQLAlchemy session.\n# @POST Returns True if token is blacklisted, False otherwise.\n# @RELATION DEPENDS_ON -> [TokenBlacklist]\ndef is_token_blacklisted(token: str, db: Session) -> bool:\n with belief_scope(\"is_token_blacklisted\"):\n try:\n payload = decode_token(token)\n except Exception:\n return True # Invalid tokens are treated as blacklisted\n\n jti = payload.get(\"jti\")\n if not jti:\n return False\n\n return db.query(TokenBlacklist).filter(TokenBlacklist.jti == jti).first() is not None\n\n\n# #endregion is_token_blacklisted\n\n# #endregion AuthJwtModule\n" }, { "contract_id": "create_access_token", "contract_type": "Function", "file_path": "backend/src/core/auth/jwt.py", - "start_line": 21, - "end_line": 44, + "start_line": 28, + "end_line": 58, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "Generates a new JWT access token.", - "POST": "Returns a signed JWT string.", + "BRIEF": "Generates a new JWT access token with aud, iss, iat, jti, exp claims.", + "POST": "Returns a signed JWT string with unique jti for revocation.", "PRE": "data dict contains 'sub' (user_id) and optional 'scopes' (roles)." }, "relations": [ @@ -19002,19 +19069,19 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region create_access_token [TYPE Function]\n# @BRIEF Generates a new JWT access token.\n# @PRE data dict contains 'sub' (user_id) and optional 'scopes' (roles).\n# @POST Returns a signed JWT string.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n with belief_scope(\"create_access_token\"):\n to_encode = data.copy()\n if expires_delta:\n expire = datetime.utcnow() + expires_delta\n else:\n expire = datetime.utcnow() + timedelta(\n minutes=auth_config.ACCESS_TOKEN_EXPIRE_MINUTES\n )\n\n to_encode.update({\"exp\": expire})\n encoded_jwt = jwt.encode(\n to_encode, auth_config.SECRET_KEY, algorithm=auth_config.ALGORITHM\n )\n return encoded_jwt\n\n\n# #endregion create_access_token\n" + "body": "# #region create_access_token [TYPE Function]\n# @BRIEF Generates a new JWT access token with aud, iss, iat, jti, exp claims.\n# @PRE data dict contains 'sub' (user_id) and optional 'scopes' (roles).\n# @POST Returns a signed JWT string with unique jti for revocation.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef create_access_token(data: dict, expires_delta: timedelta | None = None) -> str:\n with belief_scope(\"create_access_token\"):\n to_encode = data.copy()\n now = datetime.now(timezone.utc)\n if expires_delta:\n expire = now + expires_delta\n else:\n expire = now + timedelta(\n minutes=auth_config.ACCESS_TOKEN_EXPIRE_MINUTES\n )\n\n to_encode.update({\n \"exp\": expire,\n \"iat\": now,\n \"jti\": str(uuid.uuid4()),\n \"aud\": auth_config.JWT_AUDIENCE,\n \"iss\": auth_config.JWT_ISSUER,\n })\n encoded_jwt = jwt.encode(\n to_encode, auth_config.SECRET_KEY, algorithm=auth_config.ALGORITHM\n )\n return encoded_jwt\n\n\n# #endregion create_access_token\n" }, { "contract_id": "decode_token", "contract_type": "Function", "file_path": "backend/src/core/auth/jwt.py", - "start_line": 47, - "end_line": 61, + "start_line": 61, + "end_line": 85, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "Decodes and validates a JWT token.", - "POST": "Returns the decoded payload if valid.", + "BRIEF": "Decodes and validates a JWT token — verifies aud, iss, exp, and blacklist.", + "POST": "Returns the decoded payload if valid. Raises JWTError if invalid.", "PRE": "token is a signed JWT string." }, "relations": [ @@ -19028,25 +19095,112 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region decode_token [TYPE Function]\n# @BRIEF Decodes and validates a JWT token.\n# @PRE token is a signed JWT string.\n# @POST Returns the decoded payload if valid.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef decode_token(token: str) -> dict:\n with belief_scope(\"decode_token\"):\n payload = jwt.decode(\n token, auth_config.SECRET_KEY, algorithms=[auth_config.ALGORITHM]\n )\n return payload\n\n\n# #endregion decode_token\n" + "body": "# #region decode_token [TYPE Function]\n# @BRIEF Decodes and validates a JWT token — verifies aud, iss, exp, and blacklist.\n# @PRE token is a signed JWT string.\n# @POST Returns the decoded payload if valid. Raises JWTError if invalid.\n# @RELATION DEPENDS_ON -> [auth_config]\n#\ndef decode_token(token: str) -> dict:\n with belief_scope(\"decode_token\"):\n payload = jwt.decode(\n token,\n auth_config.SECRET_KEY,\n algorithms=[auth_config.ALGORITHM],\n audience=auth_config.JWT_AUDIENCE,\n issuer=auth_config.JWT_ISSUER,\n options={\n \"verify_aud\": True,\n \"verify_exp\": True,\n \"verify_iat\": True,\n \"require\": [\"exp\", \"sub\", \"aud\", \"iss\", \"iat\", \"jti\"],\n },\n )\n return payload\n\n\n# #endregion decode_token\n" + }, + { + "contract_id": "_hash_token", + "contract_type": "Function", + "file_path": "backend/src/core/auth/jwt.py", + "start_line": 88, + "end_line": 96, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "SHA-256 hash of a token string for blacklist lookup.", + "POST": "Returns 64-character hex digest.", + "PRE": "token is a non-empty JWT string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _hash_token [TYPE Function]\n# @BRIEF SHA-256 hash of a token string for blacklist lookup.\n# @PRE token is a non-empty JWT string.\n# @POST Returns 64-character hex digest.\ndef _hash_token(token: str) -> str:\n return hashlib.sha256(token.encode()).hexdigest()\n\n\n# #endregion _hash_token\n" + }, + { + "contract_id": "_prune_blacklist", + "contract_type": "Function", + "file_path": "backend/src/core/auth/jwt.py", + "start_line": 99, + "end_line": 109, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Delete expired entries from the token blacklist.", + "POST": "Expired blacklist rows are removed.", + "PRE": "db is a valid SQLAlchemy session." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _prune_blacklist [TYPE Function]\n# @BRIEF Delete expired entries from the token blacklist.\n# @PRE db is a valid SQLAlchemy session.\n# @POST Expired blacklist rows are removed.\ndef _prune_blacklist(db: Session) -> None:\n now = datetime.now(timezone.utc)\n db.query(TokenBlacklist).filter(TokenBlacklist.expires_at < now).delete()\n db.commit()\n\n\n# #endregion _prune_blacklist\n" + }, + { + "contract_id": "blacklist_token", + "contract_type": "Function", + "file_path": "backend/src/core/auth/jwt.py", + "start_line": 112, + "end_line": 149, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Revoke a JWT token by adding its hash to the blacklist.", + "POST": "Token is blacklisted and subsequent decode_token calls will reject it.", + "PRE": "token was issued by this service and hasn't expired.", + "SIDE_EFFECT": "Writes to token_blacklist table; prunes expired entries." + }, + "relations": [ + { + "source_id": "blacklist_token", + "relation_type": "DEPENDS_ON", + "target_id": "TokenBlacklist", + "target_ref": "[TokenBlacklist]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region blacklist_token [TYPE Function]\n# @BRIEF Revoke a JWT token by adding its hash to the blacklist.\n# @PRE token was issued by this service and hasn't expired.\n# @POST Token is blacklisted and subsequent decode_token calls will reject it.\n# @SIDE_EFFECT Writes to token_blacklist table; prunes expired entries.\n# @RELATION DEPENDS_ON -> [TokenBlacklist]\ndef blacklist_token(token: str, db: Session) -> None:\n with belief_scope(\"blacklist_token\"):\n _prune_blacklist(db)\n try:\n payload = decode_token(token)\n except Exception:\n return # Already invalid — no need to blacklist\n\n jti = payload.get(\"jti\")\n exp_raw = payload.get(\"exp\")\n if not jti or not exp_raw:\n return\n\n if isinstance(exp_raw, datetime):\n expires_at = exp_raw\n else:\n expires_at = datetime.fromtimestamp(exp_raw, tz=timezone.utc)\n\n existing = db.query(TokenBlacklist).filter(TokenBlacklist.jti == jti).first()\n if existing:\n return\n\n entry = TokenBlacklist(\n jti=jti,\n token_hash=_hash_token(token),\n expires_at=expires_at,\n )\n db.add(entry)\n db.commit()\n\n\n# #endregion blacklist_token\n" + }, + { + "contract_id": "is_token_blacklisted", + "contract_type": "Function", + "file_path": "backend/src/core/auth/jwt.py", + "start_line": 152, + "end_line": 171, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Check if a JWT token has been revoked.", + "POST": "Returns True if token is blacklisted, False otherwise.", + "PRE": "db is a valid SQLAlchemy session." + }, + "relations": [ + { + "source_id": "is_token_blacklisted", + "relation_type": "DEPENDS_ON", + "target_id": "TokenBlacklist", + "target_ref": "[TokenBlacklist]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region is_token_blacklisted [TYPE Function]\n# @BRIEF Check if a JWT token has been revoked.\n# @PRE db is a valid SQLAlchemy session.\n# @POST Returns True if token is blacklisted, False otherwise.\n# @RELATION DEPENDS_ON -> [TokenBlacklist]\ndef is_token_blacklisted(token: str, db: Session) -> bool:\n with belief_scope(\"is_token_blacklisted\"):\n try:\n payload = decode_token(token)\n except Exception:\n return True # Invalid tokens are treated as blacklisted\n\n jti = payload.get(\"jti\")\n if not jti:\n return False\n\n return db.query(TokenBlacklist).filter(TokenBlacklist.jti == jti).first() is not None\n\n\n# #endregion is_token_blacklisted\n" }, { "contract_id": "AuthLoggerModule", "contract_type": "Module", "file_path": "backend/src/core/auth/logger.py", "start_line": 1, - "end_line": 34, + "end_line": 72, "tier": "TIER_3", "complexity": 5, "metadata": { "BRIEF": "Structured auth logging module for audit trail generation.", "COMPLEXITY": 5, - "DATA_CONTRACT": "AuthEvent -> LogEntry", "INVARIANT": "Must not log sensitive data like passwords or full tokens.", - "LAYER": "Core", - "POST": "Audit logging functions exported", - "PRE": "Auth module initialized", - "SIDE_EFFECT": "Writes auth audit log entries" + "LAYER": "Core" }, "relations": [ { @@ -19059,33 +19213,26 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthLoggerModule [C:5] [TYPE Module] [SEMANTICS auth, audit, logging]\n#\n# @BRIEF Structured auth logging module for audit trail generation.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [EXT:frontend:core_logger]\n#\n# @INVARIANT Must not log sensitive data like passwords or full tokens.\n# @PRE Auth module initialized\n# @POST Audit logging functions exported\n# @SIDE_EFFECT Writes auth audit log entries\n# @DATA_CONTRACT AuthEvent -> LogEntry\n# @SIDE_EFFECT Writes auth audit log entries\n# @DATA_CONTRACT AuthEvent -> LogEntry\n\nfrom datetime import datetime\n\nfrom ..logger import belief_scope, logger\n\n\n# #region log_security_event [TYPE Function]\n# @BRIEF Logs a security-related event for audit trails.\n# @PRE event_type and username are strings.\n# @POST Security event is written to the application log.\n# @RELATION DEPENDS_ON -> [logger]\ndef log_security_event(event_type: str, username: str, details: dict = None):\n with belief_scope(\"log_security_event\", f\"{event_type}:{username}\"):\n timestamp = datetime.utcnow().isoformat()\n msg = f\"[AUDIT][{timestamp}][{event_type}] User: {username}\"\n if details:\n msg += f\" Details: {details}\"\n logger.info(msg)\n# #endregion log_security_event\n\n# #endregion AuthLoggerModule\n" + "body": "# #region AuthLoggerModule [C:5] [TYPE Module] [SEMANTICS auth, audit, logging]\n#\n# @BRIEF Structured auth logging module for audit trail generation.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [EXT:frontend:core_logger]\n#\n# @INVARIANT Must not log sensitive data like passwords or full tokens.\n# Sensitive field names (password, secret, token, key, authorization)\n# in the details dict are automatically masked.\n# @PRE Auth module initialized\n# @POST Audit logging functions exported\n# @SIDE_EFFECT Writes auth audit log entries\n# @DATA_CONTRACT AuthEvent -> LogEntry\n\nimport copy\nimport re\nfrom datetime import datetime\nfrom typing import Any\n\nfrom ..logger import belief_scope, logger\n\n# Sensitive field name patterns — values for these keys are masked in logs\n_SENSITIVE_KEYS = re.compile(\n r\"^(password|secret|token|api_key|api\\.key|authorization|auth|credential|credit_card|ssn)$\",\n re.IGNORECASE,\n)\n\n\ndef _mask_details(details: dict[str, Any] | None) -> dict[str, Any] | None:\n \"\"\"Return a copy of details with sensitive field values replaced by '***'.\"\"\"\n if not details:\n return details\n masked = {}\n for key, value in details.items():\n if isinstance(key, str) and _SENSITIVE_KEYS.match(key):\n masked[key] = \"***\"\n elif isinstance(value, dict):\n masked[key] = _mask_details(value)\n else:\n masked[key] = value\n return masked\n\n\n# #region log_security_event [TYPE Function]\n# @BRIEF Logs a security-related event for audit trails.\n# @PRE event_type and username are strings.\n# @POST Security event is written to the application log via %s-formatting to prevent log injection.\n# Sensitive fields in details dict are masked.\n# @RELATION DEPENDS_ON -> [logger]\n# @RATIONALE Uses %s-formatting (not f-strings) to prevent log forging via CRLF injection in\n# user-controlled fields — see [SEC:H-1]. Sensitive fields in details\n# dict are masked to prevent credential leakage — see [SEC:L-1].\ndef log_security_event(event_type: str, username: str, details: dict = None):\n with belief_scope(\"log_security_event\", f\"{event_type}:{username}\"):\n timestamp = datetime.utcnow().isoformat()\n logger.info(\n \"[AUDIT][%s][%s] User: %s\",\n timestamp,\n event_type,\n username,\n )\n safe_details = _mask_details(details)\n if safe_details:\n logger.info(\n \"[AUDIT][%s][%s] Details: %s\",\n timestamp,\n event_type,\n safe_details,\n )\n# #endregion log_security_event\n\n# #endregion AuthLoggerModule\n" }, { "contract_id": "log_security_event", "contract_type": "Function", "file_path": "backend/src/core/auth/logger.py", - "start_line": 20, - "end_line": 32, + "start_line": 44, + "end_line": 70, "tier": "TIER_1", "complexity": 1, "metadata": { "BRIEF": "Logs a security-related event for audit trails.", - "POST": "Security event is written to the application log.", + "POST": "Security event is written to the application log via %s-formatting to prevent log injection.", "PRE": "event_type and username are strings." }, - "relations": [ - { - "source_id": "log_security_event", - "relation_type": "DEPENDS_ON", - "target_id": "logger", - "target_ref": "[logger]" - } - ], + "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region log_security_event [TYPE Function]\n# @BRIEF Logs a security-related event for audit trails.\n# @PRE event_type and username are strings.\n# @POST Security event is written to the application log.\n# @RELATION DEPENDS_ON -> [logger]\ndef log_security_event(event_type: str, username: str, details: dict = None):\n with belief_scope(\"log_security_event\", f\"{event_type}:{username}\"):\n timestamp = datetime.utcnow().isoformat()\n msg = f\"[AUDIT][{timestamp}][{event_type}] User: {username}\"\n if details:\n msg += f\" Details: {details}\"\n logger.info(msg)\n# #endregion log_security_event\n" + "body": "# #region log_security_event [TYPE Function]\n# @BRIEF Logs a security-related event for audit trails.\n# @PRE event_type and username are strings.\n# @POST Security event is written to the application log via %s-formatting to prevent log injection.\n# Sensitive fields in details dict are masked.\n# @RELATION DEPENDS_ON -> [logger]\n# @RATIONALE Uses %s-formatting (not f-strings) to prevent log forging via CRLF injection in\n# user-controlled fields — see [SEC:H-1]. Sensitive fields in details\n# dict are masked to prevent credential leakage — see [SEC:L-1].\ndef log_security_event(event_type: str, username: str, details: dict = None):\n with belief_scope(\"log_security_event\", f\"{event_type}:{username}\"):\n timestamp = datetime.utcnow().isoformat()\n logger.info(\n \"[AUDIT][%s][%s] User: %s\",\n timestamp,\n event_type,\n username,\n )\n safe_details = _mask_details(details)\n if safe_details:\n logger.info(\n \"[AUDIT][%s][%s] Details: %s\",\n timestamp,\n event_type,\n safe_details,\n )\n# #endregion log_security_event\n" }, { "contract_id": "AuthOauthModule", @@ -19590,14 +19737,14 @@ "contract_type": "Module", "file_path": "backend/src/core/config_manager.py", "start_line": 1, - "end_line": 549, + "end_line": 632, "tier": "TIER_3", "complexity": 5, "metadata": { "BRIEF": "Manages application configuration persistence in DB with one-time migration from legacy JSON.", "COMPLEXITY": 5, "DATA_CONTRACT": "Input[json, record] -> Model[AppConfig]", - "INVARIANT": "Configuration must always be representable by AppConfig and persisted under global record id.", + "INVARIANT": "Environment passwords are encrypted at rest using Fernet (see [SEC:C-1]).", "LAYER": "Domain", "POST": "Configuration is loaded into memory and logger is configured.", "PRE": "Database schema for AppConfigRecord must be initialized.", @@ -19622,6 +19769,12 @@ "target_id": "AppConfigRecord", "target_ref": "[AppConfigRecord]" }, + { + "source_id": "ConfigManager", + "relation_type": "DEPENDS_ON", + "target_id": "EncryptionManager", + "target_ref": "[EncryptionManager]" + }, { "source_id": "ConfigManager", "relation_type": "CALLS", @@ -19638,14 +19791,73 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ConfigManager [C:5] [TYPE Module] [SEMANTICS sqlalchemy, validate, migration, config-manager]\n#\n# @BRIEF Manages application configuration persistence in DB with one-time migration from legacy JSON.\n# @LAYER Domain\n# @PRE Database schema for AppConfigRecord must be initialized.\n# @POST Configuration is loaded into memory and logger is configured.\n# @SIDE_EFFECT Performs DB I/O and may update global logging level.\n# @DATA_CONTRACT Input[json, record] -> Model[AppConfig]\n# @INVARIANT Configuration must always be representable by AppConfig and persisted under global record id.\n# @RELATION DEPENDS_ON -> [AppConfig]\n# @RELATION DEPENDS_ON -> [SessionLocal]\n# @RELATION DEPENDS_ON -> [AppConfigRecord]\n# @RELATION CALLS -> [logger]\n# @RELATION CALLS -> [configure_logger]\n#\nimport json\nimport os\nfrom pathlib import Path\nfrom typing import Any\n\nfrom sqlalchemy.orm import Session\n\nfrom ..models.config import AppConfigRecord\nfrom ..models.mapping import Environment as EnvironmentRecord\nfrom .config_models import AppConfig, Environment, GlobalSettings\nfrom .database import SessionLocal\nfrom .logger import belief_scope, configure_logger, logger\n\n\n# #region ConfigManager [C:5] [TYPE Class]\n# @BRIEF Handles application configuration load, validation, mutation, and persistence lifecycle.\n# @PRE Database is accessible and AppConfigRecord schema is loaded.\n# @POST Configuration state is synchronized between memory and database.\n# @SIDE_EFFECT Performs DB I/O, OS path validation, and logger reconfiguration.\nclass ConfigManager:\n # #region __init__ [TYPE Function]\n # @PURPOSE: Initialize manager state from persisted or migrated configuration.\n # @PRE config_path is a non-empty string path.\n # @POST self.config is initialized as AppConfig and logger is configured.\n # @SIDE_EFFECT Reads config sources and updates logging configuration.\n # @DATA_CONTRACT Input(str config_path) -> Output(None; self.config: AppConfig)\n def __init__(self, config_path: str = \"config.json\"):\n with belief_scope(\"ConfigManager.__init__\"):\n if not isinstance(config_path, str) or not config_path:\n logger.explore(\n \"Invalid config_path provided\", extra={\"path\": config_path}\n )\n raise ValueError(\"config_path must be a non-empty string\")\n logger.reason(f\"Initializing ConfigManager with legacy path: {config_path}\")\n self.config_path = Path(config_path)\n self.raw_payload: dict[str, Any] = {}\n self.config: AppConfig = self._load_config()\n configure_logger(self.config.settings.logging)\n if not isinstance(self.config, AppConfig):\n logger.explore(\n \"Config loading resulted in invalid type\",\n extra={\"type\": type(self.config)},\n )\n raise TypeError(\"self.config must be an instance of AppConfig\")\n logger.reflect(\"ConfigManager initialization complete\")\n # #endregion __init__\n # #region _apply_features_from_env [TYPE Function]\n # @PURPOSE: Read FEATURES__* env vars and apply them to a GlobalSettings features config.\n # @SIDE_EFFECT Reads os.environ; mutates settings.features in-place.\n # @RATIONALE Env vars seed the initial defaults. After first bootstrap, DB is source of truth.\n @staticmethod\n def _apply_features_from_env(settings: GlobalSettings) -> None:\n with belief_scope(\"ConfigManager._apply_features_from_env\"):\n dataset_review_env = os.getenv(\"FEATURES__DATASET_REVIEW\")\n if dataset_review_env is not None:\n parsed = dataset_review_env.strip().lower() in (\"true\", \"1\", \"yes\")\n settings.features.dataset_review = parsed\n logger.reason(\n \"Applied FEATURES__DATASET_REVIEW from env\",\n extra={\"value\": parsed, \"raw\": dataset_review_env},\n )\n health_monitor_env = os.getenv(\"FEATURES__HEALTH_MONITOR\")\n if health_monitor_env is not None:\n parsed = health_monitor_env.strip().lower() in (\"true\", \"1\", \"yes\")\n settings.features.health_monitor = parsed\n logger.reason(\n \"Applied FEATURES__HEALTH_MONITOR from env\",\n extra={\"value\": parsed, \"raw\": health_monitor_env},\n )\n\n app_timezone_env = os.getenv(\"APP_TIMEZONE\")\n if app_timezone_env is not None:\n settings.app_timezone = app_timezone_env.strip()\n logger.reason(\n \"Applied APP_TIMEZONE from env\",\n extra={\"value\": settings.app_timezone},\n )\n # #endregion _apply_features_from_env\n # #region _default_config [TYPE Function]\n # @PURPOSE: Build default application configuration fallback.\n def _default_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._default_config\"):\n logger.reason(\"Building default AppConfig fallback\")\n config = AppConfig(environments=[], settings=GlobalSettings())\n self._apply_features_from_env(config.settings)\n return config\n # #endregion _default_config\n # #region _sync_raw_payload_from_config [TYPE Function]\n # @PURPOSE: Merge typed AppConfig state into raw payload while preserving unsupported legacy sections.\n def _sync_raw_payload_from_config(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager._sync_raw_payload_from_config\"):\n typed_payload = self.config.model_dump()\n merged_payload = dict(self.raw_payload or {})\n merged_payload[\"environments\"] = typed_payload.get(\"environments\", [])\n merged_payload[\"settings\"] = typed_payload.get(\"settings\", {})\n self.raw_payload = merged_payload\n logger.reason(\n \"Synchronized raw payload from typed config\",\n extra={\n \"environments_count\": len(\n merged_payload.get(\"environments\", []) or []\n ),\n \"has_settings\": \"settings\" in merged_payload,\n \"extra_sections\": sorted(\n key\n for key in merged_payload\n if key not in {\"environments\", \"settings\"}\n ),\n },\n )\n return merged_payload\n # #endregion _sync_raw_payload_from_config\n # #region _load_from_legacy_file [TYPE Function]\n # @PURPOSE: Load legacy JSON configuration for migration fallback path.\n def _load_from_legacy_file(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager._load_from_legacy_file\"):\n if not self.config_path.exists():\n logger.reason(\n \"Legacy config file not found; using default payload\",\n extra={\"path\": str(self.config_path)},\n )\n return {}\n logger.reason(\n \"Loading legacy config file\", extra={\"path\": str(self.config_path)}\n )\n with self.config_path.open(\"r\", encoding=\"utf-8\") as fh:\n payload = json.load(fh)\n if not isinstance(payload, dict):\n logger.explore(\n \"Legacy config payload is not a JSON object\",\n extra={\n \"path\": str(self.config_path),\n \"type\": type(payload).__name__,\n },\n )\n raise ValueError(\"Legacy config payload must be a JSON object\")\n logger.reason(\n \"Legacy config file loaded successfully\",\n extra={\"path\": str(self.config_path), \"keys\": sorted(payload.keys())},\n )\n return payload\n # #endregion _load_from_legacy_file\n # #region _get_record [TYPE Function]\n # @PURPOSE: Resolve global configuration record from DB.\n def _get_record(self, session: Session) -> AppConfigRecord | None:\n with belief_scope(\"ConfigManager._get_record\"):\n record = (\n session.query(AppConfigRecord)\n .filter(AppConfigRecord.id == \"global\")\n .first()\n )\n logger.reason(\n \"Resolved app config record\", extra={\"exists\": record is not None}\n )\n return record\n # #endregion _get_record\n # #region _load_config [TYPE Function]\n # @PURPOSE: Load configuration from DB or perform one-time migration from legacy JSON.\n def _load_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._load_config\"):\n session = SessionLocal()\n try:\n record = self._get_record(session)\n if record and isinstance(record.payload, dict):\n logger.reason(\n \"Loading configuration from database\",\n extra={\"record_id\": record.id},\n )\n self.raw_payload = dict(record.payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self._sync_environment_records(session, config)\n session.commit()\n logger.reason(\n \"Database configuration validated successfully\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n return config\n logger.reason(\n \"Database configuration record missing; attempting legacy file migration\",\n extra={\"legacy_path\": str(self.config_path)},\n )\n legacy_payload = self._load_from_legacy_file()\n if legacy_payload:\n self.raw_payload = dict(legacy_payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self._apply_features_from_env(config.settings)\n logger.reason(\n \"Legacy payload validated; persisting migrated configuration to database\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n self._save_config_to_db(config, session=session)\n return config\n logger.reason(\n \"No persisted config found; falling back to default configuration\"\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config, session=session)\n return config\n except (json.JSONDecodeError, TypeError, ValueError) as exc:\n logger.explore(\n \"Recoverable config load failure; falling back to default configuration\",\n extra={\"error\": str(exc), \"legacy_path\": str(self.config_path)},\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n return config\n except Exception as exc:\n logger.explore(\n \"Critical config load failure; re-raising persistence or validation error\",\n extra={\"error\": str(exc)},\n )\n raise\n finally:\n session.close()\n # #endregion _load_config\n # #region _sync_environment_records [TYPE Function]\n # @PURPOSE: Mirror configured environments into the relational environments table used by FK-backed domain models.\n def _sync_environment_records(self, session: Session, config: AppConfig) -> None:\n with belief_scope(\"ConfigManager._sync_environment_records\"):\n configured_envs = list(config.environments or [])\n persisted_records = session.query(EnvironmentRecord).all()\n persisted_by_id = {\n str(record.id or \"\").strip(): record for record in persisted_records\n }\n for environment in configured_envs:\n normalized_id = str(environment.id or \"\").strip()\n if not normalized_id:\n continue\n display_name = (\n str(environment.name or normalized_id).strip() or normalized_id\n )\n normalized_url = str(environment.url or \"\").strip()\n credentials_id = (\n str(environment.username or \"\").strip() or normalized_id\n )\n record = persisted_by_id.get(normalized_id)\n if record is None:\n logger.reason(\n \"Creating relational environment record from typed config\",\n extra={\n \"environment_id\": normalized_id,\n \"environment_name\": display_name,\n },\n )\n session.add(\n EnvironmentRecord(\n id=normalized_id,\n name=display_name,\n url=normalized_url,\n credentials_id=credentials_id,\n )\n )\n continue\n record.name = display_name\n record.url = normalized_url\n record.credentials_id = credentials_id\n # #endregion _sync_environment_records\n # #region _delete_stale_environment_records [TYPE Function]\n # @PURPOSE: Remove persisted environment records that are no longer in the configured environments.\n # @PRE _sync_environment_records must already have run so the query returns a current view.\n # @POST Stale Environment rows are deleted via the session (caller must commit).\n # @SIDE_EFFECT Only safe to call during explicit save (_save_config_to_db), NOT during _load_config,\n # because FK-dependent rows (task_records, database_mappings, etc.) may reference deleted rows.\n def _delete_stale_environment_records(\n self, session: Session, config: AppConfig\n ) -> None:\n with belief_scope(\"ConfigManager._delete_stale_environment_records\"):\n persisted_records = session.query(EnvironmentRecord).all()\n configured_ids = {\n str(env.id or \"\").strip()\n for env in (config.environments or [])\n if str(env.id or \"\").strip()\n }\n for record in persisted_records:\n record_id = str(record.id or \"\").strip()\n if record_id and record_id not in configured_ids:\n logger.reason(\n \"Deleting stale environment record\",\n extra={\"environment_id\": record_id},\n )\n session.delete(record)\n # #endregion _delete_stale_environment_records\n # #region _save_config_to_db [TYPE Function]\n # @PURPOSE: Persist provided AppConfig into the global DB configuration record.\n def _save_config_to_db(\n self, config: AppConfig, session: Session | None = None\n ) -> None:\n with belief_scope(\"ConfigManager._save_config_to_db\"):\n owns_session = session is None\n db = session or SessionLocal()\n try:\n self.config = config\n payload = self._sync_raw_payload_from_config()\n record = self._get_record(db)\n if record is None:\n logger.reason(\"Creating new global app config record\")\n record = AppConfigRecord(id=\"global\", payload=payload)\n db.add(record)\n else:\n logger.reason(\n \"Updating existing global app config record\",\n extra={\"record_id\": record.id},\n )\n record.payload = payload\n self._sync_environment_records(db, config)\n self._delete_stale_environment_records(db, config)\n db.commit()\n logger.reason(\n \"Configuration persisted to database\",\n extra={\n \"environments_count\": len(\n payload.get(\"environments\", []) or []\n ),\n \"payload_keys\": sorted(payload.keys()),\n },\n )\n except Exception:\n db.rollback()\n logger.explore(\"Database save failed; transaction rolled back\")\n raise\n finally:\n if owns_session:\n db.close()\n # #endregion _save_config_to_db\n # #region save [TYPE Function]\n # @PURPOSE: Persist current in-memory configuration state.\n def save(self) -> None:\n with belief_scope(\"ConfigManager.save\"):\n logger.reason(\"Persisting current in-memory configuration\")\n self._save_config_to_db(self.config)\n # #endregion save\n # #region get_config [TYPE Function]\n # @PURPOSE: Return current in-memory configuration snapshot.\n def get_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager.get_config\"):\n return self.config\n # #endregion get_config\n # #region get_payload [TYPE Function]\n # @PURPOSE: Return full persisted payload including sections outside typed AppConfig schema.\n def get_payload(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager.get_payload\"):\n return self._sync_raw_payload_from_config()\n # #endregion get_payload\n # #region save_config [TYPE Function]\n # @PURPOSE: Persist configuration provided either as typed AppConfig or raw payload dict.\n def save_config(self, config: Any) -> AppConfig:\n with belief_scope(\"ConfigManager.save_config\"):\n if isinstance(config, AppConfig):\n logger.reason(\"Saving typed AppConfig payload\")\n self.config = config\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config)\n return self.config\n if isinstance(config, dict):\n logger.reason(\n \"Saving raw config payload\",\n extra={\"keys\": sorted(config.keys())},\n )\n self.raw_payload = dict(config)\n typed_config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self.config = typed_config\n self._save_config_to_db(typed_config)\n return self.config\n logger.explore(\n \"Unsupported config type supplied to save_config\",\n extra={\"type\": type(config).__name__},\n )\n raise TypeError(\"config must be AppConfig or dict\")\n # #endregion save_config\n # #region update_global_settings [TYPE Function]\n # @PURPOSE: Replace global settings and persist the resulting configuration.\n def update_global_settings(self, settings: GlobalSettings) -> AppConfig:\n with belief_scope(\"ConfigManager.update_global_settings\"):\n logger.reason(\"Updating global settings\")\n self.config.settings = settings\n self.save()\n return self.config\n # #endregion update_global_settings\n # #region validate_path [TYPE Function]\n # @PURPOSE: Validate that path exists and is writable, creating it when absent.\n def validate_path(self, path: str) -> tuple[bool, str]:\n with belief_scope(\"ConfigManager.validate_path\", f\"path={path}\"):\n try:\n target = Path(path).expanduser()\n target.mkdir(parents=True, exist_ok=True)\n if not target.exists():\n return False, f\"Path does not exist: {target}\"\n if not target.is_dir():\n return False, f\"Path is not a directory: {target}\"\n test_file = target / \".write_test\"\n with test_file.open(\"w\", encoding=\"utf-8\") as fh:\n fh.write(\"ok\")\n test_file.unlink(missing_ok=True)\n logger.reason(\"Path validation succeeded\", extra={\"path\": str(target)})\n return True, \"OK\"\n except Exception as exc:\n logger.explore(\n \"Path validation failed\", extra={\"path\": path, \"error\": str(exc)}\n )\n return False, str(exc)\n # #endregion validate_path\n # #region get_environments [TYPE Function]\n # @PURPOSE: Return all configured environments.\n def get_environments(self) -> list[Environment]:\n with belief_scope(\"ConfigManager.get_environments\"):\n return list(self.config.environments)\n # #endregion get_environments\n # #region has_environments [TYPE Function]\n # @PURPOSE: Check whether at least one environment exists in configuration.\n def has_environments(self) -> bool:\n with belief_scope(\"ConfigManager.has_environments\"):\n return len(self.config.environments) > 0\n # #endregion has_environments\n # #region get_environment [TYPE Function]\n # @PURPOSE: Resolve a configured environment by identifier.\n def get_environment(self, env_id: str) -> Environment | None:\n with belief_scope(\"ConfigManager.get_environment\", f\"env_id={env_id}\"):\n normalized = str(env_id or \"\").strip()\n if not normalized:\n return None\n for env in self.config.environments:\n if env.id == normalized or env.name == normalized:\n return env\n return None\n # #endregion get_environment\n # #region add_environment [TYPE Function]\n # @PURPOSE: Upsert environment by id into configuration and persist.\n def add_environment(self, env: Environment) -> AppConfig:\n with belief_scope(\"ConfigManager.add_environment\", f\"env_id={env.id}\"):\n existing_index = next(\n (\n i\n for i, item in enumerate(self.config.environments)\n if item.id == env.id\n ),\n None,\n )\n if env.is_default:\n for item in self.config.environments:\n item.is_default = False\n if existing_index is None:\n logger.reason(\"Appending new environment\", extra={\"env_id\": env.id})\n self.config.environments.append(env)\n else:\n logger.reason(\n \"Replacing existing environment during add\",\n extra={\"env_id\": env.id},\n )\n self.config.environments[existing_index] = env\n if len(self.config.environments) == 1 and not any(\n item.is_default for item in self.config.environments\n ):\n self.config.environments[0].is_default = True\n self.save()\n return self.config\n # #endregion add_environment\n # #region update_environment [TYPE Function]\n # @PURPOSE: Update existing environment by id and preserve masked password placeholder behavior.\n def update_environment(self, env_id: str, env: Environment) -> bool:\n with belief_scope(\"ConfigManager.update_environment\", f\"env_id={env_id}\"):\n for index, existing in enumerate(self.config.environments):\n if existing.id != env_id:\n continue\n update_data = env.model_dump()\n if update_data.get(\"password\") == \"********\":\n update_data[\"password\"] = existing.password\n updated = Environment.model_validate(update_data)\n if updated.is_default:\n for item in self.config.environments:\n item.is_default = False\n elif existing.is_default and not updated.is_default:\n updated.is_default = True\n self.config.environments[index] = updated\n logger.reason(\"Environment updated\", extra={\"env_id\": env_id})\n self.save()\n return True\n logger.explore(\n \"Environment update skipped; env not found\", extra={\"env_id\": env_id}\n )\n return False\n # #endregion update_environment\n # #region delete_environment [TYPE Function]\n # @PURPOSE: Delete environment by id and persist when deletion occurs.\n def delete_environment(self, env_id: str) -> bool:\n with belief_scope(\"ConfigManager.delete_environment\", f\"env_id={env_id}\"):\n before = len(self.config.environments)\n removed = [env for env in self.config.environments if env.id == env_id]\n self.config.environments = [\n env for env in self.config.environments if env.id != env_id\n ]\n if len(self.config.environments) == before:\n logger.explore(\n \"Environment delete skipped; env not found\",\n extra={\"env_id\": env_id},\n )\n return False\n if removed and removed[0].is_default and self.config.environments:\n self.config.environments[0].is_default = True\n if self.config.settings.default_environment_id == env_id:\n replacement = next(\n (env.id for env in self.config.environments if env.is_default), None\n )\n self.config.settings.default_environment_id = replacement\n logger.reason(\n \"Environment deleted\",\n extra={\"env_id\": env_id, \"remaining\": len(self.config.environments)},\n )\n self.save()\n return True\n # #endregion delete_environment\n# #endregion ConfigManager\n# #endregion ConfigManager\n" + "body": "# #region ConfigManager [C:5] [TYPE Module] [SEMANTICS sqlalchemy, validate, migration, config-manager]\n#\n# @BRIEF Manages application configuration persistence in DB with one-time migration from legacy JSON.\n# @LAYER Domain\n# @PRE Database schema for AppConfigRecord must be initialized.\n# @POST Configuration is loaded into memory and logger is configured.\n# @SIDE_EFFECT Performs DB I/O and may update global logging level.\n# @DATA_CONTRACT Input[json, record] -> Model[AppConfig]\n# @INVARIANT Configuration must always be representable by AppConfig and persisted under global record id.\n# @INVARIANT Environment passwords are encrypted at rest using Fernet (see [SEC:C-1]).\n# @RELATION DEPENDS_ON -> [AppConfig]\n# @RELATION DEPENDS_ON -> [SessionLocal]\n# @RELATION DEPENDS_ON -> [AppConfigRecord]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION CALLS -> [logger]\n# @RELATION CALLS -> [configure_logger]\n#\nimport json\nimport os\nfrom pathlib import Path\nfrom typing import Any\n\nfrom sqlalchemy.orm import Session\n\nfrom ..models.config import AppConfigRecord\nfrom ..models.mapping import Environment as EnvironmentRecord\nfrom .config_models import AppConfig, Environment, GlobalSettings\nfrom .database import SessionLocal\nfrom .encryption import EncryptionManager\nfrom .logger import belief_scope, configure_logger, logger\n\n\n# #region ConfigManager [C:5] [TYPE Class]\n# @BRIEF Handles application configuration load, validation, mutation, and persistence lifecycle.\n# @PRE Database is accessible and AppConfigRecord schema is loaded.\n# @POST Configuration state is synchronized between memory and database.\n# @SIDE_EFFECT Performs DB I/O, OS path validation, and logger reconfiguration.\nclass ConfigManager:\n # #region __init__ [TYPE Function]\n # @PURPOSE: Initialize manager state from persisted or migrated configuration.\n # @PRE config_path is a non-empty string path.\n # @POST self.config is initialized as AppConfig and logger is configured.\n # @SIDE_EFFECT Reads config sources and updates logging configuration.\n # @DATA_CONTRACT Input(str config_path) -> Output(None; self.config: AppConfig)\n def __init__(self, config_path: str = \"config.json\"):\n with belief_scope(\"ConfigManager.__init__\"):\n if not isinstance(config_path, str) or not config_path:\n logger.explore(\n \"Invalid config_path provided\", extra={\"path\": config_path}\n )\n raise ValueError(\"config_path must be a non-empty string\")\n logger.reason(f\"Initializing ConfigManager with legacy path: {config_path}\")\n self.config_path = Path(config_path)\n self.raw_payload: dict[str, Any] = {}\n self.config: AppConfig = self._load_config()\n configure_logger(self.config.settings.logging)\n if not isinstance(self.config, AppConfig):\n logger.explore(\n \"Config loading resulted in invalid type\",\n extra={\"type\": type(self.config)},\n )\n raise TypeError(\"self.config must be an instance of AppConfig\")\n logger.reflect(\"ConfigManager initialization complete\")\n # #endregion __init__\n\n # #region _get_encryption_manager [TYPE Function]\n # @PURPOSE: Lazy-init EncryptionManager for password encryption/decryption.\n # @POST Returns EncryptionManager or None if ENCRYPTION_KEY is unavailable.\n # @SIDE_EFFECT May log a warning if key is missing.\n # @RATIONALE Encryption manager cannot be initialized before ensure_encryption_key()\n # is called at startup. This lazy init allows early bootstrap paths\n # (legacy migration, test setup) to work without encryption.\n def _get_encryption_manager(self) -> EncryptionManager | None:\n if not hasattr(self, \"_encryption\"):\n try:\n self._encryption = EncryptionManager()\n except (RuntimeError, Exception) as exc:\n logger.reason(\n \"EncryptionManager unavailable; passwords stored in plaintext. \"\n \"Ensure ENCRYPTION_KEY is set for production.\",\n extra={\"error\": str(exc)},\n )\n self._encryption = None\n return self._encryption\n # #endregion _get_encryption_manager\n\n # #region _encrypt_env_passwords [TYPE Function]\n # @PURPOSE: Encrypt all environment passwords in the raw payload dict before DB persistence.\n # @PRE payload[\"environments\"] is a list of dicts with optional \"password\" keys.\n # @POST Password fields are encrypted in-place (skips masked/empty/already-encrypted).\n # @SIDE_EFFECT Reads ENCRYPTION_KEY; logs warnings on failure.\n def _encrypt_env_passwords(self, payload: dict) -> None:\n encryption = self._get_encryption_manager()\n if encryption is None:\n return\n environments = payload.get(\"environments\", [])\n if not isinstance(environments, list):\n return\n for env in environments:\n pwd = env.get(\"password\", \"\")\n if not pwd or pwd == \"********\":\n continue\n # Skip if already encrypted (safe-decrypt check)\n try:\n encryption.decrypt(pwd)\n continue\n except Exception:\n pass\n try:\n env[\"password\"] = encryption.encrypt(pwd)\n except Exception as exc:\n logger.explore(\n \"Failed to encrypt environment password\",\n extra={\"error\": str(exc)},\n )\n # #endregion _encrypt_env_passwords\n\n # #region _decrypt_env_passwords [TYPE Function]\n # @PURPOSE: Decrypt all environment passwords in the AppConfig after loading from DB.\n # @PRE config.environments is populated from DB payload.\n # @POST Password fields are decrypted in-place (skips plaintext legacy values).\n def _decrypt_env_passwords(self, config: AppConfig) -> None:\n encryption = self._get_encryption_manager()\n if encryption is None:\n return\n for env in config.environments:\n if not env.password:\n continue\n try:\n env.password = encryption.decrypt(env.password)\n except Exception:\n pass # Assume plaintext (legacy data or test fixture)\n # #endregion _decrypt_env_passwords\n\n # #region _apply_features_from_env [TYPE Function]\n # @PURPOSE: Read FEATURES__* env vars and apply them to a GlobalSettings features config.\n # @SIDE_EFFECT Reads os.environ; mutates settings.features in-place.\n # @RATIONALE Env vars seed the initial defaults. After first bootstrap, DB is source of truth.\n @staticmethod\n def _apply_features_from_env(settings: GlobalSettings) -> None:\n with belief_scope(\"ConfigManager._apply_features_from_env\"):\n dataset_review_env = os.getenv(\"FEATURES__DATASET_REVIEW\")\n if dataset_review_env is not None:\n parsed = dataset_review_env.strip().lower() in (\"true\", \"1\", \"yes\")\n settings.features.dataset_review = parsed\n logger.reason(\n \"Applied FEATURES__DATASET_REVIEW from env\",\n extra={\"value\": parsed, \"raw\": dataset_review_env},\n )\n health_monitor_env = os.getenv(\"FEATURES__HEALTH_MONITOR\")\n if health_monitor_env is not None:\n parsed = health_monitor_env.strip().lower() in (\"true\", \"1\", \"yes\")\n settings.features.health_monitor = parsed\n logger.reason(\n \"Applied FEATURES__HEALTH_MONITOR from env\",\n extra={\"value\": parsed, \"raw\": health_monitor_env},\n )\n\n app_timezone_env = os.getenv(\"APP_TIMEZONE\")\n if app_timezone_env is not None:\n settings.app_timezone = app_timezone_env.strip()\n logger.reason(\n \"Applied APP_TIMEZONE from env\",\n extra={\"value\": settings.app_timezone},\n )\n # #endregion _apply_features_from_env\n # #region _default_config [TYPE Function]\n # @PURPOSE: Build default application configuration fallback.\n def _default_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._default_config\"):\n logger.reason(\"Building default AppConfig fallback\")\n config = AppConfig(environments=[], settings=GlobalSettings())\n self._apply_features_from_env(config.settings)\n return config\n # #endregion _default_config\n # #region _sync_raw_payload_from_config [TYPE Function]\n # @PURPOSE: Merge typed AppConfig state into raw payload while preserving unsupported legacy sections.\n def _sync_raw_payload_from_config(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager._sync_raw_payload_from_config\"):\n typed_payload = self.config.model_dump()\n merged_payload = dict(self.raw_payload or {})\n merged_payload[\"environments\"] = typed_payload.get(\"environments\", [])\n merged_payload[\"settings\"] = typed_payload.get(\"settings\", {})\n self.raw_payload = merged_payload\n logger.reason(\n \"Synchronized raw payload from typed config\",\n extra={\n \"environments_count\": len(\n merged_payload.get(\"environments\", []) or []\n ),\n \"has_settings\": \"settings\" in merged_payload,\n \"extra_sections\": sorted(\n key\n for key in merged_payload\n if key not in {\"environments\", \"settings\"}\n ),\n },\n )\n return merged_payload\n # #endregion _sync_raw_payload_from_config\n # #region _load_from_legacy_file [TYPE Function]\n # @PURPOSE: Load legacy JSON configuration for migration fallback path.\n def _load_from_legacy_file(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager._load_from_legacy_file\"):\n if not self.config_path.exists():\n logger.reason(\n \"Legacy config file not found; using default payload\",\n extra={\"path\": str(self.config_path)},\n )\n return {}\n logger.reason(\n \"Loading legacy config file\", extra={\"path\": str(self.config_path)}\n )\n with self.config_path.open(\"r\", encoding=\"utf-8\") as fh:\n payload = json.load(fh)\n if not isinstance(payload, dict):\n logger.explore(\n \"Legacy config payload is not a JSON object\",\n extra={\n \"path\": str(self.config_path),\n \"type\": type(payload).__name__,\n },\n )\n raise ValueError(\"Legacy config payload must be a JSON object\")\n logger.reason(\n \"Legacy config file loaded successfully\",\n extra={\"path\": str(self.config_path), \"keys\": sorted(payload.keys())},\n )\n return payload\n # #endregion _load_from_legacy_file\n # #region _get_record [TYPE Function]\n # @PURPOSE: Resolve global configuration record from DB.\n def _get_record(self, session: Session) -> AppConfigRecord | None:\n with belief_scope(\"ConfigManager._get_record\"):\n record = (\n session.query(AppConfigRecord)\n .filter(AppConfigRecord.id == \"global\")\n .first()\n )\n logger.reason(\n \"Resolved app config record\", extra={\"exists\": record is not None}\n )\n return record\n # #endregion _get_record\n # #region _load_config [TYPE Function]\n # @PURPOSE: Load configuration from DB or perform one-time migration from legacy JSON.\n def _load_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._load_config\"):\n session = SessionLocal()\n try:\n record = self._get_record(session)\n if record and isinstance(record.payload, dict):\n logger.reason(\n \"Loading configuration from database\",\n extra={\"record_id\": record.id},\n )\n self.raw_payload = dict(record.payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n # Decrypt environment passwords after loading from DB (see [SEC:C-1])\n self._decrypt_env_passwords(config)\n self._sync_environment_records(session, config)\n session.commit()\n logger.reason(\n \"Database configuration validated successfully\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n return config\n logger.reason(\n \"Database configuration record missing; attempting legacy file migration\",\n extra={\"legacy_path\": str(self.config_path)},\n )\n legacy_payload = self._load_from_legacy_file()\n if legacy_payload:\n self.raw_payload = dict(legacy_payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n # Legacy config is plaintext — decrypt is a no-op but safe\n self._decrypt_env_passwords(config)\n self._apply_features_from_env(config.settings)\n logger.reason(\n \"Legacy payload validated; persisting migrated configuration to database\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n self._save_config_to_db(config, session=session)\n return config\n logger.reason(\n \"No persisted config found; falling back to default configuration\"\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config, session=session)\n return config\n except (json.JSONDecodeError, TypeError, ValueError) as exc:\n logger.explore(\n \"Recoverable config load failure; falling back to default configuration\",\n extra={\"error\": str(exc), \"legacy_path\": str(self.config_path)},\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n return config\n except Exception as exc:\n logger.explore(\n \"Critical config load failure; re-raising persistence or validation error\",\n extra={\"error\": str(exc)},\n )\n raise\n finally:\n session.close()\n # #endregion _load_config\n # #region _sync_environment_records [TYPE Function]\n # @PURPOSE: Mirror configured environments into the relational environments table used by FK-backed domain models.\n def _sync_environment_records(self, session: Session, config: AppConfig) -> None:\n with belief_scope(\"ConfigManager._sync_environment_records\"):\n configured_envs = list(config.environments or [])\n persisted_records = session.query(EnvironmentRecord).all()\n persisted_by_id = {\n str(record.id or \"\").strip(): record for record in persisted_records\n }\n for environment in configured_envs:\n normalized_id = str(environment.id or \"\").strip()\n if not normalized_id:\n continue\n display_name = (\n str(environment.name or normalized_id).strip() or normalized_id\n )\n normalized_url = str(environment.url or \"\").strip()\n credentials_id = (\n str(environment.username or \"\").strip() or normalized_id\n )\n record = persisted_by_id.get(normalized_id)\n if record is None:\n logger.reason(\n \"Creating relational environment record from typed config\",\n extra={\n \"environment_id\": normalized_id,\n \"environment_name\": display_name,\n },\n )\n session.add(\n EnvironmentRecord(\n id=normalized_id,\n name=display_name,\n url=normalized_url,\n credentials_id=credentials_id,\n )\n )\n continue\n record.name = display_name\n record.url = normalized_url\n record.credentials_id = credentials_id\n # #endregion _sync_environment_records\n # #region _delete_stale_environment_records [TYPE Function]\n # @PURPOSE: Remove persisted environment records that are no longer in the configured environments.\n # @PRE _sync_environment_records must already have run so the query returns a current view.\n # @POST Stale Environment rows are deleted via the session (caller must commit).\n # @SIDE_EFFECT Only safe to call during explicit save (_save_config_to_db), NOT during _load_config,\n # because FK-dependent rows (task_records, database_mappings, etc.) may reference deleted rows.\n def _delete_stale_environment_records(\n self, session: Session, config: AppConfig\n ) -> None:\n with belief_scope(\"ConfigManager._delete_stale_environment_records\"):\n persisted_records = session.query(EnvironmentRecord).all()\n configured_ids = {\n str(env.id or \"\").strip()\n for env in (config.environments or [])\n if str(env.id or \"\").strip()\n }\n for record in persisted_records:\n record_id = str(record.id or \"\").strip()\n if record_id and record_id not in configured_ids:\n logger.reason(\n \"Deleting stale environment record\",\n extra={\"environment_id\": record_id},\n )\n session.delete(record)\n # #endregion _delete_stale_environment_records\n # #region _save_config_to_db [TYPE Function]\n # @PURPOSE: Persist provided AppConfig into the global DB configuration record.\n # @SIDE_EFFECT Encrypts environment passwords for at-rest security (see [SEC:C-1]);\n # restores plaintext after save so in-memory config stays usable.\n def _save_config_to_db(\n self, config: AppConfig, session: Session | None = None\n ) -> None:\n with belief_scope(\"ConfigManager._save_config_to_db\"):\n owns_session = session is None\n db = session or SessionLocal()\n try:\n self.config = config\n payload = self._sync_raw_payload_from_config()\n # Encrypt passwords for at-rest security before DB write\n self._encrypt_env_passwords(payload)\n record = self._get_record(db)\n if record is None:\n logger.reason(\"Creating new global app config record\")\n record = AppConfigRecord(id=\"global\", payload=payload)\n db.add(record)\n else:\n logger.reason(\n \"Updating existing global app config record\",\n extra={\"record_id\": record.id},\n )\n record.payload = payload\n self._sync_environment_records(db, config)\n self._delete_stale_environment_records(db, config)\n db.commit()\n logger.reason(\n \"Configuration persisted to database\",\n extra={\n \"environments_count\": len(\n payload.get(\"environments\", []) or []\n ),\n \"payload_keys\": sorted(payload.keys()),\n },\n )\n # Restore plaintext passwords in config after save\n self._decrypt_env_passwords(config)\n except Exception:\n db.rollback()\n logger.explore(\"Database save failed; transaction rolled back\")\n raise\n finally:\n if owns_session:\n db.close()\n # #endregion _save_config_to_db\n # #region save [TYPE Function]\n # @PURPOSE: Persist current in-memory configuration state.\n def save(self) -> None:\n with belief_scope(\"ConfigManager.save\"):\n logger.reason(\"Persisting current in-memory configuration\")\n self._save_config_to_db(self.config)\n # #endregion save\n # #region get_config [TYPE Function]\n # @PURPOSE: Return current in-memory configuration snapshot.\n def get_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager.get_config\"):\n return self.config\n # #endregion get_config\n # #region get_payload [TYPE Function]\n # @PURPOSE: Return full persisted payload including sections outside typed AppConfig schema.\n def get_payload(self) -> dict[str, Any]:\n with belief_scope(\"ConfigManager.get_payload\"):\n return self._sync_raw_payload_from_config()\n # #endregion get_payload\n # #region save_config [TYPE Function]\n # @PURPOSE: Persist configuration provided either as typed AppConfig or raw payload dict.\n def save_config(self, config: Any) -> AppConfig:\n with belief_scope(\"ConfigManager.save_config\"):\n if isinstance(config, AppConfig):\n logger.reason(\"Saving typed AppConfig payload\")\n self.config = config\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config)\n return self.config\n if isinstance(config, dict):\n logger.reason(\n \"Saving raw config payload\",\n extra={\"keys\": sorted(config.keys())},\n )\n self.raw_payload = dict(config)\n typed_config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self.config = typed_config\n self._save_config_to_db(typed_config)\n return self.config\n logger.explore(\n \"Unsupported config type supplied to save_config\",\n extra={\"type\": type(config).__name__},\n )\n raise TypeError(\"config must be AppConfig or dict\")\n # #endregion save_config\n # #region update_global_settings [TYPE Function]\n # @PURPOSE: Replace global settings and persist the resulting configuration.\n def update_global_settings(self, settings: GlobalSettings) -> AppConfig:\n with belief_scope(\"ConfigManager.update_global_settings\"):\n logger.reason(\"Updating global settings\")\n self.config.settings = settings\n self.save()\n return self.config\n # #endregion update_global_settings\n # #region validate_path [TYPE Function]\n # @PURPOSE: Validate that path exists and is writable, creating it when absent.\n def validate_path(self, path: str) -> tuple[bool, str]:\n with belief_scope(\"ConfigManager.validate_path\", f\"path={path}\"):\n try:\n target = Path(path).expanduser()\n target.mkdir(parents=True, exist_ok=True)\n if not target.exists():\n return False, f\"Path does not exist: {target}\"\n if not target.is_dir():\n return False, f\"Path is not a directory: {target}\"\n test_file = target / \".write_test\"\n with test_file.open(\"w\", encoding=\"utf-8\") as fh:\n fh.write(\"ok\")\n test_file.unlink(missing_ok=True)\n logger.reason(\"Path validation succeeded\", extra={\"path\": str(target)})\n return True, \"OK\"\n except Exception as exc:\n logger.explore(\n \"Path validation failed\", extra={\"path\": path, \"error\": str(exc)}\n )\n return False, str(exc)\n # #endregion validate_path\n # #region get_environments [TYPE Function]\n # @PURPOSE: Return all configured environments.\n def get_environments(self) -> list[Environment]:\n with belief_scope(\"ConfigManager.get_environments\"):\n return list(self.config.environments)\n # #endregion get_environments\n # #region has_environments [TYPE Function]\n # @PURPOSE: Check whether at least one environment exists in configuration.\n def has_environments(self) -> bool:\n with belief_scope(\"ConfigManager.has_environments\"):\n return len(self.config.environments) > 0\n # #endregion has_environments\n # #region get_environment [TYPE Function]\n # @PURPOSE: Resolve a configured environment by identifier.\n def get_environment(self, env_id: str) -> Environment | None:\n with belief_scope(\"ConfigManager.get_environment\", f\"env_id={env_id}\"):\n normalized = str(env_id or \"\").strip()\n if not normalized:\n return None\n for env in self.config.environments:\n if env.id == normalized or env.name == normalized:\n return env\n return None\n # #endregion get_environment\n # #region add_environment [TYPE Function]\n # @PURPOSE: Upsert environment by id into configuration and persist.\n def add_environment(self, env: Environment) -> AppConfig:\n with belief_scope(\"ConfigManager.add_environment\", f\"env_id={env.id}\"):\n existing_index = next(\n (\n i\n for i, item in enumerate(self.config.environments)\n if item.id == env.id\n ),\n None,\n )\n if env.is_default:\n for item in self.config.environments:\n item.is_default = False\n if existing_index is None:\n logger.reason(\"Appending new environment\", extra={\"env_id\": env.id})\n self.config.environments.append(env)\n else:\n logger.reason(\n \"Replacing existing environment during add\",\n extra={\"env_id\": env.id},\n )\n self.config.environments[existing_index] = env\n if len(self.config.environments) == 1 and not any(\n item.is_default for item in self.config.environments\n ):\n self.config.environments[0].is_default = True\n self.save()\n return self.config\n # #endregion add_environment\n # #region update_environment [TYPE Function]\n # @PURPOSE: Update existing environment by id and preserve masked password placeholder behavior.\n def update_environment(self, env_id: str, env: Environment) -> bool:\n with belief_scope(\"ConfigManager.update_environment\", f\"env_id={env_id}\"):\n for index, existing in enumerate(self.config.environments):\n if existing.id != env_id:\n continue\n update_data = env.model_dump()\n if update_data.get(\"password\") == \"********\":\n update_data[\"password\"] = existing.password\n updated = Environment.model_validate(update_data)\n if updated.is_default:\n for item in self.config.environments:\n item.is_default = False\n elif existing.is_default and not updated.is_default:\n updated.is_default = True\n self.config.environments[index] = updated\n logger.reason(\"Environment updated\", extra={\"env_id\": env_id})\n self.save()\n return True\n logger.explore(\n \"Environment update skipped; env not found\", extra={\"env_id\": env_id}\n )\n return False\n # #endregion update_environment\n # #region delete_environment [TYPE Function]\n # @PURPOSE: Delete environment by id and persist when deletion occurs.\n def delete_environment(self, env_id: str) -> bool:\n with belief_scope(\"ConfigManager.delete_environment\", f\"env_id={env_id}\"):\n before = len(self.config.environments)\n removed = [env for env in self.config.environments if env.id == env_id]\n self.config.environments = [\n env for env in self.config.environments if env.id != env_id\n ]\n if len(self.config.environments) == before:\n logger.explore(\n \"Environment delete skipped; env not found\",\n extra={\"env_id\": env_id},\n )\n return False\n if removed and removed[0].is_default and self.config.environments:\n self.config.environments[0].is_default = True\n if self.config.settings.default_environment_id == env_id:\n replacement = next(\n (env.id for env in self.config.environments if env.is_default), None\n )\n self.config.settings.default_environment_id = replacement\n logger.reason(\n \"Environment deleted\",\n extra={\"env_id\": env_id, \"remaining\": len(self.config.environments)},\n )\n self.save()\n return True\n # #endregion delete_environment\n# #endregion ConfigManager\n# #endregion ConfigManager\n" + }, + { + "contract_id": "_get_encryption_manager", + "contract_type": "Function", + "file_path": "backend/src/core/config_manager.py", + "start_line": 66, + "end_line": 85, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Lazy-init EncryptionManager for password encryption/decryption.", + "POST": "Returns EncryptionManager or None if ENCRYPTION_KEY is unavailable.", + "RATIONALE": "Encryption manager cannot be initialized before ensure_encryption_key()", + "SIDE_EFFECT": "May log a warning if key is missing." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region _get_encryption_manager [TYPE Function]\n # @PURPOSE: Lazy-init EncryptionManager for password encryption/decryption.\n # @POST Returns EncryptionManager or None if ENCRYPTION_KEY is unavailable.\n # @SIDE_EFFECT May log a warning if key is missing.\n # @RATIONALE Encryption manager cannot be initialized before ensure_encryption_key()\n # is called at startup. This lazy init allows early bootstrap paths\n # (legacy migration, test setup) to work without encryption.\n def _get_encryption_manager(self) -> EncryptionManager | None:\n if not hasattr(self, \"_encryption\"):\n try:\n self._encryption = EncryptionManager()\n except (RuntimeError, Exception) as exc:\n logger.reason(\n \"EncryptionManager unavailable; passwords stored in plaintext. \"\n \"Ensure ENCRYPTION_KEY is set for production.\",\n extra={\"error\": str(exc)},\n )\n self._encryption = None\n return self._encryption\n # #endregion _get_encryption_manager\n" + }, + { + "contract_id": "_encrypt_env_passwords", + "contract_type": "Function", + "file_path": "backend/src/core/config_manager.py", + "start_line": 87, + "end_line": 116, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Encrypt all environment passwords in the raw payload dict before DB persistence.", + "POST": "Password fields are encrypted in-place (skips masked/empty/already-encrypted).", + "PRE": "payload[\"environments\"] is a list of dicts with optional \"password\" keys.", + "SIDE_EFFECT": "Reads ENCRYPTION_KEY; logs warnings on failure." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region _encrypt_env_passwords [TYPE Function]\n # @PURPOSE: Encrypt all environment passwords in the raw payload dict before DB persistence.\n # @PRE payload[\"environments\"] is a list of dicts with optional \"password\" keys.\n # @POST Password fields are encrypted in-place (skips masked/empty/already-encrypted).\n # @SIDE_EFFECT Reads ENCRYPTION_KEY; logs warnings on failure.\n def _encrypt_env_passwords(self, payload: dict) -> None:\n encryption = self._get_encryption_manager()\n if encryption is None:\n return\n environments = payload.get(\"environments\", [])\n if not isinstance(environments, list):\n return\n for env in environments:\n pwd = env.get(\"password\", \"\")\n if not pwd or pwd == \"********\":\n continue\n # Skip if already encrypted (safe-decrypt check)\n try:\n encryption.decrypt(pwd)\n continue\n except Exception:\n pass\n try:\n env[\"password\"] = encryption.encrypt(pwd)\n except Exception as exc:\n logger.explore(\n \"Failed to encrypt environment password\",\n extra={\"error\": str(exc)},\n )\n # #endregion _encrypt_env_passwords\n" + }, + { + "contract_id": "_decrypt_env_passwords", + "contract_type": "Function", + "file_path": "backend/src/core/config_manager.py", + "start_line": 118, + "end_line": 133, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Decrypt all environment passwords in the AppConfig after loading from DB.", + "POST": "Password fields are decrypted in-place (skips plaintext legacy values).", + "PRE": "config.environments is populated from DB payload." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region _decrypt_env_passwords [TYPE Function]\n # @PURPOSE: Decrypt all environment passwords in the AppConfig after loading from DB.\n # @PRE config.environments is populated from DB payload.\n # @POST Password fields are decrypted in-place (skips plaintext legacy values).\n def _decrypt_env_passwords(self, config: AppConfig) -> None:\n encryption = self._get_encryption_manager()\n if encryption is None:\n return\n for env in config.environments:\n if not env.password:\n continue\n try:\n env.password = encryption.decrypt(env.password)\n except Exception:\n pass # Assume plaintext (legacy data or test fixture)\n # #endregion _decrypt_env_passwords\n" }, { "contract_id": "_apply_features_from_env", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 62, - "end_line": 93, + "start_line": 135, + "end_line": 166, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19663,8 +19875,8 @@ "contract_id": "_default_config", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 94, - "end_line": 102, + "start_line": 167, + "end_line": 175, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19680,8 +19892,8 @@ "contract_id": "_sync_raw_payload_from_config", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 103, - "end_line": 127, + "start_line": 176, + "end_line": 200, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19697,8 +19909,8 @@ "contract_id": "_load_from_legacy_file", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 128, - "end_line": 157, + "start_line": 201, + "end_line": 230, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19714,8 +19926,8 @@ "contract_id": "_get_record", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 158, - "end_line": 171, + "start_line": 231, + "end_line": 244, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19731,8 +19943,8 @@ "contract_id": "_load_config", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 172, - "end_line": 247, + "start_line": 245, + "end_line": 324, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19742,14 +19954,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " # #region _load_config [TYPE Function]\n # @PURPOSE: Load configuration from DB or perform one-time migration from legacy JSON.\n def _load_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._load_config\"):\n session = SessionLocal()\n try:\n record = self._get_record(session)\n if record and isinstance(record.payload, dict):\n logger.reason(\n \"Loading configuration from database\",\n extra={\"record_id\": record.id},\n )\n self.raw_payload = dict(record.payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self._sync_environment_records(session, config)\n session.commit()\n logger.reason(\n \"Database configuration validated successfully\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n return config\n logger.reason(\n \"Database configuration record missing; attempting legacy file migration\",\n extra={\"legacy_path\": str(self.config_path)},\n )\n legacy_payload = self._load_from_legacy_file()\n if legacy_payload:\n self.raw_payload = dict(legacy_payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n self._apply_features_from_env(config.settings)\n logger.reason(\n \"Legacy payload validated; persisting migrated configuration to database\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n self._save_config_to_db(config, session=session)\n return config\n logger.reason(\n \"No persisted config found; falling back to default configuration\"\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config, session=session)\n return config\n except (json.JSONDecodeError, TypeError, ValueError) as exc:\n logger.explore(\n \"Recoverable config load failure; falling back to default configuration\",\n extra={\"error\": str(exc), \"legacy_path\": str(self.config_path)},\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n return config\n except Exception as exc:\n logger.explore(\n \"Critical config load failure; re-raising persistence or validation error\",\n extra={\"error\": str(exc)},\n )\n raise\n finally:\n session.close()\n # #endregion _load_config\n" + "body": " # #region _load_config [TYPE Function]\n # @PURPOSE: Load configuration from DB or perform one-time migration from legacy JSON.\n def _load_config(self) -> AppConfig:\n with belief_scope(\"ConfigManager._load_config\"):\n session = SessionLocal()\n try:\n record = self._get_record(session)\n if record and isinstance(record.payload, dict):\n logger.reason(\n \"Loading configuration from database\",\n extra={\"record_id\": record.id},\n )\n self.raw_payload = dict(record.payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n # Decrypt environment passwords after loading from DB (see [SEC:C-1])\n self._decrypt_env_passwords(config)\n self._sync_environment_records(session, config)\n session.commit()\n logger.reason(\n \"Database configuration validated successfully\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n return config\n logger.reason(\n \"Database configuration record missing; attempting legacy file migration\",\n extra={\"legacy_path\": str(self.config_path)},\n )\n legacy_payload = self._load_from_legacy_file()\n if legacy_payload:\n self.raw_payload = dict(legacy_payload)\n config = AppConfig.model_validate(\n {\n \"environments\": self.raw_payload.get(\"environments\", []),\n \"settings\": self.raw_payload.get(\"settings\", {}),\n }\n )\n # Legacy config is plaintext — decrypt is a no-op but safe\n self._decrypt_env_passwords(config)\n self._apply_features_from_env(config.settings)\n logger.reason(\n \"Legacy payload validated; persisting migrated configuration to database\",\n extra={\n \"environments_count\": len(config.environments),\n \"payload_keys\": sorted(self.raw_payload.keys()),\n },\n )\n self._save_config_to_db(config, session=session)\n return config\n logger.reason(\n \"No persisted config found; falling back to default configuration\"\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n self._save_config_to_db(config, session=session)\n return config\n except (json.JSONDecodeError, TypeError, ValueError) as exc:\n logger.explore(\n \"Recoverable config load failure; falling back to default configuration\",\n extra={\"error\": str(exc), \"legacy_path\": str(self.config_path)},\n )\n config = self._default_config()\n self.raw_payload = config.model_dump()\n return config\n except Exception as exc:\n logger.explore(\n \"Critical config load failure; re-raising persistence or validation error\",\n extra={\"error\": str(exc)},\n )\n raise\n finally:\n session.close()\n # #endregion _load_config\n" }, { "contract_id": "_sync_environment_records", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 248, - "end_line": 289, + "start_line": 325, + "end_line": 366, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19765,8 +19977,8 @@ "contract_id": "_delete_stale_environment_records", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 290, - "end_line": 314, + "start_line": 367, + "end_line": 391, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19785,25 +19997,26 @@ "contract_id": "_save_config_to_db", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 315, - "end_line": 356, + "start_line": 392, + "end_line": 439, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "Persist provided AppConfig into the global DB configuration record." + "BRIEF": "Persist provided AppConfig into the global DB configuration record.", + "SIDE_EFFECT": "Encrypts environment passwords for at-rest security (see [SEC:C-1]);" }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " # #region _save_config_to_db [TYPE Function]\n # @PURPOSE: Persist provided AppConfig into the global DB configuration record.\n def _save_config_to_db(\n self, config: AppConfig, session: Session | None = None\n ) -> None:\n with belief_scope(\"ConfigManager._save_config_to_db\"):\n owns_session = session is None\n db = session or SessionLocal()\n try:\n self.config = config\n payload = self._sync_raw_payload_from_config()\n record = self._get_record(db)\n if record is None:\n logger.reason(\"Creating new global app config record\")\n record = AppConfigRecord(id=\"global\", payload=payload)\n db.add(record)\n else:\n logger.reason(\n \"Updating existing global app config record\",\n extra={\"record_id\": record.id},\n )\n record.payload = payload\n self._sync_environment_records(db, config)\n self._delete_stale_environment_records(db, config)\n db.commit()\n logger.reason(\n \"Configuration persisted to database\",\n extra={\n \"environments_count\": len(\n payload.get(\"environments\", []) or []\n ),\n \"payload_keys\": sorted(payload.keys()),\n },\n )\n except Exception:\n db.rollback()\n logger.explore(\"Database save failed; transaction rolled back\")\n raise\n finally:\n if owns_session:\n db.close()\n # #endregion _save_config_to_db\n" + "body": " # #region _save_config_to_db [TYPE Function]\n # @PURPOSE: Persist provided AppConfig into the global DB configuration record.\n # @SIDE_EFFECT Encrypts environment passwords for at-rest security (see [SEC:C-1]);\n # restores plaintext after save so in-memory config stays usable.\n def _save_config_to_db(\n self, config: AppConfig, session: Session | None = None\n ) -> None:\n with belief_scope(\"ConfigManager._save_config_to_db\"):\n owns_session = session is None\n db = session or SessionLocal()\n try:\n self.config = config\n payload = self._sync_raw_payload_from_config()\n # Encrypt passwords for at-rest security before DB write\n self._encrypt_env_passwords(payload)\n record = self._get_record(db)\n if record is None:\n logger.reason(\"Creating new global app config record\")\n record = AppConfigRecord(id=\"global\", payload=payload)\n db.add(record)\n else:\n logger.reason(\n \"Updating existing global app config record\",\n extra={\"record_id\": record.id},\n )\n record.payload = payload\n self._sync_environment_records(db, config)\n self._delete_stale_environment_records(db, config)\n db.commit()\n logger.reason(\n \"Configuration persisted to database\",\n extra={\n \"environments_count\": len(\n payload.get(\"environments\", []) or []\n ),\n \"payload_keys\": sorted(payload.keys()),\n },\n )\n # Restore plaintext passwords in config after save\n self._decrypt_env_passwords(config)\n except Exception:\n db.rollback()\n logger.explore(\"Database save failed; transaction rolled back\")\n raise\n finally:\n if owns_session:\n db.close()\n # #endregion _save_config_to_db\n" }, { "contract_id": "save", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 357, - "end_line": 363, + "start_line": 440, + "end_line": 446, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19819,8 +20032,8 @@ "contract_id": "get_config", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 364, - "end_line": 369, + "start_line": 447, + "end_line": 452, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19836,8 +20049,8 @@ "contract_id": "get_payload", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 370, - "end_line": 375, + "start_line": 453, + "end_line": 458, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19853,8 +20066,8 @@ "contract_id": "save_config", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 376, - "end_line": 406, + "start_line": 459, + "end_line": 489, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19870,8 +20083,8 @@ "contract_id": "update_global_settings", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 407, - "end_line": 415, + "start_line": 490, + "end_line": 498, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19887,8 +20100,8 @@ "contract_id": "validate_path", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 416, - "end_line": 438, + "start_line": 499, + "end_line": 521, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19904,8 +20117,8 @@ "contract_id": "get_environments", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 439, - "end_line": 444, + "start_line": 522, + "end_line": 527, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19921,8 +20134,8 @@ "contract_id": "has_environments", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 445, - "end_line": 450, + "start_line": 528, + "end_line": 533, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19938,8 +20151,8 @@ "contract_id": "get_environment", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 451, - "end_line": 462, + "start_line": 534, + "end_line": 545, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19955,8 +20168,8 @@ "contract_id": "add_environment", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 463, - "end_line": 493, + "start_line": 546, + "end_line": 576, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19972,8 +20185,8 @@ "contract_id": "update_environment", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 494, - "end_line": 518, + "start_line": 577, + "end_line": 601, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -19989,8 +20202,8 @@ "contract_id": "delete_environment", "contract_type": "Function", "file_path": "backend/src/core/config_manager.py", - "start_line": 519, - "end_line": 547, + "start_line": 602, + "end_line": 630, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20444,7 +20657,7 @@ "contract_type": "Module", "file_path": "backend/src/core/database.py", "start_line": 1, - "end_line": 742, + "end_line": 776, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20470,7 +20683,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region DatabaseModule [C:3] [TYPE Module] [SEMANTICS sqlalchemy, connection, session]\n#\n# @BRIEF Configures database connection and session management (PostgreSQL-first).\n# @LAYER Infrastructure\n# @RELATION DEPENDS_ON -> [MappingModels]\n# @RELATION DEPENDS_ON -> [auth_config]\n#\n# @INVARIANT A single engine instance is used for the entire application.\n\nimport os\nfrom pathlib import Path\n\nfrom sqlalchemy import create_engine, inspect, text\nfrom sqlalchemy.orm import sessionmaker\n\n# Import models to ensure they're registered with Base\nfrom ..models import (\n api_key as _api_key_models, # noqa: F401\n assistant as _assistant_models, # noqa: F401\n auth as _auth_models, # noqa: F401\n clean_release as _clean_release_models, # noqa: F401\n config as _config_models, # noqa: F401\n dataset_review as _dataset_review_models, # noqa: F401\n llm as _llm_models, # noqa: F401\n maintenance as _maintenance_models, # noqa: F401\n profile as _profile_models, # noqa: F401\n task as _task_models, # noqa: F401\n)\nfrom ..models.mapping import Base\nfrom .auth.config import auth_config\nfrom .logger import belief_scope, logger\n\n# #region BASE_DIR [C:1] [TYPE Variable]\n# @BRIEF Base directory for the backend.\nBASE_DIR = Path(__file__).resolve().parent.parent.parent\n# #endregion BASE_DIR\n\n# #region DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the main application database. Read from env; dev fallback only.\n# @RATIONALE DATABASE_URL reads from env (DATABASE_URL or POSTGRES_URL).\n# Crashes at import if unset in production; provides localhost fallback in dev.\n# @REJECTED Hardcoded postgres:postgres@localhost in source code rejected — exposes\n# database credentials in version control (Class 1 security violation).\n_DATABASE_URL = os.getenv(\"DATABASE_URL\") or os.getenv(\"POSTGRES_URL\")\nif _DATABASE_URL:\n DATABASE_URL = _DATABASE_URL\nelif os.getenv(\"DEV_MODE\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}:\n DATABASE_URL = \"postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools\"\nelse:\n raise RuntimeError(\n \"DATABASE_URL (or POSTGRES_URL) environment variable is required. \"\n \"Set it before starting the server.\"\n )\n# #endregion DATABASE_URL\n\n# #region TASKS_DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the tasks execution database.\n# Defaults to DATABASE_URL to keep task logs in the same PostgreSQL instance.\nTASKS_DATABASE_URL = os.getenv(\"TASKS_DATABASE_URL\", DATABASE_URL)\n# #endregion TASKS_DATABASE_URL\n\n# #region AUTH_DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the authentication database.\nAUTH_DATABASE_URL = os.getenv(\"AUTH_DATABASE_URL\", auth_config.AUTH_DATABASE_URL)\n# #endregion AUTH_DATABASE_URL\n\n\n# #region engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for mappings database.\n# @SIDE_EFFECT Creates database engine and manages connection pool.\ndef _build_engine(db_url: str):\n with belief_scope(\"_build_engine\"):\n if db_url.startswith(\"sqlite\"):\n return create_engine(db_url, connect_args={\"check_same_thread\": False})\n return create_engine(db_url, pool_pre_ping=True)\n\n\nengine = _build_engine(DATABASE_URL)\n# #endregion engine\n\n# #region tasks_engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for tasks database.\ntasks_engine = _build_engine(TASKS_DATABASE_URL)\n# #endregion tasks_engine\n\n# #region auth_engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for authentication database.\nauth_engine = _build_engine(AUTH_DATABASE_URL)\n# #endregion auth_engine\n\n# #region SessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the main mappings database.\n# @PRE engine is initialized.\nSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)\n# #endregion SessionLocal\n\n# #region TasksSessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the tasks execution database.\n# @PRE tasks_engine is initialized.\nTasksSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=tasks_engine)\n# #endregion TasksSessionLocal\n\n# #region AuthSessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the authentication database.\n# @PRE auth_engine is initialized.\nAuthSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=auth_engine)\n# #endregion AuthSessionLocal\n\n\n# #region _ensure_user_dashboard_preferences_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for user_dashboard_preferences table.\n# @PRE bind_engine points to application database where profile table is stored.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_user_dashboard_preferences_columns(bind_engine):\n with belief_scope(\"_ensure_user_dashboard_preferences_columns\"):\n table_name = \"user_dashboard_preferences\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"git_username\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN git_username VARCHAR\"\n )\n if \"git_email\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN git_email VARCHAR\"\n )\n if \"git_personal_access_token_encrypted\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN git_personal_access_token_encrypted VARCHAR\"\n )\n if \"start_page\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN start_page VARCHAR NOT NULL DEFAULT 'dashboards'\"\n )\n if \"auto_open_task_drawer\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN auto_open_task_drawer BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n if \"dashboards_table_density\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN dashboards_table_density VARCHAR NOT NULL DEFAULT 'comfortable'\"\n )\n if \"show_only_slug_dashboards\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN show_only_slug_dashboards BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"Profile preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_user_dashboard_preferences_columns\n\n\n# #region _ensure_user_dashboard_preferences_health_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for user_dashboard_preferences table (health fields).\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_user_dashboard_preferences_health_columns(bind_engine):\n with belief_scope(\"_ensure_user_dashboard_preferences_health_columns\"):\n table_name = \"user_dashboard_preferences\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"telegram_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN telegram_id VARCHAR\"\n )\n if \"email_address\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN email_address VARCHAR\"\n )\n if \"notify_on_fail\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN notify_on_fail BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"Profile health preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_user_dashboard_preferences_health_columns\n\n\n# #region _ensure_llm_validation_results_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for llm_validation_results table.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_llm_validation_results_columns(bind_engine):\n with belief_scope(\"_ensure_llm_validation_results_columns\"):\n table_name = \"llm_validation_results\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"task_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE llm_validation_results ADD COLUMN task_id VARCHAR\"\n )\n if \"environment_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE llm_validation_results ADD COLUMN environment_id VARCHAR\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"ValidationRecord additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_llm_validation_results_columns\n\n\n# #region _ensure_git_server_configs_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for git_server_configs table.\n# @PRE bind_engine points to application database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_git_server_configs_columns(bind_engine):\n with belief_scope(\"_ensure_git_server_configs_columns\"):\n table_name = \"git_server_configs\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"default_branch\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE git_server_configs ADD COLUMN default_branch VARCHAR NOT NULL DEFAULT 'main'\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"GitServerConfig preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_git_server_configs_columns\n\n\n# #region _ensure_auth_users_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for auth users table.\n# @PRE bind_engine points to authentication database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [auth_engine]\ndef _ensure_auth_users_columns(bind_engine):\n with belief_scope(\"_ensure_auth_users_columns\"):\n table_name = \"users\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"full_name\" not in existing_columns:\n alter_statements.append(\"ALTER TABLE users ADD COLUMN full_name VARCHAR\")\n if \"is_ad_user\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE users ADD COLUMN is_ad_user BOOLEAN NOT NULL DEFAULT FALSE\"\n )\n\n if not alter_statements:\n logger.reason(\n \"Auth users schema already up to date\",\n extra={\"table\": table_name, \"columns\": sorted(existing_columns)},\n )\n return\n\n logger.reason(\n \"Applying additive auth users schema migration\",\n extra={\"table\": table_name, \"statements\": alter_statements},\n )\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n logger.reason(\n \"Auth users schema migration completed\",\n extra={\n \"table\": table_name,\n \"added_columns\": [\n stmt.split(\" ADD COLUMN \", 1)[1].split()[0]\n for stmt in alter_statements\n ],\n },\n )\n except Exception as migration_error:\n logger.explore(\n \"Auth users additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n raise\n\n\n# #endregion _ensure_auth_users_columns\n\n\n# #region _ensure_filter_source_enum_values [C:3] [TYPE Function]\n# @BRIEF Adds missing FilterSource enum values to the PostgreSQL native filtersource type.\n# @PRE bind_engine points to application database with imported_filters table.\n# @POST New enum values are available without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_filter_source_enum_values(bind_engine):\n with belief_scope(\"_ensure_filter_source_enum_values\"):\n try:\n with bind_engine.connect() as connection:\n # Check if the native enum type exists\n result = connection.execute(\n text(\n \"SELECT t.typname FROM pg_type t \"\n \"JOIN pg_namespace n ON t.typnamespace = n.oid \"\n \"WHERE t.typname = 'filtersource' AND n.nspname = 'public'\"\n )\n )\n if result.fetchone() is None:\n logger.reason(\n \"filtersource enum type does not exist yet; skipping migration\"\n )\n return\n\n # Get existing enum values\n result = connection.execute(\n text(\n \"SELECT e.enumlabel FROM pg_enum e \"\n \"JOIN pg_type t ON e.enumtypid = t.oid \"\n \"WHERE t.typname = 'filtersource' \"\n \"ORDER BY e.enumsortorder\"\n )\n )\n existing_values = {row[0] for row in result.fetchall()}\n\n required_values = [\"SUPERSET_PERMALINK\", \"SUPERSET_NATIVE_FILTERS_KEY\"]\n missing_values = [\n v for v in required_values if v not in existing_values\n ]\n\n if not missing_values:\n logger.reason(\n \"filtersource enum already up to date\",\n extra={\"existing\": sorted(existing_values)},\n )\n return\n\n logger.reason(\n \"Adding missing values to filtersource enum\",\n extra={\"missing\": missing_values},\n )\n for value in missing_values:\n connection.execute(\n text(\n f\"ALTER TYPE filtersource ADD VALUE IF NOT EXISTS '{value}'\"\n )\n )\n connection.commit()\n logger.reason(\n \"filtersource enum migration completed\",\n extra={\"added\": missing_values},\n )\n except Exception as migration_error:\n logger.explore(\n \"FilterSource enum additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_filter_source_enum_values\n\n\n# #region _ensure_dataset_review_session_columns [C:4] [TYPE Function]\n# @BRIEF Apply additive schema upgrades for dataset review persistence required by optimistic-lock and recovery metadata semantics.\n# @PRE bind_engine points to the application database where dataset review tables are stored.\n# @POST Missing additive columns across legacy dataset review tables are created without removing existing data.\n# @SIDE_EFFECT Executes ALTER TABLE statements against dataset review tables in the application database.\n# @RELATION DEPENDS_ON -> [DatasetReviewSession]\n# @RELATION DEPENDS_ON -> [ImportedFilter]\ndef _ensure_translation_jobs_columns(bind_engine):\n with belief_scope(\"_ensure_translation_jobs_columns\"):\n table_name = \"translation_jobs\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n if \"environment_id\" not in existing_columns:\n try:\n with bind_engine.begin() as connection:\n connection.execute(\n text(\n \"ALTER TABLE translation_jobs \"\n \"ADD COLUMN environment_id VARCHAR\"\n )\n )\n logger.reflect(\n \"Added environment_id column to translation_jobs\",\n )\n except Exception as migration_error:\n logger.explore(\n \"Failed to add environment_id to translation_jobs\",\n extra={\"error\": str(migration_error)},\n )\n raise\n\n if \"target_database_id\" not in existing_columns:\n try:\n with bind_engine.begin() as connection:\n connection.execute(\n text(\n \"ALTER TABLE translation_jobs \"\n \"ADD COLUMN target_database_id VARCHAR\"\n )\n )\n logger.reflect(\n \"Added target_database_id column to translation_jobs\",\n )\n except Exception as migration_error:\n logger.explore(\n \"Failed to add target_database_id to translation_jobs\",\n extra={\"error\": str(migration_error)},\n )\n\n\ndef _ensure_dataset_review_session_columns(bind_engine):\n with belief_scope(\"_ensure_dataset_review_session_columns\"):\n inspector = inspect(bind_engine)\n existing_tables = set(inspector.get_table_names())\n migration_plan = {\n \"dataset_review_sessions\": [\n (\n \"version\",\n \"ALTER TABLE dataset_review_sessions \"\n \"ADD COLUMN version INTEGER NOT NULL DEFAULT 0\",\n )\n ],\n \"imported_filters\": [\n (\n \"raw_value_masked\",\n \"ALTER TABLE imported_filters \"\n \"ADD COLUMN raw_value_masked BOOLEAN NOT NULL DEFAULT FALSE\",\n )\n ],\n }\n\n for table_name, planned_columns in migration_plan.items():\n if table_name not in existing_tables:\n logger.reason(\n \"Dataset review table does not exist yet; skipping additive schema migration\",\n extra={\"table\": table_name},\n )\n continue\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n alter_statements = [\n statement\n for column_name, statement in planned_columns\n if column_name not in existing_columns\n ]\n\n if not alter_statements:\n logger.reason(\n \"Dataset review table schema already up to date\",\n extra={\"table\": table_name, \"columns\": sorted(existing_columns)},\n )\n continue\n\n logger.reason(\n \"Applying additive dataset review schema migration\",\n extra={\"table\": table_name, \"statements\": alter_statements},\n )\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n logger.reflect(\n \"Dataset review additive schema migration completed\",\n extra={\n \"table\": table_name,\n \"added_columns\": [\n stmt.split(\" ADD COLUMN \", 1)[1].split()[0]\n for stmt in alter_statements\n ],\n },\n )\n except Exception as migration_error:\n logger.explore(\n \"Dataset review additive schema migration failed\",\n extra={\"table\": table_name, \"error\": str(migration_error)},\n )\n raise\n\n\n# #endregion _ensure_dataset_review_session_columns\n\n\n# #region _ensure_translation_schedules_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for translation_schedules table.\n# @PRE bind_engine points to application database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_translation_schedules_columns(bind_engine):\n with belief_scope(\"_ensure_translation_schedules_columns\"):\n table_name = \"translation_schedules\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"execution_mode\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE translation_schedules \"\n \"ADD COLUMN execution_mode VARCHAR NOT NULL DEFAULT 'full'\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"TranslationSchedule additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_translation_schedules_columns\n\n\n# #region _ensure_dictionary_entries_columns [C:3] [TYPE Function]\n# @BRIEF Additive migration for dictionary_entries origin tracking columns.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_dictionary_entries_columns(bind_engine):\n with belief_scope(\"_ensure_dictionary_entries_columns\"):\n table_name = \"dictionary_entries\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"origin_run_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_run_id VARCHAR\"\n )\n if \"origin_row_key\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_row_key VARCHAR\"\n )\n if \"origin_user_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_user_id VARCHAR\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"DictionaryEntry additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_dictionary_entries_columns\n\n\n# #region init_db [C:3] [TYPE Function]\n# @BRIEF Initializes the database by creating all tables.\n# @PRE engine, tasks_engine and auth_engine are initialized.\n# @POST Database tables created in all databases.\n# @SIDE_EFFECT Creates physical database files if they don't exist.\n# @RELATION CALLS -> [_ensure_filter_source_enum_values]\n# @RELATION CALLS -> [_ensure_dataset_review_session_columns]\n# @RELATION CALLS -> [_ensure_dictionary_entries_columns]\ndef init_db():\n with belief_scope(\"init_db\"):\n Base.metadata.create_all(bind=engine)\n Base.metadata.create_all(bind=tasks_engine)\n Base.metadata.create_all(bind=auth_engine)\n _ensure_user_dashboard_preferences_columns(engine)\n _ensure_llm_validation_results_columns(engine)\n _ensure_user_dashboard_preferences_health_columns(engine)\n _ensure_git_server_configs_columns(engine)\n _ensure_auth_users_columns(auth_engine)\n _ensure_filter_source_enum_values(engine)\n _ensure_dataset_review_session_columns(engine)\n _ensure_translation_jobs_columns(engine)\n _ensure_translation_schedules_columns(engine)\n _ensure_dictionary_entries_columns(engine)\n\n\n# #endregion init_db\n\n\n# #region get_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting a database session.\n# @PRE SessionLocal is initialized.\n# @POST Session is closed after use.\n# @RELATION DEPENDS_ON -> [SessionLocal]\ndef get_db():\n with belief_scope(\"get_db\"):\n db = SessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_db\n\n\n# #region get_tasks_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting a tasks database session.\n# @PRE TasksSessionLocal is initialized.\n# @POST Session is closed after use.\n# @RELATION DEPENDS_ON -> [TasksSessionLocal]\ndef get_tasks_db():\n with belief_scope(\"get_tasks_db\"):\n db = TasksSessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_tasks_db\n\n\n# #region get_auth_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting an authentication database session.\n# @PRE AuthSessionLocal is initialized.\n# @POST Session is closed after use.\n# @DATA_CONTRACT None -> Output[EXT:Library:sqlalchemy.orm.Session]\n# @RELATION DEPENDS_ON -> [AuthSessionLocal]\ndef get_auth_db():\n with belief_scope(\"get_auth_db\"):\n db = AuthSessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_auth_db\n\n# #endregion DatabaseModule\n" + "body": "# #region DatabaseModule [C:3] [TYPE Module] [SEMANTICS sqlalchemy, connection, session]\n#\n# @BRIEF Configures database connection and session management (PostgreSQL-first).\n# @LAYER Infrastructure\n# @RELATION DEPENDS_ON -> [MappingModels]\n# @RELATION DEPENDS_ON -> [auth_config]\n#\n# @INVARIANT A single engine instance is used for the entire application.\n\nimport os\nfrom pathlib import Path\n\nfrom sqlalchemy import create_engine, inspect, text\nfrom sqlalchemy.orm import sessionmaker\n\n# Import models to ensure they're registered with Base\nfrom ..models import (\n api_key as _api_key_models, # noqa: F401\n assistant as _assistant_models, # noqa: F401\n auth as _auth_models, # noqa: F401\n clean_release as _clean_release_models, # noqa: F401\n config as _config_models, # noqa: F401\n dataset_review as _dataset_review_models, # noqa: F401\n llm as _llm_models, # noqa: F401\n maintenance as _maintenance_models, # noqa: F401\n profile as _profile_models, # noqa: F401\n task as _task_models, # noqa: F401\n)\nfrom ..models.mapping import Base\nfrom .auth.config import auth_config\nfrom .logger import belief_scope, logger\n\n# #region BASE_DIR [C:1] [TYPE Variable]\n# @BRIEF Base directory for the backend.\nBASE_DIR = Path(__file__).resolve().parent.parent.parent\n# #endregion BASE_DIR\n\n# #region DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the main application database. Read from env; crashes if unset.\n# @RATIONALE DATABASE_URL reads from env (DATABASE_URL or POSTGRES_URL).\n# Crashes at import if unset. DEV_MODE fallback removed in [SEC:C-4].\n# @REJECTED Hardcoded postgres:postgres@localhost in source code rejected — exposes\n# database credentials in version control (Class 1 security violation).\n# DEV_MODE fallback removed — same violation via env toggle.\nDATABASE_URL = os.getenv(\"DATABASE_URL\") or os.getenv(\"POSTGRES_URL\")\nif not DATABASE_URL:\n raise RuntimeError(\n \"DATABASE_URL (or POSTGRES_URL) environment variable is required. \"\n \"Set it before starting the server. \"\n \"For local development, create a .env file or use docker-compose.yml.\"\n )\n# #endregion DATABASE_URL\n\n# #region TASKS_DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the tasks execution database.\n# Defaults to DATABASE_URL to keep task logs in the same PostgreSQL instance.\nTASKS_DATABASE_URL = os.getenv(\"TASKS_DATABASE_URL\", DATABASE_URL)\n# #endregion TASKS_DATABASE_URL\n\n# #region AUTH_DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the authentication database.\nAUTH_DATABASE_URL = os.getenv(\"AUTH_DATABASE_URL\", auth_config.AUTH_DATABASE_URL)\n# #endregion AUTH_DATABASE_URL\n\n\n# #region engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for mappings database.\n# @SIDE_EFFECT Creates database engine and manages connection pool.\ndef _build_engine(db_url: str):\n with belief_scope(\"_build_engine\"):\n if db_url.startswith(\"sqlite\"):\n return create_engine(db_url, connect_args={\"check_same_thread\": False})\n return create_engine(db_url, pool_pre_ping=True)\n\n\nengine = _build_engine(DATABASE_URL)\n# #endregion engine\n\n# #region tasks_engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for tasks database.\ntasks_engine = _build_engine(TASKS_DATABASE_URL)\n# #endregion tasks_engine\n\n# #region auth_engine [C:1] [TYPE Variable]\n# @BRIEF SQLAlchemy engine for authentication database.\nauth_engine = _build_engine(AUTH_DATABASE_URL)\n# #endregion auth_engine\n\n# #region SessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the main mappings database.\n# @PRE engine is initialized.\nSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)\n# #endregion SessionLocal\n\n# #region TasksSessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the tasks execution database.\n# @PRE tasks_engine is initialized.\nTasksSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=tasks_engine)\n# #endregion TasksSessionLocal\n\n# #region AuthSessionLocal [C:1] [TYPE Class]\n# @BRIEF A session factory for the authentication database.\n# @PRE auth_engine is initialized.\nAuthSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=auth_engine)\n# #endregion AuthSessionLocal\n\n\n# #region _ensure_user_dashboard_preferences_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for user_dashboard_preferences table.\n# @PRE bind_engine points to application database where profile table is stored.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_user_dashboard_preferences_columns(bind_engine):\n with belief_scope(\"_ensure_user_dashboard_preferences_columns\"):\n table_name = \"user_dashboard_preferences\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"git_username\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN git_username VARCHAR\"\n )\n if \"git_email\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN git_email VARCHAR\"\n )\n if \"git_personal_access_token_encrypted\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN git_personal_access_token_encrypted VARCHAR\"\n )\n if \"start_page\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN start_page VARCHAR NOT NULL DEFAULT 'dashboards'\"\n )\n if \"auto_open_task_drawer\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN auto_open_task_drawer BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n if \"dashboards_table_density\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN dashboards_table_density VARCHAR NOT NULL DEFAULT 'comfortable'\"\n )\n if \"show_only_slug_dashboards\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences \"\n \"ADD COLUMN show_only_slug_dashboards BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"Profile preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_user_dashboard_preferences_columns\n\n\n# #region _ensure_user_dashboard_preferences_health_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for user_dashboard_preferences table (health fields).\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_user_dashboard_preferences_health_columns(bind_engine):\n with belief_scope(\"_ensure_user_dashboard_preferences_health_columns\"):\n table_name = \"user_dashboard_preferences\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"telegram_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN telegram_id VARCHAR\"\n )\n if \"email_address\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN email_address VARCHAR\"\n )\n if \"notify_on_fail\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE user_dashboard_preferences ADD COLUMN notify_on_fail BOOLEAN NOT NULL DEFAULT TRUE\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"Profile health preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_user_dashboard_preferences_health_columns\n\n\n# #region _ensure_llm_validation_results_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for llm_validation_results table.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_llm_validation_results_columns(bind_engine):\n with belief_scope(\"_ensure_llm_validation_results_columns\"):\n table_name = \"llm_validation_results\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"task_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE llm_validation_results ADD COLUMN task_id VARCHAR\"\n )\n if \"environment_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE llm_validation_results ADD COLUMN environment_id VARCHAR\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"ValidationRecord additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_llm_validation_results_columns\n\n\n# #region _ensure_git_server_configs_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for git_server_configs table.\n# @PRE bind_engine points to application database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_git_server_configs_columns(bind_engine):\n with belief_scope(\"_ensure_git_server_configs_columns\"):\n table_name = \"git_server_configs\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"default_branch\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE git_server_configs ADD COLUMN default_branch VARCHAR NOT NULL DEFAULT 'main'\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"GitServerConfig preference additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_git_server_configs_columns\n\n\n# #region _ensure_auth_users_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for auth users table.\n# @PRE bind_engine points to authentication database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [auth_engine]\ndef _ensure_auth_users_columns(bind_engine):\n with belief_scope(\"_ensure_auth_users_columns\"):\n table_name = \"users\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"full_name\" not in existing_columns:\n alter_statements.append(\"ALTER TABLE users ADD COLUMN full_name VARCHAR\")\n if \"is_ad_user\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE users ADD COLUMN is_ad_user BOOLEAN NOT NULL DEFAULT FALSE\"\n )\n\n if not alter_statements:\n logger.reason(\n \"Auth users schema already up to date\",\n extra={\"table\": table_name, \"columns\": sorted(existing_columns)},\n )\n return\n\n logger.reason(\n \"Applying additive auth users schema migration\",\n extra={\"table\": table_name, \"statements\": alter_statements},\n )\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n logger.reason(\n \"Auth users schema migration completed\",\n extra={\n \"table\": table_name,\n \"added_columns\": [\n stmt.split(\" ADD COLUMN \", 1)[1].split()[0]\n for stmt in alter_statements\n ],\n },\n )\n except Exception as migration_error:\n logger.explore(\n \"Auth users additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n raise\n\n\n# #endregion _ensure_auth_users_columns\n\n\n# #region _ensure_roles_is_admin_column [C:3] [TYPE Function]\n# @BRIEF Add is_admin column to roles table if missing (additive migration).\n# @PRE Database connection is active.\n# @POST roles.is_admin column exists (BOOLEAN, default FALSE).\n# @SIDE_EFFECT Executes ALTER TABLE on the auth database.\ndef _ensure_roles_is_admin_column(bind_engine):\n with belief_scope(\"_ensure_roles_is_admin_column\"):\n table_name = \"roles\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n if \"is_admin\" in existing_columns:\n logger.reason(\"roles.is_admin column already exists\")\n return\n\n alter = \"ALTER TABLE roles ADD COLUMN is_admin BOOLEAN NOT NULL DEFAULT FALSE\"\n try:\n with bind_engine.begin() as connection:\n connection.execute(text(alter))\n connection.execute(text(\"UPDATE roles SET is_admin = true WHERE name = 'Admin'\"))\n logger.reason(\"Added roles.is_admin column, updated Admin roles\", extra={\"statement\": alter})\n except Exception as migration_error:\n logger.explore(\n \"roles.is_admin additive migration failed\",\n extra={\"error\": str(migration_error)},\n )\n raise\n# #endregion _ensure_roles_is_admin_column\n\n\n# #region _ensure_filter_source_enum_values [C:3] [TYPE Function]\n# @BRIEF Adds missing FilterSource enum values to the PostgreSQL native filtersource type.\n# @PRE bind_engine points to application database with imported_filters table.\n# @POST New enum values are available without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_filter_source_enum_values(bind_engine):\n with belief_scope(\"_ensure_filter_source_enum_values\"):\n try:\n with bind_engine.connect() as connection:\n # Check if the native enum type exists\n result = connection.execute(\n text(\n \"SELECT t.typname FROM pg_type t \"\n \"JOIN pg_namespace n ON t.typnamespace = n.oid \"\n \"WHERE t.typname = 'filtersource' AND n.nspname = 'public'\"\n )\n )\n if result.fetchone() is None:\n logger.reason(\n \"filtersource enum type does not exist yet; skipping migration\"\n )\n return\n\n # Get existing enum values\n result = connection.execute(\n text(\n \"SELECT e.enumlabel FROM pg_enum e \"\n \"JOIN pg_type t ON e.enumtypid = t.oid \"\n \"WHERE t.typname = 'filtersource' \"\n \"ORDER BY e.enumsortorder\"\n )\n )\n existing_values = {row[0] for row in result.fetchall()}\n\n required_values = [\"SUPERSET_PERMALINK\", \"SUPERSET_NATIVE_FILTERS_KEY\"]\n missing_values = [\n v for v in required_values if v not in existing_values\n ]\n\n if not missing_values:\n logger.reason(\n \"filtersource enum already up to date\",\n extra={\"existing\": sorted(existing_values)},\n )\n return\n\n logger.reason(\n \"Adding missing values to filtersource enum\",\n extra={\"missing\": missing_values},\n )\n for value in missing_values:\n connection.execute(\n text(\n f\"ALTER TYPE filtersource ADD VALUE IF NOT EXISTS '{value}'\"\n )\n )\n connection.commit()\n logger.reason(\n \"filtersource enum migration completed\",\n extra={\"added\": missing_values},\n )\n except Exception as migration_error:\n logger.explore(\n \"FilterSource enum additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_filter_source_enum_values\n\n\n# #region _ensure_dataset_review_session_columns [C:4] [TYPE Function]\n# @BRIEF Apply additive schema upgrades for dataset review persistence required by optimistic-lock and recovery metadata semantics.\n# @PRE bind_engine points to the application database where dataset review tables are stored.\n# @POST Missing additive columns across legacy dataset review tables are created without removing existing data.\n# @SIDE_EFFECT Executes ALTER TABLE statements against dataset review tables in the application database.\n# @RELATION DEPENDS_ON -> [DatasetReviewSession]\n# @RELATION DEPENDS_ON -> [ImportedFilter]\ndef _ensure_translation_jobs_columns(bind_engine):\n with belief_scope(\"_ensure_translation_jobs_columns\"):\n table_name = \"translation_jobs\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n if \"environment_id\" not in existing_columns:\n try:\n with bind_engine.begin() as connection:\n connection.execute(\n text(\n \"ALTER TABLE translation_jobs \"\n \"ADD COLUMN environment_id VARCHAR\"\n )\n )\n logger.reflect(\n \"Added environment_id column to translation_jobs\",\n )\n except Exception as migration_error:\n logger.explore(\n \"Failed to add environment_id to translation_jobs\",\n extra={\"error\": str(migration_error)},\n )\n raise\n\n if \"target_database_id\" not in existing_columns:\n try:\n with bind_engine.begin() as connection:\n connection.execute(\n text(\n \"ALTER TABLE translation_jobs \"\n \"ADD COLUMN target_database_id VARCHAR\"\n )\n )\n logger.reflect(\n \"Added target_database_id column to translation_jobs\",\n )\n except Exception as migration_error:\n logger.explore(\n \"Failed to add target_database_id to translation_jobs\",\n extra={\"error\": str(migration_error)},\n )\n\n\ndef _ensure_dataset_review_session_columns(bind_engine):\n with belief_scope(\"_ensure_dataset_review_session_columns\"):\n inspector = inspect(bind_engine)\n existing_tables = set(inspector.get_table_names())\n migration_plan = {\n \"dataset_review_sessions\": [\n (\n \"version\",\n \"ALTER TABLE dataset_review_sessions \"\n \"ADD COLUMN version INTEGER NOT NULL DEFAULT 0\",\n )\n ],\n \"imported_filters\": [\n (\n \"raw_value_masked\",\n \"ALTER TABLE imported_filters \"\n \"ADD COLUMN raw_value_masked BOOLEAN NOT NULL DEFAULT FALSE\",\n )\n ],\n }\n\n for table_name, planned_columns in migration_plan.items():\n if table_name not in existing_tables:\n logger.reason(\n \"Dataset review table does not exist yet; skipping additive schema migration\",\n extra={\"table\": table_name},\n )\n continue\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n alter_statements = [\n statement\n for column_name, statement in planned_columns\n if column_name not in existing_columns\n ]\n\n if not alter_statements:\n logger.reason(\n \"Dataset review table schema already up to date\",\n extra={\"table\": table_name, \"columns\": sorted(existing_columns)},\n )\n continue\n\n logger.reason(\n \"Applying additive dataset review schema migration\",\n extra={\"table\": table_name, \"statements\": alter_statements},\n )\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n logger.reflect(\n \"Dataset review additive schema migration completed\",\n extra={\n \"table\": table_name,\n \"added_columns\": [\n stmt.split(\" ADD COLUMN \", 1)[1].split()[0]\n for stmt in alter_statements\n ],\n },\n )\n except Exception as migration_error:\n logger.explore(\n \"Dataset review additive schema migration failed\",\n extra={\"table\": table_name, \"error\": str(migration_error)},\n )\n raise\n\n\n# #endregion _ensure_dataset_review_session_columns\n\n\n# #region _ensure_translation_schedules_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for translation_schedules table.\n# @PRE bind_engine points to application database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_translation_schedules_columns(bind_engine):\n with belief_scope(\"_ensure_translation_schedules_columns\"):\n table_name = \"translation_schedules\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"execution_mode\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE translation_schedules \"\n \"ADD COLUMN execution_mode VARCHAR NOT NULL DEFAULT 'full'\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"TranslationSchedule additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_translation_schedules_columns\n\n\n# #region _ensure_dictionary_entries_columns [C:3] [TYPE Function]\n# @BRIEF Additive migration for dictionary_entries origin tracking columns.\n# @RELATION DEPENDS_ON -> [engine]\ndef _ensure_dictionary_entries_columns(bind_engine):\n with belief_scope(\"_ensure_dictionary_entries_columns\"):\n table_name = \"dictionary_entries\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"origin_run_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_run_id VARCHAR\"\n )\n if \"origin_row_key\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_row_key VARCHAR\"\n )\n if \"origin_user_id\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE dictionary_entries \"\n \"ADD COLUMN origin_user_id VARCHAR\"\n )\n\n if not alter_statements:\n return\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n except Exception as migration_error:\n logger.explore(\n \"DictionaryEntry additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n\n\n# #endregion _ensure_dictionary_entries_columns\n\n\n# #region init_db [C:3] [TYPE Function]\n# @BRIEF Initializes the database by creating all tables.\n# @PRE engine, tasks_engine and auth_engine are initialized.\n# @POST Database tables created in all databases.\n# @SIDE_EFFECT Creates physical database files if they don't exist.\n# @RELATION CALLS -> [_ensure_filter_source_enum_values]\n# @RELATION CALLS -> [_ensure_dataset_review_session_columns]\n# @RELATION CALLS -> [_ensure_dictionary_entries_columns]\ndef init_db():\n with belief_scope(\"init_db\"):\n Base.metadata.create_all(bind=engine)\n Base.metadata.create_all(bind=tasks_engine)\n Base.metadata.create_all(bind=auth_engine)\n _ensure_user_dashboard_preferences_columns(engine)\n _ensure_llm_validation_results_columns(engine)\n _ensure_user_dashboard_preferences_health_columns(engine)\n _ensure_git_server_configs_columns(engine)\n _ensure_auth_users_columns(auth_engine)\n _ensure_filter_source_enum_values(engine)\n _ensure_dataset_review_session_columns(engine)\n _ensure_translation_jobs_columns(engine)\n _ensure_translation_schedules_columns(engine)\n _ensure_dictionary_entries_columns(engine)\n\n\n# #endregion init_db\n\n\n# #region get_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting a database session.\n# @PRE SessionLocal is initialized.\n# @POST Session is closed after use.\n# @RELATION DEPENDS_ON -> [SessionLocal]\ndef get_db():\n with belief_scope(\"get_db\"):\n db = SessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_db\n\n\n# #region get_tasks_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting a tasks database session.\n# @PRE TasksSessionLocal is initialized.\n# @POST Session is closed after use.\n# @RELATION DEPENDS_ON -> [TasksSessionLocal]\ndef get_tasks_db():\n with belief_scope(\"get_tasks_db\"):\n db = TasksSessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_tasks_db\n\n\n# #region get_auth_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting an authentication database session.\n# @PRE AuthSessionLocal is initialized.\n# @POST Session is closed after use.\n# @DATA_CONTRACT None -> Output[EXT:Library:sqlalchemy.orm.Session]\n# @RELATION DEPENDS_ON -> [AuthSessionLocal]\ndef get_auth_db():\n with belief_scope(\"get_auth_db\"):\n db = AuthSessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_auth_db\n\n# #endregion DatabaseModule\n" }, { "contract_id": "BASE_DIR", @@ -20495,11 +20708,11 @@ "contract_type": "Constant", "file_path": "backend/src/core/database.py", "start_line": 38, - "end_line": 54, + "end_line": 52, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "URL for the main application database. Read from env; dev fallback only.", + "BRIEF": "URL for the main application database. Read from env; crashes if unset.", "COMPLEXITY": 1, "RATIONALE": "DATABASE_URL reads from env (DATABASE_URL or POSTGRES_URL)." }, @@ -20507,14 +20720,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the main application database. Read from env; dev fallback only.\n# @RATIONALE DATABASE_URL reads from env (DATABASE_URL or POSTGRES_URL).\n# Crashes at import if unset in production; provides localhost fallback in dev.\n# @REJECTED Hardcoded postgres:postgres@localhost in source code rejected — exposes\n# database credentials in version control (Class 1 security violation).\n_DATABASE_URL = os.getenv(\"DATABASE_URL\") or os.getenv(\"POSTGRES_URL\")\nif _DATABASE_URL:\n DATABASE_URL = _DATABASE_URL\nelif os.getenv(\"DEV_MODE\", \"\").strip().lower() in {\"1\", \"true\", \"yes\"}:\n DATABASE_URL = \"postgresql+psycopg2://postgres:postgres@localhost:5432/ss_tools\"\nelse:\n raise RuntimeError(\n \"DATABASE_URL (or POSTGRES_URL) environment variable is required. \"\n \"Set it before starting the server.\"\n )\n# #endregion DATABASE_URL\n" + "body": "# #region DATABASE_URL [C:1] [TYPE Constant]\n# @BRIEF URL for the main application database. Read from env; crashes if unset.\n# @RATIONALE DATABASE_URL reads from env (DATABASE_URL or POSTGRES_URL).\n# Crashes at import if unset. DEV_MODE fallback removed in [SEC:C-4].\n# @REJECTED Hardcoded postgres:postgres@localhost in source code rejected — exposes\n# database credentials in version control (Class 1 security violation).\n# DEV_MODE fallback removed — same violation via env toggle.\nDATABASE_URL = os.getenv(\"DATABASE_URL\") or os.getenv(\"POSTGRES_URL\")\nif not DATABASE_URL:\n raise RuntimeError(\n \"DATABASE_URL (or POSTGRES_URL) environment variable is required. \"\n \"Set it before starting the server. \"\n \"For local development, create a .env file or use docker-compose.yml.\"\n )\n# #endregion DATABASE_URL\n" }, { "contract_id": "TASKS_DATABASE_URL", "contract_type": "Constant", "file_path": "backend/src/core/database.py", - "start_line": 56, - "end_line": 60, + "start_line": 54, + "end_line": 58, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20531,8 +20744,8 @@ "contract_id": "AUTH_DATABASE_URL", "contract_type": "Constant", "file_path": "backend/src/core/database.py", - "start_line": 62, - "end_line": 65, + "start_line": 60, + "end_line": 63, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20549,8 +20762,8 @@ "contract_id": "engine", "contract_type": "Variable", "file_path": "backend/src/core/database.py", - "start_line": 68, - "end_line": 79, + "start_line": 66, + "end_line": 77, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20568,8 +20781,8 @@ "contract_id": "tasks_engine", "contract_type": "Variable", "file_path": "backend/src/core/database.py", - "start_line": 81, - "end_line": 84, + "start_line": 79, + "end_line": 82, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20586,8 +20799,8 @@ "contract_id": "auth_engine", "contract_type": "Variable", "file_path": "backend/src/core/database.py", - "start_line": 86, - "end_line": 89, + "start_line": 84, + "end_line": 87, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20604,8 +20817,8 @@ "contract_id": "SessionLocal", "contract_type": "Class", "file_path": "backend/src/core/database.py", - "start_line": 91, - "end_line": 95, + "start_line": 89, + "end_line": 93, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20623,8 +20836,8 @@ "contract_id": "TasksSessionLocal", "contract_type": "Class", "file_path": "backend/src/core/database.py", - "start_line": 97, - "end_line": 101, + "start_line": 95, + "end_line": 99, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20642,8 +20855,8 @@ "contract_id": "AuthSessionLocal", "contract_type": "Class", "file_path": "backend/src/core/database.py", - "start_line": 103, - "end_line": 107, + "start_line": 101, + "end_line": 105, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -20661,8 +20874,8 @@ "contract_id": "_ensure_user_dashboard_preferences_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 110, - "end_line": 176, + "start_line": 108, + "end_line": 174, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20688,8 +20901,8 @@ "contract_id": "_ensure_user_dashboard_preferences_health_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 179, - "end_line": 222, + "start_line": 177, + "end_line": 220, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20713,8 +20926,8 @@ "contract_id": "_ensure_llm_validation_results_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 225, - "end_line": 264, + "start_line": 223, + "end_line": 262, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20738,8 +20951,8 @@ "contract_id": "_ensure_git_server_configs_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 267, - "end_line": 304, + "start_line": 265, + "end_line": 302, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20765,8 +20978,8 @@ "contract_id": "_ensure_auth_users_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 307, - "end_line": 366, + "start_line": 305, + "end_line": 364, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20788,12 +21001,33 @@ "tier_source": "AutoCalculated", "body": "# #region _ensure_auth_users_columns [C:3] [TYPE Function]\n# @BRIEF Applies additive schema upgrades for auth users table.\n# @PRE bind_engine points to authentication database.\n# @POST Missing columns are added without data loss.\n# @RELATION DEPENDS_ON -> [auth_engine]\ndef _ensure_auth_users_columns(bind_engine):\n with belief_scope(\"_ensure_auth_users_columns\"):\n table_name = \"users\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n alter_statements = []\n if \"full_name\" not in existing_columns:\n alter_statements.append(\"ALTER TABLE users ADD COLUMN full_name VARCHAR\")\n if \"is_ad_user\" not in existing_columns:\n alter_statements.append(\n \"ALTER TABLE users ADD COLUMN is_ad_user BOOLEAN NOT NULL DEFAULT FALSE\"\n )\n\n if not alter_statements:\n logger.reason(\n \"Auth users schema already up to date\",\n extra={\"table\": table_name, \"columns\": sorted(existing_columns)},\n )\n return\n\n logger.reason(\n \"Applying additive auth users schema migration\",\n extra={\"table\": table_name, \"statements\": alter_statements},\n )\n\n try:\n with bind_engine.begin() as connection:\n for statement in alter_statements:\n connection.execute(text(statement))\n logger.reason(\n \"Auth users schema migration completed\",\n extra={\n \"table\": table_name,\n \"added_columns\": [\n stmt.split(\" ADD COLUMN \", 1)[1].split()[0]\n for stmt in alter_statements\n ],\n },\n )\n except Exception as migration_error:\n logger.explore(\n \"Auth users additive migration failed\",\n extra={\"src\": \"database\", \"error\": str(migration_error)},\n )\n raise\n\n\n# #endregion _ensure_auth_users_columns\n" }, + { + "contract_id": "_ensure_roles_is_admin_column", + "contract_type": "Function", + "file_path": "backend/src/core/database.py", + "start_line": 367, + "end_line": 400, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Add is_admin column to roles table if missing (additive migration).", + "COMPLEXITY": 3, + "POST": "roles.is_admin column exists (BOOLEAN, default FALSE).", + "PRE": "Database connection is active.", + "SIDE_EFFECT": "Executes ALTER TABLE on the auth database." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _ensure_roles_is_admin_column [C:3] [TYPE Function]\n# @BRIEF Add is_admin column to roles table if missing (additive migration).\n# @PRE Database connection is active.\n# @POST roles.is_admin column exists (BOOLEAN, default FALSE).\n# @SIDE_EFFECT Executes ALTER TABLE on the auth database.\ndef _ensure_roles_is_admin_column(bind_engine):\n with belief_scope(\"_ensure_roles_is_admin_column\"):\n table_name = \"roles\"\n inspector = inspect(bind_engine)\n if table_name not in inspector.get_table_names():\n return\n\n existing_columns = {\n str(column.get(\"name\") or \"\").strip()\n for column in inspector.get_columns(table_name)\n }\n\n if \"is_admin\" in existing_columns:\n logger.reason(\"roles.is_admin column already exists\")\n return\n\n alter = \"ALTER TABLE roles ADD COLUMN is_admin BOOLEAN NOT NULL DEFAULT FALSE\"\n try:\n with bind_engine.begin() as connection:\n connection.execute(text(alter))\n connection.execute(text(\"UPDATE roles SET is_admin = true WHERE name = 'Admin'\"))\n logger.reason(\"Added roles.is_admin column, updated Admin roles\", extra={\"statement\": alter})\n except Exception as migration_error:\n logger.explore(\n \"roles.is_admin additive migration failed\",\n extra={\"error\": str(migration_error)},\n )\n raise\n# #endregion _ensure_roles_is_admin_column\n" + }, { "contract_id": "_ensure_filter_source_enum_values", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 369, - "end_line": 437, + "start_line": 403, + "end_line": 471, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20819,8 +21053,8 @@ "contract_id": "_ensure_dataset_review_session_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 440, - "end_line": 570, + "start_line": 474, + "end_line": 604, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -20853,8 +21087,8 @@ "contract_id": "_ensure_translation_schedules_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 573, - "end_line": 611, + "start_line": 607, + "end_line": 645, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20880,8 +21114,8 @@ "contract_id": "_ensure_dictionary_entries_columns", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 614, - "end_line": 660, + "start_line": 648, + "end_line": 694, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20905,8 +21139,8 @@ "contract_id": "init_db", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 663, - "end_line": 688, + "start_line": 697, + "end_line": 722, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20945,8 +21179,8 @@ "contract_id": "get_db", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 691, - "end_line": 705, + "start_line": 725, + "end_line": 739, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20972,8 +21206,8 @@ "contract_id": "get_tasks_db", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 708, - "end_line": 722, + "start_line": 742, + "end_line": 756, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -20999,8 +21233,8 @@ "contract_id": "get_auth_db", "contract_type": "Function", "file_path": "backend/src/core/database.py", - "start_line": 725, - "end_line": 740, + "start_line": 759, + "end_line": 774, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -21023,24 +21257,107 @@ "tier_source": "AutoCalculated", "body": "# #region get_auth_db [C:3] [TYPE Function]\n# @BRIEF Dependency for getting an authentication database session.\n# @PRE AuthSessionLocal is initialized.\n# @POST Session is closed after use.\n# @DATA_CONTRACT None -> Output[EXT:Library:sqlalchemy.orm.Session]\n# @RELATION DEPENDS_ON -> [AuthSessionLocal]\ndef get_auth_db():\n with belief_scope(\"get_auth_db\"):\n db = AuthSessionLocal()\n try:\n yield db\n finally:\n db.close()\n\n\n# #endregion get_auth_db\n" }, + { + "contract_id": "EncryptionCore", + "contract_type": "Module", + "file_path": "backend/src/core/encryption.py", + "start_line": 1, + "end_line": 110, + "tier": "TIER_3", + "complexity": 5, + "metadata": { + "BRIEF": "Core encryption infrastructure: Fernet-based EncryptionManager for reversible secret storage.", + "COMPLEXITY": 5, + "INVARIANT": "Encryption initialization never falls back to a hardcoded secret.", + "LAYER": "Infrastructure" + }, + "relations": [ + { + "source_id": "EncryptionCore", + "relation_type": "DEPENDS_ON", + "target_id": "LoggerModule", + "target_ref": "[LoggerModule]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region EncryptionCore [C:5] [TYPE Module] [SEMANTICS encryption, fernet, key, crypto, secret]\n# @BRIEF Core encryption infrastructure: Fernet-based EncryptionManager for reversible secret storage.\n# @LAYER Infrastructure\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @INVARIANT Encryption initialization never falls back to a hardcoded secret.\n# ENCRYPTION_KEY must be set via environment or .env before first use.\n# @PRE Runtime environment has a valid Fernet ENCRYPTION_KEY.\n# @POST EncryptionManager provides encrypt/decrypt operations backed by validated Fernet key.\n# @SIDE_EFFECT Reads ENCRYPTION_KEY from process environment.\n# @DATA_CONTRACT Input[str] -> Encrypted[str] -> Output[str]\n# @RATIONALE Extracted from services/llm_provider.py to decouple core encryption from LLM domain\n# and enable reuse by ConfigManager for Superset password encryption (see [SEC:C-1]).\n\nimport os\n\nfrom cryptography.fernet import Fernet\n\nfrom .logger import belief_scope, logger\n\n\n# #region _require_fernet_key [C:5] [TYPE Function]\n# @BRIEF Load and validate the Fernet key used for secret encryption.\n# @PRE ENCRYPTION_KEY environment variable must be set to a valid Fernet key.\n# @POST Returns validated key bytes ready for Fernet initialization.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @SIDE_EFFECT Emits belief-state logs for missing or invalid encryption configuration.\n# @DATA_CONTRACT Input[ENCRYPTION_KEY:str] -> Output[bytes]\n# @INVARIANT Encryption initialization never falls back to a hardcoded secret.\ndef _require_fernet_key() -> bytes:\n with belief_scope(\"_require_fernet_key\"):\n raw_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if not raw_key:\n logger.explore(\n \"Missing ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\n \"ENCRYPTION_KEY must be set. Run ensure_encryption_key() \"\n \"during application startup before using EncryptionManager.\"\n )\n\n key = raw_key.encode()\n try:\n Fernet(key)\n except Exception as exc:\n logger.explore(\n \"Invalid ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be a valid Fernet key\") from exc\n\n logger.reflect(\"Validated ENCRYPTION_KEY for EncryptionManager initialization\")\n return key\n\n\n# #endregion _require_fernet_key\n\n\n# #region EncryptionManager [C:5] [TYPE Class]\n# @BRIEF Handles encryption and decryption of sensitive data like API keys and passwords.\n# @RELATION CALLS -> [_require_fernet_key]\n# @PRE ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.\n# @POST Manager exposes reversible encrypt/decrypt operations for persisted secrets.\n# @SIDE_EFFECT Initializes Fernet cryptography state from process environment.\n# @DATA_CONTRACT Input[str] -> Output[str]\n# @INVARIANT Uses only a validated secret key from environment.\n#\n# @TEST_CONTRACT EncryptionManagerModel ->\n# {\n# required_fields: {},\n# invariants: [\n# \"encrypted data can be decrypted back to the original string\"\n# ]\n# }\n# @TEST_FIXTURE basic_encryption_cycle -> {\"data\": \"my_secret_key\"}\n# @TEST_EDGE decrypt_invalid_data -> raises Exception\n# @TEST_EDGE empty_string_encryption -> {\"data\": \"\"}\n# @TEST_INVARIANT symmetric_encryption -> verifies: [basic_encryption_cycle, empty_string_encryption]\nclass EncryptionManager:\n # region EncryptionManager_init [TYPE Function]\n # @PURPOSE: Initialize the encryption manager with a Fernet key.\n # @PRE ENCRYPTION_KEY env var must be set to a valid Fernet key.\n # @POST Fernet instance ready for encryption/decryption.\n def __init__(self):\n self.key = _require_fernet_key()\n self.fernet = Fernet(self.key)\n\n # endregion EncryptionManager_init\n\n # region encrypt [TYPE Function]\n # @PURPOSE: Encrypt a plaintext string.\n # @PRE data must be a non-empty string.\n # @POST Returns encrypted string.\n def encrypt(self, data: str) -> str:\n with belief_scope(\"encrypt\"):\n return self.fernet.encrypt(data.encode()).decode()\n\n # endregion encrypt\n\n # region decrypt [TYPE Function]\n # @PURPOSE: Decrypt an encrypted string.\n # @PRE encrypted_data must be a valid Fernet-encrypted string.\n # @POST Returns original plaintext string.\n def decrypt(self, encrypted_data: str) -> str:\n with belief_scope(\"decrypt\"):\n return self.fernet.decrypt(encrypted_data.encode()).decode()\n\n # endregion decrypt\n\n\n# #endregion EncryptionManager\n# #endregion EncryptionCore\n" + }, + { + "contract_id": "_require_fernet_key", + "contract_type": "Function", + "file_path": "backend/src/core/encryption.py", + "start_line": 21, + "end_line": 54, + "tier": "TIER_3", + "complexity": 5, + "metadata": { + "BRIEF": "Load and validate the Fernet key used for secret encryption.", + "COMPLEXITY": 5, + "DATA_CONTRACT": "Input[ENCRYPTION_KEY:str] -> Output[bytes]", + "INVARIANT": "Encryption initialization never falls back to a hardcoded secret.", + "POST": "Returns validated key bytes ready for Fernet initialization.", + "PRE": "ENCRYPTION_KEY environment variable must be set to a valid Fernet key.", + "SIDE_EFFECT": "Emits belief-state logs for missing or invalid encryption configuration." + }, + "relations": [ + { + "source_id": "_require_fernet_key", + "relation_type": "DEPENDS_ON", + "target_id": "LoggerModule", + "target_ref": "[LoggerModule]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region _require_fernet_key [C:5] [TYPE Function]\n# @BRIEF Load and validate the Fernet key used for secret encryption.\n# @PRE ENCRYPTION_KEY environment variable must be set to a valid Fernet key.\n# @POST Returns validated key bytes ready for Fernet initialization.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @SIDE_EFFECT Emits belief-state logs for missing or invalid encryption configuration.\n# @DATA_CONTRACT Input[ENCRYPTION_KEY:str] -> Output[bytes]\n# @INVARIANT Encryption initialization never falls back to a hardcoded secret.\ndef _require_fernet_key() -> bytes:\n with belief_scope(\"_require_fernet_key\"):\n raw_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if not raw_key:\n logger.explore(\n \"Missing ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\n \"ENCRYPTION_KEY must be set. Run ensure_encryption_key() \"\n \"during application startup before using EncryptionManager.\"\n )\n\n key = raw_key.encode()\n try:\n Fernet(key)\n except Exception as exc:\n logger.explore(\n \"Invalid ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be a valid Fernet key\") from exc\n\n logger.reflect(\"Validated ENCRYPTION_KEY for EncryptionManager initialization\")\n return key\n\n\n# #endregion _require_fernet_key\n" + }, + { + "contract_id": "EncryptionManager", + "contract_type": "Class", + "file_path": "backend/src/core/encryption.py", + "start_line": 57, + "end_line": 109, + "tier": "TIER_3", + "complexity": 5, + "metadata": { + "BRIEF": "Handles encryption and decryption of sensitive data like API keys and passwords.", + "COMPLEXITY": 5, + "DATA_CONTRACT": "Input[str] -> Output[str]", + "INVARIANT": "Uses only a validated secret key from environment.", + "POST": "Manager exposes reversible encrypt/decrypt operations for persisted secrets.", + "PRE": "ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.", + "SIDE_EFFECT": "Initializes Fernet cryptography state from process environment.", + "TEST_CONTRACT": "EncryptionManagerModel ->" + }, + "relations": [ + { + "source_id": "EncryptionManager", + "relation_type": "CALLS", + "target_id": "_require_fernet_key", + "target_ref": "[_require_fernet_key]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region EncryptionManager [C:5] [TYPE Class]\n# @BRIEF Handles encryption and decryption of sensitive data like API keys and passwords.\n# @RELATION CALLS -> [_require_fernet_key]\n# @PRE ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.\n# @POST Manager exposes reversible encrypt/decrypt operations for persisted secrets.\n# @SIDE_EFFECT Initializes Fernet cryptography state from process environment.\n# @DATA_CONTRACT Input[str] -> Output[str]\n# @INVARIANT Uses only a validated secret key from environment.\n#\n# @TEST_CONTRACT EncryptionManagerModel ->\n# {\n# required_fields: {},\n# invariants: [\n# \"encrypted data can be decrypted back to the original string\"\n# ]\n# }\n# @TEST_FIXTURE basic_encryption_cycle -> {\"data\": \"my_secret_key\"}\n# @TEST_EDGE decrypt_invalid_data -> raises Exception\n# @TEST_EDGE empty_string_encryption -> {\"data\": \"\"}\n# @TEST_INVARIANT symmetric_encryption -> verifies: [basic_encryption_cycle, empty_string_encryption]\nclass EncryptionManager:\n # region EncryptionManager_init [TYPE Function]\n # @PURPOSE: Initialize the encryption manager with a Fernet key.\n # @PRE ENCRYPTION_KEY env var must be set to a valid Fernet key.\n # @POST Fernet instance ready for encryption/decryption.\n def __init__(self):\n self.key = _require_fernet_key()\n self.fernet = Fernet(self.key)\n\n # endregion EncryptionManager_init\n\n # region encrypt [TYPE Function]\n # @PURPOSE: Encrypt a plaintext string.\n # @PRE data must be a non-empty string.\n # @POST Returns encrypted string.\n def encrypt(self, data: str) -> str:\n with belief_scope(\"encrypt\"):\n return self.fernet.encrypt(data.encode()).decode()\n\n # endregion encrypt\n\n # region decrypt [TYPE Function]\n # @PURPOSE: Decrypt an encrypted string.\n # @PRE encrypted_data must be a valid Fernet-encrypted string.\n # @POST Returns original plaintext string.\n def decrypt(self, encrypted_data: str) -> str:\n with belief_scope(\"decrypt\"):\n return self.fernet.decrypt(encrypted_data.encode()).decode()\n\n # endregion decrypt\n\n\n# #endregion EncryptionManager\n" + }, { "contract_id": "EncryptionKeyModule", "contract_type": "Module", "file_path": "backend/src/core/encryption_key.py", "start_line": 1, - "end_line": 61, + "end_line": 72, "tier": "TIER_3", "complexity": 5, "metadata": { - "BRIEF": "Resolve and persist the Fernet encryption key required by runtime services.", + "BRIEF": "Resolve a Fernet encryption key from environment or .env file.", "COMPLEXITY": 5, - "DATA_CONTRACT": "Input[env_file_path] -> Output[encryption_key]", - "INVARIANT": "Runtime key resolution never falls back to an ephemeral secret.", - "LAYER": "Infrastructure", - "POST": "A valid Fernet key is available to runtime services via ENCRYPTION_KEY.", - "PRE": "Runtime environment can read process variables and target .env path is writable when key generation is required.", - "RATIONALE": "Replaced Path(__file__).parents[2] with BASE_DIR import from database.py — same result, avoids recomputing path traversal.", - "SIDE_EFFECT": "May append ENCRYPTION_KEY entry into backend .env file and set process environment variable." + "INVARIANT": "Runtime key resolution never falls back to an auto-generated key.", + "LAYER": "Infrastructure" }, "relations": [ { @@ -21053,27 +21370,28 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region EncryptionKeyModule [C:5] [TYPE Module] [SEMANTICS encryption, fernet, key, env, secret]\n# @BRIEF Resolve and persist the Fernet encryption key required by runtime services.\n# @LAYER Infrastructure\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @INVARIANT Runtime key resolution never falls back to an ephemeral secret.\n# @PRE Runtime environment can read process variables and target .env path is writable when key generation is required.\n# @POST A valid Fernet key is available to runtime services via ENCRYPTION_KEY.\n# @SIDE_EFFECT May append ENCRYPTION_KEY entry into backend .env file and set process environment variable.\n# @DATA_CONTRACT Input[env_file_path] -> Output[encryption_key]\n# @RATIONALE Replaced Path(__file__).parents[2] with BASE_DIR import from database.py — same result, avoids recomputing path traversal.\n\nfrom __future__ import annotations\n\nimport os\nfrom pathlib import Path\n\nfrom cryptography.fernet import Fernet\n\nfrom .logger import belief_scope, logger\n\nDEFAULT_ENV_FILE_PATH = Path(__file__).resolve().parents[2] / \".env\"\n\n\n# #region ensure_encryption_key [TYPE Function]\n# @BRIEF Ensure backend runtime has a persistent valid Fernet key.\n# @PRE env_file_path points to a writable backend .env file or ENCRYPTION_KEY exists in process environment.\n# @POST Returns a valid Fernet key and guarantees it is present in process environment.\n# @SIDE_EFFECT May create or append backend/.env when key is missing.\ndef ensure_encryption_key(env_file_path: Path = DEFAULT_ENV_FILE_PATH) -> str:\n with belief_scope(\"ensure_encryption_key\", f\"env_file_path={env_file_path}\"):\n existing_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if existing_key:\n Fernet(existing_key.encode())\n logger.reason(\"Using ENCRYPTION_KEY from process environment.\")\n return existing_key\n\n if env_file_path.exists():\n for raw_line in env_file_path.read_text(encoding=\"utf-8\").splitlines():\n if raw_line.startswith(\"ENCRYPTION_KEY=\"):\n persisted_key = raw_line.partition(\"=\")[2].strip()\n if persisted_key:\n Fernet(persisted_key.encode())\n os.environ[\"ENCRYPTION_KEY\"] = persisted_key\n logger.reason(f\"Loaded ENCRYPTION_KEY from {env_file_path}.\")\n return persisted_key\n\n generated_key = Fernet.generate_key().decode()\n with env_file_path.open(\"a\", encoding=\"utf-8\") as env_file:\n if env_file.tell() > 0:\n env_file.write(\"\\n\")\n env_file.write(f\"ENCRYPTION_KEY={generated_key}\\n\")\n\n os.environ[\"ENCRYPTION_KEY\"] = generated_key\n logger.reason(f\"Generated ENCRYPTION_KEY and persisted it to {env_file_path}.\")\n logger.reflect(\"Encryption key is available for runtime services.\")\n return generated_key\n\n\n# #endregion ensure_encryption_key\n\n# #endregion EncryptionKeyModule\n" + "body": "# #region EncryptionKeyModule [C:5] [TYPE Module] [SEMANTICS encryption, fernet, key, env, secret]\n# @BRIEF Resolve a Fernet encryption key from environment or .env file.\n# @LAYER Infrastructure\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @INVARIANT Runtime key resolution never falls back to an auto-generated key.\n# If no key is found in env or .env, the application crashes early.\n# @PRE ENCRYPTION_KEY is set in process environment or .env file.\n# @POST A valid Fernet key is returned and set in process environment.\n# @SIDE_EFFECT Sets os.environ[\"ENCRYPTION_KEY\"] if loaded from .env file.\n# @DATA_CONTRACT Input[env_file_path] -> Output[encryption_key]\n# @RATIONALE Auto-generating a key on first run is dangerous — the key differs\n# per deployment, making encrypted data unrecoverable on restart.\n# Crash-early forces the admin to explicitly set ENCRYPTION_KEY.\n# @REJECTED Auto-generation rejected — encrypted data becomes unrecoverable\n# when the key changes between deployments (see [SEC:H-3]).\n\nfrom __future__ import annotations\n\nimport os\nfrom pathlib import Path\n\nfrom cryptography.fernet import Fernet\n\nfrom .logger import belief_scope, logger\n\nDEFAULT_ENV_FILE_PATH = Path(__file__).resolve().parents[2] / \".env\"\n\n\n# #region ensure_encryption_key [TYPE Function]\n# @BRIEF Ensure backend runtime has a persistent valid Fernet key.\n# @PRE ENCRYPTION_KEY is set in process environment or backend/.env file.\n# @POST Returns a valid Fernet key and sets it in process environment.\n# @SIDE_EFFECT Sets os.environ[\"ENCRYPTION_KEY\"] if loaded from .env file.\n# @RAISES RuntimeError if no ENCRYPTION_KEY is found anywhere.\ndef ensure_encryption_key(env_file_path: Path = DEFAULT_ENV_FILE_PATH) -> str:\n with belief_scope(\"ensure_encryption_key\", f\"env_file_path={env_file_path}\"):\n\n # 1. Check process environment\n existing_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if existing_key:\n Fernet(existing_key.encode())\n logger.reason(\"Using ENCRYPTION_KEY from process environment.\")\n return existing_key\n\n # 2. Check .env file\n if env_file_path.exists():\n for raw_line in env_file_path.read_text(encoding=\"utf-8\").splitlines():\n if raw_line.startswith(\"ENCRYPTION_KEY=\"):\n persisted_key = raw_line.partition(\"=\")[2].strip()\n if persisted_key:\n Fernet(persisted_key.encode())\n os.environ[\"ENCRYPTION_KEY\"] = persisted_key\n logger.reason(f\"Loaded ENCRYPTION_KEY from {env_file_path}.\")\n return persisted_key\n\n # 3. Crash-early — no auto-generation (see [SEC:H-3])\n logger.explore(\n \"No ENCRYPTION_KEY found in environment or .env file. \"\n \"Generate one with: python -c \\\"from cryptography.fernet import Fernet; \"\n \"print(Fernet.generate_key().decode())\\\" and set it in .env or export it.\"\n )\n raise RuntimeError(\n \"ENCRYPTION_KEY is not set. \"\n \"Generate a key and add it to your .env file:\\n\"\n \" python -c \\\"from cryptography.fernet import Fernet; \"\n \"print(Fernet.generate_key().decode())\\\"\"\n )\n\n\n# #endregion ensure_encryption_key\n\n# #endregion EncryptionKeyModule\n" }, { "contract_id": "ensure_encryption_key", "contract_type": "Function", "file_path": "backend/src/core/encryption_key.py", - "start_line": 24, - "end_line": 59, + "start_line": 29, + "end_line": 70, "tier": "TIER_1", "complexity": 1, "metadata": { "BRIEF": "Ensure backend runtime has a persistent valid Fernet key.", - "POST": "Returns a valid Fernet key and guarantees it is present in process environment.", - "PRE": "env_file_path points to a writable backend .env file or ENCRYPTION_KEY exists in process environment.", - "SIDE_EFFECT": "May create or append backend/.env when key is missing." + "ERROR": "RuntimeError if no ENCRYPTION_KEY is found anywhere.", + "POST": "Returns a valid Fernet key and sets it in process environment.", + "PRE": "ENCRYPTION_KEY is set in process environment or backend/.env file.", + "SIDE_EFFECT": "Sets os.environ[\"ENCRYPTION_KEY\"] if loaded from .env file." }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ensure_encryption_key [TYPE Function]\n# @BRIEF Ensure backend runtime has a persistent valid Fernet key.\n# @PRE env_file_path points to a writable backend .env file or ENCRYPTION_KEY exists in process environment.\n# @POST Returns a valid Fernet key and guarantees it is present in process environment.\n# @SIDE_EFFECT May create or append backend/.env when key is missing.\ndef ensure_encryption_key(env_file_path: Path = DEFAULT_ENV_FILE_PATH) -> str:\n with belief_scope(\"ensure_encryption_key\", f\"env_file_path={env_file_path}\"):\n existing_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if existing_key:\n Fernet(existing_key.encode())\n logger.reason(\"Using ENCRYPTION_KEY from process environment.\")\n return existing_key\n\n if env_file_path.exists():\n for raw_line in env_file_path.read_text(encoding=\"utf-8\").splitlines():\n if raw_line.startswith(\"ENCRYPTION_KEY=\"):\n persisted_key = raw_line.partition(\"=\")[2].strip()\n if persisted_key:\n Fernet(persisted_key.encode())\n os.environ[\"ENCRYPTION_KEY\"] = persisted_key\n logger.reason(f\"Loaded ENCRYPTION_KEY from {env_file_path}.\")\n return persisted_key\n\n generated_key = Fernet.generate_key().decode()\n with env_file_path.open(\"a\", encoding=\"utf-8\") as env_file:\n if env_file.tell() > 0:\n env_file.write(\"\\n\")\n env_file.write(f\"ENCRYPTION_KEY={generated_key}\\n\")\n\n os.environ[\"ENCRYPTION_KEY\"] = generated_key\n logger.reason(f\"Generated ENCRYPTION_KEY and persisted it to {env_file_path}.\")\n logger.reflect(\"Encryption key is available for runtime services.\")\n return generated_key\n\n\n# #endregion ensure_encryption_key\n" + "body": "# #region ensure_encryption_key [TYPE Function]\n# @BRIEF Ensure backend runtime has a persistent valid Fernet key.\n# @PRE ENCRYPTION_KEY is set in process environment or backend/.env file.\n# @POST Returns a valid Fernet key and sets it in process environment.\n# @SIDE_EFFECT Sets os.environ[\"ENCRYPTION_KEY\"] if loaded from .env file.\n# @RAISES RuntimeError if no ENCRYPTION_KEY is found anywhere.\ndef ensure_encryption_key(env_file_path: Path = DEFAULT_ENV_FILE_PATH) -> str:\n with belief_scope(\"ensure_encryption_key\", f\"env_file_path={env_file_path}\"):\n\n # 1. Check process environment\n existing_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if existing_key:\n Fernet(existing_key.encode())\n logger.reason(\"Using ENCRYPTION_KEY from process environment.\")\n return existing_key\n\n # 2. Check .env file\n if env_file_path.exists():\n for raw_line in env_file_path.read_text(encoding=\"utf-8\").splitlines():\n if raw_line.startswith(\"ENCRYPTION_KEY=\"):\n persisted_key = raw_line.partition(\"=\")[2].strip()\n if persisted_key:\n Fernet(persisted_key.encode())\n os.environ[\"ENCRYPTION_KEY\"] = persisted_key\n logger.reason(f\"Loaded ENCRYPTION_KEY from {env_file_path}.\")\n return persisted_key\n\n # 3. Crash-early — no auto-generation (see [SEC:H-3])\n logger.explore(\n \"No ENCRYPTION_KEY found in environment or .env file. \"\n \"Generate one with: python -c \\\"from cryptography.fernet import Fernet; \"\n \"print(Fernet.generate_key().decode())\\\" and set it in .env or export it.\"\n )\n raise RuntimeError(\n \"ENCRYPTION_KEY is not set. \"\n \"Generate a key and add it to your .env file:\\n\"\n \" python -c \\\"from cryptography.fernet import Fernet; \"\n \"print(Fernet.generate_key().decode())\\\"\"\n )\n\n\n# #endregion ensure_encryption_key\n" }, { "contract_id": "LoggerModule", @@ -21837,7 +22155,7 @@ "contract_type": "Module", "file_path": "backend/src/core/middleware/trace.py", "start_line": 1, - "end_line": 72, + "end_line": 82, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -21848,14 +22166,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TraceContextMiddlewareModule [C:3] [TYPE Module] [SEMANTICS fastapi, middleware, trace, context, request]\n# @BRIEF FastAPI/Starlette middleware that seeds a trace_id for every incoming HTTP request.\n# Optionally extracts X-Trace-ID header for cross-service trace propagation.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [CotLoggerModule]\n# @RELATION CALLED_BY -> [AppModule]\n# @PRE FastAPI app instance with Starlette middleware support.\n# @POST Every request gets a trace_id via seed_trace_id(). Existing X-Trace-ID header is\n# preserved and used as the trace_id when present.\n# @SIDE_EFFECT Sets ContextVar _trace_id for the duration of the request.\n\nfrom starlette.middleware.base import BaseHTTPMiddleware\nfrom starlette.requests import Request\nfrom starlette.responses import Response\nfrom starlette.types import ASGIApp\n\nfrom ..cot_logger import seed_trace_id, set_trace_id\n\n\n# #region TraceContextMiddleware [C:2] [TYPE Class] [SEMANTICS middleware, trace, context, dispatch]\n# @BRIEF Starlette BaseHTTPMiddleware that seeds a trace_id per request.\nclass TraceContextMiddleware(BaseHTTPMiddleware):\n \"\"\"FastAPI/Starlette middleware that seeds a trace_id for every request.\n\n If the incoming request carries an ``X-Trace-ID`` header, that value is\n used as the trace_id (enabling cross-service trace chaining). Otherwise a\n new UUID4 is generated.\n\n Usage::\n\n from backend.src.core.middleware.trace import TraceContextMiddleware\n app.add_middleware(TraceContextMiddleware)\n \"\"\"\n\n # #region TraceContextMiddleware.__init__ [TYPE Function]\n # @BRIEF Standard BaseHTTPMiddleware initialiser.\n def __init__(self, app: ASGIApp) -> None:\n super().__init__(app)\n\n # #endregion TraceContextMiddleware.__init__\n\n # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header, use it; otherwise\n ``seed_trace_id()`` generates a new UUID4.\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n set_trace_id(incoming_trace_id)\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n\n\n# #endregion TraceContextMiddleware\n# #endregion TraceContextMiddlewareModule\n" + "body": "# #region TraceContextMiddlewareModule [C:3] [TYPE Module] [SEMANTICS fastapi, middleware, trace, context, request]\n# @BRIEF FastAPI/Starlette middleware that seeds a trace_id for every incoming HTTP request.\n# Optionally extracts X-Trace-ID header for cross-service trace propagation.\n# @LAYER Core\n# @RELATION DEPENDS_ON -> [CotLoggerModule]\n# @RELATION CALLED_BY -> [AppModule]\n# @INVARIANT X-Trace-ID header is validated as UUID4 format to prevent log injection / trace poisoning.\n# @PRE FastAPI app instance with Starlette middleware support.\n# @POST Every request gets a trace_id via seed_trace_id(). Existing X-Trace-ID header is\n# preserved and used as the trace_id when present and valid.\n# @SIDE_EFFECT Sets ContextVar _trace_id for the duration of the request.\n\nimport uuid\n\nfrom starlette.middleware.base import BaseHTTPMiddleware\nfrom starlette.requests import Request\nfrom starlette.responses import Response\nfrom starlette.types import ASGIApp\n\nfrom ..cot_logger import seed_trace_id, set_trace_id\n\n\n# #region TraceContextMiddleware [C:2] [TYPE Class] [SEMANTICS middleware, trace, context, dispatch]\n# @BRIEF Starlette BaseHTTPMiddleware that seeds a trace_id per request.\nclass TraceContextMiddleware(BaseHTTPMiddleware):\n \"\"\"FastAPI/Starlette middleware that seeds a trace_id for every request.\n\n If the incoming request carries an ``X-Trace-ID`` header, that value is\n validated as UUID4 and used as the trace_id (enabling cross-service trace\n chaining). Invalid or non-UUID values are ignored and a new UUID4 is\n generated instead.\n\n Usage::\n\n from backend.src.core.middleware.trace import TraceContextMiddleware\n app.add_middleware(TraceContextMiddleware)\n \"\"\"\n\n # #region TraceContextMiddleware.__init__ [TYPE Function]\n # @BRIEF Standard BaseHTTPMiddleware initialiser.\n def __init__(self, app: ASGIApp) -> None:\n super().__init__(app)\n\n # #endregion TraceContextMiddleware.__init__\n\n # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header with a valid UUID4 value,\n use it; otherwise ``seed_trace_id()`` generates a new UUID4.\n Invalid X-Trace-ID values are silently ignored to prevent log\n injection / trace poisoning (see [SEC:H-5]).\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n try:\n uuid.UUID(hex=incoming_trace_id, version=4)\n set_trace_id(incoming_trace_id)\n except (ValueError, AttributeError):\n seed_trace_id()\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n\n\n# #endregion TraceContextMiddleware\n# #endregion TraceContextMiddlewareModule\n" }, { "contract_id": "TraceContextMiddleware", "contract_type": "Class", "file_path": "backend/src/core/middleware/trace.py", - "start_line": 20, - "end_line": 71, + "start_line": 23, + "end_line": 81, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -21866,14 +22184,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TraceContextMiddleware [C:2] [TYPE Class] [SEMANTICS middleware, trace, context, dispatch]\n# @BRIEF Starlette BaseHTTPMiddleware that seeds a trace_id per request.\nclass TraceContextMiddleware(BaseHTTPMiddleware):\n \"\"\"FastAPI/Starlette middleware that seeds a trace_id for every request.\n\n If the incoming request carries an ``X-Trace-ID`` header, that value is\n used as the trace_id (enabling cross-service trace chaining). Otherwise a\n new UUID4 is generated.\n\n Usage::\n\n from backend.src.core.middleware.trace import TraceContextMiddleware\n app.add_middleware(TraceContextMiddleware)\n \"\"\"\n\n # #region TraceContextMiddleware.__init__ [TYPE Function]\n # @BRIEF Standard BaseHTTPMiddleware initialiser.\n def __init__(self, app: ASGIApp) -> None:\n super().__init__(app)\n\n # #endregion TraceContextMiddleware.__init__\n\n # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header, use it; otherwise\n ``seed_trace_id()`` generates a new UUID4.\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n set_trace_id(incoming_trace_id)\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n\n\n# #endregion TraceContextMiddleware\n" + "body": "# #region TraceContextMiddleware [C:2] [TYPE Class] [SEMANTICS middleware, trace, context, dispatch]\n# @BRIEF Starlette BaseHTTPMiddleware that seeds a trace_id per request.\nclass TraceContextMiddleware(BaseHTTPMiddleware):\n \"\"\"FastAPI/Starlette middleware that seeds a trace_id for every request.\n\n If the incoming request carries an ``X-Trace-ID`` header, that value is\n validated as UUID4 and used as the trace_id (enabling cross-service trace\n chaining). Invalid or non-UUID values are ignored and a new UUID4 is\n generated instead.\n\n Usage::\n\n from backend.src.core.middleware.trace import TraceContextMiddleware\n app.add_middleware(TraceContextMiddleware)\n \"\"\"\n\n # #region TraceContextMiddleware.__init__ [TYPE Function]\n # @BRIEF Standard BaseHTTPMiddleware initialiser.\n def __init__(self, app: ASGIApp) -> None:\n super().__init__(app)\n\n # #endregion TraceContextMiddleware.__init__\n\n # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header with a valid UUID4 value,\n use it; otherwise ``seed_trace_id()`` generates a new UUID4.\n Invalid X-Trace-ID values are silently ignored to prevent log\n injection / trace poisoning (see [SEC:H-5]).\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n try:\n uuid.UUID(hex=incoming_trace_id, version=4)\n set_trace_id(incoming_trace_id)\n except (ValueError, AttributeError):\n seed_trace_id()\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n\n\n# #endregion TraceContextMiddleware\n" }, { "contract_id": "TraceContextMiddleware.__init__", "contract_type": "Function", "file_path": "backend/src/core/middleware/trace.py", - "start_line": 35, - "end_line": 40, + "start_line": 39, + "end_line": 44, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -21889,8 +22207,8 @@ "contract_id": "TraceContextMiddleware.dispatch", "contract_type": "Function", "file_path": "backend/src/core/middleware/trace.py", - "start_line": 42, - "end_line": 68, + "start_line": 46, + "end_line": 78, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -21901,7 +22219,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header, use it; otherwise\n ``seed_trace_id()`` generates a new UUID4.\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n set_trace_id(incoming_trace_id)\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n" + "body": " # #region TraceContextMiddleware.dispatch [C:2] [TYPE Function] [SEMANTICS dispatch, trace, seed, header, call_next]\n # @BRIEF Dispatch handler that seeds trace_id before passing to the next middleware.\n async def dispatch(\n self, request: Request, call_next\n ) -> Response:\n \"\"\"Intercept every request, seed the trace_id, and forward.\n\n If the client sent an ``X-Trace-ID`` header with a valid UUID4 value,\n use it; otherwise ``seed_trace_id()`` generates a new UUID4.\n Invalid X-Trace-ID values are silently ignored to prevent log\n injection / trace poisoning (see [SEC:H-5]).\n\n Args:\n request: The incoming Starlette Request.\n call_next: The next middleware or route handler.\n\n Returns:\n Response from the downstream handler.\n \"\"\"\n incoming_trace_id = request.headers.get(\"X-Trace-ID\")\n if incoming_trace_id:\n try:\n uuid.UUID(hex=incoming_trace_id, version=4)\n set_trace_id(incoming_trace_id)\n except (ValueError, AttributeError):\n seed_trace_id()\n else:\n seed_trace_id()\n\n response = await call_next(request)\n return response\n\n # #endregion TraceContextMiddleware.dispatch\n" }, { "contract_id": "MigrationPackage", @@ -23001,6 +23319,81 @@ "tier_source": "AutoCalculated", "body": " # #region has_plugin [TYPE Function]\n # @PURPOSE: Checks if a plugin with the given ID is registered.\n # @PRE plugin_id is a string.\n # @POST Returns True if plugin exists.\n # @PARAM plugin_id (str) - The unique identifier of the plugin.\n # @RETURN bool - True if the plugin is registered, False otherwise.\n def has_plugin(self, plugin_id: str) -> bool:\n with belief_scope(\"has_plugin\"):\n \"\"\"\n Checks if a plugin with the given ID is loaded.\n \"\"\"\n return plugin_id in self._plugins\n # #endregion has_plugin\n" }, + { + "contract_id": "RateLimiterModule", + "contract_type": "Module", + "file_path": "backend/src/core/rate_limiter.py", + "start_line": 1, + "end_line": 79, + "tier": "TIER_2", + "complexity": 4, + "metadata": { + "BRIEF": "Simple in-memory rate limiter for auth endpoints.", + "COMPLEXITY": 4 + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region RateLimiterModule [C:4] [TYPE Module] [SEMANTICS rate_limit, security, throttle, auth]\n# @BRIEF Simple in-memory rate limiter for auth endpoints.\n# Tracks request frequency per IP and blocks excessive requests.\n# For production, replace with Redis-based limiter.\n# @LAYER Core\n# @INVARIANT Never blocks successful auth — only repeated failures.\n# Window resets after ATTEMPT_WINDOW seconds of no activity.\n# @REJECTED Redis-backed limiter — not available in all deployments.\n# Per-user limiting — user isn't known until after auth.\nimport time\nimport threading\nfrom collections import defaultdict\n\n# ── Configuration ──\nMAX_ATTEMPTS: int = 10 # Max failed attempts per window\nATTEMPT_WINDOW: int = 300 # Window in seconds (5 min)\nBAN_DURATION: int = 900 # Ban duration after limit reached (15 min)\n\n\nclass RateLimiter:\n \"\"\"In-memory sliding-window rate limiter keyed by IP address.\n\n Thread-safe. Tracks failed attempts. After MAX_ATTEMPTS failures within\n ATTEMPT_WINDOW seconds, the IP is banned for BAN_DURATION seconds.\n \"\"\"\n\n def __init__(self):\n self._lock = threading.Lock()\n # ip -> [timestamp, ...] sorted list of attempt timestamps\n self._attempts: dict[str, list[float]] = defaultdict(list)\n # ip -> ban_expires_at\n self._bans: dict[str, float] = {}\n\n # #region is_banned [TYPE Function]\n # @BRIEF Check if IP is currently banned.\n # @PRE ip is a valid IP string.\n # @POST Returns True if IP is banned and ban hasn't expired.\n def is_banned(self, ip: str) -> bool:\n with self._lock:\n expires = self._bans.get(ip)\n if expires is None:\n return False\n if time.monotonic() > expires:\n del self._bans[ip]\n return False\n return True\n # #endregion is_banned\n\n # #region record_attempt [TYPE Function]\n # @BRIEF Record a failed attempt from an IP.\n # @PRE ip is a valid IP string.\n # @POST If MAX_ATTEMPTS exceeded within window, IP is banned.\n def record_attempt(self, ip: str) -> None:\n with self._lock:\n now = time.monotonic()\n window_start = now - ATTEMPT_WINDOW\n\n # Prune old attempts\n self._attempts[ip] = [t for t in self._attempts[ip] if t > window_start]\n self._attempts[ip].append(now)\n\n if len(self._attempts[ip]) > MAX_ATTEMPTS:\n self._bans[ip] = now + BAN_DURATION\n del self._attempts[ip]\n # #endregion record_attempt\n\n # #region record_success [TYPE Function]\n # @BRIEF Clear attempt history on successful auth.\n # @PRE ip is a valid IP string.\n # @POST Attempt history for IP is cleared.\n def record_success(self, ip: str) -> None:\n with self._lock:\n self._attempts.pop(ip, None)\n # #endregion record_success\n\n\n# Singleton\nrate_limiter = RateLimiter()\n# #endregion RateLimiterModule\n" + }, + { + "contract_id": "is_banned", + "contract_type": "Function", + "file_path": "backend/src/core/rate_limiter.py", + "start_line": 34, + "end_line": 47, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Check if IP is currently banned.", + "POST": "Returns True if IP is banned and ban hasn't expired.", + "PRE": "ip is a valid IP string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region is_banned [TYPE Function]\n # @BRIEF Check if IP is currently banned.\n # @PRE ip is a valid IP string.\n # @POST Returns True if IP is banned and ban hasn't expired.\n def is_banned(self, ip: str) -> bool:\n with self._lock:\n expires = self._bans.get(ip)\n if expires is None:\n return False\n if time.monotonic() > expires:\n del self._bans[ip]\n return False\n return True\n # #endregion is_banned\n" + }, + { + "contract_id": "record_attempt", + "contract_type": "Function", + "file_path": "backend/src/core/rate_limiter.py", + "start_line": 49, + "end_line": 65, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Record a failed attempt from an IP.", + "POST": "If MAX_ATTEMPTS exceeded within window, IP is banned.", + "PRE": "ip is a valid IP string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region record_attempt [TYPE Function]\n # @BRIEF Record a failed attempt from an IP.\n # @PRE ip is a valid IP string.\n # @POST If MAX_ATTEMPTS exceeded within window, IP is banned.\n def record_attempt(self, ip: str) -> None:\n with self._lock:\n now = time.monotonic()\n window_start = now - ATTEMPT_WINDOW\n\n # Prune old attempts\n self._attempts[ip] = [t for t in self._attempts[ip] if t > window_start]\n self._attempts[ip].append(now)\n\n if len(self._attempts[ip]) > MAX_ATTEMPTS:\n self._bans[ip] = now + BAN_DURATION\n del self._attempts[ip]\n # #endregion record_attempt\n" + }, + { + "contract_id": "record_success", + "contract_type": "Function", + "file_path": "backend/src/core/rate_limiter.py", + "start_line": 67, + "end_line": 74, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Clear attempt history on successful auth.", + "POST": "Attempt history for IP is cleared.", + "PRE": "ip is a valid IP string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " # #region record_success [TYPE Function]\n # @BRIEF Clear attempt history on successful auth.\n # @PRE ip is a valid IP string.\n # @POST Attempt history for IP is cleared.\n def record_success(self, ip: str) -> None:\n with self._lock:\n self._attempts.pop(ip, None)\n # #endregion record_success\n" + }, { "contract_id": "SchedulerModule", "contract_type": "Module", @@ -30389,7 +30782,7 @@ "contract_type": "Module", "file_path": "backend/src/dependencies.py", "start_line": 1, - "end_line": 566, + "end_line": 579, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -30462,7 +30855,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AppDependencies [C:4] [TYPE Module] [SEMANTICS fastapi, schedule, auth, api_key]\n# @BRIEF Manages creation and provision of shared application dependencies, such as PluginLoader and TaskManager, to avoid circular imports.\n# @LAYER Core\n# @PURPOSE Provides shared instances to app and routers.\n# @RELATION CALLS -> [CleanReleaseRepository]\n# @RELATION CALLS -> [ConfigManager]\n# @RELATION CALLS -> [PluginLoader]\n# @RELATION CALLS -> [SchedulerService]\n# @RELATION CALLS -> [TaskManager]\n# @RELATION CALLS -> [get_all_plugin_configs]\n# @RELATION CALLS -> [get_db]\n# @RELATION CALLS -> [APIKeyPrincipal]\n# @RELATION CALLS -> [get_api_key_principal]\n# @RELATION CALLS -> [info]\n\nimport json\n\nfrom dataclasses import dataclass, field\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom fastapi import Depends, HTTPException, Request, status\nfrom fastapi.security import OAuth2PasswordBearer\nfrom jose import JWTError\n\nfrom .core.auth.jwt import decode_token\nfrom .core.auth.repository import AuthRepository\nfrom .core.config_manager import ConfigManager\nfrom .core.database import get_auth_db, get_db, init_db\nfrom .core.logger import logger\nfrom .core.plugin_loader import PluginLoader\nfrom .core.scheduler import SchedulerService\nfrom .core.task_manager import TaskManager\nfrom .models.api_key import APIKey\nfrom .models.auth import User\nfrom .services.clean_release.facade import CleanReleaseFacade\nfrom .services.clean_release.repositories import (\n ApprovalRepository,\n ArtifactRepository,\n AuditRepository,\n CandidateRepository,\n ComplianceRepository,\n ManifestRepository,\n PolicyRepository,\n PublicationRepository,\n ReportRepository,\n)\nfrom .services.clean_release.repository import CleanReleaseRepository\nfrom .services.mapping_service import MappingService\nfrom .services.resource_service import ResourceService\n\n# Initialize singletons lazily to avoid import-time DB side effects during test collection.\n# Use absolute path relative to this file to ensure plugins are found regardless of CWD\nproject_root = Path(__file__).parent.parent.parent\nconfig_path = project_root / \"config.json\"\n\nconfig_manager: ConfigManager | None = None\nplugin_loader: PluginLoader | None = None\ntask_manager: TaskManager | None = None\nscheduler_service: SchedulerService | None = None\nresource_service: ResourceService | None = None\n\n\n# #region get_config_manager [C:1] [TYPE Function]\n# @BRIEF Dependency injector for ConfigManager.\n# @PRE Global config_manager must be initialized.\n# @POST Returns shared ConfigManager instance.\ndef get_config_manager() -> ConfigManager:\n \"\"\"Dependency injector for ConfigManager.\"\"\"\n global config_manager\n if config_manager is None:\n init_db()\n config_manager = ConfigManager(config_path=str(config_path))\n return config_manager\n\n\n# #endregion get_config_manager\n\nplugin_dir = Path(__file__).parent / \"plugins\"\n\n# Clean Release Redesign Singletons\n# Note: These use get_db() which is a generator, so we need a way to provide a session.\n# For singletons in dependencies.py, we might need a different approach or\n# initialize them inside the dependency functions.\n\n\n# #region get_plugin_loader [C:1] [TYPE Function]\n# @BRIEF Dependency injector for PluginLoader.\n# @PRE Global plugin_loader must be initialized.\n# @POST Returns shared PluginLoader instance.\ndef get_plugin_loader() -> PluginLoader:\n \"\"\"Dependency injector for PluginLoader.\"\"\"\n global plugin_loader\n if plugin_loader is None:\n plugin_loader = PluginLoader(plugin_dir=str(plugin_dir))\n logger.info(f\"PluginLoader initialized with directory: {plugin_dir}\")\n logger.info(\n f\"Available plugins: {[config.name for config in plugin_loader.get_all_plugin_configs()]}\"\n )\n return plugin_loader\n\n\n# #endregion get_plugin_loader\n\n\n# #region get_task_manager [C:1] [TYPE Function]\n# @BRIEF Dependency injector for TaskManager.\n# @PRE Global task_manager must be initialized.\n# @POST Returns shared TaskManager instance.\ndef get_task_manager() -> TaskManager:\n \"\"\"Dependency injector for TaskManager.\"\"\"\n global task_manager\n if task_manager is None:\n task_manager = TaskManager(get_plugin_loader())\n logger.info(\"TaskManager initialized\")\n return task_manager\n\n\n# #endregion get_task_manager\n\n\n# #region get_scheduler_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for SchedulerService.\n# @PRE Global scheduler_service must be initialized.\n# @POST Returns shared SchedulerService instance.\ndef get_scheduler_service() -> SchedulerService:\n \"\"\"Dependency injector for SchedulerService.\"\"\"\n global scheduler_service\n if scheduler_service is None:\n scheduler_service = SchedulerService(get_task_manager(), get_config_manager())\n logger.info(\"SchedulerService initialized\")\n return scheduler_service\n\n\n# #endregion get_scheduler_service\n\n\n# #region get_resource_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for ResourceService.\n# @PRE Global resource_service must be initialized.\n# @POST Returns shared ResourceService instance.\ndef get_resource_service() -> ResourceService:\n \"\"\"Dependency injector for ResourceService.\"\"\"\n global resource_service\n if resource_service is None:\n resource_service = ResourceService()\n logger.info(\"ResourceService initialized\")\n return resource_service\n\n\n# #endregion get_resource_service\n\n\n# #region get_mapping_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for MappingService.\n# @PRE Global config_manager must be initialized.\n# @POST Returns new MappingService instance.\ndef get_mapping_service() -> MappingService:\n \"\"\"Dependency injector for MappingService.\"\"\"\n return MappingService(get_config_manager())\n\n\n# #endregion get_mapping_service\n\n\n_clean_release_repository = CleanReleaseRepository()\n\n\n# #region get_clean_release_repository [C:1] [TYPE Function]\n# @BRIEF Legacy compatibility shim for CleanReleaseRepository.\n# @POST Returns a shared CleanReleaseRepository instance.\ndef get_clean_release_repository() -> CleanReleaseRepository:\n \"\"\"Legacy compatibility shim for CleanReleaseRepository.\"\"\"\n return _clean_release_repository\n\n\n# #endregion get_clean_release_repository\n\n\n# #region get_clean_release_facade [C:1] [TYPE Function]\n# @BRIEF Dependency injector for CleanReleaseFacade.\n# @POST Returns a facade instance with a fresh DB session.\ndef get_clean_release_facade(db=Depends(get_db)) -> CleanReleaseFacade:\n candidate_repo = CandidateRepository(db)\n artifact_repo = ArtifactRepository(db)\n manifest_repo = ManifestRepository(db)\n policy_repo = PolicyRepository(db)\n compliance_repo = ComplianceRepository(db)\n report_repo = ReportRepository(db)\n approval_repo = ApprovalRepository(db)\n publication_repo = PublicationRepository(db)\n audit_repo = AuditRepository(db)\n\n return CleanReleaseFacade(\n candidate_repo=candidate_repo,\n artifact_repo=artifact_repo,\n manifest_repo=manifest_repo,\n policy_repo=policy_repo,\n compliance_repo=compliance_repo,\n report_repo=report_repo,\n approval_repo=approval_repo,\n publication_repo=publication_repo,\n audit_repo=audit_repo,\n config_manager=get_config_manager(),\n )\n\n\n# #endregion get_clean_release_facade\n\n# #region APIKeyPrincipal [C:1] [TYPE Class]\n# @BRIEF Dataclass representing an authenticated API key principal for service-to-service auth.\n@dataclass\nclass APIKeyPrincipal:\n name: str\n api_key_id: str\n environment_id: Optional[str] = None\n permissions: list[str] = field(default_factory=list)\n# #endregion APIKeyPrincipal\n\n\n# #region require_api_key_or_jwt [C:4] [TYPE Function]\n# @BRIEF Factory: creates a dependency that accepts either a valid API key (with permission check)\n# OR a JWT (with standard has_permission check). Returns the authenticated user/principal name.\n# JWT takes precedence when both auth methods are present.\n# When API key is used, its environment_id scope is enforced against the caller's environment_id.\n# @PRE required_api_permission is a dot-separated string e.g. \"maintenance:start\".\n# required_jwt_resource and required_jwt_action are the JWT permission to check.\n# environment_id is the target environment for the operation (may be None for cross-env ops).\n# @POST Returns str (username or api key name). Raises 400/401/403 if auth fails or scope mismatch.\n# @SIDE_EFFECT Updates APIKey.last_used_at on successful API key auth.\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [decode_token]\ndef require_api_key_or_jwt(\n required_api_permission: str,\n required_jwt_resource: str,\n required_jwt_action: str,\n environment_id: str | None = None,\n):\n \"\"\"Factory: creates a combined API-key-or-JWT auth dependency with environment scoping.\n\n JWT takes precedence when both Authorization: Bearer and X-API-Key are present.\n When API key auth is used, the key's environment_id scope is enforced:\n - If key.environment_id differs from environment_id → 400\n - If environment_id is None, the key's scope is used as default (auto-scope).\n\n Args:\n required_api_permission: Permission string to check against API key (e.g. 'maintenance:start').\n required_jwt_resource: JWT resource for has_permission fallback.\n required_jwt_action: JWT action for has_permission fallback.\n environment_id: Target environment for the operation. Pass None for cross-env operations.\n \"\"\"\n async def _auth_dependency(\n request: Request,\n db=Depends(get_db),\n auth_db=Depends(get_auth_db),\n token: str | None = Depends(oauth2_scheme_optional),\n ) -> str:\n from .core.auth.api_key import hash_api_key\n\n # Resolve effective environment_id: factory parameter > request body > None\n effective_env_id = environment_id\n if effective_env_id is None:\n try:\n body = await request.json()\n effective_env_id = body.get(\"environment_id\")\n except (json.JSONDecodeError, KeyError, AttributeError):\n pass\n\n # ── Try JWT auth first (JWT takes precedence over API key) ──\n if token:\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n username = username_value\n except Exception:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n\n repo = AuthRepository(auth_db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"User not found\",\n )\n\n # Check JWT permission (Admin has full access)\n has_perm = any(\n role.name == \"Admin\"\n for role in user.roles\n )\n if not has_perm:\n for role in user.roles:\n for perm in role.permissions:\n if perm.resource == required_jwt_resource and perm.action == required_jwt_action:\n has_perm = True\n break\n if has_perm:\n break\n\n if not has_perm:\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {required_jwt_resource}:{required_jwt_action}\",\n )\n\n logger.info(f\"JWT auth: {user.username}\")\n return f\"jwt:{user.username}\"\n\n # ── Try API key auth ──\n raw_key = request.headers.get(\"X-API-Key\")\n if raw_key:\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if not api_key:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Invalid API key\",\n )\n if not api_key.active:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has been revoked\",\n )\n if api_key.expires_at:\n expires_at = api_key.expires_at\n if expires_at.tzinfo is None:\n expires_at = expires_at.replace(tzinfo=timezone.utc)\n if expires_at < datetime.now(timezone.utc):\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has expired\",\n )\n\n # Check API key has required permission\n api_permissions = list(api_key.permissions or [])\n if required_api_permission not in api_permissions:\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"API key lacks permission '{required_api_permission}'\",\n )\n\n # Environment scoping check: key's scope vs effective operation env\n key_env = api_key.environment_id\n if key_env is not None and effective_env_id is not None and key_env != effective_env_id:\n raise HTTPException(\n status_code=status.HTTP_400_BAD_REQUEST,\n detail=f\"API key is restricted to environment '{key_env}'\",\n )\n\n # Update last_used_at (best-effort, non-blocking)\n api_key.last_used_at = datetime.now(timezone.utc)\n db.flush()\n\n logger.info(f\"API key auth: {api_key.name} ({api_key.prefix}...)\")\n return f\"api_key:{api_key.name}\"\n\n # ── Neither JWT nor API key provided ──\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Authentication required (API key or JWT)\",\n )\n\n return _auth_dependency\n\n\n# #endregion require_api_key_or_jwt\n\n\n# #region check_api_key_environment_scope [C:1] [TYPE Function]\n# @BRIEF Check the request's API key environment scope against a target env_id. Raises 400 if mismatch.\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\nasync def check_api_key_environment_scope(request: Request, db, target_env_id: str) -> None:\n \"\"\"Check the request's API key environment scope against a target environment_id.\n\n If the API key has an environment_id set and it differs from target_env_id,\n raises HTTP 400. This is used in route handlers where the target env_id\n is only known at request time (e.g., loaded from DB in end_maintenance).\n\n Args:\n request: FastAPI request object (to extract X-API-Key header).\n db: Database session.\n target_env_id: The target environment to validate against.\n \"\"\"\n from .core.auth.api_key import hash_api_key\n\n raw_key = request.headers.get(\"X-API-Key\")\n if not raw_key:\n return\n\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if api_key is None:\n return\n\n key_env = api_key.environment_id\n if key_env is not None and key_env != target_env_id:\n raise HTTPException(\n status_code=status.HTTP_400_BAD_REQUEST,\n detail=f\"API key is restricted to environment '{key_env}'\",\n )\n# #endregion check_api_key_environment_scope\n\n\n# #region get_api_key_principal [C:3] [TYPE Function]\n# @BRIEF FastAPI dependency that reads X-API-Key header and returns APIKeyPrincipal or None.\n# @PRE X-API-Key header may be present in the request.\n# @POST If valid key: returns APIKeyPrincipal; if no header: returns None; if invalid: raises 401.\n# @SIDE_EFFECT Updates last_used_at on the APIKey row (non-blocking flush).\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\nasync def get_api_key_principal(\n request: Request,\n db=Depends(get_db),\n) -> Optional[APIKeyPrincipal]:\n \"\"\"Extract and validate API key from X-API-Key header.\n\n If no header is present, returns None (fall through to JWT auth).\n If header is present but invalid, raises 401.\n\n Returns:\n APIKeyPrincipal | None: Principal if valid API key, None if no header.\n \"\"\"\n from .core.auth.api_key import hash_api_key\n\n raw_key = request.headers.get(\"X-API-Key\")\n if not raw_key:\n return None\n\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n\n if not api_key:\n logger.warning(f\"API key auth failed: key not found (hash prefix: {raw_key[:11]}...)\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Invalid API key\",\n )\n\n if not api_key.active:\n logger.warning(f\"API key auth failed: key revoked (id: {api_key.id}, name: {api_key.name})\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has been revoked\",\n )\n\n if api_key.expires_at:\n expires_at = api_key.expires_at\n if expires_at.tzinfo is None:\n expires_at = expires_at.replace(tzinfo=timezone.utc)\n if expires_at < datetime.now(timezone.utc):\n logger.warning(f\"API key auth failed: key expired (id: {api_key.id}, name: {api_key.name})\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has expired\",\n )\n\n # Update last_used_at (non-blocking, best-effort)\n api_key.last_used_at = datetime.now(timezone.utc)\n db.flush()\n\n logger.info(f\"API key auth success: {api_key.name} ({api_key.prefix}...)\")\n return APIKeyPrincipal(\n name=api_key.name,\n api_key_id=api_key.id,\n environment_id=api_key.environment_id,\n permissions=list(api_key.permissions or []),\n )\n\n\n# #endregion get_api_key_principal\n\n\n# #region oauth2_scheme [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:OAuth2PasswordBearer]\n# @BRIEF OAuth2 password bearer scheme for token extraction (raises 401 on missing token).\noauth2_scheme = OAuth2PasswordBearer(tokenUrl=\"/api/auth/login\", auto_error=True)\n# #endregion oauth2_scheme\n\n# #region oauth2_scheme_optional [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:OAuth2PasswordBearer]\n# @BRIEF Optional OAuth2 scheme — returns None instead of raising 401 when no token.\n# @RATIONALE Used in dual-auth routes (API key OR JWT) where JWT may be absent.\noauth2_scheme_optional = OAuth2PasswordBearer(tokenUrl=\"/api/auth/login\", auto_error=False)\n# #endregion oauth2_scheme_optional\n\n\n# #region get_current_user [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for retrieving currently authenticated user from a JWT.\n# @PRE JWT token provided in Authorization header.\n# @POST Returns User object if token is valid.\ndef get_current_user(token: str = Depends(oauth2_scheme), db=Depends(get_auth_db)):\n credentials_exception = HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise credentials_exception\n username = username_value\n except JWTError:\n raise credentials_exception\n\n repo = AuthRepository(db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise credentials_exception\n return user\n\n\n# #endregion get_current_user\n\n\n# #region has_permission [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for checking if the current user has a specific permission.\n# @PRE User is authenticated.\n# @POST Returns True if user has permission.\ndef has_permission(resource: str, action: str):\n def permission_checker(current_user: User = Depends(get_current_user)):\n # Union of all permissions across all roles\n for role in current_user.roles:\n for perm in role.permissions:\n if perm.resource == resource and perm.action == action:\n return current_user\n\n # Special case for Admin role (full access)\n if any(role.name == \"Admin\" for role in current_user.roles):\n return current_user\n\n from .core.auth.logger import log_security_event\n\n log_security_event(\n \"PERMISSION_DENIED\",\n str(getattr(current_user, \"username\", \"unknown\")),\n {\"resource\": resource, \"action\": action},\n )\n\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {resource}:{action}\",\n )\n\n return permission_checker\n\n\n# #endregion has_permission\n\n# #endregion AppDependencies\n" + "body": "# #region AppDependencies [C:4] [TYPE Module] [SEMANTICS fastapi, schedule, auth, api_key]\n# @BRIEF Manages creation and provision of shared application dependencies, such as PluginLoader and TaskManager, to avoid circular imports.\n# @LAYER Core\n# @PURPOSE Provides shared instances to app and routers.\n# @RELATION CALLS -> [CleanReleaseRepository]\n# @RELATION CALLS -> [ConfigManager]\n# @RELATION CALLS -> [PluginLoader]\n# @RELATION CALLS -> [SchedulerService]\n# @RELATION CALLS -> [TaskManager]\n# @RELATION CALLS -> [get_all_plugin_configs]\n# @RELATION CALLS -> [get_db]\n# @RELATION CALLS -> [APIKeyPrincipal]\n# @RELATION CALLS -> [get_api_key_principal]\n# @RELATION CALLS -> [info]\n\nimport json\n\nfrom dataclasses import dataclass, field\nfrom datetime import datetime, timezone\nfrom pathlib import Path\nfrom typing import Optional\n\nfrom fastapi import Depends, HTTPException, Request, status\nfrom fastapi.security import OAuth2PasswordBearer\nfrom jose import JWTError\n\nfrom .core.auth.jwt import decode_token, is_token_blacklisted\nfrom .core.auth.repository import AuthRepository\nfrom .core.config_manager import ConfigManager\nfrom .core.database import get_auth_db, get_db, init_db\nfrom .core.logger import logger\nfrom .core.plugin_loader import PluginLoader\nfrom .core.scheduler import SchedulerService\nfrom .core.task_manager import TaskManager\nfrom .models.api_key import APIKey\nfrom .models.auth import User\nfrom .services.clean_release.facade import CleanReleaseFacade\nfrom .services.clean_release.repositories import (\n ApprovalRepository,\n ArtifactRepository,\n AuditRepository,\n CandidateRepository,\n ComplianceRepository,\n ManifestRepository,\n PolicyRepository,\n PublicationRepository,\n ReportRepository,\n)\nfrom .services.clean_release.repository import CleanReleaseRepository\nfrom .services.mapping_service import MappingService\nfrom .services.resource_service import ResourceService\n\n# Initialize singletons lazily to avoid import-time DB side effects during test collection.\n# Use absolute path relative to this file to ensure plugins are found regardless of CWD\nproject_root = Path(__file__).parent.parent.parent\nconfig_path = project_root / \"config.json\"\n\nconfig_manager: ConfigManager | None = None\nplugin_loader: PluginLoader | None = None\ntask_manager: TaskManager | None = None\nscheduler_service: SchedulerService | None = None\nresource_service: ResourceService | None = None\n\n\n# #region get_config_manager [C:1] [TYPE Function]\n# @BRIEF Dependency injector for ConfigManager.\n# @PRE Global config_manager must be initialized.\n# @POST Returns shared ConfigManager instance.\ndef get_config_manager() -> ConfigManager:\n \"\"\"Dependency injector for ConfigManager.\"\"\"\n global config_manager\n if config_manager is None:\n init_db()\n config_manager = ConfigManager(config_path=str(config_path))\n return config_manager\n\n\n# #endregion get_config_manager\n\nplugin_dir = Path(__file__).parent / \"plugins\"\n\n# Clean Release Redesign Singletons\n# Note: These use get_db() which is a generator, so we need a way to provide a session.\n# For singletons in dependencies.py, we might need a different approach or\n# initialize them inside the dependency functions.\n\n\n# #region get_plugin_loader [C:1] [TYPE Function]\n# @BRIEF Dependency injector for PluginLoader.\n# @PRE Global plugin_loader must be initialized.\n# @POST Returns shared PluginLoader instance.\ndef get_plugin_loader() -> PluginLoader:\n \"\"\"Dependency injector for PluginLoader.\"\"\"\n global plugin_loader\n if plugin_loader is None:\n plugin_loader = PluginLoader(plugin_dir=str(plugin_dir))\n logger.info(f\"PluginLoader initialized with directory: {plugin_dir}\")\n logger.info(\n f\"Available plugins: {[config.name for config in plugin_loader.get_all_plugin_configs()]}\"\n )\n return plugin_loader\n\n\n# #endregion get_plugin_loader\n\n\n# #region get_task_manager [C:1] [TYPE Function]\n# @BRIEF Dependency injector for TaskManager.\n# @PRE Global task_manager must be initialized.\n# @POST Returns shared TaskManager instance.\ndef get_task_manager() -> TaskManager:\n \"\"\"Dependency injector for TaskManager.\"\"\"\n global task_manager\n if task_manager is None:\n task_manager = TaskManager(get_plugin_loader())\n logger.info(\"TaskManager initialized\")\n return task_manager\n\n\n# #endregion get_task_manager\n\n\n# #region get_scheduler_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for SchedulerService.\n# @PRE Global scheduler_service must be initialized.\n# @POST Returns shared SchedulerService instance.\ndef get_scheduler_service() -> SchedulerService:\n \"\"\"Dependency injector for SchedulerService.\"\"\"\n global scheduler_service\n if scheduler_service is None:\n scheduler_service = SchedulerService(get_task_manager(), get_config_manager())\n logger.info(\"SchedulerService initialized\")\n return scheduler_service\n\n\n# #endregion get_scheduler_service\n\n\n# #region get_resource_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for ResourceService.\n# @PRE Global resource_service must be initialized.\n# @POST Returns shared ResourceService instance.\ndef get_resource_service() -> ResourceService:\n \"\"\"Dependency injector for ResourceService.\"\"\"\n global resource_service\n if resource_service is None:\n resource_service = ResourceService()\n logger.info(\"ResourceService initialized\")\n return resource_service\n\n\n# #endregion get_resource_service\n\n\n# #region get_mapping_service [C:1] [TYPE Function]\n# @BRIEF Dependency injector for MappingService.\n# @PRE Global config_manager must be initialized.\n# @POST Returns new MappingService instance.\ndef get_mapping_service() -> MappingService:\n \"\"\"Dependency injector for MappingService.\"\"\"\n return MappingService(get_config_manager())\n\n\n# #endregion get_mapping_service\n\n\n_clean_release_repository = CleanReleaseRepository()\n\n\n# #region get_clean_release_repository [C:1] [TYPE Function]\n# @BRIEF Legacy compatibility shim for CleanReleaseRepository.\n# @POST Returns a shared CleanReleaseRepository instance.\ndef get_clean_release_repository() -> CleanReleaseRepository:\n \"\"\"Legacy compatibility shim for CleanReleaseRepository.\"\"\"\n return _clean_release_repository\n\n\n# #endregion get_clean_release_repository\n\n\n# #region get_clean_release_facade [C:1] [TYPE Function]\n# @BRIEF Dependency injector for CleanReleaseFacade.\n# @POST Returns a facade instance with a fresh DB session.\ndef get_clean_release_facade(db=Depends(get_db)) -> CleanReleaseFacade:\n candidate_repo = CandidateRepository(db)\n artifact_repo = ArtifactRepository(db)\n manifest_repo = ManifestRepository(db)\n policy_repo = PolicyRepository(db)\n compliance_repo = ComplianceRepository(db)\n report_repo = ReportRepository(db)\n approval_repo = ApprovalRepository(db)\n publication_repo = PublicationRepository(db)\n audit_repo = AuditRepository(db)\n\n return CleanReleaseFacade(\n candidate_repo=candidate_repo,\n artifact_repo=artifact_repo,\n manifest_repo=manifest_repo,\n policy_repo=policy_repo,\n compliance_repo=compliance_repo,\n report_repo=report_repo,\n approval_repo=approval_repo,\n publication_repo=publication_repo,\n audit_repo=audit_repo,\n config_manager=get_config_manager(),\n )\n\n\n# #endregion get_clean_release_facade\n\n# #region APIKeyPrincipal [C:1] [TYPE Class]\n# @BRIEF Dataclass representing an authenticated API key principal for service-to-service auth.\n@dataclass\nclass APIKeyPrincipal:\n name: str\n api_key_id: str\n environment_id: Optional[str] = None\n permissions: list[str] = field(default_factory=list)\n# #endregion APIKeyPrincipal\n\n\n# #region require_api_key_or_jwt [C:4] [TYPE Function]\n# @BRIEF Factory: creates a dependency that accepts either a valid API key (with permission check)\n# OR a JWT (with standard has_permission check). Returns the authenticated user/principal name.\n# JWT takes precedence when both auth methods are present.\n# When API key is used, its environment_id scope is enforced against the caller's environment_id.\n# @PRE required_api_permission is a dot-separated string e.g. \"maintenance:start\".\n# required_jwt_resource and required_jwt_action are the JWT permission to check.\n# environment_id is the target environment for the operation (may be None for cross-env ops).\n# @POST Returns str (username or api key name). Raises 400/401/403 if auth fails or scope mismatch.\n# @SIDE_EFFECT Updates APIKey.last_used_at on successful API key auth.\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [decode_token]\ndef require_api_key_or_jwt(\n required_api_permission: str,\n required_jwt_resource: str,\n required_jwt_action: str,\n environment_id: str | None = None,\n):\n \"\"\"Factory: creates a combined API-key-or-JWT auth dependency with environment scoping.\n\n JWT takes precedence when both Authorization: Bearer and X-API-Key are present.\n When API key auth is used, the key's environment_id scope is enforced:\n - If key.environment_id differs from environment_id → 400\n - If environment_id is None, the key's scope is used as default (auto-scope).\n\n Args:\n required_api_permission: Permission string to check against API key (e.g. 'maintenance:start').\n required_jwt_resource: JWT resource for has_permission fallback.\n required_jwt_action: JWT action for has_permission fallback.\n environment_id: Target environment for the operation. Pass None for cross-env operations.\n \"\"\"\n async def _auth_dependency(\n request: Request,\n db=Depends(get_db),\n auth_db=Depends(get_auth_db),\n token: str | None = Depends(oauth2_scheme_optional),\n ) -> str:\n from .core.auth.api_key import hash_api_key\n\n # Resolve effective environment_id: factory parameter > request body > None\n effective_env_id = environment_id\n if effective_env_id is None:\n try:\n body = await request.json()\n effective_env_id = body.get(\"environment_id\")\n except (json.JSONDecodeError, KeyError, AttributeError):\n pass\n\n # ── Try JWT auth first (JWT takes precedence over API key) ──\n if token:\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n username = username_value\n except Exception:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n\n repo = AuthRepository(auth_db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"User not found\",\n )\n\n # Check JWT permission (Admin has full access)\n has_perm = any(\n role.name == \"Admin\"\n for role in user.roles\n )\n if not has_perm:\n for role in user.roles:\n for perm in role.permissions:\n if perm.resource == required_jwt_resource and perm.action == required_jwt_action:\n has_perm = True\n break\n if has_perm:\n break\n\n if not has_perm:\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {required_jwt_resource}:{required_jwt_action}\",\n )\n\n logger.info(f\"JWT auth: {user.username}\")\n return f\"jwt:{user.username}\"\n\n # ── Try API key auth ──\n raw_key = request.headers.get(\"X-API-Key\")\n if raw_key:\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if not api_key:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Invalid API key\",\n )\n if not api_key.active:\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has been revoked\",\n )\n if api_key.expires_at:\n expires_at = api_key.expires_at\n if expires_at.tzinfo is None:\n expires_at = expires_at.replace(tzinfo=timezone.utc)\n if expires_at < datetime.now(timezone.utc):\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has expired\",\n )\n\n # Check API key has required permission\n api_permissions = list(api_key.permissions or [])\n if required_api_permission not in api_permissions:\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"API key lacks permission '{required_api_permission}'\",\n )\n\n # Environment scoping check: key's scope vs effective operation env\n key_env = api_key.environment_id\n if key_env is not None and effective_env_id is not None and key_env != effective_env_id:\n raise HTTPException(\n status_code=status.HTTP_400_BAD_REQUEST,\n detail=f\"API key is restricted to environment '{key_env}'\",\n )\n\n # Update last_used_at (best-effort, non-blocking)\n api_key.last_used_at = datetime.now(timezone.utc)\n db.flush()\n\n logger.info(f\"API key auth: {api_key.name} ({api_key.prefix}...)\")\n return f\"api_key:{api_key.name}\"\n\n # ── Neither JWT nor API key provided ──\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Authentication required (API key or JWT)\",\n )\n\n return _auth_dependency\n\n\n# #endregion require_api_key_or_jwt\n\n\n# #region check_api_key_environment_scope [C:1] [TYPE Function]\n# @BRIEF Check the request's API key environment scope against a target env_id. Raises 400 if mismatch.\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\nasync def check_api_key_environment_scope(request: Request, db, target_env_id: str) -> None:\n \"\"\"Check the request's API key environment scope against a target environment_id.\n\n If the API key has an environment_id set and it differs from target_env_id,\n raises HTTP 400. This is used in route handlers where the target env_id\n is only known at request time (e.g., loaded from DB in end_maintenance).\n\n Args:\n request: FastAPI request object (to extract X-API-Key header).\n db: Database session.\n target_env_id: The target environment to validate against.\n \"\"\"\n from .core.auth.api_key import hash_api_key\n\n raw_key = request.headers.get(\"X-API-Key\")\n if not raw_key:\n return\n\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n if api_key is None:\n return\n\n key_env = api_key.environment_id\n if key_env is not None and key_env != target_env_id:\n raise HTTPException(\n status_code=status.HTTP_400_BAD_REQUEST,\n detail=f\"API key is restricted to environment '{key_env}'\",\n )\n# #endregion check_api_key_environment_scope\n\n\n# #region get_api_key_principal [C:3] [TYPE Function]\n# @BRIEF FastAPI dependency that reads X-API-Key header and returns APIKeyPrincipal or None.\n# @PRE X-API-Key header may be present in the request.\n# @POST If valid key: returns APIKeyPrincipal; if no header: returns None; if invalid: raises 401.\n# @SIDE_EFFECT Updates last_used_at on the APIKey row (non-blocking flush).\n# @RELATION DEPENDS_ON -> [APIKeyModel]\n# @RELATION DEPENDS_ON -> [hash_api_key]\nasync def get_api_key_principal(\n request: Request,\n db=Depends(get_db),\n) -> Optional[APIKeyPrincipal]:\n \"\"\"Extract and validate API key from X-API-Key header.\n\n If no header is present, returns None (fall through to JWT auth).\n If header is present but invalid, raises 401.\n\n Returns:\n APIKeyPrincipal | None: Principal if valid API key, None if no header.\n \"\"\"\n from .core.auth.api_key import hash_api_key\n\n raw_key = request.headers.get(\"X-API-Key\")\n if not raw_key:\n return None\n\n key_hash = hash_api_key(raw_key)\n api_key = db.query(APIKey).filter(APIKey.key_hash == key_hash).first()\n\n if not api_key:\n logger.warning(f\"API key auth failed: key not found (hash prefix: {raw_key[:11]}...)\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Invalid API key\",\n )\n\n if not api_key.active:\n logger.warning(f\"API key auth failed: key revoked (id: {api_key.id}, name: {api_key.name})\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has been revoked\",\n )\n\n if api_key.expires_at:\n expires_at = api_key.expires_at\n if expires_at.tzinfo is None:\n expires_at = expires_at.replace(tzinfo=timezone.utc)\n if expires_at < datetime.now(timezone.utc):\n logger.warning(f\"API key auth failed: key expired (id: {api_key.id}, name: {api_key.name})\")\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"API key has expired\",\n )\n\n # Update last_used_at (non-blocking, best-effort)\n api_key.last_used_at = datetime.now(timezone.utc)\n db.flush()\n\n logger.info(f\"API key auth success: {api_key.name} ({api_key.prefix}...)\")\n return APIKeyPrincipal(\n name=api_key.name,\n api_key_id=api_key.id,\n environment_id=api_key.environment_id,\n permissions=list(api_key.permissions or []),\n )\n\n\n# #endregion get_api_key_principal\n\n\n# #region oauth2_scheme [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:OAuth2PasswordBearer]\n# @BRIEF OAuth2 password bearer scheme for token extraction (raises 401 on missing token).\noauth2_scheme = OAuth2PasswordBearer(tokenUrl=\"/api/auth/login\", auto_error=True)\n# #endregion oauth2_scheme\n\n# #region oauth2_scheme_optional [C:1] [TYPE Variable]\n# @RELATION DEPENDS_ON -> [EXT:Library:OAuth2PasswordBearer]\n# @BRIEF Optional OAuth2 scheme — returns None instead of raising 401 when no token.\n# @RATIONALE Used in dual-auth routes (API key OR JWT) where JWT may be absent.\noauth2_scheme_optional = OAuth2PasswordBearer(tokenUrl=\"/api/auth/login\", auto_error=False)\n# #endregion oauth2_scheme_optional\n\n\n# #region get_current_user [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @RELATION CALLS -> [is_token_blacklisted]\n# @BRIEF Dependency for retrieving currently authenticated user from a JWT.\n# @PRE JWT token provided in Authorization header.\n# @POST Returns User object if token is valid and not revoked.\ndef get_current_user(token: str = Depends(oauth2_scheme), db=Depends(get_auth_db)):\n credentials_exception = HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise credentials_exception\n username = username_value\n except JWTError:\n raise credentials_exception\n\n # Check blacklist\n if is_token_blacklisted(token, db):\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Token has been revoked\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n\n repo = AuthRepository(db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise credentials_exception\n return user\n\n\n# #endregion get_current_user\n\n\n# #region has_permission [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for checking if the current user has a specific permission.\n# @PRE User is authenticated.\n# @POST Returns True if user has permission.\ndef has_permission(resource: str, action: str):\n def permission_checker(current_user: User = Depends(get_current_user)):\n # Union of all permissions across all roles\n for role in current_user.roles:\n for perm in role.permissions:\n if perm.resource == resource and perm.action == action:\n return current_user\n\n # Special case for Admin role (full access) — uses is_admin flag, not name string.\n # Fallback to role.name == \"Admin\" for roles created before is_admin migration.\n if any(\n getattr(role, \"is_admin\", False) or role.name == \"Admin\"\n for role in current_user.roles\n ):\n return current_user\n\n from .core.auth.logger import log_security_event\n\n log_security_event(\n \"PERMISSION_DENIED\",\n str(getattr(current_user, \"username\", \"unknown\")),\n {\"resource\": resource, \"action\": action},\n )\n\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {resource}:{action}\",\n )\n\n return permission_checker\n\n\n# #endregion has_permission\n\n# #endregion AppDependencies\n" }, { "contract_id": "get_config_manager", @@ -30779,13 +31172,13 @@ "contract_type": "Function", "file_path": "backend/src/dependencies.py", "start_line": 501, - "end_line": 528, + "end_line": 537, "tier": "TIER_2", "complexity": 3, "metadata": { "BRIEF": "Dependency for retrieving currently authenticated user from a JWT.", "COMPLEXITY": 3, - "POST": "Returns User object if token is valid.", + "POST": "Returns User object if token is valid and not revoked.", "PRE": "JWT token provided in Authorization header." }, "relations": [ @@ -30794,19 +31187,25 @@ "relation_type": "CALLS", "target_id": "AuthRepository", "target_ref": "AuthRepository" + }, + { + "source_id": "get_current_user", + "relation_type": "CALLS", + "target_id": "is_token_blacklisted", + "target_ref": "[is_token_blacklisted]" } ], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region get_current_user [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for retrieving currently authenticated user from a JWT.\n# @PRE JWT token provided in Authorization header.\n# @POST Returns User object if token is valid.\ndef get_current_user(token: str = Depends(oauth2_scheme), db=Depends(get_auth_db)):\n credentials_exception = HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise credentials_exception\n username = username_value\n except JWTError:\n raise credentials_exception\n\n repo = AuthRepository(db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise credentials_exception\n return user\n\n\n# #endregion get_current_user\n" + "body": "# #region get_current_user [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @RELATION CALLS -> [is_token_blacklisted]\n# @BRIEF Dependency for retrieving currently authenticated user from a JWT.\n# @PRE JWT token provided in Authorization header.\n# @POST Returns User object if token is valid and not revoked.\ndef get_current_user(token: str = Depends(oauth2_scheme), db=Depends(get_auth_db)):\n credentials_exception = HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Could not validate credentials\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n try:\n payload = decode_token(token)\n username_value = payload.get(\"sub\")\n if not isinstance(username_value, str) or not username_value:\n raise credentials_exception\n username = username_value\n except JWTError:\n raise credentials_exception\n\n # Check blacklist\n if is_token_blacklisted(token, db):\n raise HTTPException(\n status_code=status.HTTP_401_UNAUTHORIZED,\n detail=\"Token has been revoked\",\n headers={\"WWW-Authenticate\": \"Bearer\"},\n )\n\n repo = AuthRepository(db)\n user = repo.get_user_by_username(username)\n if user is None:\n raise credentials_exception\n return user\n\n\n# #endregion get_current_user\n" }, { "contract_id": "has_permission", "contract_type": "Function", "file_path": "backend/src/dependencies.py", - "start_line": 531, - "end_line": 564, + "start_line": 540, + "end_line": 577, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -30826,7 +31225,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region has_permission [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for checking if the current user has a specific permission.\n# @PRE User is authenticated.\n# @POST Returns True if user has permission.\ndef has_permission(resource: str, action: str):\n def permission_checker(current_user: User = Depends(get_current_user)):\n # Union of all permissions across all roles\n for role in current_user.roles:\n for perm in role.permissions:\n if perm.resource == resource and perm.action == action:\n return current_user\n\n # Special case for Admin role (full access)\n if any(role.name == \"Admin\" for role in current_user.roles):\n return current_user\n\n from .core.auth.logger import log_security_event\n\n log_security_event(\n \"PERMISSION_DENIED\",\n str(getattr(current_user, \"username\", \"unknown\")),\n {\"resource\": resource, \"action\": action},\n )\n\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {resource}:{action}\",\n )\n\n return permission_checker\n\n\n# #endregion has_permission\n" + "body": "# #region has_permission [C:3] [TYPE Function]\n# @RELATION CALLS -> AuthRepository\n# @BRIEF Dependency for checking if the current user has a specific permission.\n# @PRE User is authenticated.\n# @POST Returns True if user has permission.\ndef has_permission(resource: str, action: str):\n def permission_checker(current_user: User = Depends(get_current_user)):\n # Union of all permissions across all roles\n for role in current_user.roles:\n for perm in role.permissions:\n if perm.resource == resource and perm.action == action:\n return current_user\n\n # Special case for Admin role (full access) — uses is_admin flag, not name string.\n # Fallback to role.name == \"Admin\" for roles created before is_admin migration.\n if any(\n getattr(role, \"is_admin\", False) or role.name == \"Admin\"\n for role in current_user.roles\n ):\n return current_user\n\n from .core.auth.logger import log_security_event\n\n log_security_event(\n \"PERMISSION_DENIED\",\n str(getattr(current_user, \"username\", \"unknown\")),\n {\"resource\": resource, \"action\": action},\n )\n\n raise HTTPException(\n status_code=status.HTTP_403_FORBIDDEN,\n detail=f\"Permission denied for {resource}:{action}\",\n )\n\n return permission_checker\n\n\n# #endregion has_permission\n" }, { "contract_id": "ModelsPackage", @@ -31304,7 +31703,7 @@ "contract_type": "Module", "file_path": "backend/src/models/auth.py", "start_line": 1, - "end_line": 134, + "end_line": 151, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -31328,7 +31727,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthModels [C:5] [TYPE Module] [SEMANTICS sqlalchemy, auth, model, schema, user]\n# @BRIEF SQLAlchemy models for multi-user authentication and authorization.\n# @LAYER Domain\n# @RELATION INHERITS -> [EXT:Library:SQLAlchemy.Base]\n#\n# @INVARIANT Usernames and emails must be unique.\n# @PRE Database engine initialized\n# @POST Auth ORM models registered with unique constraints\n# @SIDE_EFFECT Defines auth user tables\n# @DATA_CONTRACT UserData -> UserRecord\n\nfrom datetime import datetime\nimport uuid\n\nfrom sqlalchemy import Boolean, Column, DateTime, ForeignKey, String, Table\nfrom sqlalchemy.orm import relationship\n\nfrom .mapping import Base\n\n\n# #region generate_uuid [TYPE Function]\n# @BRIEF Generates a unique UUID string.\n# @POST Returns a string representation of a new UUID.\n# @RELATION DEPENDS_ON -> [EXT:Python:uuid]\ndef generate_uuid():\n return str(uuid.uuid4())\n\n\n# #endregion generate_uuid\n\n# #region user_roles [TYPE Table]\n# @BRIEF Association table for many-to-many relationship between Users and Roles.\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\n# @RELATION DEPENDS_ON -> [User]\n# @RELATION DEPENDS_ON -> [Role]\nuser_roles = Table(\n \"user_roles\",\n Base.metadata,\n Column(\"user_id\", String, ForeignKey(\"users.id\"), primary_key=True),\n Column(\"role_id\", String, ForeignKey(\"roles.id\"), primary_key=True),\n)\n# #endregion user_roles\n\n# #region role_permissions [TYPE Table]\n# @BRIEF Association table for many-to-many relationship between Roles and Permissions.\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\n# @RELATION DEPENDS_ON -> [Role]\n# @RELATION DEPENDS_ON -> [Permission]\nrole_permissions = Table(\n \"role_permissions\",\n Base.metadata,\n Column(\"role_id\", String, ForeignKey(\"roles.id\"), primary_key=True),\n Column(\"permission_id\", String, ForeignKey(\"permissions.id\"), primary_key=True),\n)\n# #endregion role_permissions\n\n\n# #region User [TYPE Class]\n# @BRIEF Represents an identity that can authenticate to the system.\n# @RELATION BINDS_TO -> [Role]\nclass User(Base):\n __tablename__ = \"users\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n username = Column(String, unique=True, index=True, nullable=False)\n email = Column(String, unique=True, index=True, nullable=True)\n password_hash = Column(String, nullable=True)\n full_name = Column(String, nullable=True)\n auth_source = Column(String, default=\"LOCAL\") # LOCAL or ADFS\n is_active = Column(Boolean, default=True)\n is_ad_user = Column(Boolean, default=False)\n created_at = Column(DateTime, default=datetime.utcnow)\n last_login = Column(DateTime, nullable=True)\n\n roles = relationship(\"Role\", secondary=user_roles, back_populates=\"users\")\n\n\n# #endregion User\n\n\n# #region Role [TYPE Class]\n# @BRIEF Represents a collection of permissions.\n# @RELATION BINDS_TO -> [User]\n# @RELATION BINDS_TO -> [Permission]\nclass Role(Base):\n __tablename__ = \"roles\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, unique=True, index=True, nullable=False)\n description = Column(String, nullable=True)\n\n users = relationship(\"User\", secondary=user_roles, back_populates=\"roles\")\n permissions = relationship(\n \"Permission\", secondary=role_permissions, back_populates=\"roles\"\n )\n\n\n# #endregion Role\n\n\n# #region Permission [TYPE Class]\n# @BRIEF Represents a specific capability within the system.\n# @RELATION BINDS_TO -> [Role]\nclass Permission(Base):\n __tablename__ = \"permissions\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n resource = Column(String, nullable=False) # e.g. \"plugin:backup\"\n action = Column(String, nullable=False) # e.g. \"READ\", \"EXECUTE\", \"WRITE\"\n\n roles = relationship(\n \"Role\", secondary=role_permissions, back_populates=\"permissions\"\n )\n\n\n# #endregion Permission\n\n\n# #region ADGroupMapping [TYPE Class]\n# @BRIEF Maps an Active Directory group to a local System Role.\n# @RELATION DEPENDS_ON -> [Role]\nclass ADGroupMapping(Base):\n __tablename__ = \"ad_group_mappings\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n ad_group = Column(String, unique=True, index=True, nullable=False)\n role_id = Column(String, ForeignKey(\"roles.id\"), nullable=False)\n\n role = relationship(\"Role\")\n\n\n# #endregion ADGroupMapping\n\n# #endregion AuthModels\n" + "body": "# #region AuthModels [C:5] [TYPE Module] [SEMANTICS sqlalchemy, auth, model, schema, user]\n# @BRIEF SQLAlchemy models for multi-user authentication and authorization.\n# @LAYER Domain\n# @RELATION INHERITS -> [EXT:Library:SQLAlchemy.Base]\n#\n# @INVARIANT Usernames and emails must be unique.\n# @PRE Database engine initialized\n# @POST Auth ORM models registered with unique constraints\n# @SIDE_EFFECT Defines auth user tables\n# @DATA_CONTRACT UserData -> UserRecord\n\nfrom datetime import datetime\nimport uuid\n\nfrom sqlalchemy import Boolean, Column, DateTime, ForeignKey, String, Table\nfrom sqlalchemy.orm import relationship\n\nfrom .mapping import Base\n\n\n# #region generate_uuid [TYPE Function]\n# @BRIEF Generates a unique UUID string.\n# @POST Returns a string representation of a new UUID.\n# @RELATION DEPENDS_ON -> [EXT:Python:uuid]\ndef generate_uuid():\n return str(uuid.uuid4())\n\n\n# #endregion generate_uuid\n\n# #region user_roles [TYPE Table]\n# @BRIEF Association table for many-to-many relationship between Users and Roles.\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\n# @RELATION DEPENDS_ON -> [User]\n# @RELATION DEPENDS_ON -> [Role]\nuser_roles = Table(\n \"user_roles\",\n Base.metadata,\n Column(\"user_id\", String, ForeignKey(\"users.id\"), primary_key=True),\n Column(\"role_id\", String, ForeignKey(\"roles.id\"), primary_key=True),\n)\n# #endregion user_roles\n\n# #region role_permissions [TYPE Table]\n# @BRIEF Association table for many-to-many relationship between Roles and Permissions.\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\n# @RELATION DEPENDS_ON -> [Role]\n# @RELATION DEPENDS_ON -> [Permission]\nrole_permissions = Table(\n \"role_permissions\",\n Base.metadata,\n Column(\"role_id\", String, ForeignKey(\"roles.id\"), primary_key=True),\n Column(\"permission_id\", String, ForeignKey(\"permissions.id\"), primary_key=True),\n)\n# #endregion role_permissions\n\n\n# #region User [TYPE Class]\n# @BRIEF Represents an identity that can authenticate to the system.\n# @RELATION BINDS_TO -> [Role]\nclass User(Base):\n __tablename__ = \"users\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n username = Column(String, unique=True, index=True, nullable=False)\n email = Column(String, unique=True, index=True, nullable=True)\n password_hash = Column(String, nullable=True)\n full_name = Column(String, nullable=True)\n auth_source = Column(String, default=\"LOCAL\") # LOCAL or ADFS\n is_active = Column(Boolean, default=True)\n is_ad_user = Column(Boolean, default=False)\n created_at = Column(DateTime, default=datetime.utcnow)\n last_login = Column(DateTime, nullable=True)\n\n roles = relationship(\"Role\", secondary=user_roles, back_populates=\"users\")\n\n\n# #endregion User\n\n\n# #region Role [TYPE Class]\n# @BRIEF Represents a collection of permissions.\n# @RELATION BINDS_TO -> [User]\n# @RELATION BINDS_TO -> [Permission]\nclass Role(Base):\n __tablename__ = \"roles\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, unique=True, index=True, nullable=False)\n description = Column(String, nullable=True)\n is_admin = Column(Boolean, default=False, nullable=False)\n\n users = relationship(\"User\", secondary=user_roles, back_populates=\"roles\")\n permissions = relationship(\n \"Permission\", secondary=role_permissions, back_populates=\"roles\"\n )\n\n\n# #endregion Role\n\n\n# #region Permission [TYPE Class]\n# @BRIEF Represents a specific capability within the system.\n# @RELATION BINDS_TO -> [Role]\nclass Permission(Base):\n __tablename__ = \"permissions\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n resource = Column(String, nullable=False) # e.g. \"plugin:backup\"\n action = Column(String, nullable=False) # e.g. \"READ\", \"EXECUTE\", \"WRITE\"\n\n roles = relationship(\n \"Role\", secondary=role_permissions, back_populates=\"permissions\"\n )\n\n\n# #endregion Permission\n\n\n# #region TokenBlacklist [TYPE Class]\n# @BRIEF Stores SHA-256 hashes of revoked JWTs for server-side token blacklisting.\n# @INVARIANT Only the SHA-256 hash of the token is stored — never the raw token.\n# Expired entries are cleaned up by _prune_blacklist().\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\nclass TokenBlacklist(Base):\n __tablename__ = \"token_blacklist\"\n\n jti = Column(String, primary_key=True) # JWT ID from the token\n token_hash = Column(String(64), nullable=False, index=True) # SHA-256 of token\n expires_at = Column(DateTime, nullable=False) # Token's original exp claim\n revoked_at = Column(DateTime, nullable=False, default=datetime.utcnow)\n\n\n# #endregion TokenBlacklist\n\n# #region ADGroupMapping [TYPE Class]\n# @BRIEF Maps an Active Directory group to a local System Role.\n# @RELATION DEPENDS_ON -> [Role]\nclass ADGroupMapping(Base):\n __tablename__ = \"ad_group_mappings\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n ad_group = Column(String, unique=True, index=True, nullable=False)\n role_id = Column(String, ForeignKey(\"roles.id\"), nullable=False)\n\n role = relationship(\"Role\")\n\n\n# #endregion ADGroupMapping\n\n# #endregion AuthModels\n" }, { "contract_id": "generate_uuid", @@ -31432,7 +31831,7 @@ "contract_type": "Class", "file_path": "backend/src/models/auth.py", "start_line": 81, - "end_line": 98, + "end_line": 99, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -31455,14 +31854,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region Role [TYPE Class]\n# @BRIEF Represents a collection of permissions.\n# @RELATION BINDS_TO -> [User]\n# @RELATION BINDS_TO -> [Permission]\nclass Role(Base):\n __tablename__ = \"roles\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, unique=True, index=True, nullable=False)\n description = Column(String, nullable=True)\n\n users = relationship(\"User\", secondary=user_roles, back_populates=\"roles\")\n permissions = relationship(\n \"Permission\", secondary=role_permissions, back_populates=\"roles\"\n )\n\n\n# #endregion Role\n" + "body": "# #region Role [TYPE Class]\n# @BRIEF Represents a collection of permissions.\n# @RELATION BINDS_TO -> [User]\n# @RELATION BINDS_TO -> [Permission]\nclass Role(Base):\n __tablename__ = \"roles\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, unique=True, index=True, nullable=False)\n description = Column(String, nullable=True)\n is_admin = Column(Boolean, default=False, nullable=False)\n\n users = relationship(\"User\", secondary=user_roles, back_populates=\"roles\")\n permissions = relationship(\n \"Permission\", secondary=role_permissions, back_populates=\"roles\"\n )\n\n\n# #endregion Role\n" }, { "contract_id": "Permission", "contract_type": "Class", "file_path": "backend/src/models/auth.py", - "start_line": 101, - "end_line": 116, + "start_line": 102, + "end_line": 117, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -31481,12 +31880,30 @@ "tier_source": "AutoCalculated", "body": "# #region Permission [TYPE Class]\n# @BRIEF Represents a specific capability within the system.\n# @RELATION BINDS_TO -> [Role]\nclass Permission(Base):\n __tablename__ = \"permissions\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n resource = Column(String, nullable=False) # e.g. \"plugin:backup\"\n action = Column(String, nullable=False) # e.g. \"READ\", \"EXECUTE\", \"WRITE\"\n\n roles = relationship(\n \"Role\", secondary=role_permissions, back_populates=\"permissions\"\n )\n\n\n# #endregion Permission\n" }, + { + "contract_id": "TokenBlacklist", + "contract_type": "Class", + "file_path": "backend/src/models/auth.py", + "start_line": 120, + "end_line": 134, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Stores SHA-256 hashes of revoked JWTs for server-side token blacklisting.", + "INVARIANT": "Only the SHA-256 hash of the token is stored — never the raw token." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "# #region TokenBlacklist [TYPE Class]\n# @BRIEF Stores SHA-256 hashes of revoked JWTs for server-side token blacklisting.\n# @INVARIANT Only the SHA-256 hash of the token is stored — never the raw token.\n# Expired entries are cleaned up by _prune_blacklist().\n# @RELATION DEPENDS_ON -> [EXT:Library:SQLAlchemy.Base]\nclass TokenBlacklist(Base):\n __tablename__ = \"token_blacklist\"\n\n jti = Column(String, primary_key=True) # JWT ID from the token\n token_hash = Column(String(64), nullable=False, index=True) # SHA-256 of token\n expires_at = Column(DateTime, nullable=False) # Token's original exp claim\n revoked_at = Column(DateTime, nullable=False, default=datetime.utcnow)\n\n\n# #endregion TokenBlacklist\n" + }, { "contract_id": "ADGroupMapping", "contract_type": "Class", "file_path": "backend/src/models/auth.py", - "start_line": 119, - "end_line": 132, + "start_line": 136, + "end_line": 149, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -34578,7 +34995,7 @@ "contract_type": "Module", "file_path": "backend/src/models/translate.py", "start_line": 1, - "end_line": 397, + "end_line": 400, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -34597,7 +35014,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TranslateModels [C:3] [TYPE Module] [SEMANTICS sqlalchemy, translate, model, schema, dashboard, llm]\n# @BRIEF SQLAlchemy ORM models for LLM-based SQL/dashboard translation across dialects.\n# @LAYER Domain\n# @RELATION INHERITS -> [MappingModels]\n\nfrom datetime import UTC, datetime\nimport uuid\n\nfrom sqlalchemy import JSON, Boolean, Column, DateTime, Float, ForeignKey, Index, Integer, String, Text, UniqueConstraint\nfrom sqlalchemy.orm import relationship\n\nfrom .mapping import Base\n\n\ndef generate_uuid():\n return str(uuid.uuid4())\n\n\n# #region TranslationJob [TYPE Class]\n# @BRIEF A translation job representing a multi-dialect conversion task with column mappings, LLM config, and dictionary attachments.\n# @RATIONALE Snapshot isolation — in-progress runs use config snapshot; config edits affect future runs only.\n# @REJECTED Invalidating in-progress runs on config edit would break scheduled run continuity.\nclass TranslationJob(Base):\n __tablename__ = \"translation_jobs\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, nullable=False)\n description = Column(Text, nullable=True)\n source_dialect = Column(String, nullable=False)\n target_dialect = Column(String, nullable=False)\n database_dialect = Column(String, nullable=True, comment=\"Detected dialect from Superset connection at save time\")\n status = Column(String, nullable=False, default=\"DRAFT\") # DRAFT, READY, RUNNING, COMPLETED, FAILED, CANCELLED\n\n # Datasource & target table configuration\n source_datasource_id = Column(String, nullable=True, comment=\"Superset datasource ID\")\n source_table = Column(String, nullable=True, comment=\"Source table name resolved from datasource\")\n target_schema = Column(String, nullable=True, comment=\"Target table schema\")\n target_table = Column(String, nullable=True, comment=\"Target table name\")\n\n # Column mapping\n source_key_cols = Column(JSON, nullable=True, comment=\"Source key column names for composite key\")\n target_key_cols = Column(JSON, nullable=True, comment=\"Target key column names for composite key\")\n translation_column = Column(String, nullable=True, comment=\"Source column whose values will be translated\")\n target_column = Column(String, nullable=True, comment=\"Target column for translated output (defaults to translation_column)\")\n target_language_column = Column(String, nullable=True, comment=\"Target column for language code (e.g. 'ru', 'en')\")\n target_source_column = Column(String, nullable=True, comment=\"Target column for source/original text\")\n target_source_language_column = Column(String, nullable=True, comment=\"Target column for detected source language (BCP-47)\")\n context_columns = Column(JSON, nullable=True, comment=\"Context column names included in LLM prompt\")\n\n # LLM & processing settings\n # source_language removed — deprecated, auto-detected per row by LLM; use TranslationLanguage.source_language_detected instead\n target_languages = Column(JSON, nullable=True, comment=\"List of BCP-47 target language codes (multi-language support)\")\n provider_id = Column(String, nullable=True, comment=\"LLM provider ID\")\n batch_size = Column(Integer, nullable=False, default=50, comment=\"Records per batch\")\n disable_reasoning = Column(Boolean, default=False, comment=\"If true, pass reasoning_effort:none to LLM to save output tokens\")\n upsert_strategy = Column(String, nullable=False, default=\"MERGE\", comment=\"MERGE, INSERT, UPDATE\")\n\n # Environment association\n environment_id = Column(String, nullable=True, comment=\"Superset environment ID for datasource access\")\n target_database_id = Column(String, nullable=True, comment=\"Superset database ID for SQL Lab insert target\")\n\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TranslationJob\n\n\n# #region TranslationRun [TYPE Class]\n# @BRIEF Represents a single execution of a translation job, capturing status, timing, and Superset execution metadata.\nclass TranslationRun(Base):\n __tablename__ = \"translation_runs\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, RUNNING, COMPLETED, FAILED, CANCELLED\n trigger_type = Column(String, nullable=True, comment=\"manual, scheduled, retry, baseline_expired\")\n started_at = Column(DateTime, nullable=True)\n completed_at = Column(DateTime, nullable=True)\n error_message = Column(Text, nullable=True)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n insert_status = Column(String, nullable=True, comment=\"Status of the Superset insert/update operation\")\n superset_execution_id = Column(String, nullable=True, comment=\"Superset execution/task ID\")\n superset_execution_log = Column(JSON, nullable=True, comment=\"Superset execution log output\")\n config_snapshot = Column(JSON, nullable=True, comment=\"Snapshot of job config at run creation time\")\n key_hash = Column(String, nullable=True, comment=\"Hash of source key fields for dedup\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at run time\")\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n language_stats = relationship(\"TranslationRunLanguageStats\", back_populates=\"run\")\n# #endregion TranslationRun\n\n\n# #region TranslationBatch [TYPE Class]\n# @BRIEF Groups translation records within a run into manageable batches with timing and record counts.\nclass TranslationBatch(Base):\n __tablename__ = \"translation_batches\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n batch_index = Column(Integer, nullable=False)\n status = Column(String, nullable=False, default=\"PENDING\")\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n started_at = Column(DateTime, nullable=True)\n completed_at = Column(DateTime, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n# #endregion TranslationBatch\n\n\n# #region TranslationRecord [TYPE Class]\n# @BRIEF Individual translation result for a single SQL statement or dashboard element, tracking source, target, and error state.\nclass TranslationRecord(Base):\n __tablename__ = \"translation_records\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n batch_id = Column(String, ForeignKey(\"translation_batches.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_sql = Column(Text, nullable=True)\n target_sql = Column(Text, nullable=True)\n source_object_type = Column(String, nullable=True) # query, dashboard, chart, dataset\n source_object_id = Column(String, nullable=True)\n source_object_name = Column(String, nullable=True)\n source_data = Column(JSON, nullable=True, comment=\"Original source row key columns for upsert matching\")\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, SUCCESS, FAILED, SKIPPED\n error_message = Column(Text, nullable=True)\n token_count_input = Column(Integer, nullable=True)\n token_count_output = Column(Integer, nullable=True)\n translation_duration_ms = Column(Integer, nullable=True)\n source_hash = Column(String, nullable=True,\n comment=\"SHA256(source_text+context+dict_snapshot_hash+config_hash) for cache dedup — excludes key/identifier columns\")\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n languages = relationship(\"TranslationLanguage\", back_populates=\"record\")\n\n __table_args__ = (\n Index(\"ix_translation_records_run_status\", \"run_id\", \"status\"),\n Index(\"ix_translation_records_source_hash_status\", \"source_hash\", \"status\"),\n )\n# #endregion TranslationRecord\n\n\n# #region TranslationEvent [TYPE Class]\n# @BRIEF Audit/event log for translation operations, with optional run_id for context.\nclass TranslationEvent(Base):\n __tablename__ = \"translation_events\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n event_type = Column(String, nullable=False) # JOB_CREATED, JOB_STARTED, JOB_COMPLETED, JOB_FAILED, etc.\n event_data = Column(JSON, nullable=True)\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n# #endregion TranslationEvent\n\n\n# #region TranslationPreviewSession [TYPE Class]\n# @BRIEF A preview session allowing users to review proposed translations before applying them.\nclass TranslationPreviewSession(Base):\n __tablename__ = \"translation_preview_sessions\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True)\n status = Column(String, nullable=False, default=\"ACTIVE\") # ACTIVE, APPLIED, DISCARDED, EXPIRED\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n expires_at = Column(DateTime, nullable=True)\n# #endregion TranslationPreviewSession\n\n\n# #region TranslationPreviewRecord [TYPE Class]\n# @BRIEF Individual preview entry within a preview session, showing original and translated content side by side.\nclass TranslationPreviewRecord(Base):\n __tablename__ = \"translation_preview_records\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n session_id = Column(String, ForeignKey(\"translation_preview_sessions.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_sql = Column(Text, nullable=True)\n target_sql = Column(Text, nullable=True)\n source_object_type = Column(String, nullable=True)\n source_object_id = Column(String, nullable=True)\n source_object_name = Column(String, nullable=True)\n source_data = Column(JSON, nullable=True, comment=\"Original source row key columns for upsert matching\")\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, APPROVED, REJECTED\n feedback = Column(Text, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n languages = relationship(\"TranslationPreviewLanguage\", back_populates=\"preview_record\")\n# #endregion TranslationPreviewRecord\n\n\n# #region TerminologyDictionary [TYPE Class]\n# @BRIEF A named collection of terminology mappings used during translation to ensure consistent term translation.\nclass TerminologyDictionary(Base):\n __tablename__ = \"terminology_dictionaries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, nullable=False)\n description = Column(Text, nullable=True)\n source_dialect = Column(String, nullable=False)\n target_dialect = Column(String, nullable=False)\n is_active = Column(Boolean, default=True)\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TerminologyDictionary\n\n\n# #region DictionaryEntry [TYPE Class]\n# @BRIEF A single term mapping entry with case-insensitive unique constraint on source_term_normalized and origin tracking.\nclass DictionaryEntry(Base):\n __tablename__ = \"dictionary_entries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n dictionary_id = Column(String, ForeignKey(\"terminology_dictionaries.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_term = Column(String, nullable=False)\n source_term_normalized = Column(String, nullable=False)\n target_term = Column(String, nullable=False)\n source_language = Column(String, nullable=False, comment=\"BCP-47 source language code\")\n target_language = Column(String, nullable=False, comment=\"BCP-47 target language code\")\n context_notes = Column(Text, nullable=True)\n context_data = Column(JSON, nullable=True, comment=\"Structured context for term usage\")\n usage_notes = Column(Text, nullable=True, comment=\"Usage guidance for the term mapping\")\n has_context = Column(Boolean, default=False, comment=\"Whether context_data is populated\")\n context_source = Column(String, nullable=True, comment=\"auto|auto_with_edits|manual|bulk\")\n origin_source_language = Column(String, nullable=True, comment=\"Original source language of the term\")\n origin_run_id = Column(String, nullable=True, comment=\"Run ID from which this correction originated\")\n origin_row_key = Column(String, nullable=True, comment=\"Row key within the run that triggered this correction\")\n origin_user_id = Column(String, nullable=True, comment=\"User who submitted the correction\")\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n\n __table_args__ = (\n UniqueConstraint(\n \"dictionary_id\", \"source_term_normalized\", \"source_language\", \"target_language\",\n name=\"uq_dict_source_term_lang\"\n ),\n Index(\"idx_dict_entry_lang\", \"source_language\", \"target_language\"),\n Index(\"idx_dict_has_context\", \"has_context\"),\n )\n# #endregion DictionaryEntry\n\n\n# #region TranslationSchedule [TYPE Class]\n# @BRIEF Defines a cron-based schedule for recurring translation jobs.\nclass TranslationSchedule(Base):\n __tablename__ = \"translation_schedules\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n cron_expression = Column(String, nullable=False)\n timezone = Column(String, nullable=False, default=\"UTC\")\n is_active = Column(Boolean, default=True)\n last_run_at = Column(DateTime, nullable=True)\n next_run_at = Column(DateTime, nullable=True)\n execution_mode = Column(String, nullable=False, default=\"full\", comment=\"full, new_key_only\")\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TranslationSchedule\n\n\n# #region TranslationJobDictionary [TYPE Class]\n# @BRIEF Many-to-many association between translation jobs and terminology dictionaries.\nclass TranslationJobDictionary(Base):\n __tablename__ = \"translation_job_dictionaries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n dictionary_id = Column(String, ForeignKey(\"terminology_dictionaries.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n UniqueConstraint(\n \"job_id\", \"dictionary_id\",\n name=\"uq_job_dictionary\"\n ),\n )\n# #endregion TranslationJobDictionary\n\n\n# #region MetricSnapshot [TYPE Class]\n# @BRIEF Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.\nclass MetricSnapshot(Base):\n __tablename__ = \"translation_metric_snapshots\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n key_hash = Column(String, nullable=False, comment=\"Hash of dimension key fields for aggregation\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at capture time\")\n covers_events_before = Column(DateTime, nullable=True, comment=\"Indicates snapshot covers events before this timestamp\")\n total_jobs = Column(Integer, default=0)\n total_runs = Column(Integer, default=0)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n avg_duration_ms = Column(Integer, nullable=True)\n p50_duration_ms = Column(Integer, nullable=True)\n p95_duration_ms = Column(Integer, nullable=True)\n p99_duration_ms = Column(Integer, nullable=True)\n per_language_metrics = Column(JSON, nullable=True, comment=\"Per-language cumulative metrics: {lang: {cumulative_tokens, cumulative_cost, runs}}\")\n snapshot_date = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC))\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n Index(\"ix_metric_snapshots_job_date\", \"job_id\", \"snapshot_date\"),\n )\n# #endregion MetricSnapshot\n\n\n# #region TranslationLanguage [C:1] [TYPE Class]\n# @BRIEF Per-language translation result for a single record, supporting multi-language output.\nclass TranslationLanguage(Base):\n __tablename__ = \"translation_languages\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n record_id = Column(String, ForeignKey(\"translation_records.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n source_language_detected = Column(String, nullable=True, comment=\"BCP-47 or 'und' for undetermined\")\n translated_value = Column(Text, nullable=True, comment=\"LLM-generated translation\")\n user_edit = Column(Text, nullable=True, comment=\"User-edited translation\")\n final_value = Column(Text, nullable=True, comment=\"Final resolved value (translated or user edit)\")\n status = Column(String, default=\"pending\", comment=\"pending|translated|approved|edited|rejected|failed|skipped\")\n error_message = Column(Text, nullable=True)\n needs_review = Column(Boolean, default=False, comment=\"Flagged because source language could not be determined\")\n language_overridden = Column(Boolean, default=False, comment=\"Source language was manually overridden by user\")\n created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(UTC))\n\n record = relationship(\"TranslationRecord\", back_populates=\"languages\")\n\n __table_args__ = (\n UniqueConstraint(\"record_id\", \"language_code\", name=\"uq_record_language\"),\n Index(\"idx_tl_language\", \"language_code\"),\n Index(\"idx_tl_record_lang\", \"record_id\", \"language_code\"),\n )\n# #endregion TranslationLanguage\n\n\n# #region TranslationPreviewLanguage [C:1] [TYPE Class]\n# @BRIEF Per-language preview entry within a preview session.\nclass TranslationPreviewLanguage(Base):\n __tablename__ = \"translation_preview_languages\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n preview_record_id = Column(String, ForeignKey(\"translation_preview_records.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n source_language_detected = Column(String, nullable=True, comment=\"BCP-47 or 'und'\")\n translated_value = Column(Text, nullable=True)\n user_edit = Column(Text, nullable=True)\n final_value = Column(Text, nullable=True)\n status = Column(String, default=\"pending\", comment=\"pending|approved|edited|rejected\")\n needs_review = Column(Boolean, default=False, comment=\"Flagged because source language could not be determined\")\n created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(UTC))\n\n preview_record = relationship(\"TranslationPreviewRecord\", back_populates=\"languages\")\n\n __table_args__ = (\n UniqueConstraint(\"preview_record_id\", \"language_code\", name=\"uq_preview_record_language\"),\n )\n# #endregion TranslationPreviewLanguage\n\n\n# #region TranslationRunLanguageStats [C:1] [TYPE Class]\n# @BRIEF Per-language statistics for a translation run (row counts, tokens, cost).\nclass TranslationRunLanguageStats(Base):\n __tablename__ = \"translation_run_language_stats\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n total_rows = Column(Integer, default=0)\n translated_rows = Column(Integer, default=0)\n failed_rows = Column(Integer, default=0)\n skipped_rows = Column(Integer, default=0)\n token_count = Column(Integer, default=0)\n estimated_cost = Column(Float, default=0.0)\n\n run = relationship(\"TranslationRun\", back_populates=\"language_stats\")\n\n __table_args__ = (\n UniqueConstraint(\"run_id\", \"language_code\", name=\"uq_run_language\"),\n Index(\"idx_rls_run\", \"run_id\"),\n )\n# #endregion TranslationRunLanguageStats\n\n\n# #endregion TranslateModels\n" + "body": "# #region TranslateModels [C:3] [TYPE Module] [SEMANTICS sqlalchemy, translate, model, schema, dashboard, llm]\n# @BRIEF SQLAlchemy ORM models for LLM-based SQL/dashboard translation across dialects.\n# @LAYER Domain\n# @RELATION INHERITS -> [MappingModels]\n\nfrom datetime import UTC, datetime\nimport uuid\n\nfrom sqlalchemy import JSON, Boolean, Column, DateTime, Float, ForeignKey, Index, Integer, String, Text, UniqueConstraint\nfrom sqlalchemy.orm import relationship\n\nfrom .mapping import Base\n\n\ndef generate_uuid():\n return str(uuid.uuid4())\n\n\n# #region TranslationJob [TYPE Class]\n# @BRIEF A translation job representing a multi-dialect conversion task with column mappings, LLM config, and dictionary attachments.\n# @RATIONALE Snapshot isolation — in-progress runs use config snapshot; config edits affect future runs only.\n# @REJECTED Invalidating in-progress runs on config edit would break scheduled run continuity.\nclass TranslationJob(Base):\n __tablename__ = \"translation_jobs\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, nullable=False)\n description = Column(Text, nullable=True)\n source_dialect = Column(String, nullable=False)\n target_dialect = Column(String, nullable=False)\n database_dialect = Column(String, nullable=True, comment=\"Detected dialect from Superset connection at save time\")\n status = Column(String, nullable=False, default=\"DRAFT\") # DRAFT, READY, RUNNING, COMPLETED, FAILED, CANCELLED\n\n # Datasource & target table configuration\n source_datasource_id = Column(String, nullable=True, comment=\"Superset datasource ID\")\n source_table = Column(String, nullable=True, comment=\"Source table name resolved from datasource\")\n target_schema = Column(String, nullable=True, comment=\"Target table schema\")\n target_table = Column(String, nullable=True, comment=\"Target table name\")\n\n # Column mapping\n source_key_cols = Column(JSON, nullable=True, comment=\"Source key column names for composite key\")\n target_key_cols = Column(JSON, nullable=True, comment=\"Target key column names for composite key\")\n translation_column = Column(String, nullable=True, comment=\"Source column whose values will be translated\")\n target_column = Column(String, nullable=True, comment=\"Target column for translated output (defaults to translation_column)\")\n target_language_column = Column(String, nullable=True, comment=\"Target column for language code (e.g. 'ru', 'en')\")\n target_source_column = Column(String, nullable=True, comment=\"Target column for source/original text\")\n target_source_language_column = Column(String, nullable=True, comment=\"Target column for detected source language (BCP-47)\")\n context_columns = Column(JSON, nullable=True, comment=\"Context column names included in LLM prompt\")\n\n # LLM & processing settings\n # source_language removed — deprecated, auto-detected per row by LLM; use TranslationLanguage.source_language_detected instead\n target_languages = Column(JSON, nullable=True, comment=\"List of BCP-47 target language codes (multi-language support)\")\n provider_id = Column(String, nullable=True, comment=\"LLM provider ID\")\n batch_size = Column(Integer, nullable=False, default=50, comment=\"Records per batch\")\n disable_reasoning = Column(Boolean, default=False, comment=\"If true, pass reasoning_effort:none to LLM to save output tokens\")\n upsert_strategy = Column(String, nullable=False, default=\"MERGE\", comment=\"MERGE, INSERT, UPDATE\")\n\n # Environment association\n environment_id = Column(String, nullable=True, comment=\"Superset environment ID for datasource access\")\n target_database_id = Column(String, nullable=True, comment=\"Superset database ID for SQL Lab insert target\")\n\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TranslationJob\n\n\n# #region TranslationRun [TYPE Class]\n# @BRIEF Represents a single execution of a translation job, capturing status, timing, and Superset execution metadata.\nclass TranslationRun(Base):\n __tablename__ = \"translation_runs\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, RUNNING, COMPLETED, FAILED, CANCELLED\n trigger_type = Column(String, nullable=True, comment=\"manual, scheduled, retry, baseline_expired\")\n started_at = Column(DateTime, nullable=True)\n completed_at = Column(DateTime, nullable=True)\n error_message = Column(Text, nullable=True)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n insert_status = Column(String, nullable=True, comment=\"Status of the Superset insert/update operation\")\n superset_execution_id = Column(String, nullable=True, comment=\"Superset execution/task ID\")\n superset_execution_log = Column(JSON, nullable=True, comment=\"Superset execution log output\")\n config_snapshot = Column(JSON, nullable=True, comment=\"Snapshot of job config at run creation time\")\n key_hash = Column(String, nullable=True, comment=\"Hash of source key fields for dedup\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at run time\")\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n language_stats = relationship(\"TranslationRunLanguageStats\", back_populates=\"run\")\n# #endregion TranslationRun\n\n\n# #region TranslationBatch [TYPE Class]\n# @BRIEF Groups translation records within a run into manageable batches with timing and record counts.\nclass TranslationBatch(Base):\n __tablename__ = \"translation_batches\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n batch_index = Column(Integer, nullable=False)\n status = Column(String, nullable=False, default=\"PENDING\")\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n started_at = Column(DateTime, nullable=True)\n completed_at = Column(DateTime, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n# #endregion TranslationBatch\n\n\n# #region TranslationRecord [TYPE Class]\n# @BRIEF Individual translation result for a single SQL statement or dashboard element, tracking source, target, and error state.\nclass TranslationRecord(Base):\n __tablename__ = \"translation_records\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n batch_id = Column(String, ForeignKey(\"translation_batches.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_sql = Column(Text, nullable=True)\n target_sql = Column(Text, nullable=True)\n source_object_type = Column(String, nullable=True) # query, dashboard, chart, dataset\n source_object_id = Column(String, nullable=True)\n source_object_name = Column(String, nullable=True)\n source_data = Column(JSON, nullable=True, comment=\"Original source row key columns for upsert matching\")\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, SUCCESS, FAILED, SKIPPED\n error_message = Column(Text, nullable=True)\n token_count_input = Column(Integer, nullable=True)\n token_count_output = Column(Integer, nullable=True)\n translation_duration_ms = Column(Integer, nullable=True)\n source_hash = Column(String, nullable=True,\n comment=\"SHA256(source_text+context+dict_snapshot_hash+config_hash) for cache dedup — excludes key/identifier columns\")\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n languages = relationship(\"TranslationLanguage\", back_populates=\"record\")\n\n __table_args__ = (\n Index(\"ix_translation_records_run_status\", \"run_id\", \"status\"),\n Index(\"ix_translation_records_source_hash_status\", \"source_hash\", \"status\"),\n )\n# #endregion TranslationRecord\n\n\n# #region TranslationEvent [TYPE Class]\n# @BRIEF Audit/event log for translation operations, with optional run_id for context.\nclass TranslationEvent(Base):\n __tablename__ = \"translation_events\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n event_type = Column(String, nullable=False) # JOB_CREATED, JOB_STARTED, JOB_COMPLETED, JOB_FAILED, etc.\n event_data = Column(JSON, nullable=True)\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n# #endregion TranslationEvent\n\n\n# #region TranslationPreviewSession [TYPE Class]\n# @BRIEF A preview session allowing users to review proposed translations before applying them.\nclass TranslationPreviewSession(Base):\n __tablename__ = \"translation_preview_sessions\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True)\n status = Column(String, nullable=False, default=\"ACTIVE\") # ACTIVE, APPLIED, DISCARDED, EXPIRED\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n expires_at = Column(DateTime, nullable=True)\n# #endregion TranslationPreviewSession\n\n\n# #region TranslationPreviewRecord [TYPE Class]\n# @BRIEF Individual preview entry within a preview session, showing original and translated content side by side.\nclass TranslationPreviewRecord(Base):\n __tablename__ = \"translation_preview_records\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n session_id = Column(String, ForeignKey(\"translation_preview_sessions.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_sql = Column(Text, nullable=True)\n target_sql = Column(Text, nullable=True)\n source_object_type = Column(String, nullable=True)\n source_object_id = Column(String, nullable=True)\n source_object_name = Column(String, nullable=True)\n source_data = Column(JSON, nullable=True, comment=\"Original source row key columns for upsert matching\")\n status = Column(String, nullable=False, default=\"PENDING\") # PENDING, APPROVED, REJECTED\n feedback = Column(Text, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n languages = relationship(\"TranslationPreviewLanguage\", back_populates=\"preview_record\")\n# #endregion TranslationPreviewRecord\n\n\n# #region TerminologyDictionary [TYPE Class]\n# @BRIEF A named collection of terminology mappings used during translation to ensure consistent term translation.\nclass TerminologyDictionary(Base):\n __tablename__ = \"terminology_dictionaries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n name = Column(String, nullable=False)\n description = Column(Text, nullable=True)\n source_dialect = Column(String, nullable=False)\n target_dialect = Column(String, nullable=False)\n is_active = Column(Boolean, default=True)\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TerminologyDictionary\n\n\n# #region DictionaryEntry [TYPE Class]\n# @BRIEF A single term mapping entry with case-insensitive unique constraint on source_term_normalized and origin tracking.\nclass DictionaryEntry(Base):\n __tablename__ = \"dictionary_entries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n dictionary_id = Column(String, ForeignKey(\"terminology_dictionaries.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n source_term = Column(String, nullable=False)\n source_term_normalized = Column(String, nullable=False)\n target_term = Column(String, nullable=False)\n source_language = Column(String, nullable=False, comment=\"BCP-47 source language code\")\n target_language = Column(String, nullable=False, comment=\"BCP-47 target language code\")\n context_notes = Column(Text, nullable=True)\n context_data = Column(JSON, nullable=True, comment=\"Structured context for term usage\")\n usage_notes = Column(Text, nullable=True, comment=\"Usage guidance for the term mapping\")\n has_context = Column(Boolean, default=False, comment=\"Whether context_data is populated\")\n context_source = Column(String, nullable=True, comment=\"auto|auto_with_edits|manual|bulk\")\n origin_source_language = Column(String, nullable=True, comment=\"Original source language of the term\")\n origin_run_id = Column(String, nullable=True, comment=\"Run ID from which this correction originated\")\n origin_row_key = Column(String, nullable=True, comment=\"Row key within the run that triggered this correction\")\n origin_user_id = Column(String, nullable=True, comment=\"User who submitted the correction\")\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n\n __table_args__ = (\n UniqueConstraint(\n \"dictionary_id\", \"source_term_normalized\", \"source_language\", \"target_language\",\n name=\"uq_dict_source_term_lang\"\n ),\n Index(\"idx_dict_entry_lang\", \"source_language\", \"target_language\"),\n Index(\"idx_dict_has_context\", \"has_context\"),\n )\n# #endregion DictionaryEntry\n\n\n# #region TranslationSchedule [TYPE Class]\n# @BRIEF Defines a cron-based schedule for recurring translation jobs.\nclass TranslationSchedule(Base):\n __tablename__ = \"translation_schedules\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n cron_expression = Column(String, nullable=False)\n timezone = Column(String, nullable=False, default=\"UTC\")\n is_active = Column(Boolean, default=True)\n last_run_at = Column(DateTime, nullable=True)\n next_run_at = Column(DateTime, nullable=True)\n execution_mode = Column(String, nullable=False, default=\"full\", comment=\"full, new_key_only\")\n created_by = Column(String, nullable=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n updated_at = Column(DateTime, default=lambda: datetime.now(UTC), onupdate=lambda: datetime.now(UTC))\n# #endregion TranslationSchedule\n\n\n# #region TranslationJobDictionary [TYPE Class]\n# @BRIEF Many-to-many association between translation jobs and terminology dictionaries.\nclass TranslationJobDictionary(Base):\n __tablename__ = \"translation_job_dictionaries\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n dictionary_id = Column(String, ForeignKey(\"terminology_dictionaries.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n UniqueConstraint(\n \"job_id\", \"dictionary_id\",\n name=\"uq_job_dictionary\"\n ),\n )\n# #endregion TranslationJobDictionary\n\n\n# #region MetricSnapshot [TYPE Class]\n# @BRIEF Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.\n# @RATIONALE job_id is nullable with SET NULL because prune_expired creates aggregate snapshots\n# (job_id=None) that span all jobs — enforced FK in PostgreSQL rejects virtual IDs like\n# '_prune_aggregate_' (see [SEC:PG-FK]).\nclass MetricSnapshot(Base):\n __tablename__ = \"translation_metric_snapshots\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n key_hash = Column(String, nullable=False, comment=\"Hash of dimension key fields for aggregation\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at capture time\")\n covers_events_before = Column(DateTime, nullable=True, comment=\"Indicates snapshot covers events before this timestamp\")\n total_jobs = Column(Integer, default=0)\n total_runs = Column(Integer, default=0)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n avg_duration_ms = Column(Integer, nullable=True)\n p50_duration_ms = Column(Integer, nullable=True)\n p95_duration_ms = Column(Integer, nullable=True)\n p99_duration_ms = Column(Integer, nullable=True)\n per_language_metrics = Column(JSON, nullable=True, comment=\"Per-language cumulative metrics: {lang: {cumulative_tokens, cumulative_cost, runs}}\")\n snapshot_date = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC))\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n Index(\"ix_metric_snapshots_job_date\", \"job_id\", \"snapshot_date\"),\n )\n# #endregion MetricSnapshot\n\n\n# #region TranslationLanguage [C:1] [TYPE Class]\n# @BRIEF Per-language translation result for a single record, supporting multi-language output.\nclass TranslationLanguage(Base):\n __tablename__ = \"translation_languages\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n record_id = Column(String, ForeignKey(\"translation_records.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n source_language_detected = Column(String, nullable=True, comment=\"BCP-47 or 'und' for undetermined\")\n translated_value = Column(Text, nullable=True, comment=\"LLM-generated translation\")\n user_edit = Column(Text, nullable=True, comment=\"User-edited translation\")\n final_value = Column(Text, nullable=True, comment=\"Final resolved value (translated or user edit)\")\n status = Column(String, default=\"pending\", comment=\"pending|translated|approved|edited|rejected|failed|skipped\")\n error_message = Column(Text, nullable=True)\n needs_review = Column(Boolean, default=False, comment=\"Flagged because source language could not be determined\")\n language_overridden = Column(Boolean, default=False, comment=\"Source language was manually overridden by user\")\n created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(UTC))\n\n record = relationship(\"TranslationRecord\", back_populates=\"languages\")\n\n __table_args__ = (\n UniqueConstraint(\"record_id\", \"language_code\", name=\"uq_record_language\"),\n Index(\"idx_tl_language\", \"language_code\"),\n Index(\"idx_tl_record_lang\", \"record_id\", \"language_code\"),\n )\n# #endregion TranslationLanguage\n\n\n# #region TranslationPreviewLanguage [C:1] [TYPE Class]\n# @BRIEF Per-language preview entry within a preview session.\nclass TranslationPreviewLanguage(Base):\n __tablename__ = \"translation_preview_languages\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n preview_record_id = Column(String, ForeignKey(\"translation_preview_records.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n source_language_detected = Column(String, nullable=True, comment=\"BCP-47 or 'und'\")\n translated_value = Column(Text, nullable=True)\n user_edit = Column(Text, nullable=True)\n final_value = Column(Text, nullable=True)\n status = Column(String, default=\"pending\", comment=\"pending|approved|edited|rejected\")\n needs_review = Column(Boolean, default=False, comment=\"Flagged because source language could not be determined\")\n created_at = Column(DateTime(timezone=True), default=lambda: datetime.now(UTC))\n\n preview_record = relationship(\"TranslationPreviewRecord\", back_populates=\"languages\")\n\n __table_args__ = (\n UniqueConstraint(\"preview_record_id\", \"language_code\", name=\"uq_preview_record_language\"),\n )\n# #endregion TranslationPreviewLanguage\n\n\n# #region TranslationRunLanguageStats [C:1] [TYPE Class]\n# @BRIEF Per-language statistics for a translation run (row counts, tokens, cost).\nclass TranslationRunLanguageStats(Base):\n __tablename__ = \"translation_run_language_stats\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"CASCADE\"), nullable=False)\n language_code = Column(String, nullable=False, comment=\"BCP-47 language code\")\n total_rows = Column(Integer, default=0)\n translated_rows = Column(Integer, default=0)\n failed_rows = Column(Integer, default=0)\n skipped_rows = Column(Integer, default=0)\n token_count = Column(Integer, default=0)\n estimated_cost = Column(Float, default=0.0)\n\n run = relationship(\"TranslationRun\", back_populates=\"language_stats\")\n\n __table_args__ = (\n UniqueConstraint(\"run_id\", \"language_code\", name=\"uq_run_language\"),\n Index(\"idx_rls_run\", \"run_id\"),\n )\n# #endregion TranslationRunLanguageStats\n\n\n# #endregion TranslateModels\n" }, { "contract_id": "TranslationJob", @@ -34793,24 +35210,25 @@ "contract_type": "Class", "file_path": "backend/src/models/translate.py", "start_line": 289, - "end_line": 318, + "end_line": 321, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation." + "BRIEF": "Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.", + "RATIONALE": "job_id is nullable with SET NULL because prune_expired creates aggregate snapshots" }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region MetricSnapshot [TYPE Class]\n# @BRIEF Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.\nclass MetricSnapshot(Base):\n __tablename__ = \"translation_metric_snapshots\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"CASCADE\"), nullable=False, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n key_hash = Column(String, nullable=False, comment=\"Hash of dimension key fields for aggregation\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at capture time\")\n covers_events_before = Column(DateTime, nullable=True, comment=\"Indicates snapshot covers events before this timestamp\")\n total_jobs = Column(Integer, default=0)\n total_runs = Column(Integer, default=0)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n avg_duration_ms = Column(Integer, nullable=True)\n p50_duration_ms = Column(Integer, nullable=True)\n p95_duration_ms = Column(Integer, nullable=True)\n p99_duration_ms = Column(Integer, nullable=True)\n per_language_metrics = Column(JSON, nullable=True, comment=\"Per-language cumulative metrics: {lang: {cumulative_tokens, cumulative_cost, runs}}\")\n snapshot_date = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC))\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n Index(\"ix_metric_snapshots_job_date\", \"job_id\", \"snapshot_date\"),\n )\n# #endregion MetricSnapshot\n" + "body": "# #region MetricSnapshot [TYPE Class]\n# @BRIEF Captures translation performance metrics at a point in time with config/content/dictionary hash keys for aggregation.\n# @RATIONALE job_id is nullable with SET NULL because prune_expired creates aggregate snapshots\n# (job_id=None) that span all jobs — enforced FK in PostgreSQL rejects virtual IDs like\n# '_prune_aggregate_' (see [SEC:PG-FK]).\nclass MetricSnapshot(Base):\n __tablename__ = \"translation_metric_snapshots\"\n\n id = Column(String, primary_key=True, default=generate_uuid)\n job_id = Column(String, ForeignKey(\"translation_jobs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n run_id = Column(String, ForeignKey(\"translation_runs.id\", ondelete=\"SET NULL\"), nullable=True, index=True)\n key_hash = Column(String, nullable=False, comment=\"Hash of dimension key fields for aggregation\")\n config_hash = Column(String, nullable=True, comment=\"Hash of translation configuration state\")\n dict_snapshot_hash = Column(String, nullable=True, comment=\"Hash of dictionary state at capture time\")\n covers_events_before = Column(DateTime, nullable=True, comment=\"Indicates snapshot covers events before this timestamp\")\n total_jobs = Column(Integer, default=0)\n total_runs = Column(Integer, default=0)\n total_records = Column(Integer, default=0)\n successful_records = Column(Integer, default=0)\n failed_records = Column(Integer, default=0)\n skipped_records = Column(Integer, default=0)\n avg_duration_ms = Column(Integer, nullable=True)\n p50_duration_ms = Column(Integer, nullable=True)\n p95_duration_ms = Column(Integer, nullable=True)\n p99_duration_ms = Column(Integer, nullable=True)\n per_language_metrics = Column(JSON, nullable=True, comment=\"Per-language cumulative metrics: {lang: {cumulative_tokens, cumulative_cost, runs}}\")\n snapshot_date = Column(DateTime, nullable=False, default=lambda: datetime.now(UTC))\n created_at = Column(DateTime, default=lambda: datetime.now(UTC))\n\n __table_args__ = (\n Index(\"ix_metric_snapshots_job_date\", \"job_id\", \"snapshot_date\"),\n )\n# #endregion MetricSnapshot\n" }, { "contract_id": "TranslationLanguage", "contract_type": "Class", "file_path": "backend/src/models/translate.py", - "start_line": 321, - "end_line": 346, + "start_line": 324, + "end_line": 349, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -34827,8 +35245,8 @@ "contract_id": "TranslationPreviewLanguage", "contract_type": "Class", "file_path": "backend/src/models/translate.py", - "start_line": 349, - "end_line": 370, + "start_line": 352, + "end_line": 373, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -34845,8 +35263,8 @@ "contract_id": "TranslationRunLanguageStats", "contract_type": "Class", "file_path": "backend/src/models/translate.py", - "start_line": 373, - "end_line": 394, + "start_line": 376, + "end_line": 397, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -37530,7 +37948,7 @@ "contract_type": "Module", "file_path": "backend/src/plugins/translate/events.py", "start_line": 1, - "end_line": 272, + "end_line": 274, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -37562,7 +37980,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TranslationEventLog [C:5] [TYPE Module] [SEMANTICS sqlalchemy, translate, event, log, audit]\n# @BRIEF Structured event logging for translation operations with terminal event invariant enforcement.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [TranslationEvent]\n# @RELATION DEPENDS_ON -> [MetricSnapshot]\n# @PRE Database session is open and valid.\n# @POST Events are persisted immutably; terminal events enforce exactly-one invariant per run.\n# @SIDE_EFFECT Writes TranslationEvent rows; prunes expired events with MetricSnapshot before deletion.\n# @DATA_CONTRACT Input[run_id:Optional[str], job_id:str, event_type:str, payload:dict] -> Output[TranslationEvent]\n# @INVARIANT Exactly one run_started + exactly one terminal event per non-null run_id.\n# @RATIONALE Immutable event log with nullable run_id allows job-level events (no run context) and run-level events.\n# @REJECTED stdout-only logging — lacks structured payload integrity; cannot enforce terminal-event invariant.\n# @REJECTED Separate event table per entity — single TranslationEvent table with nullable run_id is simpler for audit.\nfrom datetime import UTC, datetime, timedelta\nfrom typing import Any\nimport uuid\n\nfrom sqlalchemy.orm import Session\n\nfrom ...core.logger import belief_scope, logger\nfrom ...models.translate import MetricSnapshot, TranslationEvent\n\n# Terminal events per run — exactly one of these must exist for a completed run.\nTERMINAL_EVENT_TYPES = {\"RUN_COMPLETED\", \"RUN_FAILED\", \"RUN_CANCELLED\"}\n# All valid event types for validation.\nVALID_EVENT_TYPES = TERMINAL_EVENT_TYPES | {\n \"JOB_CREATED\", \"JOB_UPDATED\", \"JOB_DELETED\",\n \"RUN_STARTED\", \"RUN_RETRYING\", \"RUN_RETRY_INSERT\",\n \"BATCH_STARTED\", \"BATCH_COMPLETED\", \"BATCH_FAILED\", \"BATCH_RETRYING\",\n \"TRANSLATION_PHASE_STARTED\", \"TRANSLATION_PHASE_COMPLETED\",\n \"INSERT_PHASE_STARTED\", \"INSERT_PHASE_COMPLETED\",\n \"PREVIEW_CREATED\", \"PREVIEW_ACCEPTED\", \"PREVIEW_DISCARDED\",\n \"SCHEDULE_CREATED\", \"SCHEDULE_UPDATED\", \"SCHEDULE_DELETED\",\n \"METRICS_SNAPSHOT_CREATED\",\n}\n\nDEFAULT_RETENTION_DAYS = 90\n\n\n# #region TranslationEventLog [C:5] [TYPE Class]\n# @BRIEF Structured event logging for translation operations with terminal event invariant enforcement.\n# @PRE Database session is available.\n# @POST Events are written immutably; terminal events enforced per run.\n# @SIDE_EFFECT Writes TranslationEvent rows; prunes expired events.\n# @INVARIANT Exactly one run_started + exactly one terminal event per non-null run_id.\nclass TranslationEventLog:\n\n def __init__(self, db: Session):\n self.db = db\n\n # region log_event [TYPE Function]\n # @PURPOSE: Write an immutable event. Enforces terminal event invariant for non-null run_id.\n # @PRE event_type must be a known type. If run_id is not None, enforce terminal invariant.\n # @POST TranslationEvent row is created.\n # @SIDE_EFFECT DB write.\n def log_event(\n self,\n job_id: str,\n event_type: str,\n payload: dict[str, Any] | None = None,\n run_id: str | None = None,\n created_by: str | None = None,\n ) -> TranslationEvent:\n with belief_scope(\"TranslationEventLog.log_event\"):\n if event_type not in VALID_EVENT_TYPES:\n raise ValueError(\n f\"Invalid event_type '{event_type}'. \"\n f\"Must be one of: {', '.join(sorted(VALID_EVENT_TYPES))}\"\n )\n\n # Enforce terminal event invariant for non-null run_id\n if run_id is not None and event_type in TERMINAL_EVENT_TYPES:\n existing_terminal = (\n self.db.query(TranslationEvent.id)\n .filter(\n TranslationEvent.run_id == run_id,\n TranslationEvent.event_type.in_(TERMINAL_EVENT_TYPES),\n )\n .first()\n )\n if existing_terminal:\n raise ValueError(\n f\"Run '{run_id}' already has a terminal event \"\n f\"({existing_terminal[0]}). Cannot add another terminal event.\"\n )\n\n # Enforce run_started invariant — must exist before other run events\n if run_id is not None and event_type not in {\"RUN_STARTED\"} | TERMINAL_EVENT_TYPES:\n has_started = (\n self.db.query(TranslationEvent.id)\n .filter(\n TranslationEvent.run_id == run_id,\n TranslationEvent.event_type == \"RUN_STARTED\",\n )\n .first()\n )\n if not has_started:\n raise ValueError(\n f\"Cannot log '{event_type}' for run '{run_id}': \"\n f\"RUN_STARTED event must precede other run events.\"\n )\n\n event = TranslationEvent(\n id=str(uuid.uuid4()),\n job_id=job_id,\n run_id=run_id,\n event_type=event_type,\n event_data=payload or {},\n created_by=created_by,\n created_at=datetime.now(UTC),\n )\n self.db.add(event)\n self.db.flush()\n\n logger.reason(f\"Event logged: {event_type}\", {\n \"event_id\": event.id,\n \"job_id\": job_id,\n \"run_id\": run_id,\n \"event_type\": event_type,\n })\n return event\n # endregion log_event\n\n # region query_events [TYPE Function]\n # @PURPOSE: Query events with optional filters.\n # @PRE None.\n # @POST Returns list of TranslationEvent dicts matching filters.\n def query_events(\n self,\n job_id: str | None = None,\n run_id: str | None = None,\n event_type: str | None = None,\n limit: int = 100,\n offset: int = 0,\n ) -> list[dict[str, Any]]:\n with belief_scope(\"TranslationEventLog.query_events\"):\n query = self.db.query(TranslationEvent)\n\n if job_id:\n query = query.filter(TranslationEvent.job_id == job_id)\n if run_id:\n query = query.filter(TranslationEvent.run_id == run_id)\n if event_type:\n query = query.filter(TranslationEvent.event_type == event_type)\n\n events = (\n query.order_by(TranslationEvent.created_at.desc())\n .offset(offset)\n .limit(limit)\n .all()\n )\n\n return [\n {\n \"id\": e.id,\n \"job_id\": e.job_id,\n \"run_id\": e.run_id,\n \"event_type\": e.event_type,\n \"event_data\": e.event_data or {},\n \"created_by\": e.created_by,\n \"created_at\": e.created_at.isoformat() if e.created_at else None,\n }\n for e in events\n ]\n # endregion query_events\n\n # region prune_expired [TYPE Function]\n # @PURPOSE: Delete events older than retention_days. Persists MetricSnapshot before pruning.\n # @PRE None.\n # @POST Expired events are deleted; MetricSnapshot is created before deletion.\n # @SIDE_EFFECT Creates MetricSnapshot row; deletes TranslationEvent rows.\n def prune_expired(\n self,\n retention_days: int = DEFAULT_RETENTION_DAYS,\n batch_size: int = 1000,\n ) -> dict[str, Any]:\n with belief_scope(\"TranslationEventLog.prune_expired\"):\n cutoff = datetime.now(UTC) - timedelta(days=retention_days)\n logger.reason(\"Pruning expired events\", {\n \"cutoff\": cutoff.isoformat(),\n \"retention_days\": retention_days,\n })\n\n # Find events to prune\n expired_query = self.db.query(TranslationEvent).filter(\n TranslationEvent.created_at < cutoff\n )\n total_expired = expired_query.count()\n\n if total_expired == 0:\n logger.reflect(\"No expired events to prune\", {})\n return {\"pruned\": 0, \"snapshot_id\": None}\n\n # Compute per-language metrics from expired events before pruning\n per_language: dict[str, dict[str, int | float]] = {}\n expired_events = expired_query.all()\n for evt in expired_events:\n event_data = evt.event_data or {}\n lang = event_data.get(\"language_code\") or event_data.get(\"target_language\") or \"_unknown_\"\n if lang not in per_language:\n per_language[lang] = {\"cumulative_tokens\": 0, \"cumulative_cost\": 0.0, \"runs\": 0}\n per_language[lang][\"cumulative_tokens\"] += event_data.get(\"token_count\", 0) or 0\n per_language[lang][\"cumulative_cost\"] += event_data.get(\"cost\", 0.0) or 0.0\n per_language[lang][\"runs\"] += 1 if event_data.get(\"run_id\") else 0\n\n # Create MetricSnapshot before pruning\n snapshot = MetricSnapshot(\n id=str(uuid.uuid4()),\n job_id=\"_prune_aggregate_\",\n key_hash=f\"prune_{cutoff.timestamp():.0f}\",\n covers_events_before=cutoff,\n total_records=total_expired,\n per_language_metrics=per_language or None,\n snapshot_date=datetime.now(UTC),\n )\n self.db.add(snapshot)\n self.db.flush()\n snapshot_id = snapshot.id\n\n # Delete in batches\n pruned = 0\n while True:\n batch_ids = (\n self.db.query(TranslationEvent.id)\n .filter(TranslationEvent.created_at < cutoff)\n .limit(batch_size)\n .all()\n )\n if not batch_ids:\n break\n ids = [row[0] for row in batch_ids]\n self.db.query(TranslationEvent).filter(\n TranslationEvent.id.in_(ids)\n ).delete(synchronize_session=False)\n self.db.flush()\n pruned += len(ids)\n logger.reason(\"Pruned batch\", {\"batch_size\": len(ids), \"total_pruned\": pruned})\n\n self.db.commit()\n\n logger.reflect(\"Pruning complete\", {\n \"pruned\": pruned,\n \"snapshot_id\": snapshot_id,\n })\n return {\"pruned\": pruned, \"snapshot_id\": snapshot_id}\n # endregion prune_expired\n\n # region get_run_event_summary [TYPE Function]\n # @PURPOSE: Get a summary of events for a run, including invariant check.\n # @PRE run_id is not None.\n # @POST Returns dict with event list and invariant validity.\n def get_run_event_summary(self, run_id: str) -> dict[str, Any]:\n with belief_scope(\"TranslationEventLog.get_run_event_summary\"):\n events = self.query_events(run_id=run_id)\n\n has_started = any(e[\"event_type\"] == \"RUN_STARTED\" for e in events)\n terminal_events = [e for e in events if e[\"event_type\"] in TERMINAL_EVENT_TYPES]\n\n return {\n \"run_id\": run_id,\n \"event_count\": len(events),\n \"has_run_started\": has_started,\n \"terminal_event_count\": len(terminal_events),\n \"terminal_events\": terminal_events,\n \"invariant_valid\": has_started and len(terminal_events) <= 1,\n \"events\": events,\n }\n # endregion get_run_event_summary\n\n\n# #endregion TranslationEventLog\n# #endregion TranslationEventLog\n" + "body": "# #region TranslationEventLog [C:5] [TYPE Module] [SEMANTICS sqlalchemy, translate, event, log, audit]\n# @BRIEF Structured event logging for translation operations with terminal event invariant enforcement.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [TranslationEvent]\n# @RELATION DEPENDS_ON -> [MetricSnapshot]\n# @PRE Database session is open and valid.\n# @POST Events are persisted immutably; terminal events enforce exactly-one invariant per run.\n# @SIDE_EFFECT Writes TranslationEvent rows; prunes expired events with MetricSnapshot before deletion.\n# @DATA_CONTRACT Input[run_id:Optional[str], job_id:str, event_type:str, payload:dict] -> Output[TranslationEvent]\n# @INVARIANT Exactly one run_started + exactly one terminal event per non-null run_id.\n# @RATIONALE Immutable event log with nullable run_id allows job-level events (no run context) and run-level events.\n# @REJECTED stdout-only logging — lacks structured payload integrity; cannot enforce terminal-event invariant.\n# @REJECTED Separate event table per entity — single TranslationEvent table with nullable run_id is simpler for audit.\nfrom datetime import UTC, datetime, timedelta\nfrom typing import Any\nimport uuid\n\nfrom sqlalchemy.orm import Session\n\nfrom ...core.logger import belief_scope, logger\nfrom ...models.translate import MetricSnapshot, TranslationEvent\n\n# Terminal events per run — exactly one of these must exist for a completed run.\nTERMINAL_EVENT_TYPES = {\"RUN_COMPLETED\", \"RUN_FAILED\", \"RUN_CANCELLED\"}\n# All valid event types for validation.\nVALID_EVENT_TYPES = TERMINAL_EVENT_TYPES | {\n \"JOB_CREATED\", \"JOB_UPDATED\", \"JOB_DELETED\",\n \"RUN_STARTED\", \"RUN_RETRYING\", \"RUN_RETRY_INSERT\",\n \"BATCH_STARTED\", \"BATCH_COMPLETED\", \"BATCH_FAILED\", \"BATCH_RETRYING\",\n \"TRANSLATION_PHASE_STARTED\", \"TRANSLATION_PHASE_COMPLETED\",\n \"INSERT_PHASE_STARTED\", \"INSERT_PHASE_COMPLETED\",\n \"PREVIEW_CREATED\", \"PREVIEW_ACCEPTED\", \"PREVIEW_DISCARDED\",\n \"SCHEDULE_CREATED\", \"SCHEDULE_UPDATED\", \"SCHEDULE_DELETED\",\n \"METRICS_SNAPSHOT_CREATED\",\n}\n\nDEFAULT_RETENTION_DAYS = 90\n\n\n# #region TranslationEventLog [C:5] [TYPE Class]\n# @BRIEF Structured event logging for translation operations with terminal event invariant enforcement.\n# @PRE Database session is available.\n# @POST Events are written immutably; terminal events enforced per run.\n# @SIDE_EFFECT Writes TranslationEvent rows; prunes expired events.\n# @INVARIANT Exactly one run_started + exactly one terminal event per non-null run_id.\nclass TranslationEventLog:\n\n def __init__(self, db: Session):\n self.db = db\n\n # region log_event [TYPE Function]\n # @PURPOSE: Write an immutable event. Enforces terminal event invariant for non-null run_id.\n # @PRE event_type must be a known type. If run_id is not None, enforce terminal invariant.\n # @POST TranslationEvent row is created.\n # @SIDE_EFFECT DB write.\n def log_event(\n self,\n job_id: str,\n event_type: str,\n payload: dict[str, Any] | None = None,\n run_id: str | None = None,\n created_by: str | None = None,\n ) -> TranslationEvent:\n with belief_scope(\"TranslationEventLog.log_event\"):\n if event_type not in VALID_EVENT_TYPES:\n raise ValueError(\n f\"Invalid event_type '{event_type}'. \"\n f\"Must be one of: {', '.join(sorted(VALID_EVENT_TYPES))}\"\n )\n\n # Enforce terminal event invariant for non-null run_id\n if run_id is not None and event_type in TERMINAL_EVENT_TYPES:\n existing_terminal = (\n self.db.query(TranslationEvent.id)\n .filter(\n TranslationEvent.run_id == run_id,\n TranslationEvent.event_type.in_(TERMINAL_EVENT_TYPES),\n )\n .first()\n )\n if existing_terminal:\n raise ValueError(\n f\"Run '{run_id}' already has a terminal event \"\n f\"({existing_terminal[0]}). Cannot add another terminal event.\"\n )\n\n # Enforce run_started invariant — must exist before other run events\n if run_id is not None and event_type not in {\"RUN_STARTED\"} | TERMINAL_EVENT_TYPES:\n has_started = (\n self.db.query(TranslationEvent.id)\n .filter(\n TranslationEvent.run_id == run_id,\n TranslationEvent.event_type == \"RUN_STARTED\",\n )\n .first()\n )\n if not has_started:\n raise ValueError(\n f\"Cannot log '{event_type}' for run '{run_id}': \"\n f\"RUN_STARTED event must precede other run events.\"\n )\n\n event = TranslationEvent(\n id=str(uuid.uuid4()),\n job_id=job_id,\n run_id=run_id,\n event_type=event_type,\n event_data=payload or {},\n created_by=created_by,\n created_at=datetime.now(UTC),\n )\n self.db.add(event)\n self.db.flush()\n\n logger.reason(f\"Event logged: {event_type}\", {\n \"event_id\": event.id,\n \"job_id\": job_id,\n \"run_id\": run_id,\n \"event_type\": event_type,\n })\n return event\n # endregion log_event\n\n # region query_events [TYPE Function]\n # @PURPOSE: Query events with optional filters.\n # @PRE None.\n # @POST Returns list of TranslationEvent dicts matching filters.\n def query_events(\n self,\n job_id: str | None = None,\n run_id: str | None = None,\n event_type: str | None = None,\n limit: int = 100,\n offset: int = 0,\n ) -> list[dict[str, Any]]:\n with belief_scope(\"TranslationEventLog.query_events\"):\n query = self.db.query(TranslationEvent)\n\n if job_id:\n query = query.filter(TranslationEvent.job_id == job_id)\n if run_id:\n query = query.filter(TranslationEvent.run_id == run_id)\n if event_type:\n query = query.filter(TranslationEvent.event_type == event_type)\n\n events = (\n query.order_by(TranslationEvent.created_at.desc())\n .offset(offset)\n .limit(limit)\n .all()\n )\n\n return [\n {\n \"id\": e.id,\n \"job_id\": e.job_id,\n \"run_id\": e.run_id,\n \"event_type\": e.event_type,\n \"event_data\": e.event_data or {},\n \"created_by\": e.created_by,\n \"created_at\": e.created_at.isoformat() if e.created_at else None,\n }\n for e in events\n ]\n # endregion query_events\n\n # region prune_expired [TYPE Function]\n # @PURPOSE: Delete events older than retention_days. Persists MetricSnapshot before pruning.\n # @PRE None.\n # @POST Expired events are deleted; MetricSnapshot is created before deletion.\n # @SIDE_EFFECT Creates MetricSnapshot row; deletes TranslationEvent rows.\n def prune_expired(\n self,\n retention_days: int = DEFAULT_RETENTION_DAYS,\n batch_size: int = 1000,\n ) -> dict[str, Any]:\n with belief_scope(\"TranslationEventLog.prune_expired\"):\n cutoff = datetime.now(UTC) - timedelta(days=retention_days)\n logger.reason(\"Pruning expired events\", {\n \"cutoff\": cutoff.isoformat(),\n \"retention_days\": retention_days,\n })\n\n # Find events to prune\n expired_query = self.db.query(TranslationEvent).filter(\n TranslationEvent.created_at < cutoff\n )\n total_expired = expired_query.count()\n\n if total_expired == 0:\n logger.reflect(\"No expired events to prune\", {})\n return {\"pruned\": 0, \"snapshot_id\": None}\n\n # Compute per-language metrics from expired events before pruning\n per_language: dict[str, dict[str, int | float]] = {}\n expired_events = expired_query.all()\n for evt in expired_events:\n event_data = evt.event_data or {}\n lang = event_data.get(\"language_code\") or event_data.get(\"target_language\") or \"_unknown_\"\n if lang not in per_language:\n per_language[lang] = {\"cumulative_tokens\": 0, \"cumulative_cost\": 0.0, \"runs\": 0}\n per_language[lang][\"cumulative_tokens\"] += event_data.get(\"token_count\", 0) or 0\n per_language[lang][\"cumulative_cost\"] += event_data.get(\"cost\", 0.0) or 0.0\n per_language[lang][\"runs\"] += 1 if event_data.get(\"run_id\") else 0\n\n # Create MetricSnapshot before pruning\n # NOTE: job_id=None because this is an aggregate across ALL expired events,\n # not scoped to a single job. The FK is SET NULL (see MetricSnapshot model).\n snapshot = MetricSnapshot(\n id=str(uuid.uuid4()),\n job_id=None,\n key_hash=f\"prune_{cutoff.timestamp():.0f}\",\n covers_events_before=cutoff,\n total_records=total_expired,\n per_language_metrics=per_language or None,\n snapshot_date=datetime.now(UTC),\n )\n self.db.add(snapshot)\n self.db.flush()\n snapshot_id = snapshot.id\n\n # Delete in batches\n pruned = 0\n while True:\n batch_ids = (\n self.db.query(TranslationEvent.id)\n .filter(TranslationEvent.created_at < cutoff)\n .limit(batch_size)\n .all()\n )\n if not batch_ids:\n break\n ids = [row[0] for row in batch_ids]\n self.db.query(TranslationEvent).filter(\n TranslationEvent.id.in_(ids)\n ).delete(synchronize_session=False)\n self.db.flush()\n pruned += len(ids)\n logger.reason(\"Pruned batch\", {\"batch_size\": len(ids), \"total_pruned\": pruned})\n\n self.db.commit()\n\n logger.reflect(\"Pruning complete\", {\n \"pruned\": pruned,\n \"snapshot_id\": snapshot_id,\n })\n return {\"pruned\": pruned, \"snapshot_id\": snapshot_id}\n # endregion prune_expired\n\n # region get_run_event_summary [TYPE Function]\n # @PURPOSE: Get a summary of events for a run, including invariant check.\n # @PRE run_id is not None.\n # @POST Returns dict with event list and invariant validity.\n def get_run_event_summary(self, run_id: str) -> dict[str, Any]:\n with belief_scope(\"TranslationEventLog.get_run_event_summary\"):\n events = self.query_events(run_id=run_id)\n\n has_started = any(e[\"event_type\"] == \"RUN_STARTED\" for e in events)\n terminal_events = [e for e in events if e[\"event_type\"] in TERMINAL_EVENT_TYPES]\n\n return {\n \"run_id\": run_id,\n \"event_count\": len(events),\n \"has_run_started\": has_started,\n \"terminal_event_count\": len(terminal_events),\n \"terminal_events\": terminal_events,\n \"invariant_valid\": has_started and len(terminal_events) <= 1,\n \"events\": events,\n }\n # endregion get_run_event_summary\n\n\n# #endregion TranslationEventLog\n# #endregion TranslationEventLog\n" }, { "contract_id": "TranslationExecutor", @@ -39643,7 +40061,7 @@ "contract_type": "Module", "file_path": "backend/src/schemas/auth.py", "start_line": 1, - "end_line": 158, + "end_line": 185, "tier": "TIER_3", "complexity": 5, "metadata": { @@ -39664,14 +40082,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region AuthSchemas [C:5] [TYPE Module] [SEMANTICS pydantic, auth, schema, token]\n#\n# @BRIEF Pydantic schemas for authentication requests and responses.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n#\n# @INVARIANT Sensitive fields like password must not be included in response schemas.\n# @DATA_CONTRACT AuthPayload -> AuthSchema\n\nfrom datetime import datetime\n\nfrom pydantic import BaseModel, EmailStr\n\n\n# #region Token [C:1] [TYPE Class]\n# @BRIEF Represents a JWT access token response.\nclass Token(BaseModel):\n access_token: str\n token_type: str\n\n\n# #endregion Token\n\n\n# #region TokenData [C:1] [TYPE Class]\n# @BRIEF Represents the data encoded in a JWT token.\nclass TokenData(BaseModel):\n username: str | None = None\n scopes: list[str] = []\n\n\n# #endregion TokenData\n\n\n# #region PermissionSchema [C:1] [TYPE Class]\n# @BRIEF Represents a permission in API responses.\nclass PermissionSchema(BaseModel):\n id: str | None = None\n resource: str\n action: str\n\n class Config:\n from_attributes = True\n\n\n# #endregion PermissionSchema\n\n\n# #region RoleSchema [TYPE Class]\n# @BRIEF Represents a role in API responses.\nclass RoleSchema(BaseModel):\n id: str\n name: str\n description: str | None = None\n permissions: list[PermissionSchema] = []\n\n class Config:\n from_attributes = True\n\n\n# #endregion RoleSchema\n\n\n# #region RoleCreate [TYPE Class]\n# @BRIEF Schema for creating a new role.\nclass RoleCreate(BaseModel):\n name: str\n description: str | None = None\n permissions: list[str] = [] # List of permission IDs or \"resource:action\" strings\n\n\n# #endregion RoleCreate\n\n\n# #region RoleUpdate [TYPE Class]\n# @BRIEF Schema for updating an existing role.\nclass RoleUpdate(BaseModel):\n name: str | None = None\n description: str | None = None\n permissions: list[str] | None = None\n\n\n# #endregion RoleUpdate\n\n\n# #region ADGroupMappingSchema [TYPE Class]\n# @BRIEF Represents an AD Group to Role mapping in API responses.\nclass ADGroupMappingSchema(BaseModel):\n id: str\n ad_group: str\n role_id: str\n\n class Config:\n from_attributes = True\n\n\n# #endregion ADGroupMappingSchema\n\n\n# #region ADGroupMappingCreate [TYPE Class]\n# @BRIEF Schema for creating an AD Group mapping.\nclass ADGroupMappingCreate(BaseModel):\n ad_group: str\n role_id: str\n\n\n# #endregion ADGroupMappingCreate\n\n\n# #region UserBase [TYPE Class]\n# @BRIEF Base schema for user data.\nclass UserBase(BaseModel):\n username: str\n email: EmailStr | None = None\n is_active: bool = True\n\n\n# #endregion UserBase\n\n\n# #region UserCreate [TYPE Class]\n# @BRIEF Schema for creating a new user.\nclass UserCreate(UserBase):\n password: str\n roles: list[str] = []\n\n\n# #endregion UserCreate\n\n\n# #region UserUpdate [TYPE Class]\n# @BRIEF Schema for updating an existing user.\nclass UserUpdate(BaseModel):\n email: EmailStr | None = None\n password: str | None = None\n is_active: bool | None = None\n roles: list[str] | None = None\n\n\n# #endregion UserUpdate\n\n\n# #region User [TYPE Class]\n# @BRIEF Schema for user data in API responses.\nclass User(UserBase):\n id: str\n auth_source: str\n created_at: datetime\n last_login: datetime | None = None\n roles: list[RoleSchema] = []\n\n class Config:\n from_attributes = True\n\n\n# #endregion User\n\n# #endregion AuthSchemas\n" + "body": "# #region AuthSchemas [C:5] [TYPE Module] [SEMANTICS pydantic, auth, schema, token]\n#\n# @BRIEF Pydantic schemas for authentication requests and responses.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n#\n# @INVARIANT Sensitive fields like password must not be included in response schemas.\n# @DATA_CONTRACT AuthPayload -> AuthSchema\n\nimport re\nfrom datetime import datetime\n\nfrom pydantic import BaseModel, EmailStr, Field, field_validator\n\n\n# #region Token [C:1] [TYPE Class]\n# @BRIEF Represents a JWT access token response.\nclass Token(BaseModel):\n access_token: str\n token_type: str\n\n\n# #endregion Token\n\n\n# #region TokenData [C:1] [TYPE Class]\n# @BRIEF Represents the data encoded in a JWT token.\nclass TokenData(BaseModel):\n username: str | None = None\n scopes: list[str] = []\n\n\n# #endregion TokenData\n\n\n# #region PermissionSchema [C:1] [TYPE Class]\n# @BRIEF Represents a permission in API responses.\nclass PermissionSchema(BaseModel):\n id: str | None = None\n resource: str\n action: str\n\n class Config:\n from_attributes = True\n\n\n# #endregion PermissionSchema\n\n\n# #region RoleSchema [TYPE Class]\n# @BRIEF Represents a role in API responses.\nclass RoleSchema(BaseModel):\n id: str\n name: str\n description: str | None = None\n permissions: list[PermissionSchema] = []\n\n class Config:\n from_attributes = True\n\n\n# #endregion RoleSchema\n\n\n# #region RoleCreate [TYPE Class]\n# @BRIEF Schema for creating a new role.\nclass RoleCreate(BaseModel):\n name: str\n description: str | None = None\n permissions: list[str] = [] # List of permission IDs or \"resource:action\" strings\n\n\n# #endregion RoleCreate\n\n\n# #region RoleUpdate [TYPE Class]\n# @BRIEF Schema for updating an existing role.\nclass RoleUpdate(BaseModel):\n name: str | None = None\n description: str | None = None\n permissions: list[str] | None = None\n\n\n# #endregion RoleUpdate\n\n\n# #region ADGroupMappingSchema [TYPE Class]\n# @BRIEF Represents an AD Group to Role mapping in API responses.\nclass ADGroupMappingSchema(BaseModel):\n id: str\n ad_group: str\n role_id: str\n\n class Config:\n from_attributes = True\n\n\n# #endregion ADGroupMappingSchema\n\n\n# #region ADGroupMappingCreate [TYPE Class]\n# @BRIEF Schema for creating an AD Group mapping.\nclass ADGroupMappingCreate(BaseModel):\n ad_group: str\n role_id: str\n\n @field_validator(\"ad_group\")\n @classmethod\n def validate_ad_group(cls, v: str) -> str:\n if not v or not v.strip():\n raise ValueError(\"AD group name must not be empty\")\n # Allow DOMAIN\\groupname or distinguishedName (CN=...,DC=...) formats\n if not re.match(r'^[A-Za-z0-9_.@()=\\\\\\\\-]+$', v):\n raise ValueError(\n \"AD group name contains invalid characters. \"\n \"Use format: DOMAIN\\\\groupname or CN=groupname,DC=domain\"\n )\n return v.strip()\n\n\n# #endregion ADGroupMappingCreate\n\n\n# #region UserBase [TYPE Class]\n# @BRIEF Base schema for user data.\nclass UserBase(BaseModel):\n username: str\n email: EmailStr | None = None\n is_active: bool = True\n\n\n# #endregion UserBase\n\n\n# #region UserCreate [TYPE Class]\n# @BRIEF Schema for creating a new user.\nclass UserCreate(UserBase):\n password: str = Field(min_length=8)\n roles: list[str] = []\n\n @field_validator(\"password\")\n @classmethod\n def validate_password_strength(cls, v: str) -> str:\n if len(v) < 8:\n raise ValueError(\"Password must be at least 8 characters\")\n if not any(c.isupper() for c in v):\n raise ValueError(\"Password must contain at least one uppercase letter\")\n if not any(c.islower() for c in v):\n raise ValueError(\"Password must contain at least one lowercase letter\")\n if not any(c.isdigit() for c in v):\n raise ValueError(\"Password must contain at least one digit\")\n return v\n\n\n# #endregion UserCreate\n\n\n# #region UserUpdate [TYPE Class]\n# @BRIEF Schema for updating an existing user.\nclass UserUpdate(BaseModel):\n email: EmailStr | None = None\n password: str | None = None\n is_active: bool | None = None\n roles: list[str] | None = None\n\n\n# #endregion UserUpdate\n\n\n# #region User [TYPE Class]\n# @BRIEF Schema for user data in API responses.\nclass User(UserBase):\n id: str\n auth_source: str\n created_at: datetime\n last_login: datetime | None = None\n roles: list[RoleSchema] = []\n\n class Config:\n from_attributes = True\n\n\n# #endregion User\n\n# #endregion AuthSchemas\n" }, { "contract_id": "Token", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 15, - "end_line": 22, + "start_line": 16, + "end_line": 23, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39688,8 +40106,8 @@ "contract_id": "TokenData", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 25, - "end_line": 32, + "start_line": 26, + "end_line": 33, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39706,8 +40124,8 @@ "contract_id": "PermissionSchema", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 35, - "end_line": 46, + "start_line": 36, + "end_line": 47, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39724,8 +40142,8 @@ "contract_id": "RoleSchema", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 49, - "end_line": 61, + "start_line": 50, + "end_line": 62, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39741,8 +40159,8 @@ "contract_id": "RoleCreate", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 64, - "end_line": 72, + "start_line": 65, + "end_line": 73, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39758,8 +40176,8 @@ "contract_id": "RoleUpdate", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 75, - "end_line": 83, + "start_line": 76, + "end_line": 84, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39775,8 +40193,8 @@ "contract_id": "ADGroupMappingSchema", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 86, - "end_line": 97, + "start_line": 87, + "end_line": 98, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39792,8 +40210,8 @@ "contract_id": "ADGroupMappingCreate", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 100, - "end_line": 107, + "start_line": 101, + "end_line": 121, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39803,14 +40221,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ADGroupMappingCreate [TYPE Class]\n# @BRIEF Schema for creating an AD Group mapping.\nclass ADGroupMappingCreate(BaseModel):\n ad_group: str\n role_id: str\n\n\n# #endregion ADGroupMappingCreate\n" + "body": "# #region ADGroupMappingCreate [TYPE Class]\n# @BRIEF Schema for creating an AD Group mapping.\nclass ADGroupMappingCreate(BaseModel):\n ad_group: str\n role_id: str\n\n @field_validator(\"ad_group\")\n @classmethod\n def validate_ad_group(cls, v: str) -> str:\n if not v or not v.strip():\n raise ValueError(\"AD group name must not be empty\")\n # Allow DOMAIN\\groupname or distinguishedName (CN=...,DC=...) formats\n if not re.match(r'^[A-Za-z0-9_.@()=\\\\\\\\-]+$', v):\n raise ValueError(\n \"AD group name contains invalid characters. \"\n \"Use format: DOMAIN\\\\groupname or CN=groupname,DC=domain\"\n )\n return v.strip()\n\n\n# #endregion ADGroupMappingCreate\n" }, { "contract_id": "UserBase", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 110, - "end_line": 118, + "start_line": 124, + "end_line": 132, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39826,8 +40244,8 @@ "contract_id": "UserCreate", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 121, - "end_line": 128, + "start_line": 135, + "end_line": 155, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39837,14 +40255,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region UserCreate [TYPE Class]\n# @BRIEF Schema for creating a new user.\nclass UserCreate(UserBase):\n password: str\n roles: list[str] = []\n\n\n# #endregion UserCreate\n" + "body": "# #region UserCreate [TYPE Class]\n# @BRIEF Schema for creating a new user.\nclass UserCreate(UserBase):\n password: str = Field(min_length=8)\n roles: list[str] = []\n\n @field_validator(\"password\")\n @classmethod\n def validate_password_strength(cls, v: str) -> str:\n if len(v) < 8:\n raise ValueError(\"Password must be at least 8 characters\")\n if not any(c.isupper() for c in v):\n raise ValueError(\"Password must contain at least one uppercase letter\")\n if not any(c.islower() for c in v):\n raise ValueError(\"Password must contain at least one lowercase letter\")\n if not any(c.isdigit() for c in v):\n raise ValueError(\"Password must contain at least one digit\")\n return v\n\n\n# #endregion UserCreate\n" }, { "contract_id": "UserUpdate", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 131, - "end_line": 140, + "start_line": 158, + "end_line": 167, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -39860,8 +40278,8 @@ "contract_id": "User", "contract_type": "Class", "file_path": "backend/src/schemas/auth.py", - "start_line": 143, - "end_line": 156, + "start_line": 170, + "end_line": 183, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -41450,7 +41868,7 @@ "contract_type": "Module", "file_path": "backend/src/schemas/validation.py", "start_line": 1, - "end_line": 139, + "end_line": 140, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -41469,7 +41887,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ValidationSchemas [C:3] [TYPE Module] [SEMANTICS pydantic, validation, schema, task, run]\n# @BRIEF Pydantic v2 schemas for validation task management and run history API serialization.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n\nfrom datetime import datetime\nfrom typing import Any\n\nfrom pydantic import BaseModel, Field\n\n\n# #region ValidationTaskCreate [C:1] [TYPE Class]\n# @BRIEF Schema for creating a new validation task (policy).\nclass ValidationTaskCreate(BaseModel):\n name: str = Field(..., description=\"Human-readable task name\")\n environment_id: str = Field(..., description=\"Target Superset environment ID\")\n dashboard_ids: list[str] = Field(..., description=\"List of dashboard IDs to validate (use single-element array for v1)\")\n provider_id: str = Field(..., description=\"LLM provider ID — must be multimodal\")\n schedule_days: list[int] | None = Field(None, description=\"Days of week (0-6, 0=Sunday). Omit or empty for manual-only.\")\n window_start: str | None = Field(None, description=\"Window start time, HH:MM format\")\n window_end: str | None = Field(None, description=\"Window end time, HH:MM format\")\n notify_owners: bool = Field(True, description=\"Notify dashboard owners on failure\")\n custom_channels: list[str] | None = Field(None, description=\"Additional notification channels\")\n alert_condition: str = Field(\"FAIL_ONLY\", description=\"FAIL_ONLY, WARN_AND_FAIL, or ALWAYS\")\n is_active: bool = Field(True, description=\"Whether the task is active\")\n# #endregion ValidationTaskCreate\n\n\n# #region ValidationTaskUpdate [C:1] [TYPE Class]\n# @BRIEF Schema for updating an existing validation task (policy).\nclass ValidationTaskUpdate(BaseModel):\n name: str | None = None\n environment_id: str | None = None\n dashboard_ids: list[str] | None = None\n provider_id: str | None = None\n schedule_days: list[int] | None = None\n window_start: str | None = None\n window_end: str | None = None\n notify_owners: bool | None = None\n custom_channels: list[str] | None = None\n alert_condition: str | None = None\n is_active: bool | None = None\n# #endregion ValidationTaskUpdate\n\n\n# #region ValidationTaskResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation task API responses — includes last run status from join.\nclass ValidationTaskResponse(BaseModel):\n id: str\n name: str\n environment_id: str\n is_active: bool\n dashboard_ids: list[str]\n provider_id: str | None = None\n schedule_days: list[int] | None = None\n window_start: str | None = None\n window_end: str | None = None\n notify_owners: bool = True\n custom_channels: list[str] | None = None\n alert_condition: str = \"FAIL_ONLY\"\n created_at: datetime\n updated_at: datetime | None = None\n last_run_status: str | None = None\n last_run_at: datetime | None = None\n\n class Config:\n from_attributes = True\n# #endregion ValidationTaskResponse\n\n\n# #region ValidationTaskListResponse [C:1] [TYPE Class]\n# @BRIEF Schema for paginated task list response.\nclass ValidationTaskListResponse(BaseModel):\n items: list[ValidationTaskResponse] = []\n total: int = 0\n page: int = 1\n page_size: int = 20\n# #endregion ValidationTaskListResponse\n\n\n# #region ValidationRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation run history listing.\nclass ValidationRunResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n task_name: str | None = None # resolved from ValidationPolicy at query time\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunResponse\n\n\n# #region ValidationRunListResponse [C:1] [TYPE Class]\n# @BRIEF Schema for paginated run list response.\nclass ValidationRunListResponse(BaseModel):\n items: list[ValidationRunResponse] = []\n total: int = 0\n page: int = 1\n page_size: int = 20\n# #endregion ValidationRunListResponse\n\n\n# #region ValidationRunDetailResponse [C:1] [TYPE Class]\n# @BRIEF Schema for full run detail including parsed issues and raw response.\nclass ValidationRunDetailResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n issues: list[dict[str, Any]] = Field(default_factory=list)\n raw_response: str | None = None\n task_name: str | None = None\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunDetailResponse\n\n\n# #region TriggerRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for trigger-run response — returns spawned task ID.\nclass TriggerRunResponse(BaseModel):\n task_id: str\n spawned_task_id: str\n status: str = \"PENDING\"\n message: str = \"Validation task spawned\"\n# #endregion TriggerRunResponse\n\n\n# #endregion ValidationSchemas\n" + "body": "# #region ValidationSchemas [C:3] [TYPE Module] [SEMANTICS pydantic, validation, schema, task, run]\n# @BRIEF Pydantic v2 schemas for validation task management and run history API serialization.\n# @LAYER API\n# @RELATION DEPENDS_ON -> [EXT:Library:pydantic]\n\nfrom datetime import datetime\nfrom typing import Any\n\nfrom pydantic import BaseModel, Field\n\n\n# #region ValidationTaskCreate [C:1] [TYPE Class]\n# @BRIEF Schema for creating a new validation task (policy).\nclass ValidationTaskCreate(BaseModel):\n name: str = Field(..., description=\"Human-readable task name\")\n environment_id: str = Field(..., description=\"Target Superset environment ID\")\n dashboard_ids: list[str] = Field(..., description=\"List of dashboard IDs to validate (use single-element array for v1)\")\n provider_id: str = Field(..., description=\"LLM provider ID — must be multimodal\")\n schedule_days: list[int] | None = Field(None, description=\"Days of week (0-6, 0=Sunday). Omit or empty for manual-only.\")\n window_start: str | None = Field(None, description=\"Window start time, HH:MM format\")\n window_end: str | None = Field(None, description=\"Window end time, HH:MM format\")\n notify_owners: bool = Field(True, description=\"Notify dashboard owners on failure\")\n custom_channels: list[str] | None = Field(None, description=\"Additional notification channels\")\n alert_condition: str = Field(\"FAIL_ONLY\", description=\"FAIL_ONLY, WARN_AND_FAIL, or ALWAYS\")\n is_active: bool = Field(True, description=\"Whether the task is active\")\n# #endregion ValidationTaskCreate\n\n\n# #region ValidationTaskUpdate [C:1] [TYPE Class]\n# @BRIEF Schema for updating an existing validation task (policy).\nclass ValidationTaskUpdate(BaseModel):\n name: str | None = None\n environment_id: str | None = None\n dashboard_ids: list[str] | None = None\n provider_id: str | None = None\n schedule_days: list[int] | None = None\n window_start: str | None = None\n window_end: str | None = None\n notify_owners: bool | None = None\n custom_channels: list[str] | None = None\n alert_condition: str | None = None\n is_active: bool | None = None\n# #endregion ValidationTaskUpdate\n\n\n# #region ValidationTaskResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation task API responses — includes last run status from join.\nclass ValidationTaskResponse(BaseModel):\n id: str\n name: str\n environment_id: str\n is_active: bool\n dashboard_ids: list[str]\n provider_id: str | None = None\n schedule_days: list[int] | None = None\n window_start: str | None = None\n window_end: str | None = None\n notify_owners: bool = True\n custom_channels: list[str] | None = None\n alert_condition: str = \"FAIL_ONLY\"\n created_at: datetime\n updated_at: datetime | None = None\n last_run_status: str | None = None\n last_run_at: datetime | None = None\n\n class Config:\n from_attributes = True\n# #endregion ValidationTaskResponse\n\n\n# #region ValidationTaskListResponse [C:1] [TYPE Class]\n# @BRIEF Schema for paginated task list response.\nclass ValidationTaskListResponse(BaseModel):\n items: list[ValidationTaskResponse] = []\n total: int = 0\n page: int = 1\n page_size: int = 20\n# #endregion ValidationTaskListResponse\n\n\n# #region ValidationRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation run history listing.\nclass ValidationRunResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n task_name: str | None = None # resolved from ValidationPolicy at query time\n issues_count: int = 0 # number of issues found during validation\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunResponse\n\n\n# #region ValidationRunListResponse [C:1] [TYPE Class]\n# @BRIEF Schema for paginated run list response.\nclass ValidationRunListResponse(BaseModel):\n items: list[ValidationRunResponse] = []\n total: int = 0\n page: int = 1\n page_size: int = 20\n# #endregion ValidationRunListResponse\n\n\n# #region ValidationRunDetailResponse [C:1] [TYPE Class]\n# @BRIEF Schema for full run detail including parsed issues and raw response.\nclass ValidationRunDetailResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n issues: list[dict[str, Any]] = Field(default_factory=list)\n raw_response: str | None = None\n task_name: str | None = None\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunDetailResponse\n\n\n# #region TriggerRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for trigger-run response — returns spawned task ID.\nclass TriggerRunResponse(BaseModel):\n task_id: str\n spawned_task_id: str\n status: str = \"PENDING\"\n message: str = \"Validation task spawned\"\n# #endregion TriggerRunResponse\n\n\n# #endregion ValidationSchemas\n" }, { "contract_id": "ValidationTaskCreate", @@ -41548,7 +41966,7 @@ "contract_type": "Class", "file_path": "backend/src/schemas/validation.py", "start_line": 81, - "end_line": 96, + "end_line": 97, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -41559,14 +41977,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ValidationRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation run history listing.\nclass ValidationRunResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n task_name: str | None = None # resolved from ValidationPolicy at query time\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunResponse\n" + "body": "# #region ValidationRunResponse [C:1] [TYPE Class]\n# @BRIEF Schema for validation run history listing.\nclass ValidationRunResponse(BaseModel):\n id: str\n task_id: str | None = None\n dashboard_id: str\n environment_id: str | None = None\n status: str\n summary: str = \"\"\n timestamp: datetime | None = None\n screenshot_path: str | None = None\n task_name: str | None = None # resolved from ValidationPolicy at query time\n issues_count: int = 0 # number of issues found during validation\n\n class Config:\n from_attributes = True\n# #endregion ValidationRunResponse\n" }, { "contract_id": "ValidationRunListResponse", "contract_type": "Class", "file_path": "backend/src/schemas/validation.py", - "start_line": 99, - "end_line": 106, + "start_line": 100, + "end_line": 107, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -41583,8 +42001,8 @@ "contract_id": "ValidationRunDetailResponse", "contract_type": "Class", "file_path": "backend/src/schemas/validation.py", - "start_line": 109, - "end_line": 126, + "start_line": 110, + "end_line": 127, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -41601,8 +42019,8 @@ "contract_id": "TriggerRunResponse", "contract_type": "Class", "file_path": "backend/src/schemas/validation.py", - "start_line": 129, - "end_line": 136, + "start_line": 130, + "end_line": 137, "tier": "TIER_1", "complexity": 1, "metadata": { @@ -45898,7 +46316,7 @@ "contract_type": "Module", "file_path": "backend/src/services/git/_gitea.py", "start_line": 1, - "end_line": 259, + "end_line": 271, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -45917,7 +46335,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region GitServiceGiteaMixin [C:4] [TYPE Module] [SEMANTICS git, gitea, api, remote, connection, http_pool]\n# @LAYER Infrastructure\n# @BRIEF Gitea API operations for GitService — connection testing, repository CRUD, and pull request creation. Uses shared self._http_client for connection pooling.\n# @RELATION CALLED_BY -> [GitService]\n\nfrom typing import Any\nfrom urllib.parse import quote\n\nfrom fastapi import HTTPException\nimport httpx\n\nfrom src.core.logger import belief_scope, logger\nfrom src.models.git import GitProvider\n\n\n# #region GitServiceGiteaMixin [C:3] [TYPE Class]\n# @BRIEF Mixin providing Gitea API operations for GitService.\nclass GitServiceGiteaMixin:\n # region test_connection [TYPE Function]\n # @PURPOSE: Test connection to Git provider using PAT.\n # @PARAM provider (GitProvider), url (str), pat (str)\n # @PRE provider is valid; url is a valid HTTP(S) URL; pat is provided.\n # @POST Returns True if connection to the provider's API succeeds.\n # @RETURN bool\n async def test_connection(self, provider: GitProvider, url: str, pat: str) -> bool:\n with belief_scope(\"GitService.test_connection\"):\n if \".local\" in url or \"localhost\" in url:\n logger.reason(\"Local/Offline mode detected for URL\", extra={\"src\": \"test_connection\"})\n return True\n if not url.startswith(('http://', 'https://')):\n logger.error(f\"[test_connection][Coherence:Failed] Invalid URL protocol: {url}\")\n return False\n if not pat or not pat.strip():\n logger.error(\"[test_connection][Coherence:Failed] Git PAT is missing or empty\")\n return False\n pat = pat.strip()\n try:\n if provider == GitProvider.GITHUB:\n headers = {\"Authorization\": f\"token {pat}\"}\n api_url = \"https://api.github.com/user\" if \"github.com\" in url else f\"{url.rstrip('/')}/api/v3/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n elif provider == GitProvider.GITLAB:\n headers = {\"PRIVATE-TOKEN\": pat}\n api_url = f\"{url.rstrip('/')}/api/v4/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n elif provider == GitProvider.GITEA:\n headers = {\"Authorization\": f\"token {pat}\"}\n api_url = f\"{url.rstrip('/')}/api/v1/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n else:\n return False\n if resp.status_code != 200:\n logger.error(f\"[test_connection][Coherence:Failed] Git connection test failed for {provider} at {api_url}. Status: {resp.status_code}\")\n return resp.status_code == 200\n except Exception as e:\n logger.error(f\"[test_connection][Coherence:Failed] Error testing git connection: {e}\")\n return False\n # endregion test_connection\n\n # region _gitea_headers [TYPE Function]\n # @PURPOSE: Build Gitea API authorization headers.\n # @PRE pat is provided.\n # @POST Returns headers with token auth.\n # @RETURN Dict[str, str]\n def _gitea_headers(self, pat: str) -> dict[str, str]:\n token = (pat or \"\").strip()\n if not token:\n raise HTTPException(status_code=400, detail=\"Git PAT is required for Gitea operations\")\n return {\n \"Authorization\": f\"token {token}\",\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n }\n # endregion _gitea_headers\n\n # region _gitea_request [TYPE Function]\n # @PURPOSE: Execute HTTP request against Gitea API with stable error mapping.\n # @PRE method and endpoint are valid.\n # @POST Returns decoded JSON payload.\n # @RETURN Any\n async def _gitea_request(\n self, method: str, server_url: str, pat: str, endpoint: str,\n payload: dict[str, Any] | None = None,\n ) -> Any:\n base_url = self._normalize_git_server_url(server_url)\n url = f\"{base_url}/api/v1{endpoint}\"\n headers = self._gitea_headers(pat)\n try:\n response = await self._http_client.request(method=method, url=url, headers=headers, json=payload)\n except Exception as e:\n logger.error(f\"[gitea_request][Coherence:Failed] Network error: {e}\")\n raise HTTPException(status_code=503, detail=f\"Gitea API is unavailable: {e!s}\")\n if response.status_code >= 400:\n detail = response.text\n try:\n parsed = response.json()\n detail = parsed.get(\"message\") or parsed.get(\"error\") or detail\n except Exception:\n logger.debug(\"Could not parse error response JSON from Gitea API\")\n logger.error(f\"[gitea_request][Coherence:Failed] method={method} endpoint={endpoint} status={response.status_code} detail={detail}\")\n raise HTTPException(status_code=response.status_code, detail=f\"Gitea API error: {detail}\")\n if response.status_code == 204:\n return None\n return response.json()\n # endregion _gitea_request\n\n # region get_gitea_current_user [TYPE Function]\n # @PURPOSE: Resolve current Gitea user for PAT.\n # @PRE server_url and pat are valid.\n # @POST Returns current username.\n # @RETURN str\n async def get_gitea_current_user(self, server_url: str, pat: str) -> str:\n payload = await self._gitea_request(\"GET\", server_url, pat, \"/user\")\n username = payload.get(\"login\") or payload.get(\"username\")\n if not username:\n raise HTTPException(status_code=500, detail=\"Failed to resolve Gitea username\")\n return str(username)\n # endregion get_gitea_current_user\n\n # region list_gitea_repositories [TYPE Function]\n # @PURPOSE: List repositories visible to authenticated Gitea user.\n # @PRE server_url and pat are valid.\n # @POST Returns repository list from Gitea.\n # @RETURN List[dict]\n async def list_gitea_repositories(self, server_url: str, pat: str) -> list[dict]:\n payload = await self._gitea_request(\"GET\", server_url, pat, \"/user/repos?limit=100&page=1\")\n if not isinstance(payload, list):\n return []\n return payload\n # endregion list_gitea_repositories\n\n # region create_gitea_repository [TYPE Function]\n # @PURPOSE: Create repository in Gitea for authenticated user.\n # @PRE name is non-empty and PAT has repo creation permission.\n # @POST Returns created repository payload.\n # @RETURN dict\n async def create_gitea_repository(\n self, server_url: str, pat: str, name: str, private: bool = True,\n description: str | None = None, auto_init: bool = True, default_branch: str | None = \"main\",\n ) -> dict[str, Any]:\n payload: dict[str, Any] = {\"name\": name, \"private\": bool(private), \"auto_init\": bool(auto_init)}\n if description:\n payload[\"description\"] = description\n if default_branch:\n payload[\"default_branch\"] = default_branch\n created = await self._gitea_request(\"POST\", server_url, pat, \"/user/repos\", payload=payload)\n if not isinstance(created, dict):\n raise HTTPException(status_code=500, detail=\"Unexpected Gitea response while creating repository\")\n return created\n # endregion create_gitea_repository\n\n # region delete_gitea_repository [TYPE Function]\n # @PURPOSE: Delete repository in Gitea.\n # @PRE owner and repo_name are non-empty.\n # @POST Repository deleted on Gitea server.\n async def delete_gitea_repository(self, server_url: str, pat: str, owner: str, repo_name: str) -> None:\n if not owner or not repo_name:\n raise HTTPException(status_code=400, detail=\"owner and repo_name are required\")\n await self._gitea_request(\"DELETE\", server_url, pat, f\"/repos/{owner}/{repo_name}\")\n # endregion delete_gitea_repository\n\n # region _gitea_branch_exists [TYPE Function]\n # @PURPOSE: Check whether a branch exists in Gitea repository.\n # @PRE owner/repo/branch are non-empty.\n # @POST Returns True when branch exists, False when 404.\n # @RETURN bool\n async def _gitea_branch_exists(self, server_url: str, pat: str, owner: str, repo: str, branch: str) -> bool:\n if not owner or not repo or not branch:\n return False\n endpoint = f\"/repos/{owner}/{repo}/branches/{quote(branch, safe='')}\"\n try:\n await self._gitea_request(\"GET\", server_url, pat, endpoint)\n return True\n except HTTPException as exc:\n if exc.status_code == 404:\n return False\n raise\n # endregion _gitea_branch_exists\n\n # region _build_gitea_pr_404_detail [TYPE Function]\n # @PURPOSE: Build actionable error detail for Gitea PR 404 responses.\n # @PRE owner/repo/from_branch/to_branch are provided.\n # @POST Returns specific branch-missing message when detected.\n # @RETURN Optional[str]\n async def _build_gitea_pr_404_detail(\n self, server_url: str, pat: str, owner: str, repo: str, from_branch: str, to_branch: str,\n ) -> str | None:\n source_exists = await self._gitea_branch_exists(\n server_url=server_url, pat=pat, owner=owner, repo=repo, branch=from_branch,\n )\n target_exists = await self._gitea_branch_exists(\n server_url=server_url, pat=pat, owner=owner, repo=repo, branch=to_branch,\n )\n if not source_exists:\n return f\"Gitea branch not found: source branch '{from_branch}' in {owner}/{repo}\"\n if not target_exists:\n return f\"Gitea branch not found: target branch '{to_branch}' in {owner}/{repo}\"\n return None\n # endregion _build_gitea_pr_404_detail\n\n # region create_gitea_pull_request [TYPE Function]\n # @PURPOSE: Create pull request in Gitea.\n # @PRE Config and remote URL are valid.\n # @POST Returns normalized PR metadata.\n # @RETURN Dict[str, Any]\n async def create_gitea_pull_request(\n self, server_url: str, pat: str, remote_url: str, from_branch: str, to_branch: str,\n title: str, description: str | None = None,\n ) -> dict[str, Any]:\n identity = self._parse_remote_repo_identity(remote_url)\n req_payload = {\"title\": title, \"head\": from_branch, \"base\": to_branch, \"body\": description or \"\"}\n endpoint = f\"/repos/{identity['owner']}/{identity['repo']}/pulls\"\n active_server_url = server_url\n try:\n data = await self._gitea_request(\"POST\", active_server_url, pat, endpoint, payload=req_payload)\n except HTTPException as exc:\n fallback_url = self._derive_server_url_from_remote(remote_url)\n normalized_primary = self._normalize_git_server_url(server_url)\n should_retry_with_fallback = (\n exc.status_code == 404 and fallback_url and fallback_url != normalized_primary\n )\n if should_retry_with_fallback:\n logger.explore(\n f\"Primary Gitea URL not found, retrying with remote host: {fallback_url}\",\n extra={\"src\": \"create_gitea_pull_request\"},\n )\n active_server_url = fallback_url\n try:\n data = await self._gitea_request(\"POST\", active_server_url, pat, endpoint, payload=req_payload)\n except HTTPException as retry_exc:\n if retry_exc.status_code == 404:\n branch_detail = await self._build_gitea_pr_404_detail(\n server_url=active_server_url, pat=pat,\n owner=identity[\"owner\"], repo=identity[\"repo\"],\n from_branch=from_branch, to_branch=to_branch,\n )\n if branch_detail:\n raise HTTPException(status_code=400, detail=branch_detail)\n raise\n else:\n if exc.status_code == 404:\n branch_detail = await self._build_gitea_pr_404_detail(\n server_url=active_server_url, pat=pat,\n owner=identity[\"owner\"], repo=identity[\"repo\"],\n from_branch=from_branch, to_branch=to_branch,\n )\n if branch_detail:\n raise HTTPException(status_code=400, detail=branch_detail)\n raise\n if not isinstance(data, dict):\n raise HTTPException(status_code=500, detail=\"Unexpected Gitea response while creating pull request\")\n return {\n \"id\": data.get(\"number\") or data.get(\"id\"),\n \"url\": data.get(\"html_url\") or data.get(\"url\"),\n \"status\": data.get(\"state\") or \"open\",\n }\n # endregion create_gitea_pull_request\n# #endregion GitServiceGiteaMixin\n# #endregion GitServiceGiteaMixin\n" + "body": "# #region GitServiceGiteaMixin [C:4] [TYPE Module] [SEMANTICS git, gitea, api, remote, connection, http_pool]\n# @LAYER Infrastructure\n# @BRIEF Gitea API operations for GitService — connection testing, repository CRUD, and pull request creation. Uses shared self._http_client for connection pooling.\n# @RELATION CALLED_BY -> [GitService]\n\nfrom typing import Any\nfrom urllib.parse import quote\n\nfrom fastapi import HTTPException\nimport httpx\n\nfrom src.core.logger import belief_scope, logger\nfrom src.models.git import GitProvider\n\n\n# #region GitServiceGiteaMixin [C:3] [TYPE Class]\n# @BRIEF Mixin providing Gitea API operations for GitService.\nclass GitServiceGiteaMixin:\n # region test_connection [TYPE Function]\n # @PURPOSE: Test connection to Git provider using PAT.\n # @PARAM provider (GitProvider), url (str), pat (str)\n # @PRE provider is valid; url is a valid HTTP(S) URL; pat is provided.\n # @POST Returns True if connection to the provider's API succeeds.\n # @RETURN bool\n async def test_connection(self, provider: GitProvider, url: str, pat: str) -> bool:\n with belief_scope(\"GitService.test_connection\"):\n if \".local\" in url or \"localhost\" in url:\n logger.reason(\"Local/Offline mode detected for URL\", extra={\"src\": \"test_connection\"})\n return True\n if not url.startswith(('http://', 'https://')):\n logger.error(f\"[test_connection][Coherence:Failed] Invalid URL protocol: {url}\")\n return False\n if not pat or not pat.strip():\n logger.error(\"[test_connection][Coherence:Failed] Git PAT is missing or empty\")\n return False\n pat = pat.strip()\n try:\n if provider == GitProvider.GITHUB:\n headers = {\"Authorization\": f\"token {pat}\"}\n api_url = \"https://api.github.com/user\" if \"github.com\" in url else f\"{url.rstrip('/')}/api/v3/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n elif provider == GitProvider.GITLAB:\n headers = {\"PRIVATE-TOKEN\": pat}\n api_url = f\"{url.rstrip('/')}/api/v4/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n elif provider == GitProvider.GITEA:\n headers = {\"Authorization\": f\"token {pat}\"}\n api_url = f\"{url.rstrip('/')}/api/v1/user\"\n resp = await self._http_client.get(api_url, headers=headers)\n else:\n return False\n if resp.status_code != 200:\n logger.error(f\"[test_connection][Coherence:Failed] Git connection test failed for {provider} at {api_url}. Status: {resp.status_code}\")\n return resp.status_code == 200\n except Exception as e:\n logger.error(f\"[test_connection][Coherence:Failed] Error testing git connection: {e}\")\n return False\n # endregion test_connection\n\n # region _gitea_headers [TYPE Function]\n # @PURPOSE: Build Gitea API authorization headers.\n # @PRE pat is provided.\n # @POST Returns headers with token auth.\n # @RETURN Dict[str, str]\n def _gitea_headers(self, pat: str) -> dict[str, str]:\n token = (pat or \"\").strip()\n if not token:\n raise HTTPException(status_code=400, detail=\"Git PAT is required for Gitea operations\")\n return {\n \"Authorization\": f\"token {token}\",\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n }\n # endregion _gitea_headers\n\n # region _gitea_request [TYPE Function]\n # @PURPOSE: Execute HTTP request against Gitea API with stable error mapping.\n # @PRE method and endpoint are valid.\n # @POST Returns decoded JSON payload.\n # @RETURN Any\n async def _gitea_request(\n self, method: str, server_url: str, pat: str, endpoint: str,\n payload: dict[str, Any] | None = None,\n ) -> Any:\n base_url = self._normalize_git_server_url(server_url)\n url = f\"{base_url}/api/v1{endpoint}\"\n headers = self._gitea_headers(pat)\n try:\n response = await self._http_client.request(method=method, url=url, headers=headers, json=payload)\n except Exception as e:\n logger.error(f\"[gitea_request][Coherence:Failed] Network error: {e}\")\n raise HTTPException(status_code=503, detail=f\"Gitea API is unavailable: {e!s}\")\n if response.status_code >= 400:\n detail = response.text\n try:\n parsed = response.json()\n detail = parsed.get(\"message\") or parsed.get(\"error\") or detail\n except Exception:\n logger.debug(\"Could not parse error response JSON from Gitea API\")\n logger.error(f\"[gitea_request][Coherence:Failed] method={method} endpoint={endpoint} status={response.status_code} detail={detail}\")\n raise HTTPException(status_code=response.status_code, detail=f\"Gitea API error: {detail}\")\n if response.status_code == 204:\n return None\n return response.json()\n # endregion _gitea_request\n\n # region get_gitea_current_user [TYPE Function]\n # @PURPOSE: Resolve current Gitea user for PAT.\n # @PRE server_url and pat are valid.\n # @POST Returns current username.\n # @RETURN str\n async def get_gitea_current_user(self, server_url: str, pat: str) -> str:\n payload = await self._gitea_request(\"GET\", server_url, pat, \"/user\")\n username = payload.get(\"login\") or payload.get(\"username\")\n if not username:\n raise HTTPException(status_code=500, detail=\"Failed to resolve Gitea username\")\n return str(username)\n # endregion get_gitea_current_user\n\n # region list_gitea_repositories [TYPE Function]\n # @PURPOSE: List repositories visible to authenticated Gitea user.\n # @PRE server_url and pat are valid.\n # @POST Returns repository list from Gitea.\n # @RETURN List[dict]\n async def list_gitea_repositories(self, server_url: str, pat: str) -> list[dict]:\n payload = await self._gitea_request(\"GET\", server_url, pat, \"/user/repos?limit=100&page=1\")\n if not isinstance(payload, list):\n return []\n return payload\n # endregion list_gitea_repositories\n\n # region create_gitea_repository [TYPE Function]\n # @PURPOSE: Create repository in Gitea for authenticated user. Idempotent — returns existing repo if name already taken.\n # @PRE name is non-empty and PAT has repo creation permission.\n # @POST Returns created or existing repository payload.\n # @RETURN dict\n async def create_gitea_repository(\n self, server_url: str, pat: str, name: str, private: bool = True,\n description: str | None = None, auto_init: bool = True, default_branch: str | None = \"main\",\n ) -> dict[str, Any]:\n payload: dict[str, Any] = {\"name\": name, \"private\": bool(private), \"auto_init\": bool(auto_init)}\n if description:\n payload[\"description\"] = description\n if default_branch:\n payload[\"default_branch\"] = default_branch\n try:\n created = await self._gitea_request(\"POST\", server_url, pat, \"/user/repos\", payload=payload)\n except HTTPException as exc:\n if exc.status_code == 409:\n logger.reason(\n f\"Repository '{name}' already exists on Gitea, fetching existing repo\",\n extra={\"src\": \"create_gitea_repository\"},\n )\n username = await self.get_gitea_current_user(server_url, pat)\n existing = await self._gitea_request(\"GET\", server_url, pat, f\"/repos/{username}/{name}\")\n if isinstance(existing, dict):\n return existing\n raise\n if not isinstance(created, dict):\n raise HTTPException(status_code=500, detail=\"Unexpected Gitea response while creating repository\")\n return created\n # endregion create_gitea_repository\n\n # region delete_gitea_repository [TYPE Function]\n # @PURPOSE: Delete repository in Gitea.\n # @PRE owner and repo_name are non-empty.\n # @POST Repository deleted on Gitea server.\n async def delete_gitea_repository(self, server_url: str, pat: str, owner: str, repo_name: str) -> None:\n if not owner or not repo_name:\n raise HTTPException(status_code=400, detail=\"owner and repo_name are required\")\n await self._gitea_request(\"DELETE\", server_url, pat, f\"/repos/{owner}/{repo_name}\")\n # endregion delete_gitea_repository\n\n # region _gitea_branch_exists [TYPE Function]\n # @PURPOSE: Check whether a branch exists in Gitea repository.\n # @PRE owner/repo/branch are non-empty.\n # @POST Returns True when branch exists, False when 404.\n # @RETURN bool\n async def _gitea_branch_exists(self, server_url: str, pat: str, owner: str, repo: str, branch: str) -> bool:\n if not owner or not repo or not branch:\n return False\n endpoint = f\"/repos/{owner}/{repo}/branches/{quote(branch, safe='')}\"\n try:\n await self._gitea_request(\"GET\", server_url, pat, endpoint)\n return True\n except HTTPException as exc:\n if exc.status_code == 404:\n return False\n raise\n # endregion _gitea_branch_exists\n\n # region _build_gitea_pr_404_detail [TYPE Function]\n # @PURPOSE: Build actionable error detail for Gitea PR 404 responses.\n # @PRE owner/repo/from_branch/to_branch are provided.\n # @POST Returns specific branch-missing message when detected.\n # @RETURN Optional[str]\n async def _build_gitea_pr_404_detail(\n self, server_url: str, pat: str, owner: str, repo: str, from_branch: str, to_branch: str,\n ) -> str | None:\n source_exists = await self._gitea_branch_exists(\n server_url=server_url, pat=pat, owner=owner, repo=repo, branch=from_branch,\n )\n target_exists = await self._gitea_branch_exists(\n server_url=server_url, pat=pat, owner=owner, repo=repo, branch=to_branch,\n )\n if not source_exists:\n return f\"Gitea branch not found: source branch '{from_branch}' in {owner}/{repo}\"\n if not target_exists:\n return f\"Gitea branch not found: target branch '{to_branch}' in {owner}/{repo}\"\n return None\n # endregion _build_gitea_pr_404_detail\n\n # region create_gitea_pull_request [TYPE Function]\n # @PURPOSE: Create pull request in Gitea.\n # @PRE Config and remote URL are valid.\n # @POST Returns normalized PR metadata.\n # @RETURN Dict[str, Any]\n async def create_gitea_pull_request(\n self, server_url: str, pat: str, remote_url: str, from_branch: str, to_branch: str,\n title: str, description: str | None = None,\n ) -> dict[str, Any]:\n identity = self._parse_remote_repo_identity(remote_url)\n req_payload = {\"title\": title, \"head\": from_branch, \"base\": to_branch, \"body\": description or \"\"}\n endpoint = f\"/repos/{identity['owner']}/{identity['repo']}/pulls\"\n active_server_url = server_url\n try:\n data = await self._gitea_request(\"POST\", active_server_url, pat, endpoint, payload=req_payload)\n except HTTPException as exc:\n fallback_url = self._derive_server_url_from_remote(remote_url)\n normalized_primary = self._normalize_git_server_url(server_url)\n should_retry_with_fallback = (\n exc.status_code == 404 and fallback_url and fallback_url != normalized_primary\n )\n if should_retry_with_fallback:\n logger.explore(\n f\"Primary Gitea URL not found, retrying with remote host: {fallback_url}\",\n extra={\"src\": \"create_gitea_pull_request\"},\n )\n active_server_url = fallback_url\n try:\n data = await self._gitea_request(\"POST\", active_server_url, pat, endpoint, payload=req_payload)\n except HTTPException as retry_exc:\n if retry_exc.status_code == 404:\n branch_detail = await self._build_gitea_pr_404_detail(\n server_url=active_server_url, pat=pat,\n owner=identity[\"owner\"], repo=identity[\"repo\"],\n from_branch=from_branch, to_branch=to_branch,\n )\n if branch_detail:\n raise HTTPException(status_code=400, detail=branch_detail)\n raise\n else:\n if exc.status_code == 404:\n branch_detail = await self._build_gitea_pr_404_detail(\n server_url=active_server_url, pat=pat,\n owner=identity[\"owner\"], repo=identity[\"repo\"],\n from_branch=from_branch, to_branch=to_branch,\n )\n if branch_detail:\n raise HTTPException(status_code=400, detail=branch_detail)\n raise\n if not isinstance(data, dict):\n raise HTTPException(status_code=500, detail=\"Unexpected Gitea response while creating pull request\")\n return {\n \"id\": data.get(\"number\") or data.get(\"id\"),\n \"url\": data.get(\"html_url\") or data.get(\"url\"),\n \"status\": data.get(\"state\") or \"open\",\n }\n # endregion create_gitea_pull_request\n# #endregion GitServiceGiteaMixin\n# #endregion GitServiceGiteaMixin\n" }, { "contract_id": "GitServiceMergeMixin", @@ -46393,13 +46811,14 @@ "contract_type": "Module", "file_path": "backend/src/services/llm_provider.py", "start_line": 1, - "end_line": 306, + "end_line": 222, "tier": "TIER_2", "complexity": 3, "metadata": { "BRIEF": "Service for managing LLM provider configurations with encrypted API keys.", "COMPLEXITY": 3, - "LAYER": "Domain" + "LAYER": "Domain", + "RATIONALE": "EncryptionManager imported from core/encryption.py (extracted from this module)" }, "relations": [ { @@ -46424,14 +46843,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region llm_provider [C:3] [TYPE Module] [SEMANTICS sqlalchemy, llm, provider, encryption, config]\n# @BRIEF Service for managing LLM provider configurations with encrypted API keys.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [LLMProvider]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [LLMProviderConfig]\nimport os\nfrom typing import TYPE_CHECKING\n\nfrom cryptography.exceptions import InvalidTag\nfrom cryptography.fernet import Fernet\nfrom sqlalchemy.orm import Session\n\nfrom ..core.logger import belief_scope, logger\nfrom ..models.llm import LLMProvider\n\nif TYPE_CHECKING:\n from ..plugins.llm_analysis.models import LLMProviderConfig\n\nMASKED_API_KEY_PLACEHOLDER = \"********\"\n\n\n# #region mask_api_key [C:2] [TYPE Function]\n# @BRIEF Mask an API key for safe display, showing first 4 and last 4 characters.\n# @PRE api_key is a plaintext string or None.\n# @POST Returns \"****\" for very short keys; \"{first 2}...{last 2}\" for <=8 chars;\n# \"{first 4}...{last 4}\" for longer keys; \"\" for None/empty.\ndef mask_api_key(api_key: str | None) -> str:\n if not api_key:\n return \"\"\n if len(api_key) <= 4:\n return \"****\"\n if len(api_key) <= 8:\n return f\"{api_key[:2]}...{api_key[-2:]}\"\n return f\"{api_key[:4]}...{api_key[-4:]}\"\n\n\n# #endregion mask_api_key\n\n\n# #region is_masked_or_placeholder [C:2] [TYPE Function]\n# @BRIEF Predicate: True when api_key is None, empty, \"********\", or contains \"...\".\n# @PRE api_key can be None.\n# @POST Returns True only for non-real-key values.\ndef is_masked_or_placeholder(api_key: str | None) -> bool:\n if not api_key:\n return True\n return api_key == MASKED_API_KEY_PLACEHOLDER or \"...\" in api_key\n\n\n# #endregion is_masked_or_placeholder\n\n\n# #region _require_fernet_key [C:5] [TYPE Function]\n# @BRIEF Load and validate the Fernet key used for secret encryption.\n# @PRE ENCRYPTION_KEY environment variable must be set to a valid Fernet key.\n# @POST Returns validated key bytes ready for Fernet initialization.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @SIDE_EFFECT Emits belief-state logs for missing or invalid encryption configuration.\n# @DATA_CONTRACT Input[ENCRYPTION_KEY:str] -> Output[bytes]\n# @INVARIANT Encryption initialization never falls back to a hardcoded secret.\ndef _require_fernet_key() -> bytes:\n with belief_scope(\"_require_fernet_key\"):\n raw_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if not raw_key:\n logger.explore(\n \"Missing ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be set\")\n\n key = raw_key.encode()\n try:\n Fernet(key)\n except Exception as exc:\n logger.explore(\n \"Invalid ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be a valid Fernet key\") from exc\n\n logger.reflect(\"Validated ENCRYPTION_KEY for EncryptionManager initialization\")\n return key\n\n\n# #endregion _require_fernet_key\n\n\n# #region EncryptionManager [C:5] [TYPE Class]\n# @BRIEF Handles encryption and decryption of sensitive data like API keys.\n# @RELATION CALLS -> [_require_fernet_key]\n# @PRE ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.\n# @POST Manager exposes reversible encrypt/decrypt operations for persisted secrets.\n# @SIDE_EFFECT Initializes Fernet cryptography state from process environment.\n# @DATA_CONTRACT Input[str] -> Output[str]\n# @INVARIANT Uses only a validated secret key from environment.\n#\n# @TEST_CONTRACT EncryptionManagerModel ->\n# {\n# required_fields: {},\n# invariants: [\n# \"encrypted data can be decrypted back to the original string\"\n# ]\n# }\n# @TEST_FIXTURE basic_encryption_cycle -> {\"data\": \"my_secret_key\"}\n# @TEST_EDGE decrypt_invalid_data -> raises Exception\n# @TEST_EDGE empty_string_encryption -> {\"data\": \"\"}\n# @TEST_INVARIANT symmetric_encryption -> verifies: [basic_encryption_cycle, empty_string_encryption]\nclass EncryptionManager:\n # region EncryptionManager_init [TYPE Function]\n # @PURPOSE: Initialize the encryption manager with a Fernet key.\n # @PRE ENCRYPTION_KEY env var must be set to a valid Fernet key.\n # @POST Fernet instance ready for encryption/decryption.\n def __init__(self):\n self.key = _require_fernet_key()\n self.fernet = Fernet(self.key)\n\n # endregion EncryptionManager_init\n\n # region encrypt [TYPE Function]\n # @PURPOSE: Encrypt a plaintext string.\n # @PRE data must be a non-empty string.\n # @POST Returns encrypted string.\n def encrypt(self, data: str) -> str:\n with belief_scope(\"encrypt\"):\n return self.fernet.encrypt(data.encode()).decode()\n\n # endregion encrypt\n\n # region decrypt [TYPE Function]\n # @PURPOSE: Decrypt an encrypted string.\n # @PRE encrypted_data must be a valid Fernet-encrypted string.\n # @POST Returns original plaintext string.\n def decrypt(self, encrypted_data: str) -> str:\n with belief_scope(\"decrypt\"):\n return self.fernet.decrypt(encrypted_data.encode()).decode()\n\n # endregion decrypt\n\n\n# #endregion EncryptionManager\n\n\n# #region LLMProviderService [C:3] [TYPE Class]\n# @BRIEF Service to manage LLM provider lifecycle.\n# @RELATION DEPENDS_ON -> [LLMProvider]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [LLMProviderConfig]\nclass LLMProviderService:\n # region LLMProviderService_init [TYPE Function]\n # @PURPOSE: Initialize the service with database session.\n # @PRE db must be a valid SQLAlchemy Session.\n # @POST Service ready for provider operations.\n # @RELATION DEPENDS_ON ->[EncryptionManager]\n def __init__(self, db: Session):\n self.db = db\n self.encryption = EncryptionManager()\n\n # endregion LLMProviderService_init\n\n # region get_all_providers [TYPE Function]\n # @PURPOSE: Returns all configured LLM providers.\n # @PRE Database connection must be active.\n # @POST Returns list of all LLMProvider records.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def get_all_providers(self) -> list[LLMProvider]:\n with belief_scope(\"get_all_providers\"):\n return self.db.query(LLMProvider).all()\n\n # endregion get_all_providers\n\n # region get_provider [TYPE Function]\n # @PURPOSE: Returns a single LLM provider by ID.\n # @PRE provider_id must be a valid string.\n # @POST Returns LLMProvider or None if not found.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def get_provider(self, provider_id: str) -> LLMProvider | None:\n with belief_scope(\"get_provider\"):\n return (\n self.db.query(LLMProvider).filter(LLMProvider.id == provider_id).first()\n )\n\n # endregion get_provider\n\n # region create_provider [TYPE Function]\n # @PURPOSE: Creates a new LLM provider with encrypted API key.\n # @PRE config must contain valid provider configuration.\n # @POST New provider created and persisted to database.\n # @RELATION DEPENDS_ON ->[LLMProviderConfig]\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:encrypt]\n def create_provider(self, config: \"LLMProviderConfig\") -> LLMProvider:\n with belief_scope(\"create_provider\"):\n encrypted_key = self.encryption.encrypt(config.api_key)\n db_provider = LLMProvider(\n provider_type=config.provider_type.value,\n name=config.name,\n base_url=config.base_url,\n api_key=encrypted_key,\n default_model=config.default_model,\n is_active=config.is_active,\n is_multimodal=config.is_multimodal,\n )\n self.db.add(db_provider)\n self.db.commit()\n self.db.refresh(db_provider)\n return db_provider\n\n # endregion create_provider\n\n # region update_provider [TYPE Function]\n # @PURPOSE: Updates an existing LLM provider.\n # @PRE provider_id must exist, config must be valid.\n # @POST Provider updated and persisted to database.\n # @RELATION DEPENDS_ON ->[LLMProviderConfig]\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:encrypt]\n def update_provider(\n self, provider_id: str, config: \"LLMProviderConfig\"\n ) -> LLMProvider | None:\n with belief_scope(\"update_provider\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n return None\n\n db_provider.provider_type = config.provider_type.value\n db_provider.name = config.name\n db_provider.base_url = config.base_url\n # Ignore masked/placeholder values; they are display-only and must not overwrite secrets.\n if not is_masked_or_placeholder(config.api_key):\n db_provider.api_key = self.encryption.encrypt(config.api_key)\n db_provider.default_model = config.default_model\n db_provider.is_active = config.is_active\n db_provider.is_multimodal = config.is_multimodal\n\n self.db.commit()\n self.db.refresh(db_provider)\n return db_provider\n\n # endregion update_provider\n\n # region delete_provider [TYPE Function]\n # @PURPOSE: Deletes an LLM provider.\n # @PRE provider_id must exist.\n # @POST Provider removed from database.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def delete_provider(self, provider_id: str) -> bool:\n with belief_scope(\"delete_provider\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n return False\n self.db.delete(db_provider)\n self.db.commit()\n return True\n\n # endregion delete_provider\n\n # region get_decrypted_api_key [TYPE Function]\n # @PURPOSE: Returns the decrypted API key for a provider.\n # @PRE provider_id must exist with valid encrypted key.\n # @POST Returns decrypted API key or None on failure.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:decrypt]\n def get_decrypted_api_key(self, provider_id: str) -> str | None:\n with belief_scope(\"get_decrypted_api_key\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n logger.warning(\n f\"[get_decrypted_api_key] Provider {provider_id} not found in database\"\n )\n return None\n\n logger.info(f\"[get_decrypted_api_key] Provider found: {db_provider.id}\")\n logger.info(\n f\"[get_decrypted_api_key] Encrypted API key length: {len(db_provider.api_key) if db_provider.api_key else 0}\"\n )\n\n try:\n decrypted_key = self.encryption.decrypt(db_provider.api_key)\n logger.info(\n f\"[get_decrypted_api_key] Decryption successful, key length: {len(decrypted_key) if decrypted_key else 0}\"\n )\n return decrypted_key\n except InvalidTag as e:\n logger.error(\n f\"[get_decrypted_api_key] Integrity check failed (InvalidTag): {e!s}. \"\n \"The encrypted API key may be corrupted or the ENCRYPTION_KEY has changed.\"\n )\n return None\n except ValueError as e:\n logger.error(\n f\"[get_decrypted_api_key] Decryption format error (ValueError): {e!s}. \"\n \"The encrypted data may not be valid Fernet ciphertext.\"\n )\n return None\n except Exception as e:\n logger.error(\n f\"[get_decrypted_api_key] Decryption failed with unexpected error \"\n f\"({type(e).__name__}): {e!s}\"\n )\n return None\n\n # endregion get_decrypted_api_key\n\n\n# #endregion LLMProviderService\n\n# #endregion llm_provider\n" + "body": "# #region llm_provider [C:3] [TYPE Module] [SEMANTICS sqlalchemy, llm, provider, encryption, config]\n# @BRIEF Service for managing LLM provider configurations with encrypted API keys.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [LLMProvider]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [LLMProviderConfig]\n# @RATIONALE EncryptionManager imported from core/encryption.py (extracted from this module)\n# to decouple core encryption from LLM domain — see [SEC:C-1].\nfrom typing import TYPE_CHECKING\n\nfrom cryptography.exceptions import InvalidTag\nfrom sqlalchemy.orm import Session\n\nfrom ..core.encryption import EncryptionManager\nfrom ..core.logger import belief_scope, logger\nfrom ..models.llm import LLMProvider\n\nif TYPE_CHECKING:\n from ..plugins.llm_analysis.models import LLMProviderConfig\n\nMASKED_API_KEY_PLACEHOLDER = \"********\"\n\n\n# #region mask_api_key [C:2] [TYPE Function]\n# @BRIEF Mask an API key for safe display, showing first 4 and last 4 characters.\n# @PRE api_key is a plaintext string or None.\n# @POST Returns \"****\" for very short keys; \"{first 2}...{last 2}\" for <=8 chars;\n# \"{first 4}...{last 4}\" for longer keys; \"\" for None/empty.\ndef mask_api_key(api_key: str | None) -> str:\n if not api_key:\n return \"\"\n if len(api_key) <= 4:\n return \"****\"\n if len(api_key) <= 8:\n return f\"{api_key[:2]}...{api_key[-2:]}\"\n return f\"{api_key[:4]}...{api_key[-4:]}\"\n\n\n# #endregion mask_api_key\n\n\n# #region is_masked_or_placeholder [C:2] [TYPE Function]\n# @BRIEF Predicate: True when api_key is None, empty, \"********\", or contains \"...\".\n# @PRE api_key can be None.\n# @POST Returns True only for non-real-key values.\ndef is_masked_or_placeholder(api_key: str | None) -> bool:\n if not api_key:\n return True\n return api_key == MASKED_API_KEY_PLACEHOLDER or \"...\" in api_key\n\n\n# #endregion is_masked_or_placeholder\n\n\n# NOTE: EncryptionManager is now imported from ..core.encryption\n\n\n# #region LLMProviderService [C:3] [TYPE Class]\n# @BRIEF Service to manage LLM provider lifecycle.\n# @RELATION DEPENDS_ON -> [LLMProvider]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [LLMProviderConfig]\nclass LLMProviderService:\n # region LLMProviderService_init [TYPE Function]\n # @PURPOSE: Initialize the service with database session.\n # @PRE db must be a valid SQLAlchemy Session.\n # @POST Service ready for provider operations.\n # @RELATION DEPENDS_ON ->[EncryptionManager]\n def __init__(self, db: Session):\n self.db = db\n self.encryption = EncryptionManager()\n\n # endregion LLMProviderService_init\n\n # region get_all_providers [TYPE Function]\n # @PURPOSE: Returns all configured LLM providers.\n # @PRE Database connection must be active.\n # @POST Returns list of all LLMProvider records.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def get_all_providers(self) -> list[LLMProvider]:\n with belief_scope(\"get_all_providers\"):\n return self.db.query(LLMProvider).all()\n\n # endregion get_all_providers\n\n # region get_provider [TYPE Function]\n # @PURPOSE: Returns a single LLM provider by ID.\n # @PRE provider_id must be a valid string.\n # @POST Returns LLMProvider or None if not found.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def get_provider(self, provider_id: str) -> LLMProvider | None:\n with belief_scope(\"get_provider\"):\n return (\n self.db.query(LLMProvider).filter(LLMProvider.id == provider_id).first()\n )\n\n # endregion get_provider\n\n # region create_provider [TYPE Function]\n # @PURPOSE: Creates a new LLM provider with encrypted API key.\n # @PRE config must contain valid provider configuration.\n # @POST New provider created and persisted to database.\n # @RELATION DEPENDS_ON ->[LLMProviderConfig]\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:encrypt]\n def create_provider(self, config: \"LLMProviderConfig\") -> LLMProvider:\n with belief_scope(\"create_provider\"):\n encrypted_key = self.encryption.encrypt(config.api_key)\n db_provider = LLMProvider(\n provider_type=config.provider_type.value,\n name=config.name,\n base_url=config.base_url,\n api_key=encrypted_key,\n default_model=config.default_model,\n is_active=config.is_active,\n is_multimodal=config.is_multimodal,\n )\n self.db.add(db_provider)\n self.db.commit()\n self.db.refresh(db_provider)\n return db_provider\n\n # endregion create_provider\n\n # region update_provider [TYPE Function]\n # @PURPOSE: Updates an existing LLM provider.\n # @PRE provider_id must exist, config must be valid.\n # @POST Provider updated and persisted to database.\n # @RELATION DEPENDS_ON ->[LLMProviderConfig]\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:encrypt]\n def update_provider(\n self, provider_id: str, config: \"LLMProviderConfig\"\n ) -> LLMProvider | None:\n with belief_scope(\"update_provider\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n return None\n\n db_provider.provider_type = config.provider_type.value\n db_provider.name = config.name\n db_provider.base_url = config.base_url\n # Ignore masked/placeholder values; they are display-only and must not overwrite secrets.\n if not is_masked_or_placeholder(config.api_key):\n db_provider.api_key = self.encryption.encrypt(config.api_key)\n db_provider.default_model = config.default_model\n db_provider.is_active = config.is_active\n db_provider.is_multimodal = config.is_multimodal\n\n self.db.commit()\n self.db.refresh(db_provider)\n return db_provider\n\n # endregion update_provider\n\n # region delete_provider [TYPE Function]\n # @PURPOSE: Deletes an LLM provider.\n # @PRE provider_id must exist.\n # @POST Provider removed from database.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n def delete_provider(self, provider_id: str) -> bool:\n with belief_scope(\"delete_provider\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n return False\n self.db.delete(db_provider)\n self.db.commit()\n return True\n\n # endregion delete_provider\n\n # region get_decrypted_api_key [TYPE Function]\n # @PURPOSE: Returns the decrypted API key for a provider.\n # @PRE provider_id must exist with valid encrypted key.\n # @POST Returns decrypted API key or None on failure.\n # @RELATION DEPENDS_ON ->[LLMProvider]\n # @RELATION CALLS ->[EXT:method:decrypt]\n def get_decrypted_api_key(self, provider_id: str) -> str | None:\n with belief_scope(\"get_decrypted_api_key\"):\n db_provider = self.get_provider(provider_id)\n if not db_provider:\n logger.warning(\n f\"[get_decrypted_api_key] Provider {provider_id} not found in database\"\n )\n return None\n\n logger.info(f\"[get_decrypted_api_key] Provider found: {db_provider.id}\")\n logger.info(\n f\"[get_decrypted_api_key] Encrypted API key length: {len(db_provider.api_key) if db_provider.api_key else 0}\"\n )\n\n try:\n decrypted_key = self.encryption.decrypt(db_provider.api_key)\n logger.info(\n f\"[get_decrypted_api_key] Decryption successful, key length: {len(decrypted_key) if decrypted_key else 0}\"\n )\n return decrypted_key\n except InvalidTag as e:\n logger.error(\n f\"[get_decrypted_api_key] Integrity check failed (InvalidTag): {e!s}. \"\n \"The encrypted API key may be corrupted or the ENCRYPTION_KEY has changed.\"\n )\n return None\n except ValueError as e:\n logger.error(\n f\"[get_decrypted_api_key] Decryption format error (ValueError): {e!s}. \"\n \"The encrypted data may not be valid Fernet ciphertext.\"\n )\n return None\n except Exception as e:\n logger.error(\n f\"[get_decrypted_api_key] Decryption failed with unexpected error \"\n f\"({type(e).__name__}): {e!s}\"\n )\n return None\n\n # endregion get_decrypted_api_key\n\n\n# #endregion LLMProviderService\n\n# #endregion llm_provider\n" }, { "contract_id": "mask_api_key", "contract_type": "Function", "file_path": "backend/src/services/llm_provider.py", - "start_line": 23, - "end_line": 38, + "start_line": 24, + "end_line": 39, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -46450,8 +46869,8 @@ "contract_id": "is_masked_or_placeholder", "contract_type": "Function", "file_path": "backend/src/services/llm_provider.py", - "start_line": 41, - "end_line": 51, + "start_line": 42, + "end_line": 52, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -46466,73 +46885,12 @@ "tier_source": "AutoCalculated", "body": "# #region is_masked_or_placeholder [C:2] [TYPE Function]\n# @BRIEF Predicate: True when api_key is None, empty, \"********\", or contains \"...\".\n# @PRE api_key can be None.\n# @POST Returns True only for non-real-key values.\ndef is_masked_or_placeholder(api_key: str | None) -> bool:\n if not api_key:\n return True\n return api_key == MASKED_API_KEY_PLACEHOLDER or \"...\" in api_key\n\n\n# #endregion is_masked_or_placeholder\n" }, - { - "contract_id": "_require_fernet_key", - "contract_type": "Function", - "file_path": "backend/src/services/llm_provider.py", - "start_line": 54, - "end_line": 84, - "tier": "TIER_3", - "complexity": 5, - "metadata": { - "BRIEF": "Load and validate the Fernet key used for secret encryption.", - "COMPLEXITY": 5, - "DATA_CONTRACT": "Input[ENCRYPTION_KEY:str] -> Output[bytes]", - "INVARIANT": "Encryption initialization never falls back to a hardcoded secret.", - "POST": "Returns validated key bytes ready for Fernet initialization.", - "PRE": "ENCRYPTION_KEY environment variable must be set to a valid Fernet key.", - "SIDE_EFFECT": "Emits belief-state logs for missing or invalid encryption configuration." - }, - "relations": [ - { - "source_id": "_require_fernet_key", - "relation_type": "DEPENDS_ON", - "target_id": "LoggerModule", - "target_ref": "[LoggerModule]" - } - ], - "schema_warnings": [], - "anchor_syntax": "region", - "tier_source": "AutoCalculated", - "body": "# #region _require_fernet_key [C:5] [TYPE Function]\n# @BRIEF Load and validate the Fernet key used for secret encryption.\n# @PRE ENCRYPTION_KEY environment variable must be set to a valid Fernet key.\n# @POST Returns validated key bytes ready for Fernet initialization.\n# @RELATION DEPENDS_ON -> [LoggerModule]\n# @SIDE_EFFECT Emits belief-state logs for missing or invalid encryption configuration.\n# @DATA_CONTRACT Input[ENCRYPTION_KEY:str] -> Output[bytes]\n# @INVARIANT Encryption initialization never falls back to a hardcoded secret.\ndef _require_fernet_key() -> bytes:\n with belief_scope(\"_require_fernet_key\"):\n raw_key = os.getenv(\"ENCRYPTION_KEY\", \"\").strip()\n if not raw_key:\n logger.explore(\n \"Missing ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be set\")\n\n key = raw_key.encode()\n try:\n Fernet(key)\n except Exception as exc:\n logger.explore(\n \"Invalid ENCRYPTION_KEY blocks EncryptionManager initialization\"\n )\n raise RuntimeError(\"ENCRYPTION_KEY must be a valid Fernet key\") from exc\n\n logger.reflect(\"Validated ENCRYPTION_KEY for EncryptionManager initialization\")\n return key\n\n\n# #endregion _require_fernet_key\n" - }, - { - "contract_id": "EncryptionManager", - "contract_type": "Class", - "file_path": "backend/src/services/llm_provider.py", - "start_line": 87, - "end_line": 139, - "tier": "TIER_3", - "complexity": 5, - "metadata": { - "BRIEF": "Handles encryption and decryption of sensitive data like API keys.", - "COMPLEXITY": 5, - "DATA_CONTRACT": "Input[str] -> Output[str]", - "INVARIANT": "Uses only a validated secret key from environment.", - "POST": "Manager exposes reversible encrypt/decrypt operations for persisted secrets.", - "PRE": "ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.", - "SIDE_EFFECT": "Initializes Fernet cryptography state from process environment.", - "TEST_CONTRACT": "EncryptionManagerModel ->" - }, - "relations": [ - { - "source_id": "EncryptionManager", - "relation_type": "CALLS", - "target_id": "_require_fernet_key", - "target_ref": "[_require_fernet_key]" - } - ], - "schema_warnings": [], - "anchor_syntax": "region", - "tier_source": "AutoCalculated", - "body": "# #region EncryptionManager [C:5] [TYPE Class]\n# @BRIEF Handles encryption and decryption of sensitive data like API keys.\n# @RELATION CALLS -> [_require_fernet_key]\n# @PRE ENCRYPTION_KEY is configured with a valid Fernet key before instantiation.\n# @POST Manager exposes reversible encrypt/decrypt operations for persisted secrets.\n# @SIDE_EFFECT Initializes Fernet cryptography state from process environment.\n# @DATA_CONTRACT Input[str] -> Output[str]\n# @INVARIANT Uses only a validated secret key from environment.\n#\n# @TEST_CONTRACT EncryptionManagerModel ->\n# {\n# required_fields: {},\n# invariants: [\n# \"encrypted data can be decrypted back to the original string\"\n# ]\n# }\n# @TEST_FIXTURE basic_encryption_cycle -> {\"data\": \"my_secret_key\"}\n# @TEST_EDGE decrypt_invalid_data -> raises Exception\n# @TEST_EDGE empty_string_encryption -> {\"data\": \"\"}\n# @TEST_INVARIANT symmetric_encryption -> verifies: [basic_encryption_cycle, empty_string_encryption]\nclass EncryptionManager:\n # region EncryptionManager_init [TYPE Function]\n # @PURPOSE: Initialize the encryption manager with a Fernet key.\n # @PRE ENCRYPTION_KEY env var must be set to a valid Fernet key.\n # @POST Fernet instance ready for encryption/decryption.\n def __init__(self):\n self.key = _require_fernet_key()\n self.fernet = Fernet(self.key)\n\n # endregion EncryptionManager_init\n\n # region encrypt [TYPE Function]\n # @PURPOSE: Encrypt a plaintext string.\n # @PRE data must be a non-empty string.\n # @POST Returns encrypted string.\n def encrypt(self, data: str) -> str:\n with belief_scope(\"encrypt\"):\n return self.fernet.encrypt(data.encode()).decode()\n\n # endregion encrypt\n\n # region decrypt [TYPE Function]\n # @PURPOSE: Decrypt an encrypted string.\n # @PRE encrypted_data must be a valid Fernet-encrypted string.\n # @POST Returns original plaintext string.\n def decrypt(self, encrypted_data: str) -> str:\n with belief_scope(\"decrypt\"):\n return self.fernet.decrypt(encrypted_data.encode()).decode()\n\n # endregion decrypt\n\n\n# #endregion EncryptionManager\n" - }, { "contract_id": "LLMProviderService", "contract_type": "Class", "file_path": "backend/src/services/llm_provider.py", - "start_line": 142, - "end_line": 304, + "start_line": 58, + "end_line": 220, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -47276,7 +47634,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region profile_preference_service [C:4] [TYPE Module] [SEMANTICS profile,preference,crud,persistence]\n# @BRIEF Profile preference persistence — read, update, and normalize user dashboard filter preferences\n# with validation, encryption of git tokens, and deterministic default construction.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [UserDashboardPreference]\n# @RELATION DEPENDS_ON -> [ProfileUtils]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RATIONALE Extracted from ProfileService to satisfy INV_7. Preference CRUD is the core profile\n# operation with DB persistence, token encryption, and cross-field validation — a\n# cohesive unit that isolates cleanly from security badges and Superset lookups.\n# @REJECTED Keeping preference logic inside ProfileService was rejected because it forces all\n# three domains (preferences, security, lookup) into one class exceeding 150 lines,\n# and couples the validation logic to unrelated dependencies.\n# @PRE db session is active.\n# @POST Preference rows are created/updated with normalized values and encrypted tokens.\n# @SIDE_EFFECT Writes preference records via AuthRepository; encrypts git tokens.\n\nfrom datetime import datetime\nfrom typing import Any\n\nfrom sqlalchemy.orm import Session\n\nfrom ..core.auth.repository import AuthRepository\nfrom ..core.logger import belief_scope, logger\nfrom ..models.auth import User\nfrom ..models.profile import UserDashboardPreference\nfrom ..schemas.profile import (\n ProfilePreference,\n ProfilePreferenceResponse,\n ProfilePreferenceUpdateRequest,\n)\nfrom .llm_provider import EncryptionManager\nfrom .profile_utils import (\n ProfileAuthorizationError,\n ProfileValidationError,\n build_default_preference,\n mask_secret_value,\n normalize_density,\n normalize_start_page,\n normalize_username,\n sanitize_secret,\n sanitize_text,\n sanitize_username,\n validate_update_payload,\n)\nfrom .security_badge_service import SecurityBadgeService\n\n\n# #region ProfilePreferenceService [C:4] [TYPE Class] [SEMANTICS preference,crud,validation,encryption]\n# @BRIEF Handles profile preference persistence, validation, and token encryption.\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [UserDashboardPreference]\n# @PRE db session is active.\n# @POST Preference CRUD operations are user-scoped and return normalized ProfilePreferenceResponse.\nclass ProfilePreferenceService:\n \"\"\"Profile preference persistence and validation.\"\"\"\n\n # #region __init__ [TYPE Function]\n # @BRIEF Initialize with DB session and references to shared services.\n # @PRE db session is active.\n # @POST Service is ready for preference persistence operations.\n def __init__(self, db: Session, config_manager: Any, plugin_loader: Any = None):\n self.db = db\n self.config_manager = config_manager\n self.plugin_loader = plugin_loader\n self.auth_repository = AuthRepository(db)\n self.encryption = EncryptionManager()\n self.security_badge_service = SecurityBadgeService(plugin_loader)\n # #endregion __init__\n\n # #region get_my_preference [TYPE Function]\n # @BRIEF Return current user's persisted preference or default non-configured view.\n # @PRE current_user is authenticated.\n # @POST Returned payload belongs to current_user only.\n def get_my_preference(self, current_user: User) -> ProfilePreferenceResponse:\n with belief_scope(\n \"ProfilePreferenceService.get_my_preference\", f\"user_id={current_user.id}\"\n ):\n logger.reflect(\"Loading current user's dashboard preference\")\n preference = self._get_preference_row(current_user.id)\n security_summary = self.security_badge_service.build_security_summary(current_user)\n\n if preference is None:\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference not configured yet\",\n preference=build_default_preference(current_user.id),\n security=security_summary,\n )\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference loaded\",\n preference=self._to_preference_payload(\n preference, str(current_user.id)\n ),\n security=security_summary,\n )\n # #endregion get_my_preference\n\n # #region get_dashboard_filter_binding [TYPE Function]\n # @BRIEF Return only dashboard-filter fields required by dashboards listing hot path.\n # @PRE current_user is authenticated.\n # @POST Returns normalized username and profile-default filter toggles without security summary expansion.\n def get_dashboard_filter_binding(self, current_user: User) -> dict:\n with belief_scope(\n \"ProfilePreferenceService.get_dashboard_filter_binding\", f\"user_id={current_user.id}\"\n ):\n preference = self._get_preference_row(current_user.id)\n if preference is None:\n return {\n \"superset_username\": None,\n \"superset_username_normalized\": None,\n \"show_only_my_dashboards\": False,\n \"show_only_slug_dashboards\": True,\n }\n\n return {\n \"superset_username\": sanitize_username(\n preference.superset_username\n ),\n \"superset_username_normalized\": normalize_username(\n preference.superset_username\n ),\n \"show_only_my_dashboards\": bool(preference.show_only_my_dashboards),\n \"show_only_slug_dashboards\": bool(\n preference.show_only_slug_dashboards\n if preference.show_only_slug_dashboards is not None\n else True\n ),\n }\n # #endregion get_dashboard_filter_binding\n\n # #region update_my_preference [TYPE Function]\n # @BRIEF Validate and persist current user's profile preference in self-scoped mode.\n # @PRE current_user is authenticated and payload is provided.\n # @POST Preference row for current_user is created/updated when validation passes.\n def update_my_preference(\n self,\n current_user: User,\n payload: ProfilePreferenceUpdateRequest,\n target_user_id: str | None = None,\n ) -> ProfilePreferenceResponse:\n with belief_scope(\n \"ProfilePreferenceService.update_my_preference\", f\"user_id={current_user.id}\"\n ):\n logger.reason(\"Evaluating self-scope guard before preference mutation\")\n requested_user_id = str(target_user_id or current_user.id)\n if requested_user_id != str(current_user.id):\n logger.explore(\"Cross-user mutation attempt blocked\")\n raise ProfileAuthorizationError(\n \"Cross-user preference mutation is forbidden\"\n )\n\n preference = self._get_or_create_preference_row(current_user.id)\n provided_fields = set(getattr(payload, \"model_fields_set\", set()))\n\n effective_superset_username = sanitize_username(\n preference.superset_username\n )\n if \"superset_username\" in provided_fields:\n effective_superset_username = sanitize_username(\n payload.superset_username\n )\n\n effective_show_only = bool(preference.show_only_my_dashboards)\n if \"show_only_my_dashboards\" in provided_fields:\n effective_show_only = bool(payload.show_only_my_dashboards)\n\n effective_show_only_slug = (\n bool(preference.show_only_slug_dashboards)\n if preference.show_only_slug_dashboards is not None\n else True\n )\n if \"show_only_slug_dashboards\" in provided_fields:\n effective_show_only_slug = bool(payload.show_only_slug_dashboards)\n\n effective_git_username = sanitize_text(preference.git_username)\n if \"git_username\" in provided_fields:\n effective_git_username = sanitize_text(payload.git_username)\n\n effective_git_email = sanitize_text(preference.git_email)\n if \"git_email\" in provided_fields:\n effective_git_email = sanitize_text(payload.git_email)\n\n effective_start_page = normalize_start_page(preference.start_page)\n if \"start_page\" in provided_fields:\n effective_start_page = normalize_start_page(payload.start_page)\n\n effective_auto_open_task_drawer = (\n bool(preference.auto_open_task_drawer)\n if preference.auto_open_task_drawer is not None\n else True\n )\n if \"auto_open_task_drawer\" in provided_fields:\n effective_auto_open_task_drawer = bool(payload.auto_open_task_drawer)\n\n effective_dashboards_table_density = normalize_density(\n preference.dashboards_table_density\n )\n if \"dashboards_table_density\" in provided_fields:\n effective_dashboards_table_density = normalize_density(\n payload.dashboards_table_density\n )\n\n effective_telegram_id = sanitize_text(preference.telegram_id)\n if \"telegram_id\" in provided_fields:\n effective_telegram_id = sanitize_text(payload.telegram_id)\n\n effective_email_address = sanitize_text(preference.email_address)\n if \"email_address\" in provided_fields:\n effective_email_address = sanitize_text(payload.email_address)\n\n effective_notify_on_fail = (\n bool(preference.notify_on_fail)\n if preference.notify_on_fail is not None\n else True\n )\n if \"notify_on_fail\" in provided_fields:\n effective_notify_on_fail = bool(payload.notify_on_fail)\n\n validation_errors = validate_update_payload(\n superset_username=effective_superset_username,\n show_only_my_dashboards=effective_show_only,\n git_email=effective_git_email,\n start_page=effective_start_page,\n dashboards_table_density=effective_dashboards_table_density,\n email_address=effective_email_address,\n )\n if validation_errors:\n logger.reflect(\"Validation failed; mutation is denied\")\n raise ProfileValidationError(validation_errors)\n\n preference.superset_username = effective_superset_username\n preference.superset_username_normalized = normalize_username(\n effective_superset_username\n )\n preference.show_only_my_dashboards = effective_show_only\n preference.show_only_slug_dashboards = effective_show_only_slug\n\n preference.git_username = effective_git_username\n preference.git_email = effective_git_email\n\n if \"git_personal_access_token\" in provided_fields:\n sanitized_token = sanitize_secret(\n payload.git_personal_access_token\n )\n if sanitized_token is None:\n preference.git_personal_access_token_encrypted = None\n else:\n preference.git_personal_access_token_encrypted = (\n self.encryption.encrypt(sanitized_token)\n )\n\n preference.start_page = effective_start_page\n preference.auto_open_task_drawer = effective_auto_open_task_drawer\n preference.dashboards_table_density = effective_dashboards_table_density\n preference.telegram_id = effective_telegram_id\n preference.email_address = effective_email_address\n preference.notify_on_fail = effective_notify_on_fail\n preference.updated_at = datetime.utcnow()\n\n persisted_preference = self.auth_repository.save_user_dashboard_preference(\n preference\n )\n\n logger.reason(\"Preference persisted successfully\")\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference saved\",\n preference=self._to_preference_payload(\n persisted_preference,\n str(current_user.id),\n ),\n security=self.security_badge_service.build_security_summary(current_user),\n )\n # #endregion update_my_preference\n\n # #region _to_preference_payload [TYPE Function]\n # @BRIEF Map ORM preference row to API DTO with token metadata.\n # @PRE preference row can contain nullable optional fields.\n # @POST Returns normalized ProfilePreference object.\n def _to_preference_payload(\n self,\n preference: UserDashboardPreference,\n user_id: str,\n ) -> ProfilePreference:\n encrypted_token = sanitize_text(\n preference.git_personal_access_token_encrypted\n )\n token_masked = None\n if encrypted_token:\n try:\n decrypted_token = self.encryption.decrypt(encrypted_token)\n token_masked = mask_secret_value(decrypted_token)\n except Exception:\n token_masked = \"***\"\n\n created_at = getattr(preference, \"created_at\", None) or datetime.utcnow()\n updated_at = getattr(preference, \"updated_at\", None) or created_at\n\n return ProfilePreference(\n user_id=str(user_id),\n superset_username=sanitize_username(preference.superset_username),\n superset_username_normalized=normalize_username(\n preference.superset_username_normalized\n ),\n show_only_my_dashboards=bool(preference.show_only_my_dashboards),\n show_only_slug_dashboards=(\n bool(preference.show_only_slug_dashboards)\n if preference.show_only_slug_dashboards is not None\n else True\n ),\n git_username=sanitize_text(preference.git_username),\n git_email=sanitize_text(preference.git_email),\n has_git_personal_access_token=bool(encrypted_token),\n git_personal_access_token_masked=token_masked,\n start_page=normalize_start_page(preference.start_page),\n auto_open_task_drawer=(\n bool(preference.auto_open_task_drawer)\n if preference.auto_open_task_drawer is not None\n else True\n ),\n dashboards_table_density=normalize_density(\n preference.dashboards_table_density\n ),\n telegram_id=sanitize_text(preference.telegram_id),\n email_address=sanitize_text(preference.email_address),\n notify_on_fail=bool(preference.notify_on_fail)\n if preference.notify_on_fail is not None\n else True,\n created_at=created_at,\n updated_at=updated_at,\n )\n # #endregion _to_preference_payload\n\n # #region _build_default_preference [C:1] [TYPE Function]\n # @BRIEF Delegate to ProfileUtils.build_default_preference.\n def _build_default_preference(self, user_id: str) -> ProfilePreference:\n return build_default_preference(user_id)\n # #endregion _build_default_preference\n\n # #region _get_preference_row [C:2] [TYPE Function]\n # @BRIEF Return persisted preference row for user or None.\n def _get_preference_row(self, user_id: str) -> UserDashboardPreference | None:\n return self.auth_repository.get_user_dashboard_preference(str(user_id))\n # #endregion _get_preference_row\n\n # #region _get_or_create_preference_row [C:2] [TYPE Function]\n # @BRIEF Return existing preference row or create new unsaved row.\n def _get_or_create_preference_row(self, user_id: str) -> UserDashboardPreference:\n existing = self._get_preference_row(user_id)\n if existing is not None:\n return existing\n return UserDashboardPreference(user_id=str(user_id))\n # #endregion _get_or_create_preference_row\n# #endregion ProfilePreferenceService\n# #endregion profile_preference_service\n" + "body": "# #region profile_preference_service [C:4] [TYPE Module] [SEMANTICS profile,preference,crud,persistence]\n# @BRIEF Profile preference persistence — read, update, and normalize user dashboard filter preferences\n# with validation, encryption of git tokens, and deterministic default construction.\n# @LAYER Domain\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [UserDashboardPreference]\n# @RELATION DEPENDS_ON -> [ProfileUtils]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RATIONALE Extracted from ProfileService to satisfy INV_7. Preference CRUD is the core profile\n# operation with DB persistence, token encryption, and cross-field validation — a\n# cohesive unit that isolates cleanly from security badges and Superset lookups.\n# @REJECTED Keeping preference logic inside ProfileService was rejected because it forces all\n# three domains (preferences, security, lookup) into one class exceeding 150 lines,\n# and couples the validation logic to unrelated dependencies.\n# @PRE db session is active.\n# @POST Preference rows are created/updated with normalized values and encrypted tokens.\n# @SIDE_EFFECT Writes preference records via AuthRepository; encrypts git tokens.\n\nfrom datetime import datetime\nfrom typing import Any\n\nfrom sqlalchemy.orm import Session\n\nfrom ..core.auth.repository import AuthRepository\nfrom ..core.logger import belief_scope, logger\nfrom ..models.auth import User\nfrom ..models.profile import UserDashboardPreference\nfrom ..schemas.profile import (\n ProfilePreference,\n ProfilePreferenceResponse,\n ProfilePreferenceUpdateRequest,\n)\nfrom ..core.encryption import EncryptionManager\nfrom .profile_utils import (\n ProfileAuthorizationError,\n ProfileValidationError,\n build_default_preference,\n mask_secret_value,\n normalize_density,\n normalize_start_page,\n normalize_username,\n sanitize_secret,\n sanitize_text,\n sanitize_username,\n validate_update_payload,\n)\nfrom .security_badge_service import SecurityBadgeService\n\n\n# #region ProfilePreferenceService [C:4] [TYPE Class] [SEMANTICS preference,crud,validation,encryption]\n# @BRIEF Handles profile preference persistence, validation, and token encryption.\n# @RELATION DEPENDS_ON -> [AuthRepository]\n# @RELATION DEPENDS_ON -> [EncryptionManager]\n# @RELATION DEPENDS_ON -> [UserDashboardPreference]\n# @PRE db session is active.\n# @POST Preference CRUD operations are user-scoped and return normalized ProfilePreferenceResponse.\nclass ProfilePreferenceService:\n \"\"\"Profile preference persistence and validation.\"\"\"\n\n # #region __init__ [TYPE Function]\n # @BRIEF Initialize with DB session and references to shared services.\n # @PRE db session is active.\n # @POST Service is ready for preference persistence operations.\n def __init__(self, db: Session, config_manager: Any, plugin_loader: Any = None):\n self.db = db\n self.config_manager = config_manager\n self.plugin_loader = plugin_loader\n self.auth_repository = AuthRepository(db)\n self.encryption = EncryptionManager()\n self.security_badge_service = SecurityBadgeService(plugin_loader)\n # #endregion __init__\n\n # #region get_my_preference [TYPE Function]\n # @BRIEF Return current user's persisted preference or default non-configured view.\n # @PRE current_user is authenticated.\n # @POST Returned payload belongs to current_user only.\n def get_my_preference(self, current_user: User) -> ProfilePreferenceResponse:\n with belief_scope(\n \"ProfilePreferenceService.get_my_preference\", f\"user_id={current_user.id}\"\n ):\n logger.reflect(\"Loading current user's dashboard preference\")\n preference = self._get_preference_row(current_user.id)\n security_summary = self.security_badge_service.build_security_summary(current_user)\n\n if preference is None:\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference not configured yet\",\n preference=build_default_preference(current_user.id),\n security=security_summary,\n )\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference loaded\",\n preference=self._to_preference_payload(\n preference, str(current_user.id)\n ),\n security=security_summary,\n )\n # #endregion get_my_preference\n\n # #region get_dashboard_filter_binding [TYPE Function]\n # @BRIEF Return only dashboard-filter fields required by dashboards listing hot path.\n # @PRE current_user is authenticated.\n # @POST Returns normalized username and profile-default filter toggles without security summary expansion.\n def get_dashboard_filter_binding(self, current_user: User) -> dict:\n with belief_scope(\n \"ProfilePreferenceService.get_dashboard_filter_binding\", f\"user_id={current_user.id}\"\n ):\n preference = self._get_preference_row(current_user.id)\n if preference is None:\n return {\n \"superset_username\": None,\n \"superset_username_normalized\": None,\n \"show_only_my_dashboards\": False,\n \"show_only_slug_dashboards\": True,\n }\n\n return {\n \"superset_username\": sanitize_username(\n preference.superset_username\n ),\n \"superset_username_normalized\": normalize_username(\n preference.superset_username\n ),\n \"show_only_my_dashboards\": bool(preference.show_only_my_dashboards),\n \"show_only_slug_dashboards\": bool(\n preference.show_only_slug_dashboards\n if preference.show_only_slug_dashboards is not None\n else True\n ),\n }\n # #endregion get_dashboard_filter_binding\n\n # #region update_my_preference [TYPE Function]\n # @BRIEF Validate and persist current user's profile preference in self-scoped mode.\n # @PRE current_user is authenticated and payload is provided.\n # @POST Preference row for current_user is created/updated when validation passes.\n def update_my_preference(\n self,\n current_user: User,\n payload: ProfilePreferenceUpdateRequest,\n target_user_id: str | None = None,\n ) -> ProfilePreferenceResponse:\n with belief_scope(\n \"ProfilePreferenceService.update_my_preference\", f\"user_id={current_user.id}\"\n ):\n logger.reason(\"Evaluating self-scope guard before preference mutation\")\n requested_user_id = str(target_user_id or current_user.id)\n if requested_user_id != str(current_user.id):\n logger.explore(\"Cross-user mutation attempt blocked\")\n raise ProfileAuthorizationError(\n \"Cross-user preference mutation is forbidden\"\n )\n\n preference = self._get_or_create_preference_row(current_user.id)\n provided_fields = set(getattr(payload, \"model_fields_set\", set()))\n\n effective_superset_username = sanitize_username(\n preference.superset_username\n )\n if \"superset_username\" in provided_fields:\n effective_superset_username = sanitize_username(\n payload.superset_username\n )\n\n effective_show_only = bool(preference.show_only_my_dashboards)\n if \"show_only_my_dashboards\" in provided_fields:\n effective_show_only = bool(payload.show_only_my_dashboards)\n\n effective_show_only_slug = (\n bool(preference.show_only_slug_dashboards)\n if preference.show_only_slug_dashboards is not None\n else True\n )\n if \"show_only_slug_dashboards\" in provided_fields:\n effective_show_only_slug = bool(payload.show_only_slug_dashboards)\n\n effective_git_username = sanitize_text(preference.git_username)\n if \"git_username\" in provided_fields:\n effective_git_username = sanitize_text(payload.git_username)\n\n effective_git_email = sanitize_text(preference.git_email)\n if \"git_email\" in provided_fields:\n effective_git_email = sanitize_text(payload.git_email)\n\n effective_start_page = normalize_start_page(preference.start_page)\n if \"start_page\" in provided_fields:\n effective_start_page = normalize_start_page(payload.start_page)\n\n effective_auto_open_task_drawer = (\n bool(preference.auto_open_task_drawer)\n if preference.auto_open_task_drawer is not None\n else True\n )\n if \"auto_open_task_drawer\" in provided_fields:\n effective_auto_open_task_drawer = bool(payload.auto_open_task_drawer)\n\n effective_dashboards_table_density = normalize_density(\n preference.dashboards_table_density\n )\n if \"dashboards_table_density\" in provided_fields:\n effective_dashboards_table_density = normalize_density(\n payload.dashboards_table_density\n )\n\n effective_telegram_id = sanitize_text(preference.telegram_id)\n if \"telegram_id\" in provided_fields:\n effective_telegram_id = sanitize_text(payload.telegram_id)\n\n effective_email_address = sanitize_text(preference.email_address)\n if \"email_address\" in provided_fields:\n effective_email_address = sanitize_text(payload.email_address)\n\n effective_notify_on_fail = (\n bool(preference.notify_on_fail)\n if preference.notify_on_fail is not None\n else True\n )\n if \"notify_on_fail\" in provided_fields:\n effective_notify_on_fail = bool(payload.notify_on_fail)\n\n validation_errors = validate_update_payload(\n superset_username=effective_superset_username,\n show_only_my_dashboards=effective_show_only,\n git_email=effective_git_email,\n start_page=effective_start_page,\n dashboards_table_density=effective_dashboards_table_density,\n email_address=effective_email_address,\n )\n if validation_errors:\n logger.reflect(\"Validation failed; mutation is denied\")\n raise ProfileValidationError(validation_errors)\n\n preference.superset_username = effective_superset_username\n preference.superset_username_normalized = normalize_username(\n effective_superset_username\n )\n preference.show_only_my_dashboards = effective_show_only\n preference.show_only_slug_dashboards = effective_show_only_slug\n\n preference.git_username = effective_git_username\n preference.git_email = effective_git_email\n\n if \"git_personal_access_token\" in provided_fields:\n sanitized_token = sanitize_secret(\n payload.git_personal_access_token\n )\n if sanitized_token is None:\n preference.git_personal_access_token_encrypted = None\n else:\n preference.git_personal_access_token_encrypted = (\n self.encryption.encrypt(sanitized_token)\n )\n\n preference.start_page = effective_start_page\n preference.auto_open_task_drawer = effective_auto_open_task_drawer\n preference.dashboards_table_density = effective_dashboards_table_density\n preference.telegram_id = effective_telegram_id\n preference.email_address = effective_email_address\n preference.notify_on_fail = effective_notify_on_fail\n preference.updated_at = datetime.utcnow()\n\n persisted_preference = self.auth_repository.save_user_dashboard_preference(\n preference\n )\n\n logger.reason(\"Preference persisted successfully\")\n return ProfilePreferenceResponse(\n status=\"success\",\n message=\"Preference saved\",\n preference=self._to_preference_payload(\n persisted_preference,\n str(current_user.id),\n ),\n security=self.security_badge_service.build_security_summary(current_user),\n )\n # #endregion update_my_preference\n\n # #region _to_preference_payload [TYPE Function]\n # @BRIEF Map ORM preference row to API DTO with token metadata.\n # @PRE preference row can contain nullable optional fields.\n # @POST Returns normalized ProfilePreference object.\n def _to_preference_payload(\n self,\n preference: UserDashboardPreference,\n user_id: str,\n ) -> ProfilePreference:\n encrypted_token = sanitize_text(\n preference.git_personal_access_token_encrypted\n )\n token_masked = None\n if encrypted_token:\n try:\n decrypted_token = self.encryption.decrypt(encrypted_token)\n token_masked = mask_secret_value(decrypted_token)\n except Exception:\n token_masked = \"***\"\n\n created_at = getattr(preference, \"created_at\", None) or datetime.utcnow()\n updated_at = getattr(preference, \"updated_at\", None) or created_at\n\n return ProfilePreference(\n user_id=str(user_id),\n superset_username=sanitize_username(preference.superset_username),\n superset_username_normalized=normalize_username(\n preference.superset_username_normalized\n ),\n show_only_my_dashboards=bool(preference.show_only_my_dashboards),\n show_only_slug_dashboards=(\n bool(preference.show_only_slug_dashboards)\n if preference.show_only_slug_dashboards is not None\n else True\n ),\n git_username=sanitize_text(preference.git_username),\n git_email=sanitize_text(preference.git_email),\n has_git_personal_access_token=bool(encrypted_token),\n git_personal_access_token_masked=token_masked,\n start_page=normalize_start_page(preference.start_page),\n auto_open_task_drawer=(\n bool(preference.auto_open_task_drawer)\n if preference.auto_open_task_drawer is not None\n else True\n ),\n dashboards_table_density=normalize_density(\n preference.dashboards_table_density\n ),\n telegram_id=sanitize_text(preference.telegram_id),\n email_address=sanitize_text(preference.email_address),\n notify_on_fail=bool(preference.notify_on_fail)\n if preference.notify_on_fail is not None\n else True,\n created_at=created_at,\n updated_at=updated_at,\n )\n # #endregion _to_preference_payload\n\n # #region _build_default_preference [C:1] [TYPE Function]\n # @BRIEF Delegate to ProfileUtils.build_default_preference.\n def _build_default_preference(self, user_id: str) -> ProfilePreference:\n return build_default_preference(user_id)\n # #endregion _build_default_preference\n\n # #region _get_preference_row [C:2] [TYPE Function]\n # @BRIEF Return persisted preference row for user or None.\n def _get_preference_row(self, user_id: str) -> UserDashboardPreference | None:\n return self.auth_repository.get_user_dashboard_preference(str(user_id))\n # #endregion _get_preference_row\n\n # #region _get_or_create_preference_row [C:2] [TYPE Function]\n # @BRIEF Return existing preference row or create new unsaved row.\n def _get_or_create_preference_row(self, user_id: str) -> UserDashboardPreference:\n existing = self._get_preference_row(user_id)\n if existing is not None:\n return existing\n return UserDashboardPreference(user_id=str(user_id))\n # #endregion _get_or_create_preference_row\n# #endregion ProfilePreferenceService\n# #endregion profile_preference_service\n" }, { "contract_id": "ProfilePreferenceService", @@ -48728,7 +49086,7 @@ "contract_type": "Module", "file_path": "backend/src/services/validation_run_service.py", "start_line": 1, - "end_line": 140, + "end_line": 141, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -48740,7 +49098,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region ValidationRunService [C:3] [TYPE Module] [SEMANTICS validation, run, service, sqlalchemy]\n# @BRIEF Business logic for validation run queries: list, detail, delete.\n# @LAYER Service\n\nfrom datetime import date\n\nfrom sqlalchemy.orm import Session\n\nfrom ..core.logger import logger\nfrom ..models.llm import ValidationPolicy, ValidationRecord\nfrom ..schemas.validation import ValidationRunDetailResponse, ValidationRunResponse\n\n\n# #region ValidationRunService [C:4] [TYPE Class]\n# @BRIEF Queries and manages validation run history records.\n# @RATIONALE Separates run history queries from task CRUD — run data has different access patterns (filter-heavy, paginated) than task configuration.\n# @REJECTED Merging run service into task service rejected — would create a large class with mixed responsibilities and different query patterns.\nclass ValidationRunService:\n\n def __init__(self, db: Session):\n self.db = db\n\n # #region _resolve_task_name [C:2] [TYPE Function]\n def _resolve_task_name(self, record: ValidationRecord) -> str | None:\n \"\"\"Find matching ValidationPolicy name by dashboard + environment.\"\"\"\n if not record.dashboard_id or not record.environment_id:\n return None\n candidates = (\n self.db.query(ValidationPolicy)\n .filter(ValidationPolicy.environment_id == record.environment_id)\n .all()\n )\n for policy in candidates:\n dids = list(policy.dashboard_ids) if policy.dashboard_ids else []\n if record.dashboard_id in dids:\n return policy.name\n return None\n\n # #endregion _resolve_task_name\n\n # #region list_runs [C:3] [TYPE Function]\n # @RATIONALE Supports 6 optional filters + pagination at the query level, enabling flexible cross-task run exploration without application-level filtering.\n # @REJECTED Application-level filtering after loading all runs rejected — would be unscalable with large run histories; database-level WHERE clauses are more efficient.\n def list_runs(\n self,\n task_id: str | None = None,\n dashboard_id: str | None = None,\n environment_id: str | None = None,\n status: str | None = None,\n date_from: date | None = None,\n date_to: date | None = None,\n page: int = 1,\n page_size: int = 20,\n ) -> tuple[int, list[ValidationRunResponse]]:\n query = self.db.query(ValidationRecord)\n\n if task_id:\n # Match both spawned task_id (TaskRecord) and policy_id (ValidationPolicy.id)\n # because the frontend sends the validation policy UUID, but ValidationRecord.task_id\n # stores the spawned task UUID. Fall back to policy_id for the common case.\n query = query.filter(\n (ValidationRecord.task_id == task_id) | (ValidationRecord.policy_id == task_id)\n )\n if dashboard_id:\n query = query.filter(ValidationRecord.dashboard_id == dashboard_id)\n if environment_id:\n query = query.filter(ValidationRecord.environment_id == environment_id)\n if status:\n query = query.filter(ValidationRecord.status == status.upper())\n if date_from:\n query = query.filter(ValidationRecord.timestamp >= date_from)\n if date_to:\n query = query.filter(ValidationRecord.timestamp <= date_to)\n\n total = query.count()\n records = (\n query.order_by(ValidationRecord.timestamp.desc())\n .offset((page - 1) * page_size)\n .limit(page_size)\n .all()\n )\n\n items = [\n ValidationRunResponse(\n id=r.id,\n task_id=r.task_id,\n dashboard_id=r.dashboard_id,\n environment_id=r.environment_id,\n status=r.status,\n summary=r.summary or \"\",\n timestamp=r.timestamp,\n screenshot_path=r.screenshot_path,\n task_name=self._resolve_task_name(r),\n )\n for r in records\n ]\n return total, items\n\n # #endregion list_runs\n\n # #region get_run_detail [C:3] [TYPE Function]\n # @RATIONALE Returns full join including issues list and raw_response for the report UI — single query avoids N+1 when displaying the run detail page.\n # @REJECTED Lazy-loading issues and raw_response separately rejected — would cause N+1 queries on the detail page; both fields are always needed for the report view.\n def get_run_detail(self, run_id: str) -> ValidationRunDetailResponse:\n record = self.db.query(ValidationRecord).filter(ValidationRecord.id == run_id).first()\n if not record:\n raise ValueError(f\"Validation run '{run_id}' not found\")\n\n return ValidationRunDetailResponse(\n id=record.id,\n task_id=record.task_id,\n dashboard_id=record.dashboard_id,\n environment_id=record.environment_id,\n status=record.status,\n summary=record.summary or \"\",\n timestamp=record.timestamp,\n screenshot_path=record.screenshot_path,\n issues=list(record.issues) if record.issues else [],\n raw_response=record.raw_response,\n task_name=self._resolve_task_name(record),\n )\n\n # #endregion get_run_detail\n\n # #region delete_run [C:2] [TYPE Function]\n # @RATIONALE Cleans up the database record only — screenshot cleanup is caller responsibility to maintain separation of concerns between DB and filesystem.\n # @REJECTED Automatic screenshot file deletion in service layer rejected — would couple DB cleanup to filesystem operations, complicating testing and error handling.\n def delete_run(self, run_id: str) -> bool:\n record = self.db.query(ValidationRecord).filter(ValidationRecord.id == run_id).first()\n if not record:\n return False\n self.db.delete(record)\n self.db.commit()\n logger.info(\"[ValidationRunService] Deleted run '%s'\", run_id)\n return True\n\n # #endregion delete_run\n\n# #endregion ValidationRunService\n# #endregion ValidationRunService\n" + "body": "# #region ValidationRunService [C:3] [TYPE Module] [SEMANTICS validation, run, service, sqlalchemy]\n# @BRIEF Business logic for validation run queries: list, detail, delete.\n# @LAYER Service\n\nfrom datetime import date\n\nfrom sqlalchemy.orm import Session\n\nfrom ..core.logger import logger\nfrom ..models.llm import ValidationPolicy, ValidationRecord\nfrom ..schemas.validation import ValidationRunDetailResponse, ValidationRunResponse\n\n\n# #region ValidationRunService [C:4] [TYPE Class]\n# @BRIEF Queries and manages validation run history records.\n# @RATIONALE Separates run history queries from task CRUD — run data has different access patterns (filter-heavy, paginated) than task configuration.\n# @REJECTED Merging run service into task service rejected — would create a large class with mixed responsibilities and different query patterns.\nclass ValidationRunService:\n\n def __init__(self, db: Session):\n self.db = db\n\n # #region _resolve_task_name [C:2] [TYPE Function]\n def _resolve_task_name(self, record: ValidationRecord) -> str | None:\n \"\"\"Find matching ValidationPolicy name by dashboard + environment.\"\"\"\n if not record.dashboard_id or not record.environment_id:\n return None\n candidates = (\n self.db.query(ValidationPolicy)\n .filter(ValidationPolicy.environment_id == record.environment_id)\n .all()\n )\n for policy in candidates:\n dids = list(policy.dashboard_ids) if policy.dashboard_ids else []\n if record.dashboard_id in dids:\n return policy.name\n return None\n\n # #endregion _resolve_task_name\n\n # #region list_runs [C:3] [TYPE Function]\n # @RATIONALE Supports 6 optional filters + pagination at the query level, enabling flexible cross-task run exploration without application-level filtering.\n # @REJECTED Application-level filtering after loading all runs rejected — would be unscalable with large run histories; database-level WHERE clauses are more efficient.\n def list_runs(\n self,\n task_id: str | None = None,\n dashboard_id: str | None = None,\n environment_id: str | None = None,\n status: str | None = None,\n date_from: date | None = None,\n date_to: date | None = None,\n page: int = 1,\n page_size: int = 20,\n ) -> tuple[int, list[ValidationRunResponse]]:\n query = self.db.query(ValidationRecord)\n\n if task_id:\n # Match both spawned task_id (TaskRecord) and policy_id (ValidationPolicy.id)\n # because the frontend sends the validation policy UUID, but ValidationRecord.task_id\n # stores the spawned task UUID. Fall back to policy_id for the common case.\n query = query.filter(\n (ValidationRecord.task_id == task_id) | (ValidationRecord.policy_id == task_id)\n )\n if dashboard_id:\n query = query.filter(ValidationRecord.dashboard_id == dashboard_id)\n if environment_id:\n query = query.filter(ValidationRecord.environment_id == environment_id)\n if status:\n query = query.filter(ValidationRecord.status == status.upper())\n if date_from:\n query = query.filter(ValidationRecord.timestamp >= date_from)\n if date_to:\n query = query.filter(ValidationRecord.timestamp <= date_to)\n\n total = query.count()\n records = (\n query.order_by(ValidationRecord.timestamp.desc())\n .offset((page - 1) * page_size)\n .limit(page_size)\n .all()\n )\n\n items = [\n ValidationRunResponse(\n id=r.id,\n task_id=r.task_id,\n dashboard_id=r.dashboard_id,\n environment_id=r.environment_id,\n status=r.status,\n summary=r.summary or \"\",\n timestamp=r.timestamp,\n screenshot_path=r.screenshot_path,\n task_name=self._resolve_task_name(r),\n issues_count=len(r.issues) if r.issues else 0,\n )\n for r in records\n ]\n return total, items\n\n # #endregion list_runs\n\n # #region get_run_detail [C:3] [TYPE Function]\n # @RATIONALE Returns full join including issues list and raw_response for the report UI — single query avoids N+1 when displaying the run detail page.\n # @REJECTED Lazy-loading issues and raw_response separately rejected — would cause N+1 queries on the detail page; both fields are always needed for the report view.\n def get_run_detail(self, run_id: str) -> ValidationRunDetailResponse:\n record = self.db.query(ValidationRecord).filter(ValidationRecord.id == run_id).first()\n if not record:\n raise ValueError(f\"Validation run '{run_id}' not found\")\n\n return ValidationRunDetailResponse(\n id=record.id,\n task_id=record.task_id,\n dashboard_id=record.dashboard_id,\n environment_id=record.environment_id,\n status=record.status,\n summary=record.summary or \"\",\n timestamp=record.timestamp,\n screenshot_path=record.screenshot_path,\n issues=list(record.issues) if record.issues else [],\n raw_response=record.raw_response,\n task_name=self._resolve_task_name(record),\n )\n\n # #endregion get_run_detail\n\n # #region delete_run [C:2] [TYPE Function]\n # @RATIONALE Cleans up the database record only — screenshot cleanup is caller responsibility to maintain separation of concerns between DB and filesystem.\n # @REJECTED Automatic screenshot file deletion in service layer rejected — would couple DB cleanup to filesystem operations, complicating testing and error handling.\n def delete_run(self, run_id: str) -> bool:\n record = self.db.query(ValidationRecord).filter(ValidationRecord.id == run_id).first()\n if not record:\n return False\n self.db.delete(record)\n self.db.commit()\n logger.info(\"[ValidationRunService] Deleted run '%s'\", run_id)\n return True\n\n # #endregion delete_run\n\n# #endregion ValidationRunService\n# #endregion ValidationRunService\n" }, { "contract_id": "_resolve_task_name", @@ -48856,15 +49214,14 @@ "contract_type": "Module", "file_path": "backend/tests/conftest.py", "start_line": 1, - "end_line": 42, + "end_line": 93, "tier": "TIER_1", "complexity": 2, "metadata": { "BRIEF": "Shared pytest fixtures and session configuration for backend tests.", "COMPLEXITY": 2, - "POST": "Database tables exist before test session executes.", - "PRE": "All test modules use sys.path patching to import from src/.", - "RATIONALE": "AUTH_SECRET_KEY/AUTH_DATABASE_URL/DATABASE_URL/DEV_MODE must be set before" + "POST": "Database tables exist before test session executes.\n@RATIONALE", + "PRE": "All test modules use sys.path patching to import from src/." }, "relations": [ { @@ -48877,7 +49234,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestSessionConfig [C:2] [TYPE Module] [SEMANTICS test, conftest, db]\n# @BRIEF Shared pytest fixtures and session configuration for backend tests.\n# @RELATION BINDS_TO -> [init_db]\n# @PRE All test modules use sys.path patching to import from src/.\n# @POST Database tables exist before test session executes.\n# @RATIONALE AUTH_SECRET_KEY/AUTH_DATABASE_URL/DATABASE_URL/DEV_MODE must be set before\n# any project import because src.core.auth.config creates an AuthConfig()\n# singleton at module level that crashes without these env vars (crash-early fix).\nimport os\nimport sys\nfrom pathlib import Path\n\n# Set env defaults for module-level AuthConfig() singleton — crash-early fix\nos.environ.setdefault(\"SECRET_KEY\", \"test-secret-key-for-testing\")\nos.environ.setdefault(\"AUTH_DATABASE_URL\", \"sqlite:///:memory:test_auth\")\nos.environ.setdefault(\"DATABASE_URL\", \"sqlite:///:memory:test_main\")\nos.environ.setdefault(\"DEV_MODE\", \"true\")\n\nsys.path.insert(0, str(Path(__file__).parent.parent / \"src\"))\n\nimport pytest\n\n\n@pytest.fixture(scope=\"session\", autouse=True)\ndef ensure_db_tables():\n \"\"\"Ensure all tables exist before test session.\n\n This fixture runs once per test session, creating all registered\n SQLAlchemy tables. Individual test modules may also create their\n own in-memory engines — this guarantees the real engine schema\n is initialized for tests that depend on it.\n\n NOTE: src.core.database may fail to import due to a pydantic-settings v2\n compatibility issue with the deprecated Field(env=...) parameter in AuthConfig.\n Tests that need the database import it directly and manage the env themselves.\n \"\"\"\n try:\n from src.core.database import init_db\n init_db()\n except Exception:\n pass # Graceful degradation — tests requiring DB manage env themselves\n# #endregion TestSessionConfig\n" + "body": "# #region TestSessionConfig [C:2] [TYPE Module] [SEMANTICS test, conftest, db, postgres, testcontainers]\n# @BRIEF Shared pytest fixtures and session configuration for backend tests.\n# @RELATION BINDS_TO -> [init_db]\n# @PRE All test modules use sys.path patching to import from src/.\n# @POST Database tables exist before test session executes.\n# @RATIONALE\n# Architecture:\n# - Global DATABASE_URL → temp-file SQLite (for modules importing src.core.database)\n# - Per-module engines → sqlite:///:memory: (for modules with local create_engine)\n# - FK enforcement on ALL engines via PRAGMA foreign_keys=ON\n#\n# Why:\n# - In-process SQLite is 5-10x faster than Docker PostgreSQL\n# - FK enforcement catches constraint violations (unlike plain SQLite)\n# - Per-module engines prevent 10GB+ shared-cache memory leak\n# - Temp file for global engine also prevents memory leak\n#\n# PostgreSQL mode (TEST_DB=postgres) → testcontainers or explicit DATABASE_URL.\n#\n# @REJECTED\n# sqlite:///file::memory:...?cache=shared — 10GB+ memory leak (all modules share one DB).\n# Plain SQLite without FK — silently ignores FK violations, masks bugs.\n# Always-on PostgresContainer — 5-10x slower, Docker dependency.\nimport os\nimport sys\nimport tempfile\nfrom pathlib import Path\nfrom sqlalchemy import create_engine, event\n\nsys.path.insert(0, str(Path(__file__).parent.parent / \"src\"))\n\nimport pytest\n\nos.environ.setdefault(\"SECRET_KEY\", \"test-secret-key-for-testing\")\n\n# ── Global engine: temp-file SQLite (not in-memory, not shared cache) ──\n# This prevents the 10GB memory leak from shared in-memory databases.\n\n_TEST_DB_FILE = tempfile.NamedTemporaryFile(suffix=\"_ss_tools.db\", delete=False)\n_TEST_DB_PATH = _TEST_DB_FILE.name\n_TEST_DB_FILE.close()\n\nos.environ.setdefault(\"DATABASE_URL\", f\"sqlite:///{_TEST_DB_PATH}\")\nos.environ.setdefault(\"AUTH_DATABASE_URL\", f\"sqlite:///{_TEST_DB_PATH}\")\n\n# ── FK enforcement on the global engine ──\n\nfrom src.core.database import engine\n\nevent.listen(engine, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n\n\n# ── Helper: FK-enabled SQLite engine for per-module isolation ──\n\ndef make_fk_engine():\n \"\"\"Create a per-module SQLite in-memory engine with FK enforcement.\n\n Each test module calls this once at module level to get its own\n isolated database. No shared state → no memory leak.\n \"\"\"\n eng = create_engine(\"sqlite:///:memory:\", connect_args={\"check_same_thread\": False})\n event.listen(eng, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n return eng\n\n\n# ── Test session lifecycle ──\n\ndef pytest_configure(config):\n print(\n f\"\\n[conftest] SQLite (global: {_TEST_DB_PATH}) + FK enforcement\",\n file=sys.stderr,\n )\n\n\ndef pytest_unconfigure(config):\n try:\n os.unlink(_TEST_DB_PATH)\n except Exception:\n pass\n\n\n@pytest.fixture(scope=\"session\", autouse=True)\ndef ensure_db_tables():\n \"\"\"Create all tables on the global database.\"\"\"\n try:\n from src.core.database import init_db\n init_db()\n except Exception as exc:\n print(f\"\\n[conftest] init_db failed: {exc}\", file=sys.stderr)\n raise\n\n\n# #endregion TestSessionConfig\n" }, { "contract_id": "TestArchiveParser", @@ -49069,7 +49426,7 @@ "contract_type": "Function", "file_path": "backend/tests/core/test_defensive_guards.py", "start_line": 56, - "end_line": 76, + "end_line": 75, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49079,14 +49436,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region test_git_service_init_repo_reclones_when_path_is_not_a_git_repo [C:2] [TYPE Function]\ndef test_git_service_init_repo_reclones_when_path_is_not_a_git_repo():\n \"\"\"Verify init_repo reclones when target path exists but is not a valid Git repository.\"\"\"\n service = GitService(base_path=\"test_repos_invalid_repo\")\n target_path = Path(service.base_path) / \"covid\"\n target_path.mkdir(parents=True, exist_ok=True)\n (target_path / \"placeholder.txt\").write_text(\"not a git repo\", encoding=\"utf-8\")\n\n clone_result = MagicMock()\n with patch(\"src.services.git._base.Repo\") as repo_ctor:\n repo_ctor.side_effect = InvalidGitRepositoryError(\"invalid repo\")\n repo_ctor.clone_from.return_value = clone_result\n result = service.init_repo(10, \"https://example.com/org/repo.git\", \"token\", repo_key=\"covid\")\n\n assert result is clone_result\n repo_ctor.assert_called_once_with(str(target_path))\n repo_ctor.clone_from.assert_called_once()\n assert not target_path.exists()\n\n\n# #endregion test_git_service_init_repo_reclones_when_path_is_not_a_git_repo\n" + "body": "# #region test_git_service_init_repo_reclones_when_path_is_not_a_git_repo [C:2] [TYPE Function]\ndef test_git_service_init_repo_reclones_when_path_is_not_a_git_repo():\n \"\"\"Verify init_repo reclones when target path exists but is not a valid Git repository.\"\"\"\n service = GitService(base_path=\"test_repos_invalid_repo\")\n target_dir = Path(service.base_path)\n if target_dir.exists():\n shutil.rmtree(target_dir, ignore_errors=True)\n target_path = target_dir / \"covid\"\n target_path.mkdir(parents=True, exist_ok=True)\n\n clone_result = MagicMock()\n with patch.object(service, \"_clone_with_auth\", return_value=clone_result) as mock_clone:\n result = service.init_repo(10, \"https://example.com/org/repo.git\", \"token\", repo_key=\"covid\")\n\n assert result is clone_result\n mock_clone.assert_called_once()\n assert not target_path.exists()\n\n\n# #endregion test_git_service_init_repo_reclones_when_path_is_not_a_git_repo\n" }, { "contract_id": "test_git_service_ensure_gitflow_branches_creates_and_pushes_missing_defaults", "contract_type": "Function", "file_path": "backend/tests/core/test_defensive_guards.py", - "start_line": 78, - "end_line": 133, + "start_line": 77, + "end_line": 132, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49102,8 +49459,8 @@ "contract_id": "test_git_service_configure_identity_updates_repo_local_config", "contract_type": "Function", "file_path": "backend/tests/core/test_defensive_guards.py", - "start_line": 135, - "end_line": 151, + "start_line": 134, + "end_line": 150, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49235,7 +49592,7 @@ "contract_type": "Module", "file_path": "backend/tests/core/test_mapping_service.py", "start_line": 1, - "end_line": 344, + "end_line": 354, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49254,14 +49611,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestMappingService [C:2] [TYPE Module]\n#\n# @PURPOSE: Unit tests for the IdMappingService matching UUIDs to integer IDs.\n# @LAYER Domain\n# @RELATION BINDS_TO ->[IdMappingService]\n#\nimport sys\nfrom datetime import UTC, datetime\nfrom pathlib import Path\n\nimport pytest\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\n# Add backend directory to sys.path so 'src' can be resolved\nbackend_dir = str(Path(__file__).parent.parent.parent.resolve())\nif backend_dir not in sys.path:\n sys.path.insert(0, backend_dir)\n\nfrom src.core.mapping_service import IdMappingService\nfrom src.models.mapping import Base, ResourceMapping, ResourceType\n\n\n@pytest.fixture\ndef db_session():\n # In-memory SQLite for testing\n engine = create_engine(\"sqlite:///:memory:\")\n Base.metadata.create_all(engine)\n Session = sessionmaker(bind=engine)\n session = Session()\n yield session\n session.close()\n\n\nclass MockSupersetClient:\n def __init__(self, resources):\n self.resources = resources\n\n def get_all_resources(self, endpoint, since_dttm=None):\n return self.resources.get(endpoint, [])\n\n\n# #region test_sync_environment_upserts_correctly [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_upserts_correctly(db_session):\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\n \"id\": 42,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"slice_name\": \"Test Chart\",\n }\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n mapping = db_session.query(ResourceMapping).first()\n assert mapping is not None\n assert mapping.environment_id == \"test-env\"\n assert mapping.resource_type == ResourceType.CHART\n assert mapping.uuid == \"123e4567-e89b-12d3-a456-426614174000\"\n assert mapping.remote_integer_id == \"42\"\n assert mapping.resource_name == \"Test Chart\"\n\n\n# #endregion test_sync_environment_upserts_correctly\n\n\n# #region test_get_remote_id_returns_integer [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_id_returns_integer(db_session):\n service = IdMappingService(db_session)\n mapping = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DATASET,\n uuid=\"uuid-1\",\n remote_integer_id=\"99\",\n resource_name=\"Test DS\",\n last_synced_at=datetime.now(UTC),\n )\n db_session.add(mapping)\n db_session.commit()\n\n result = service.get_remote_id(\"test-env\", ResourceType.DATASET, \"uuid-1\")\n assert result == 99\n\n\n# #endregion test_get_remote_id_returns_integer\n\n\n# #region test_get_remote_ids_batch_returns_dict [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_ids_batch_returns_dict(db_session):\n service = IdMappingService(db_session)\n m1 = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DASHBOARD,\n uuid=\"uuid-1\",\n remote_integer_id=\"11\",\n )\n m2 = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DASHBOARD,\n uuid=\"uuid-2\",\n remote_integer_id=\"22\",\n )\n db_session.add_all([m1, m2])\n db_session.commit()\n\n result = service.get_remote_ids_batch(\n \"test-env\", ResourceType.DASHBOARD, [\"uuid-1\", \"uuid-2\", \"uuid-missing\"]\n )\n\n assert len(result) == 2\n assert result[\"uuid-1\"] == 11\n assert result[\"uuid-2\"] == 22\n assert \"uuid-missing\" not in result\n\n\n# #endregion test_get_remote_ids_batch_returns_dict\n\n\n# #region test_sync_environment_updates_existing_mapping [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_updates_existing_mapping(db_session):\n \"\"\"Verify that sync_environment updates an existing mapping (upsert UPDATE path).\"\"\"\n from src.models.mapping import ResourceMapping\n\n # Pre-populate a mapping\n existing = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.CHART,\n uuid=\"123e4567-e89b-12d3-a456-426614174000\",\n remote_integer_id=\"10\",\n resource_name=\"Old Name\",\n )\n db_session.add(existing)\n db_session.commit()\n\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\n \"id\": 42,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"slice_name\": \"Updated Name\",\n }\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n mapping = (\n db_session.query(ResourceMapping)\n .filter_by(uuid=\"123e4567-e89b-12d3-a456-426614174000\")\n .first()\n )\n assert mapping.remote_integer_id == \"42\"\n assert mapping.resource_name == \"Updated Name\"\n # Should still be only one record (updated, not duplicated)\n count = db_session.query(ResourceMapping).count()\n assert count == 1\n\n\n# #endregion test_sync_environment_updates_existing_mapping\n\n\n# #region test_sync_environment_skips_resources_without_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_skips_resources_without_uuid(db_session):\n \"\"\"Resources missing uuid or having id=None should be silently skipped.\"\"\"\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 42, \"slice_name\": \"No UUID\"}, # Missing 'uuid' -> skipped\n {\n \"id\": None,\n \"uuid\": \"valid-uuid\",\n \"slice_name\": \"ID is None\",\n }, # id=None -> skipped\n {\n \"id\": None,\n \"uuid\": None,\n \"slice_name\": \"Both None\",\n }, # both None -> skipped\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n count = db_session.query(ResourceMapping).count()\n assert count == 0\n\n\n# #endregion test_sync_environment_skips_resources_without_uuid\n\n\n# #region test_sync_environment_handles_api_error_gracefully [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_handles_api_error_gracefully(db_session):\n \"\"\"If one resource type fails, others should still sync.\"\"\"\n\n class FailingClient:\n def get_all_resources(self, endpoint, since_dttm=None):\n if endpoint == \"chart\":\n raise ConnectionError(\"API timeout\")\n if endpoint == \"dataset\":\n return [{\"id\": 99, \"uuid\": \"ds-uuid-1\", \"table_name\": \"users\"}]\n return []\n\n service = IdMappingService(db_session)\n service.sync_environment(\"test-env\", FailingClient())\n\n count = db_session.query(ResourceMapping).count()\n assert count == 1 # Only dataset was synced; chart error was swallowed\n mapping = db_session.query(ResourceMapping).first()\n assert mapping.resource_type == ResourceType.DATASET\n\n\n# #endregion test_sync_environment_handles_api_error_gracefully\n\n\n# #region test_get_remote_id_returns_none_for_missing [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_id_returns_none_for_missing(db_session):\n \"\"\"get_remote_id should return None when no mapping exists.\"\"\"\n service = IdMappingService(db_session)\n result = service.get_remote_id(\"test-env\", ResourceType.CHART, \"nonexistent-uuid\")\n assert result is None\n\n\n# #endregion test_get_remote_id_returns_none_for_missing\n\n\n# #region test_get_remote_ids_batch_returns_empty_for_empty_input [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_ids_batch_returns_empty_for_empty_input(db_session):\n \"\"\"get_remote_ids_batch should return {} for an empty list of UUIDs.\"\"\"\n service = IdMappingService(db_session)\n result = service.get_remote_ids_batch(\"test-env\", ResourceType.CHART, [])\n assert result == {}\n\n\n# #endregion test_get_remote_ids_batch_returns_empty_for_empty_input\n\n\n# #region test_mapping_service_alignment_with_test_data [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_mapping_service_alignment_with_test_data(db_session):\n \"\"\"**@TEST_DATA**: Verifies that the service aligns with the resource_mapping_record contract.\"\"\"\n # Contract: {'environment_id': 'prod-env-1', 'resource_type': 'chart', 'uuid': '123e4567-e89b-12d3-a456-426614174000', 'remote_integer_id': '42'}\n contract_data = {\n \"environment_id\": \"prod-env-1\",\n \"resource_type\": ResourceType.CHART,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"remote_integer_id\": \"42\",\n }\n\n mapping = ResourceMapping(**contract_data)\n db_session.add(mapping)\n db_session.commit()\n\n service = IdMappingService(db_session)\n result = service.get_remote_id(\n contract_data[\"environment_id\"],\n contract_data[\"resource_type\"],\n contract_data[\"uuid\"],\n )\n\n assert result == 42\n\n\n# #endregion test_mapping_service_alignment_with_test_data\n\n\n# #region test_sync_environment_requires_existing_env [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_requires_existing_env(db_session):\n \"\"\"**@PRE**: Verify behavior when environment_id is invalid/missing in DB.\n Note: The current implementation doesn't strictly check for environment existencia in the DB\n before polling, but it should handle it gracefully or follow the contract.\n \"\"\"\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient({\"chart\": []})\n\n # Even if environment doesn't exist in a hypothetical 'environments' table,\n # the service should still complete or fail according to defined error handling.\n # In GRACE-Poly, @PRE is a hard requirement. If we don't have an Env model check,\n # we simulate the intent.\n\n service.sync_environment(\"non-existent-env\", mock_client)\n # If no error raised, at least verify no mappings were created for other envs\n assert db_session.query(ResourceMapping).count() == 0\n\n\n# #endregion test_sync_environment_requires_existing_env\n\n\n# #region test_sync_environment_deletes_stale_mappings [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_deletes_stale_mappings(db_session):\n \"\"\"Verify that mappings for resources deleted from the remote environment\n are removed from the local DB on the next sync cycle.\"\"\"\n service = IdMappingService(db_session)\n\n # First sync: 2 charts exist\n client_v1 = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 1, \"uuid\": \"aaa\", \"slice_name\": \"Chart A\"},\n {\"id\": 2, \"uuid\": \"bbb\", \"slice_name\": \"Chart B\"},\n ]\n }\n )\n service.sync_environment(\"env1\", client_v1)\n assert (\n db_session.query(ResourceMapping).filter_by(environment_id=\"env1\").count() == 2\n )\n\n # Second sync: user deleted Chart B from superset\n client_v2 = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 1, \"uuid\": \"aaa\", \"slice_name\": \"Chart A\"},\n ]\n }\n )\n service.sync_environment(\"env1\", client_v2)\n\n remaining = db_session.query(ResourceMapping).filter_by(environment_id=\"env1\").all()\n assert len(remaining) == 1\n assert remaining[0].uuid == \"aaa\"\n\n\n# #endregion test_sync_environment_deletes_stale_mappings\n# #endregion TestMappingService\n" + "body": "# #region TestMappingService [C:2] [TYPE Module]\n#\n# @PURPOSE: Unit tests for the IdMappingService matching UUIDs to integer IDs.\n# @LAYER Domain\n# @RELATION BINDS_TO ->[IdMappingService]\n#\nimport sys\nfrom datetime import UTC, datetime\nfrom pathlib import Path\n\nimport pytest\nfrom sqlalchemy import create_engine, event\nfrom sqlalchemy.orm import sessionmaker\n\n# Add backend directory to sys.path so 'src' can be resolved\nbackend_dir = str(Path(__file__).parent.parent.parent.resolve())\nif backend_dir not in sys.path:\n sys.path.insert(0, backend_dir)\n\nfrom src.core.mapping_service import IdMappingService\nfrom src.models.mapping import Base, Environment, ResourceMapping, ResourceType\n\n\n@pytest.fixture\ndef db_session():\n # In-memory SQLite for testing\n engine = create_engine(\"sqlite:///:memory:\")\n event.listen(engine, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n Base.metadata.create_all(engine)\n Session = sessionmaker(bind=engine)\n session = Session()\n # Create FK parent Environment records for all environment_ids used in tests\n for env_id in ['test-env', 'prod-env-1', 'env1']:\n if not session.query(Environment).filter(Environment.id == env_id).first():\n session.add(Environment(\n id=env_id, name=env_id,\n url=f'http://{env_id}.example.com',\n credentials_id=env_id\n ))\n session.commit()\n yield session\n session.close()\n\n\nclass MockSupersetClient:\n def __init__(self, resources):\n self.resources = resources\n\n def get_all_resources(self, endpoint, since_dttm=None):\n return self.resources.get(endpoint, [])\n\n\n# #region test_sync_environment_upserts_correctly [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_upserts_correctly(db_session):\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\n \"id\": 42,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"slice_name\": \"Test Chart\",\n }\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n mapping = db_session.query(ResourceMapping).first()\n assert mapping is not None\n assert mapping.environment_id == \"test-env\"\n assert mapping.resource_type == ResourceType.CHART\n assert mapping.uuid == \"123e4567-e89b-12d3-a456-426614174000\"\n assert mapping.remote_integer_id == \"42\"\n assert mapping.resource_name == \"Test Chart\"\n\n\n# #endregion test_sync_environment_upserts_correctly\n\n\n# #region test_get_remote_id_returns_integer [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_id_returns_integer(db_session):\n service = IdMappingService(db_session)\n mapping = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DATASET,\n uuid=\"uuid-1\",\n remote_integer_id=\"99\",\n resource_name=\"Test DS\",\n last_synced_at=datetime.now(UTC),\n )\n db_session.add(mapping)\n db_session.commit()\n\n result = service.get_remote_id(\"test-env\", ResourceType.DATASET, \"uuid-1\")\n assert result == 99\n\n\n# #endregion test_get_remote_id_returns_integer\n\n\n# #region test_get_remote_ids_batch_returns_dict [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_ids_batch_returns_dict(db_session):\n service = IdMappingService(db_session)\n m1 = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DASHBOARD,\n uuid=\"uuid-1\",\n remote_integer_id=\"11\",\n )\n m2 = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.DASHBOARD,\n uuid=\"uuid-2\",\n remote_integer_id=\"22\",\n )\n db_session.add_all([m1, m2])\n db_session.commit()\n\n result = service.get_remote_ids_batch(\n \"test-env\", ResourceType.DASHBOARD, [\"uuid-1\", \"uuid-2\", \"uuid-missing\"]\n )\n\n assert len(result) == 2\n assert result[\"uuid-1\"] == 11\n assert result[\"uuid-2\"] == 22\n assert \"uuid-missing\" not in result\n\n\n# #endregion test_get_remote_ids_batch_returns_dict\n\n\n# #region test_sync_environment_updates_existing_mapping [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_updates_existing_mapping(db_session):\n \"\"\"Verify that sync_environment updates an existing mapping (upsert UPDATE path).\"\"\"\n from src.models.mapping import ResourceMapping\n\n # Pre-populate a mapping\n existing = ResourceMapping(\n environment_id=\"test-env\",\n resource_type=ResourceType.CHART,\n uuid=\"123e4567-e89b-12d3-a456-426614174000\",\n remote_integer_id=\"10\",\n resource_name=\"Old Name\",\n )\n db_session.add(existing)\n db_session.commit()\n\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\n \"id\": 42,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"slice_name\": \"Updated Name\",\n }\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n mapping = (\n db_session.query(ResourceMapping)\n .filter_by(uuid=\"123e4567-e89b-12d3-a456-426614174000\")\n .first()\n )\n assert mapping.remote_integer_id == \"42\"\n assert mapping.resource_name == \"Updated Name\"\n # Should still be only one record (updated, not duplicated)\n count = db_session.query(ResourceMapping).count()\n assert count == 1\n\n\n# #endregion test_sync_environment_updates_existing_mapping\n\n\n# #region test_sync_environment_skips_resources_without_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_skips_resources_without_uuid(db_session):\n \"\"\"Resources missing uuid or having id=None should be silently skipped.\"\"\"\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 42, \"slice_name\": \"No UUID\"}, # Missing 'uuid' -> skipped\n {\n \"id\": None,\n \"uuid\": \"valid-uuid\",\n \"slice_name\": \"ID is None\",\n }, # id=None -> skipped\n {\n \"id\": None,\n \"uuid\": None,\n \"slice_name\": \"Both None\",\n }, # both None -> skipped\n ]\n }\n )\n\n service.sync_environment(\"test-env\", mock_client)\n\n count = db_session.query(ResourceMapping).count()\n assert count == 0\n\n\n# #endregion test_sync_environment_skips_resources_without_uuid\n\n\n# #region test_sync_environment_handles_api_error_gracefully [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_handles_api_error_gracefully(db_session):\n \"\"\"If one resource type fails, others should still sync.\"\"\"\n\n class FailingClient:\n def get_all_resources(self, endpoint, since_dttm=None):\n if endpoint == \"chart\":\n raise ConnectionError(\"API timeout\")\n if endpoint == \"dataset\":\n return [{\"id\": 99, \"uuid\": \"ds-uuid-1\", \"table_name\": \"users\"}]\n return []\n\n service = IdMappingService(db_session)\n service.sync_environment(\"test-env\", FailingClient())\n\n count = db_session.query(ResourceMapping).count()\n assert count == 1 # Only dataset was synced; chart error was swallowed\n mapping = db_session.query(ResourceMapping).first()\n assert mapping.resource_type == ResourceType.DATASET\n\n\n# #endregion test_sync_environment_handles_api_error_gracefully\n\n\n# #region test_get_remote_id_returns_none_for_missing [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_id_returns_none_for_missing(db_session):\n \"\"\"get_remote_id should return None when no mapping exists.\"\"\"\n service = IdMappingService(db_session)\n result = service.get_remote_id(\"test-env\", ResourceType.CHART, \"nonexistent-uuid\")\n assert result is None\n\n\n# #endregion test_get_remote_id_returns_none_for_missing\n\n\n# #region test_get_remote_ids_batch_returns_empty_for_empty_input [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_get_remote_ids_batch_returns_empty_for_empty_input(db_session):\n \"\"\"get_remote_ids_batch should return {} for an empty list of UUIDs.\"\"\"\n service = IdMappingService(db_session)\n result = service.get_remote_ids_batch(\"test-env\", ResourceType.CHART, [])\n assert result == {}\n\n\n# #endregion test_get_remote_ids_batch_returns_empty_for_empty_input\n\n\n# #region test_mapping_service_alignment_with_test_data [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_mapping_service_alignment_with_test_data(db_session):\n \"\"\"**@TEST_DATA**: Verifies that the service aligns with the resource_mapping_record contract.\"\"\"\n # Contract: {'environment_id': 'prod-env-1', 'resource_type': 'chart', 'uuid': '123e4567-e89b-12d3-a456-426614174000', 'remote_integer_id': '42'}\n contract_data = {\n \"environment_id\": \"prod-env-1\",\n \"resource_type\": ResourceType.CHART,\n \"uuid\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"remote_integer_id\": \"42\",\n }\n\n mapping = ResourceMapping(**contract_data)\n db_session.add(mapping)\n db_session.commit()\n\n service = IdMappingService(db_session)\n result = service.get_remote_id(\n contract_data[\"environment_id\"],\n contract_data[\"resource_type\"],\n contract_data[\"uuid\"],\n )\n\n assert result == 42\n\n\n# #endregion test_mapping_service_alignment_with_test_data\n\n\n# #region test_sync_environment_requires_existing_env [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_requires_existing_env(db_session):\n \"\"\"**@PRE**: Verify behavior when environment_id is invalid/missing in DB.\n Note: The current implementation doesn't strictly check for environment existencia in the DB\n before polling, but it should handle it gracefully or follow the contract.\n \"\"\"\n service = IdMappingService(db_session)\n mock_client = MockSupersetClient({\"chart\": []})\n\n # Even if environment doesn't exist in a hypothetical 'environments' table,\n # the service should still complete or fail according to defined error handling.\n # In GRACE-Poly, @PRE is a hard requirement. If we don't have an Env model check,\n # we simulate the intent.\n\n service.sync_environment(\"non-existent-env\", mock_client)\n # If no error raised, at least verify no mappings were created for other envs\n assert db_session.query(ResourceMapping).count() == 0\n\n\n# #endregion test_sync_environment_requires_existing_env\n\n\n# #region test_sync_environment_deletes_stale_mappings [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestMappingService]\ndef test_sync_environment_deletes_stale_mappings(db_session):\n \"\"\"Verify that mappings for resources deleted from the remote environment\n are removed from the local DB on the next sync cycle.\"\"\"\n service = IdMappingService(db_session)\n\n # First sync: 2 charts exist\n client_v1 = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 1, \"uuid\": \"aaa\", \"slice_name\": \"Chart A\"},\n {\"id\": 2, \"uuid\": \"bbb\", \"slice_name\": \"Chart B\"},\n ]\n }\n )\n service.sync_environment(\"env1\", client_v1)\n assert (\n db_session.query(ResourceMapping).filter_by(environment_id=\"env1\").count() == 2\n )\n\n # Second sync: user deleted Chart B from superset\n client_v2 = MockSupersetClient(\n {\n \"chart\": [\n {\"id\": 1, \"uuid\": \"aaa\", \"slice_name\": \"Chart A\"},\n ]\n }\n )\n service.sync_environment(\"env1\", client_v2)\n\n remaining = db_session.query(ResourceMapping).filter_by(environment_id=\"env1\").all()\n assert len(remaining) == 1\n assert remaining[0].uuid == \"aaa\"\n\n\n# #endregion test_sync_environment_deletes_stale_mappings\n# #endregion TestMappingService\n" }, { "contract_id": "test_sync_environment_upserts_correctly", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 43, - "end_line": 70, + "start_line": 53, + "end_line": 80, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49284,8 +49641,8 @@ "contract_id": "test_get_remote_id_returns_integer", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 73, - "end_line": 92, + "start_line": 83, + "end_line": 102, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49308,8 +49665,8 @@ "contract_id": "test_get_remote_ids_batch_returns_dict", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 95, - "end_line": 124, + "start_line": 105, + "end_line": 134, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49332,8 +49689,8 @@ "contract_id": "test_sync_environment_updates_existing_mapping", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 127, - "end_line": 171, + "start_line": 137, + "end_line": 181, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49356,8 +49713,8 @@ "contract_id": "test_sync_environment_skips_resources_without_uuid", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 174, - "end_line": 203, + "start_line": 184, + "end_line": 213, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49380,8 +49737,8 @@ "contract_id": "test_sync_environment_handles_api_error_gracefully", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 206, - "end_line": 228, + "start_line": 216, + "end_line": 238, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49404,8 +49761,8 @@ "contract_id": "test_get_remote_id_returns_none_for_missing", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 231, - "end_line": 240, + "start_line": 241, + "end_line": 250, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49428,8 +49785,8 @@ "contract_id": "test_get_remote_ids_batch_returns_empty_for_empty_input", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 243, - "end_line": 252, + "start_line": 253, + "end_line": 262, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49452,8 +49809,8 @@ "contract_id": "test_mapping_service_alignment_with_test_data", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 255, - "end_line": 281, + "start_line": 265, + "end_line": 291, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49476,8 +49833,8 @@ "contract_id": "test_sync_environment_requires_existing_env", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 284, - "end_line": 304, + "start_line": 294, + "end_line": 314, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49500,8 +49857,8 @@ "contract_id": "test_sync_environment_deletes_stale_mappings", "contract_type": "Function", "file_path": "backend/tests/core/test_mapping_service.py", - "start_line": 307, - "end_line": 343, + "start_line": 317, + "end_line": 353, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -49544,7 +49901,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestMigrationEngine [C:2] [TYPE Module]\n#\n# @PURPOSE: Unit tests for MigrationEngine's cross-filter patching algorithms.\n# @LAYER Domain\n# @RELATION BINDS_TO -> [MigrationEngine]\n#\nimport json\nimport os\nimport sys\nimport tempfile\nimport zipfile\nfrom pathlib import Path\n\nimport pytest\nimport yaml\n\nbackend_dir = str(Path(__file__).parent.parent.parent.resolve())\nif backend_dir not in sys.path:\n sys.path.insert(0, backend_dir)\n\nfrom src.core.migration_engine import MigrationEngine\n\n# --- Fixtures ---\n\n\n# #region MockMappingService [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Deterministic mapping service double for native filter ID remapping scenarios.\n# @INVARIANT: Returns mappings only for requested UUID keys present in seeded map.\nclass MockMappingService:\n \"\"\"Mock that simulates IdMappingService.get_remote_ids_batch.\"\"\"\n\n def __init__(self, mappings: dict):\n self.mappings = mappings\n\n def get_remote_ids_batch(self, env_id, resource_type, uuids):\n # @INVARIANT_VIOLATION: resource_type parameter is silently ignored. Lookups are UUID-only; chart and dataset UUIDs share the same namespace. Tests that mix resource types will produce false positives.\n result = {}\n for uuid in uuids:\n if uuid in self.mappings:\n result[EXT:Python:uuid] = self.mappings[EXT:Python:uuid]\n return result\n\n\n# #endregion MockMappingService\n\n\n# #region _write_dashboard_yaml [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Serialize dashboard metadata into YAML fixture with json_metadata payload for patch tests.\ndef _write_dashboard_yaml(dir_path: Path, metadata: dict) -> Path:\n \"\"\"Helper: writes a dashboard YAML file with json_metadata.\"\"\"\n file_path = dir_path / \"dash.yaml\"\n with open(file_path, \"w\") as f:\n yaml.dump({\"json_metadata\": json.dumps(metadata)}, f)\n return file_path\n\n\n# --- _patch_dashboard_metadata tests ---\n\n# #endregion _write_dashboard_yaml\n\n\n# #region test_patch_dashboard_metadata_replaces_chart_ids [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify native filter target chartId values are remapped via mapping service results.\ndef test_patch_dashboard_metadata_replaces_chart_ids():\n \"\"\"Verifies that chartId values are replaced using the mapping service.\"\"\"\n mock_service = MockMappingService({\"uuid-chart-A\": 999})\n engine = MigrationEngine(mock_service)\n\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"chartId\": 42}]}]}\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {42: \"uuid-chart-A\"}\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n assert (\n result[\"native_filter_configuration\"][0][\"targets\"][0][\"chartId\"] == 999\n )\n\n\n# #endregion test_patch_dashboard_metadata_replaces_chart_ids\n\n\n# #region test_patch_dashboard_metadata_replaces_dataset_ids [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify native filter target datasetId values are remapped via mapping service results.\ndef test_patch_dashboard_metadata_replaces_dataset_ids():\n \"\"\"Verifies that datasetId values are replaced using the mapping service.\"\"\"\n mock_service = MockMappingService({\"uuid-ds-B\": 500})\n engine = MigrationEngine(mock_service)\n\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"datasetId\": 10}]}]}\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {10: \"uuid-ds-B\"}\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n assert (\n result[\"native_filter_configuration\"][0][\"targets\"][0][\"datasetId\"]\n == 500\n )\n\n\n# #endregion test_patch_dashboard_metadata_replaces_dataset_ids\n\n\n# #region test_patch_dashboard_metadata_skips_when_no_metadata [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure dashboard files without json_metadata are left unchanged by metadata patching.\ndef test_patch_dashboard_metadata_skips_when_no_metadata():\n \"\"\"Verifies early return when json_metadata key is absent.\"\"\"\n mock_service = MockMappingService({})\n engine = MigrationEngine(mock_service)\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dash.yaml\"\n with open(fp, \"w\") as f:\n yaml.dump({\"title\": \"No metadata here\"}, f)\n\n engine._patch_dashboard_metadata(fp, \"target-env\", {})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert \"json_metadata\" not in data\n\n\n# #endregion test_patch_dashboard_metadata_skips_when_no_metadata\n\n\n# #region test_patch_dashboard_metadata_handles_missing_targets [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify patching updates mapped targets while preserving unmapped native filter IDs.\ndef test_patch_dashboard_metadata_handles_missing_targets():\n \"\"\"When some source IDs have no target mapping, patches what it can and leaves the rest.\"\"\"\n mock_service = MockMappingService({\"uuid-A\": 100}) # Only uuid-A maps\n engine = MigrationEngine(mock_service)\n\n metadata = {\n \"native_filter_configuration\": [\n {\"targets\": [{\"datasetId\": 1}, {\"datasetId\": 2}]}\n ]\n }\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {1: \"uuid-A\", 2: \"uuid-MISSING\"} # uuid-MISSING won't resolve\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n targets = result[\"native_filter_configuration\"][0][\"targets\"]\n # ID 1 should be replaced to 100; ID 2 should remain 2\n assert targets[0][\"datasetId\"] == 100\n assert targets[1][\"datasetId\"] == 2\n\n\n# --- _extract_chart_uuids_from_archive tests ---\n\n# #endregion test_patch_dashboard_metadata_handles_missing_targets\n\n\n# #region test_extract_chart_uuids_from_archive [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify chart archive scan returns complete local chart id-to-uuid mapping.\ndef test_extract_chart_uuids_from_archive():\n \"\"\"Verifies that chart YAML files are parsed for id->uuid mappings.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n charts_dir = Path(td) / \"charts\"\n charts_dir.mkdir()\n\n chart1 = {\"id\": 42, \"uuid\": \"uuid-42\", \"slice_name\": \"Chart One\"}\n chart2 = {\"id\": 99, \"uuid\": \"uuid-99\", \"slice_name\": \"Chart Two\"}\n\n with open(charts_dir / \"chart1.yaml\", \"w\") as f:\n yaml.dump(chart1, f)\n with open(charts_dir / \"chart2.yaml\", \"w\") as f:\n yaml.dump(chart2, f)\n\n result = engine._extract_chart_uuids_from_archive(Path(td))\n\n assert result == {42: \"uuid-42\", 99: \"uuid-99\"}\n\n\n# --- _transform_yaml tests ---\n\n# #endregion test_extract_chart_uuids_from_archive\n\n\n# #region test_transform_yaml_replaces_database_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure dataset YAML database_uuid fields are replaced when source UUID mapping exists.\ndef test_transform_yaml_replaces_database_uuid():\n \"\"\"Verifies that database_uuid in a dataset YAML is replaced.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dataset.yaml\"\n with open(fp, \"w\") as f:\n yaml.dump({\"database_uuid\": \"source-uuid-abc\", \"table_name\": \"my_table\"}, f)\n\n engine._transform_yaml(fp, {\"source-uuid-abc\": \"target-uuid-xyz\"})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert data[\"database_uuid\"] == \"target-uuid-xyz\"\n assert data[\"table_name\"] == \"my_table\"\n\n\n# #endregion test_transform_yaml_replaces_database_uuid\n\n\n# #region test_transform_yaml_ignores_unmapped_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure transform_yaml leaves dataset files untouched when database_uuid is not mapped.\ndef test_transform_yaml_ignores_unmapped_uuid():\n \"\"\"Verifies no changes when UUID is not in the mapping.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dataset.yaml\"\n original = {\"database_uuid\": \"unknown-uuid\", \"table_name\": \"test\"}\n with open(fp, \"w\") as f:\n yaml.dump(original, f)\n\n engine._transform_yaml(fp, {\"other-uuid\": \"replacement\"})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert data[\"database_uuid\"] == \"unknown-uuid\"\n\n\n# --- [NEW] transform_zip E2E tests ---\n\n# #endregion test_transform_yaml_ignores_unmapped_uuid\n\n\n# #region test_transform_zip_end_to_end [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Validate full ZIP transform pipeline remaps datasets and dashboard cross-filter chart IDs.\ndef test_transform_zip_end_to_end():\n \"\"\"Verifies full orchestration: extraction, transformation, patching, and re-packaging.\"\"\"\n mock_service = MockMappingService({\"char-uuid\": 101, \"ds-uuid\": 202})\n engine = MigrationEngine(mock_service)\n\n with tempfile.TemporaryDirectory() as td:\n td_path = Path(td)\n zip_path = td_path / \"source.zip\"\n output_path = td_path / \"target.zip\"\n\n # Create source ZIP structure\n with tempfile.TemporaryDirectory() as src_dir:\n src_path = Path(src_dir)\n\n # 1. Dataset\n ds_dir = src_path / \"datasets\"\n ds_dir.mkdir()\n with open(ds_dir / \"ds.yaml\", \"w\") as f:\n yaml.dump({\"database_uuid\": \"source-db-uuid\", \"table_name\": \"users\"}, f)\n\n # 2. Chart\n ch_dir = src_path / \"charts\"\n ch_dir.mkdir()\n with open(ch_dir / \"ch.yaml\", \"w\") as f:\n yaml.dump({\"id\": 10, \"uuid\": \"char-uuid\"}, f)\n\n # 3. Dashboard\n db_dir = src_path / \"dashboards\"\n db_dir.mkdir()\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"chartId\": 10}]}]}\n with open(db_dir / \"db.yaml\", \"w\") as f:\n yaml.dump({\"json_metadata\": json.dumps(metadata)}, f)\n\n with zipfile.ZipFile(zip_path, \"w\") as zf:\n for root, _, files in os.walk(src_path):\n for file in files:\n p = Path(root) / file\n zf.write(p, p.relative_to(src_path))\n\n db_mapping = {\"source-db-uuid\": \"target-db-uuid\"}\n\n # Execute transform\n success = engine.transform_zip(\n str(zip_path),\n str(output_path),\n db_mapping,\n target_env_id=\"test-target\",\n fix_cross_filters=True,\n )\n\n assert success is True\n assert output_path.exists()\n\n # Verify contents\n with tempfile.TemporaryDirectory() as out_dir:\n with zipfile.ZipFile(output_path, \"r\") as zf:\n zf.extractall(out_dir)\n\n out_path = Path(out_dir)\n\n # Verify dataset transformation\n with open(out_path / \"datasets\" / \"ds.yaml\") as f:\n ds_data = yaml.safe_load(f)\n assert ds_data[\"database_uuid\"] == \"target-db-uuid\"\n\n # Verify dashboard patching\n with open(out_path / \"dashboards\" / \"db.yaml\") as f:\n db_data = yaml.safe_load(f)\n meta = json.loads(db_data[\"json_metadata\"])\n assert (\n meta[\"native_filter_configuration\"][0][\"targets\"][0][\"chartId\"]\n == 101\n )\n\n\n# #endregion test_transform_zip_end_to_end\n\n\n# #region test_transform_zip_invalid_path [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify transform_zip returns False when source archive path does not exist.\ndef test_transform_zip_invalid_path():\n \"\"\"@PRE: Verify behavior (False) on invalid ZIP path.\"\"\"\n engine = MigrationEngine()\n success = engine.transform_zip(\"non_existent.zip\", \"output.zip\", {})\n assert success is False\n\n\n# #endregion test_transform_zip_invalid_path\n\n\n# #region test_transform_yaml_nonexistent_file [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify transform_yaml raises FileNotFoundError for missing YAML source files.\ndef test_transform_yaml_nonexistent_file():\n \"\"\"@PRE: Verify behavior on non-existent YAML file.\"\"\"\n engine = MigrationEngine()\n # Should log error and not crash (implemented via try-except if wrapped,\n # but _transform_yaml itself might raise FileNotFoundError if not guarded)\n with pytest.raises(FileNotFoundError):\n engine._transform_yaml(Path(\"non_existent.yaml\"), {})\n\n\n# #endregion test_transform_yaml_nonexistent_file\n# #endregion TestMigrationEngine\n" + "body": "# #region TestMigrationEngine [C:2] [TYPE Module]\n#\n# @PURPOSE: Unit tests for MigrationEngine's cross-filter patching algorithms.\n# @LAYER Domain\n# @RELATION BINDS_TO -> [MigrationEngine]\n#\nimport json\nimport os\nimport sys\nimport tempfile\nimport zipfile\nfrom pathlib import Path\n\nimport pytest\nimport yaml\n\nbackend_dir = str(Path(__file__).parent.parent.parent.resolve())\nif backend_dir not in sys.path:\n sys.path.insert(0, backend_dir)\n\nfrom src.core.migration_engine import MigrationEngine\n\n# --- Fixtures ---\n\n\n# #region MockMappingService [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Deterministic mapping service double for native filter ID remapping scenarios.\n# @INVARIANT: Returns mappings only for requested UUID keys present in seeded map.\nclass MockMappingService:\n \"\"\"Mock that simulates IdMappingService.get_remote_ids_batch.\"\"\"\n\n def __init__(self, mappings: dict):\n self.mappings = mappings\n\n def get_remote_ids_batch(self, env_id, resource_type, uuids):\n # @INVARIANT_VIOLATION: resource_type parameter is silently ignored. Lookups are UUID-only; chart and dataset UUIDs share the same namespace. Tests that mix resource types will produce false positives.\n result = {}\n for uuid in uuids:\n if uuid in self.mappings:\n result[uuid] = self.mappings[uuid]\n return result\n\n\n# #endregion MockMappingService\n\n\n# #region _write_dashboard_yaml [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Serialize dashboard metadata into YAML fixture with json_metadata payload for patch tests.\ndef _write_dashboard_yaml(dir_path: Path, metadata: dict) -> Path:\n \"\"\"Helper: writes a dashboard YAML file with json_metadata.\"\"\"\n file_path = dir_path / \"dash.yaml\"\n with open(file_path, \"w\") as f:\n yaml.dump({\"json_metadata\": json.dumps(metadata)}, f)\n return file_path\n\n\n# --- _patch_dashboard_metadata tests ---\n\n# #endregion _write_dashboard_yaml\n\n\n# #region test_patch_dashboard_metadata_replaces_chart_ids [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify native filter target chartId values are remapped via mapping service results.\ndef test_patch_dashboard_metadata_replaces_chart_ids():\n \"\"\"Verifies that chartId values are replaced using the mapping service.\"\"\"\n mock_service = MockMappingService({\"uuid-chart-A\": 999})\n engine = MigrationEngine(mock_service)\n\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"chartId\": 42}]}]}\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {42: \"uuid-chart-A\"}\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n assert (\n result[\"native_filter_configuration\"][0][\"targets\"][0][\"chartId\"] == 999\n )\n\n\n# #endregion test_patch_dashboard_metadata_replaces_chart_ids\n\n\n# #region test_patch_dashboard_metadata_replaces_dataset_ids [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify native filter target datasetId values are remapped via mapping service results.\ndef test_patch_dashboard_metadata_replaces_dataset_ids():\n \"\"\"Verifies that datasetId values are replaced using the mapping service.\"\"\"\n mock_service = MockMappingService({\"uuid-ds-B\": 500})\n engine = MigrationEngine(mock_service)\n\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"datasetId\": 10}]}]}\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {10: \"uuid-ds-B\"}\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n assert (\n result[\"native_filter_configuration\"][0][\"targets\"][0][\"datasetId\"]\n == 500\n )\n\n\n# #endregion test_patch_dashboard_metadata_replaces_dataset_ids\n\n\n# #region test_patch_dashboard_metadata_skips_when_no_metadata [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure dashboard files without json_metadata are left unchanged by metadata patching.\ndef test_patch_dashboard_metadata_skips_when_no_metadata():\n \"\"\"Verifies early return when json_metadata key is absent.\"\"\"\n mock_service = MockMappingService({})\n engine = MigrationEngine(mock_service)\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dash.yaml\"\n with open(fp, \"w\") as f:\n yaml.dump({\"title\": \"No metadata here\"}, f)\n\n engine._patch_dashboard_metadata(fp, \"target-env\", {})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert \"json_metadata\" not in data\n\n\n# #endregion test_patch_dashboard_metadata_skips_when_no_metadata\n\n\n# #region test_patch_dashboard_metadata_handles_missing_targets [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify patching updates mapped targets while preserving unmapped native filter IDs.\ndef test_patch_dashboard_metadata_handles_missing_targets():\n \"\"\"When some source IDs have no target mapping, patches what it can and leaves the rest.\"\"\"\n mock_service = MockMappingService({\"uuid-A\": 100}) # Only uuid-A maps\n engine = MigrationEngine(mock_service)\n\n metadata = {\n \"native_filter_configuration\": [\n {\"targets\": [{\"datasetId\": 1}, {\"datasetId\": 2}]}\n ]\n }\n\n with tempfile.TemporaryDirectory() as td:\n fp = _write_dashboard_yaml(Path(td), metadata)\n source_map = {1: \"uuid-A\", 2: \"uuid-MISSING\"} # uuid-MISSING won't resolve\n\n engine._patch_dashboard_metadata(fp, \"target-env\", source_map)\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n result = json.loads(data[\"json_metadata\"])\n targets = result[\"native_filter_configuration\"][0][\"targets\"]\n # ID 1 should be replaced to 100; ID 2 should remain 2\n assert targets[0][\"datasetId\"] == 100\n assert targets[1][\"datasetId\"] == 2\n\n\n# --- _extract_chart_uuids_from_archive tests ---\n\n# #endregion test_patch_dashboard_metadata_handles_missing_targets\n\n\n# #region test_extract_chart_uuids_from_archive [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify chart archive scan returns complete local chart id-to-uuid mapping.\ndef test_extract_chart_uuids_from_archive():\n \"\"\"Verifies that chart YAML files are parsed for id->uuid mappings.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n charts_dir = Path(td) / \"charts\"\n charts_dir.mkdir()\n\n chart1 = {\"id\": 42, \"uuid\": \"uuid-42\", \"slice_name\": \"Chart One\"}\n chart2 = {\"id\": 99, \"uuid\": \"uuid-99\", \"slice_name\": \"Chart Two\"}\n\n with open(charts_dir / \"chart1.yaml\", \"w\") as f:\n yaml.dump(chart1, f)\n with open(charts_dir / \"chart2.yaml\", \"w\") as f:\n yaml.dump(chart2, f)\n\n result = engine._extract_chart_uuids_from_archive(Path(td))\n\n assert result == {42: \"uuid-42\", 99: \"uuid-99\"}\n\n\n# --- _transform_yaml tests ---\n\n# #endregion test_extract_chart_uuids_from_archive\n\n\n# #region test_transform_yaml_replaces_database_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure dataset YAML database_uuid fields are replaced when source UUID mapping exists.\ndef test_transform_yaml_replaces_database_uuid():\n \"\"\"Verifies that database_uuid in a dataset YAML is replaced.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dataset.yaml\"\n with open(fp, \"w\") as f:\n yaml.dump({\"database_uuid\": \"source-uuid-abc\", \"table_name\": \"my_table\"}, f)\n\n engine._transform_yaml(fp, {\"source-uuid-abc\": \"target-uuid-xyz\"})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert data[\"database_uuid\"] == \"target-uuid-xyz\"\n assert data[\"table_name\"] == \"my_table\"\n\n\n# #endregion test_transform_yaml_replaces_database_uuid\n\n\n# #region test_transform_yaml_ignores_unmapped_uuid [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Ensure transform_yaml leaves dataset files untouched when database_uuid is not mapped.\ndef test_transform_yaml_ignores_unmapped_uuid():\n \"\"\"Verifies no changes when UUID is not in the mapping.\"\"\"\n engine = MigrationEngine()\n\n with tempfile.TemporaryDirectory() as td:\n fp = Path(td) / \"dataset.yaml\"\n original = {\"database_uuid\": \"unknown-uuid\", \"table_name\": \"test\"}\n with open(fp, \"w\") as f:\n yaml.dump(original, f)\n\n engine._transform_yaml(fp, {\"other-uuid\": \"replacement\"})\n\n with open(fp) as f:\n data = yaml.safe_load(f)\n assert data[\"database_uuid\"] == \"unknown-uuid\"\n\n\n# --- [NEW] transform_zip E2E tests ---\n\n# #endregion test_transform_yaml_ignores_unmapped_uuid\n\n\n# #region test_transform_zip_end_to_end [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Validate full ZIP transform pipeline remaps datasets and dashboard cross-filter chart IDs.\ndef test_transform_zip_end_to_end():\n \"\"\"Verifies full orchestration: extraction, transformation, patching, and re-packaging.\"\"\"\n mock_service = MockMappingService({\"char-uuid\": 101, \"ds-uuid\": 202})\n engine = MigrationEngine(mock_service)\n\n with tempfile.TemporaryDirectory() as td:\n td_path = Path(td)\n zip_path = td_path / \"source.zip\"\n output_path = td_path / \"target.zip\"\n\n # Create source ZIP structure\n with tempfile.TemporaryDirectory() as src_dir:\n src_path = Path(src_dir)\n\n # 1. Dataset\n ds_dir = src_path / \"datasets\"\n ds_dir.mkdir()\n with open(ds_dir / \"ds.yaml\", \"w\") as f:\n yaml.dump({\"database_uuid\": \"source-db-uuid\", \"table_name\": \"users\"}, f)\n\n # 2. Chart\n ch_dir = src_path / \"charts\"\n ch_dir.mkdir()\n with open(ch_dir / \"ch.yaml\", \"w\") as f:\n yaml.dump({\"id\": 10, \"uuid\": \"char-uuid\"}, f)\n\n # 3. Dashboard\n db_dir = src_path / \"dashboards\"\n db_dir.mkdir()\n metadata = {\"native_filter_configuration\": [{\"targets\": [{\"chartId\": 10}]}]}\n with open(db_dir / \"db.yaml\", \"w\") as f:\n yaml.dump({\"json_metadata\": json.dumps(metadata)}, f)\n\n with zipfile.ZipFile(zip_path, \"w\") as zf:\n for root, _, files in os.walk(src_path):\n for file in files:\n p = Path(root) / file\n zf.write(p, p.relative_to(src_path))\n\n db_mapping = {\"source-db-uuid\": \"target-db-uuid\"}\n\n # Execute transform\n success = engine.transform_zip(\n str(zip_path),\n str(output_path),\n db_mapping,\n target_env_id=\"test-target\",\n fix_cross_filters=True,\n )\n\n assert success is True\n assert output_path.exists()\n\n # Verify contents\n with tempfile.TemporaryDirectory() as out_dir:\n with zipfile.ZipFile(output_path, \"r\") as zf:\n zf.extractall(out_dir)\n\n out_path = Path(out_dir)\n\n # Verify dataset transformation\n with open(out_path / \"datasets\" / \"ds.yaml\") as f:\n ds_data = yaml.safe_load(f)\n assert ds_data[\"database_uuid\"] == \"target-db-uuid\"\n\n # Verify dashboard patching\n with open(out_path / \"dashboards\" / \"db.yaml\") as f:\n db_data = yaml.safe_load(f)\n meta = json.loads(db_data[\"json_metadata\"])\n assert (\n meta[\"native_filter_configuration\"][0][\"targets\"][0][\"chartId\"]\n == 101\n )\n\n\n# #endregion test_transform_zip_end_to_end\n\n\n# #region test_transform_zip_invalid_path [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify transform_zip returns False when source archive path does not exist.\ndef test_transform_zip_invalid_path():\n \"\"\"@PRE: Verify behavior (False) on invalid ZIP path.\"\"\"\n engine = MigrationEngine()\n success = engine.transform_zip(\"non_existent.zip\", \"output.zip\", {})\n assert success is False\n\n\n# #endregion test_transform_zip_invalid_path\n\n\n# #region test_transform_yaml_nonexistent_file [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Verify transform_yaml raises FileNotFoundError for missing YAML source files.\ndef test_transform_yaml_nonexistent_file():\n \"\"\"@PRE: Verify behavior on non-existent YAML file.\"\"\"\n engine = MigrationEngine()\n # Should log error and not crash (implemented via try-except if wrapped,\n # but _transform_yaml itself might raise FileNotFoundError if not guarded)\n with pytest.raises(FileNotFoundError):\n engine._transform_yaml(Path(\"non_existent.yaml\"), {})\n\n\n# #endregion test_transform_yaml_nonexistent_file\n# #endregion TestMigrationEngine\n" }, { "contract_id": "MockMappingService", @@ -49571,7 +49928,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region MockMappingService [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Deterministic mapping service double for native filter ID remapping scenarios.\n# @INVARIANT: Returns mappings only for requested UUID keys present in seeded map.\nclass MockMappingService:\n \"\"\"Mock that simulates IdMappingService.get_remote_ids_batch.\"\"\"\n\n def __init__(self, mappings: dict):\n self.mappings = mappings\n\n def get_remote_ids_batch(self, env_id, resource_type, uuids):\n # @INVARIANT_VIOLATION: resource_type parameter is silently ignored. Lookups are UUID-only; chart and dataset UUIDs share the same namespace. Tests that mix resource types will produce false positives.\n result = {}\n for uuid in uuids:\n if uuid in self.mappings:\n result[EXT:Python:uuid] = self.mappings[EXT:Python:uuid]\n return result\n\n\n# #endregion MockMappingService\n" + "body": "# #region MockMappingService [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> [TestMigrationEngine]\n# @PURPOSE: Deterministic mapping service double for native filter ID remapping scenarios.\n# @INVARIANT: Returns mappings only for requested UUID keys present in seeded map.\nclass MockMappingService:\n \"\"\"Mock that simulates IdMappingService.get_remote_ids_batch.\"\"\"\n\n def __init__(self, mappings: dict):\n self.mappings = mappings\n\n def get_remote_ids_batch(self, env_id, resource_type, uuids):\n # @INVARIANT_VIOLATION: resource_type parameter is silently ignored. Lookups are UUID-only; chart and dataset UUIDs share the same namespace. Tests that mix resource types will produce false positives.\n result = {}\n for uuid in uuids:\n if uuid in self.mappings:\n result[uuid] = self.mappings[uuid]\n return result\n\n\n# #endregion MockMappingService\n" }, { "contract_id": "_write_dashboard_yaml", @@ -50504,7 +50861,7 @@ "contract_type": "Module", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", "start_line": 1, - "end_line": 290, + "end_line": 300, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50523,14 +50880,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region test_candidate_manifest_services [C:2] [TYPE Module]\n# @RELATION BINDS_TO -> [SrcRoot]\n# @PURPOSE: Test lifecycle and manifest versioning for release candidates.\n# @LAYER Tests\n\nfrom datetime import UTC, datetime\n\nimport pytest\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\nfrom src.core.database import Base\nfrom src.models.clean_release import (\n DistributionManifest,\n ReleaseCandidate,\n)\nfrom src.services.clean_release.candidate_service import register_candidate\nfrom src.services.clean_release.enums import CandidateStatus\nfrom src.services.clean_release.manifest_service import build_manifest_snapshot\nfrom src.services.clean_release.repository import CleanReleaseRepository\n\n\n@pytest.fixture\ndef db_session():\n engine = create_engine(\"sqlite:///:memory:\")\n Base.metadata.create_all(engine)\n Session = sessionmaker(bind=engine)\n session = Session()\n yield session\n session.close()\n\n\n# #region test_candidate_lifecycle_transitions [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify release candidate allows legal status transitions and rejects forbidden back-transitions.\ndef test_candidate_lifecycle_transitions(db_session):\n \"\"\"\n @PURPOSE: Verify legal state transitions for ReleaseCandidate.\n \"\"\"\n candidate = ReleaseCandidate(\n id=\"test-candidate-1\",\n name=\"Test Candidate\",\n version=\"1.0.0\",\n source_snapshot_ref=\"ref-1\",\n created_by=\"operator\",\n status=CandidateStatus.DRAFT,\n )\n db_session.add(candidate)\n db_session.commit()\n\n # Valid transition: DRAFT -> PREPARED\n candidate.transition_to(CandidateStatus.PREPARED)\n assert candidate.status == CandidateStatus.PREPARED\n\n # Invalid transition: PREPARED -> DRAFT (should raise IllegalTransitionError)\n from src.services.clean_release.exceptions import IllegalTransitionError\n\n with pytest.raises(IllegalTransitionError, match=\"Forbidden transition\"):\n candidate.transition_to(CandidateStatus.DRAFT)\n\n\n# #endregion test_candidate_lifecycle_transitions\n\n\n# #region test_manifest_versioning_and_immutability [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify manifest versions increment monotonically and older snapshots remain queryable.\ndef test_manifest_versioning_and_immutability(db_session):\n \"\"\"\n @PURPOSE: Verify manifest versioning and immutability invariants.\n \"\"\"\n candidate_id = \"test-candidate-2\"\n\n # Create version 1\n m1 = DistributionManifest(\n id=\"manifest-v1\",\n candidate_id=candidate_id,\n manifest_version=1,\n manifest_digest=\"hash1\",\n artifacts_digest=\"hash1\",\n source_snapshot_ref=\"ref1\",\n content_json={},\n created_at=datetime.now(UTC),\n created_by=\"operator\",\n )\n db_session.add(m1)\n\n # Create version 2\n m2 = DistributionManifest(\n id=\"manifest-v2\",\n candidate_id=candidate_id,\n manifest_version=2,\n manifest_digest=\"hash2\",\n artifacts_digest=\"hash2\",\n source_snapshot_ref=\"ref1\",\n content_json={},\n created_at=datetime.now(UTC),\n created_by=\"operator\",\n )\n db_session.add(m2)\n db_session.commit()\n\n latest = (\n db_session.query(DistributionManifest)\n .filter_by(candidate_id=candidate_id)\n .order_by(DistributionManifest.manifest_version.desc())\n .first()\n )\n assert latest.manifest_version == 2\n assert latest.id == \"manifest-v2\"\n\n all_manifests = (\n db_session.query(DistributionManifest)\n .filter_by(candidate_id=candidate_id)\n .all()\n )\n assert len(all_manifests) == 2\n\n\n# #endregion test_manifest_versioning_and_immutability\n\n\n# #region _valid_artifacts [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Provide canonical valid artifact payload used by candidate registration tests.\ndef _valid_artifacts():\n return [\n {\n \"id\": \"art-1\",\n \"path\": \"bin/app\",\n \"sha256\": \"abc123\",\n \"size\": 42,\n }\n ]\n\n\n# #endregion _valid_artifacts\n\n\n# #region test_register_candidate_rejects_duplicate_candidate_id [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify duplicate candidate_id registration is rejected by service invariants.\ndef test_register_candidate_rejects_duplicate_candidate_id():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"dup-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha1\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n with pytest.raises(ValueError, match=\"already exists\"):\n register_candidate(\n repository=repository,\n candidate_id=\"dup-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha1\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n\n# #endregion test_register_candidate_rejects_duplicate_candidate_id\n\n\n# #region test_register_candidate_rejects_malformed_artifact_input [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify candidate registration rejects artifact payloads missing required fields.\ndef test_register_candidate_rejects_malformed_artifact_input():\n repository = CleanReleaseRepository()\n bad_artifacts = [{\"id\": \"art-1\", \"path\": \"bin/app\", \"size\": 42}] # missing sha256\n\n with pytest.raises(ValueError, match=\"missing required field 'sha256'\"):\n register_candidate(\n repository=repository,\n candidate_id=\"bad-art-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha2\",\n created_by=\"operator\",\n artifacts=bad_artifacts,\n )\n\n\n# #endregion test_register_candidate_rejects_malformed_artifact_input\n\n\n# #region test_register_candidate_rejects_empty_artifact_set [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify candidate registration rejects empty artifact collections.\ndef test_register_candidate_rejects_empty_artifact_set():\n repository = CleanReleaseRepository()\n\n with pytest.raises(ValueError, match=\"artifacts must not be empty\"):\n register_candidate(\n repository=repository,\n candidate_id=\"empty-art-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha3\",\n created_by=\"operator\",\n artifacts=[],\n )\n\n\n# #endregion test_register_candidate_rejects_empty_artifact_set\n\n\n# #region test_manifest_service_rebuild_creates_new_version [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify repeated manifest build creates a new incremented immutable version.\ndef test_manifest_service_rebuild_creates_new_version():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"manifest-version-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha10\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n first = build_manifest_snapshot(\n repository=repository, candidate_id=\"manifest-version-1\", created_by=\"operator\"\n )\n second = build_manifest_snapshot(\n repository=repository, candidate_id=\"manifest-version-1\", created_by=\"operator\"\n )\n\n assert first.manifest_version == 1\n assert second.manifest_version == 2\n assert first.id != second.id\n\n\n# #endregion test_manifest_service_rebuild_creates_new_version\n\n\n# #region test_manifest_service_existing_manifest_cannot_be_mutated [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify existing manifest snapshot remains immutable when rebuilding newer manifest version.\ndef test_manifest_service_existing_manifest_cannot_be_mutated():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha11\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n created = build_manifest_snapshot(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n created_by=\"operator\",\n )\n original_digest = created.manifest_digest\n\n rebuilt = build_manifest_snapshot(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n created_by=\"operator\",\n )\n old_manifest = repository.get_manifest(created.id)\n\n assert old_manifest is not None\n assert old_manifest.manifest_digest == original_digest\n assert old_manifest.id == created.id\n assert rebuilt.id != created.id\n\n\n# #endregion test_manifest_service_existing_manifest_cannot_be_mutated\n\n\n# #region test_manifest_service_rejects_missing_candidate [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify manifest build fails with missing candidate identifier.\ndef test_manifest_service_rejects_missing_candidate():\n repository = CleanReleaseRepository()\n\n with pytest.raises(ValueError, match=\"not found\"):\n build_manifest_snapshot(\n repository=repository,\n candidate_id=\"missing-candidate\",\n created_by=\"operator\",\n )\n\n\n# #endregion test_manifest_service_rejects_missing_candidate\n# #endregion test_candidate_manifest_services\n" + "body": "# #region test_candidate_manifest_services [C:2] [TYPE Module]\n# @RELATION BINDS_TO -> [SrcRoot]\n# @PURPOSE: Test lifecycle and manifest versioning for release candidates.\n# @LAYER Tests\n\nfrom datetime import UTC, datetime\n\nimport pytest\nfrom sqlalchemy import create_engine, event\nfrom sqlalchemy.orm import sessionmaker\n\nfrom src.core.database import Base\nfrom src.models.clean_release import (\n DistributionManifest,\n ReleaseCandidate,\n)\nfrom src.services.clean_release.candidate_service import register_candidate\nfrom src.services.clean_release.enums import CandidateStatus\nfrom src.services.clean_release.manifest_service import build_manifest_snapshot\nfrom src.services.clean_release.repository import CleanReleaseRepository\n\n\n@pytest.fixture\ndef db_session():\n engine = create_engine(\"sqlite:///:memory:\")\n event.listen(engine, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n Base.metadata.create_all(engine)\n Session = sessionmaker(bind=engine)\n session = Session()\n # Create FK parent for test_manifest_versioning_and_immutability\n existing = session.query(ReleaseCandidate).filter(ReleaseCandidate.id == 'test-candidate-2').first()\n if not existing:\n session.add(ReleaseCandidate(\n id='test-candidate-2', version='1.0.0',\n source_snapshot_ref='ref1', created_by='operator',\n status=CandidateStatus.DRAFT\n ))\n session.commit()\n yield session\n session.close()\n\n\n# #region test_candidate_lifecycle_transitions [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify release candidate allows legal status transitions and rejects forbidden back-transitions.\ndef test_candidate_lifecycle_transitions(db_session):\n \"\"\"\n @PURPOSE: Verify legal state transitions for ReleaseCandidate.\n \"\"\"\n candidate = ReleaseCandidate(\n id=\"test-candidate-1\",\n name=\"Test Candidate\",\n version=\"1.0.0\",\n source_snapshot_ref=\"ref-1\",\n created_by=\"operator\",\n status=CandidateStatus.DRAFT,\n )\n db_session.add(candidate)\n db_session.commit()\n\n # Valid transition: DRAFT -> PREPARED\n candidate.transition_to(CandidateStatus.PREPARED)\n assert candidate.status == CandidateStatus.PREPARED\n\n # Invalid transition: PREPARED -> DRAFT (should raise IllegalTransitionError)\n from src.services.clean_release.exceptions import IllegalTransitionError\n\n with pytest.raises(IllegalTransitionError, match=\"Forbidden transition\"):\n candidate.transition_to(CandidateStatus.DRAFT)\n\n\n# #endregion test_candidate_lifecycle_transitions\n\n\n# #region test_manifest_versioning_and_immutability [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify manifest versions increment monotonically and older snapshots remain queryable.\ndef test_manifest_versioning_and_immutability(db_session):\n \"\"\"\n @PURPOSE: Verify manifest versioning and immutability invariants.\n \"\"\"\n candidate_id = \"test-candidate-2\"\n\n # Create version 1\n m1 = DistributionManifest(\n id=\"manifest-v1\",\n candidate_id=candidate_id,\n manifest_version=1,\n manifest_digest=\"hash1\",\n artifacts_digest=\"hash1\",\n source_snapshot_ref=\"ref1\",\n content_json={},\n created_at=datetime.now(UTC),\n created_by=\"operator\",\n )\n db_session.add(m1)\n\n # Create version 2\n m2 = DistributionManifest(\n id=\"manifest-v2\",\n candidate_id=candidate_id,\n manifest_version=2,\n manifest_digest=\"hash2\",\n artifacts_digest=\"hash2\",\n source_snapshot_ref=\"ref1\",\n content_json={},\n created_at=datetime.now(UTC),\n created_by=\"operator\",\n )\n db_session.add(m2)\n db_session.commit()\n\n latest = (\n db_session.query(DistributionManifest)\n .filter_by(candidate_id=candidate_id)\n .order_by(DistributionManifest.manifest_version.desc())\n .first()\n )\n assert latest.manifest_version == 2\n assert latest.id == \"manifest-v2\"\n\n all_manifests = (\n db_session.query(DistributionManifest)\n .filter_by(candidate_id=candidate_id)\n .all()\n )\n assert len(all_manifests) == 2\n\n\n# #endregion test_manifest_versioning_and_immutability\n\n\n# #region _valid_artifacts [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Provide canonical valid artifact payload used by candidate registration tests.\ndef _valid_artifacts():\n return [\n {\n \"id\": \"art-1\",\n \"path\": \"bin/app\",\n \"sha256\": \"abc123\",\n \"size\": 42,\n }\n ]\n\n\n# #endregion _valid_artifacts\n\n\n# #region test_register_candidate_rejects_duplicate_candidate_id [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify duplicate candidate_id registration is rejected by service invariants.\ndef test_register_candidate_rejects_duplicate_candidate_id():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"dup-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha1\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n with pytest.raises(ValueError, match=\"already exists\"):\n register_candidate(\n repository=repository,\n candidate_id=\"dup-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha1\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n\n# #endregion test_register_candidate_rejects_duplicate_candidate_id\n\n\n# #region test_register_candidate_rejects_malformed_artifact_input [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify candidate registration rejects artifact payloads missing required fields.\ndef test_register_candidate_rejects_malformed_artifact_input():\n repository = CleanReleaseRepository()\n bad_artifacts = [{\"id\": \"art-1\", \"path\": \"bin/app\", \"size\": 42}] # missing sha256\n\n with pytest.raises(ValueError, match=\"missing required field 'sha256'\"):\n register_candidate(\n repository=repository,\n candidate_id=\"bad-art-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha2\",\n created_by=\"operator\",\n artifacts=bad_artifacts,\n )\n\n\n# #endregion test_register_candidate_rejects_malformed_artifact_input\n\n\n# #region test_register_candidate_rejects_empty_artifact_set [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify candidate registration rejects empty artifact collections.\ndef test_register_candidate_rejects_empty_artifact_set():\n repository = CleanReleaseRepository()\n\n with pytest.raises(ValueError, match=\"artifacts must not be empty\"):\n register_candidate(\n repository=repository,\n candidate_id=\"empty-art-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha3\",\n created_by=\"operator\",\n artifacts=[],\n )\n\n\n# #endregion test_register_candidate_rejects_empty_artifact_set\n\n\n# #region test_manifest_service_rebuild_creates_new_version [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify repeated manifest build creates a new incremented immutable version.\ndef test_manifest_service_rebuild_creates_new_version():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"manifest-version-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha10\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n first = build_manifest_snapshot(\n repository=repository, candidate_id=\"manifest-version-1\", created_by=\"operator\"\n )\n second = build_manifest_snapshot(\n repository=repository, candidate_id=\"manifest-version-1\", created_by=\"operator\"\n )\n\n assert first.manifest_version == 1\n assert second.manifest_version == 2\n assert first.id != second.id\n\n\n# #endregion test_manifest_service_rebuild_creates_new_version\n\n\n# #region test_manifest_service_existing_manifest_cannot_be_mutated [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify existing manifest snapshot remains immutable when rebuilding newer manifest version.\ndef test_manifest_service_existing_manifest_cannot_be_mutated():\n repository = CleanReleaseRepository()\n register_candidate(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n version=\"1.0.0\",\n source_snapshot_ref=\"git:sha11\",\n created_by=\"operator\",\n artifacts=_valid_artifacts(),\n )\n\n created = build_manifest_snapshot(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n created_by=\"operator\",\n )\n original_digest = created.manifest_digest\n\n rebuilt = build_manifest_snapshot(\n repository=repository,\n candidate_id=\"manifest-immutable-1\",\n created_by=\"operator\",\n )\n old_manifest = repository.get_manifest(created.id)\n\n assert old_manifest is not None\n assert old_manifest.manifest_digest == original_digest\n assert old_manifest.id == created.id\n assert rebuilt.id != created.id\n\n\n# #endregion test_manifest_service_existing_manifest_cannot_be_mutated\n\n\n# #region test_manifest_service_rejects_missing_candidate [C:2] [TYPE Function]\n# @RELATION BINDS_TO -> [test_candidate_manifest_services]\n# @PURPOSE: Verify manifest build fails with missing candidate identifier.\ndef test_manifest_service_rejects_missing_candidate():\n repository = CleanReleaseRepository()\n\n with pytest.raises(ValueError, match=\"not found\"):\n build_manifest_snapshot(\n repository=repository,\n candidate_id=\"missing-candidate\",\n created_by=\"operator\",\n )\n\n\n# #endregion test_manifest_service_rejects_missing_candidate\n# #endregion test_candidate_manifest_services\n" }, { "contract_id": "test_candidate_lifecycle_transitions", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 33, - "end_line": 62, + "start_line": 43, + "end_line": 72, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50554,8 +50911,8 @@ "contract_id": "test_manifest_versioning_and_immutability", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 65, - "end_line": 120, + "start_line": 75, + "end_line": 130, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50579,8 +50936,8 @@ "contract_id": "_valid_artifacts", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 123, - "end_line": 137, + "start_line": 133, + "end_line": 147, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50604,8 +50961,8 @@ "contract_id": "test_register_candidate_rejects_duplicate_candidate_id", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 140, - "end_line": 165, + "start_line": 150, + "end_line": 175, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50629,8 +50986,8 @@ "contract_id": "test_register_candidate_rejects_malformed_artifact_input", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 168, - "end_line": 186, + "start_line": 178, + "end_line": 196, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50654,8 +51011,8 @@ "contract_id": "test_register_candidate_rejects_empty_artifact_set", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 189, - "end_line": 206, + "start_line": 199, + "end_line": 216, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50679,8 +51036,8 @@ "contract_id": "test_manifest_service_rebuild_creates_new_version", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 209, - "end_line": 235, + "start_line": 219, + "end_line": 245, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50704,8 +51061,8 @@ "contract_id": "test_manifest_service_existing_manifest_cannot_be_mutated", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 238, - "end_line": 272, + "start_line": 248, + "end_line": 282, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -50729,8 +51086,8 @@ "contract_id": "test_manifest_service_rejects_missing_candidate", "contract_type": "Function", "file_path": "backend/tests/services/clean_release/test_candidate_manifest_services.py", - "start_line": 275, - "end_line": 289, + "start_line": 285, + "end_line": 299, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52516,7 +52873,7 @@ "contract_type": "Module", "file_path": "backend/tests/test_constants_audit_fixes.py", "start_line": 1, - "end_line": 159, + "end_line": 160, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -52553,7 +52910,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestConstantsAuditFixes [C:3] [TYPE Module] [SEMANTICS test,constants,hardcoded,audit]\n# @BRIEF Verify Class 5 fix — hardcoded values extracted to named module-level constants.\n# @RELATION BINDS_TO -> [SupersetClientBase]\n# @RELATION BINDS_TO -> [LLMAnalysisService]\n# @RELATION BINDS_TO -> [DatabaseModule]\n# @RELATION BINDS_TO -> [GitServiceBase]\n# @TEST_EDGE: page_size_constant -> DEFAULT_PAGE_SIZE should be importable (RATIONALE says extracted)\n# @TEST_EDGE: timeout_constants -> Playwright/HTTP timeout constants should be defined (RATIONALE says extracted)\n# @TEST_EDGE: base_dir_constant -> BASE_DIR equivalent resolves to backend/ root\n# @TEST_EDGE: git_typo_fix -> services/git/_base.py still has \"repositorys\" at line 148 (bug)\nimport os\nimport sys\nfrom pathlib import Path\n\nimport pytest\n\nsys.path.insert(0, str(Path(__file__).parent.parent / \"src\"))\n\n\nclass TestConstantsAuditFixes:\n \"\"\"Verify Class 5 fix — named constants replace hardcoded magic values.\"\"\"\n\n # #region test_page_size_constant_exists [C:2] [TYPE Function]\n # @BRIEF DEFAULT_PAGE_SIZE contract: importable, int > 0 (not yet defined in source).\n def test_page_size_constant_exists(self):\n \"\"\"DEFAULT_PAGE_SIZE should be defined per RATIONALE comment.\n\n The RATIONALE in _base.py says 'Extracted magic number 100 into\n DEFAULT_PAGE_SIZE constant at module level' but the constant\n is NOT defined in the current source.\n \"\"\"\n try:\n from src.core.superset_client._base import DEFAULT_PAGE_SIZE\n assert isinstance(DEFAULT_PAGE_SIZE, int)\n assert DEFAULT_PAGE_SIZE > 0\n except ImportError:\n pytest.skip(\n \"DEFAULT_PAGE_SIZE is not defined in src.core.superset_client._base. \"\n \"RATIONALE comment says it was extracted but the constant is missing. \"\n \"Define as: DEFAULT_PAGE_SIZE: int = 100\"\n )\n # #endregion test_page_size_constant_exists\n\n # #region test_llm_analysis_timeout_constants [C:2] [TYPE Function]\n # @BRIEF Named timeout constants should exist per RATIONALE comment (not yet defined).\n def test_llm_analysis_timeout_constants(self):\n \"\"\"Timeout constants should be defined per RATIONALE comment.\n\n The RATIONALE says they were extracted as 'named module-level constants'\n but they don't exist in the current source.\n \"\"\"\n try:\n import importlib\n mod = importlib.import_module(\"src.plugins.llm_analysis.service\")\n except Exception:\n pytest.skip(\n \"Cannot import llm_analysis.service (transitive dependency on AuthConfig \"\n \"which crashes due to pydantic-settings v2 incompatibility)\"\n )\n return\n\n expected = [\n \"PLAYWRIGHT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SHORT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SCREENSHOT_TIMEOUT_MS\",\n \"HTTP_TIMEOUT_MS\",\n \"LLM_HTTP_TIMEOUT_S\",\n ]\n missing = [c for c in expected if not hasattr(mod, c)]\n assert not missing, (\n f\"Missing timeout constants: {missing}. \"\n \"RATIONALE says they were extracted.\"\n )\n # #endregion test_llm_analysis_timeout_constants\n\n # #region test_base_dir_constant_replaces_parents [C:2] [TYPE Function]\n # @BRIEF BASE_DIR resolves to backend/ root, not __file__-dependent relative path.\n def test_base_dir_constant_replaces_parents(self):\n \"\"\"Verify BASE_DIR contract (same formula as database.py).\n\n database.py defines: BASE_DIR = Path(__file__).resolve().parent.parent.parent\n where __file__ = src/core/database.py → result = backend/ root\n \"\"\"\n db_path = Path(__file__).resolve().parent.parent / \"src\" / \"core\" / \"database.py\"\n assert db_path.exists(), f\"database.py not found at {db_path}\"\n\n # Same formula: database.py's __file__.parent.parent.parent\n base_dir = db_path.resolve().parent.parent.parent\n assert isinstance(base_dir, Path)\n assert base_dir.is_absolute()\n assert (base_dir / \"src\").is_dir(), \"BASE_DIR should point to backend/ root\"\n assert (base_dir / \"src\" / \"app.py\").exists(), \"BASE_DIR should contain src/\"\n # #endregion test_base_dir_constant_replaces_parents\n\n # #region test_git_service_repositorys_typo_regression [C:2] [TYPE Function]\n # @BRIEF services/git/_base.py still has \"repositorys\" (old typo) at line 148 — known bug.\n @pytest.mark.xfail(\n reason=\"Line 148 still uses Path('repositorys') instead of Path('repositories'). \"\n \"RATIONALE says 'Fixed typo repositorys→repositories' but it was NOT applied to line 148.\",\n )\n def test_git_service_repositorys_typo_regression(self):\n \"\"\"Verify the 'repositorys' typo is fixed in git/_base.py.\n\n Line 148 has: Path(\"repositorys\") instead of Path(\"repositories\").\n Expected: Path(\"repositorys\") is no longer used in executable code.\n \"\"\"\n git_base_path = Path(__file__).parent.parent / \"src\" / \"services\" / \"git\" / \"_base.py\"\n source = git_base_path.read_text(encoding=\"utf-8\")\n bad_lines = []\n for i, line in enumerate(source.splitlines(), 1):\n stripped = line.strip()\n if \"repositorys\" in stripped and not stripped.startswith(\"#\"):\n bad_lines.append(f\" line {i}: {stripped}\")\n assert not bad_lines, (\n f\"Hardcoded 'repositorys' found in executable code — fix not fully applied:\\n\"\n + \"\\n\".join(bad_lines)\n )\n # #endregion test_git_service_repositorys_typo_regression\n\n # #region test_git_default_repos_path_constant [C:2] [TYPE Function]\n # @BRIEF DEFAULT_GIT_REPOS_PATH should be defined per RATIONALE (not yet defined).\n def test_git_default_repos_path_constant(self):\n \"\"\"DEFAULT_GIT_REPOS_PATH should exist per RATIONALE comment.\n\n RATIONALE says it was extracted as a constant, but the source uses\n the literal string 'git_repos' in __init__ default parameter.\n \"\"\"\n try:\n from src.services.git._base import DEFAULT_GIT_REPOS_PATH\n assert isinstance(DEFAULT_GIT_REPOS_PATH, str)\n except Exception:\n pytest.skip(\n \"DEFAULT_GIT_REPOS_PATH is not defined. \"\n \"Cannot import git._base (transitive dependency on AuthConfig crash). \"\n \"Additionally, the constant was never extracted — __init__ uses literal 'git_repos'.\"\n )\n # #endregion test_git_default_repos_path_constant\n\n # #region test_superset_client_module_loads [C:2] [TYPE Function]\n # @BRIEF superset_client._base is importable (no dependency on crashing modules).\n def test_superset_client_module_loads(self):\n from src.core.superset_client._base import SupersetClientBase\n assert SupersetClientBase is not None\n # #endregion test_superset_client_module_loads\n\n # #region test_constants_are_immutable [C:2] [TYPE Function]\n # @BRIEF Module-level constants use int/str types (immutable by convention).\n def test_constants_are_immutable(self):\n \"\"\"Check that known constants in superset_client use immutable types.\"\"\"\n from src.core.superset_client._base import SupersetClientBase\n # Verify the class is defined with constants pattern\n source = Path(SupersetClientBase.__module__.replace(\".\", \"/\") + \".py\")\n src_path = Path(__file__).parent.parent / \"src\" / source\n if src_path.exists():\n content = src_path.read_text(encoding=\"utf-8\")\n # Verify PAGE_SIZE concept is documented\n assert \"page_size\" in content\n # #endregion test_constants_are_immutable\n# #endregion TestConstantsAuditFixes\n" + "body": "# #region TestConstantsAuditFixes [C:3] [TYPE Module] [SEMANTICS test,constants,hardcoded,audit]\n# @BRIEF Verify Class 5 fix — hardcoded values extracted to named module-level constants.\n# @RELATION BINDS_TO -> [SupersetClientBase]\n# @RELATION BINDS_TO -> [LLMAnalysisService]\n# @RELATION BINDS_TO -> [DatabaseModule]\n# @RELATION BINDS_TO -> [GitServiceBase]\n# @TEST_EDGE: page_size_constant -> DEFAULT_PAGE_SIZE should be importable (RATIONALE says extracted)\n# @TEST_EDGE: timeout_constants -> Playwright/HTTP timeout constants should be defined (RATIONALE says extracted)\n# @TEST_EDGE: base_dir_constant -> BASE_DIR equivalent resolves to backend/ root\n# @TEST_EDGE: git_typo_fix -> services/git/_base.py still has \"repositorys\" at line 148 (bug)\nimport os\nimport sys\nfrom pathlib import Path\n\nimport pytest\n\nsys.path.insert(0, str(Path(__file__).parent.parent / \"src\"))\n\n\nclass TestConstantsAuditFixes:\n \"\"\"Verify Class 5 fix — named constants replace hardcoded magic values.\"\"\"\n\n # #region test_page_size_constant_exists [C:2] [TYPE Function]\n # @BRIEF DEFAULT_PAGE_SIZE contract: importable, int > 0 (not yet defined in source).\n def test_page_size_constant_exists(self):\n \"\"\"DEFAULT_PAGE_SIZE should be defined per RATIONALE comment.\n\n The RATIONALE in _base.py says 'Extracted magic number 100 into\n DEFAULT_PAGE_SIZE constant at module level' but the constant\n is NOT defined in the current source.\n \"\"\"\n try:\n from src.core.superset_client._base import DEFAULT_PAGE_SIZE\n assert isinstance(DEFAULT_PAGE_SIZE, int)\n assert DEFAULT_PAGE_SIZE > 0\n except ImportError:\n pytest.skip(\n \"DEFAULT_PAGE_SIZE is not defined in src.core.superset_client._base. \"\n \"RATIONALE comment says it was extracted but the constant is missing. \"\n \"Define as: DEFAULT_PAGE_SIZE: int = 100\"\n )\n # #endregion test_page_size_constant_exists\n\n # #region test_llm_analysis_timeout_constants [C:2] [TYPE Function]\n # @BRIEF Named timeout constants should exist per RATIONALE comment (not yet defined).\n def test_llm_analysis_timeout_constants(self):\n \"\"\"Timeout constants should be defined per RATIONALE comment.\n\n The RATIONALE says they were extracted as 'named module-level constants'\n but they don't exist in the current source.\n \"\"\"\n try:\n import importlib\n mod = importlib.import_module(\"src.plugins.llm_analysis.service\")\n except Exception:\n pytest.skip(\n \"Cannot import llm_analysis.service (transitive dependency on AuthConfig \"\n \"which crashes due to pydantic-settings v2 incompatibility)\"\n )\n return\n\n expected = [\n \"PLAYWRIGHT_NAVIGATION_TIMEOUT_MS\",\n \"PLAYWRIGHT_WAIT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SHORT_TIMEOUT_MS\",\n \"HTTP_REQUEST_TIMEOUT_MS\",\n \"SCREENSHOT_SERVICE_TIMEOUT_MS\",\n \"LLM_HTTP_TIMEOUT_S\",\n ]\n missing = [c for c in expected if not hasattr(mod, c)]\n assert not missing, (\n f\"Missing timeout constants: {missing}. \"\n \"RATIONALE says they were extracted.\"\n )\n # #endregion test_llm_analysis_timeout_constants\n\n # #region test_base_dir_constant_replaces_parents [C:2] [TYPE Function]\n # @BRIEF BASE_DIR resolves to backend/ root, not __file__-dependent relative path.\n def test_base_dir_constant_replaces_parents(self):\n \"\"\"Verify BASE_DIR contract (same formula as database.py).\n\n database.py defines: BASE_DIR = Path(__file__).resolve().parent.parent.parent\n where __file__ = src/core/database.py → result = backend/ root\n \"\"\"\n db_path = Path(__file__).resolve().parent.parent / \"src\" / \"core\" / \"database.py\"\n assert db_path.exists(), f\"database.py not found at {db_path}\"\n\n # Same formula: database.py's __file__.parent.parent.parent\n base_dir = db_path.resolve().parent.parent.parent\n assert isinstance(base_dir, Path)\n assert base_dir.is_absolute()\n assert (base_dir / \"src\").is_dir(), \"BASE_DIR should point to backend/ root\"\n assert (base_dir / \"src\" / \"app.py\").exists(), \"BASE_DIR should contain src/\"\n # #endregion test_base_dir_constant_replaces_parents\n\n # #region test_git_service_repositorys_typo_regression [C:2] [TYPE Function]\n # @BRIEF services/git/_base.py still has \"repositorys\" (old typo) at line 148 — known bug.\n @pytest.mark.xfail(\n reason=\"Line 148 still uses Path('repositorys') instead of Path('repositories'). \"\n \"RATIONALE says 'Fixed typo repositorys→repositories' but it was NOT applied to line 148.\",\n )\n def test_git_service_repositorys_typo_regression(self):\n \"\"\"Verify the 'repositorys' typo is fixed in git/_base.py.\n\n Line 148 has: Path(\"repositorys\") instead of Path(\"repositories\").\n Expected: Path(\"repositorys\") is no longer used in executable code.\n \"\"\"\n git_base_path = Path(__file__).parent.parent / \"src\" / \"services\" / \"git\" / \"_base.py\"\n source = git_base_path.read_text(encoding=\"utf-8\")\n bad_lines = []\n for i, line in enumerate(source.splitlines(), 1):\n stripped = line.strip()\n if \"repositorys\" in stripped and not stripped.startswith(\"#\"):\n bad_lines.append(f\" line {i}: {stripped}\")\n assert not bad_lines, (\n f\"Hardcoded 'repositorys' found in executable code — fix not fully applied:\\n\"\n + \"\\n\".join(bad_lines)\n )\n # #endregion test_git_service_repositorys_typo_regression\n\n # #region test_git_default_repos_path_constant [C:2] [TYPE Function]\n # @BRIEF DEFAULT_GIT_REPOS_PATH should be defined per RATIONALE (not yet defined).\n def test_git_default_repos_path_constant(self):\n \"\"\"DEFAULT_GIT_REPOS_PATH should exist per RATIONALE comment.\n\n RATIONALE says it was extracted as a constant, but the source uses\n the literal string 'git_repos' in __init__ default parameter.\n \"\"\"\n try:\n from src.services.git._base import DEFAULT_GIT_REPOS_PATH\n assert isinstance(DEFAULT_GIT_REPOS_PATH, str)\n except Exception:\n pytest.skip(\n \"DEFAULT_GIT_REPOS_PATH is not defined. \"\n \"Cannot import git._base (transitive dependency on AuthConfig crash). \"\n \"Additionally, the constant was never extracted — __init__ uses literal 'git_repos'.\"\n )\n # #endregion test_git_default_repos_path_constant\n\n # #region test_superset_client_module_loads [C:2] [TYPE Function]\n # @BRIEF superset_client._base is importable (no dependency on crashing modules).\n def test_superset_client_module_loads(self):\n from src.core.superset_client._base import SupersetClientBase\n assert SupersetClientBase is not None\n # #endregion test_superset_client_module_loads\n\n # #region test_constants_are_immutable [C:2] [TYPE Function]\n # @BRIEF Module-level constants use int/str types (immutable by convention).\n def test_constants_are_immutable(self):\n \"\"\"Check that known constants in superset_client use immutable types.\"\"\"\n from src.core.superset_client._base import SupersetClientBase\n # Verify the class is defined with constants pattern\n source = Path(SupersetClientBase.__module__.replace(\".\", \"/\") + \".py\")\n src_path = Path(__file__).parent.parent / \"src\" / source\n if src_path.exists():\n content = src_path.read_text(encoding=\"utf-8\")\n # Verify PAGE_SIZE concept is documented\n assert \"page_size\" in content\n # #endregion test_constants_are_immutable\n# #endregion TestConstantsAuditFixes\n" }, { "contract_id": "test_page_size_constant_exists", @@ -52578,7 +52935,7 @@ "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", "start_line": 44, - "end_line": 74, + "end_line": 75, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52589,14 +52946,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " # #region test_llm_analysis_timeout_constants [C:2] [TYPE Function]\n # @BRIEF Named timeout constants should exist per RATIONALE comment (not yet defined).\n def test_llm_analysis_timeout_constants(self):\n \"\"\"Timeout constants should be defined per RATIONALE comment.\n\n The RATIONALE says they were extracted as 'named module-level constants'\n but they don't exist in the current source.\n \"\"\"\n try:\n import importlib\n mod = importlib.import_module(\"src.plugins.llm_analysis.service\")\n except Exception:\n pytest.skip(\n \"Cannot import llm_analysis.service (transitive dependency on AuthConfig \"\n \"which crashes due to pydantic-settings v2 incompatibility)\"\n )\n return\n\n expected = [\n \"PLAYWRIGHT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SHORT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SCREENSHOT_TIMEOUT_MS\",\n \"HTTP_TIMEOUT_MS\",\n \"LLM_HTTP_TIMEOUT_S\",\n ]\n missing = [c for c in expected if not hasattr(mod, c)]\n assert not missing, (\n f\"Missing timeout constants: {missing}. \"\n \"RATIONALE says they were extracted.\"\n )\n # #endregion test_llm_analysis_timeout_constants\n" + "body": " # #region test_llm_analysis_timeout_constants [C:2] [TYPE Function]\n # @BRIEF Named timeout constants should exist per RATIONALE comment (not yet defined).\n def test_llm_analysis_timeout_constants(self):\n \"\"\"Timeout constants should be defined per RATIONALE comment.\n\n The RATIONALE says they were extracted as 'named module-level constants'\n but they don't exist in the current source.\n \"\"\"\n try:\n import importlib\n mod = importlib.import_module(\"src.plugins.llm_analysis.service\")\n except Exception:\n pytest.skip(\n \"Cannot import llm_analysis.service (transitive dependency on AuthConfig \"\n \"which crashes due to pydantic-settings v2 incompatibility)\"\n )\n return\n\n expected = [\n \"PLAYWRIGHT_NAVIGATION_TIMEOUT_MS\",\n \"PLAYWRIGHT_WAIT_TIMEOUT_MS\",\n \"PLAYWRIGHT_SHORT_TIMEOUT_MS\",\n \"HTTP_REQUEST_TIMEOUT_MS\",\n \"SCREENSHOT_SERVICE_TIMEOUT_MS\",\n \"LLM_HTTP_TIMEOUT_S\",\n ]\n missing = [c for c in expected if not hasattr(mod, c)]\n assert not missing, (\n f\"Missing timeout constants: {missing}. \"\n \"RATIONALE says they were extracted.\"\n )\n # #endregion test_llm_analysis_timeout_constants\n" }, { "contract_id": "test_base_dir_constant_replaces_parents", "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", - "start_line": 76, - "end_line": 93, + "start_line": 77, + "end_line": 94, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52613,8 +52970,8 @@ "contract_id": "test_git_service_repositorys_typo_regression", "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", - "start_line": 95, - "end_line": 118, + "start_line": 96, + "end_line": 119, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52631,8 +52988,8 @@ "contract_id": "test_git_default_repos_path_constant", "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", - "start_line": 120, - "end_line": 137, + "start_line": 121, + "end_line": 138, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52649,8 +53006,8 @@ "contract_id": "test_superset_client_module_loads", "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", - "start_line": 139, - "end_line": 144, + "start_line": 140, + "end_line": 145, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52667,8 +53024,8 @@ "contract_id": "test_constants_are_immutable", "contract_type": "Function", "file_path": "backend/tests/test_constants_audit_fixes.py", - "start_line": 146, - "end_line": 158, + "start_line": 147, + "end_line": 159, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52934,7 +53291,7 @@ "contract_type": "Module", "file_path": "backend/tests/test_dashboards_api.py", "start_line": 1, - "end_line": 587, + "end_line": 605, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52960,14 +53317,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestDashboardsApi [C:2] [TYPE Module]\n# @RELATION BINDS_TO ->[DashboardsApi]\n# @PURPOSE: Comprehensive contract-driven tests for Dashboard Hub API\n# @LAYER Tests\n# @SEMANTICS: tests, dashboards, api, contract, remediation\nfrom datetime import UTC, datetime\nfrom unittest.mock import AsyncMock, MagicMock, patch\n\nimport pytest\nfrom fastapi.testclient import TestClient\n\nfrom src.api.routes.dashboards import (\n DashboardDetailResponse,\n DashboardsResponse,\n DashboardTaskHistoryResponse,\n DatabaseMappingsResponse,\n)\nfrom src.app import app\nfrom src.dependencies import (\n get_config_manager,\n get_current_user,\n get_mapping_service,\n get_resource_service,\n get_task_manager,\n has_permission,\n)\n\n# Global mock user\nmock_user = MagicMock()\nmock_user.username = \"testuser\"\nmock_user.roles = []\nadmin_role = MagicMock()\nadmin_role.name = \"Admin\"\nmock_user.roles.append(admin_role)\n\n\n@pytest.fixture(autouse=True)\ndef mock_deps():\n config_manager = MagicMock()\n task_manager = MagicMock()\n resource_service = MagicMock()\n mapping_service = MagicMock()\n\n app.dependency_overrides[get_config_manager] = lambda: config_manager\n app.dependency_overrides[get_task_manager] = lambda: task_manager\n app.dependency_overrides[get_resource_service] = lambda: resource_service\n app.dependency_overrides[get_mapping_service] = lambda: mapping_service\n app.dependency_overrides[get_current_user] = lambda: mock_user\n\n # Overrides for specific permission checks\n app.dependency_overrides[has_permission(\"plugin:migration\", \"READ\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"plugin:migration\", \"EXECUTE\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"plugin:backup\", \"EXECUTE\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"tasks\", \"READ\")] = lambda: mock_user\n app.dependency_overrides[has_permission(\"dashboards\", \"READ\")] = lambda: mock_user\n\n yield {\n \"config\": config_manager,\n \"task\": task_manager,\n \"resource\": resource_service,\n \"mapping\": mapping_service,\n }\n app.dependency_overrides.clear()\n\n\nclient = TestClient(app)\n\n# --- 1. get_dashboards tests ---\n\n\n# #region test_get_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_success(mock_deps):\n \"\"\"Uses @TEST_FIXTURE: dashboard_list_happy data.\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n\n # @TEST_FIXTURE: dashboard_list_happy -> {\"id\": 1, \"title\": \"Main Revenue\"}\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n return_value=[\n {\n \"id\": 1,\n \"title\": \"Main Revenue\",\n \"slug\": \"main-revenue\",\n \"git_status\": {\"branch\": \"main\", \"sync_status\": \"OK\"},\n }\n ]\n )\n\n response = client.get(\"/api/dashboards?env_id=prod&page=1&page_size=10\")\n\n assert response.status_code == 200\n data = response.json()\n\n # exhaustive @POST assertions\n assert \"dashboards\" in data\n assert len(data[\"dashboards\"]) == 1 # @TEST_FIXTURE: expected_count: 1\n assert data[\"dashboards\"][0][\"title\"] == \"Main Revenue\"\n assert data[\"total\"] == 1\n assert data[\"page\"] == 1\n assert data[\"page_size\"] == 10\n assert data[\"total_pages\"] == 1\n\n # schema validation\n DashboardsResponse(**data)\n\n\n# #endregion test_get_dashboards_success\n\n\n# #region test_get_dashboards_with_search [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_with_search(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n return_value=[\n {\"id\": 1, \"title\": \"Sales Report\", \"slug\": \"sales\"},\n {\"id\": 2, \"title\": \"Marketing\", \"slug\": \"marketing\"},\n ]\n )\n\n response = client.get(\"/api/dashboards?env_id=prod&search=sales\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"dashboards\"]) == 1\n assert data[\"dashboards\"][0][\"title\"] == \"Sales Report\"\n\n\n# #endregion test_get_dashboards_with_search\n\n\n# #region test_get_dashboards_empty [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_empty(mock_deps):\n \"\"\"@TEST_EDGE: empty_dashboards -> {env_id: 'empty_env', expected_total: 0}\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"empty_env\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(return_value=[])\n\n response = client.get(\"/api/dashboards?env_id=empty_env\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"total\"] == 0\n assert len(data[\"dashboards\"]) == 0\n assert data[\"total_pages\"] == 1\n DashboardsResponse(**data)\n\n\n# #endregion test_get_dashboards_empty\n\n\n# #region test_get_dashboards_superset_failure [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_superset_failure(mock_deps):\n \"\"\"@TEST_EDGE: external_superset_failure -> {env_id: 'bad_conn', status: 503}\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"bad_conn\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n side_effect=Exception(\"Connection refused\")\n )\n\n response = client.get(\"/api/dashboards?env_id=bad_conn\")\n assert response.status_code == 503\n assert \"Failed to fetch dashboards\" in response.json()[\"detail\"]\n\n\n# #endregion test_get_dashboards_superset_failure\n\n\n# #region test_get_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards?env_id=nonexistent\")\n assert response.status_code == 404\n assert \"Environment not found\" in response.json()[\"detail\"]\n\n\n# #endregion test_get_dashboards_env_not_found\n\n\n# #region test_get_dashboards_invalid_pagination [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_invalid_pagination(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n\n # page < 1\n assert client.get(\"/api/dashboards?env_id=prod&page=0\").status_code == 400\n assert client.get(\"/api/dashboards?env_id=prod&page=-1\").status_code == 400\n\n # page_size < 1\n assert client.get(\"/api/dashboards?env_id=prod&page_size=0\").status_code == 400\n\n # page_size > 100\n assert client.get(\"/api/dashboards?env_id=prod&page_size=101\").status_code == 400\n\n\n# --- 2. get_database_mappings tests ---\n\n# #endregion test_get_dashboards_invalid_pagination\n\n\n# #region test_get_database_mappings_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_database_mappings_success(mock_deps):\n mock_s = MagicMock()\n mock_s.id = \"s\"\n mock_t = MagicMock()\n mock_t.id = \"t\"\n mock_deps[\"config\"].get_environments.return_value = [mock_s, mock_t]\n\n mock_deps[\"mapping\"].get_suggestions = AsyncMock(\n return_value=[{\"source_db\": \"src\", \"target_db\": \"dst\", \"confidence\": 0.9}]\n )\n response = client.get(\"/api/dashboards/db-mappings?source_env_id=s&target_env_id=t\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"mappings\"]) == 1\n assert data[\"mappings\"][0][\"confidence\"] == 0.9\n DatabaseMappingsResponse(**data)\n\n\n# #endregion test_get_database_mappings_success\n\n\n# #region test_get_database_mappings_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_database_mappings_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\n \"/api/dashboards/db-mappings?source_env_id=ghost&target_env_id=t\"\n )\n assert response.status_code == 404\n\n\n# --- 3. get_dashboard_detail tests ---\n\n# #endregion test_get_database_mappings_env_not_found\n\n\n# #region test_get_dashboard_detail_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_detail_success(mock_deps):\n with patch(\"src.api.routes.dashboards.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n\n mock_client = MagicMock()\n detail_payload = {\n \"id\": 42,\n \"title\": \"Detail\",\n \"charts\": [],\n \"datasets\": [],\n \"chart_count\": 0,\n \"dataset_count\": 0,\n }\n mock_client.get_dashboard_detail.return_value = detail_payload\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"id\"] == 42\n DashboardDetailResponse(**data)\n\n\n# #endregion test_get_dashboard_detail_success\n\n\n# #region test_get_dashboard_detail_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_detail_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards/42?env_id=missing\")\n assert response.status_code == 404\n\n\n# --- 4. get_dashboard_tasks_history tests ---\n\n# #endregion test_get_dashboard_detail_env_not_found\n\n\n# #region test_get_dashboard_tasks_history_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_tasks_history_success(mock_deps):\n now = datetime.now(UTC)\n task1 = MagicMock(\n id=\"t1\",\n plugin_id=\"superset-backup\",\n status=\"SUCCESS\",\n started_at=now,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n mock_deps[\"task\"].get_all_tasks.return_value = [task1]\n\n response = client.get(\"/api/dashboards/42/tasks?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"dashboard_id\"] == 42\n assert len(data[\"items\"]) == 1\n DashboardTaskHistoryResponse(**data)\n\n\n# #endregion test_get_dashboard_tasks_history_success\n\n\n# #region test_get_dashboard_tasks_history_sorting [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_tasks_history_sorting(mock_deps):\n \"\"\"@POST: Response contains sorted task history (newest first).\"\"\"\n from datetime import timedelta\n\n now = datetime.now(UTC)\n older = now - timedelta(hours=2)\n newest = now\n\n task_old = MagicMock(\n id=\"t-old\",\n plugin_id=\"superset-backup\",\n status=\"SUCCESS\",\n started_at=older,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n task_new = MagicMock(\n id=\"t-new\",\n plugin_id=\"superset-backup\",\n status=\"RUNNING\",\n started_at=newest,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n\n # Provide in wrong order to verify the endpoint sorts\n mock_deps[\"task\"].get_all_tasks.return_value = [task_old, task_new]\n\n response = client.get(\"/api/dashboards/42/tasks?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"items\"]) == 2\n # Newest first\n assert data[\"items\"][0][\"id\"] == \"t-new\"\n assert data[\"items\"][1][\"id\"] == \"t-old\"\n\n\n# --- 5. get_dashboard_thumbnail tests ---\n\n# #endregion test_get_dashboard_tasks_history_sorting\n\n\n# #region test_get_dashboard_thumbnail_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_success(mock_deps):\n with patch(\"src.api.routes.dashboards.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n mock_response = MagicMock(\n status_code=200, content=b\"img\", headers={\"Content-Type\": \"image/png\"}\n )\n mock_client.network.request.side_effect = (\n lambda method, endpoint, **kw: {\"image_url\": \"url\"}\n if method == \"POST\"\n else mock_response\n )\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 200\n assert response.content == b\"img\"\n\n\n# #endregion test_get_dashboard_thumbnail_success\n\n\n# #region test_get_dashboard_thumbnail_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=missing\")\n assert response.status_code == 404\n\n\n# #endregion test_get_dashboard_thumbnail_env_not_found\n\n\n# #region test_get_dashboard_thumbnail_202 [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_202(mock_deps):\n \"\"\"@POST: Returns 202 when thumbnail is being prepared by Superset.\"\"\"\n with patch(\"src.api.routes.dashboards.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n\n # POST cache_dashboard_screenshot returns image_url\n mock_client.network.request.side_effect = [\n {\"image_url\": \"/api/v1/dashboard/42/thumbnail/abc123/\"}, # POST\n MagicMock(\n status_code=202,\n json=lambda: {\"message\": \"Thumbnail is being generated\"},\n headers={\"Content-Type\": \"application/json\"},\n ), # GET thumbnail -> 202\n ]\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 202\n assert \"Thumbnail is being generated\" in response.json()[\"message\"]\n\n\n# --- 6. migrate_dashboards tests ---\n\n# #endregion test_get_dashboard_thumbnail_202\n\n\n# #region test_migrate_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_success(mock_deps):\n mock_s = MagicMock()\n mock_s.id = \"s\"\n mock_t = MagicMock()\n mock_t.id = \"t\"\n mock_deps[\"config\"].get_environments.return_value = [mock_s, mock_t]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"task-123\"))\n\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"s\", \"target_env_id\": \"t\", \"dashboard_ids\": [1]},\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"task-123\"\n\n\n# #endregion test_migrate_dashboards_success\n\n\n# #region test_migrate_dashboards_pre_checks [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_pre_checks(mock_deps):\n # Missing IDs\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"s\", \"target_env_id\": \"t\", \"dashboard_ids\": []},\n )\n assert response.status_code == 400\n assert \"At least one dashboard ID must be provided\" in response.json()[\"detail\"]\n\n\n# #endregion test_migrate_dashboards_pre_checks\n\n\n# #region test_migrate_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_env_not_found(mock_deps):\n \"\"\"@PRE: source_env_id and target_env_id are valid environment IDs.\"\"\"\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"ghost\", \"target_env_id\": \"t\", \"dashboard_ids\": [1]},\n )\n assert response.status_code == 404\n assert \"Source environment not found\" in response.json()[\"detail\"]\n\n\n# --- 7. backup_dashboards tests ---\n\n# #endregion test_migrate_dashboards_env_not_found\n\n\n# #region test_backup_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_success(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"backup-123\"))\n\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"prod\", \"dashboard_ids\": [1]}\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"backup-123\"\n\n\n# #endregion test_backup_dashboards_success\n\n\n# #region test_backup_dashboards_pre_checks [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_pre_checks(mock_deps):\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"prod\", \"dashboard_ids\": []}\n )\n assert response.status_code == 400\n\n\n# #endregion test_backup_dashboards_pre_checks\n\n\n# #region test_backup_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_env_not_found(mock_deps):\n \"\"\"@PRE: env_id is a valid environment ID.\"\"\"\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"ghost\", \"dashboard_ids\": [1]}\n )\n assert response.status_code == 404\n assert \"Environment not found\" in response.json()[\"detail\"]\n\n\n# #endregion test_backup_dashboards_env_not_found\n\n\n# #region test_backup_dashboards_with_schedule [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_with_schedule(mock_deps):\n \"\"\"@POST: If schedule is provided, a scheduled task is created.\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"sched-456\"))\n\n response = client.post(\n \"/api/dashboards/backup\",\n json={\"env_id\": \"prod\", \"dashboard_ids\": [1], \"schedule\": \"0 0 * * *\"},\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"sched-456\"\n\n # Verify schedule was propagated to create_task\n call_kwargs = mock_deps[\"task\"].create_task.call_args\n task_params = call_kwargs.kwargs.get(\"params\") or call_kwargs[1].get(\"params\", {})\n assert task_params[\"schedule\"] == \"0 0 * * *\"\n\n\n# --- 8. Internal logic: _task_matches_dashboard ---\n# #endregion test_backup_dashboards_with_schedule\n\nfrom src.api.routes.dashboards._projection import _task_matches_dashboard\n\n\n# #region test_task_matches_dashboard_logic [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_task_matches_dashboard_logic():\n task = MagicMock(\n plugin_id=\"superset-backup\", params={\"dashboards\": [42], \"env\": \"prod\"}\n )\n assert _task_matches_dashboard(task, 42, \"prod\") is True\n assert _task_matches_dashboard(task, 43, \"prod\") is False\n assert _task_matches_dashboard(task, 42, \"dev\") is False\n\n llm_task = MagicMock(\n plugin_id=\"llm_dashboard_validation\",\n params={\"dashboard_id\": 42, \"environment_id\": \"prod\"},\n )\n assert _task_matches_dashboard(llm_task, 42, \"prod\") is True\n assert _task_matches_dashboard(llm_task, 42, None) is True\n\n\n# #endregion test_task_matches_dashboard_logic\n# #endregion TestDashboardsApi\n" + "body": "# #region TestDashboardsApi [C:2] [TYPE Module]\n# @RELATION BINDS_TO ->[DashboardsApi]\n# @PURPOSE: Comprehensive contract-driven tests for Dashboard Hub API\n# @LAYER Tests\n# @SEMANTICS: tests, dashboards, api, contract, remediation\nfrom datetime import UTC, datetime\nfrom unittest.mock import AsyncMock, MagicMock, patch\n\nimport pytest\nfrom fastapi.testclient import TestClient\n\nfrom src.api.routes.dashboards import (\n DashboardDetailResponse,\n DashboardsResponse,\n DashboardTaskHistoryResponse,\n DatabaseMappingsResponse,\n)\nfrom src.app import app\nfrom src.dependencies import (\n get_config_manager,\n get_current_user,\n get_mapping_service,\n get_resource_service,\n get_task_manager,\n has_permission,\n)\n\n# Global mock user\nmock_user = MagicMock()\nmock_user.username = \"testuser\"\nmock_user.roles = []\nadmin_role = MagicMock()\nadmin_role.name = \"Admin\"\nmock_user.roles.append(admin_role)\n\n\n@pytest.fixture(autouse=True)\ndef mock_deps():\n config_manager = MagicMock()\n task_manager = MagicMock()\n resource_service = MagicMock()\n mapping_service = MagicMock()\n\n app.dependency_overrides[get_config_manager] = lambda: config_manager\n app.dependency_overrides[get_task_manager] = lambda: task_manager\n app.dependency_overrides[get_resource_service] = lambda: resource_service\n app.dependency_overrides[get_mapping_service] = lambda: mapping_service\n app.dependency_overrides[get_current_user] = lambda: mock_user\n\n # Overrides for specific permission checks\n app.dependency_overrides[has_permission(\"plugin:migration\", \"READ\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"plugin:migration\", \"EXECUTE\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"plugin:backup\", \"EXECUTE\")] = (\n lambda: mock_user\n )\n app.dependency_overrides[has_permission(\"tasks\", \"READ\")] = lambda: mock_user\n app.dependency_overrides[has_permission(\"dashboards\", \"READ\")] = lambda: mock_user\n\n yield {\n \"config\": config_manager,\n \"task\": task_manager,\n \"resource\": resource_service,\n \"mapping\": mapping_service,\n }\n app.dependency_overrides.clear()\n\n\nclient = TestClient(app)\n\n# --- 1. get_dashboards tests ---\n\n\n# #region test_get_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_success(mock_deps):\n \"\"\"Uses @TEST_FIXTURE: dashboard_list_happy data.\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n\n # @TEST_FIXTURE: dashboard_list_happy -> {\"id\": 1, \"title\": \"Main Revenue\"}\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n return_value=[\n {\n \"id\": 1,\n \"title\": \"Main Revenue\",\n \"slug\": \"main-revenue\",\n \"git_status\": {\"branch\": \"main\", \"sync_status\": \"OK\"},\n }\n ]\n )\n\n response = client.get(\"/api/dashboards?env_id=prod&page=1&page_size=10\")\n\n assert response.status_code == 200\n data = response.json()\n\n # exhaustive @POST assertions\n assert \"dashboards\" in data\n assert len(data[\"dashboards\"]) == 1 # @TEST_FIXTURE: expected_count: 1\n assert data[\"dashboards\"][0][\"title\"] == \"Main Revenue\"\n assert data[\"total\"] == 1\n assert data[\"page\"] == 1\n assert data[\"page_size\"] == 10\n assert data[\"total_pages\"] == 1\n\n # schema validation\n DashboardsResponse(**data)\n\n\n# #endregion test_get_dashboards_success\n\n\n# #region test_get_dashboards_with_search [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_with_search(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n return_value=[\n {\"id\": 1, \"title\": \"Sales Report\", \"slug\": \"sales\"},\n {\"id\": 2, \"title\": \"Marketing\", \"slug\": \"marketing\"},\n ]\n )\n\n response = client.get(\"/api/dashboards?env_id=prod&search=sales\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"dashboards\"]) == 1\n assert data[\"dashboards\"][0][\"title\"] == \"Sales Report\"\n\n\n# #endregion test_get_dashboards_with_search\n\n\n# #region test_get_dashboards_empty [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_empty(mock_deps):\n \"\"\"@TEST_EDGE: empty_dashboards -> {env_id: 'empty_env', expected_total: 0}\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"empty_env\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(return_value=[])\n\n response = client.get(\"/api/dashboards?env_id=empty_env\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"total\"] == 0\n assert len(data[\"dashboards\"]) == 0\n assert data[\"total_pages\"] == 1\n DashboardsResponse(**data)\n\n\n# #endregion test_get_dashboards_empty\n\n\n# #region test_get_dashboards_superset_failure [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_superset_failure(mock_deps):\n \"\"\"@TEST_EDGE: external_superset_failure -> {env_id: 'bad_conn', status: 503}\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"bad_conn\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].get_all_tasks.return_value = []\n mock_deps[\"resource\"].get_dashboards_with_status = AsyncMock(\n side_effect=Exception(\"Connection refused\")\n )\n\n response = client.get(\"/api/dashboards?env_id=bad_conn\")\n assert response.status_code == 503\n assert \"Failed to fetch dashboards\" in response.json()[\"detail\"]\n\n\n# #endregion test_get_dashboards_superset_failure\n\n\n# #region test_get_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards?env_id=nonexistent\")\n assert response.status_code == 404\n assert \"Environment not found\" in response.json()[\"detail\"]\n\n\n# #endregion test_get_dashboards_env_not_found\n\n\n# #region test_get_dashboards_invalid_pagination [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboards_invalid_pagination(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n\n # page < 1\n assert client.get(\"/api/dashboards?env_id=prod&page=0\").status_code == 400\n assert client.get(\"/api/dashboards?env_id=prod&page=-1\").status_code == 400\n\n # page_size < 1\n assert client.get(\"/api/dashboards?env_id=prod&page_size=0\").status_code == 400\n\n # page_size > 100\n assert client.get(\"/api/dashboards?env_id=prod&page_size=101\").status_code == 400\n\n\n# --- 2. get_database_mappings tests ---\n\n# #endregion test_get_dashboards_invalid_pagination\n\n\n# #region test_get_database_mappings_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_database_mappings_success(mock_deps):\n mock_s = MagicMock()\n mock_s.id = \"s\"\n mock_t = MagicMock()\n mock_t.id = \"t\"\n mock_deps[\"config\"].get_environments.return_value = [mock_s, mock_t]\n\n mock_deps[\"mapping\"].get_suggestions = AsyncMock(\n return_value=[{\"source_db\": \"src\", \"target_db\": \"dst\", \"confidence\": 0.9}]\n )\n response = client.get(\"/api/dashboards/db-mappings?source_env_id=s&target_env_id=t\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"mappings\"]) == 1\n assert data[\"mappings\"][0][\"confidence\"] == 0.9\n DatabaseMappingsResponse(**data)\n\n\n# #endregion test_get_database_mappings_success\n\n\n# #region test_get_database_mappings_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_database_mappings_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\n \"/api/dashboards/db-mappings?source_env_id=ghost&target_env_id=t\"\n )\n assert response.status_code == 404\n\n\n# --- 3. get_dashboard_detail tests ---\n\n# #endregion test_get_database_mappings_env_not_found\n\n\n# #region test_get_dashboard_detail_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_detail_success(mock_deps):\n with patch(\"src.api.routes.dashboards._detail_routes.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_env.name = \"Production\"\n mock_env.url = \"http://localhost:8088\"\n mock_env.username = \"admin\"\n mock_env.password = \"admin\"\n mock_env.verify_ssl = True\n mock_env.timeout = 30\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n\n mock_client = MagicMock()\n detail_payload = {\n \"id\": 42,\n \"title\": \"Detail\",\n \"charts\": [],\n \"datasets\": [],\n \"chart_count\": 0,\n \"dataset_count\": 0,\n }\n mock_client.get_dashboard_detail.return_value = detail_payload\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"id\"] == 42\n DashboardDetailResponse(**data)\n\n\n# #endregion test_get_dashboard_detail_success\n\n\n# #region test_get_dashboard_detail_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_detail_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards/42?env_id=missing\")\n assert response.status_code == 404\n\n\n# --- 4. get_dashboard_tasks_history tests ---\n\n# #endregion test_get_dashboard_detail_env_not_found\n\n\n# #region test_get_dashboard_tasks_history_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_tasks_history_success(mock_deps):\n now = datetime.now(UTC)\n task1 = MagicMock(\n id=\"t1\",\n plugin_id=\"superset-backup\",\n status=\"SUCCESS\",\n started_at=now,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n mock_deps[\"task\"].get_all_tasks.return_value = [task1]\n\n response = client.get(\"/api/dashboards/42/tasks?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert data[\"dashboard_id\"] == 42\n assert len(data[\"items\"]) == 1\n DashboardTaskHistoryResponse(**data)\n\n\n# #endregion test_get_dashboard_tasks_history_success\n\n\n# #region test_get_dashboard_tasks_history_sorting [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_tasks_history_sorting(mock_deps):\n \"\"\"@POST: Response contains sorted task history (newest first).\"\"\"\n from datetime import timedelta\n\n now = datetime.now(UTC)\n older = now - timedelta(hours=2)\n newest = now\n\n task_old = MagicMock(\n id=\"t-old\",\n plugin_id=\"superset-backup\",\n status=\"SUCCESS\",\n started_at=older,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n task_new = MagicMock(\n id=\"t-new\",\n plugin_id=\"superset-backup\",\n status=\"RUNNING\",\n started_at=newest,\n finished_at=None,\n params={\"env\": \"prod\", \"dashboards\": [42]},\n result={},\n )\n\n # Provide in wrong order to verify the endpoint sorts\n mock_deps[\"task\"].get_all_tasks.return_value = [task_old, task_new]\n\n response = client.get(\"/api/dashboards/42/tasks?env_id=prod\")\n assert response.status_code == 200\n data = response.json()\n assert len(data[\"items\"]) == 2\n # Newest first\n assert data[\"items\"][0][\"id\"] == \"t-new\"\n assert data[\"items\"][1][\"id\"] == \"t-old\"\n\n\n# --- 5. get_dashboard_thumbnail tests ---\n\n# #endregion test_get_dashboard_tasks_history_sorting\n\n\n# #region test_get_dashboard_thumbnail_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_success(mock_deps):\n with patch(\"src.api.routes.dashboards._detail_routes.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_env.name = \"Production\"\n mock_env.url = \"http://localhost:8088\"\n mock_env.username = \"admin\"\n mock_env.password = \"admin\"\n mock_env.verify_ssl = True\n mock_env.timeout = 30\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n mock_response = MagicMock(\n status_code=200, content=b\"img\", headers={\"Content-Type\": \"image/png\"}\n )\n mock_client.network.request.side_effect = (\n lambda method, endpoint, **kw: {\"image_url\": \"url\"}\n if method == \"POST\"\n else mock_response\n )\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 200\n assert response.content == b\"img\"\n\n\n# #endregion test_get_dashboard_thumbnail_success\n\n\n# #region test_get_dashboard_thumbnail_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_env_not_found(mock_deps):\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=missing\")\n assert response.status_code == 404\n\n\n# #endregion test_get_dashboard_thumbnail_env_not_found\n\n\n# #region test_get_dashboard_thumbnail_202 [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_202(mock_deps):\n \"\"\"@POST: Returns 202 when thumbnail is being prepared by Superset.\"\"\"\n with patch(\"src.api.routes.dashboards._detail_routes.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_env.name = \"Production\"\n mock_env.url = \"http://localhost:8088\"\n mock_env.username = \"admin\"\n mock_env.password = \"admin\"\n mock_env.verify_ssl = True\n mock_env.timeout = 30\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n\n # POST cache_dashboard_screenshot returns image_url\n mock_client.network.request.side_effect = [\n {\"image_url\": \"/api/v1/dashboard/42/thumbnail/abc123/\"}, # POST\n MagicMock(\n status_code=202,\n json=lambda: {\"message\": \"Thumbnail is being generated\"},\n headers={\"Content-Type\": \"application/json\"},\n ), # GET thumbnail -> 202\n ]\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 202\n assert \"Thumbnail is being generated\" in response.json()[\"message\"]\n\n\n# --- 6. migrate_dashboards tests ---\n\n# #endregion test_get_dashboard_thumbnail_202\n\n\n# #region test_migrate_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_success(mock_deps):\n mock_s = MagicMock()\n mock_s.id = \"s\"\n mock_t = MagicMock()\n mock_t.id = \"t\"\n mock_deps[\"config\"].get_environments.return_value = [mock_s, mock_t]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"task-123\"))\n\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"s\", \"target_env_id\": \"t\", \"dashboard_ids\": [1]},\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"task-123\"\n\n\n# #endregion test_migrate_dashboards_success\n\n\n# #region test_migrate_dashboards_pre_checks [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_pre_checks(mock_deps):\n # Missing IDs\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"s\", \"target_env_id\": \"t\", \"dashboard_ids\": []},\n )\n assert response.status_code == 400\n assert \"At least one dashboard ID must be provided\" in response.json()[\"detail\"]\n\n\n# #endregion test_migrate_dashboards_pre_checks\n\n\n# #region test_migrate_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_migrate_dashboards_env_not_found(mock_deps):\n \"\"\"@PRE: source_env_id and target_env_id are valid environment IDs.\"\"\"\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.post(\n \"/api/dashboards/migrate\",\n json={\"source_env_id\": \"ghost\", \"target_env_id\": \"t\", \"dashboard_ids\": [1]},\n )\n assert response.status_code == 404\n assert \"Source environment not found\" in response.json()[\"detail\"]\n\n\n# --- 7. backup_dashboards tests ---\n\n# #endregion test_migrate_dashboards_env_not_found\n\n\n# #region test_backup_dashboards_success [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_success(mock_deps):\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"backup-123\"))\n\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"prod\", \"dashboard_ids\": [1]}\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"backup-123\"\n\n\n# #endregion test_backup_dashboards_success\n\n\n# #region test_backup_dashboards_pre_checks [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_pre_checks(mock_deps):\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"prod\", \"dashboard_ids\": []}\n )\n assert response.status_code == 400\n\n\n# #endregion test_backup_dashboards_pre_checks\n\n\n# #region test_backup_dashboards_env_not_found [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_env_not_found(mock_deps):\n \"\"\"@PRE: env_id is a valid environment ID.\"\"\"\n mock_deps[\"config\"].get_environments.return_value = []\n response = client.post(\n \"/api/dashboards/backup\", json={\"env_id\": \"ghost\", \"dashboard_ids\": [1]}\n )\n assert response.status_code == 404\n assert \"Environment not found\" in response.json()[\"detail\"]\n\n\n# #endregion test_backup_dashboards_env_not_found\n\n\n# #region test_backup_dashboards_with_schedule [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_backup_dashboards_with_schedule(mock_deps):\n \"\"\"@POST: If schedule is provided, a scheduled task is created.\"\"\"\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_deps[\"task\"].create_task = AsyncMock(return_value=MagicMock(id=\"sched-456\"))\n\n response = client.post(\n \"/api/dashboards/backup\",\n json={\"env_id\": \"prod\", \"dashboard_ids\": [1], \"schedule\": \"0 0 * * *\"},\n )\n assert response.status_code == 200\n assert response.json()[\"task_id\"] == \"sched-456\"\n\n # Verify schedule was propagated to create_task\n call_kwargs = mock_deps[\"task\"].create_task.call_args\n task_params = call_kwargs.kwargs.get(\"params\") or call_kwargs[1].get(\"params\", {})\n assert task_params[\"schedule\"] == \"0 0 * * *\"\n\n\n# --- 8. Internal logic: _task_matches_dashboard ---\n# #endregion test_backup_dashboards_with_schedule\n\nfrom src.api.routes.dashboards._projection import _task_matches_dashboard\n\n\n# #region test_task_matches_dashboard_logic [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_task_matches_dashboard_logic():\n task = MagicMock(\n plugin_id=\"superset-backup\", params={\"dashboards\": [42], \"env\": \"prod\"}\n )\n assert _task_matches_dashboard(task, 42, \"prod\") is True\n assert _task_matches_dashboard(task, 43, \"prod\") is False\n assert _task_matches_dashboard(task, 42, \"dev\") is False\n\n llm_task = MagicMock(\n plugin_id=\"llm_dashboard_validation\",\n params={\"dashboard_id\": 42, \"environment_id\": \"prod\"},\n )\n assert _task_matches_dashboard(llm_task, 42, \"prod\") is True\n assert _task_matches_dashboard(llm_task, 42, None) is True\n\n\n# #endregion test_task_matches_dashboard_logic\n# #endregion TestDashboardsApi\n" }, { "contract_id": "test_get_dashboard_tasks_history_success", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 301, - "end_line": 324, + "start_line": 307, + "end_line": 330, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -52990,8 +53347,8 @@ "contract_id": "test_get_dashboard_tasks_history_sorting", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 327, - "end_line": 370, + "start_line": 333, + "end_line": 376, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53014,8 +53371,8 @@ "contract_id": "test_get_dashboard_thumbnail_env_not_found", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 399, - "end_line": 407, + "start_line": 411, + "end_line": 419, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53038,8 +53395,8 @@ "contract_id": "test_get_dashboard_thumbnail_202", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 410, - "end_line": 438, + "start_line": 422, + "end_line": 456, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53056,14 +53413,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region test_get_dashboard_thumbnail_202 [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_202(mock_deps):\n \"\"\"@POST: Returns 202 when thumbnail is being prepared by Superset.\"\"\"\n with patch(\"src.api.routes.dashboards.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n\n # POST cache_dashboard_screenshot returns image_url\n mock_client.network.request.side_effect = [\n {\"image_url\": \"/api/v1/dashboard/42/thumbnail/abc123/\"}, # POST\n MagicMock(\n status_code=202,\n json=lambda: {\"message\": \"Thumbnail is being generated\"},\n headers={\"Content-Type\": \"application/json\"},\n ), # GET thumbnail -> 202\n ]\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 202\n assert \"Thumbnail is being generated\" in response.json()[\"message\"]\n\n\n# --- 6. migrate_dashboards tests ---\n\n# #endregion test_get_dashboard_thumbnail_202\n" + "body": "# #region test_get_dashboard_thumbnail_202 [C:2] [TYPE Function]\n# @RELATION BINDS_TO ->[TestDashboardsApi]\ndef test_get_dashboard_thumbnail_202(mock_deps):\n \"\"\"@POST: Returns 202 when thumbnail is being prepared by Superset.\"\"\"\n with patch(\"src.api.routes.dashboards._detail_routes.SupersetClient\") as mock_client_cls:\n mock_env = MagicMock()\n mock_env.id = \"prod\"\n mock_env.name = \"Production\"\n mock_env.url = \"http://localhost:8088\"\n mock_env.username = \"admin\"\n mock_env.password = \"admin\"\n mock_env.verify_ssl = True\n mock_env.timeout = 30\n mock_deps[\"config\"].get_environments.return_value = [mock_env]\n mock_client = MagicMock()\n\n # POST cache_dashboard_screenshot returns image_url\n mock_client.network.request.side_effect = [\n {\"image_url\": \"/api/v1/dashboard/42/thumbnail/abc123/\"}, # POST\n MagicMock(\n status_code=202,\n json=lambda: {\"message\": \"Thumbnail is being generated\"},\n headers={\"Content-Type\": \"application/json\"},\n ), # GET thumbnail -> 202\n ]\n mock_client_cls.return_value = mock_client\n\n response = client.get(\"/api/dashboards/42/thumbnail?env_id=prod\")\n assert response.status_code == 202\n assert \"Thumbnail is being generated\" in response.json()[\"message\"]\n\n\n# --- 6. migrate_dashboards tests ---\n\n# #endregion test_get_dashboard_thumbnail_202\n" }, { "contract_id": "test_migrate_dashboards_pre_checks", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 462, - "end_line": 474, + "start_line": 480, + "end_line": 492, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53086,8 +53443,8 @@ "contract_id": "test_backup_dashboards_pre_checks", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 513, - "end_line": 522, + "start_line": 531, + "end_line": 540, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53110,8 +53467,8 @@ "contract_id": "test_backup_dashboards_with_schedule", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 540, - "end_line": 563, + "start_line": 558, + "end_line": 581, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53134,8 +53491,8 @@ "contract_id": "test_task_matches_dashboard_logic", "contract_type": "Function", "file_path": "backend/tests/test_dashboards_api.py", - "start_line": 568, - "end_line": 586, + "start_line": 586, + "end_line": 604, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53402,7 +53759,7 @@ "contract_type": "Module", "file_path": "backend/tests/test_log_persistence.py", "start_line": 1, - "end_line": 336, + "end_line": 347, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53427,14 +53784,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region test_log_persistence [C:2] [TYPE Module]\n# @RELATION BINDS_TO -> SrcRoot\n# @SEMANTICS: test, log, persistence, unit_test\n# @PURPOSE: Unit tests for TaskLogPersistenceService.\n# @LAYER Tests\n\nfrom datetime import datetime\nfrom unittest.mock import patch\n\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\nfrom src.core.task_manager.models import LogEntry, LogFilter\nfrom src.core.task_manager.persistence import TaskLogPersistenceService\nfrom src.models.mapping import Base\n\n\n# #region TestLogPersistence [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> test_log_persistence\n# @PURPOSE: Test suite for TaskLogPersistenceService.\n# @TEST_DATA: log_entry -> {\"task_id\": \"test-task-1\", \"level\": \"INFO\", \"source\": \"test_source\", \"message\": \"Test message\"}\nclass TestLogPersistence:\n\n # #region setup_class [C:2] [TYPE Function]\n # @PURPOSE: Setup test database and service instance.\n # @PRE: None.\n # @POST: In-memory database and service instance created.\n @classmethod\n def setup_class(cls):\n \"\"\"Create an in-memory database for testing.\"\"\"\n cls.engine = create_engine(\"sqlite:///:memory:\")\n Base.metadata.create_all(bind=cls.engine)\n cls.TestSessionLocal = sessionmaker(bind=cls.engine)\n cls.service = TaskLogPersistenceService()\n # #endregion setup_class\n\n # #region teardown_class [C:2] [TYPE Function]\n # @PURPOSE: Clean up test database.\n # @PRE: None.\n # @POST: Database disposed.\n @classmethod\n def teardown_class(cls):\n \"\"\"Dispose of the database engine.\"\"\"\n cls.engine.dispose()\n # #endregion teardown_class\n\n # #region setup_method [C:2] [TYPE Function]\n # @PURPOSE: Setup for each test method — clean task_logs table.\n # @PRE: None.\n # @POST: task_logs table is empty.\n def setup_method(self):\n \"\"\"Clean task_logs table before each test.\"\"\"\n session = self.TestSessionLocal()\n from src.models.task import TaskLogRecord\n session.query(TaskLogRecord).delete()\n session.commit()\n session.close()\n # #endregion setup_method\n\n def _patched(self, method_name):\n \"\"\"Helper: returns a patch context for TasksSessionLocal.\"\"\"\n return patch(\n \"src.core.task_manager.persistence.TasksSessionLocal\",\n self.TestSessionLocal\n )\n\n # #region test_add_logs_single [C:2] [TYPE Function]\n # @PURPOSE: Test adding a single log entry.\n # @PRE: Service and session initialized.\n # @POST: Log entry persisted to database.\n def test_add_logs_single(self):\n \"\"\"Test adding a single log entry via add_logs.\"\"\"\n entry = LogEntry(\n timestamp=datetime.utcnow(),\n level=\"INFO\",\n source=\"test_source\",\n message=\"Test message\"\n )\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-1\", [entry])\n\n # Query the database\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n result = session.query(TaskLogRecord).filter_by(task_id=\"test-task-1\").first()\n session.close()\n\n assert result is not None\n assert result.level == \"INFO\"\n assert result.source == \"test_source\"\n assert result.message == \"Test message\"\n # #endregion test_add_logs_single\n\n # #region test_add_logs_batch [C:2] [TYPE Function]\n # @PURPOSE: Test adding multiple log entries in batch.\n # @PRE: Service and session initialized.\n # @POST: All log entries persisted to database.\n def test_add_logs_batch(self):\n \"\"\"Test adding multiple log entries in batch.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"source1\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"source2\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"source3\", message=\"Message 3\"),\n ]\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-2\", entries)\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-2\").all()\n session.close()\n\n assert len(results) == 3\n # #endregion test_add_logs_batch\n\n # #region test_add_logs_empty [C:2] [TYPE Function]\n # @PURPOSE: Test adding empty log list (should be no-op).\n # @PRE: Service initialized.\n # @POST: No logs added.\n def test_add_logs_empty(self):\n \"\"\"Test adding empty log list is a no-op.\"\"\"\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-X\", [])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-X\").all()\n session.close()\n assert len(results) == 0\n # #endregion test_add_logs_empty\n\n # #region test_get_logs_by_task_id [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs for the specified task.\n def test_get_logs_by_task_id(self):\n \"\"\"Test retrieving logs by task ID using LogFilter.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"src1\", message=f\"Message {i}\")\n for i in range(5)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-3\", entries)\n\n with self._patched(\"get_logs\"):\n logs = self.service.get_logs(\"test-task-3\", LogFilter())\n\n assert len(logs) == 5\n assert all(log.task_id == \"test-task-3\" for log in logs)\n # #endregion test_get_logs_by_task_id\n\n # #region test_get_logs_with_filters [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with level and source filters.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns filtered logs.\n def test_get_logs_with_filters(self):\n \"\"\"Test retrieving logs with level and source filters.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error message\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-4\", entries)\n\n # Test level filter\n with self._patched(\"get_logs\"):\n warning_logs = self.service.get_logs(\"test-task-4\", LogFilter(level=\"WARNING\"))\n assert len(warning_logs) == 1\n assert warning_logs[0].level == \"WARNING\"\n\n # Test source filter\n with self._patched(\"get_logs\"):\n api_logs = self.service.get_logs(\"test-task-4\", LogFilter(source=\"api\"))\n assert len(api_logs) == 2\n assert all(log.source == \"api\" for log in api_logs)\n # #endregion test_get_logs_with_filters\n\n # #region test_get_logs_with_pagination [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with pagination.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns paginated logs.\n def test_get_logs_with_pagination(self):\n \"\"\"Test retrieving logs with pagination.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(15)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-5\", entries)\n\n with self._patched(\"get_logs\"):\n page1 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=0))\n assert len(page1) == 10\n\n with self._patched(\"get_logs\"):\n page2 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=10))\n assert len(page2) == 5\n # #endregion test_get_logs_with_pagination\n\n # #region test_get_logs_with_search [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with search query.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs matching search query.\n def test_get_logs_with_search(self):\n \"\"\"Test retrieving logs with search query.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"User authentication successful\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"api\", message=\"Failed to connect to database\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"File saved successfully\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-6\", entries)\n\n with self._patched(\"get_logs\"):\n auth_logs = self.service.get_logs(\"test-task-6\", LogFilter(search=\"authentication\"))\n assert len(auth_logs) == 1\n assert \"authentication\" in auth_logs[0].message.lower()\n # #endregion test_get_logs_with_search\n\n # #region test_get_log_stats [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving log statistics.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns LogStats model with counts by level and source.\n def test_get_log_stats(self):\n \"\"\"Test retrieving log statistics as LogStats model.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error 1\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-7\", entries)\n\n with self._patched(\"get_log_stats\"):\n stats = self.service.get_log_stats(\"test-task-7\")\n\n assert stats is not None\n assert stats.total_count == 4\n assert stats.by_level[\"INFO\"] == 2\n assert stats.by_level[\"WARNING\"] == 1\n assert stats.by_level[\"ERROR\"] == 1\n assert stats.by_source[\"api\"] == 3\n assert stats.by_source[\"storage\"] == 1\n # #endregion test_get_log_stats\n\n # #region test_get_sources [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving unique log sources.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns list of unique sources.\n def test_get_sources(self):\n \"\"\"Test retrieving unique log sources.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"git\", message=\"Message 3\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-8\", entries)\n\n with self._patched(\"get_sources\"):\n sources = self.service.get_sources(\"test-task-8\")\n\n assert len(sources) == 3\n assert \"api\" in sources\n assert \"storage\" in sources\n assert \"git\" in sources\n # #endregion test_get_sources\n\n # #region test_delete_logs_for_task [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for the task are deleted.\n def test_delete_logs_for_task(self):\n \"\"\"Test deleting logs by task ID.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(3)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-9\", entries)\n\n # Verify logs exist\n with self._patched(\"get_logs\"):\n logs_before = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_before) == 3\n\n # Delete logs\n with self._patched(\"delete_logs_for_task\"):\n self.service.delete_logs_for_task(\"test-task-9\")\n\n # Verify logs are deleted\n with self._patched(\"get_logs\"):\n logs_after = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_after) == 0\n # #endregion test_delete_logs_for_task\n\n # #region test_delete_logs_for_tasks [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs for multiple tasks.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for all specified tasks are deleted.\n def test_delete_logs_for_tasks(self):\n \"\"\"Test deleting logs for multiple tasks at once.\"\"\"\n for task_id in [\"multi-1\", \"multi-2\", \"multi-3\"]:\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=\"msg\")\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(task_id, entries)\n\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([\"multi-1\", \"multi-2\"])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n remaining = session.query(TaskLogRecord).all()\n session.close()\n assert len(remaining) == 1\n assert remaining[0].task_id == \"multi-3\"\n # #endregion test_delete_logs_for_tasks\n\n # #region test_delete_logs_for_tasks_empty [C:2] [TYPE Function]\n # @PURPOSE: Test deleting with empty list (no-op).\n # @PRE: Service initialized.\n # @POST: No error, no deletion.\n def test_delete_logs_for_tasks_empty(self):\n \"\"\"Test deleting with empty list is a no-op.\"\"\"\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([]) # Should not raise\n # #endregion test_delete_logs_for_tasks_empty\n\n# #endregion TestLogPersistence\n# #endregion test_log_persistence\n" + "body": "# #region test_log_persistence [C:2] [TYPE Module]\n# @RELATION BINDS_TO -> SrcRoot\n# @SEMANTICS: test, log, persistence, unit_test\n# @PURPOSE: Unit tests for TaskLogPersistenceService.\n# @LAYER Tests\n\nfrom datetime import datetime\nfrom unittest.mock import patch\n\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\nfrom src.core.task_manager.models import LogEntry, LogFilter\nfrom src.core.task_manager.persistence import TaskLogPersistenceService\nfrom src.models.mapping import Base\n\n\n# #region TestLogPersistence [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> test_log_persistence\n# @PURPOSE: Test suite for TaskLogPersistenceService.\n# @TEST_DATA: log_entry -> {\"task_id\": \"test-task-1\", \"level\": \"INFO\", \"source\": \"test_source\", \"message\": \"Test message\"}\nclass TestLogPersistence:\n\n # #region setup_class [C:2] [TYPE Function]\n # @PURPOSE: Setup test database and service instance.\n # @PRE: None.\n # @POST: In-memory database and service instance created.\n @classmethod\n def setup_class(cls):\n \"\"\"Create an in-memory database for testing.\"\"\"\n cls.engine = create_engine(\"sqlite:///:memory:\")\n from sqlalchemy import event\n event.listen(cls.engine, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n Base.metadata.create_all(bind=cls.engine)\n cls.TestSessionLocal = sessionmaker(bind=cls.engine)\n cls.service = TaskLogPersistenceService()\n # #endregion setup_class\n\n # #region teardown_class [C:2] [TYPE Function]\n # @PURPOSE: Clean up test database.\n # @PRE: None.\n # @POST: Database disposed.\n @classmethod\n def teardown_class(cls):\n \"\"\"Dispose of the database engine.\"\"\"\n cls.engine.dispose()\n # #endregion teardown_class\n\n # #region setup_method [C:2] [TYPE Function]\n # @PURPOSE: Setup for each test method — clean task_logs table.\n # @PRE: None.\n # @POST: task_logs table is empty.\n def setup_method(self):\n \"\"\"Clean task_logs table before each test.\"\"\"\n from src.models.task import TaskLogRecord, TaskRecord\n session = self.TestSessionLocal()\n # Create FK parent records for all task_ids used in tests\n for tid in ['test-task-1', 'test-task-2', 'test-task-3', 'test-task-4',\n 'test-task-5', 'test-task-6', 'test-task-7', 'test-task-8',\n 'test-task-9', 'multi-1', 'multi-2', 'multi-3']:\n existing = session.query(TaskRecord).filter(TaskRecord.id == tid).first()\n if not existing:\n session.add(TaskRecord(id=tid, type='test', status='PENDING'))\n session.commit()\n # Clean task_logs table\n session.query(TaskLogRecord).delete()\n session.commit()\n session.close()\n # #endregion setup_method\n\n def _patched(self, method_name):\n \"\"\"Helper: returns a patch context for TasksSessionLocal.\"\"\"\n return patch(\n \"src.core.task_manager.persistence.TasksSessionLocal\",\n self.TestSessionLocal\n )\n\n # #region test_add_logs_single [C:2] [TYPE Function]\n # @PURPOSE: Test adding a single log entry.\n # @PRE: Service and session initialized.\n # @POST: Log entry persisted to database.\n def test_add_logs_single(self):\n \"\"\"Test adding a single log entry via add_logs.\"\"\"\n entry = LogEntry(\n timestamp=datetime.utcnow(),\n level=\"INFO\",\n source=\"test_source\",\n message=\"Test message\"\n )\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-1\", [entry])\n\n # Query the database\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n result = session.query(TaskLogRecord).filter_by(task_id=\"test-task-1\").first()\n session.close()\n\n assert result is not None\n assert result.level == \"INFO\"\n assert result.source == \"test_source\"\n assert result.message == \"Test message\"\n # #endregion test_add_logs_single\n\n # #region test_add_logs_batch [C:2] [TYPE Function]\n # @PURPOSE: Test adding multiple log entries in batch.\n # @PRE: Service and session initialized.\n # @POST: All log entries persisted to database.\n def test_add_logs_batch(self):\n \"\"\"Test adding multiple log entries in batch.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"source1\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"source2\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"source3\", message=\"Message 3\"),\n ]\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-2\", entries)\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-2\").all()\n session.close()\n\n assert len(results) == 3\n # #endregion test_add_logs_batch\n\n # #region test_add_logs_empty [C:2] [TYPE Function]\n # @PURPOSE: Test adding empty log list (should be no-op).\n # @PRE: Service initialized.\n # @POST: No logs added.\n def test_add_logs_empty(self):\n \"\"\"Test adding empty log list is a no-op.\"\"\"\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-X\", [])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-X\").all()\n session.close()\n assert len(results) == 0\n # #endregion test_add_logs_empty\n\n # #region test_get_logs_by_task_id [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs for the specified task.\n def test_get_logs_by_task_id(self):\n \"\"\"Test retrieving logs by task ID using LogFilter.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"src1\", message=f\"Message {i}\")\n for i in range(5)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-3\", entries)\n\n with self._patched(\"get_logs\"):\n logs = self.service.get_logs(\"test-task-3\", LogFilter())\n\n assert len(logs) == 5\n assert all(log.task_id == \"test-task-3\" for log in logs)\n # #endregion test_get_logs_by_task_id\n\n # #region test_get_logs_with_filters [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with level and source filters.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns filtered logs.\n def test_get_logs_with_filters(self):\n \"\"\"Test retrieving logs with level and source filters.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error message\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-4\", entries)\n\n # Test level filter\n with self._patched(\"get_logs\"):\n warning_logs = self.service.get_logs(\"test-task-4\", LogFilter(level=\"WARNING\"))\n assert len(warning_logs) == 1\n assert warning_logs[0].level == \"WARNING\"\n\n # Test source filter\n with self._patched(\"get_logs\"):\n api_logs = self.service.get_logs(\"test-task-4\", LogFilter(source=\"api\"))\n assert len(api_logs) == 2\n assert all(log.source == \"api\" for log in api_logs)\n # #endregion test_get_logs_with_filters\n\n # #region test_get_logs_with_pagination [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with pagination.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns paginated logs.\n def test_get_logs_with_pagination(self):\n \"\"\"Test retrieving logs with pagination.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(15)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-5\", entries)\n\n with self._patched(\"get_logs\"):\n page1 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=0))\n assert len(page1) == 10\n\n with self._patched(\"get_logs\"):\n page2 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=10))\n assert len(page2) == 5\n # #endregion test_get_logs_with_pagination\n\n # #region test_get_logs_with_search [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with search query.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs matching search query.\n def test_get_logs_with_search(self):\n \"\"\"Test retrieving logs with search query.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"User authentication successful\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"api\", message=\"Failed to connect to database\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"File saved successfully\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-6\", entries)\n\n with self._patched(\"get_logs\"):\n auth_logs = self.service.get_logs(\"test-task-6\", LogFilter(search=\"authentication\"))\n assert len(auth_logs) == 1\n assert \"authentication\" in auth_logs[0].message.lower()\n # #endregion test_get_logs_with_search\n\n # #region test_get_log_stats [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving log statistics.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns LogStats model with counts by level and source.\n def test_get_log_stats(self):\n \"\"\"Test retrieving log statistics as LogStats model.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error 1\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-7\", entries)\n\n with self._patched(\"get_log_stats\"):\n stats = self.service.get_log_stats(\"test-task-7\")\n\n assert stats is not None\n assert stats.total_count == 4\n assert stats.by_level[\"INFO\"] == 2\n assert stats.by_level[\"WARNING\"] == 1\n assert stats.by_level[\"ERROR\"] == 1\n assert stats.by_source[\"api\"] == 3\n assert stats.by_source[\"storage\"] == 1\n # #endregion test_get_log_stats\n\n # #region test_get_sources [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving unique log sources.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns list of unique sources.\n def test_get_sources(self):\n \"\"\"Test retrieving unique log sources.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"git\", message=\"Message 3\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-8\", entries)\n\n with self._patched(\"get_sources\"):\n sources = self.service.get_sources(\"test-task-8\")\n\n assert len(sources) == 3\n assert \"api\" in sources\n assert \"storage\" in sources\n assert \"git\" in sources\n # #endregion test_get_sources\n\n # #region test_delete_logs_for_task [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for the task are deleted.\n def test_delete_logs_for_task(self):\n \"\"\"Test deleting logs by task ID.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(3)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-9\", entries)\n\n # Verify logs exist\n with self._patched(\"get_logs\"):\n logs_before = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_before) == 3\n\n # Delete logs\n with self._patched(\"delete_logs_for_task\"):\n self.service.delete_logs_for_task(\"test-task-9\")\n\n # Verify logs are deleted\n with self._patched(\"get_logs\"):\n logs_after = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_after) == 0\n # #endregion test_delete_logs_for_task\n\n # #region test_delete_logs_for_tasks [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs for multiple tasks.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for all specified tasks are deleted.\n def test_delete_logs_for_tasks(self):\n \"\"\"Test deleting logs for multiple tasks at once.\"\"\"\n for task_id in [\"multi-1\", \"multi-2\", \"multi-3\"]:\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=\"msg\")\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(task_id, entries)\n\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([\"multi-1\", \"multi-2\"])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n remaining = session.query(TaskLogRecord).all()\n session.close()\n assert len(remaining) == 1\n assert remaining[0].task_id == \"multi-3\"\n # #endregion test_delete_logs_for_tasks\n\n # #region test_delete_logs_for_tasks_empty [C:2] [TYPE Function]\n # @PURPOSE: Test deleting with empty list (no-op).\n # @PRE: Service initialized.\n # @POST: No error, no deletion.\n def test_delete_logs_for_tasks_empty(self):\n \"\"\"Test deleting with empty list is a no-op.\"\"\"\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([]) # Should not raise\n # #endregion test_delete_logs_for_tasks_empty\n\n# #endregion TestLogPersistence\n# #endregion test_log_persistence\n" }, { "contract_id": "TestLogPersistence", "contract_type": "Class", "file_path": "backend/tests/test_log_persistence.py", "start_line": 18, - "end_line": 335, + "end_line": 346, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53453,14 +53810,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region TestLogPersistence [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> test_log_persistence\n# @PURPOSE: Test suite for TaskLogPersistenceService.\n# @TEST_DATA: log_entry -> {\"task_id\": \"test-task-1\", \"level\": \"INFO\", \"source\": \"test_source\", \"message\": \"Test message\"}\nclass TestLogPersistence:\n\n # #region setup_class [C:2] [TYPE Function]\n # @PURPOSE: Setup test database and service instance.\n # @PRE: None.\n # @POST: In-memory database and service instance created.\n @classmethod\n def setup_class(cls):\n \"\"\"Create an in-memory database for testing.\"\"\"\n cls.engine = create_engine(\"sqlite:///:memory:\")\n Base.metadata.create_all(bind=cls.engine)\n cls.TestSessionLocal = sessionmaker(bind=cls.engine)\n cls.service = TaskLogPersistenceService()\n # #endregion setup_class\n\n # #region teardown_class [C:2] [TYPE Function]\n # @PURPOSE: Clean up test database.\n # @PRE: None.\n # @POST: Database disposed.\n @classmethod\n def teardown_class(cls):\n \"\"\"Dispose of the database engine.\"\"\"\n cls.engine.dispose()\n # #endregion teardown_class\n\n # #region setup_method [C:2] [TYPE Function]\n # @PURPOSE: Setup for each test method — clean task_logs table.\n # @PRE: None.\n # @POST: task_logs table is empty.\n def setup_method(self):\n \"\"\"Clean task_logs table before each test.\"\"\"\n session = self.TestSessionLocal()\n from src.models.task import TaskLogRecord\n session.query(TaskLogRecord).delete()\n session.commit()\n session.close()\n # #endregion setup_method\n\n def _patched(self, method_name):\n \"\"\"Helper: returns a patch context for TasksSessionLocal.\"\"\"\n return patch(\n \"src.core.task_manager.persistence.TasksSessionLocal\",\n self.TestSessionLocal\n )\n\n # #region test_add_logs_single [C:2] [TYPE Function]\n # @PURPOSE: Test adding a single log entry.\n # @PRE: Service and session initialized.\n # @POST: Log entry persisted to database.\n def test_add_logs_single(self):\n \"\"\"Test adding a single log entry via add_logs.\"\"\"\n entry = LogEntry(\n timestamp=datetime.utcnow(),\n level=\"INFO\",\n source=\"test_source\",\n message=\"Test message\"\n )\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-1\", [entry])\n\n # Query the database\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n result = session.query(TaskLogRecord).filter_by(task_id=\"test-task-1\").first()\n session.close()\n\n assert result is not None\n assert result.level == \"INFO\"\n assert result.source == \"test_source\"\n assert result.message == \"Test message\"\n # #endregion test_add_logs_single\n\n # #region test_add_logs_batch [C:2] [TYPE Function]\n # @PURPOSE: Test adding multiple log entries in batch.\n # @PRE: Service and session initialized.\n # @POST: All log entries persisted to database.\n def test_add_logs_batch(self):\n \"\"\"Test adding multiple log entries in batch.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"source1\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"source2\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"source3\", message=\"Message 3\"),\n ]\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-2\", entries)\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-2\").all()\n session.close()\n\n assert len(results) == 3\n # #endregion test_add_logs_batch\n\n # #region test_add_logs_empty [C:2] [TYPE Function]\n # @PURPOSE: Test adding empty log list (should be no-op).\n # @PRE: Service initialized.\n # @POST: No logs added.\n def test_add_logs_empty(self):\n \"\"\"Test adding empty log list is a no-op.\"\"\"\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-X\", [])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-X\").all()\n session.close()\n assert len(results) == 0\n # #endregion test_add_logs_empty\n\n # #region test_get_logs_by_task_id [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs for the specified task.\n def test_get_logs_by_task_id(self):\n \"\"\"Test retrieving logs by task ID using LogFilter.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"src1\", message=f\"Message {i}\")\n for i in range(5)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-3\", entries)\n\n with self._patched(\"get_logs\"):\n logs = self.service.get_logs(\"test-task-3\", LogFilter())\n\n assert len(logs) == 5\n assert all(log.task_id == \"test-task-3\" for log in logs)\n # #endregion test_get_logs_by_task_id\n\n # #region test_get_logs_with_filters [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with level and source filters.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns filtered logs.\n def test_get_logs_with_filters(self):\n \"\"\"Test retrieving logs with level and source filters.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error message\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-4\", entries)\n\n # Test level filter\n with self._patched(\"get_logs\"):\n warning_logs = self.service.get_logs(\"test-task-4\", LogFilter(level=\"WARNING\"))\n assert len(warning_logs) == 1\n assert warning_logs[0].level == \"WARNING\"\n\n # Test source filter\n with self._patched(\"get_logs\"):\n api_logs = self.service.get_logs(\"test-task-4\", LogFilter(source=\"api\"))\n assert len(api_logs) == 2\n assert all(log.source == \"api\" for log in api_logs)\n # #endregion test_get_logs_with_filters\n\n # #region test_get_logs_with_pagination [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with pagination.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns paginated logs.\n def test_get_logs_with_pagination(self):\n \"\"\"Test retrieving logs with pagination.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(15)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-5\", entries)\n\n with self._patched(\"get_logs\"):\n page1 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=0))\n assert len(page1) == 10\n\n with self._patched(\"get_logs\"):\n page2 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=10))\n assert len(page2) == 5\n # #endregion test_get_logs_with_pagination\n\n # #region test_get_logs_with_search [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with search query.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs matching search query.\n def test_get_logs_with_search(self):\n \"\"\"Test retrieving logs with search query.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"User authentication successful\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"api\", message=\"Failed to connect to database\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"File saved successfully\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-6\", entries)\n\n with self._patched(\"get_logs\"):\n auth_logs = self.service.get_logs(\"test-task-6\", LogFilter(search=\"authentication\"))\n assert len(auth_logs) == 1\n assert \"authentication\" in auth_logs[0].message.lower()\n # #endregion test_get_logs_with_search\n\n # #region test_get_log_stats [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving log statistics.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns LogStats model with counts by level and source.\n def test_get_log_stats(self):\n \"\"\"Test retrieving log statistics as LogStats model.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error 1\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-7\", entries)\n\n with self._patched(\"get_log_stats\"):\n stats = self.service.get_log_stats(\"test-task-7\")\n\n assert stats is not None\n assert stats.total_count == 4\n assert stats.by_level[\"INFO\"] == 2\n assert stats.by_level[\"WARNING\"] == 1\n assert stats.by_level[\"ERROR\"] == 1\n assert stats.by_source[\"api\"] == 3\n assert stats.by_source[\"storage\"] == 1\n # #endregion test_get_log_stats\n\n # #region test_get_sources [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving unique log sources.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns list of unique sources.\n def test_get_sources(self):\n \"\"\"Test retrieving unique log sources.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"git\", message=\"Message 3\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-8\", entries)\n\n with self._patched(\"get_sources\"):\n sources = self.service.get_sources(\"test-task-8\")\n\n assert len(sources) == 3\n assert \"api\" in sources\n assert \"storage\" in sources\n assert \"git\" in sources\n # #endregion test_get_sources\n\n # #region test_delete_logs_for_task [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for the task are deleted.\n def test_delete_logs_for_task(self):\n \"\"\"Test deleting logs by task ID.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(3)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-9\", entries)\n\n # Verify logs exist\n with self._patched(\"get_logs\"):\n logs_before = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_before) == 3\n\n # Delete logs\n with self._patched(\"delete_logs_for_task\"):\n self.service.delete_logs_for_task(\"test-task-9\")\n\n # Verify logs are deleted\n with self._patched(\"get_logs\"):\n logs_after = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_after) == 0\n # #endregion test_delete_logs_for_task\n\n # #region test_delete_logs_for_tasks [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs for multiple tasks.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for all specified tasks are deleted.\n def test_delete_logs_for_tasks(self):\n \"\"\"Test deleting logs for multiple tasks at once.\"\"\"\n for task_id in [\"multi-1\", \"multi-2\", \"multi-3\"]:\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=\"msg\")\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(task_id, entries)\n\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([\"multi-1\", \"multi-2\"])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n remaining = session.query(TaskLogRecord).all()\n session.close()\n assert len(remaining) == 1\n assert remaining[0].task_id == \"multi-3\"\n # #endregion test_delete_logs_for_tasks\n\n # #region test_delete_logs_for_tasks_empty [C:2] [TYPE Function]\n # @PURPOSE: Test deleting with empty list (no-op).\n # @PRE: Service initialized.\n # @POST: No error, no deletion.\n def test_delete_logs_for_tasks_empty(self):\n \"\"\"Test deleting with empty list is a no-op.\"\"\"\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([]) # Should not raise\n # #endregion test_delete_logs_for_tasks_empty\n\n# #endregion TestLogPersistence\n" + "body": "# #region TestLogPersistence [C:2] [TYPE Class]\n# @RELATION BINDS_TO -> test_log_persistence\n# @PURPOSE: Test suite for TaskLogPersistenceService.\n# @TEST_DATA: log_entry -> {\"task_id\": \"test-task-1\", \"level\": \"INFO\", \"source\": \"test_source\", \"message\": \"Test message\"}\nclass TestLogPersistence:\n\n # #region setup_class [C:2] [TYPE Function]\n # @PURPOSE: Setup test database and service instance.\n # @PRE: None.\n # @POST: In-memory database and service instance created.\n @classmethod\n def setup_class(cls):\n \"\"\"Create an in-memory database for testing.\"\"\"\n cls.engine = create_engine(\"sqlite:///:memory:\")\n from sqlalchemy import event\n event.listen(cls.engine, \"connect\", lambda c, _: c.execute(\"PRAGMA foreign_keys=ON\"))\n Base.metadata.create_all(bind=cls.engine)\n cls.TestSessionLocal = sessionmaker(bind=cls.engine)\n cls.service = TaskLogPersistenceService()\n # #endregion setup_class\n\n # #region teardown_class [C:2] [TYPE Function]\n # @PURPOSE: Clean up test database.\n # @PRE: None.\n # @POST: Database disposed.\n @classmethod\n def teardown_class(cls):\n \"\"\"Dispose of the database engine.\"\"\"\n cls.engine.dispose()\n # #endregion teardown_class\n\n # #region setup_method [C:2] [TYPE Function]\n # @PURPOSE: Setup for each test method — clean task_logs table.\n # @PRE: None.\n # @POST: task_logs table is empty.\n def setup_method(self):\n \"\"\"Clean task_logs table before each test.\"\"\"\n from src.models.task import TaskLogRecord, TaskRecord\n session = self.TestSessionLocal()\n # Create FK parent records for all task_ids used in tests\n for tid in ['test-task-1', 'test-task-2', 'test-task-3', 'test-task-4',\n 'test-task-5', 'test-task-6', 'test-task-7', 'test-task-8',\n 'test-task-9', 'multi-1', 'multi-2', 'multi-3']:\n existing = session.query(TaskRecord).filter(TaskRecord.id == tid).first()\n if not existing:\n session.add(TaskRecord(id=tid, type='test', status='PENDING'))\n session.commit()\n # Clean task_logs table\n session.query(TaskLogRecord).delete()\n session.commit()\n session.close()\n # #endregion setup_method\n\n def _patched(self, method_name):\n \"\"\"Helper: returns a patch context for TasksSessionLocal.\"\"\"\n return patch(\n \"src.core.task_manager.persistence.TasksSessionLocal\",\n self.TestSessionLocal\n )\n\n # #region test_add_logs_single [C:2] [TYPE Function]\n # @PURPOSE: Test adding a single log entry.\n # @PRE: Service and session initialized.\n # @POST: Log entry persisted to database.\n def test_add_logs_single(self):\n \"\"\"Test adding a single log entry via add_logs.\"\"\"\n entry = LogEntry(\n timestamp=datetime.utcnow(),\n level=\"INFO\",\n source=\"test_source\",\n message=\"Test message\"\n )\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-1\", [entry])\n\n # Query the database\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n result = session.query(TaskLogRecord).filter_by(task_id=\"test-task-1\").first()\n session.close()\n\n assert result is not None\n assert result.level == \"INFO\"\n assert result.source == \"test_source\"\n assert result.message == \"Test message\"\n # #endregion test_add_logs_single\n\n # #region test_add_logs_batch [C:2] [TYPE Function]\n # @PURPOSE: Test adding multiple log entries in batch.\n # @PRE: Service and session initialized.\n # @POST: All log entries persisted to database.\n def test_add_logs_batch(self):\n \"\"\"Test adding multiple log entries in batch.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"source1\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"source2\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"source3\", message=\"Message 3\"),\n ]\n\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-2\", entries)\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-2\").all()\n session.close()\n\n assert len(results) == 3\n # #endregion test_add_logs_batch\n\n # #region test_add_logs_empty [C:2] [TYPE Function]\n # @PURPOSE: Test adding empty log list (should be no-op).\n # @PRE: Service initialized.\n # @POST: No logs added.\n def test_add_logs_empty(self):\n \"\"\"Test adding empty log list is a no-op.\"\"\"\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-X\", [])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n results = session.query(TaskLogRecord).filter_by(task_id=\"test-task-X\").all()\n session.close()\n assert len(results) == 0\n # #endregion test_add_logs_empty\n\n # #region test_get_logs_by_task_id [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs for the specified task.\n def test_get_logs_by_task_id(self):\n \"\"\"Test retrieving logs by task ID using LogFilter.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"src1\", message=f\"Message {i}\")\n for i in range(5)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-3\", entries)\n\n with self._patched(\"get_logs\"):\n logs = self.service.get_logs(\"test-task-3\", LogFilter())\n\n assert len(logs) == 5\n assert all(log.task_id == \"test-task-3\" for log in logs)\n # #endregion test_get_logs_by_task_id\n\n # #region test_get_logs_with_filters [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with level and source filters.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns filtered logs.\n def test_get_logs_with_filters(self):\n \"\"\"Test retrieving logs with level and source filters.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning message\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error message\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-4\", entries)\n\n # Test level filter\n with self._patched(\"get_logs\"):\n warning_logs = self.service.get_logs(\"test-task-4\", LogFilter(level=\"WARNING\"))\n assert len(warning_logs) == 1\n assert warning_logs[0].level == \"WARNING\"\n\n # Test source filter\n with self._patched(\"get_logs\"):\n api_logs = self.service.get_logs(\"test-task-4\", LogFilter(source=\"api\"))\n assert len(api_logs) == 2\n assert all(log.source == \"api\" for log in api_logs)\n # #endregion test_get_logs_with_filters\n\n # #region test_get_logs_with_pagination [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with pagination.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns paginated logs.\n def test_get_logs_with_pagination(self):\n \"\"\"Test retrieving logs with pagination.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(15)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-5\", entries)\n\n with self._patched(\"get_logs\"):\n page1 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=0))\n assert len(page1) == 10\n\n with self._patched(\"get_logs\"):\n page2 = self.service.get_logs(\"test-task-5\", LogFilter(limit=10, offset=10))\n assert len(page2) == 5\n # #endregion test_get_logs_with_pagination\n\n # #region test_get_logs_with_search [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving logs with search query.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns logs matching search query.\n def test_get_logs_with_search(self):\n \"\"\"Test retrieving logs with search query.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"User authentication successful\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"api\", message=\"Failed to connect to database\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"File saved successfully\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-6\", entries)\n\n with self._patched(\"get_logs\"):\n auth_logs = self.service.get_logs(\"test-task-6\", LogFilter(search=\"authentication\"))\n assert len(auth_logs) == 1\n assert \"authentication\" in auth_logs[0].message.lower()\n # #endregion test_get_logs_with_search\n\n # #region test_get_log_stats [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving log statistics.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns LogStats model with counts by level and source.\n def test_get_log_stats(self):\n \"\"\"Test retrieving log statistics as LogStats model.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Info 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"WARNING\", source=\"api\", message=\"Warning 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"ERROR\", source=\"storage\", message=\"Error 1\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-7\", entries)\n\n with self._patched(\"get_log_stats\"):\n stats = self.service.get_log_stats(\"test-task-7\")\n\n assert stats is not None\n assert stats.total_count == 4\n assert stats.by_level[\"INFO\"] == 2\n assert stats.by_level[\"WARNING\"] == 1\n assert stats.by_level[\"ERROR\"] == 1\n assert stats.by_source[\"api\"] == 3\n assert stats.by_source[\"storage\"] == 1\n # #endregion test_get_log_stats\n\n # #region test_get_sources [C:2] [TYPE Function]\n # @PURPOSE: Test retrieving unique log sources.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Returns list of unique sources.\n def test_get_sources(self):\n \"\"\"Test retrieving unique log sources.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"api\", message=\"Message 1\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"storage\", message=\"Message 2\"),\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"git\", message=\"Message 3\"),\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-8\", entries)\n\n with self._patched(\"get_sources\"):\n sources = self.service.get_sources(\"test-task-8\")\n\n assert len(sources) == 3\n assert \"api\" in sources\n assert \"storage\" in sources\n assert \"git\" in sources\n # #endregion test_get_sources\n\n # #region test_delete_logs_for_task [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs by task ID.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for the task are deleted.\n def test_delete_logs_for_task(self):\n \"\"\"Test deleting logs by task ID.\"\"\"\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=f\"Message {i}\")\n for i in range(3)\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(\"test-task-9\", entries)\n\n # Verify logs exist\n with self._patched(\"get_logs\"):\n logs_before = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_before) == 3\n\n # Delete logs\n with self._patched(\"delete_logs_for_task\"):\n self.service.delete_logs_for_task(\"test-task-9\")\n\n # Verify logs are deleted\n with self._patched(\"get_logs\"):\n logs_after = self.service.get_logs(\"test-task-9\", LogFilter())\n assert len(logs_after) == 0\n # #endregion test_delete_logs_for_task\n\n # #region test_delete_logs_for_tasks [C:2] [TYPE Function]\n # @PURPOSE: Test deleting logs for multiple tasks.\n # @PRE: Service and session initialized, logs exist.\n # @POST: Logs for all specified tasks are deleted.\n def test_delete_logs_for_tasks(self):\n \"\"\"Test deleting logs for multiple tasks at once.\"\"\"\n for task_id in [\"multi-1\", \"multi-2\", \"multi-3\"]:\n entries = [\n LogEntry(timestamp=datetime.utcnow(), level=\"INFO\", source=\"test\", message=\"msg\")\n ]\n with self._patched(\"add_logs\"):\n self.service.add_logs(task_id, entries)\n\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([\"multi-1\", \"multi-2\"])\n\n from src.models.task import TaskLogRecord\n session = self.TestSessionLocal()\n remaining = session.query(TaskLogRecord).all()\n session.close()\n assert len(remaining) == 1\n assert remaining[0].task_id == \"multi-3\"\n # #endregion test_delete_logs_for_tasks\n\n # #region test_delete_logs_for_tasks_empty [C:2] [TYPE Function]\n # @PURPOSE: Test deleting with empty list (no-op).\n # @PRE: Service initialized.\n # @POST: No error, no deletion.\n def test_delete_logs_for_tasks_empty(self):\n \"\"\"Test deleting with empty list is a no-op.\"\"\"\n with self._patched(\"delete_logs_for_tasks\"):\n self.service.delete_logs_for_tasks([]) # Should not raise\n # #endregion test_delete_logs_for_tasks_empty\n\n# #endregion TestLogPersistence\n" }, { "contract_id": "test_add_logs_single", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 67, - "end_line": 93, + "start_line": 78, + "end_line": 104, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53479,8 +53836,8 @@ "contract_id": "test_add_logs_batch", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 95, - "end_line": 116, + "start_line": 106, + "end_line": 127, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53499,8 +53856,8 @@ "contract_id": "test_add_logs_empty", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 118, - "end_line": 132, + "start_line": 129, + "end_line": 143, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53519,8 +53876,8 @@ "contract_id": "test_get_logs_by_task_id", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 134, - "end_line": 152, + "start_line": 145, + "end_line": 163, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53539,8 +53896,8 @@ "contract_id": "test_get_logs_with_filters", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 154, - "end_line": 179, + "start_line": 165, + "end_line": 190, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53559,8 +53916,8 @@ "contract_id": "test_get_logs_with_pagination", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 181, - "end_line": 201, + "start_line": 192, + "end_line": 212, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53579,8 +53936,8 @@ "contract_id": "test_get_logs_with_search", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 203, - "end_line": 221, + "start_line": 214, + "end_line": 232, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53599,8 +53956,8 @@ "contract_id": "test_get_log_stats", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 223, - "end_line": 248, + "start_line": 234, + "end_line": 259, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53619,8 +53976,8 @@ "contract_id": "test_get_sources", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 250, - "end_line": 271, + "start_line": 261, + "end_line": 282, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53639,8 +53996,8 @@ "contract_id": "test_delete_logs_for_task", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 273, - "end_line": 299, + "start_line": 284, + "end_line": 310, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53659,8 +54016,8 @@ "contract_id": "test_delete_logs_for_tasks", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 301, - "end_line": 323, + "start_line": 312, + "end_line": 334, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -53679,8 +54036,8 @@ "contract_id": "test_delete_logs_for_tasks_empty", "contract_type": "Function", "file_path": "backend/tests/test_log_persistence.py", - "start_line": 325, - "end_line": 333, + "start_line": 336, + "end_line": 344, "tier": "TIER_1", "complexity": 2, "metadata": { @@ -54242,7 +54599,7 @@ "contract_type": "TestModule", "file_path": "backend/tests/test_maintenance_service.py", "start_line": 1, - "end_line": 622, + "end_line": 623, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -54253,14 +54610,14 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "# #region test_maintenance_service [C:3] [TYPE TestModule] [SEMANTICS test, maintenance, service, pytest, integration]\n# @BRIEF Integration tests for MaintenanceService — T018, T026, T026a.\n# Tests the C3/C4 orchestrators: start_maintenance, end_maintenance, end_all_maintenance,\n# and helpers: find_affected_dashboards, ensure_banner_chart, build_banner_text, rebuild_banner.\n# @LAYER Test\n# @RELATION BINDS_TO -> [EXT:frontend:MaintenanceServiceModule]\n# @TEST_CONTRACT: start_maintenance(str, Session, SupersetClient) -> dict\n# @TEST_CONTRACT: end_maintenance(str, Session, SupersetClient) -> dict\n# @TEST_CONTRACT: end_all_maintenance(Session, SupersetClient) -> dict\n# @TEST_EDGE: event_not_found -> returns failed status with error message\n# @TEST_EDGE: no_matching_dashboards -> returns \"no_match\" status\n# @TEST_EDGE: superset_api_failure -> returns partial/failed with error details\nimport uuid\nfrom datetime import datetime, timezone\nfrom typing import Any, cast\nfrom unittest.mock import MagicMock, patch, PropertyMock\n\nimport pytest\n\nfrom src.models.maintenance import (\n DashboardScope,\n MaintenanceDashboardBanner,\n MaintenanceDashboardBannerStatus,\n MaintenanceDashboardState,\n MaintenanceDashboardStateStatus,\n MaintenanceEvent,\n MaintenanceEventStatus,\n MaintenanceSettings,\n)\nfrom src.services.maintenance import (\n build_banner_text,\n build_idempotency_key,\n end_all_maintenance,\n end_maintenance,\n ensure_banner_chart,\n find_affected_dashboards,\n rebuild_banner,\n start_maintenance,\n)\n\n\n# ── Fixtures ──────────────────────────────────────────────────\n\n@pytest.fixture\ndef mock_superset():\n \"\"\"Create a mock SupersetClient for testing.\"\"\"\n client = MagicMock()\n # Default: no datasets\n client.get_datasets.return_value = (0, [])\n client.get_dashboards.return_value = (0, [])\n client.get_dataset_detail.return_value = {\"linked_dashboards\": []}\n client.create_markdown_chart.return_value = 12345\n client.get_chart.return_value = {\"id\": 12345, \"result\": {\"viz_type\": \"markdown\"}}\n client.update_banner_on_dashboard.return_value = {\"result\": \"ok\"}\n client.update_dashboard_layout.return_value = {\"result\": \"ok\"}\n client.remove_chart_from_layout.return_value = {\"result\": \"ok\"}\n client.delete_chart.return_value = {\"result\": \"ok\"}\n return client\n\n\n@pytest.fixture\ndef db_session():\n \"\"\"Create an in-memory SQLite session with tables.\"\"\"\n from sqlalchemy import create_engine\n from sqlalchemy.orm import sessionmaker\n from src.models.mapping import Base\n\n engine = create_engine(\"sqlite:///:memory:\", echo=False)\n Base.metadata.create_all(engine)\n Session = sessionmaker(bind=engine)\n session = Session()\n\n # Create default settings\n settings = MaintenanceSettings(\n id=\"default\",\n target_environment_id=\"test-env\",\n display_timezone=\"UTC\",\n banner_template=\"Maintenance: {message} ({start_time} - {end_time})\",\n dashboard_scope=DashboardScope.PUBLISHED_ONLY,\n excluded_dashboard_ids=[],\n forced_dashboard_ids=[],\n )\n session.add(settings)\n session.commit()\n return session\n\n\n@pytest.fixture\ndef pending_event(db_session):\n \"\"\"Create a PENDING maintenance event in the DB.\"\"\"\n event = MaintenanceEvent(\n tables=[\"raw.sales\", \"raw.inventory\"],\n start_time=datetime.now(timezone.utc),\n end_time=datetime.now(timezone.utc),\n message=\"Test maintenance\",\n status=MaintenanceEventStatus.PENDING,\n environment_id=\"test-env\",\n )\n db_session.add(event)\n db_session.commit()\n return event\n\n\n# ── T017: build_idempotency_key tests ─────────────────────────\n\nclass TestBuildIdempotencyKey:\n \"\"\"Tests for build_idempotency_key helper.\"\"\"\n\n # #region test_basic_key [C:2] [TYPE Function]\n # @BRIEF Basic idempotency key with tables and times.\n def test_basic_key(self):\n tables = [\"raw.sales\", \"RAW.INVENTORY\"]\n start = datetime(2026, 5, 21, 22, 0, 0, tzinfo=timezone.utc)\n end = datetime(2026, 5, 22, 2, 0, 0, tzinfo=timezone.utc)\n key = build_idempotency_key(tables, start, end)\n assert key[0] == frozenset({\"raw.inventory\", \"raw.sales\"})\n assert key[1] == \"2026-05-21T22:00:00+00:00\"\n assert key[2] == \"2026-05-22T02:00:00+00:00\"\n # #endregion test_basic_key\n\n # #region test_key_without_end_time [C:2] [TYPE Function]\n # @BRIEF Idempotency key with None end_time.\n def test_key_without_end_time(self):\n tables = [\"raw.sales\"]\n start = datetime(2026, 5, 21, 22, 0, 0, tzinfo=timezone.utc)\n key = build_idempotency_key(tables, start, None)\n assert key[0] == frozenset({\"raw.sales\"})\n assert key[1] == \"2026-05-21T22:00:00+00:00\"\n assert key[2] is None\n # #endregion test_key_without_end_time\n\n # #region test_key_table_sorting [C:2] [TYPE Function]\n # @BRIEF Tables are sorted alphabetically in frozenset.\n def test_key_table_sorting(self):\n key1 = build_idempotency_key([\"z.table\", \"a.table\"], None, None)\n key2 = build_idempotency_key([\"a.table\", \"z.table\"], None, None)\n assert key1 == key2\n # #endregion test_key_table_sorting\n\n\n# ── T019: find_affected_dashboards tests ──────────────────────\n\nclass TestFindAffectedDashboards:\n \"\"\"Tests for find_affected_dashboards.\"\"\"\n\n # #region test_empty_tables [C:2] [TYPE Function]\n # @BRIEF Empty tables list returns empty.\n def test_empty_tables(self, mock_superset):\n result = find_affected_dashboards([], mock_superset)\n assert result == []\n # #endregion test_empty_tables\n\n # #region test_table_based_match [C:2] [TYPE Function]\n # @BRIEF Table-based dataset matching.\n def test_table_based_match(self, mock_superset):\n mock_superset.get_datasets.return_value = (2, [\n {\"id\": 1, \"schema\": \"raw\", \"table_name\": \"sales\", \"sql\": None},\n {\"id\": 2, \"schema\": \"raw\", \"table_name\": \"inventory\", \"sql\": None},\n ])\n mock_superset.get_dataset_detail.side_effect = [\n {\"linked_dashboards\": [{\"id\": 101}]},\n {\"linked_dashboards\": [{\"id\": 102}]},\n ]\n\n result = find_affected_dashboards([\"raw.sales\"], mock_superset)\n assert 101 in result\n assert 102 not in result\n # #endregion test_table_based_match\n\n # #region test_virtual_dataset_match [C:2] [TYPE Function]\n # @BRIEF Virtual SQL dataset matching via SqlTableExtractor.\n def test_virtual_dataset_match(self, mock_superset):\n mock_superset.get_datasets.return_value = (1, [\n {\n \"id\": 1,\n \"schema\": \"raw\",\n \"table_name\": \"sales_view\",\n \"sql\": \"SELECT * FROM raw.sales\",\n \"is_sqllab_view\": True,\n },\n ])\n mock_superset.get_dataset_detail.return_value = {\n \"linked_dashboards\": [{\"id\": 101}],\n }\n\n result = find_affected_dashboards([\"raw.sales\"], mock_superset)\n assert 101 in result\n # #endregion test_virtual_dataset_match\n\n # #region test_case_insensitive_matching [C:2] [TYPE Function]\n # @BRIEF Matching is case-insensitive.\n def test_case_insensitive_matching(self, mock_superset):\n mock_superset.get_datasets.return_value = (1, [\n {\"id\": 1, \"schema\": \"RAW\", \"table_name\": \"SALES\", \"sql\": None},\n ])\n mock_superset.get_dataset_detail.return_value = {\n \"linked_dashboards\": [{\"id\": 101}],\n }\n\n result = find_affected_dashboards([\"raw.sales\"], mock_superset)\n assert 101 in result\n # #endregion test_case_insensitive_matching\n\n # #region test_superset_api_failure [C:2] [TYPE Function]\n # @BRIEF Superset API failure propagates.\n def test_superset_api_failure(self, mock_superset):\n mock_superset.get_datasets.side_effect = Exception(\"Superset API error\")\n with pytest.raises(Exception, match=\"Superset API error\"):\n find_affected_dashboards([\"raw.sales\"], mock_superset)\n # #endregion test_superset_api_failure\n\n\n# ── T019a: ensure_banner_chart tests ──────────────────────────\n\nclass TestEnsureBannerChart:\n \"\"\"Tests for ensure_banner_chart.\"\"\"\n\n # #region test_creates_new_banner [C:2] [TYPE Function]\n # @BRIEF No existing banner — creates new chart and banner row.\n def test_creates_new_banner(self, mock_superset, db_session):\n banner = ensure_banner_chart(\n 101, \"test-env\", mock_superset, db_session\n )\n assert banner.dashboard_id == 101\n assert banner.chart_id == 12345\n assert banner.status == MaintenanceDashboardBannerStatus.ACTIVE\n mock_superset.create_markdown_chart.assert_called_once_with(101, \"*Maintenance banner placeholder*\")\n mock_superset.update_dashboard_layout.assert_called_once_with(101, 12345)\n # #endregion test_creates_new_banner\n\n # #region test_returns_existing_banner [C:2] [TYPE Function]\n # @BRIEF Existing active banner — returns it.\n def test_returns_existing_banner(self, mock_superset, db_session):\n existing = MaintenanceDashboardBanner(\n environment_id=\"test-env\",\n dashboard_id=101,\n chart_id=999,\n banner_text=\"Existing\",\n status=MaintenanceDashboardBannerStatus.ACTIVE,\n )\n db_session.add(existing)\n db_session.commit()\n\n banner = ensure_banner_chart(\n 101, \"test-env\", mock_superset, db_session\n )\n assert banner.id == existing.id\n assert banner.chart_id == 999\n mock_superset.create_markdown_chart.assert_not_called()\n # #endregion test_returns_existing_banner\n\n # #region test_chart_creation_failure [C:2] [TYPE Function]\n # @BRIEF Chart creation failure propagates.\n def test_chart_creation_failure(self, mock_superset, db_session):\n mock_superset.create_markdown_chart.side_effect = Exception(\"Chart error\")\n with pytest.raises(Exception, match=\"Chart error\"):\n ensure_banner_chart(101, \"test-env\", mock_superset, db_session)\n # #endregion test_chart_creation_failure\n\n\n# ── T020: build_banner_text tests ─────────────────────────────\n\nclass TestBuildBannerText:\n \"\"\"Tests for build_banner_text.\"\"\"\n\n # #region test_single_event [C:2] [TYPE Function]\n # @BRIEF Single event — direct substitution.\n def test_single_event(self):\n events = [\n {\"start_time\": \"2026-05-21T22:00:00+00:00\",\n \"end_time\": \"2026-05-22T02:00:00+00:00\",\n \"message\": \"Updating tables\"}\n ]\n template = \"Banner: {message} ({start_time} - {end_time})\"\n result = build_banner_text(events, template)\n assert \"Updating tables\" in result\n assert \"2026-05-21 22:00\" in result\n assert \"2026-05-22 02:00\" in result\n # #endregion test_single_event\n\n # #region test_multiple_events [C:2] [TYPE Function]\n # @BRIEF Multiple events — combined message.\n def test_multiple_events(self):\n events = [\n {\"start_time\": \"2026-05-21T22:00:00+00:00\",\n \"end_time\": \"2026-05-22T02:00:00+00:00\",\n \"message\": \"Event 1\"},\n {\"start_time\": \"2026-05-23T22:00:00+00:00\",\n \"end_time\": \"2026-05-24T02:00:00+00:00\",\n \"message\": \"Event 2\"},\n ]\n template = \"Banner: {message} ({start_time} - {end_time})\"\n result = build_banner_text(events, template)\n assert \"Event 1\" in result\n assert \"Event 2\" in result\n # #endregion test_multiple_events\n\n # #region test_empty_events [C:2] [TYPE Function]\n # @BRIEF Empty events list returns empty string.\n def test_empty_events(self):\n result = build_banner_text([], \"Template: {message}\")\n assert result == \"\"\n # #endregion test_empty_events\n\n # #region test_missing_variables [C:2] [TYPE Function]\n # @BRIEF Missing variables replaced with empty string.\n def test_missing_variables(self):\n events = [{\"start_time\": None, \"end_time\": None, \"message\": \"Hi\"}]\n template = \"Start: {start_time} - End: {end_time} - Msg: {message}\"\n result = build_banner_text(events, template)\n assert \"уточняется\" in result\n assert \"Hi\" in result\n # #endregion test_missing_variables\n\n # #region test_html_escaping [C:2] [TYPE Function]\n # @BRIEF Message is HTML-escaped.\n def test_html_escaping(self):\n events = [{\n \"start_time\": \"2026-05-21T22:00:00+00:00\",\n \"end_time\": \"2026-05-22T02:00:00+00:00\",\n \"message\": \"\",\n }]\n template = \"{message}\"\n result = build_banner_text(events, template)\n assert \"\",\n }]\n template = \"{message}\"\n result = build_banner_text(events, template)\n assert \"\n\n\n
\n
\n
\n ({ value: b.name, label: b.name }))}\n />\n
\n\n showCreate = !showCreate}\n disabled={loading}\n class=\"text-primary\"\n >\n + {$t.git.new_branch}\n \n
\n\n {#if showCreate}\n
\n
\n \n
\n \n {$t.git.create}\n \n showCreate = false}\n disabled={loading}\n >\n {$t.common.cancel}\n \n
\n {/if}\n
\n\n\n\n" }, { - "contract_id": "handleSelect:Function", - "contract_type": "Function", + "contract_id": "props", + "contract_type": "Block", "file_path": "frontend/src/components/git/BranchSelector.svelte", - "start_line": 71, - "end_line": 80, + "start_line": 20, + "end_line": 28, "tier": "TIER_1", - "complexity": 1, + "complexity": 2, "metadata": { - "BRIEF": "Handles branch selection from dropdown.", - "POST": "handleCheckout is called with selected branch.", - "PRE": "event contains branch name." + "COMPLEXITY": 2, + "PRE": "dashboardId is non-empty slug; envId resolved via GitManager fallback chain." }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " // #region handleSelect:Function [TYPE Function]\n /**\n * @purpose Handles branch selection from dropdown.\n * @pre event contains branch name.\n * @post handleCheckout is called with selected branch.\n */\n function handleSelect(event) {\n handleCheckout(event.target.value);\n }\n // #endregion handleSelect:Function\n" + "body": " // #region props [C:2] [TYPE Block]\n // @PRE dashboardId is non-empty slug; envId resolved via GitManager fallback chain.\n let {\n dashboardId,\n envId = null,\n currentBranch = $bindable('main'),\n onchange = () => {},\n } = $props();\n // #endregion props\n" }, { - "contract_id": "handleCheckout:Function", - "contract_type": "Function", + "contract_id": "state", + "contract_type": "Block", "file_path": "frontend/src/components/git/BranchSelector.svelte", - "start_line": 82, - "end_line": 101, + "start_line": 30, + "end_line": 35, "tier": "TIER_1", "complexity": 1, "metadata": { - "BRIEF": "Переключает текущую ветку.", - "PARAM": "{string} branchName - Имя ветки.", - "POST": "currentBranch обновлен, родительский callback вызван." + "COMPLEXITY": 1 }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " // #region handleCheckout:Function [TYPE Function]\n /**\n * @purpose Переключает текущую ветку.\n * @param {string} branchName - Имя ветки.\n * @post currentBranch обновлен, родительский callback вызван.\n */\n async function handleCheckout(branchName) {\n console.log(`[EXT:frontend:BranchSelector][Action] Checking out branch ${branchName}`);\n try {\n await gitService.checkoutBranch(dashboardId, branchName, envId);\n currentBranch = branchName;\n onchange({ branch: branchName });\n toast($t.git?.switched_to?.replace('{branch}', branchName), 'success');\n console.log(`[EXT:frontend:BranchSelector][Coherence:OK] Checked out ${branchName}`);\n } catch (e) {\n console.error(`[EXT:frontend:BranchSelector][Coherence:Failed] ${e.message}`);\n toast(e.message, 'error');\n }\n }\n // #endregion handleCheckout:Function\n" + "body": " // #region state [C:1] [TYPE Block]\n let branches = $state([]);\n let loading = $state(false);\n let showCreate = $state(false);\n let newBranchName = $state('');\n // #endregion state\n" }, { - "contract_id": "handleCreate:Function", + "contract_id": "loadBranches", "contract_type": "Function", "file_path": "frontend/src/components/git/BranchSelector.svelte", - "start_line": 103, - "end_line": 124, + "start_line": 37, + "end_line": 55, "tier": "TIER_1", - "complexity": 1, + "complexity": 2, "metadata": { - "BRIEF": "Создает новую ветку.", - "POST": "Новая ветка создана и загружена; showCreate reset.", - "PRE": "newBranchName is not empty." + "BRIEF": "Load branch list from backend.", + "COMPLEXITY": 2, + "POST": "branches array populated with BranchSchema objects.", + "PRE": "dashboardId is non-empty; envId required when ref is slug.", + "SIDE_EFFECT": "GETs /git/repositories/{ref}/branches." }, "relations": [], "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": " // #region handleCreate:Function [TYPE Function]\n /**\n * @purpose Создает новую ветку.\n * @pre newBranchName is not empty.\n * @post Новая ветка создана и загружена; showCreate reset.\n */\n async function handleCreate() {\n if (!newBranchName) return;\n console.log(`[EXT:frontend:BranchSelector][Action] Creating branch ${newBranchName} from ${currentBranch}`);\n try {\n await gitService.createBranch(dashboardId, newBranchName, currentBranch, envId);\n toast($t.git?.created_branch?.replace('{branch}', newBranchName), 'success');\n showCreate = false;\n newBranchName = '';\n await loadBranches();\n console.log(`[EXT:frontend:BranchSelector][Coherence:OK] Branch created`);\n } catch (e) {\n console.error(`[EXT:frontend:BranchSelector][Coherence:Failed] ${e.message}`);\n toast(e.message, 'error');\n }\n }\n // #endregion handleCreate:Function\n" + "body": " // #region loadBranches [C:2] [TYPE Function]\n // @BRIEF Load branch list from backend.\n // @PRE dashboardId is non-empty; envId required when ref is slug.\n // @POST branches array populated with BranchSchema objects.\n // @SIDE_EFFECT GETs /git/repositories/{ref}/branches.\n async function loadBranches() {\n console.log(`[EXT:frontend:BranchSelector][Action] Loading branches for dashboard ${dashboardId}`);\n loading = true;\n try {\n branches = await gitService.getBranches(dashboardId, envId);\n console.log(`[EXT:frontend:BranchSelector][Coherence:OK] Loaded ${branches.length} branches`);\n } catch (e) {\n console.error(`[EXT:frontend:BranchSelector][Coherence:Failed] ${e.message}`);\n toast($t.git?.load_branches_failed, 'error');\n } finally {\n loading = false;\n }\n }\n // #endregion loadBranches\n" + }, + { + "contract_id": "handleSelect", + "contract_type": "Function", + "file_path": "frontend/src/components/git/BranchSelector.svelte", + "start_line": 57, + "end_line": 64, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Handle branch selection from dropdown.", + "COMPLEXITY": 1, + "POST": "handleCheckout called with selected branch name.", + "PRE": "event contains target.value with branch name." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleSelect [C:1] [TYPE Function]\n // @BRIEF Handle branch selection from dropdown.\n // @PRE event contains target.value with branch name.\n // @POST handleCheckout called with selected branch name.\n function handleSelect(event) {\n handleCheckout(event.target.value);\n }\n // #endregion handleSelect\n" + }, + { + "contract_id": "handleCheckout", + "contract_type": "Function", + "file_path": "frontend/src/components/git/BranchSelector.svelte", + "start_line": 66, + "end_line": 84, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Switch repository to selected branch.", + "COMPLEXITY": 2, + "POST": "currentBranch updated; onchange callback fired.", + "PRE": "branchName is non-empty; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /git/repositories/{ref}/checkout." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleCheckout [C:2] [TYPE Function]\n // @BRIEF Switch repository to selected branch.\n // @PRE branchName is non-empty; envId required when ref is slug.\n // @POST currentBranch updated; onchange callback fired.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/checkout.\n async function handleCheckout(branchName) {\n console.log(`[EXT:frontend:BranchSelector][Action] Checking out branch ${branchName}`);\n try {\n await gitService.checkoutBranch(dashboardId, branchName, envId);\n currentBranch = branchName;\n onchange({ branch: branchName });\n toast($t.git?.switched_to?.replace('{branch}', branchName), 'success');\n console.log(`[EXT:frontend:BranchSelector][Coherence:OK] Checked out ${branchName}`);\n } catch (e) {\n console.error(`[EXT:frontend:BranchSelector][Coherence:Failed] ${e.message}`);\n toast(e.message, 'error');\n }\n }\n // #endregion handleCheckout\n" + }, + { + "contract_id": "handleCreate", + "contract_type": "Function", + "file_path": "frontend/src/components/git/BranchSelector.svelte", + "start_line": 86, + "end_line": 106, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create a new branch from current branch.", + "COMPLEXITY": 2, + "POST": "New branch created; branch list reloaded; create mode closed.", + "PRE": "newBranchName is non-empty; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /git/repositories/{ref}/branches." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleCreate [C:2] [TYPE Function]\n // @BRIEF Create a new branch from current branch.\n // @PRE newBranchName is non-empty; envId required when ref is slug.\n // @POST New branch created; branch list reloaded; create mode closed.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/branches.\n async function handleCreate() {\n if (!newBranchName) return;\n console.log(`[EXT:frontend:BranchSelector][Action] Creating branch ${newBranchName} from ${currentBranch}`);\n try {\n await gitService.createBranch(dashboardId, newBranchName, currentBranch, envId);\n toast($t.git?.created_branch?.replace('{branch}', newBranchName), 'success');\n showCreate = false;\n newBranchName = '';\n await loadBranches();\n console.log(`[EXT:frontend:BranchSelector][Coherence:OK] Branch created`);\n } catch (e) {\n console.error(`[EXT:frontend:BranchSelector][Coherence:Failed] ${e.message}`);\n toast(e.message, 'error');\n }\n }\n // #endregion handleCreate\n" }, { "contract_id": "loadHistory:Function", @@ -60369,7 +61351,7 @@ "contract_type": "Component", "file_path": "frontend/src/components/git/GitManager.svelte", "start_line": 1, - "end_line": 228, + "end_line": 231, "tier": "TIER_2", "complexity": 4, "metadata": { @@ -60451,7 +61433,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{#if show}\n
{ if (e.key === 'Escape') closeModal(); }} role=\"button\" tabindex=\"0\" aria-label={$t.common?.close || 'Close'}>\n
\n \n \n
slug: {dashboardId}
\n
\n\n {#if checkingStatus}\n
\n {:else if !initialized}\n \n {:else}\n
\n {#if hasOriginConfigMismatch}\n
Git server mismatch detected
Configured: {configHost}, origin: {originHost}.
\n {/if}\n
\n
\n {currentEnvStage || 'DEV'}\n Текущая ветка: {currentBranch}\n
\n
\n
\n
\n \n \n \n
\n {#if activeTab === 'workspace'}\n \n {:else if activeTab === 'release'}\n \n {:else}\n \n {/if}\n
\n {/if}\n
\n \n
\n{/if}\n\n\n\n" + "body": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{#if show}\n
{ if (e.key === 'Escape') closeModal(); }} role=\"button\" tabindex=\"0\" aria-label={$t.common?.close || 'Close'}>\n
\n \n \n
slug: {dashboardId}
\n
\n\n {#if checkingStatus}\n
\n {:else if !initialized}\n \n {:else}\n
\n {#if hasOriginConfigMismatch}\n
Git server mismatch detected
Configured: {configHost}, origin: {originHost}.
\n {/if}\n
\n
\n {currentEnvStage || 'DEV'}\n Текущая ветка: {currentBranch}\n
\n
\n
\n
\n \n \n \n
\n {#if activeTab === 'workspace'}\n \n {:else if activeTab === 'release'}\n \n {:else}\n \n {/if}\n
\n {/if}\n
\n \n
\n{/if}\n\n\n\n" }, { "contract_id": "GitMergeDialog", @@ -60606,7 +61588,7 @@ "contract_type": "Module", "file_path": "frontend/src/components/git/useGitManager.js", "start_line": 1, - "end_line": 275, + "end_line": 400, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -60631,7 +61613,436 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "// #region UseGitManager [C:3] [TYPE Module] [SEMANTICS git, handlers, composable, orchestration]\n// @BRIEF Composable for GitManager handler functions — extracted to reduce component size per INV_7.\n// @RELATION DEPENDS_ON -> [EXT:frontend:gitService]\n// @RELATION DEPENDS_ON -> [GitUtils]\n// @RATIONALE Extracted handler logic from GitManager (1220→~350 lines) to meet INV_7 <150 line contract limit.\nimport { gitService } from '../../services/gitService';\nimport { api } from '../../lib/api.js';\nimport { isNumericDashboardRef, resolveDefaultConfig, extractUnfinishedMergeContext, buildSuggestedRepoName } from '../../services/git-utils.js';\n\nexport function createGitHandlers(getState, setState) {\n const s = () => getState();\n const u = (patch) => setState(patch);\n\n return {\n async loadCurrentEnvironmentStage() {\n const currentEnvId = s().resolveEnvId();\n if (!currentEnvId) return;\n try {\n const environments = await api.getEnvironmentsList();\n const currentEnv = (environments || []).find((item) => item.id === currentEnvId);\n if (!currentEnv) return;\n const stage = s().normalizeEnvStageFn(currentEnv);\n u({ currentEnvStage: stage });\n const defaults = s().applyGitflowStageDefaultsFn(stage);\n u(defaults);\n } catch (e) {\n console.error(`[GitManager][Coherence:Failed] Failed to resolve environment stage: ${e.message}`);\n }\n },\n\n async checkStatus() {\n if (isNumericDashboardRef(s().dashboardId)) {\n u({ checkingStatus: false, initialized: false });\n s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error');\n return;\n }\n u({ checkingStatus: true });\n try {\n await gitService.getBranches(s().dashboardId, s().envId);\n u({ initialized: true });\n await this.loadWorkspace();\n } catch (_e) {\n u({ initialized: false });\n try { const configs = await gitService.getConfigs(); u({ configs }); } catch (_e2) { u({ configs: [] }); }\n const defaultConfig = resolveDefaultConfig(s().configs, s().selectedConfigId);\n if (defaultConfig?.id) u({ selectedConfigId: defaultConfig.id });\n } finally { u({ checkingStatus: false }); }\n },\n\n async loadWorkspace() {\n if (!s().initialized) return;\n u({ workspaceLoading: true });\n try {\n const ws = await gitService.getStatus(s().dashboardId, s().envId);\n const sd = await gitService.getDiff(s().dashboardId, null, true, s().envId);\n const ud = await gitService.getDiff(s().dashboardId, null, false, s().envId);\n u({ workspaceStatus: ws, workspaceDiff: [sd, ud].filter(Boolean).join('\\n\\n'), currentBranch: ws?.current_branch || s().currentBranch });\n } catch (e) {\n s().toast(e.message || 'Не удалось загрузить изменения', 'error');\n } finally { u({ workspaceLoading: false }); }\n },\n\n async handleSync() {\n if (isNumericDashboardRef(s().dashboardId)) { s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error'); return; }\n u({ loading: true });\n try {\n const sourceEnvId = localStorage.getItem('selected_env_id');\n await gitService.sync(s().dashboardId, sourceEnvId, s().envId);\n s().toast(s().t?.git?.sync_success || 'Состояние дашборда синхронизировано с Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n\n async handleGenerateMessage() {\n u({ generatingMessage: true });\n try {\n const data = await api.postApi(`/git/repositories/${encodeURIComponent(String(s().dashboardId))}/generate-message${s().envId ? `?env_id=${encodeURIComponent(String(s().envId))}` : ''}`, undefined, { suppressToast: true });\n u({ commitMessage: data?.message || '' });\n s().toast(s().t?.git?.commit_message_generated || 'Сообщение для коммита сгенерировано', 'success');\n } catch (e) { s().toast(e.message || s().t?.git?.commit_message_failed || 'Не удалось сгенерировать сообщение', 'error'); } finally { u({ generatingMessage: false }); }\n },\n\n async handleCommit() {\n if (!s().commitMessage || !s().hasWorkspaceChanges) return;\n u({ committing: true });\n try {\n await gitService.commit(s().dashboardId, s().commitMessage, [], s().envId);\n if (s().autoPushAfterCommit) {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.commit_and_push_success || 'Коммит создан и отправлен в remote', 'success');\n } else { s().toast(s().t?.git?.commit_success || 'Коммит успешно создан', 'success'); }\n u({ commitMessage: '' });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ committing: false }); }\n },\n\n openUnfinishedMergeDialogFromError(error) {\n const context = extractUnfinishedMergeContext(error);\n if (!context) return false;\n u({ unfinishedMergeContext: context, showUnfinishedMergeDialog: true });\n return true;\n },\n\n async loadMergeRecoveryState() {\n u({ mergeRecoveryLoading: true });\n try {\n const status = await gitService.getMergeStatus(s().dashboardId, s().envId);\n if (!status?.has_unfinished_merge) { this.closeUnfinishedMergeDialog(); return; }\n u({\n unfinishedMergeContext: {\n ...(s().unfinishedMergeContext || {}),\n message: s().unfinishedMergeContext?.message || (s().t?.git?.unfinished_merge?.default_message || ''),\n repositoryPath: String(status.repository_path || s().unfinishedMergeContext?.repositoryPath || ''),\n gitDir: String(status.git_dir || s().unfinishedMergeContext?.gitDir || ''),\n currentBranch: String(status.current_branch || s().unfinishedMergeContext?.currentBranch || ''),\n mergeHead: String(status.merge_head || s().unfinishedMergeContext?.mergeHead || ''),\n mergeMessagePreview: String(status.merge_message_preview || ''),\n nextSteps: Array.isArray(s().unfinishedMergeContext?.nextSteps) ? s().unfinishedMergeContext.nextSteps : [],\n commands: Array.isArray(s().unfinishedMergeContext?.commands) ? s().unfinishedMergeContext.commands : [],\n conflictsCount: Number(status.conflicts_count || 0),\n }\n });\n } catch (e) { s().toast(e.message || 'Failed to load merge status', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n\n closeUnfinishedMergeDialog() {\n u({ showUnfinishedMergeDialog: false, unfinishedMergeContext: null, mergeConflicts: [], showConflictResolver: false });\n },\n\n async handleOpenConflictResolver() {\n u({ mergeRecoveryLoading: true });\n try {\n const mc = await gitService.getMergeConflicts(s().dashboardId, s().envId);\n if (!Array.isArray(mc) || mc.length === 0) { s().toast(s().t?.git?.unfinished_merge?.no_conflicts || 'No unresolved conflicts were found', 'info'); return; }\n u({ mergeConflicts: mc, showConflictResolver: true });\n } catch (e) { s().toast(e.message || 'Failed to load merge conflicts', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n\n async handleResolveConflicts(event) {\n const detail = event?.detail || {};\n const resolutions = Object.entries(detail).map(([fp, r]) => ({ file_path: fp, resolution: r }));\n if (!resolutions.length) { s().toast(s().t?.git?.unfinished_merge?.resolve_empty || 'No conflict resolutions selected', 'warning'); return; }\n u({ mergeResolveInProgress: true });\n try {\n await gitService.resolveMergeConflicts(s().dashboardId, resolutions, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.resolve_success || 'Conflicts were resolved and staged', 'success');\n u({ showConflictResolver: false });\n await this.loadMergeRecoveryState();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to resolve conflicts', 'error'); } finally { u({ mergeResolveInProgress: false }); }\n },\n\n async handleAbortUnfinishedMerge() {\n u({ mergeAbortInProgress: true });\n try {\n await gitService.abortMerge(s().dashboardId, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.abort_success || 'Merge was aborted', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to abort merge', 'error'); } finally { u({ mergeAbortInProgress: false }); }\n },\n\n async handleContinueUnfinishedMerge() {\n u({ mergeContinueInProgress: true });\n try {\n await gitService.continueMerge(s().dashboardId, '', s().envId);\n s().toast(s().t?.git?.unfinished_merge?.continue_success || 'Merge commit created successfully', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) {\n s().toast(e.message || 'Failed to continue merge', 'error');\n await this.loadMergeRecoveryState();\n } finally { u({ mergeContinueInProgress: false }); }\n },\n\n getUnfinishedMergeCommandsText() {\n if (!s().unfinishedMergeContext?.commands?.length) return '';\n return s().unfinishedMergeContext.commands.join('\\n');\n },\n\n async handleCopyUnfinishedMergeCommands() {\n const text = this.getUnfinishedMergeCommandsText();\n if (!text) { s().toast(s().t?.git?.unfinished_merge?.copy_empty || 'Команды для копирования отсутствуют', 'warning'); return; }\n u({ copyingUnfinishedMergeCommands: true });\n try {\n await navigator.clipboard.writeText(text);\n s().toast(s().t?.git?.unfinished_merge?.copy_success || 'Команды скопированы в буфер обмена', 'success');\n } catch (_e) { s().toast(s().t?.git?.unfinished_merge?.copy_failed || 'Не удалось скопировать команды', 'error'); } finally { u({ copyingUnfinishedMergeCommands: false }); }\n },\n\n async handlePull() {\n u({ isPulling: true });\n try {\n await gitService.pull(s().dashboardId, s().envId);\n s().toast(s().t?.git?.pull_success || 'Изменения получены из Git', 'success');\n await this.loadWorkspace();\n } catch (e) {\n const handled = this.openUnfinishedMergeDialogFromError(e);\n if (handled) await this.loadMergeRecoveryState();\n else s().toast(e.message, 'error');\n } finally { u({ isPulling: false }); }\n },\n\n async handlePush() {\n u({ isPushing: true });\n try {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.push_success || 'Изменения отправлены в Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ isPushing: false }); }\n },\n\n async handlePromote() {\n const st = s();\n if (!st.promoteFromBranch || !st.promoteToBranch || st.promoteFromBranch === st.promoteToBranch) { st.toast('Выберите разные исходную и целевую ветки', 'error'); return; }\n if (st.promoteMode === 'direct' && !String(st.promoteReason || '').trim()) { st.toast('Для небезопасного прямого переноса укажите причину', 'error'); return; }\n u({ promoting: true });\n try {\n const response = await gitService.promote(st.dashboardId, {\n from_branch: st.promoteFromBranch, to_branch: st.promoteToBranch, mode: st.promoteMode,\n title: `Promote ${st.promoteFromBranch} -> ${st.promoteToBranch}: ${st.dashboardTitle || st.dashboardId}`,\n description: st.promoteMode === 'direct' ? `Unsafe direct promote.\\nReason: ${st.promoteReason}` : undefined,\n reason: st.promoteMode === 'direct' ? st.promoteReason : undefined,\n }, st.envId);\n if (st.promoteMode === 'direct') { st.toast('Прямой перенос выполнен. Нарушение политики записано в логи.', 'warning'); }\n else { if (response?.url) window.open(response.url, '_blank', 'noopener,noreferrer'); st.toast('Merge Request создан на Git сервере', 'success'); }\n } catch (e) { st.toast(e.message, 'error'); } finally { u({ promoting: false }); }\n },\n\n openDeployModal() {\n const st = s();\n if (st.currentEnvStage === 'PROD') {\n const expected = String(st.dashboardId);\n const confirmation = prompt(`Подтвердите деплой в PROD. Введите slug дашборда: ${expected}`);\n if (String(confirmation || '').trim() !== expected) { st.toast('Подтверждение PROD не пройдено. Деплой отменен.', 'error'); return; }\n }\n u({ showDeployModal: true });\n },\n\n async handleCreateRemoteRepo() {\n const config = resolveDefaultConfig(s().configs, s().selectedConfigId);\n if (!config) { s().toast(s().t?.git?.init_validation_error || 'Сначала выберите Git сервер', 'error'); return; }\n if (!s().selectedConfigId && config.id) u({ selectedConfigId: config.id });\n const suggestedName = buildSuggestedRepoName(s().dashboardTitle, s().dashboardId);\n const inputName = prompt(`Repository name for ${config.provider}:`, suggestedName);\n const repoName = String(inputName || '').trim();\n if (!repoName) return;\n u({ creatingRemoteRepo: true });\n try {\n const repo = await gitService.createRemoteRepository(config.id, {\n name: repoName, private: true,\n description: `Superset dashboard ${s().dashboardId}: ${s().dashboardTitle || repoName}`,\n auto_init: true, default_branch: 'main',\n });\n const url = repo?.clone_url || repo?.html_url || '';\n if (!url) throw new Error('Remote repository created, but URL is empty');\n u({ remoteUrl: url });\n s().toast(`Repository created on ${config.provider}`, 'success');\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ creatingRemoteRepo: false }); }\n },\n\n async handleInit() {\n if (!s().selectedConfigId || !s().remoteUrl) { s().toast(s().t?.git?.init_validation_error || 'Заполните все поля', 'error'); return; }\n u({ loading: true });\n try {\n await gitService.initRepository(s().dashboardId, s().selectedConfigId, s().remoteUrl, s().envId);\n s().toast(s().t?.git?.init_success || 'Репозиторий инициализирован', 'success');\n const provider = resolveDefaultConfig(s().configs, s().selectedConfigId)?.provider || '';\n u({ initialized: true, repositoryProvider: provider });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n };\n}\n// #endregion UseGitManager\n" + "body": "// #region UseGitManager [C:3] [TYPE Module] [SEMANTICS git, handlers, composable, orchestration]\n// @BRIEF Composable for GitManager handler functions — extracted to reduce component size per INV_7.\n// @RELATION DEPENDS_ON -> [EXT:frontend:gitService]\n// @RELATION DEPENDS_ON -> [GitUtils]\n// @RATIONALE Extracted handler logic from GitManager (1220→~350 lines) to meet INV_7 <150 line contract limit.\nimport { gitService } from '../../services/gitService';\nimport { api } from '../../lib/api.js';\nimport { isNumericDashboardRef, resolveDefaultConfig, extractUnfinishedMergeContext, buildSuggestedRepoName } from '../../services/git-utils.js';\n\nexport function createGitHandlers(getState, setState) {\n const s = () => getState();\n const u = (patch) => setState(patch);\n\n return {\n\n // #region loadCurrentEnvironmentStage [C:2] [TYPE Function]\n // @BRIEF Resolve current environment stage (DEV/PREPROD/PROD) and apply GitFlow defaults.\n // @PRE resolveEnvId() returns a valid environment ID, or handler exits silently.\n // @POST currentEnvStage and GitFlow defaults (promoteFromBranch, promoteToBranch) are set.\n // @SIDE_EFFECT Fetches /environments from API.\n async loadCurrentEnvironmentStage() {\n const currentEnvId = s().resolveEnvId();\n if (!currentEnvId) return;\n try {\n const environments = await api.getEnvironmentsList();\n const currentEnv = (environments || []).find((item) => item.id === currentEnvId);\n if (!currentEnv) return;\n const stage = s().normalizeEnvStageFn(currentEnv);\n u({ currentEnvStage: stage });\n const defaults = s().applyGitflowStageDefaultsFn(stage);\n u(defaults);\n } catch (e) {\n console.error(`[GitManager][Coherence:Failed] Failed to resolve environment stage: ${e.message}`);\n }\n },\n // #endregion loadCurrentEnvironmentStage\n\n // #region checkStatus [C:3] [TYPE Function]\n // @BRIEF Check if Git repository is initialized for the dashboard.\n // @PRE dashboardId is a non-numeric slug; envId is required (resolved with localStorage fallback).\n // @POST initialized=true if repository found and workspace loaded; initialized=false if not found or envId missing.\n // @SIDE_EFFECT Fetches /git/repositories/{ref}/branches; may fetch /git/repositories/{ref}/status and /diff on success.\n async checkStatus() {\n if (isNumericDashboardRef(s().dashboardId)) {\n u({ checkingStatus: false, initialized: false });\n s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error');\n return;\n }\n u({ checkingStatus: true });\n if (!s().envId) {\n u({ initialized: false, checkingStatus: false });\n return;\n }\n try {\n await gitService.getBranches(s().dashboardId, s().envId);\n u({ initialized: true });\n await this.loadWorkspace();\n } catch (_e) {\n u({ initialized: false });\n } finally { u({ checkingStatus: false }); }\n },\n // #endregion checkStatus\n\n // #region loadWorkspace [C:2] [TYPE Function]\n // @BRIEF Load Git workspace status and diff for initialized repository.\n // @PRE initialized is true; envId is required when ref is slug.\n // @POST workspaceStatus and workspaceDiff are updated; currentBranch synced from server.\n // @SIDE_EFFECT Fetches /status and /diff for the dashboard repository.\n async loadWorkspace() {\n if (!s().initialized) return;\n u({ workspaceLoading: true });\n try {\n const ws = await gitService.getStatus(s().dashboardId, s().envId);\n const sd = await gitService.getDiff(s().dashboardId, null, true, s().envId);\n const ud = await gitService.getDiff(s().dashboardId, null, false, s().envId);\n u({ workspaceStatus: ws, workspaceDiff: [sd, ud].filter(Boolean).join('\\n\\n'), currentBranch: ws?.current_branch || s().currentBranch });\n } catch (e) {\n s().toast(e.message || 'Не удалось загрузить изменения', 'error');\n } finally { u({ workspaceLoading: false }); }\n },\n // #endregion loadWorkspace\n\n // #region handleSync [C:2] [TYPE Function]\n // @BRIEF Synchronize local dashboard state with Git repository.\n // @PRE dashboardId is a non-numeric slug; envId required when ref is slug.\n // @POST Dashboard state synced to Git workspace; workspace reloaded.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/sync; reloads workspace on success.\n async handleSync() {\n if (isNumericDashboardRef(s().dashboardId)) { s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error'); return; }\n u({ loading: true });\n try {\n const sourceEnvId = localStorage.getItem('selected_env_id');\n await gitService.sync(s().dashboardId, sourceEnvId, s().envId);\n s().toast(s().t?.git?.sync_success || 'Состояние дашборда синхронизировано с Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n // #endregion handleSync\n\n // #region handleGenerateMessage [C:2] [TYPE Function]\n // @BRIEF Generate AI commit message from dashboard diff.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/generate-message.\n // @POST commitMessage state updated with generated text.\n async handleGenerateMessage() {\n u({ generatingMessage: true });\n try {\n const data = await api.postApi(`/git/repositories/${encodeURIComponent(String(s().dashboardId))}/generate-message${s().envId ? `?env_id=${encodeURIComponent(String(s().envId))}` : ''}`, undefined, { suppressToast: true });\n u({ commitMessage: data?.message || '' });\n s().toast(s().t?.git?.commit_message_generated || 'Сообщение для коммита сгенерировано', 'success');\n } catch (e) { s().toast(e.message || s().t?.git?.commit_message_failed || 'Не удалось сгенерировать сообщение', 'error'); } finally { u({ generatingMessage: false }); }\n },\n // #endregion handleGenerateMessage\n\n // #region handleCommit [C:2] [TYPE Function]\n // @BRIEF Stage and commit workspace changes, optionally push.\n // @PRE commitMessage is non-empty; hasWorkspaceChanges is true; envId required when ref is slug.\n // @POST Changes committed (and pushed if autoPushAfterCommit); workspace reloaded.\n // @SIDE_EFFECT POSTs to /commit and optionally /push.\n async handleCommit() {\n if (!s().commitMessage || !s().hasWorkspaceChanges) return;\n u({ committing: true });\n try {\n await gitService.commit(s().dashboardId, s().commitMessage, [], s().envId);\n if (s().autoPushAfterCommit) {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.commit_and_push_success || 'Коммит создан и отправлен в remote', 'success');\n } else { s().toast(s().t?.git?.commit_success || 'Коммит успешно создан', 'success'); }\n u({ commitMessage: '' });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ committing: false }); }\n },\n // #endregion handleCommit\n\n // #region openUnfinishedMergeDialogFromError [C:2] [TYPE Function]\n // @BRIEF Parse error for unfinished merge context and open dialog.\n // @PRE error contains GIT_UNFINISHED_MERGE error_code or related detail.\n // @POST Returns true and opens dialog if merge context found; false otherwise.\n openUnfinishedMergeDialogFromError(error) {\n const context = extractUnfinishedMergeContext(error);\n if (!context) return false;\n u({ unfinishedMergeContext: context, showUnfinishedMergeDialog: true });\n return true;\n },\n // #endregion openUnfinishedMergeDialogFromError\n\n // #region loadMergeRecoveryState [C:2] [TYPE Function]\n // @BRIEF Load merge recovery state from backend for unfinished merge.\n // @PRE Repository exists; envId required when ref is slug.\n // @POST unfinishedMergeContext is populated; dialog closed if no merge in progress.\n // @SIDE_EFFECT GETs /merge/status from backend.\n async loadMergeRecoveryState() {\n u({ mergeRecoveryLoading: true });\n try {\n const status = await gitService.getMergeStatus(s().dashboardId, s().envId);\n if (!status?.has_unfinished_merge) { this.closeUnfinishedMergeDialog(); return; }\n u({\n unfinishedMergeContext: {\n ...(s().unfinishedMergeContext || {}),\n message: s().unfinishedMergeContext?.message || (s().t?.git?.unfinished_merge?.default_message || ''),\n repositoryPath: String(status.repository_path || s().unfinishedMergeContext?.repositoryPath || ''),\n gitDir: String(status.git_dir || s().unfinishedMergeContext?.gitDir || ''),\n currentBranch: String(status.current_branch || s().unfinishedMergeContext?.currentBranch || ''),\n mergeHead: String(status.merge_head || s().unfinishedMergeContext?.mergeHead || ''),\n mergeMessagePreview: String(status.merge_message_preview || ''),\n nextSteps: Array.isArray(s().unfinishedMergeContext?.nextSteps) ? s().unfinishedMergeContext.nextSteps : [],\n commands: Array.isArray(s().unfinishedMergeContext?.commands) ? s().unfinishedMergeContext.commands : [],\n conflictsCount: Number(status.conflicts_count || 0),\n }\n });\n } catch (e) { s().toast(e.message || 'Failed to load merge status', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n // #endregion loadMergeRecoveryState\n\n // #region closeUnfinishedMergeDialog [C:1] [TYPE Function]\n // @BRIEF Close unfinished merge dialog and reset merge state.\n // @POST Dialog hidden; mergeConflicts, showConflictResolver reset.\n closeUnfinishedMergeDialog() {\n u({ showUnfinishedMergeDialog: false, unfinishedMergeContext: null, mergeConflicts: [], showConflictResolver: false });\n },\n // #endregion closeUnfinishedMergeDialog\n\n // #region handleOpenConflictResolver [C:2] [TYPE Function]\n // @BRIEF Load merge conflicts and open conflict resolver UI.\n // @PRE Unfinished merge is in progress; envId required when ref is slug.\n // @POST mergeConflicts populated; showConflictResolver set to true if conflicts found.\n // @SIDE_EFFECT GETs /merge/conflicts from backend.\n async handleOpenConflictResolver() {\n u({ mergeRecoveryLoading: true });\n try {\n const mc = await gitService.getMergeConflicts(s().dashboardId, s().envId);\n if (!Array.isArray(mc) || mc.length === 0) { s().toast(s().t?.git?.unfinished_merge?.no_conflicts || 'No unresolved conflicts were found', 'info'); return; }\n u({ mergeConflicts: mc, showConflictResolver: true });\n } catch (e) { s().toast(e.message || 'Failed to load merge conflicts', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n // #endregion handleOpenConflictResolver\n\n // #region handleResolveConflicts [C:2] [TYPE Function]\n // @BRIEF Apply conflict resolutions and stage resolved files.\n // @PRE event.detail maps file paths to resolution strategies; envId required when ref is slug.\n // @POST Conflicts resolved and staged; resolver closed; workspace reloaded.\n async handleResolveConflicts(event) {\n const detail = event?.detail || {};\n const resolutions = Object.entries(detail).map(([fp, r]) => ({ file_path: fp, resolution: r }));\n if (!resolutions.length) { s().toast(s().t?.git?.unfinished_merge?.resolve_empty || 'No conflict resolutions selected', 'warning'); return; }\n u({ mergeResolveInProgress: true });\n try {\n await gitService.resolveMergeConflicts(s().dashboardId, resolutions, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.resolve_success || 'Conflicts were resolved and staged', 'success');\n u({ showConflictResolver: false });\n await this.loadMergeRecoveryState();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to resolve conflicts', 'error'); } finally { u({ mergeResolveInProgress: false }); }\n },\n // #endregion handleResolveConflicts\n\n // #region handleAbortUnfinishedMerge [C:2] [TYPE Function]\n // @BRIEF Abort current unfinished merge.\n // @PRE envId required when ref is slug.\n // @POST Merge aborted; dialog closed; workspace reloaded.\n async handleAbortUnfinishedMerge() {\n u({ mergeAbortInProgress: true });\n try {\n await gitService.abortMerge(s().dashboardId, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.abort_success || 'Merge was aborted', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to abort merge', 'error'); } finally { u({ mergeAbortInProgress: false }); }\n },\n // #endregion handleAbortUnfinishedMerge\n\n // #region handleContinueUnfinishedMerge [C:2] [TYPE Function]\n // @BRIEF Finalize unfinished merge by creating merge commit.\n // @PRE All conflicts resolved; envId required when ref is slug.\n // @POST Merge commit created; dialog closed; workspace reloaded.\n async handleContinueUnfinishedMerge() {\n u({ mergeContinueInProgress: true });\n try {\n await gitService.continueMerge(s().dashboardId, '', s().envId);\n s().toast(s().t?.git?.unfinished_merge?.continue_success || 'Merge commit created successfully', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) {\n s().toast(e.message || 'Failed to continue merge', 'error');\n await this.loadMergeRecoveryState();\n } finally { u({ mergeContinueInProgress: false }); }\n },\n // #endregion handleContinueUnfinishedMerge\n\n // #region getUnfinishedMergeCommandsText [C:1] [TYPE Function]\n // @BRIEF Get shell commands for manual merge recovery.\n // @POST Returns concatenated command string or empty string.\n getUnfinishedMergeCommandsText() {\n if (!s().unfinishedMergeContext?.commands?.length) return '';\n return s().unfinishedMergeContext.commands.join('\\n');\n },\n // #endregion getUnfinishedMergeCommandsText\n\n // #region handleCopyUnfinishedMergeCommands [C:1] [TYPE Function]\n // @BRIEF Copy merge recovery commands to clipboard.\n // @PRE commands exist in unfinishedMergeContext.\n // @POST Commands copied to clipboard; toast shown.\n async handleCopyUnfinishedMergeCommands() {\n const text = this.getUnfinishedMergeCommandsText();\n if (!text) { s().toast(s().t?.git?.unfinished_merge?.copy_empty || 'Команды для копирования отсутствуют', 'warning'); return; }\n u({ copyingUnfinishedMergeCommands: true });\n try {\n await navigator.clipboard.writeText(text);\n s().toast(s().t?.git?.unfinished_merge?.copy_success || 'Команды скопированы в буфер обмена', 'success');\n } catch (_e) { s().toast(s().t?.git?.unfinished_merge?.copy_failed || 'Не удалось скопировать команды', 'error'); } finally { u({ copyingUnfinishedMergeCommands: false }); }\n },\n // #endregion handleCopyUnfinishedMergeCommands\n\n // #region handlePull [C:2] [TYPE Function]\n // @BRIEF Pull changes from remote repository.\n // @PRE Remote 'origin' configured; envId required when ref is slug.\n // @POST Local repository updated with remote changes; workspace reloaded.\n // @SIDE_EFFECT POSTs to /pull; may open merge dialog on GIT_UNFINISHED_MERGE.\n async handlePull() {\n u({ isPulling: true });\n try {\n await gitService.pull(s().dashboardId, s().envId);\n s().toast(s().t?.git?.pull_success || 'Изменения получены из Git', 'success');\n await this.loadWorkspace();\n } catch (e) {\n const handled = this.openUnfinishedMergeDialogFromError(e);\n if (handled) await this.loadMergeRecoveryState();\n else s().toast(e.message, 'error');\n } finally { u({ isPulling: false }); }\n },\n // #endregion handlePull\n\n // #region handlePush [C:2] [TYPE Function]\n // @BRIEF Push local commits to remote repository.\n // @PRE Remote 'origin' configured; envId required when ref is slug.\n // @POST Remote updated with local commits; workspace reloaded.\n async handlePush() {\n u({ isPushing: true });\n try {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.push_success || 'Изменения отправлены в Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ isPushing: false }); }\n },\n // #endregion handlePush\n\n // #region handlePromote [C:3] [TYPE Function]\n // @BRIEF Promote changes between branches via MR or direct merge.\n // @PRE promoteFromBranch and promoteToBranch differ; direct mode requires reason; envId required when ref is slug.\n // @POST MR created on Git server (MR mode) or direct merge executed (direct mode).\n // @SIDE_EFFECT Opens MR URL in new tab (MR mode); writes policy violation to logs (direct mode).\n async handlePromote() {\n const st = s();\n if (!st.promoteFromBranch || !st.promoteToBranch || st.promoteFromBranch === st.promoteToBranch) { st.toast('Выберите разные исходную и целевую ветки', 'error'); return; }\n if (st.promoteMode === 'direct' && !String(st.promoteReason || '').trim()) { st.toast('Для небезопасного прямого переноса укажите причину', 'error'); return; }\n u({ promoting: true });\n try {\n const response = await gitService.promote(st.dashboardId, {\n from_branch: st.promoteFromBranch, to_branch: st.promoteToBranch, mode: st.promoteMode,\n title: `Promote ${st.promoteFromBranch} -> ${st.promoteToBranch}: ${st.dashboardTitle || st.dashboardId}`,\n description: st.promoteMode === 'direct' ? `Unsafe direct promote.\\nReason: ${st.promoteReason}` : undefined,\n reason: st.promoteMode === 'direct' ? st.promoteReason : undefined,\n }, st.envId);\n if (st.promoteMode === 'direct') { st.toast('Прямой перенос выполнен. Нарушение политики записано в логи.', 'warning'); }\n else { if (response?.url) window.open(response.url, '_blank', 'noopener,noreferrer'); st.toast('Merge Request создан на Git сервере', 'success'); }\n } catch (e) { st.toast(e.message, 'error'); } finally { u({ promoting: false }); }\n },\n // #endregion handlePromote\n\n // #region openDeployModal [C:2] [TYPE Function]\n // @BRIEF Open deployment target modal with PROD confirmation.\n // @PRE dashboardId is a valid slug.\n // @POST showDeployModal set to true if PROD confirmation passes.\n openDeployModal() {\n const st = s();\n if (st.currentEnvStage === 'PROD') {\n const expected = String(st.dashboardId);\n const confirmation = prompt(`Подтвердите деплой в PROD. Введите slug дашборда: ${expected}`);\n if (String(confirmation || '').trim() !== expected) { st.toast('Подтверждение PROD не пройдено. Деплой отменен.', 'error'); return; }\n }\n u({ showDeployModal: true });\n },\n // #endregion openDeployModal\n\n // #region handleCreateRemoteRepo [C:2] [TYPE Function]\n // @BRIEF Create a remote repository on the selected Git provider.\n // @PRE A Git config is selected; user provides a repo name via prompt.\n // @POST remoteUrl set to created (or existing) repository clone URL.\n // @SIDE_EFFECT POSTs to /git/config/{id}/repositories; prompts user for repo name.\n async handleCreateRemoteRepo() {\n const config = resolveDefaultConfig(s().configs, s().selectedConfigId);\n if (!config) { s().toast(s().t?.git?.init_validation_error || 'Сначала выберите Git сервер', 'error'); return; }\n if (!s().selectedConfigId && config.id) u({ selectedConfigId: config.id });\n const suggestedName = buildSuggestedRepoName(s().dashboardTitle, s().dashboardId);\n const inputName = prompt(`Repository name for ${config.provider}:`, suggestedName);\n const repoName = String(inputName || '').trim();\n if (!repoName) return;\n u({ creatingRemoteRepo: true });\n try {\n const repo = await gitService.createRemoteRepository(config.id, {\n name: repoName, private: true,\n description: `Superset dashboard ${s().dashboardId}: ${s().dashboardTitle || repoName}`,\n auto_init: true, default_branch: 'main',\n });\n const url = repo?.clone_url || repo?.html_url || '';\n if (!url) throw new Error('Remote repository created, but URL is empty');\n u({ remoteUrl: url });\n s().toast(`Repository created on ${config.provider}`, 'success');\n } catch (e) {\n if (e?.status === 409 && /already exists/i.test(String(e?.message || ''))) {\n s().toast(s().t?.git?.repo_already_exists || 'Repository already exists. Enter its URL below and click Init.', 'warning');\n } else { s().toast(e.message, 'error'); }\n } finally { u({ creatingRemoteRepo: false }); }\n },\n // #endregion handleCreateRemoteRepo\n\n // #region handleInit [C:3] [TYPE Function]\n // @BRIEF Initialize local Git repository for the dashboard: clone remote.\n // @PRE selectedConfigId is set; remoteUrl is set; envId required when ref is slug.\n // @POST Repository initialized; initialized=true; workspace loaded.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/init; loads workspace on success.\n async handleInit() {\n if (!s().selectedConfigId || !s().remoteUrl) { s().toast(s().t?.git?.init_validation_error || 'Заполните все поля', 'error'); return; }\n // ── Guard: slug-based init requires envId ──\n if (!s().envId && !isNumericDashboardRef(s().dashboardId)) {\n s().toast('Environment must be selected to initialize Git for this dashboard.', 'error');\n return;\n }\n u({ loading: true });\n try {\n await gitService.initRepository(s().dashboardId, s().selectedConfigId, s().remoteUrl, s().envId);\n s().toast(s().t?.git?.init_success || 'Репозиторий инициализирован', 'success');\n const provider = resolveDefaultConfig(s().configs, s().selectedConfigId)?.provider || '';\n u({ initialized: true, repositoryProvider: provider });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n // #endregion handleInit\n };\n}\n// #endregion UseGitManager\n" + }, + { + "contract_id": "loadCurrentEnvironmentStage", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 16, + "end_line": 36, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Resolve current environment stage (DEV/PREPROD/PROD) and apply GitFlow defaults.", + "COMPLEXITY": 2, + "POST": "currentEnvStage and GitFlow defaults (promoteFromBranch, promoteToBranch) are set.", + "PRE": "resolveEnvId() returns a valid environment ID, or handler exits silently.", + "SIDE_EFFECT": "Fetches /environments from API." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region loadCurrentEnvironmentStage [C:2] [TYPE Function]\n // @BRIEF Resolve current environment stage (DEV/PREPROD/PROD) and apply GitFlow defaults.\n // @PRE resolveEnvId() returns a valid environment ID, or handler exits silently.\n // @POST currentEnvStage and GitFlow defaults (promoteFromBranch, promoteToBranch) are set.\n // @SIDE_EFFECT Fetches /environments from API.\n async loadCurrentEnvironmentStage() {\n const currentEnvId = s().resolveEnvId();\n if (!currentEnvId) return;\n try {\n const environments = await api.getEnvironmentsList();\n const currentEnv = (environments || []).find((item) => item.id === currentEnvId);\n if (!currentEnv) return;\n const stage = s().normalizeEnvStageFn(currentEnv);\n u({ currentEnvStage: stage });\n const defaults = s().applyGitflowStageDefaultsFn(stage);\n u(defaults);\n } catch (e) {\n console.error(`[GitManager][Coherence:Failed] Failed to resolve environment stage: ${e.message}`);\n }\n },\n // #endregion loadCurrentEnvironmentStage\n" + }, + { + "contract_id": "checkStatus", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 38, + "end_line": 62, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Check if Git repository is initialized for the dashboard.", + "COMPLEXITY": 3, + "POST": "initialized=true if repository found and workspace loaded; initialized=false if not found or envId missing.", + "PRE": "dashboardId is a non-numeric slug; envId is required (resolved with localStorage fallback).", + "SIDE_EFFECT": "Fetches /git/repositories/{ref}/branches; may fetch /git/repositories/{ref}/status and /diff on success." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region checkStatus [C:3] [TYPE Function]\n // @BRIEF Check if Git repository is initialized for the dashboard.\n // @PRE dashboardId is a non-numeric slug; envId is required (resolved with localStorage fallback).\n // @POST initialized=true if repository found and workspace loaded; initialized=false if not found or envId missing.\n // @SIDE_EFFECT Fetches /git/repositories/{ref}/branches; may fetch /git/repositories/{ref}/status and /diff on success.\n async checkStatus() {\n if (isNumericDashboardRef(s().dashboardId)) {\n u({ checkingStatus: false, initialized: false });\n s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error');\n return;\n }\n u({ checkingStatus: true });\n if (!s().envId) {\n u({ initialized: false, checkingStatus: false });\n return;\n }\n try {\n await gitService.getBranches(s().dashboardId, s().envId);\n u({ initialized: true });\n await this.loadWorkspace();\n } catch (_e) {\n u({ initialized: false });\n } finally { u({ checkingStatus: false }); }\n },\n // #endregion checkStatus\n" + }, + { + "contract_id": "loadWorkspace", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 64, + "end_line": 81, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Load Git workspace status and diff for initialized repository.", + "COMPLEXITY": 2, + "POST": "workspaceStatus and workspaceDiff are updated; currentBranch synced from server.", + "PRE": "initialized is true; envId is required when ref is slug.", + "SIDE_EFFECT": "Fetches /status and /diff for the dashboard repository." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region loadWorkspace [C:2] [TYPE Function]\n // @BRIEF Load Git workspace status and diff for initialized repository.\n // @PRE initialized is true; envId is required when ref is slug.\n // @POST workspaceStatus and workspaceDiff are updated; currentBranch synced from server.\n // @SIDE_EFFECT Fetches /status and /diff for the dashboard repository.\n async loadWorkspace() {\n if (!s().initialized) return;\n u({ workspaceLoading: true });\n try {\n const ws = await gitService.getStatus(s().dashboardId, s().envId);\n const sd = await gitService.getDiff(s().dashboardId, null, true, s().envId);\n const ud = await gitService.getDiff(s().dashboardId, null, false, s().envId);\n u({ workspaceStatus: ws, workspaceDiff: [sd, ud].filter(Boolean).join('\\n\\n'), currentBranch: ws?.current_branch || s().currentBranch });\n } catch (e) {\n s().toast(e.message || 'Не удалось загрузить изменения', 'error');\n } finally { u({ workspaceLoading: false }); }\n },\n // #endregion loadWorkspace\n" + }, + { + "contract_id": "handleSync", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 83, + "end_line": 98, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Synchronize local dashboard state with Git repository.", + "COMPLEXITY": 2, + "POST": "Dashboard state synced to Git workspace; workspace reloaded.", + "PRE": "dashboardId is a non-numeric slug; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /git/repositories/{ref}/sync; reloads workspace on success." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleSync [C:2] [TYPE Function]\n // @BRIEF Synchronize local dashboard state with Git repository.\n // @PRE dashboardId is a non-numeric slug; envId required when ref is slug.\n // @POST Dashboard state synced to Git workspace; workspace reloaded.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/sync; reloads workspace on success.\n async handleSync() {\n if (isNumericDashboardRef(s().dashboardId)) { s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error'); return; }\n u({ loading: true });\n try {\n const sourceEnvId = localStorage.getItem('selected_env_id');\n await gitService.sync(s().dashboardId, sourceEnvId, s().envId);\n s().toast(s().t?.git?.sync_success || 'Состояние дашборда синхронизировано с Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n // #endregion handleSync\n" + }, + { + "contract_id": "handleGenerateMessage", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 100, + "end_line": 112, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Generate AI commit message from dashboard diff.", + "COMPLEXITY": 2, + "POST": "commitMessage state updated with generated text.", + "SIDE_EFFECT": "POSTs to /git/repositories/{ref}/generate-message." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleGenerateMessage [C:2] [TYPE Function]\n // @BRIEF Generate AI commit message from dashboard diff.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/generate-message.\n // @POST commitMessage state updated with generated text.\n async handleGenerateMessage() {\n u({ generatingMessage: true });\n try {\n const data = await api.postApi(`/git/repositories/${encodeURIComponent(String(s().dashboardId))}/generate-message${s().envId ? `?env_id=${encodeURIComponent(String(s().envId))}` : ''}`, undefined, { suppressToast: true });\n u({ commitMessage: data?.message || '' });\n s().toast(s().t?.git?.commit_message_generated || 'Сообщение для коммита сгенерировано', 'success');\n } catch (e) { s().toast(e.message || s().t?.git?.commit_message_failed || 'Не удалось сгенерировать сообщение', 'error'); } finally { u({ generatingMessage: false }); }\n },\n // #endregion handleGenerateMessage\n" + }, + { + "contract_id": "handleCommit", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 114, + "end_line": 132, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Stage and commit workspace changes, optionally push.", + "COMPLEXITY": 2, + "POST": "Changes committed (and pushed if autoPushAfterCommit); workspace reloaded.", + "PRE": "commitMessage is non-empty; hasWorkspaceChanges is true; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /commit and optionally /push." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleCommit [C:2] [TYPE Function]\n // @BRIEF Stage and commit workspace changes, optionally push.\n // @PRE commitMessage is non-empty; hasWorkspaceChanges is true; envId required when ref is slug.\n // @POST Changes committed (and pushed if autoPushAfterCommit); workspace reloaded.\n // @SIDE_EFFECT POSTs to /commit and optionally /push.\n async handleCommit() {\n if (!s().commitMessage || !s().hasWorkspaceChanges) return;\n u({ committing: true });\n try {\n await gitService.commit(s().dashboardId, s().commitMessage, [], s().envId);\n if (s().autoPushAfterCommit) {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.commit_and_push_success || 'Коммит создан и отправлен в remote', 'success');\n } else { s().toast(s().t?.git?.commit_success || 'Коммит успешно создан', 'success'); }\n u({ commitMessage: '' });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ committing: false }); }\n },\n // #endregion handleCommit\n" + }, + { + "contract_id": "openUnfinishedMergeDialogFromError", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 134, + "end_line": 144, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Parse error for unfinished merge context and open dialog.", + "COMPLEXITY": 2, + "POST": "Returns true and opens dialog if merge context found; false otherwise.", + "PRE": "error contains GIT_UNFINISHED_MERGE error_code or related detail." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region openUnfinishedMergeDialogFromError [C:2] [TYPE Function]\n // @BRIEF Parse error for unfinished merge context and open dialog.\n // @PRE error contains GIT_UNFINISHED_MERGE error_code or related detail.\n // @POST Returns true and opens dialog if merge context found; false otherwise.\n openUnfinishedMergeDialogFromError(error) {\n const context = extractUnfinishedMergeContext(error);\n if (!context) return false;\n u({ unfinishedMergeContext: context, showUnfinishedMergeDialog: true });\n return true;\n },\n // #endregion openUnfinishedMergeDialogFromError\n" + }, + { + "contract_id": "loadMergeRecoveryState", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 146, + "end_line": 172, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Load merge recovery state from backend for unfinished merge.", + "COMPLEXITY": 2, + "POST": "unfinishedMergeContext is populated; dialog closed if no merge in progress.", + "PRE": "Repository exists; envId required when ref is slug.", + "SIDE_EFFECT": "GETs /merge/status from backend." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region loadMergeRecoveryState [C:2] [TYPE Function]\n // @BRIEF Load merge recovery state from backend for unfinished merge.\n // @PRE Repository exists; envId required when ref is slug.\n // @POST unfinishedMergeContext is populated; dialog closed if no merge in progress.\n // @SIDE_EFFECT GETs /merge/status from backend.\n async loadMergeRecoveryState() {\n u({ mergeRecoveryLoading: true });\n try {\n const status = await gitService.getMergeStatus(s().dashboardId, s().envId);\n if (!status?.has_unfinished_merge) { this.closeUnfinishedMergeDialog(); return; }\n u({\n unfinishedMergeContext: {\n ...(s().unfinishedMergeContext || {}),\n message: s().unfinishedMergeContext?.message || (s().t?.git?.unfinished_merge?.default_message || ''),\n repositoryPath: String(status.repository_path || s().unfinishedMergeContext?.repositoryPath || ''),\n gitDir: String(status.git_dir || s().unfinishedMergeContext?.gitDir || ''),\n currentBranch: String(status.current_branch || s().unfinishedMergeContext?.currentBranch || ''),\n mergeHead: String(status.merge_head || s().unfinishedMergeContext?.mergeHead || ''),\n mergeMessagePreview: String(status.merge_message_preview || ''),\n nextSteps: Array.isArray(s().unfinishedMergeContext?.nextSteps) ? s().unfinishedMergeContext.nextSteps : [],\n commands: Array.isArray(s().unfinishedMergeContext?.commands) ? s().unfinishedMergeContext.commands : [],\n conflictsCount: Number(status.conflicts_count || 0),\n }\n });\n } catch (e) { s().toast(e.message || 'Failed to load merge status', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n // #endregion loadMergeRecoveryState\n" + }, + { + "contract_id": "closeUnfinishedMergeDialog", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 174, + "end_line": 180, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Close unfinished merge dialog and reset merge state.", + "COMPLEXITY": 1, + "POST": "Dialog hidden; mergeConflicts, showConflictResolver reset." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region closeUnfinishedMergeDialog [C:1] [TYPE Function]\n // @BRIEF Close unfinished merge dialog and reset merge state.\n // @POST Dialog hidden; mergeConflicts, showConflictResolver reset.\n closeUnfinishedMergeDialog() {\n u({ showUnfinishedMergeDialog: false, unfinishedMergeContext: null, mergeConflicts: [], showConflictResolver: false });\n },\n // #endregion closeUnfinishedMergeDialog\n" + }, + { + "contract_id": "handleOpenConflictResolver", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 182, + "end_line": 195, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Load merge conflicts and open conflict resolver UI.", + "COMPLEXITY": 2, + "POST": "mergeConflicts populated; showConflictResolver set to true if conflicts found.", + "PRE": "Unfinished merge is in progress; envId required when ref is slug.", + "SIDE_EFFECT": "GETs /merge/conflicts from backend." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleOpenConflictResolver [C:2] [TYPE Function]\n // @BRIEF Load merge conflicts and open conflict resolver UI.\n // @PRE Unfinished merge is in progress; envId required when ref is slug.\n // @POST mergeConflicts populated; showConflictResolver set to true if conflicts found.\n // @SIDE_EFFECT GETs /merge/conflicts from backend.\n async handleOpenConflictResolver() {\n u({ mergeRecoveryLoading: true });\n try {\n const mc = await gitService.getMergeConflicts(s().dashboardId, s().envId);\n if (!Array.isArray(mc) || mc.length === 0) { s().toast(s().t?.git?.unfinished_merge?.no_conflicts || 'No unresolved conflicts were found', 'info'); return; }\n u({ mergeConflicts: mc, showConflictResolver: true });\n } catch (e) { s().toast(e.message || 'Failed to load merge conflicts', 'error'); } finally { u({ mergeRecoveryLoading: false }); }\n },\n // #endregion handleOpenConflictResolver\n" + }, + { + "contract_id": "handleResolveConflicts", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 197, + "end_line": 214, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Apply conflict resolutions and stage resolved files.", + "COMPLEXITY": 2, + "POST": "Conflicts resolved and staged; resolver closed; workspace reloaded.", + "PRE": "event.detail maps file paths to resolution strategies; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleResolveConflicts [C:2] [TYPE Function]\n // @BRIEF Apply conflict resolutions and stage resolved files.\n // @PRE event.detail maps file paths to resolution strategies; envId required when ref is slug.\n // @POST Conflicts resolved and staged; resolver closed; workspace reloaded.\n async handleResolveConflicts(event) {\n const detail = event?.detail || {};\n const resolutions = Object.entries(detail).map(([fp, r]) => ({ file_path: fp, resolution: r }));\n if (!resolutions.length) { s().toast(s().t?.git?.unfinished_merge?.resolve_empty || 'No conflict resolutions selected', 'warning'); return; }\n u({ mergeResolveInProgress: true });\n try {\n await gitService.resolveMergeConflicts(s().dashboardId, resolutions, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.resolve_success || 'Conflicts were resolved and staged', 'success');\n u({ showConflictResolver: false });\n await this.loadMergeRecoveryState();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to resolve conflicts', 'error'); } finally { u({ mergeResolveInProgress: false }); }\n },\n // #endregion handleResolveConflicts\n" + }, + { + "contract_id": "handleAbortUnfinishedMerge", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 216, + "end_line": 229, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Abort current unfinished merge.", + "COMPLEXITY": 2, + "POST": "Merge aborted; dialog closed; workspace reloaded.", + "PRE": "envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleAbortUnfinishedMerge [C:2] [TYPE Function]\n // @BRIEF Abort current unfinished merge.\n // @PRE envId required when ref is slug.\n // @POST Merge aborted; dialog closed; workspace reloaded.\n async handleAbortUnfinishedMerge() {\n u({ mergeAbortInProgress: true });\n try {\n await gitService.abortMerge(s().dashboardId, s().envId);\n s().toast(s().t?.git?.unfinished_merge?.abort_success || 'Merge was aborted', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message || 'Failed to abort merge', 'error'); } finally { u({ mergeAbortInProgress: false }); }\n },\n // #endregion handleAbortUnfinishedMerge\n" + }, + { + "contract_id": "handleContinueUnfinishedMerge", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 231, + "end_line": 247, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Finalize unfinished merge by creating merge commit.", + "COMPLEXITY": 2, + "POST": "Merge commit created; dialog closed; workspace reloaded.", + "PRE": "All conflicts resolved; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleContinueUnfinishedMerge [C:2] [TYPE Function]\n // @BRIEF Finalize unfinished merge by creating merge commit.\n // @PRE All conflicts resolved; envId required when ref is slug.\n // @POST Merge commit created; dialog closed; workspace reloaded.\n async handleContinueUnfinishedMerge() {\n u({ mergeContinueInProgress: true });\n try {\n await gitService.continueMerge(s().dashboardId, '', s().envId);\n s().toast(s().t?.git?.unfinished_merge?.continue_success || 'Merge commit created successfully', 'success');\n this.closeUnfinishedMergeDialog();\n await this.loadWorkspace();\n } catch (e) {\n s().toast(e.message || 'Failed to continue merge', 'error');\n await this.loadMergeRecoveryState();\n } finally { u({ mergeContinueInProgress: false }); }\n },\n // #endregion handleContinueUnfinishedMerge\n" + }, + { + "contract_id": "getUnfinishedMergeCommandsText", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 249, + "end_line": 256, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Get shell commands for manual merge recovery.", + "COMPLEXITY": 1, + "POST": "Returns concatenated command string or empty string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getUnfinishedMergeCommandsText [C:1] [TYPE Function]\n // @BRIEF Get shell commands for manual merge recovery.\n // @POST Returns concatenated command string or empty string.\n getUnfinishedMergeCommandsText() {\n if (!s().unfinishedMergeContext?.commands?.length) return '';\n return s().unfinishedMergeContext.commands.join('\\n');\n },\n // #endregion getUnfinishedMergeCommandsText\n" + }, + { + "contract_id": "handleCopyUnfinishedMergeCommands", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 258, + "end_line": 271, + "tier": "TIER_1", + "complexity": 1, + "metadata": { + "BRIEF": "Copy merge recovery commands to clipboard.", + "COMPLEXITY": 1, + "POST": "Commands copied to clipboard; toast shown.", + "PRE": "commands exist in unfinishedMergeContext." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleCopyUnfinishedMergeCommands [C:1] [TYPE Function]\n // @BRIEF Copy merge recovery commands to clipboard.\n // @PRE commands exist in unfinishedMergeContext.\n // @POST Commands copied to clipboard; toast shown.\n async handleCopyUnfinishedMergeCommands() {\n const text = this.getUnfinishedMergeCommandsText();\n if (!text) { s().toast(s().t?.git?.unfinished_merge?.copy_empty || 'Команды для копирования отсутствуют', 'warning'); return; }\n u({ copyingUnfinishedMergeCommands: true });\n try {\n await navigator.clipboard.writeText(text);\n s().toast(s().t?.git?.unfinished_merge?.copy_success || 'Команды скопированы в буфер обмена', 'success');\n } catch (_e) { s().toast(s().t?.git?.unfinished_merge?.copy_failed || 'Не удалось скопировать команды', 'error'); } finally { u({ copyingUnfinishedMergeCommands: false }); }\n },\n // #endregion handleCopyUnfinishedMergeCommands\n" + }, + { + "contract_id": "handlePull", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 273, + "end_line": 290, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Pull changes from remote repository.", + "COMPLEXITY": 2, + "POST": "Local repository updated with remote changes; workspace reloaded.", + "PRE": "Remote 'origin' configured; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /pull; may open merge dialog on GIT_UNFINISHED_MERGE." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handlePull [C:2] [TYPE Function]\n // @BRIEF Pull changes from remote repository.\n // @PRE Remote 'origin' configured; envId required when ref is slug.\n // @POST Local repository updated with remote changes; workspace reloaded.\n // @SIDE_EFFECT POSTs to /pull; may open merge dialog on GIT_UNFINISHED_MERGE.\n async handlePull() {\n u({ isPulling: true });\n try {\n await gitService.pull(s().dashboardId, s().envId);\n s().toast(s().t?.git?.pull_success || 'Изменения получены из Git', 'success');\n await this.loadWorkspace();\n } catch (e) {\n const handled = this.openUnfinishedMergeDialogFromError(e);\n if (handled) await this.loadMergeRecoveryState();\n else s().toast(e.message, 'error');\n } finally { u({ isPulling: false }); }\n },\n // #endregion handlePull\n" + }, + { + "contract_id": "handlePush", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 292, + "end_line": 304, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Push local commits to remote repository.", + "COMPLEXITY": 2, + "POST": "Remote updated with local commits; workspace reloaded.", + "PRE": "Remote 'origin' configured; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handlePush [C:2] [TYPE Function]\n // @BRIEF Push local commits to remote repository.\n // @PRE Remote 'origin' configured; envId required when ref is slug.\n // @POST Remote updated with local commits; workspace reloaded.\n async handlePush() {\n u({ isPushing: true });\n try {\n await gitService.push(s().dashboardId, s().envId);\n s().toast(s().t?.git?.push_success || 'Изменения отправлены в Git', 'success');\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ isPushing: false }); }\n },\n // #endregion handlePush\n" + }, + { + "contract_id": "handlePromote", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 306, + "end_line": 327, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Promote changes between branches via MR or direct merge.", + "COMPLEXITY": 3, + "POST": "MR created on Git server (MR mode) or direct merge executed (direct mode).", + "PRE": "promoteFromBranch and promoteToBranch differ; direct mode requires reason; envId required when ref is slug.", + "SIDE_EFFECT": "Opens MR URL in new tab (MR mode); writes policy violation to logs (direct mode)." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handlePromote [C:3] [TYPE Function]\n // @BRIEF Promote changes between branches via MR or direct merge.\n // @PRE promoteFromBranch and promoteToBranch differ; direct mode requires reason; envId required when ref is slug.\n // @POST MR created on Git server (MR mode) or direct merge executed (direct mode).\n // @SIDE_EFFECT Opens MR URL in new tab (MR mode); writes policy violation to logs (direct mode).\n async handlePromote() {\n const st = s();\n if (!st.promoteFromBranch || !st.promoteToBranch || st.promoteFromBranch === st.promoteToBranch) { st.toast('Выберите разные исходную и целевую ветки', 'error'); return; }\n if (st.promoteMode === 'direct' && !String(st.promoteReason || '').trim()) { st.toast('Для небезопасного прямого переноса укажите причину', 'error'); return; }\n u({ promoting: true });\n try {\n const response = await gitService.promote(st.dashboardId, {\n from_branch: st.promoteFromBranch, to_branch: st.promoteToBranch, mode: st.promoteMode,\n title: `Promote ${st.promoteFromBranch} -> ${st.promoteToBranch}: ${st.dashboardTitle || st.dashboardId}`,\n description: st.promoteMode === 'direct' ? `Unsafe direct promote.\\nReason: ${st.promoteReason}` : undefined,\n reason: st.promoteMode === 'direct' ? st.promoteReason : undefined,\n }, st.envId);\n if (st.promoteMode === 'direct') { st.toast('Прямой перенос выполнен. Нарушение политики записано в логи.', 'warning'); }\n else { if (response?.url) window.open(response.url, '_blank', 'noopener,noreferrer'); st.toast('Merge Request создан на Git сервере', 'success'); }\n } catch (e) { st.toast(e.message, 'error'); } finally { u({ promoting: false }); }\n },\n // #endregion handlePromote\n" + }, + { + "contract_id": "openDeployModal", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 329, + "end_line": 342, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Open deployment target modal with PROD confirmation.", + "COMPLEXITY": 2, + "POST": "showDeployModal set to true if PROD confirmation passes.", + "PRE": "dashboardId is a valid slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region openDeployModal [C:2] [TYPE Function]\n // @BRIEF Open deployment target modal with PROD confirmation.\n // @PRE dashboardId is a valid slug.\n // @POST showDeployModal set to true if PROD confirmation passes.\n openDeployModal() {\n const st = s();\n if (st.currentEnvStage === 'PROD') {\n const expected = String(st.dashboardId);\n const confirmation = prompt(`Подтвердите деплой в PROD. Введите slug дашборда: ${expected}`);\n if (String(confirmation || '').trim() !== expected) { st.toast('Подтверждение PROD не пройдено. Деплой отменен.', 'error'); return; }\n }\n u({ showDeployModal: true });\n },\n // #endregion openDeployModal\n" + }, + { + "contract_id": "handleCreateRemoteRepo", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 344, + "end_line": 374, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create a remote repository on the selected Git provider.", + "COMPLEXITY": 2, + "POST": "remoteUrl set to created (or existing) repository clone URL.", + "PRE": "A Git config is selected; user provides a repo name via prompt.", + "SIDE_EFFECT": "POSTs to /git/config/{id}/repositories; prompts user for repo name." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleCreateRemoteRepo [C:2] [TYPE Function]\n // @BRIEF Create a remote repository on the selected Git provider.\n // @PRE A Git config is selected; user provides a repo name via prompt.\n // @POST remoteUrl set to created (or existing) repository clone URL.\n // @SIDE_EFFECT POSTs to /git/config/{id}/repositories; prompts user for repo name.\n async handleCreateRemoteRepo() {\n const config = resolveDefaultConfig(s().configs, s().selectedConfigId);\n if (!config) { s().toast(s().t?.git?.init_validation_error || 'Сначала выберите Git сервер', 'error'); return; }\n if (!s().selectedConfigId && config.id) u({ selectedConfigId: config.id });\n const suggestedName = buildSuggestedRepoName(s().dashboardTitle, s().dashboardId);\n const inputName = prompt(`Repository name for ${config.provider}:`, suggestedName);\n const repoName = String(inputName || '').trim();\n if (!repoName) return;\n u({ creatingRemoteRepo: true });\n try {\n const repo = await gitService.createRemoteRepository(config.id, {\n name: repoName, private: true,\n description: `Superset dashboard ${s().dashboardId}: ${s().dashboardTitle || repoName}`,\n auto_init: true, default_branch: 'main',\n });\n const url = repo?.clone_url || repo?.html_url || '';\n if (!url) throw new Error('Remote repository created, but URL is empty');\n u({ remoteUrl: url });\n s().toast(`Repository created on ${config.provider}`, 'success');\n } catch (e) {\n if (e?.status === 409 && /already exists/i.test(String(e?.message || ''))) {\n s().toast(s().t?.git?.repo_already_exists || 'Repository already exists. Enter its URL below and click Init.', 'warning');\n } else { s().toast(e.message, 'error'); }\n } finally { u({ creatingRemoteRepo: false }); }\n },\n // #endregion handleCreateRemoteRepo\n" + }, + { + "contract_id": "handleInit", + "contract_type": "Function", + "file_path": "frontend/src/components/git/useGitManager.js", + "start_line": 376, + "end_line": 397, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Initialize local Git repository for the dashboard: clone remote.", + "COMPLEXITY": 3, + "POST": "Repository initialized; initialized=true; workspace loaded.", + "PRE": "selectedConfigId is set; remoteUrl is set; envId required when ref is slug.", + "SIDE_EFFECT": "POSTs to /git/repositories/{ref}/init; loads workspace on success." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region handleInit [C:3] [TYPE Function]\n // @BRIEF Initialize local Git repository for the dashboard: clone remote.\n // @PRE selectedConfigId is set; remoteUrl is set; envId required when ref is slug.\n // @POST Repository initialized; initialized=true; workspace loaded.\n // @SIDE_EFFECT POSTs to /git/repositories/{ref}/init; loads workspace on success.\n async handleInit() {\n if (!s().selectedConfigId || !s().remoteUrl) { s().toast(s().t?.git?.init_validation_error || 'Заполните все поля', 'error'); return; }\n // ── Guard: slug-based init requires envId ──\n if (!s().envId && !isNumericDashboardRef(s().dashboardId)) {\n s().toast('Environment must be selected to initialize Git for this dashboard.', 'error');\n return;\n }\n u({ loading: true });\n try {\n await gitService.initRepository(s().dashboardId, s().selectedConfigId, s().remoteUrl, s().envId);\n s().toast(s().t?.git?.init_success || 'Репозиторий инициализирован', 'success');\n const provider = resolveDefaultConfig(s().configs, s().selectedConfigId)?.provider || '';\n u({ initialized: true, repositoryProvider: provider });\n await this.loadWorkspace();\n } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); }\n },\n // #endregion handleInit\n" }, { "contract_id": "DocPreview", @@ -61172,7 +62583,7 @@ "contract_type": "Module", "file_path": "frontend/src/lib/api.js", "start_line": 1, - "end_line": 242, + "end_line": 246, "tier": "TIER_2", "complexity": 3, "metadata": { @@ -61197,7 +62608,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "// #region ApiModule [C:3] [TYPE Module] [SEMANTICS api, client, fetch, auth, error-handling]\n// @BRIEF Handles all communication with the backend API via fetch wrappers with auth, error normalization, and toast feedback.\n// @RELATION DEPENDS_ON -> [ToastsModule]\n// @RELATION CALLED_BY -> [TranslateApi]\nimport { addToast } from './toasts.js';\n\nconst API_BASE_URL = '/api';\n\nasync function buildApiError(response) {\n const errorData = await response.json().catch(() => ({}));\n const detail = errorData?.detail;\n const message = detail\n ? (typeof detail === 'string' ? detail : (typeof detail?.message === 'string' ? detail.message : JSON.stringify(detail)))\n : `API request failed with status ${response.status}`;\n const error = new Error(message);\n /** @type {any} */ (error).status = response.status;\n /** @type {any} */ (error).detail = detail;\n if (detail && typeof detail === 'object' && detail.error_code) {\n /** @type {any} */ (error).error_code = String(detail.error_code);\n }\n return error;\n}\n\nfunction notifyApiError(error) {\n if (error?.status === 401) { addToast(`401 Unauthorized: ${error.message}`, 'error'); return; }\n if (error?.status >= 500) { addToast(`Server error (${error.status}): ${error.message}`, 'error'); return; }\n addToast(error.message, 'error');\n}\n\nfunction shouldSuppressApiErrorToast(endpoint, error) {\n const isGitStatusEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/') && endpoint.endsWith('/status');\n const isNoRepoError = (error?.status === 400 || error?.status === 404) && /Repository for dashboard .* not found/i.test(String(error?.message || ''));\n const isGitPullEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/') && endpoint.endsWith('/pull');\n const isUnfinishedMergeError = error?.status === 409 && (String(error?.error_code || '') === 'GIT_UNFINISHED_MERGE' || String(error?.detail?.error_code || '') === 'GIT_UNFINISHED_MERGE');\n const isDatasetClarificationEndpoint = typeof endpoint === 'string' && /\\/dataset-orchestration\\/sessions\\/[^/]+\\/clarification$/.test(endpoint);\n const isMissingClarificationSession = error?.status === 404 && /Clarification session not found/i.test(String(error?.message || ''));\n return (isGitStatusEndpoint && isNoRepoError) || (isGitPullEndpoint && isUnfinishedMergeError) || (isDatasetClarificationEndpoint && isMissingClarificationSession);\n}\n\nexport const getWsUrl = (taskId) => {\n const protocol = typeof window !== 'undefined' && window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = typeof window !== 'undefined' ? window.location.host : 'localhost:8000';\n return `${protocol}//${host}/ws/logs/${taskId}`;\n};\n\nfunction getAuthHeaders(extraHeaders = {}) {\n const headers = { 'Content-Type': 'application/json', ...extraHeaders };\n if (typeof window !== 'undefined') {\n const token = localStorage.getItem('auth_token');\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n}\n\nasync function fetchApi(endpoint, options = {}) {\n try {\n console.log(`[api.fetchApi][Action] Fetching from endpoint=${endpoint}`);\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { headers: getAuthHeaders(options.headers || {}) });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.fetchApi][Coherence:Failed] ${endpoint}:`, error);\n if (!options.suppressToast) notifyApiError(error);\n throw error;\n }\n}\n\nasync function fetchApiBlob(endpoint, options = {}) {\n const notifyError = options.notifyError !== false;\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { headers: getAuthHeaders(options.headers || {}) });\n if (response.status === 202) {\n const payload = await response.json().catch(() => ({ message: \"Resource is being prepared\" }));\n const error = new Error(payload?.message || \"Resource is being prepared\");\n /** @type {any} */ (error).status = 202;\n throw error;\n }\n if (!response.ok) throw await buildApiError(response);\n return await response.blob();\n } catch (error) {\n if (notifyError) notifyApiError(error);\n throw error;\n }\n}\n\nasync function postApi(endpoint, body, options = {}) {\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, {\n method: 'POST', headers: getAuthHeaders(options.headers || {}), body: JSON.stringify(body),\n });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.postApi][Coherence:Failed] ${endpoint}:`, error);\n if (!options.suppressToast) notifyApiError(error);\n throw error;\n }\n}\n\nasync function deleteApi(endpoint, options = {}) {\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { method: 'DELETE', headers: getAuthHeaders(options.headers || {}) });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.deleteApi][Coherence:Failed] ${endpoint}:`, error);\n notifyApiError(error);\n throw error;\n }\n}\n\nasync function requestApi(endpoint, method = 'GET', body = null, requestOptions = {}) {\n try {\n const fetchOptions = { method, headers: getAuthHeaders(requestOptions.headers || {}) };\n if (body) fetchOptions.body = JSON.stringify(body);\n const response = await fetch(`${API_BASE_URL}${endpoint}`, fetchOptions);\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.requestApi][Coherence:Failed] ${method} ${endpoint}:`, error);\n if (!shouldSuppressApiErrorToast(endpoint, error)) notifyApiError(error);\n throw error;\n }\n}\n\nexport const api = {\n fetchApi, postApi, deleteApi, requestApi,\n getPlugins: () => fetchApi('/plugins'),\n getTasks: (options = {}) => {\n const params = new URLSearchParams();\n if (options.limit != null) params.append('limit', String(options.limit));\n if (options.offset != null) params.append('offset', String(options.offset));\n if (options.status) params.append('status', options.status);\n if (options.task_type) params.append('task_type', options.task_type);\n if (options.completed_only != null) params.append('completed_only', String(Boolean(options.completed_only)));\n if (Array.isArray(options.plugin_id)) options.plugin_id.forEach((pid) => params.append('plugin_id', pid));\n const query = params.toString();\n return fetchApi(`/tasks${query ? `?${query}` : ''}`);\n },\n getTask: (taskId) => fetchApi(`/tasks/${taskId}`),\n getTaskLogs: (taskId, options = {}) => {\n const params = new URLSearchParams();\n if (options.level) params.append('level', options.level);\n if (options.source) params.append('source', options.source);\n if (options.search) params.append('search', options.search);\n if (options.offset != null) params.append('offset', String(options.offset));\n if (options.limit != null) params.append('limit', String(options.limit));\n return fetchApi(`/tasks/${taskId}/logs${params.toString() ? `?${params.toString()}` : ''}`);\n },\n createTask: (pluginId, params) => postApi('/tasks', { plugin_id: pluginId, params }),\n getProfilePreferences: () => fetchApi('/profile/preferences'),\n updateProfilePreferences: (payload) => requestApi('/profile/preferences', 'PATCH', payload),\n lookupSupersetAccounts: (environmentId, options = {}) => {\n const eid = String(environmentId || '').trim();\n if (!eid) throw new Error('environmentId is required for Superset account lookup');\n const params = new URLSearchParams({ environment_id: eid });\n if (options.search) params.append('search', options.search);\n if (options.page_index != null) params.append('page_index', String(options.page_index));\n if (options.page_size != null) params.append('page_size', String(options.page_size));\n if (options.sort_column) params.append('sort_column', options.sort_column);\n if (options.sort_order) params.append('sort_order', options.sort_order);\n return fetchApi(`/profile/superset-accounts?${params.toString()}`);\n },\n getSettings: () => fetchApi('/settings'),\n updateGlobalSettings: (s) => requestApi('/settings/global', 'PATCH', s),\n getEnvironments: () => fetchApi('/settings/environments'),\n addEnvironment: (env) => postApi('/settings/environments', env),\n updateEnvironment: (id, env) => requestApi(`/settings/environments/${id}`, 'PUT', env),\n deleteEnvironment: (id) => requestApi(`/settings/environments/${id}`, 'DELETE'),\n testEnvironmentConnection: (id) => postApi(`/settings/environments/${id}/test`, {}),\n updateEnvironmentSchedule: (id, s) => requestApi(`/environments/${id}/schedule`, 'PUT', s),\n getStorageSettings: () => fetchApi('/settings/storage'),\n updateStorageSettings: (s) => requestApi('/settings/storage', 'PUT', s),\n getEnvironmentsList: () => fetchApi('/environments'),\n getLlmStatus: () => fetchApi('/llm/status'),\n fetchLlmModels: (p) => postApi('/llm/providers/fetch-models', p),\n getEnvironmentDatabases: (id) => fetchApi(`/environments/${id}/databases`),\n getStorageFileBlob: (path) => fetchApiBlob(`/storage/file?path=${encodeURIComponent(path)}`),\n getDashboards: (envId, options = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page);\n if (options.page_size) params.append('page_size', options.page_size);\n if (options.page_context) params.append('page_context', options.page_context);\n if (options.apply_profile_default != null) params.append('apply_profile_default', String(Boolean(options.apply_profile_default)));\n if (options.override_show_all != null) params.append('override_show_all', String(Boolean(options.override_show_all)));\n if (options.filters?.title) for (const v of options.filters.title) params.append('filter_title', v);\n if (options.filters?.git_status) for (const v of options.filters.git_status) params.append('filter_git_status', v);\n if (options.filters?.llm_status) for (const v of options.filters.llm_status) params.append('filter_llm_status', v);\n if (options.filters?.changed_on) for (const v of options.filters.changed_on) params.append('filter_changed_on', v);\n if (options.filters?.actor) for (const v of options.filters.actor) params.append('filter_actor', v);\n return fetchApi(`/dashboards?${params.toString()}`);\n },\n getDashboardDetail: (envId, ref) => fetchApi(`/dashboards/${encodeURIComponent(String(ref))}?env_id=${envId}`),\n getDashboardTaskHistory: (envId, ref, opts = {}) => {\n const params = new URLSearchParams();\n if (envId) params.append('env_id', envId);\n if (opts.limit) params.append('limit', opts.limit);\n return fetchApi(`/dashboards/${encodeURIComponent(String(ref))}/tasks?${params.toString()}`);\n },\n getDashboardThumbnail: (envId, ref, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.force != null) params.append('force', String(Boolean(opts.force)));\n return fetchApiBlob(`/dashboards/${encodeURIComponent(String(ref))}/thumbnail?${params.toString()}`, { notifyError: false });\n },\n getDatabaseMappings: (src, tgt) => fetchApi(`/dashboards/db-mappings?source_env_id=${src}&target_env_id=${tgt}`),\n calculateMigrationDryRun: (p) => postApi('/migration/dry-run', p),\n getDatasets: (envId, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.search) params.append('search', opts.search);\n if (opts.filter) params.append('filter', opts.filter);\n if (opts.page) params.append('page', opts.page);\n if (opts.page_size) params.append('page_size', opts.page_size);\n return fetchApi(`/datasets?${params.toString()}`);\n },\n getDatasetIds: (envId, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.search) params.append('search', opts.search);\n return fetchApi(`/datasets/ids?${params.toString()}`);\n },\n getDatasetDetail: (envId, datasetId) => fetchApi(`/datasets/${datasetId}?env_id=${envId}`),\n getConsolidatedSettings: () => fetchApi('/settings/consolidated'),\n updateConsolidatedSettings: (s) => requestApi('/settings/consolidated', 'PATCH', s),\n getValidationPolicies: () => fetchApi('/settings/automation/policies'),\n createValidationPolicy: (p) => postApi('/settings/automation/policies', p),\n updateValidationPolicy: (id, p) => requestApi(`/settings/automation/policies/${id}`, 'PATCH', p),\n deleteValidationPolicy: (id) => requestApi(`/settings/automation/policies/${id}`, 'DELETE'),\n getTranslationSchedules: () => fetchApi('/settings/automation/translation-schedules'),\n getHealthSummary: (environmentId) => {\n const query = environmentId ? `?env_id=${encodeURIComponent(environmentId)}` : '';\n return fetchApi(`/health/summary${query}`, { suppressToast: true });\n },\n // ── API Key Management ────────────────────────────────────\n listApiKeys: () => fetchApi('/admin/api-keys/'),\n createApiKey: (payload) => postApi('/admin/api-keys/', payload, { suppressToast: true }),\n revokeApiKey: (keyId) => requestApi(`/admin/api-keys/${keyId}`, 'DELETE'),\n};\n// #endregion ApiModule\n" + "body": "// #region ApiModule [C:3] [TYPE Module] [SEMANTICS api, client, fetch, auth, error-handling]\n// @BRIEF Handles all communication with the backend API via fetch wrappers with auth, error normalization, and toast feedback.\n// @RELATION DEPENDS_ON -> [ToastsModule]\n// @RELATION CALLED_BY -> [TranslateApi]\nimport { addToast } from './toasts.js';\n\nconst API_BASE_URL = '/api';\n\nasync function buildApiError(response) {\n const errorData = await response.json().catch(() => ({}));\n const detail = errorData?.detail;\n const message = detail\n ? (typeof detail === 'string' ? detail : (typeof detail?.message === 'string' ? detail.message : JSON.stringify(detail)))\n : `API request failed with status ${response.status}`;\n const error = new Error(message);\n /** @type {any} */ (error).status = response.status;\n /** @type {any} */ (error).detail = detail;\n if (detail && typeof detail === 'object' && detail.error_code) {\n /** @type {any} */ (error).error_code = String(detail.error_code);\n }\n return error;\n}\n\nfunction notifyApiError(error) {\n if (error?.status === 401) { addToast(`401 Unauthorized: ${error.message}`, 'error'); return; }\n if (error?.status >= 500) { addToast(`Server error (${error.status}): ${error.message}`, 'error'); return; }\n addToast(error.message, 'error');\n}\n\nfunction shouldSuppressApiErrorToast(endpoint, error) {\n const isGitStatusEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/') && endpoint.endsWith('/status');\n const isNoRepoError = (error?.status === 400 || error?.status === 404) && /Repository for dashboard .* not found/i.test(String(error?.message || ''));\n const isGitPullEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/') && endpoint.endsWith('/pull');\n const isUnfinishedMergeError = error?.status === 409 && (String(error?.error_code || '') === 'GIT_UNFINISHED_MERGE' || String(error?.detail?.error_code || '') === 'GIT_UNFINISHED_MERGE');\n const isDatasetClarificationEndpoint = typeof endpoint === 'string' && /\\/dataset-orchestration\\/sessions\\/[^/]+\\/clarification$/.test(endpoint);\n const isMissingClarificationSession = error?.status === 404 && /Clarification session not found/i.test(String(error?.message || ''));\n const isGitRepoEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/');\n const isMissingEnvIdError = error?.status === 400 && /env_id is required/i.test(String(error?.message || ''));\n const isGitConfigReposEndpoint = typeof endpoint === 'string' && /^\\/git\\/config\\/[^/]+\\/repositories$/.test(endpoint);\n const isRepoAlreadyExistsError = error?.status === 409 && /already exists/i.test(String(error?.message || ''));\n return (isGitStatusEndpoint && isNoRepoError) || (isGitPullEndpoint && isUnfinishedMergeError) || (isDatasetClarificationEndpoint && isMissingClarificationSession) || (isGitRepoEndpoint && isMissingEnvIdError) || (isGitConfigReposEndpoint && isRepoAlreadyExistsError);\n}\n\nexport const getWsUrl = (taskId) => {\n const protocol = typeof window !== 'undefined' && window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = typeof window !== 'undefined' ? window.location.host : 'localhost:8000';\n return `${protocol}//${host}/ws/logs/${taskId}`;\n};\n\nfunction getAuthHeaders(extraHeaders = {}) {\n const headers = { 'Content-Type': 'application/json', ...extraHeaders };\n if (typeof window !== 'undefined') {\n const token = localStorage.getItem('auth_token');\n if (token) headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n}\n\nasync function fetchApi(endpoint, options = {}) {\n try {\n console.log(`[api.fetchApi][Action] Fetching from endpoint=${endpoint}`);\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { headers: getAuthHeaders(options.headers || {}) });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.fetchApi][Coherence:Failed] ${endpoint}:`, error);\n if (!options.suppressToast) notifyApiError(error);\n throw error;\n }\n}\n\nasync function fetchApiBlob(endpoint, options = {}) {\n const notifyError = options.notifyError !== false;\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { headers: getAuthHeaders(options.headers || {}) });\n if (response.status === 202) {\n const payload = await response.json().catch(() => ({ message: \"Resource is being prepared\" }));\n const error = new Error(payload?.message || \"Resource is being prepared\");\n /** @type {any} */ (error).status = 202;\n throw error;\n }\n if (!response.ok) throw await buildApiError(response);\n return await response.blob();\n } catch (error) {\n if (notifyError) notifyApiError(error);\n throw error;\n }\n}\n\nasync function postApi(endpoint, body, options = {}) {\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, {\n method: 'POST', headers: getAuthHeaders(options.headers || {}), body: JSON.stringify(body),\n });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.postApi][Coherence:Failed] ${endpoint}:`, error);\n if (!options.suppressToast) notifyApiError(error);\n throw error;\n }\n}\n\nasync function deleteApi(endpoint, options = {}) {\n try {\n const response = await fetch(`${API_BASE_URL}${endpoint}`, { method: 'DELETE', headers: getAuthHeaders(options.headers || {}) });\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.deleteApi][Coherence:Failed] ${endpoint}:`, error);\n notifyApiError(error);\n throw error;\n }\n}\n\nasync function requestApi(endpoint, method = 'GET', body = null, requestOptions = {}) {\n try {\n const fetchOptions = { method, headers: getAuthHeaders(requestOptions.headers || {}) };\n if (body) fetchOptions.body = JSON.stringify(body);\n const response = await fetch(`${API_BASE_URL}${endpoint}`, fetchOptions);\n if (!response.ok) throw await buildApiError(response);\n if (response.status === 204) return null;\n return await response.json();\n } catch (error) {\n console.error(`[api.requestApi][Coherence:Failed] ${method} ${endpoint}:`, error);\n if (!shouldSuppressApiErrorToast(endpoint, error)) notifyApiError(error);\n throw error;\n }\n}\n\nexport const api = {\n fetchApi, postApi, deleteApi, requestApi,\n getPlugins: () => fetchApi('/plugins'),\n getTasks: (options = {}) => {\n const params = new URLSearchParams();\n if (options.limit != null) params.append('limit', String(options.limit));\n if (options.offset != null) params.append('offset', String(options.offset));\n if (options.status) params.append('status', options.status);\n if (options.task_type) params.append('task_type', options.task_type);\n if (options.completed_only != null) params.append('completed_only', String(Boolean(options.completed_only)));\n if (Array.isArray(options.plugin_id)) options.plugin_id.forEach((pid) => params.append('plugin_id', pid));\n const query = params.toString();\n return fetchApi(`/tasks${query ? `?${query}` : ''}`);\n },\n getTask: (taskId) => fetchApi(`/tasks/${taskId}`),\n getTaskLogs: (taskId, options = {}) => {\n const params = new URLSearchParams();\n if (options.level) params.append('level', options.level);\n if (options.source) params.append('source', options.source);\n if (options.search) params.append('search', options.search);\n if (options.offset != null) params.append('offset', String(options.offset));\n if (options.limit != null) params.append('limit', String(options.limit));\n return fetchApi(`/tasks/${taskId}/logs${params.toString() ? `?${params.toString()}` : ''}`);\n },\n createTask: (pluginId, params) => postApi('/tasks', { plugin_id: pluginId, params }),\n getProfilePreferences: () => fetchApi('/profile/preferences'),\n updateProfilePreferences: (payload) => requestApi('/profile/preferences', 'PATCH', payload),\n lookupSupersetAccounts: (environmentId, options = {}) => {\n const eid = String(environmentId || '').trim();\n if (!eid) throw new Error('environmentId is required for Superset account lookup');\n const params = new URLSearchParams({ environment_id: eid });\n if (options.search) params.append('search', options.search);\n if (options.page_index != null) params.append('page_index', String(options.page_index));\n if (options.page_size != null) params.append('page_size', String(options.page_size));\n if (options.sort_column) params.append('sort_column', options.sort_column);\n if (options.sort_order) params.append('sort_order', options.sort_order);\n return fetchApi(`/profile/superset-accounts?${params.toString()}`);\n },\n getSettings: () => fetchApi('/settings'),\n updateGlobalSettings: (s) => requestApi('/settings/global', 'PATCH', s),\n getEnvironments: () => fetchApi('/settings/environments'),\n addEnvironment: (env) => postApi('/settings/environments', env),\n updateEnvironment: (id, env) => requestApi(`/settings/environments/${id}`, 'PUT', env),\n deleteEnvironment: (id) => requestApi(`/settings/environments/${id}`, 'DELETE'),\n testEnvironmentConnection: (id) => postApi(`/settings/environments/${id}/test`, {}),\n updateEnvironmentSchedule: (id, s) => requestApi(`/environments/${id}/schedule`, 'PUT', s),\n getStorageSettings: () => fetchApi('/settings/storage'),\n updateStorageSettings: (s) => requestApi('/settings/storage', 'PUT', s),\n getEnvironmentsList: () => fetchApi('/environments'),\n getLlmStatus: () => fetchApi('/llm/status'),\n fetchLlmModels: (p) => postApi('/llm/providers/fetch-models', p),\n getEnvironmentDatabases: (id) => fetchApi(`/environments/${id}/databases`),\n getStorageFileBlob: (path) => fetchApiBlob(`/storage/file?path=${encodeURIComponent(path)}`),\n getDashboards: (envId, options = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (options.search) params.append('search', options.search);\n if (options.page) params.append('page', options.page);\n if (options.page_size) params.append('page_size', options.page_size);\n if (options.page_context) params.append('page_context', options.page_context);\n if (options.apply_profile_default != null) params.append('apply_profile_default', String(Boolean(options.apply_profile_default)));\n if (options.override_show_all != null) params.append('override_show_all', String(Boolean(options.override_show_all)));\n if (options.filters?.title) for (const v of options.filters.title) params.append('filter_title', v);\n if (options.filters?.git_status) for (const v of options.filters.git_status) params.append('filter_git_status', v);\n if (options.filters?.llm_status) for (const v of options.filters.llm_status) params.append('filter_llm_status', v);\n if (options.filters?.changed_on) for (const v of options.filters.changed_on) params.append('filter_changed_on', v);\n if (options.filters?.actor) for (const v of options.filters.actor) params.append('filter_actor', v);\n return fetchApi(`/dashboards?${params.toString()}`);\n },\n getDashboardDetail: (envId, ref) => fetchApi(`/dashboards/${encodeURIComponent(String(ref))}?env_id=${envId}`),\n getDashboardTaskHistory: (envId, ref, opts = {}) => {\n const params = new URLSearchParams();\n if (envId) params.append('env_id', envId);\n if (opts.limit) params.append('limit', opts.limit);\n return fetchApi(`/dashboards/${encodeURIComponent(String(ref))}/tasks?${params.toString()}`);\n },\n getDashboardThumbnail: (envId, ref, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.force != null) params.append('force', String(Boolean(opts.force)));\n return fetchApiBlob(`/dashboards/${encodeURIComponent(String(ref))}/thumbnail?${params.toString()}`, { notifyError: false });\n },\n getDatabaseMappings: (src, tgt) => fetchApi(`/dashboards/db-mappings?source_env_id=${src}&target_env_id=${tgt}`),\n calculateMigrationDryRun: (p) => postApi('/migration/dry-run', p),\n getDatasets: (envId, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.search) params.append('search', opts.search);\n if (opts.filter) params.append('filter', opts.filter);\n if (opts.page) params.append('page', opts.page);\n if (opts.page_size) params.append('page_size', opts.page_size);\n return fetchApi(`/datasets?${params.toString()}`);\n },\n getDatasetIds: (envId, opts = {}) => {\n const params = new URLSearchParams({ env_id: envId });\n if (opts.search) params.append('search', opts.search);\n return fetchApi(`/datasets/ids?${params.toString()}`);\n },\n getDatasetDetail: (envId, datasetId) => fetchApi(`/datasets/${datasetId}?env_id=${envId}`),\n getConsolidatedSettings: () => fetchApi('/settings/consolidated'),\n updateConsolidatedSettings: (s) => requestApi('/settings/consolidated', 'PATCH', s),\n getValidationPolicies: () => fetchApi('/settings/automation/policies'),\n createValidationPolicy: (p) => postApi('/settings/automation/policies', p),\n updateValidationPolicy: (id, p) => requestApi(`/settings/automation/policies/${id}`, 'PATCH', p),\n deleteValidationPolicy: (id) => requestApi(`/settings/automation/policies/${id}`, 'DELETE'),\n getTranslationSchedules: () => fetchApi('/settings/automation/translation-schedules'),\n getHealthSummary: (environmentId) => {\n const query = environmentId ? `?env_id=${encodeURIComponent(environmentId)}` : '';\n return fetchApi(`/health/summary${query}`, { suppressToast: true });\n },\n // ── API Key Management ────────────────────────────────────\n listApiKeys: () => fetchApi('/admin/api-keys/'),\n createApiKey: (payload) => postApi('/admin/api-keys/', payload, { suppressToast: true }),\n revokeApiKey: (keyId) => requestApi(`/admin/api-keys/${keyId}`, 'DELETE'),\n};\n// #endregion ApiModule\n" }, { "contract_id": "ReportsApiTest", @@ -71756,7 +73167,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n {pageTitle}\n\n\n
\n \n
\n
\n

\n {isNewTask ? ($t.validation?.new_task || 'New Validation Task') : ($t.validation?.edit_task || 'Edit Validation Task')}\n

\n {#if !isNewTask && task}\n

{$t.validation?.created_at || 'Created'}: {task?.created_at ? new Date(task.created_at).toLocaleString() : '-'}

\n {/if}\n
\n
\n {#if !isNewTask}\n \n {#if isRunning}\n \n \n \n \n {$t.validation?.running || 'Running...'}\n {:else}\n {$t.validation?.run_now || 'Run Now'}\n {/if}\n \n {/if}\n \n {$t.validation?.cancel || 'Cancel'}\n \n \n {isSaving ? ($t.validation?.saving || 'Saving...') : ($t.validation?.save || 'Save')}\n \n
\n
\n\n \n {#if uxState === 'loading'}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n {:else if uxState === 'error'}\n
\n

{error || $t.validation?.load_task_failed || 'Failed to load task.'}

\n
\n \n {$t.validation?.retry || 'Retry'}\n \n \n {$t.validation?.back || 'Back'}\n \n
\n
\n\n \n {:else if uxState === 'not_found'}\n
\n

{$t.validation?.task_not_found || 'Task not found'}

\n

{$t.validation?.task_not_found_desc || 'The task you are looking for does not exist or has been deleted.'}

\n \n {$t.validation?.go_back || 'Go back'}\n \n
\n\n \n {:else if uxState === 'configured' || uxState === 'saving'}\n \n
\n \n
\n\n \n {#if !isNewTask && providerId && !isProviderMultimodal}\n
\n

\n \n \n \n {$t.validation?.provider_multimodal_required || 'Dashboard validation requires a multimodal LLM provider (supports images).'}\n

\n
\n {/if}\n\n \n {#if activeTab === 'config'}\n
\n \n
\n

{$t.validation?.task_name || 'Basic Info'}

\n
\n
\n \n \n {#if validationErrors.name}\n

{validationErrors.name}

\n {/if}\n
\n
\n
\n\n \n
\n

{$t.validation?.dashboard || 'Dashboard & Environment'}

\n
\n
\n \n { dashboardIds = []; searchDashboards(''); }}\n class=\"w-full px-3 py-2 border rounded-lg text-sm {validationErrors.environment_id ? 'border-red-300 bg-red-50' : 'border-gray-300'}\"\n >\n \n {#each environments as env (env.id)}\n \n {/each}\n \n {#if validationErrors.environment_id}\n

{validationErrors.environment_id}

\n {/if}\n
\n
\n \n ({ id: String(d.id), name: d.title || d.dashboard_title || d.name || String(d.id), subtitle: d.schema || '' }))}\n bind:selected={dashboardIds}\n placeholder={$t.validation?.dashboard || 'Select dashboard...'}\n selectAllLabel={$t.dashboard?.select_all || 'Select All'}\n clearLabel=\"Clear\"\n emptyMessage=\"No dashboards found\"\n disabled={!environmentId}\n />\n {#if validationErrors.dashboard_id}\n

{validationErrors.dashboard_id}

\n {/if}\n {#if dashboardsLoading}\n

Loading...

\n {/if}\n
\n
\n
\n\n \n
\n

{$t.validation?.llm_provider || 'LLM Provider'}

\n
\n \n \n \n {#each multimodalProviders as p (p.id)}\n \n {/each}\n \n {#if validationErrors.provider_id}\n

{validationErrors.provider_id}

\n {/if}\n {#if providerId && !isProviderMultimodal}\n

\n \n \n \n {$t.validation?.provider_multimodal_required || 'Dashboard validation requires a multimodal LLM provider.'}\n

\n {/if}\n
\n
\n\n \n
\n
\n

{$t.validation?.schedule || 'Schedule'}

\n (showSchedule = !showSchedule)}\n class=\"text-sm text-blue-600 hover:text-blue-700 font-medium\"\n >\n {showSchedule\n ? ($t.validation?.schedule_collapse || 'Hide schedule')\n : ($t.validation?.schedule_expand || 'Configure schedule')}\n \n
\n\n {#if !showSchedule}\n

{$t.validation?.manual_only || 'Manual only — runs triggered by user.'}

\n {:else}\n
\n
\n \n \n
\n {#each DAY_LABELS as day, idx (day)}\n toggleDay(idx)}\n class=\"px-3 py-1.5 text-sm rounded-lg border transition-colors\n {scheduleDays.includes(idx)\n ? 'bg-blue-100 border-blue-300 text-blue-700'\n : 'bg-white border-gray-200 text-gray-600 hover:border-gray-300'}\"\n >\n {$t.validation?.[DAY_KEYS[idx]] || day}\n \n {/each}\n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n \n

\n \n \n \n {$t.validation?.schedule_timezone_hint || 'All times in'} {appTimezone}\n

\n
\n {/if}\n
\n\n \n
\n \n
\n
\n\n \n {:else if activeTab === 'history'}\n
\n \n
\n \n \n \n
\n

{$t.validation?.history_info_title || 'About run history'}

\n

{$t.validation?.history_info_desc || 'This tab shows validation runs for this specific task. Runs appear after you click \"Run Now\" or when the scheduled task executes. Each run captures a dashboard screenshot and sends it to the LLM provider for analysis.'}

\n
\n
\n\n {#if runsLoading}\n
\n {#each Array(3) as _, i (i)}\n
\n {/each}\n
\n {:else if runs.length === 0}\n
\n

{$t.validation?.run_history_empty || 'No runs for this task yet.'}

\n

{$t.validation?.run_history_empty_hint || 'Click \"Run Now\" above to start a validation run. The result will appear here once analysis completes.'}

\n
\n {:else}\n
\n \n \n \n \n \n \n \n \n \n \n \n {#each runs as run (run.id)}\n \n \n \n \n \n \n \n {/each}\n \n
{$t.validation?.status || 'Status'}{$t.validation?.summary || 'Summary'}{$t.validation?.issues || 'Issues'}{$t.validation?.timestamp || 'Timestamp'}{$t.validation?.actions || 'Actions'}
\n \n {run.status || 'UNKNOWN'}\n \n \n {run.summary || '-'}\n \n {run.issues_count ?? run.issues ?? '-'}\n \n {run.created_at || run.completed_at ? new Date(run.created_at || run.completed_at).toLocaleString() : '-'}\n \n handleNavToReport(run.task_id)}\n class=\"text-blue-600 hover:text-blue-700 text-sm font-medium\"\n >\n {$t.validation?.view_report || 'View Report'}\n \n
\n
\n\n \n {#if runsTotal > runsPageSize}\n
\n

\n {($t.validation?.showing || 'Showing {count} of {total}')\n .replace('{count}', String(runs.length))\n .replace('{total}', String(runsTotal))}\n

\n
\n { runsPage--; loadRunHistory(); }}\n disabled={runsPage <= 1}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.previous || 'Previous'}\n \n { runsPage++; loadRunHistory(); }}\n disabled={runsPage * runsPageSize >= runsTotal}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.next || 'Next'}\n \n
\n
\n {/if}\n {/if}\n
\n {/if}\n {/if}\n
\n\n" + "body": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n {pageTitle}\n\n\n
\n \n
\n
\n

\n {isNewTask ? ($t.validation?.new_task || 'New Validation Task') : ($t.validation?.edit_task || 'Edit Validation Task')}\n

\n {#if !isNewTask && task}\n

{$t.validation?.created_at || 'Created'}: {task?.created_at ? new Date(task.created_at).toLocaleString() : '-'}

\n {/if}\n
\n
\n {#if !isNewTask}\n \n {#if isRunning}\n \n \n \n \n {$t.validation?.running || 'Running...'}\n {:else}\n {$t.validation?.run_now || 'Run Now'}\n {/if}\n \n {/if}\n \n {$t.validation?.cancel || 'Cancel'}\n \n \n {isSaving ? ($t.validation?.saving || 'Saving...') : ($t.validation?.save || 'Save')}\n \n
\n
\n\n \n {#if uxState === 'loading'}\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n \n {:else if uxState === 'error'}\n
\n

{error || $t.validation?.load_task_failed || 'Failed to load task.'}

\n
\n \n {$t.validation?.retry || 'Retry'}\n \n \n {$t.validation?.back || 'Back'}\n \n
\n
\n\n \n {:else if uxState === 'not_found'}\n
\n

{$t.validation?.task_not_found || 'Task not found'}

\n

{$t.validation?.task_not_found_desc || 'The task you are looking for does not exist or has been deleted.'}

\n \n {$t.validation?.go_back || 'Go back'}\n \n
\n\n \n {:else if uxState === 'configured' || uxState === 'saving'}\n \n
\n \n
\n\n \n {#if !isNewTask && providerId && !isProviderMultimodal}\n
\n

\n \n \n \n {$t.validation?.provider_multimodal_required || 'Dashboard validation requires a multimodal LLM provider (supports images).'}\n

\n
\n {/if}\n\n \n {#if activeTab === 'config'}\n
\n \n
\n

{$t.validation?.task_name || 'Basic Info'}

\n
\n
\n \n \n {#if validationErrors.name}\n

{validationErrors.name}

\n {/if}\n
\n
\n
\n\n \n
\n

{$t.validation?.dashboard || 'Dashboard & Environment'}

\n
\n
\n \n { dashboardIds = []; searchDashboards(''); }}\n class=\"w-full px-3 py-2 border rounded-lg text-sm {validationErrors.environment_id ? 'border-red-300 bg-red-50' : 'border-gray-300'}\"\n >\n \n {#each environments as env (env.id)}\n \n {/each}\n \n {#if validationErrors.environment_id}\n

{validationErrors.environment_id}

\n {/if}\n
\n
\n \n ({ id: String(d.id), name: d.title || d.dashboard_title || d.name || String(d.id), subtitle: d.schema || '' }))}\n bind:selected={dashboardIds}\n placeholder={$t.validation?.dashboard || 'Select dashboard...'}\n selectAllLabel={$t.dashboard?.select_all || 'Select All'}\n clearLabel=\"Clear\"\n emptyMessage=\"No dashboards found\"\n disabled={!environmentId}\n />\n {#if validationErrors.dashboard_id}\n

{validationErrors.dashboard_id}

\n {/if}\n {#if dashboardsLoading}\n

Loading...

\n {/if}\n
\n
\n
\n\n \n
\n

{$t.validation?.llm_provider || 'LLM Provider'}

\n
\n \n \n \n {#each multimodalProviders as p (p.id)}\n \n {/each}\n \n {#if validationErrors.provider_id}\n

{validationErrors.provider_id}

\n {/if}\n {#if providerId && !isProviderMultimodal}\n

\n \n \n \n {$t.validation?.provider_multimodal_required || 'Dashboard validation requires a multimodal LLM provider.'}\n

\n {/if}\n
\n
\n\n \n
\n
\n

{$t.validation?.schedule || 'Schedule'}

\n (showSchedule = !showSchedule)}\n class=\"text-sm text-blue-600 hover:text-blue-700 font-medium\"\n >\n {showSchedule\n ? ($t.validation?.schedule_collapse || 'Hide schedule')\n : ($t.validation?.schedule_expand || 'Configure schedule')}\n \n
\n\n {#if !showSchedule}\n

{$t.validation?.manual_only || 'Manual only — runs triggered by user.'}

\n {:else}\n
\n
\n \n \n
\n {#each DAY_LABELS as day, idx (day)}\n toggleDay(idx)}\n class=\"px-3 py-1.5 text-sm rounded-lg border transition-colors\n {scheduleDays.includes(idx)\n ? 'bg-blue-100 border-blue-300 text-blue-700'\n : 'bg-white border-gray-200 text-gray-600 hover:border-gray-300'}\"\n >\n {$t.validation?.[DAY_KEYS[idx]] || day}\n \n {/each}\n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n \n

\n \n \n \n {$t.validation?.schedule_timezone_hint || 'All times in'} {appTimezone}\n

\n
\n {/if}\n
\n\n \n
\n \n
\n
\n\n \n {:else if activeTab === 'history'}\n
\n \n
\n \n \n \n
\n

{$t.validation?.history_info_title || 'About run history'}

\n

{$t.validation?.history_info_desc || 'This tab shows validation runs for this specific task. Runs appear after you click \"Run Now\" or when the scheduled task executes. Each run captures a dashboard screenshot and sends it to the LLM provider for analysis.'}

\n
\n
\n\n {#if runsLoading}\n
\n {#each Array(3) as _, i (i)}\n
\n {/each}\n
\n {:else if runs.length === 0}\n
\n

{$t.validation?.run_history_empty || 'No runs for this task yet.'}

\n

{$t.validation?.run_history_empty_hint || 'Click \"Run Now\" above to start a validation run. The result will appear here once analysis completes.'}

\n
\n {:else}\n
\n \n \n \n \n \n \n \n \n \n \n \n {#each runs as run (run.id)}\n \n \n \n \n \n \n \n {/each}\n \n
{$t.validation?.status || 'Status'}{$t.validation?.summary || 'Summary'}{$t.validation?.issues || 'Issues'}{$t.validation?.timestamp || 'Timestamp'}{$t.validation?.actions || 'Actions'}
\n \n {run.status || 'UNKNOWN'}\n \n \n {run.summary || '-'}\n \n {run.issues_count ?? run.issues ?? '-'}\n \n {run.timestamp ? new Date(run.timestamp).toLocaleString() : '-'}\n \n handleNavToReport(run.task_id)}\n class=\"text-blue-600 hover:text-blue-700 text-sm font-medium\"\n >\n {$t.validation?.view_report || 'View Report'}\n \n
\n
\n\n \n {#if runsTotal > runsPageSize}\n
\n

\n {($t.validation?.showing || 'Showing {count} of {total}')\n .replace('{count}', String(runs.length))\n .replace('{total}', String(runsTotal))}\n

\n
\n { runsPage--; loadRunHistory(); }}\n disabled={runsPage <= 1}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.previous || 'Previous'}\n \n { runsPage++; loadRunHistory(); }}\n disabled={runsPage * runsPageSize >= runsTotal}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.next || 'Next'}\n \n
\n
\n {/if}\n {/if}\n
\n {/if}\n {/if}\n
\n\n" }, { "contract_id": "ValidationHistory", @@ -71778,7 +73189,7 @@ "schema_warnings": [], "anchor_syntax": "region", "tier_source": "AutoCalculated", - "body": "\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n

{$t.validation?.history_title || 'Validation History'}

\n

{$t.validation?.last_run || 'Review past validation runs'}

\n
\n { currentPage = 1; applyFilters(); }}\n class=\"px-4 py-2 text-sm text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\n >\n \n \n \n {$t.common?.refresh || 'Refresh'}\n \n
\n\n \n
\n
\n \n \n \n \n \n \n
\n \n {$t.validation?.apply || 'Apply'}\n \n \n \n \n \n \n
\n
\n
\n\n \n {#if isLoading}\n
\n
\n {#each Array(3) as _, i (i)}\n
\n {/each}\n
\n\n \n {:else if uxState === 'error'}\n
\n

{error}

\n \n {$t.validation?.retry || 'Retry'}\n \n
\n\n \n {:else if uxState === 'empty'}\n
\n \n \n \n

{$t.validation?.no_runs || 'No validation runs yet. Create a task and run it.'}

\n
\n\n \n {:else if uxState === 'filtered_empty'}\n
\n \n \n \n

{$t.validation?.no_runs_filtered || 'No runs match your filters.'}

\n \n {$t.validation?.clear_filters || 'Clear filters'}\n \n
\n\n \n {:else if uxState === 'populated'}\n \n
\n
\n

{$t.validation?.total_runs || 'Total runs'}

\n

{totalRuns}

\n
\n
\n

{$t.validation?.passed || 'Passed'}

\n

{passedCount}

\n
\n
\n

{$t.validation?.failed || 'Failed'}

\n

{failedCount}

\n
\n
\n

{$t.validation?.warn_rate || 'Warn rate'}

\n

{warnRate}%

\n
\n
\n\n \n
\n {#each runs as run (run.id)}\n
\n
\n
\n
\n {getTaskName(run.task_id)}\n \n {run.status || 'UNKNOWN'}\n \n {#if Array.isArray(run.issues) && run.issues.length > 0}\n \n {$t.validation?.issues || 'Issues'}: {run.issues.length}\n \n {/if}\n
\n {#if run.summary}\n

{run.summary}

\n {/if}\n
\n {run.created_at ? new Date(run.created_at).toLocaleString() : '-'}\n {$t.validation?.dashboard || 'Dashboard'}: {run.dashboard_id || getTaskName(run.task_id)}\n
\n
\n
e.stopPropagation()}>\n handleNavToReport(run.task_id)}\n class=\"px-3 py-1.5 text-xs text-blue-600 hover:text-blue-700 font-medium rounded-lg hover:bg-blue-50 transition-colors\"\n >\n {$t.validation?.view_report || 'View Report'}\n \n {#if showDeleteConfirm === run.id}\n
\n handleDeleteRun(run.id)}\n class=\"px-2 py-1 text-xs bg-red-600 text-white rounded hover:bg-red-700\"\n >\n {$t.validation?.confirm_delete || 'Delete'}\n \n (showDeleteConfirm = null)}\n class=\"px-2 py-1 text-xs bg-gray-200 text-gray-700 rounded hover:bg-gray-300\"\n >\n {$t.validation?.cancel_delete || 'Cancel'}\n \n
\n {:else}\n (showDeleteConfirm = run.id)}\n class=\"p-2 text-gray-400 hover:text-red-600 rounded-lg hover:bg-red-50 transition-colors\"\n title={$t.common?.delete || 'Delete'}\n >\n \n \n \n \n {/if}\n
\n
\n
\n {/each}\n
\n\n \n
\n

\n {($t.validation?.showing || 'Showing {count} of {total}')\n .replace('{count}', String(runs.length))\n .replace('{total}', String(total))}\n

\n
\n { currentPage--; loadRuns(); }}\n disabled={currentPage <= 1}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.previous || 'Previous'}\n \n { currentPage++; loadRuns(); }}\n disabled={currentPage * pageSize >= total}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.next || 'Next'}\n \n
\n
\n {/if}\n
\n\n" + "body": "\n\n\n\n\n\n\n\n\n\n\n
\n
\n
\n

{$t.validation?.history_title || 'Validation History'}

\n

{$t.validation?.last_run || 'Review past validation runs'}

\n
\n { currentPage = 1; applyFilters(); }}\n class=\"px-4 py-2 text-sm text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors\"\n >\n \n \n \n {$t.common?.refresh || 'Refresh'}\n \n
\n\n \n
\n
\n \n \n \n \n \n \n
\n \n {$t.validation?.apply || 'Apply'}\n \n \n \n \n \n \n
\n
\n
\n\n \n {#if isLoading}\n
\n
\n {#each Array(3) as _, i (i)}\n
\n {/each}\n
\n\n \n {:else if uxState === 'error'}\n
\n

{error}

\n \n {$t.validation?.retry || 'Retry'}\n \n
\n\n \n {:else if uxState === 'empty'}\n
\n \n \n \n

{$t.validation?.no_runs || 'No validation runs yet. Create a task and run it.'}

\n
\n\n \n {:else if uxState === 'filtered_empty'}\n
\n \n \n \n

{$t.validation?.no_runs_filtered || 'No runs match your filters.'}

\n \n {$t.validation?.clear_filters || 'Clear filters'}\n \n
\n\n \n {:else if uxState === 'populated'}\n \n
\n
\n

{$t.validation?.total_runs || 'Total runs'}

\n

{totalRuns}

\n
\n
\n

{$t.validation?.passed || 'Passed'}

\n

{passedCount}

\n
\n
\n

{$t.validation?.failed || 'Failed'}

\n

{failedCount}

\n
\n
\n

{$t.validation?.warn_rate || 'Warn rate'}

\n

{warnRate}%

\n
\n
\n\n \n
\n {#each runs as run (run.id)}\n
\n
\n
\n
\n {getTaskName(run.task_id)}\n \n {run.status || 'UNKNOWN'}\n \n {#if run.issues_count > 0}\n \n {$t.validation?.issues || 'Issues'}: {run.issues_count}\n \n {/if}\n
\n {#if run.summary}\n

{run.summary}

\n {/if}\n
\n {run.timestamp ? new Date(run.timestamp).toLocaleString() : '-'}\n {$t.validation?.dashboard || 'Dashboard'}: {run.dashboard_id || getTaskName(run.task_id)}\n
\n
\n
e.stopPropagation()}>\n handleNavToReport(run.task_id)}\n class=\"px-3 py-1.5 text-xs text-blue-600 hover:text-blue-700 font-medium rounded-lg hover:bg-blue-50 transition-colors\"\n >\n {$t.validation?.view_report || 'View Report'}\n \n {#if showDeleteConfirm === run.id}\n
\n handleDeleteRun(run.id)}\n class=\"px-2 py-1 text-xs bg-red-600 text-white rounded hover:bg-red-700\"\n >\n {$t.validation?.confirm_delete || 'Delete'}\n \n (showDeleteConfirm = null)}\n class=\"px-2 py-1 text-xs bg-gray-200 text-gray-700 rounded hover:bg-gray-300\"\n >\n {$t.validation?.cancel_delete || 'Cancel'}\n \n
\n {:else}\n (showDeleteConfirm = run.id)}\n class=\"p-2 text-gray-400 hover:text-red-600 rounded-lg hover:bg-red-50 transition-colors\"\n title={$t.common?.delete || 'Delete'}\n >\n \n \n \n \n {/if}\n
\n
\n
\n {/each}\n
\n\n \n
\n

\n {($t.validation?.showing || 'Showing {count} of {total}')\n .replace('{count}', String(runs.length))\n .replace('{total}', String(total))}\n

\n
\n { currentPage--; loadRuns(); }}\n disabled={currentPage <= 1}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.previous || 'Previous'}\n \n { currentPage++; loadRuns(); }}\n disabled={currentPage * pageSize >= total}\n class=\"px-3 py-1.5 text-sm border border-gray-200 rounded-lg disabled:opacity-50 hover:bg-gray-50\"\n >\n {$t.validation?.next || 'Next'}\n \n
\n
\n {/if}\n
\n\n" }, { "contract_id": "GitServiceContractTests", @@ -72641,6 +74052,707 @@ "tier_source": "AutoCalculated", "body": "/**\n * Extract unfinished merge context from a 409 error.\n */" }, + { + "contract_id": "GitServiceClient", + "contract_type": "Service", + "file_path": "frontend/src/services/gitService.js", + "start_line": 1, + "end_line": 368, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "API client for Git operations — repository management, branches, commits, merges, deployments.", + "COMPLEXITY": 3, + "LAYER": "Service" + }, + "relations": [ + { + "source_id": "GitServiceClient", + "relation_type": "DEPENDS_ON", + "target_id": "ApiModule", + "target_ref": "[ApiModule]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "// #region GitServiceClient [C:3] [TYPE Service] [SEMANTICS git, service, api, repository, branch]\n// @BRIEF API client for Git operations — repository management, branches, commits, merges, deployments.\n// @LAYER Service\n// @RELATION DEPENDS_ON -> [ApiModule]\n\nimport { requestApi } from '../lib/api';\n\nconst API_BASE = '/git';\n\n// #region buildDashboardRepoEndpoint [C:2] [TYPE Function]\n// @BRIEF Build /git/repositories/{ref}{suffix} endpoint with optional env_id query param.\n// @PRE dashboardRef is non-empty string.\n// @POST Returns absolute API endpoint path with env_id appended when envId is provided.\n// @DATA_CONTRACT Input(dashboardRef, suffix, envId?) -> Output(string)\nfunction buildDashboardRepoEndpoint(dashboardRef, suffix, envId = null) {\n const encodedRef = encodeURIComponent(String(dashboardRef));\n const endpoint = `${API_BASE}/repositories/${encodedRef}${suffix}`;\n if (!envId) return endpoint;\n const sep = endpoint.includes('?') ? '&' : '?';\n return `${endpoint}${sep}env_id=${encodeURIComponent(String(envId))}`;\n}\n// #endregion buildDashboardRepoEndpoint\n\n// #region gitService [C:3] [TYPE Object]\n// @BRIEF Exported Git API client with methods for all repository and config operations.\n// @RELATION CALLS -> [ApiModule.requestApi]\nexport const gitService = {\n\n // #region getConfigs [C:2] [TYPE Function]\n // @BRIEF Fetch all Git server configurations.\n // @PRE User is authenticated (handled by ApiModule auth headers).\n // @POST Returns list of GitServerConfig objects.\n // @DATA_CONTRACT None -> Array\n async getConfigs() {\n console.log('[getConfigs][Action] Fetching Git configs');\n return requestApi(`${API_BASE}/config`);\n },\n // #endregion getConfigs\n\n // #region createConfig [C:2] [TYPE Function]\n // @BRIEF Create a new Git server configuration.\n // @PRE config object is valid with required fields.\n // @POST New config is persisted and returned.\n // @DATA_CONTRACT Input(GitServerConfig) -> Output(GitServerConfig)\n async createConfig(config) {\n console.log('[createConfig][Action] Creating Git config');\n return requestApi(`${API_BASE}/config`, 'POST', config);\n },\n // #endregion createConfig\n\n // #region deleteConfig [C:2] [TYPE Function]\n // @BRIEF Delete an existing Git server configuration.\n // @PRE configId exists in the backend.\n // @POST Config is removed from the backend.\n async deleteConfig(configId) {\n console.log(`[deleteConfig][Action] Deleting Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'DELETE');\n },\n // #endregion deleteConfig\n\n // #region updateConfig [C:2] [TYPE Function]\n // @BRIEF Update an existing Git server configuration.\n // @PRE configId exists and configData contains valid fields.\n // @POST Config is updated and returned.\n async updateConfig(configId, config) {\n console.log(`[updateConfig][Action] Updating Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'PUT', config);\n },\n // #endregion updateConfig\n\n // #region testConnection [C:2] [TYPE Function]\n // @BRIEF Test connection to a Git server with provided credentials.\n // @PRE config contains valid URL and PAT.\n // @POST Returns connection status (success/failure).\n // @DATA_CONTRACT Input(GitServerConfig) -> Output({status: string})\n async testConnection(config) {\n console.log('[testConnection][Action] Testing Git connection');\n return requestApi(`${API_BASE}/config/test`, 'POST', config);\n },\n // #endregion testConnection\n\n // #region listGiteaRepositories [C:2] [TYPE Function]\n // @BRIEF List repositories on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA provider config.\n // @POST Returns array of Gitea repository metadata.\n async listGiteaRepositories(configId) {\n console.log(`[listGiteaRepositories][Action] Listing Gitea repositories for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`);\n },\n // #endregion listGiteaRepositories\n\n // #region createGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Create a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; payload has non-empty name.\n // @POST Repository created on Gitea; returns created repo metadata.\n async createGiteaRepository(configId, payload) {\n console.log(`[createGiteaRepository][Action] Creating Gitea repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`, 'POST', payload);\n },\n // #endregion createGiteaRepository\n\n // #region createRemoteRepository [C:2] [TYPE Function]\n // @BRIEF Create repository on remote provider selected by Git config (idempotent: returns existing on 409).\n // @PRE configId exists and points to supported provider; payload has non-empty name.\n // @POST Remote repository created (or existing returned); normalized payload returned.\n // @DATA_CONTRACT Input(configId, RemoteRepoCreatePayload) -> Output(RemoteRepoSchema)\n async createRemoteRepository(configId, payload) {\n console.log(`[createRemoteRepository][Action] Creating remote repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/repositories`, 'POST', payload);\n },\n // #endregion createRemoteRepository\n\n // #region deleteGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Delete a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; owner and repoName are non-empty.\n // @POST Repository deleted on Gitea server.\n async deleteGiteaRepository(configId, owner, repoName) {\n console.log(`[deleteGiteaRepository][Action] Deleting Gitea repository ${owner}/${repoName} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repoName)}`, 'DELETE');\n },\n // #endregion deleteGiteaRepository\n\n // #region initRepository [C:3] [TYPE Function]\n // @BRIEF Initialize or clone a Git repository for a dashboard.\n // @PRE dashboardRef is non-empty; configId and remoteUrl are valid; envId required when ref is slug.\n // @POST Repository initialized on the backend; GitRepository record created.\n // @DATA_CONTRACT Input(dashboardRef, configId, remoteUrl, envId?) -> Output({status: string, message: string})\n // @RELATION CALLS -> [ApiModule.requestApi]\n async initRepository(dashboardRef, configId, remoteUrl, envId = null) {\n console.log(`[initRepository][Action] Initializing repo for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/init', envId), 'POST', {\n config_id: configId,\n remote_url: remoteUrl\n });\n },\n // #endregion initRepository\n\n // #region getRepositoryBinding [C:2] [TYPE Function]\n // @BRIEF Fetch repository binding metadata (config/provider) for a dashboard.\n // @PRE Repository should be initialized for the dashboard.\n // @POST Returns provider, config_id, remote_url, local_path.\n async getRepositoryBinding(dashboardRef, envId = null) {\n console.log(`[getRepositoryBinding][Action] Fetching repository binding for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId));\n },\n // #endregion getRepositoryBinding\n\n // #region getBranches [C:2] [TYPE Function]\n // @BRIEF List all branches for a dashboard's repository.\n // @PRE Repository must be initialized; envId required when dashboardRef is a slug.\n // @POST Returns array of BranchSchema objects.\n async getBranches(dashboardRef, envId = null) {\n console.log(`[getBranches][Action] Fetching branches for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId));\n },\n // #endregion getBranches\n\n // #region createBranch [C:2] [TYPE Function]\n // @BRIEF Create a new branch in the dashboard's repository.\n // @PRE Source branch exists; name is non-empty; envId required when ref is slug.\n // @POST New branch is created on the backend.\n async createBranch(dashboardRef, name, fromBranch, envId = null) {\n console.log(`[createBranch][Action] Creating branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId), 'POST', {\n name,\n from_branch: fromBranch\n });\n },\n // #endregion createBranch\n\n // #region checkoutBranch [C:2] [TYPE Function]\n // @BRIEF Switch the repository to a different branch.\n // @PRE Target branch exists; envId required when ref is slug.\n // @POST Repository HEAD is moved to the target branch.\n async checkoutBranch(dashboardRef, name, envId = null) {\n console.log(`[checkoutBranch][Action] Checking out branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/checkout', envId), 'POST', { name });\n },\n // #endregion checkoutBranch\n\n // #region commit [C:2] [TYPE Function]\n // @BRIEF Stage and commit changes to the repository.\n // @PRE message is non-empty; envId required when ref is slug.\n // @POST Changes are committed to the current branch.\n async commit(dashboardRef, message, files, envId = null) {\n console.log(`[commit][Action] Committing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/commit', envId), 'POST', { message, files });\n },\n // #endregion commit\n\n // #region push [C:2] [TYPE Function]\n // @BRIEF Push local commits to the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Remote is updated with local commits.\n async push(dashboardRef, envId = null) {\n console.log(`[push][Action] Pushing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/push', envId), 'POST');\n },\n // #endregion push\n\n // #region deleteRepository [C:2] [TYPE Function]\n // @BRIEF Delete local repository binding and workspace for a dashboard.\n // @PRE dashboardRef resolves on backend; envId required when ref is slug.\n // @POST Repository record and local folder are removed.\n async deleteRepository(dashboardRef, envId = null) {\n console.log(`[deleteRepository][Action] Deleting repository for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId), 'DELETE');\n },\n // #endregion deleteRepository\n\n // #region pull [C:2] [TYPE Function]\n // @BRIEF Pull changes from the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Local repository is updated with remote changes.\n async pull(dashboardRef, envId = null) {\n console.log(`[pull][Action] Pulling changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/pull', envId), 'POST');\n },\n // #endregion pull\n\n // #region getMergeStatus [C:2] [TYPE Function]\n // @BRIEF Fetch unfinished-merge status for a repository.\n // @PRE Repository must exist; envId required when ref is slug.\n // @POST Returns merge status payload with has_unfinished_merge flag.\n async getMergeStatus(dashboardRef, envId = null) {\n console.log(`[getMergeStatus][Action] Fetching merge status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/status', envId));\n },\n // #endregion getMergeStatus\n\n // #region getMergeConflicts [C:2] [TYPE Function]\n // @BRIEF List merge conflicts for a repository with unresolved merge.\n // @PRE Unfinished merge is in progress; envId required when ref is slug.\n // @POST Returns array of conflict file entries with mine/theirs previews.\n async getMergeConflicts(dashboardRef, envId = null) {\n console.log(`[getMergeConflicts][Action] Fetching merge conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/conflicts', envId));\n },\n // #endregion getMergeConflicts\n\n // #region resolveMergeConflicts [C:2] [TYPE Function]\n // @BRIEF Apply conflict resolution strategies and stage resolved files.\n // @PRE resolutions array contains file_path and resolution entries; envId required when ref is slug.\n // @POST Conflicts are resolved and staged.\n async resolveMergeConflicts(dashboardRef, resolutions, envId = null) {\n console.log(`[resolveMergeConflicts][Action] Resolving ${Array.isArray(resolutions) ? resolutions.length : 0} conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/resolve', envId), 'POST', {\n resolutions: Array.isArray(resolutions) ? resolutions : []\n });\n },\n // #endregion resolveMergeConflicts\n\n // #region abortMerge [C:2] [TYPE Function]\n // @BRIEF Abort current unfinished merge.\n // @PRE Repository exists; envId required when ref is slug.\n // @POST Merge state is aborted or reported as absent.\n async abortMerge(dashboardRef, envId = null) {\n console.log(`[abortMerge][Action] Aborting merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/abort', envId), 'POST');\n },\n // #endregion abortMerge\n\n // #region continueMerge [C:2] [TYPE Function]\n // @BRIEF Finalize unfinished merge by creating a merge commit.\n // @PRE All conflicts are resolved; envId required when ref is slug.\n // @POST Merge commit is created.\n async continueMerge(dashboardRef, message = '', envId = null) {\n console.log(`[continueMerge][Action] Continuing merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/continue', envId), 'POST', {\n message: String(message || '').trim() || null\n });\n },\n // #endregion continueMerge\n\n // #region getEnvironments [C:2] [TYPE Function]\n // @BRIEF Fetch available deployment environments from Git config.\n // @POST Returns list of environment objects.\n async getEnvironments() {\n console.log('[getEnvironments][Action] Fetching environments');\n return requestApi(`${API_BASE}/environments`);\n },\n // #endregion getEnvironments\n\n // #region deploy [C:2] [TYPE Function]\n // @BRIEF Deploy a dashboard to a target environment.\n // @PRE Environment must be active and accessible; envId required when ref is slug.\n // @POST Dashboard is imported into target Superset instance.\n async deploy(dashboardRef, environmentId, envId = null) {\n console.log(`[deploy][Action] Deploying dashboard ${dashboardRef} to environment ${environmentId}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/deploy', envId), 'POST', {\n environment_id: environmentId\n });\n },\n // #endregion deploy\n\n // #region getHistory [C:2] [TYPE Function]\n // @BRIEF Fetch commit history for a dashboard repository.\n // @POST Returns list of commits with author, date, message.\n async getHistory(dashboardRef, limit = 50, envId = null) {\n console.log(`[getHistory][Action] Fetching history for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, `/history?limit=${limit}`, envId));\n },\n // #endregion getHistory\n\n // #region sync [C:2] [TYPE Function]\n // @BRIEF Synchronize local dashboard state with Git repository.\n // @POST Dashboard state is synced to Git workspace.\n async sync(dashboardRef, sourceEnvId = null, envId = null) {\n console.log(`[sync][Action] Syncing dashboard ${dashboardRef}`);\n const params = new URLSearchParams();\n if (sourceEnvId) params.append('source_env_id', String(sourceEnvId));\n if (envId) params.append('env_id', String(envId));\n const query = params.toString();\n const endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/sync${query ? `?${query}` : ''}`;\n return requestApi(endpoint, 'POST');\n },\n // #endregion sync\n\n // #region getStatus [C:2] [TYPE Function]\n // @BRIEF Fetch current Git status for a dashboard repository (dirty files, branch info).\n // @PRE Repository path exists on disk; envId required when ref is slug.\n // @POST Returns status payload with is_dirty, staged_files, modified_files, current_branch.\n async getStatus(dashboardRef, envId = null) {\n console.log(`[getStatus][Action] Fetching status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/status', envId));\n },\n // #endregion getStatus\n\n // #region getStatusesBatch [C:2] [TYPE Function]\n // @BRIEF Fetch Git statuses for multiple dashboards in one batch request.\n // @PRE dashboardIds is a non-empty array of numeric IDs.\n // @POST Returns a map of dashboard_id -> status payload (with NO_REPO for uninitialized).\n async getStatusesBatch(dashboardIds) {\n console.log(`[getStatusesBatch][Action] Fetching statuses for ${dashboardIds.length} dashboards`);\n return requestApi(`${API_BASE}/repositories/status/batch`, 'POST', {\n dashboard_ids: dashboardIds\n });\n },\n // #endregion getStatusesBatch\n\n // #region getDiff [C:2] [TYPE Function]\n // @BRIEF Fetch Git diff for a dashboard repository (staged or unstaged).\n // @PRE Repository path exists; envId required when ref is slug.\n // @POST Returns unified diff string.\n async getDiff(dashboardRef, filePath = null, staged = false, envId = null) {\n console.log(`[getDiff][Action] Fetching diff for dashboard ${dashboardRef} (file: ${filePath}, staged: ${staged})`);\n let endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/diff`;\n const params = new URLSearchParams();\n if (filePath) params.append('file_path', filePath);\n if (staged) params.append('staged', 'true');\n if (envId) params.append('env_id', String(envId));\n if (params.toString()) endpoint += `?${params.toString()}`;\n return requestApi(endpoint);\n },\n // #endregion getDiff\n\n // #region promote [C:2] [TYPE Function]\n // @BRIEF Promote changes between branches via MR or direct merge.\n // @PRE Dashboard repository initialized; from_branch and to_branch differ; envId required when ref is slug.\n // @POST Returns MR URL (MR mode) or merge status (direct mode).\n async promote(dashboardRef, payload, envId = null) {\n console.log(`[promote][Action] Promoting ${payload?.from_branch} -> ${payload?.to_branch} for dashboard ${dashboardRef} mode=${payload?.mode}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/promote', envId), 'POST', payload);\n }\n // #endregion promote\n};\n// #endregion gitService\n// #endregion GitServiceClient\n" + }, + { + "contract_id": "buildDashboardRepoEndpoint", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 10, + "end_line": 22, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Build /git/repositories/{ref}{suffix} endpoint with optional env_id query param.", + "COMPLEXITY": 2, + "DATA_CONTRACT": "Input(dashboardRef, suffix, envId?) -> Output(string)", + "POST": "Returns absolute API endpoint path with env_id appended when envId is provided.", + "PRE": "dashboardRef is non-empty string." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "// #region buildDashboardRepoEndpoint [C:2] [TYPE Function]\n// @BRIEF Build /git/repositories/{ref}{suffix} endpoint with optional env_id query param.\n// @PRE dashboardRef is non-empty string.\n// @POST Returns absolute API endpoint path with env_id appended when envId is provided.\n// @DATA_CONTRACT Input(dashboardRef, suffix, envId?) -> Output(string)\nfunction buildDashboardRepoEndpoint(dashboardRef, suffix, envId = null) {\n const encodedRef = encodeURIComponent(String(dashboardRef));\n const endpoint = `${API_BASE}/repositories/${encodedRef}${suffix}`;\n if (!envId) return endpoint;\n const sep = endpoint.includes('?') ? '&' : '?';\n return `${endpoint}${sep}env_id=${encodeURIComponent(String(envId))}`;\n}\n// #endregion buildDashboardRepoEndpoint\n" + }, + { + "contract_id": "gitService", + "contract_type": "Object", + "file_path": "frontend/src/services/gitService.js", + "start_line": 24, + "end_line": 367, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Exported Git API client with methods for all repository and config operations.", + "COMPLEXITY": 3 + }, + "relations": [ + { + "source_id": "gitService", + "relation_type": "CALLS", + "target_id": "ApiModule.requestApi", + "target_ref": "[ApiModule.requestApi]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": "// #region gitService [C:3] [TYPE Object]\n// @BRIEF Exported Git API client with methods for all repository and config operations.\n// @RELATION CALLS -> [ApiModule.requestApi]\nexport const gitService = {\n\n // #region getConfigs [C:2] [TYPE Function]\n // @BRIEF Fetch all Git server configurations.\n // @PRE User is authenticated (handled by ApiModule auth headers).\n // @POST Returns list of GitServerConfig objects.\n // @DATA_CONTRACT None -> Array\n async getConfigs() {\n console.log('[getConfigs][Action] Fetching Git configs');\n return requestApi(`${API_BASE}/config`);\n },\n // #endregion getConfigs\n\n // #region createConfig [C:2] [TYPE Function]\n // @BRIEF Create a new Git server configuration.\n // @PRE config object is valid with required fields.\n // @POST New config is persisted and returned.\n // @DATA_CONTRACT Input(GitServerConfig) -> Output(GitServerConfig)\n async createConfig(config) {\n console.log('[createConfig][Action] Creating Git config');\n return requestApi(`${API_BASE}/config`, 'POST', config);\n },\n // #endregion createConfig\n\n // #region deleteConfig [C:2] [TYPE Function]\n // @BRIEF Delete an existing Git server configuration.\n // @PRE configId exists in the backend.\n // @POST Config is removed from the backend.\n async deleteConfig(configId) {\n console.log(`[deleteConfig][Action] Deleting Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'DELETE');\n },\n // #endregion deleteConfig\n\n // #region updateConfig [C:2] [TYPE Function]\n // @BRIEF Update an existing Git server configuration.\n // @PRE configId exists and configData contains valid fields.\n // @POST Config is updated and returned.\n async updateConfig(configId, config) {\n console.log(`[updateConfig][Action] Updating Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'PUT', config);\n },\n // #endregion updateConfig\n\n // #region testConnection [C:2] [TYPE Function]\n // @BRIEF Test connection to a Git server with provided credentials.\n // @PRE config contains valid URL and PAT.\n // @POST Returns connection status (success/failure).\n // @DATA_CONTRACT Input(GitServerConfig) -> Output({status: string})\n async testConnection(config) {\n console.log('[testConnection][Action] Testing Git connection');\n return requestApi(`${API_BASE}/config/test`, 'POST', config);\n },\n // #endregion testConnection\n\n // #region listGiteaRepositories [C:2] [TYPE Function]\n // @BRIEF List repositories on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA provider config.\n // @POST Returns array of Gitea repository metadata.\n async listGiteaRepositories(configId) {\n console.log(`[listGiteaRepositories][Action] Listing Gitea repositories for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`);\n },\n // #endregion listGiteaRepositories\n\n // #region createGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Create a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; payload has non-empty name.\n // @POST Repository created on Gitea; returns created repo metadata.\n async createGiteaRepository(configId, payload) {\n console.log(`[createGiteaRepository][Action] Creating Gitea repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`, 'POST', payload);\n },\n // #endregion createGiteaRepository\n\n // #region createRemoteRepository [C:2] [TYPE Function]\n // @BRIEF Create repository on remote provider selected by Git config (idempotent: returns existing on 409).\n // @PRE configId exists and points to supported provider; payload has non-empty name.\n // @POST Remote repository created (or existing returned); normalized payload returned.\n // @DATA_CONTRACT Input(configId, RemoteRepoCreatePayload) -> Output(RemoteRepoSchema)\n async createRemoteRepository(configId, payload) {\n console.log(`[createRemoteRepository][Action] Creating remote repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/repositories`, 'POST', payload);\n },\n // #endregion createRemoteRepository\n\n // #region deleteGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Delete a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; owner and repoName are non-empty.\n // @POST Repository deleted on Gitea server.\n async deleteGiteaRepository(configId, owner, repoName) {\n console.log(`[deleteGiteaRepository][Action] Deleting Gitea repository ${owner}/${repoName} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repoName)}`, 'DELETE');\n },\n // #endregion deleteGiteaRepository\n\n // #region initRepository [C:3] [TYPE Function]\n // @BRIEF Initialize or clone a Git repository for a dashboard.\n // @PRE dashboardRef is non-empty; configId and remoteUrl are valid; envId required when ref is slug.\n // @POST Repository initialized on the backend; GitRepository record created.\n // @DATA_CONTRACT Input(dashboardRef, configId, remoteUrl, envId?) -> Output({status: string, message: string})\n // @RELATION CALLS -> [ApiModule.requestApi]\n async initRepository(dashboardRef, configId, remoteUrl, envId = null) {\n console.log(`[initRepository][Action] Initializing repo for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/init', envId), 'POST', {\n config_id: configId,\n remote_url: remoteUrl\n });\n },\n // #endregion initRepository\n\n // #region getRepositoryBinding [C:2] [TYPE Function]\n // @BRIEF Fetch repository binding metadata (config/provider) for a dashboard.\n // @PRE Repository should be initialized for the dashboard.\n // @POST Returns provider, config_id, remote_url, local_path.\n async getRepositoryBinding(dashboardRef, envId = null) {\n console.log(`[getRepositoryBinding][Action] Fetching repository binding for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId));\n },\n // #endregion getRepositoryBinding\n\n // #region getBranches [C:2] [TYPE Function]\n // @BRIEF List all branches for a dashboard's repository.\n // @PRE Repository must be initialized; envId required when dashboardRef is a slug.\n // @POST Returns array of BranchSchema objects.\n async getBranches(dashboardRef, envId = null) {\n console.log(`[getBranches][Action] Fetching branches for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId));\n },\n // #endregion getBranches\n\n // #region createBranch [C:2] [TYPE Function]\n // @BRIEF Create a new branch in the dashboard's repository.\n // @PRE Source branch exists; name is non-empty; envId required when ref is slug.\n // @POST New branch is created on the backend.\n async createBranch(dashboardRef, name, fromBranch, envId = null) {\n console.log(`[createBranch][Action] Creating branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId), 'POST', {\n name,\n from_branch: fromBranch\n });\n },\n // #endregion createBranch\n\n // #region checkoutBranch [C:2] [TYPE Function]\n // @BRIEF Switch the repository to a different branch.\n // @PRE Target branch exists; envId required when ref is slug.\n // @POST Repository HEAD is moved to the target branch.\n async checkoutBranch(dashboardRef, name, envId = null) {\n console.log(`[checkoutBranch][Action] Checking out branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/checkout', envId), 'POST', { name });\n },\n // #endregion checkoutBranch\n\n // #region commit [C:2] [TYPE Function]\n // @BRIEF Stage and commit changes to the repository.\n // @PRE message is non-empty; envId required when ref is slug.\n // @POST Changes are committed to the current branch.\n async commit(dashboardRef, message, files, envId = null) {\n console.log(`[commit][Action] Committing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/commit', envId), 'POST', { message, files });\n },\n // #endregion commit\n\n // #region push [C:2] [TYPE Function]\n // @BRIEF Push local commits to the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Remote is updated with local commits.\n async push(dashboardRef, envId = null) {\n console.log(`[push][Action] Pushing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/push', envId), 'POST');\n },\n // #endregion push\n\n // #region deleteRepository [C:2] [TYPE Function]\n // @BRIEF Delete local repository binding and workspace for a dashboard.\n // @PRE dashboardRef resolves on backend; envId required when ref is slug.\n // @POST Repository record and local folder are removed.\n async deleteRepository(dashboardRef, envId = null) {\n console.log(`[deleteRepository][Action] Deleting repository for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId), 'DELETE');\n },\n // #endregion deleteRepository\n\n // #region pull [C:2] [TYPE Function]\n // @BRIEF Pull changes from the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Local repository is updated with remote changes.\n async pull(dashboardRef, envId = null) {\n console.log(`[pull][Action] Pulling changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/pull', envId), 'POST');\n },\n // #endregion pull\n\n // #region getMergeStatus [C:2] [TYPE Function]\n // @BRIEF Fetch unfinished-merge status for a repository.\n // @PRE Repository must exist; envId required when ref is slug.\n // @POST Returns merge status payload with has_unfinished_merge flag.\n async getMergeStatus(dashboardRef, envId = null) {\n console.log(`[getMergeStatus][Action] Fetching merge status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/status', envId));\n },\n // #endregion getMergeStatus\n\n // #region getMergeConflicts [C:2] [TYPE Function]\n // @BRIEF List merge conflicts for a repository with unresolved merge.\n // @PRE Unfinished merge is in progress; envId required when ref is slug.\n // @POST Returns array of conflict file entries with mine/theirs previews.\n async getMergeConflicts(dashboardRef, envId = null) {\n console.log(`[getMergeConflicts][Action] Fetching merge conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/conflicts', envId));\n },\n // #endregion getMergeConflicts\n\n // #region resolveMergeConflicts [C:2] [TYPE Function]\n // @BRIEF Apply conflict resolution strategies and stage resolved files.\n // @PRE resolutions array contains file_path and resolution entries; envId required when ref is slug.\n // @POST Conflicts are resolved and staged.\n async resolveMergeConflicts(dashboardRef, resolutions, envId = null) {\n console.log(`[resolveMergeConflicts][Action] Resolving ${Array.isArray(resolutions) ? resolutions.length : 0} conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/resolve', envId), 'POST', {\n resolutions: Array.isArray(resolutions) ? resolutions : []\n });\n },\n // #endregion resolveMergeConflicts\n\n // #region abortMerge [C:2] [TYPE Function]\n // @BRIEF Abort current unfinished merge.\n // @PRE Repository exists; envId required when ref is slug.\n // @POST Merge state is aborted or reported as absent.\n async abortMerge(dashboardRef, envId = null) {\n console.log(`[abortMerge][Action] Aborting merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/abort', envId), 'POST');\n },\n // #endregion abortMerge\n\n // #region continueMerge [C:2] [TYPE Function]\n // @BRIEF Finalize unfinished merge by creating a merge commit.\n // @PRE All conflicts are resolved; envId required when ref is slug.\n // @POST Merge commit is created.\n async continueMerge(dashboardRef, message = '', envId = null) {\n console.log(`[continueMerge][Action] Continuing merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/continue', envId), 'POST', {\n message: String(message || '').trim() || null\n });\n },\n // #endregion continueMerge\n\n // #region getEnvironments [C:2] [TYPE Function]\n // @BRIEF Fetch available deployment environments from Git config.\n // @POST Returns list of environment objects.\n async getEnvironments() {\n console.log('[getEnvironments][Action] Fetching environments');\n return requestApi(`${API_BASE}/environments`);\n },\n // #endregion getEnvironments\n\n // #region deploy [C:2] [TYPE Function]\n // @BRIEF Deploy a dashboard to a target environment.\n // @PRE Environment must be active and accessible; envId required when ref is slug.\n // @POST Dashboard is imported into target Superset instance.\n async deploy(dashboardRef, environmentId, envId = null) {\n console.log(`[deploy][Action] Deploying dashboard ${dashboardRef} to environment ${environmentId}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/deploy', envId), 'POST', {\n environment_id: environmentId\n });\n },\n // #endregion deploy\n\n // #region getHistory [C:2] [TYPE Function]\n // @BRIEF Fetch commit history for a dashboard repository.\n // @POST Returns list of commits with author, date, message.\n async getHistory(dashboardRef, limit = 50, envId = null) {\n console.log(`[getHistory][Action] Fetching history for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, `/history?limit=${limit}`, envId));\n },\n // #endregion getHistory\n\n // #region sync [C:2] [TYPE Function]\n // @BRIEF Synchronize local dashboard state with Git repository.\n // @POST Dashboard state is synced to Git workspace.\n async sync(dashboardRef, sourceEnvId = null, envId = null) {\n console.log(`[sync][Action] Syncing dashboard ${dashboardRef}`);\n const params = new URLSearchParams();\n if (sourceEnvId) params.append('source_env_id', String(sourceEnvId));\n if (envId) params.append('env_id', String(envId));\n const query = params.toString();\n const endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/sync${query ? `?${query}` : ''}`;\n return requestApi(endpoint, 'POST');\n },\n // #endregion sync\n\n // #region getStatus [C:2] [TYPE Function]\n // @BRIEF Fetch current Git status for a dashboard repository (dirty files, branch info).\n // @PRE Repository path exists on disk; envId required when ref is slug.\n // @POST Returns status payload with is_dirty, staged_files, modified_files, current_branch.\n async getStatus(dashboardRef, envId = null) {\n console.log(`[getStatus][Action] Fetching status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/status', envId));\n },\n // #endregion getStatus\n\n // #region getStatusesBatch [C:2] [TYPE Function]\n // @BRIEF Fetch Git statuses for multiple dashboards in one batch request.\n // @PRE dashboardIds is a non-empty array of numeric IDs.\n // @POST Returns a map of dashboard_id -> status payload (with NO_REPO for uninitialized).\n async getStatusesBatch(dashboardIds) {\n console.log(`[getStatusesBatch][Action] Fetching statuses for ${dashboardIds.length} dashboards`);\n return requestApi(`${API_BASE}/repositories/status/batch`, 'POST', {\n dashboard_ids: dashboardIds\n });\n },\n // #endregion getStatusesBatch\n\n // #region getDiff [C:2] [TYPE Function]\n // @BRIEF Fetch Git diff for a dashboard repository (staged or unstaged).\n // @PRE Repository path exists; envId required when ref is slug.\n // @POST Returns unified diff string.\n async getDiff(dashboardRef, filePath = null, staged = false, envId = null) {\n console.log(`[getDiff][Action] Fetching diff for dashboard ${dashboardRef} (file: ${filePath}, staged: ${staged})`);\n let endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/diff`;\n const params = new URLSearchParams();\n if (filePath) params.append('file_path', filePath);\n if (staged) params.append('staged', 'true');\n if (envId) params.append('env_id', String(envId));\n if (params.toString()) endpoint += `?${params.toString()}`;\n return requestApi(endpoint);\n },\n // #endregion getDiff\n\n // #region promote [C:2] [TYPE Function]\n // @BRIEF Promote changes between branches via MR or direct merge.\n // @PRE Dashboard repository initialized; from_branch and to_branch differ; envId required when ref is slug.\n // @POST Returns MR URL (MR mode) or merge status (direct mode).\n async promote(dashboardRef, payload, envId = null) {\n console.log(`[promote][Action] Promoting ${payload?.from_branch} -> ${payload?.to_branch} for dashboard ${dashboardRef} mode=${payload?.mode}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/promote', envId), 'POST', payload);\n }\n // #endregion promote\n};\n// #endregion gitService\n" + }, + { + "contract_id": "getConfigs", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 29, + "end_line": 38, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch all Git server configurations.", + "COMPLEXITY": 2, + "DATA_CONTRACT": "None -> Array", + "POST": "Returns list of GitServerConfig objects.", + "PRE": "User is authenticated (handled by ApiModule auth headers)." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getConfigs [C:2] [TYPE Function]\n // @BRIEF Fetch all Git server configurations.\n // @PRE User is authenticated (handled by ApiModule auth headers).\n // @POST Returns list of GitServerConfig objects.\n // @DATA_CONTRACT None -> Array\n async getConfigs() {\n console.log('[getConfigs][Action] Fetching Git configs');\n return requestApi(`${API_BASE}/config`);\n },\n // #endregion getConfigs\n" + }, + { + "contract_id": "createConfig", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 40, + "end_line": 49, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create a new Git server configuration.", + "COMPLEXITY": 2, + "DATA_CONTRACT": "Input(GitServerConfig) -> Output(GitServerConfig)", + "POST": "New config is persisted and returned.", + "PRE": "config object is valid with required fields." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region createConfig [C:2] [TYPE Function]\n // @BRIEF Create a new Git server configuration.\n // @PRE config object is valid with required fields.\n // @POST New config is persisted and returned.\n // @DATA_CONTRACT Input(GitServerConfig) -> Output(GitServerConfig)\n async createConfig(config) {\n console.log('[createConfig][Action] Creating Git config');\n return requestApi(`${API_BASE}/config`, 'POST', config);\n },\n // #endregion createConfig\n" + }, + { + "contract_id": "deleteConfig", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 51, + "end_line": 59, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Delete an existing Git server configuration.", + "COMPLEXITY": 2, + "POST": "Config is removed from the backend.", + "PRE": "configId exists in the backend." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region deleteConfig [C:2] [TYPE Function]\n // @BRIEF Delete an existing Git server configuration.\n // @PRE configId exists in the backend.\n // @POST Config is removed from the backend.\n async deleteConfig(configId) {\n console.log(`[deleteConfig][Action] Deleting Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'DELETE');\n },\n // #endregion deleteConfig\n" + }, + { + "contract_id": "updateConfig", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 61, + "end_line": 69, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Update an existing Git server configuration.", + "COMPLEXITY": 2, + "POST": "Config is updated and returned.", + "PRE": "configId exists and configData contains valid fields." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region updateConfig [C:2] [TYPE Function]\n // @BRIEF Update an existing Git server configuration.\n // @PRE configId exists and configData contains valid fields.\n // @POST Config is updated and returned.\n async updateConfig(configId, config) {\n console.log(`[updateConfig][Action] Updating Git config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}`, 'PUT', config);\n },\n // #endregion updateConfig\n" + }, + { + "contract_id": "testConnection", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 71, + "end_line": 80, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Test connection to a Git server with provided credentials.", + "COMPLEXITY": 2, + "DATA_CONTRACT": "Input(GitServerConfig) -> Output({status: string})", + "POST": "Returns connection status (success/failure).", + "PRE": "config contains valid URL and PAT." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region testConnection [C:2] [TYPE Function]\n // @BRIEF Test connection to a Git server with provided credentials.\n // @PRE config contains valid URL and PAT.\n // @POST Returns connection status (success/failure).\n // @DATA_CONTRACT Input(GitServerConfig) -> Output({status: string})\n async testConnection(config) {\n console.log('[testConnection][Action] Testing Git connection');\n return requestApi(`${API_BASE}/config/test`, 'POST', config);\n },\n // #endregion testConnection\n" + }, + { + "contract_id": "listGiteaRepositories", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 82, + "end_line": 90, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "List repositories on Gitea for a saved Git configuration.", + "COMPLEXITY": 2, + "POST": "Returns array of Gitea repository metadata.", + "PRE": "configId references a GITEA provider config." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region listGiteaRepositories [C:2] [TYPE Function]\n // @BRIEF List repositories on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA provider config.\n // @POST Returns array of Gitea repository metadata.\n async listGiteaRepositories(configId) {\n console.log(`[listGiteaRepositories][Action] Listing Gitea repositories for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`);\n },\n // #endregion listGiteaRepositories\n" + }, + { + "contract_id": "createGiteaRepository", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 92, + "end_line": 100, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create a repository on Gitea for a saved Git configuration.", + "COMPLEXITY": 2, + "POST": "Repository created on Gitea; returns created repo metadata.", + "PRE": "configId references a GITEA config; payload has non-empty name." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region createGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Create a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; payload has non-empty name.\n // @POST Repository created on Gitea; returns created repo metadata.\n async createGiteaRepository(configId, payload) {\n console.log(`[createGiteaRepository][Action] Creating Gitea repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos`, 'POST', payload);\n },\n // #endregion createGiteaRepository\n" + }, + { + "contract_id": "createRemoteRepository", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 102, + "end_line": 111, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create repository on remote provider selected by Git config (idempotent: returns existing on 409).", + "COMPLEXITY": 2, + "DATA_CONTRACT": "Input(configId, RemoteRepoCreatePayload) -> Output(RemoteRepoSchema)", + "POST": "Remote repository created (or existing returned); normalized payload returned.", + "PRE": "configId exists and points to supported provider; payload has non-empty name." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region createRemoteRepository [C:2] [TYPE Function]\n // @BRIEF Create repository on remote provider selected by Git config (idempotent: returns existing on 409).\n // @PRE configId exists and points to supported provider; payload has non-empty name.\n // @POST Remote repository created (or existing returned); normalized payload returned.\n // @DATA_CONTRACT Input(configId, RemoteRepoCreatePayload) -> Output(RemoteRepoSchema)\n async createRemoteRepository(configId, payload) {\n console.log(`[createRemoteRepository][Action] Creating remote repository ${payload?.name} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/repositories`, 'POST', payload);\n },\n // #endregion createRemoteRepository\n" + }, + { + "contract_id": "deleteGiteaRepository", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 113, + "end_line": 121, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Delete a repository on Gitea for a saved Git configuration.", + "COMPLEXITY": 2, + "POST": "Repository deleted on Gitea server.", + "PRE": "configId references a GITEA config; owner and repoName are non-empty." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region deleteGiteaRepository [C:2] [TYPE Function]\n // @BRIEF Delete a repository on Gitea for a saved Git configuration.\n // @PRE configId references a GITEA config; owner and repoName are non-empty.\n // @POST Repository deleted on Gitea server.\n async deleteGiteaRepository(configId, owner, repoName) {\n console.log(`[deleteGiteaRepository][Action] Deleting Gitea repository ${owner}/${repoName} for config ${configId}`);\n return requestApi(`${API_BASE}/config/${configId}/gitea/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repoName)}`, 'DELETE');\n },\n // #endregion deleteGiteaRepository\n" + }, + { + "contract_id": "initRepository", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 123, + "end_line": 136, + "tier": "TIER_2", + "complexity": 3, + "metadata": { + "BRIEF": "Initialize or clone a Git repository for a dashboard.", + "COMPLEXITY": 3, + "DATA_CONTRACT": "Input(dashboardRef, configId, remoteUrl, envId?) -> Output({status: string, message: string})", + "POST": "Repository initialized on the backend; GitRepository record created.", + "PRE": "dashboardRef is non-empty; configId and remoteUrl are valid; envId required when ref is slug." + }, + "relations": [ + { + "source_id": "initRepository", + "relation_type": "CALLS", + "target_id": "ApiModule.requestApi", + "target_ref": "[ApiModule.requestApi]" + } + ], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region initRepository [C:3] [TYPE Function]\n // @BRIEF Initialize or clone a Git repository for a dashboard.\n // @PRE dashboardRef is non-empty; configId and remoteUrl are valid; envId required when ref is slug.\n // @POST Repository initialized on the backend; GitRepository record created.\n // @DATA_CONTRACT Input(dashboardRef, configId, remoteUrl, envId?) -> Output({status: string, message: string})\n // @RELATION CALLS -> [ApiModule.requestApi]\n async initRepository(dashboardRef, configId, remoteUrl, envId = null) {\n console.log(`[initRepository][Action] Initializing repo for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/init', envId), 'POST', {\n config_id: configId,\n remote_url: remoteUrl\n });\n },\n // #endregion initRepository\n" + }, + { + "contract_id": "getRepositoryBinding", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 138, + "end_line": 146, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch repository binding metadata (config/provider) for a dashboard.", + "COMPLEXITY": 2, + "POST": "Returns provider, config_id, remote_url, local_path.", + "PRE": "Repository should be initialized for the dashboard." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getRepositoryBinding [C:2] [TYPE Function]\n // @BRIEF Fetch repository binding metadata (config/provider) for a dashboard.\n // @PRE Repository should be initialized for the dashboard.\n // @POST Returns provider, config_id, remote_url, local_path.\n async getRepositoryBinding(dashboardRef, envId = null) {\n console.log(`[getRepositoryBinding][Action] Fetching repository binding for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId));\n },\n // #endregion getRepositoryBinding\n" + }, + { + "contract_id": "getBranches", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 148, + "end_line": 156, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "List all branches for a dashboard's repository.", + "COMPLEXITY": 2, + "POST": "Returns array of BranchSchema objects.", + "PRE": "Repository must be initialized; envId required when dashboardRef is a slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getBranches [C:2] [TYPE Function]\n // @BRIEF List all branches for a dashboard's repository.\n // @PRE Repository must be initialized; envId required when dashboardRef is a slug.\n // @POST Returns array of BranchSchema objects.\n async getBranches(dashboardRef, envId = null) {\n console.log(`[getBranches][Action] Fetching branches for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId));\n },\n // #endregion getBranches\n" + }, + { + "contract_id": "createBranch", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 158, + "end_line": 169, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Create a new branch in the dashboard's repository.", + "COMPLEXITY": 2, + "POST": "New branch is created on the backend.", + "PRE": "Source branch exists; name is non-empty; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region createBranch [C:2] [TYPE Function]\n // @BRIEF Create a new branch in the dashboard's repository.\n // @PRE Source branch exists; name is non-empty; envId required when ref is slug.\n // @POST New branch is created on the backend.\n async createBranch(dashboardRef, name, fromBranch, envId = null) {\n console.log(`[createBranch][Action] Creating branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId), 'POST', {\n name,\n from_branch: fromBranch\n });\n },\n // #endregion createBranch\n" + }, + { + "contract_id": "checkoutBranch", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 171, + "end_line": 179, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Switch the repository to a different branch.", + "COMPLEXITY": 2, + "POST": "Repository HEAD is moved to the target branch.", + "PRE": "Target branch exists; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region checkoutBranch [C:2] [TYPE Function]\n // @BRIEF Switch the repository to a different branch.\n // @PRE Target branch exists; envId required when ref is slug.\n // @POST Repository HEAD is moved to the target branch.\n async checkoutBranch(dashboardRef, name, envId = null) {\n console.log(`[checkoutBranch][Action] Checking out branch ${name} for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/checkout', envId), 'POST', { name });\n },\n // #endregion checkoutBranch\n" + }, + { + "contract_id": "commit", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 181, + "end_line": 189, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Stage and commit changes to the repository.", + "COMPLEXITY": 2, + "POST": "Changes are committed to the current branch.", + "PRE": "message is non-empty; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region commit [C:2] [TYPE Function]\n // @BRIEF Stage and commit changes to the repository.\n // @PRE message is non-empty; envId required when ref is slug.\n // @POST Changes are committed to the current branch.\n async commit(dashboardRef, message, files, envId = null) {\n console.log(`[commit][Action] Committing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/commit', envId), 'POST', { message, files });\n },\n // #endregion commit\n" + }, + { + "contract_id": "push", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 191, + "end_line": 199, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Push local commits to the remote repository.", + "COMPLEXITY": 2, + "POST": "Remote is updated with local commits.", + "PRE": "Remote 'origin' is configured and accessible; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region push [C:2] [TYPE Function]\n // @BRIEF Push local commits to the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Remote is updated with local commits.\n async push(dashboardRef, envId = null) {\n console.log(`[push][Action] Pushing changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/push', envId), 'POST');\n },\n // #endregion push\n" + }, + { + "contract_id": "deleteRepository", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 201, + "end_line": 209, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Delete local repository binding and workspace for a dashboard.", + "COMPLEXITY": 2, + "POST": "Repository record and local folder are removed.", + "PRE": "dashboardRef resolves on backend; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region deleteRepository [C:2] [TYPE Function]\n // @BRIEF Delete local repository binding and workspace for a dashboard.\n // @PRE dashboardRef resolves on backend; envId required when ref is slug.\n // @POST Repository record and local folder are removed.\n async deleteRepository(dashboardRef, envId = null) {\n console.log(`[deleteRepository][Action] Deleting repository for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId), 'DELETE');\n },\n // #endregion deleteRepository\n" + }, + { + "contract_id": "pull", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 211, + "end_line": 219, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Pull changes from the remote repository.", + "COMPLEXITY": 2, + "POST": "Local repository is updated with remote changes.", + "PRE": "Remote 'origin' is configured and accessible; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region pull [C:2] [TYPE Function]\n // @BRIEF Pull changes from the remote repository.\n // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug.\n // @POST Local repository is updated with remote changes.\n async pull(dashboardRef, envId = null) {\n console.log(`[pull][Action] Pulling changes for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/pull', envId), 'POST');\n },\n // #endregion pull\n" + }, + { + "contract_id": "getMergeStatus", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 221, + "end_line": 229, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch unfinished-merge status for a repository.", + "COMPLEXITY": 2, + "POST": "Returns merge status payload with has_unfinished_merge flag.", + "PRE": "Repository must exist; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getMergeStatus [C:2] [TYPE Function]\n // @BRIEF Fetch unfinished-merge status for a repository.\n // @PRE Repository must exist; envId required when ref is slug.\n // @POST Returns merge status payload with has_unfinished_merge flag.\n async getMergeStatus(dashboardRef, envId = null) {\n console.log(`[getMergeStatus][Action] Fetching merge status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/status', envId));\n },\n // #endregion getMergeStatus\n" + }, + { + "contract_id": "getMergeConflicts", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 231, + "end_line": 239, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "List merge conflicts for a repository with unresolved merge.", + "COMPLEXITY": 2, + "POST": "Returns array of conflict file entries with mine/theirs previews.", + "PRE": "Unfinished merge is in progress; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getMergeConflicts [C:2] [TYPE Function]\n // @BRIEF List merge conflicts for a repository with unresolved merge.\n // @PRE Unfinished merge is in progress; envId required when ref is slug.\n // @POST Returns array of conflict file entries with mine/theirs previews.\n async getMergeConflicts(dashboardRef, envId = null) {\n console.log(`[getMergeConflicts][Action] Fetching merge conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/conflicts', envId));\n },\n // #endregion getMergeConflicts\n" + }, + { + "contract_id": "resolveMergeConflicts", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 241, + "end_line": 251, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Apply conflict resolution strategies and stage resolved files.", + "COMPLEXITY": 2, + "POST": "Conflicts are resolved and staged.", + "PRE": "resolutions array contains file_path and resolution entries; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region resolveMergeConflicts [C:2] [TYPE Function]\n // @BRIEF Apply conflict resolution strategies and stage resolved files.\n // @PRE resolutions array contains file_path and resolution entries; envId required when ref is slug.\n // @POST Conflicts are resolved and staged.\n async resolveMergeConflicts(dashboardRef, resolutions, envId = null) {\n console.log(`[resolveMergeConflicts][Action] Resolving ${Array.isArray(resolutions) ? resolutions.length : 0} conflicts for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/resolve', envId), 'POST', {\n resolutions: Array.isArray(resolutions) ? resolutions : []\n });\n },\n // #endregion resolveMergeConflicts\n" + }, + { + "contract_id": "abortMerge", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 253, + "end_line": 261, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Abort current unfinished merge.", + "COMPLEXITY": 2, + "POST": "Merge state is aborted or reported as absent.", + "PRE": "Repository exists; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region abortMerge [C:2] [TYPE Function]\n // @BRIEF Abort current unfinished merge.\n // @PRE Repository exists; envId required when ref is slug.\n // @POST Merge state is aborted or reported as absent.\n async abortMerge(dashboardRef, envId = null) {\n console.log(`[abortMerge][Action] Aborting merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/abort', envId), 'POST');\n },\n // #endregion abortMerge\n" + }, + { + "contract_id": "continueMerge", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 263, + "end_line": 273, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Finalize unfinished merge by creating a merge commit.", + "COMPLEXITY": 2, + "POST": "Merge commit is created.", + "PRE": "All conflicts are resolved; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region continueMerge [C:2] [TYPE Function]\n // @BRIEF Finalize unfinished merge by creating a merge commit.\n // @PRE All conflicts are resolved; envId required when ref is slug.\n // @POST Merge commit is created.\n async continueMerge(dashboardRef, message = '', envId = null) {\n console.log(`[continueMerge][Action] Continuing merge for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/continue', envId), 'POST', {\n message: String(message || '').trim() || null\n });\n },\n // #endregion continueMerge\n" + }, + { + "contract_id": "getEnvironments", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 275, + "end_line": 282, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch available deployment environments from Git config.", + "COMPLEXITY": 2, + "POST": "Returns list of environment objects." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getEnvironments [C:2] [TYPE Function]\n // @BRIEF Fetch available deployment environments from Git config.\n // @POST Returns list of environment objects.\n async getEnvironments() {\n console.log('[getEnvironments][Action] Fetching environments');\n return requestApi(`${API_BASE}/environments`);\n },\n // #endregion getEnvironments\n" + }, + { + "contract_id": "deploy", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 284, + "end_line": 294, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Deploy a dashboard to a target environment.", + "COMPLEXITY": 2, + "POST": "Dashboard is imported into target Superset instance.", + "PRE": "Environment must be active and accessible; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region deploy [C:2] [TYPE Function]\n // @BRIEF Deploy a dashboard to a target environment.\n // @PRE Environment must be active and accessible; envId required when ref is slug.\n // @POST Dashboard is imported into target Superset instance.\n async deploy(dashboardRef, environmentId, envId = null) {\n console.log(`[deploy][Action] Deploying dashboard ${dashboardRef} to environment ${environmentId}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/deploy', envId), 'POST', {\n environment_id: environmentId\n });\n },\n // #endregion deploy\n" + }, + { + "contract_id": "getHistory", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 296, + "end_line": 303, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch commit history for a dashboard repository.", + "COMPLEXITY": 2, + "POST": "Returns list of commits with author, date, message." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getHistory [C:2] [TYPE Function]\n // @BRIEF Fetch commit history for a dashboard repository.\n // @POST Returns list of commits with author, date, message.\n async getHistory(dashboardRef, limit = 50, envId = null) {\n console.log(`[getHistory][Action] Fetching history for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, `/history?limit=${limit}`, envId));\n },\n // #endregion getHistory\n" + }, + { + "contract_id": "sync", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 305, + "end_line": 317, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Synchronize local dashboard state with Git repository.", + "COMPLEXITY": 2, + "POST": "Dashboard state is synced to Git workspace." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region sync [C:2] [TYPE Function]\n // @BRIEF Synchronize local dashboard state with Git repository.\n // @POST Dashboard state is synced to Git workspace.\n async sync(dashboardRef, sourceEnvId = null, envId = null) {\n console.log(`[sync][Action] Syncing dashboard ${dashboardRef}`);\n const params = new URLSearchParams();\n if (sourceEnvId) params.append('source_env_id', String(sourceEnvId));\n if (envId) params.append('env_id', String(envId));\n const query = params.toString();\n const endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/sync${query ? `?${query}` : ''}`;\n return requestApi(endpoint, 'POST');\n },\n // #endregion sync\n" + }, + { + "contract_id": "getStatus", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 319, + "end_line": 327, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch current Git status for a dashboard repository (dirty files, branch info).", + "COMPLEXITY": 2, + "POST": "Returns status payload with is_dirty, staged_files, modified_files, current_branch.", + "PRE": "Repository path exists on disk; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getStatus [C:2] [TYPE Function]\n // @BRIEF Fetch current Git status for a dashboard repository (dirty files, branch info).\n // @PRE Repository path exists on disk; envId required when ref is slug.\n // @POST Returns status payload with is_dirty, staged_files, modified_files, current_branch.\n async getStatus(dashboardRef, envId = null) {\n console.log(`[getStatus][Action] Fetching status for dashboard ${dashboardRef}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/status', envId));\n },\n // #endregion getStatus\n" + }, + { + "contract_id": "getStatusesBatch", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 329, + "end_line": 339, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch Git statuses for multiple dashboards in one batch request.", + "COMPLEXITY": 2, + "POST": "Returns a map of dashboard_id -> status payload (with NO_REPO for uninitialized).", + "PRE": "dashboardIds is a non-empty array of numeric IDs." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getStatusesBatch [C:2] [TYPE Function]\n // @BRIEF Fetch Git statuses for multiple dashboards in one batch request.\n // @PRE dashboardIds is a non-empty array of numeric IDs.\n // @POST Returns a map of dashboard_id -> status payload (with NO_REPO for uninitialized).\n async getStatusesBatch(dashboardIds) {\n console.log(`[getStatusesBatch][Action] Fetching statuses for ${dashboardIds.length} dashboards`);\n return requestApi(`${API_BASE}/repositories/status/batch`, 'POST', {\n dashboard_ids: dashboardIds\n });\n },\n // #endregion getStatusesBatch\n" + }, + { + "contract_id": "getDiff", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 341, + "end_line": 355, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Fetch Git diff for a dashboard repository (staged or unstaged).", + "COMPLEXITY": 2, + "POST": "Returns unified diff string.", + "PRE": "Repository path exists; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region getDiff [C:2] [TYPE Function]\n // @BRIEF Fetch Git diff for a dashboard repository (staged or unstaged).\n // @PRE Repository path exists; envId required when ref is slug.\n // @POST Returns unified diff string.\n async getDiff(dashboardRef, filePath = null, staged = false, envId = null) {\n console.log(`[getDiff][Action] Fetching diff for dashboard ${dashboardRef} (file: ${filePath}, staged: ${staged})`);\n let endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/diff`;\n const params = new URLSearchParams();\n if (filePath) params.append('file_path', filePath);\n if (staged) params.append('staged', 'true');\n if (envId) params.append('env_id', String(envId));\n if (params.toString()) endpoint += `?${params.toString()}`;\n return requestApi(endpoint);\n },\n // #endregion getDiff\n" + }, + { + "contract_id": "promote", + "contract_type": "Function", + "file_path": "frontend/src/services/gitService.js", + "start_line": 357, + "end_line": 365, + "tier": "TIER_1", + "complexity": 2, + "metadata": { + "BRIEF": "Promote changes between branches via MR or direct merge.", + "COMPLEXITY": 2, + "POST": "Returns MR URL (MR mode) or merge status (direct mode).", + "PRE": "Dashboard repository initialized; from_branch and to_branch differ; envId required when ref is slug." + }, + "relations": [], + "schema_warnings": [], + "anchor_syntax": "region", + "tier_source": "AutoCalculated", + "body": " // #region promote [C:2] [TYPE Function]\n // @BRIEF Promote changes between branches via MR or direct merge.\n // @PRE Dashboard repository initialized; from_branch and to_branch differ; envId required when ref is slug.\n // @POST Returns MR URL (MR mode) or merge status (direct mode).\n async promote(dashboardRef, payload, envId = null) {\n console.log(`[promote][Action] Promoting ${payload?.from_branch} -> ${payload?.to_branch} for dashboard ${dashboardRef} mode=${payload?.mode}`);\n return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/promote', envId), 'POST', payload);\n }\n // #endregion promote\n" + }, { "contract_id": "StorageService", "contract_type": "Service", @@ -73523,6720 +75635,10142 @@ } ], "file_hashes": { - "venv/lib/python3.13/site-packages/pygments/lexers/_mql_builtins.py": 2376212048709413586, - "venv/lib/python3.13/site-packages/anyio/_core/_resources.py": 8463932838064724564, - "venv/lib/python3.13/site-packages/numpy/_core/overrides.pyi": 13121243505132110607, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/mypy.py": 823265492261272631, - "venv/bin/pip3": 13861749540792881808, - "venv/lib/python3.13/site-packages/websockets/legacy/framing.py": 12759022769700230409, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/requirements.py": 13215932786801020434, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/rule.py": 5318344538761246105, - "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/METADATA": 13695483537390128881, - "venv/lib/python3.13/site-packages/numpy/core/records.py": 12604652690721760437, - "venv/lib/python3.13/site-packages/numpy/random/_sfc64.cpython-313-x86_64-linux-gnu.so": 17186695607612591922, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_produces_warning.py": 750781117570375777, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_conversion.py": 7507083194555424923, - "venv/lib/python3.13/site-packages/numpy/_utils/_convertions.pyi": 362674842164060822, - "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/lib/_user_array_impl.pyi": 7171810177801103765, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/INSTALLER": 17282701611721059870, - "frontend/src/routes/datasets/DatasetPreview.svelte": 4250995999947659034, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/nested_schemas.py": 4114645644496880787, - "backend/src/core/task_manager/task_logger.py": 6134165406387688582, - "backend/src/api/routes/__tests__/test_tasks_logs.py": 13245318244727271907, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_conversion_utils.py": 1567199588622767277, - "venv/bin/pygmentize": 2166491742035772877, - "venv/lib/python3.13/site-packages/passlib/handlers/__init__.py": 3424087230285514388, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/__init__.py": 11808051681178127650, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg2cffi.py": 5997687240967250164, - "backend/src/api/routes/clean_release_v2.py": 7430240321470425220, - "backend/tests/test_core_scheduler.py": 2305397851769292578, - "venv/lib/python3.13/site-packages/pandas/io/formats/console.py": 10370334487585281127, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/nattype.pyi": 1830368009811266890, - "venv/lib/python3.13/site-packages/ecdsa/der.py": 9374566189581725372, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_timestamp_method.py": 11393911418463808195, - "venv/lib/python3.13/site-packages/PIL/report.py": 9428754440615681790, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_join.py": 1131792466825856990, - "venv/lib/python3.13/site-packages/jsonschema/__main__.py": 18136546137047911521, - "venv/lib/python3.13/site-packages/pandas/tests/tools/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_downcast.py": 10399746645741452200, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/util.py": 387985965709546512, - "venv/lib/python3.13/site-packages/PIL/PcxImagePlugin.py": 1691405132377495336, - "venv/lib/python3.13/site-packages/httpcore/_backends/mock.py": 6849131425727092784, - "backend/git_repos/remote/test-repo.git/objects/ed/0432f88f5f7d95b26ecde34345abe741dd9db2": 13426916511127204463, - "venv/lib/python3.13/site-packages/fastapi/security/oauth2.py": 1925394177931547776, - "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/METADATA": 2624107638694809013, - "venv/lib/python3.13/site-packages/gitdb/db/ref.py": 1176701624460337371, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_argsort.py": 7320661835159648143, - "venv/lib/python3.13/site-packages/pygments/lexers/_mapping.py": 12987629396101138833, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_arrow_compat.py": 17818294260710640443, - "frontend/src/lib/ui/Button.svelte": 14815370250842191735, - "venv/lib/python3.13/site-packages/pyasn1/codec/ber/decoder.py": 12653470212935324322, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_tz_localize.py": 18409231586451494605, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rename.py": 16148017223289654683, - "venv/lib/python3.13/site-packages/pandas/arrays/__init__.py": 10005095663840461954, - "frontend/src/lib/components/layout/Sidebar.svelte": 18409661059413656763, - "venv/lib/python3.13/site-packages/pandas/api/types/__init__.py": 3995030354191071797, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/__init__.py": 13331622784664204066, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_select_dtypes.py": 3530442956913622572, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_read_fwf.py": 13684564756628524738, - "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/jeepney/bindgen.py": 7094585345946943534, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/bar.py": 12859947592168238832, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_function.py": 14142346897145169685, - "venv/lib/python3.13/site-packages/cffi/vengine_gen.py": 6582900613549620556, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_ufunc.py": 3326502989311831856, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_rowcount.py": 6682800584070485197, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/instrumentation.py": 13198832283145198959, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pydantic_settings/exceptions.py": 18300876747412267999, - "venv/lib/python3.13/site-packages/PIL/_binary.py": 14039167720582222043, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/licenses/LICENSE": 3509878235770224233, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/WHEEL": 13232065379159720345, - "venv/lib/python3.13/site-packages/pydantic/main.py": 14086938579850319884, - "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/RECORD": 8201759541483070364, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/multiarray.pyi": 6368268452184570195, - "venv/lib/python3.13/site-packages/sqlalchemy/future/engine.py": 4639404437703898767, - "frontend/src/lib/toasts.js": 17626443524470260846, - "venv/lib/python3.13/site-packages/pydantic/decorator.py": 6984214881365537811, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_constructors.py": 5627819885594450614, - "venv/lib/python3.13/site-packages/pip/_internal/utils/filesystem.py": 7716285033598020316, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_astype.py": 11386658862732393123, - "venv/lib/python3.13/site-packages/pygments/styles/dracula.py": 12379322008538174078, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/types.py": 12298292195929126306, - "venv/lib/python3.13/site-packages/pygments/lexers/ptx.py": 4855144232064607995, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/database.py": 7111764828004587758, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_snap.py": 4515844385819802784, - "frontend/src/lib/ui/Input.svelte": 1114920008107220678, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/memmap.pyi": 2834143910417841603, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pop.py": 14885271225856187795, - "venv/lib/python3.13/site-packages/PIL/_webp.cpython-313-x86_64-linux-gnu.so": 11070012119632935103, - "backend/src/core/config_manager.py": 1668206562922192026, - "frontend/src/components/tasks/LogEntryRow.svelte": 7224781044020990429, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi": 3254633032236269842, - "venv/lib/python3.13/site-packages/numpy/lib/_scimath_impl.py": 14696841109142419143, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/unistring.py": 18037463865539157041, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi": 1065808244870331598, - "venv/lib/python3.13/site-packages/_pytest/mark/expression.py": 1821437025841201912, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_string.py": 9224234539232195189, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/logging.py": 2426447364230673649, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/array_like.py": 2778905818573625118, - "venv/lib/python3.13/site-packages/jeepney/tests/test_auth.py": 15125055415702968414, - "venv/lib/python3.13/site-packages/uvicorn/_subprocess.py": 13965754246493254447, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/contains.py": 3098087827310439993, - "venv/lib/python3.13/site-packages/h11/_version.py": 9334144031400715479, - "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/RECORD": 12598309574903741388, - "venv/lib/python3.13/site-packages/greenlet/tests/test_extension_interface.py": 11693583111513457974, - "venv/lib/python3.13/site-packages/numpy/__config__.pyi": 1422114139050700402, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_loongarch64_linux.h": 6566098590441297326, - "venv/lib/python3.13/site-packages/numpy/lib/scimath.py": 7616377937400918724, - "venv/lib/python3.13/site-packages/numpy/_expired_attrs_2_0.py": 8786558894094307341, - "venv/lib/python3.13/site-packages/pandas/util/version/__init__.py": 3844072588696074141, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/METADATA": 5045041742469375466, - "venv/lib/python3.13/site-packages/jsonschema/__init__.py": 6925762200139836824, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_empty.py": 6845813091876023610, - "venv/lib/python3.13/site-packages/cffi/_shimmed_dist_utils.py": 4824806157907607487, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py": 5728866271812501558, - "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/WHEEL": 7454950858448014158, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_multiplier.f": 13432803601367981068, - "venv/lib/python3.13/site-packages/sqlalchemy/event/registry.py": 2857989070743633709, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/httpcore/_sync/__init__.py": 7676937747094511752, - "venv/lib/python3.13/site-packages/pygments/styles/native.py": 4559566444883341527, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_any_index.py": 10800968419286329268, - "venv/lib/python3.13/site-packages/numpy/random/_pickle.py": 7774620933480975313, - "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/WHEEL": 12054782055241301457, - "venv/lib/python3.13/site-packages/pygments/lexers/praat.py": 54226477748516386, - "venv/lib/python3.13/site-packages/pygments/lexers/meson.py": 14659991367778746658, - "frontend/src/lib/components/dataset-review/CompiledSQLPreview.svelte": 1996807488169542658, - "frontend/build/_app/immutable/nodes/29.C8L9v-j-.js": 1676851498074311321, - "backend/src/api/routes/git/_repo_lifecycle_routes.py": 410621371876058173, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_indexing.py": 17106010337164216722, - "backend/tests/test_translate_scheduler_guard.py": 13396608843530344156, - "venv/lib/python3.13/site-packages/greenlet/PyGreenletUnswitchable.cpp": 3160733517193315684, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timezones.pyi": 17528421279543420867, - "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/WHEEL": 8600534672961461758, - "venv/lib/python3.13/site-packages/pygments/lexers/floscript.py": 944042220740663491, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-expm1.csv": 8710594949902856122, - "venv/lib/python3.13/site-packages/smmap/test/test_buf.py": 6910367739329016619, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/WHEEL": 13347410390513723930, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_pbkdf2.py": 4977067068389993374, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_index.py": 12015738970771703312, - "venv/lib/python3.13/site-packages/pandas/tests/base/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/utils.py": 3710235316419562274, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/licenses/LICENSE.rst": 5960743202700406649, - "venv/lib/python3.13/site-packages/pydantic/_internal/_decorators.py": 9928398334052202841, - "venv/lib/python3.13/site-packages/pip/_internal/utils/retry.py": 15244280495983216204, - "frontend/build/_app/immutable/chunks/Dcd-DQu-.js": 17770623202860803448, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_iceberg.py": 1726421917529457420, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_explode.py": 16195468192763502449, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_compression.py": 3167245427092658522, - "venv/lib/python3.13/site-packages/h11/_abnf.py": 10456996134895429201, - "venv/lib/python3.13/site-packages/pandas/core/arrays/_ranges.py": 2572903460327860111, - "venv/lib/python3.13/site-packages/secretstorage/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_invalid_arg.py": 610891871484326055, - "venv/lib/python3.13/site-packages/numpy/_core/strings.pyi": 1981676808027146409, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_common.py": 12064185052519470358, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html.tpl": 12550218314797699304, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/securetransport.py": 12104888897121018676, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/engines.py": 10876954465293959720, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py": 11425629729736599320, - "venv/lib/python3.13/site-packages/PIL/WalImageFile.py": 12442826195371137238, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py": 6109201994963211857, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/six.py": 1161259802604920635, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi": 1846673463183660140, - "venv/lib/python3.13/site-packages/pandas/__init__.py": 793698514004377486, - "venv/lib/python3.13/site-packages/PIL/SpiderImagePlugin.py": 12234762087257163606, - "venv/lib/python3.13/site-packages/PIL/GdImageFile.py": 16875784236394545058, - "venv/lib/python3.13/site-packages/numpy/lib/_index_tricks_impl.pyi": 5892973170789971535, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/errors.py": 10750605030539582738, - "venv/lib/python3.13/site-packages/numpy/lib/format.py": 14971167445246135440, - "venv/lib/python3.13/site-packages/PIL/PaletteFile.py": 4104323659569809769, - "venv/lib/python3.13/site-packages/pip/_vendor/certifi/__init__.py": 2833016678144975576, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_eng_formatting.py": 14768815444701392013, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/api.py": 12339139862411341381, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/sessions.py": 5400174351499383072, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/fetch.py": 13937019222549208796, - "venv/lib/python3.13/site-packages/pygments/lexers/graphics.py": 13783143864729682444, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming_py.py": 16133454512601432815, - "venv/lib/python3.13/site-packages/pygments/lexers/asm.py": 13861952972248758785, - "venv/lib/python3.13/site-packages/pygments/styles/sas.py": 12363791134941577382, - "venv/lib/python3.13/site-packages/pygments/lexers/wowtoc.py": 17527844575999013592, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_printing.py": 1901396869745313303, - "venv/lib/python3.13/site-packages/pygments/lexers/dsls.py": 11696359794961833087, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_sorting.py": 8944017570338511677, - "venv/lib/python3.13/site-packages/pygments/lexers/textfmts.py": 17438453283146671997, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_index_col.py": 17604191644943383567, - "venv/lib/python3.13/site-packages/pygments/lexers/berry.py": 4540479522141160472, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_is_full.py": 9577318758326279694, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/warnings.py": 2552021607611112605, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_chebyshev.py": 8054411443686791426, - "venv/lib/python3.13/site-packages/httpcore/_ssl.py": 6665087294869504820, - "venv/lib/python3.13/site-packages/_pytest/threadexception.py": 10464996327276961035, - "frontend/src/routes/translate/[id]/+page.svelte": 1911443262444004956, - "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_regression.py": 5652583095949741238, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libsasl2-883649fd.so.3.0.0": 13306917506408577991, - "backend/src/core/utils/superset_context_extractor/_pii.py": 15135596230141304567, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_take.py": 9847808489301498487, - "venv/lib/python3.13/site-packages/secretstorage/__init__.py": 4535964275649588672, - "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/_pytest/assertion/util.py": 16957445183087315124, - "venv/lib/python3.13/site-packages/pydantic/validate_call_decorator.py": 11130572937843915026, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_getlimits.py": 118041882543413669, - "venv/lib/python3.13/site-packages/pandas/core/window/doc.py": 4204367435727844696, - "backend/src/api/routes/assistant/_dispatch.py": 12376888449563411982, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_argparse.py": 11111699418217357084, - "venv/lib/python3.13/site-packages/apscheduler/util.py": 11440701924954413440, - "frontend/src/components/git/ConflictResolver.svelte": 12314421232300049275, - "backend/src/api/routes/dashboards/_helpers.py": 13624740316332136004, - "frontend/src/routes/datasets/review/ReviewWorkspaceHeader.svelte": 15302107925819930527, - "backend/src/services/clean_release/__tests__/test_compliance_orchestrator.py": 15537957042757255513, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_combine.py": 4446011286411407708, - "backend/src/core/auth/security.py": 11836436636390315707, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/nattype.cpython-313-x86_64-linux-gnu.so": 2311012065007769341, - "venv/lib/python3.13/site-packages/cffi/commontypes.py": 11198107299826138465, - "venv/lib/python3.13/site-packages/tzlocal/utils.py": 7893867974548929154, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_feather.py": 13613400750755530364, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/yaml.py": 17801117405950663611, - "venv/lib/python3.13/site-packages/typing_inspection/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/config.py": 1450073446492183677, - "venv/lib/python3.13/site-packages/rapidfuzz/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/greenlet/greenlet.h": 16216120538647882082, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/aead.py": 8740476942925346444, - "venv/lib/python3.13/site-packages/numpy/core/overrides.pyi": 1968648615494204783, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_dtype.py": 5336980126536664360, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/validation": 5398883285871046811, - "venv/lib/python3.13/site-packages/pandas/util/_test_decorators.py": 17930801441803090445, - "venv/lib/python3.13/site-packages/pandas/tests/extension/json/__init__.py": 7877061921210840955, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_asof.py": 8656532774394927388, - "venv/lib/python3.13/site-packages/pandas/core/groupby/categorical.py": 16588862198627920420, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_subclass.py": 12453252499544981915, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_iter.py": 9232021002336641851, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_range.py": 3544406211185340973, - "venv/lib/python3.13/site-packages/referencing/exceptions.py": 2535322334430110414, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge.py": 11366935134260232329, - "backend/src/schemas/profile.py": 3926676368643549433, - "venv/lib/python3.13/site-packages/requests/__init__.py": 2604491098990438229, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/operators.py": 2468046993343796128, - "backend/src/api/routes/plugins.py": 6640856303389338188, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sort_values.py": 12064896795288302730, - "backend/src/models/__init__.py": 13280325675752905975, - "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/_gen_files.py": 6273314671315377131, - "venv/lib/python3.13/site-packages/pandas/core/indexes/datetimes.py": 14331984919364185787, - "venv/lib/python3.13/site-packages/cryptography/hazmat/asn1/asn1.py": 8801155055979135092, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_datetimeindex.py": 14816894350435545024, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers.py": 4940305787631493030, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_groupby_dropna.py": 3620959914439334511, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/use_modules.f90": 3913612933340746297, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_hour.py": 14128508606361694814, - "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_xml.py": 6906547816798138000, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_constructors.py": 17219764538851313252, - "venv/bin/activate.csh": 14513616043256836238, - "frontend/src/lib/components/assistant/__tests__/assistant_first_message.integration.test.js": 7546622841909210622, - "backend/src/services/profile_service.py": 7050751066987031905, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/licenses/COPYING": 15270149301471737292, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_between.py": 337429135216881486, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/test_numba.py": 8250377774229977284, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/pandas/core/computation/eval.py": 3176226283265954028, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_constructors.py": 7466113171256856591, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/__init__.py": 237070345717942041, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ext.py": 8361831054662096695, - "venv/lib/python3.13/site-packages/pandas/core/arrays/interval.py": 16281221279220043867, - "venv/lib/python3.13/site-packages/pandas/_version_meson.py": 4875297137037630519, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/twodim_base.pyi": 3773329770170248877, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/hiworld.f90": 6321872653169140461, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_year.py": 1478857009124807836, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/_typing.py": 17598638528781632158, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_pyf_src.py": 12351476647369971852, - "venv/lib/python3.13/site-packages/pycparser/ply/ygen.py": 5520340773074632724, - "venv/lib/python3.13/site-packages/pygments/styles/friendly.py": 13799024964803741891, - "venv/lib/python3.13/site-packages/pygments/lexers/mojo.py": 8616283481592061285, - "frontend/src/lib/components/reports/__tests__/report_type_profiles.test.js": 8052627851850386760, - "venv/lib/python3.13/site-packages/gitdb/db/base.py": 3375449584942578385, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_pickle.py": 388513670243918273, - "venv/lib/python3.13/site-packages/anyio/_core/_tempfile.py": 230288423480899091, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_cut.py": 7800833253841657380, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_year.py": 17441853503700184299, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_truncate.py": 9623613657871046837, - "frontend/src/routes/datasets/[id]/+page.svelte": 7539252327680602221, - "backend/src/api/routes/dataset_review.py": 6955521302681155464, - "backend/src/plugins/translate/preview_executor.py": 11680052270975606699, - "venv/lib/python3.13/site-packages/fastapi/requests.py": 14587947416691824903, - "backend/git_repos/remote/test-repo.git/objects/5a/82ef700fef88b69cd480e4025283809496ee20": 7003383965314354150, - "venv/lib/python3.13/site-packages/numpy/f2py/capi_maps.py": 2490579175967301457, - "venv/lib/python3.13/site-packages/jeepney/tests/test_fds.py": 6257376331171761928, - "venv/lib/python3.13/site-packages/pygments/styles/lovelace.py": 15082819162722685616, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/WHEEL": 8600534672961461758, - "venv/lib/python3.13/site-packages/httpcore/_sync/http11.py": 5947339024588907032, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_indexing_slow.py": 12558235638488427077, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_head_tail.py": 13047338070883375426, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py": 1331438198531942242, - "venv/lib/python3.13/site-packages/pandas/io/parsers/c_parser_wrapper.py": 5841064965672872661, - "venv/lib/python3.13/site-packages/pydantic_core/_pydantic_core.cpython-313-x86_64-linux-gnu.so": 13917011878259810696, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/models.py": 9513172366009392193, - "venv/lib/python3.13/site-packages/passlib/exc.py": 15559705487889657091, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_period.py": 12593777226419608212, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_from_dummies.py": 5670811108950300761, - "frontend/build/_app/immutable/nodes/30.CRJJ7spc.js": 16603457266634306242, - "venv/lib/python3.13/site-packages/pyasn1/compat/__init__.py": 5902203086150636670, - "backend/src/services/__tests__/test_resource_service.py": 7247551330585718683, - "backend/src/plugins/translate/service_target_schema.py": 5277952452702772295, - "backend/git_repos/remote/test-repo.git/objects/38/0395343915d386a8d58774cc6c6677205065e8": 5481382229802988191, - "venv/lib/python3.13/site-packages/pydantic/v1/decorator.py": 6124748023704700724, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_numeric_only.py": 13610631681447961840, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/decl_base.py": 8678387511873412922, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libk5crypto-b1f99d5c.so.3.1": 10669523137596317954, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_compare.py": 171535659467902751, - "venv/lib/python3.13/site-packages/numpy/_expired_attrs_2_0.pyi": 1424133074692438241, - "frontend/build/_app/immutable/nodes/31.DV0Ccxlo.js": 16322558656544018129, - "venv/lib/python3.13/site-packages/jeepney/fds.py": 16573439672758641560, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_polynomial.pyi": 9134949577567498894, - "venv/lib/python3.13/site-packages/sqlalchemy/event/attr.py": 5971663429221923939, - "venv/lib/python3.13/site-packages/numpy/typing/__init__.py": 3608665862759745048, - "venv/lib/python3.13/site-packages/dateutil/tz/_factories.py": 7538654189286887518, - "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/RECORD": 15194367076254806710, - "venv/lib/python3.13/site-packages/pandas/io/formats/style.py": 13235403689320479165, - "venv/lib/python3.13/site-packages/rapidfuzz/_common_py.py": 15410157970973169427, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/tornado.py": 6491136785917169991, - "venv/lib/python3.13/site-packages/pyasn1/codec/ber/eoo.py": 5126566925877730303, - "venv/lib/python3.13/site-packages/numpy/typing/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/strings/__init__.pyi": 6213864891045042045, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/apscheduler/triggers/date.py": 9545774812177853725, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/plugin.py": 18006138132596504101, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_aix.h": 13316272821279308986, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/__init__.py": 7526309124863950484, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_analytics.py": 4510712334676848202, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_subclass.py": 11096337912872573314, - "venv/lib/python3.13/site-packages/apscheduler/executors/pool.py": 10344126569001032241, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/index_tricks.py": 10051261976498916957, - "venv/lib/python3.13/site-packages/PIL/_imagingcms.pyi": 12476347428820346383, - "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/WHEEL": 7454950858448014158, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/_cryptography_key.py": 388489172928969873, - "venv/lib/python3.13/site-packages/pygments/styles/pastie.py": 15784474766258831882, - "venv/lib/python3.13/site-packages/pygments/lexers/whiley.py": 218468511185731869, - "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/RECORD": 8971487317739420905, - "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/METADATA": 6656194161182818439, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi": 10548370574281981402, - "venv/lib/python3.13/site-packages/numpy/lib/stride_tricks.py": 548928042543500365, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/negative_bounds/issue_20853.f90": 3911644649277659333, - "venv/lib/python3.13/site-packages/pandas/core/computation/api.py": 17919983681396223380, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/pg_catalog.py": 15726448028057859831, - "venv/lib/python3.13/site-packages/PIL/CurImagePlugin.py": 17697303205012181529, - "venv/lib/python3.13/site-packages/_pytest/_io/terminalwriter.py": 16852767249156780980, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_csv.py": 571991535656576735, - "frontend/src/routes/datasets/review/[id]/+page.svelte": 3692143812318259790, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/properties.py": 5799883762127872919, - "venv/lib/python3.13/site-packages/pygments/lexers/verification.py": 16645885125604874183, - "venv/lib/python3.13/site-packages/fastapi/concurrency.py": 17937688838625807004, - "frontend/playwright-report/data/dcf41bdb395adaf70707a711375fd3b464dd384f.webm": 3819814233647777883, - "frontend/src/lib/stores.js": 8225317698711142177, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_quantile.py": 11966156706220948315, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_repr.py": 7552782621374439569, - "venv/lib/python3.13/site-packages/pandas/_testing/asserters.py": 272063856832951430, - "venv/lib/python3.13/site-packages/pygments/lexers/tnt.py": 4657130609241407766, - "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_numeric.py": 18037815278545274402, - "venv/lib/python3.13/site-packages/pandas/io/feather_format.py": 13242733585787888812, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_setitem.py": 15731267129055947469, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/structures.py": 2668010839316715865, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_categorical.py": 1329115818264527103, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh25337/use_data.f90": 14624074967635860696, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE": 17675192170670564526, - "venv/lib/python3.13/site-packages/_pytest/config/compat.py": 13175516717549204627, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_clipboard.py": 12674078499544938252, - "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_xport.py": 14080914637071212225, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/pymysql.py": 12923876736367229454, - "venv/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.py": 3515239440812977025, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/default_styles.py": 4469204219504675080, - "venv/lib/python3.13/site-packages/_pytest/warnings.py": 8633394774569709013, - "venv/lib/python3.13/site-packages/pandas/io/excel/_openpyxl.py": 6676451564208867775, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/provision.py": 13156893203444936309, - "venv/lib/python3.13/site-packages/httpcore/_exceptions.py": 6716590711697088732, - "venv/lib/python3.13/site-packages/python_multipart/decoders.py": 14252672585219598429, - "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py": 5132658725516243311, - "frontend/src/routes/admin/users/+page.svelte": 6187566471376083204, - "frontend/build/_app/immutable/nodes/21.D7rDHp05.js": 15812987310719032697, - "venv/lib/python3.13/site-packages/httpx/_main.py": 1812303705973265093, - "venv/lib/python3.13/site-packages/numpy/exceptions.py": 10981418339663118022, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_python_parser_only.py": 12231449578582108346, - "venv/lib/python3.13/site-packages/pygments/styles/gh_dark.py": 7717523746712391809, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_common.f": 5913807803369559749, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/LICENSE": 6774760218010069963, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_set_value.py": 17480833128128893268, - "venv/lib/python3.13/site-packages/pygments/lexers/_scheme_builtins.py": 5722444920479775453, - "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_byteswap.py": 5090287710338893350, - "backend/src/core/auth/__init__.py": 16435384828055133073, - "backend/src/services/dataset_review/clarification_engine.py": 16343602687904467259, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/claims.py": 14794441479740527265, - "venv/lib/python3.13/site-packages/_yaml/__init__.py": 3395829783751571350, - "venv/lib/python3.13/site-packages/pandas/core/shared_docs.py": 2173578869755325502, - "venv/lib/python3.13/site-packages/pandas/core/indexers/__init__.py": 1756397319068017890, - "backend/src/models/report.py": 12105030884508258995, - "venv/lib/python3.13/site-packages/httpcore/_async/__init__.py": 491192949420297153, - "venv/lib/python3.13/site-packages/_pytest/_version.py": 4890545974654141536, - "backend/src/plugins/translate/service_inline_correction.py": 11066393548140180037, - "venv/lib/python3.13/site-packages/pip/_internal/cli/spinners.py": 7664056305019151182, - "venv/lib/python3.13/site-packages/jeepney/io/tests/conftest.py": 13381752264278264218, - "venv/lib/python3.13/site-packages/numpy/dtypes.pyi": 6713822658171717369, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_reductions.py": 1713831062142840146, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/events.py": 7576713358952064464, - "venv/lib/python3.13/site-packages/numpy/ma/extras.pyi": 15292036493781556342, - "backend/src/core/utils/matching.py": 1700014874878218207, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/licenses/LICENSE": 5563356551734678258, - "venv/lib/python3.13/site-packages/numpy/_core/numerictypes.py": 6205675182996213576, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_memmap.py": 8709963808115492688, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/ccalendar.cpython-313-x86_64-linux-gnu.so": 11019871270094058038, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_julian_date.py": 850085757774959003, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/key_set.py": 8485970749081951741, - "venv/lib/python3.13/site-packages/pygments/lexers/rust.py": 8605690716125176329, - "frontend/src/lib/api/reports.js": 12520710039739782171, - "backend/src/core/encryption_key.py": 3858659138244440938, - "venv/lib/python3.13/site-packages/charset_normalizer/utils.py": 11724147997933584095, - "venv/lib/python3.13/site-packages/pandas/io/excel/_util.py": 6664989864423807444, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/traceback.py": 2535227583726271746, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/RECORD": 2963644632913976754, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_casting_floatingpoint_errors.py": 4301355720042319835, - "venv/lib/python3.13/site-packages/pandas/core/window/numba_.py": 1444123360986509769, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_integer/foo90.f90": 3492659529812762861, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_hermite_e.py": 8912795372542950449, - "venv/lib/python3.13/site-packages/greenlet/greenlet_compiler_compat.hpp": 465436185632243991, - "venv/lib/python3.13/site-packages/passlib/tests/test_ext_django.py": 3210697476292094384, - "venv/lib/python3.13/site-packages/pip/_vendor/distro/__init__.py": 11414161642984633362, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_conversion.pyi": 11580106670226366710, - "frontend/src/components/__tests__/task_log_viewer.test.js": 4344163242946147110, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_nanfunctions.py": 2356468092336024365, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23879.f90": 13174951794239860144, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/licenses/LICENSE": 12688029424398428498, - "venv/lib/python3.13/site-packages/pandas/_typing.py": 17795648994662434211, - "venv/lib/python3.13/site-packages/_pytest/main.py": 931018496411984909, - "venv/lib/python3.13/site-packages/numpy/polynomial/laguerre.pyi": 11310761736182213265, - "venv/lib/python3.13/site-packages/pandas/core/computation/engines.py": 1889823242704769952, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/rec.pyi": 14615751247243515028, - "frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js": 5982682724976240528, - "venv/lib/python3.13/site-packages/requests/compat.py": 5836590172733661320, - "backend/tests/test_resource_hubs.py": 1620639151885021568, - "venv/lib/python3.13/site-packages/authlib/oidc/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/size/foo.f90": 18067977329435720684, - "backend/src/core/task_manager/__tests__/test_task_logger.py": 2358230637213309608, - "venv/lib/python3.13/site-packages/fastapi/testclient.py": 2606236077497278662, - "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/utils.py": 617314300548081590, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_hashing.py": 11119284926039008503, - "venv/lib/python3.13/site-packages/starlette/_utils.py": 8384087194580626069, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_hashtable.py": 2620207240930665390, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_numpy.py": 222383250675686477, - "frontend/playwright-report/data/a19c216148b1612f8e11679d34071559b77021a0.png": 2734494351837969206, - "backend/src/core/utils/superset_context_extractor/_filters.py": 14230663187221307078, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/python3.npy": 4957143805477405905, - "backend/src/services/clean_release/__tests__/test_report_builder.py": 11856874434357958029, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/astype.py": 9925183787411796679, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/auth.py": 912521029864094489, - "venv/lib/python3.13/site-packages/apscheduler/executors/gevent.py": 17122637996105344344, - "venv/lib/python3.13/site-packages/pandas/tests/frame/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_fillna.py": 7349777469648334282, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_astype.py": 15768655715952923925, - "venv/lib/python3.13/site-packages/pygments/lexers/capnproto.py": 15713281507099411738, - "venv/lib/python3.13/site-packages/pygments/lexers/futhark.py": 10102535873433759899, - "backend/git_repos/remote/test-repo.git/info/exclude": 6403833611826357791, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_dtypes.py": 481191723198819568, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/conftest.py": 16571782049241458769, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/licenses/AUTHORS": 3558407083075395848, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD": 16740224557818847141, - "venv/lib/python3.13/site-packages/_pytest/debugging.py": 16135285365306979060, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_counting.py": 5628494712451120258, - "venv/lib/python3.13/site-packages/attr/filters.py": 14156141488477438777, - "venv/lib/python3.13/site-packages/uvicorn/_compat.py": 2593000889619875759, - "venv/lib/python3.13/site-packages/pandas/core/arrays/string_arrow.py": 16997970607998635570, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/socks.py": 17581293673028078134, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/__init__.py": 7316739139609490520, - "venv/lib/python3.13/site-packages/pygments/lexers/math.py": 1647133236144311250, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_cpp.cpython-313-x86_64-linux-gnu.so": 10263790384087091349, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_append_common.py": 2377351120083195530, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/smv.py": 8253688483040957894, - "frontend/src/routes/dashboards/[id]/components/DashboardLinkedResources.svelte": 2349700459673295788, - "frontend/src/components/git/GitReleasePanel.svelte": 11177244258160406730, - "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/accessors.py": 12743680296510533030, - "venv/lib/python3.13/site-packages/pandas/_libs/hashing.cpython-313-x86_64-linux-gnu.so": 16124435225170610034, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/reporters.py": 10760889726586439724, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_complex.py": 12963449957363121481, - "frontend/build/_app/immutable/chunks/ZvPSSfIA.js": 7807067580962053496, - "backend/git_repos/remote/test-repo.git/refs/heads/preprod": 2288780285329550368, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/WHEEL": 9788895026336324100, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/sync_openid.py": 5670082466989878756, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_hist_box_by.py": 16197297231683144299, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pip/_internal/commands/debug.py": 13528633965821062950, - "backend/git_repos/remote/test-repo.git/objects/e9/1109abe29d5228675fecd6fc38a097147c090d": 15716642455993350072, - "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft.py": 6142062990691556076, - "venv/lib/python3.13/site-packages/numpy/_core/lib/npy-pkg-config/npymath.ini": 1071371630695963467, - "venv/lib/python3.13/site-packages/charset_normalizer/__init__.py": 12412600648990392633, - "venv/lib/python3.13/site-packages/uvicorn/loops/auto.py": 13086005977087619545, - "venv/lib/python3.13/site-packages/starlette/background.py": 10232175205397808417, - "frontend/src/components/TaskRunner.svelte": 12776680477391915065, - "venv/lib/python3.13/site-packages/pandas/errors/__init__.py": 13444371880185740908, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/conftest.py": 12368472226536104037, - "frontend/static/favicon.svg": 6451919037497541980, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/poolmanager.py": 5071697837617938064, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64-testset-1.csv": 16078879475693341404, - "venv/lib/python3.13/site-packages/PIL/TiffTags.py": 8688883943071546469, - "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/_mysql_builtins.py": 16087227298679432006, - "venv/lib/python3.13/site-packages/dateutil/_common.py": 12492546559232079071, - "venv/lib/python3.13/site-packages/pandas/core/indexes/extension.py": 7193879749426425951, - "venv/lib/python3.13/site-packages/fastapi/templating.py": 10760135144345238340, - "venv/lib/python3.13/site-packages/pygments/lexers/fantom.py": 1986459352773446836, - "run_clean_tui.sh": 14305120550349644601, - "backend/src/plugins/translate/plugin.py": 15783602737040717978, - "venv/lib/python3.13/site-packages/pillow.libs/libwebp-d8b9687f.so.7.2.0": 116215608212382352, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/keywrap.py": 10424037418528425800, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py": 14995426099932276090, - "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_rolling.py": 11118160360072677569, - "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/assertion_session.py": 18109848200936213195, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_constructors.py": 16197656939536784142, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked_shared.py": 8453174300922339015, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/getitem.py": 556339939822508169, - "venv/lib/python3.13/site-packages/pygments/lexers/dylan.py": 16246299896150112270, - "backend/src/api/routes/git/_repo_routes.py": 12158952761025397291, - "venv/lib/python3.13/site-packages/sqlalchemy/event/__init__.py": 16182540084654095394, - "venv/lib/python3.13/site-packages/fastapi/_compat/may_v1.py": 9880083742927480960, - "venv/lib/python3.13/site-packages/pandas/_libs/hashtable.cpython-313-x86_64-linux-gnu.so": 16963890771704942465, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_math.h": 16701045088211015518, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/py.typed": 9796674040111366709, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/block_docstring/foo.f": 2489756567993745076, - "venv/lib/python3.13/site-packages/httpx/_content.py": 1301854837767395687, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/mapper.py": 16715864918034312591, - "backend/src/core/ws_log_handler.py": 16227392517834423362, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_period.py": 10309599277099605395, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/hist.py": 10928173425078493095, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/array_constructors.pyi": 4993066609272697419, - "venv/lib/python3.13/site-packages/numpy/matrixlib/__init__.py": 18402126171936308228, - "frontend/src/lib/components/assistant/__tests__/assistant_chat.integration.test.js": 18193433457755419816, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pygments/lexers/jmespath.py": 7426464251945393925, - "venv/lib/python3.13/site-packages/pytest/py.typed": 15130871412783076140, - "backend/src/api/routes/tasks.py": 13688847871690186483, - "venv/lib/python3.13/site-packages/pandas/core/computation/__init__.py": 15130871412783076140, - "backend/tests/services/clean_release/test_approval_service.py": 8273158625698254525, - "venv/lib/python3.13/site-packages/anyio/_backends/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/click/globals.py": 18353671282454331523, - "venv/lib/python3.13/site-packages/pydantic/v1/class_validators.py": 6471688474853407718, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_copy_deprecation.py": 16045426957636349035, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_duplicate_labels.py": 10663105616336167414, - "frontend/src/lib/components/translate/TermCorrectionPopup.svelte": 2290415616531498089, - "frontend/build/_app/immutable/chunks/Cr-9eaXZ.js": 55845366387923127, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_setops.py": 5208912445718807372, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_npy_units.py": 8966226962799105383, - "venv/lib/python3.13/site-packages/yaml/resolver.py": 6669674521776449098, - "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/licenses/LICENSE": 6965457853328313914, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval_tree.py": 15789443159423302291, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel.py": 17112989332785349705, - "venv/lib/python3.13/site-packages/PIL/GbrImagePlugin.py": 7681313333602257802, - "backend/src/api/routes/__tests__/test_dashboards.py": 3130878778754818679, - "frontend/postcss.config.js": 5714274776976071678, - "venv/lib/python3.13/site-packages/apscheduler/triggers/interval.py": 3964550092873794670, - "venv/lib/python3.13/site-packages/httpcore/_utils.py": 3255581092836273826, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi": 1626154870044880426, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_pickle.py": 6232650893735715362, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_constructors.py": 6440526981746306640, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarinherit.py": 15240535501243623986, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/METADATA": 3618776395694990076, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64-testset-2.csv": 5423145402839576695, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_formats.py": 2743326139283991615, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/macos.py": 17442393555211213147, - "venv/lib/python3.13/site-packages/cryptography/fernet.py": 10137792148038140630, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/licenses/LICENSE": 4672913476475760762, - "venv/lib/python3.13/site-packages/pandas/core/arrays/period.py": 11560984428402318984, - "venv/lib/python3.13/site-packages/httpcore/py.typed": 15130871412783076140, - "merge_kilo.py": 4282227344165325430, - "venv/lib/python3.13/site-packages/uvicorn/main.py": 5843333502356171120, - "venv/lib/python3.13/site-packages/numpy/testing/print_coercion_tables.py": 11758491058846790938, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/cache_key.py": 11118819065204404106, - "venv/lib/python3.13/site-packages/websockets/asyncio/messages.py": 6848925149930551457, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-exp.csv": 601782991752922510, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_api.py": 5813060676255093777, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arrayprint.py": 13335063050941743734, - "frontend/e2e/run-e2e.sh": 8106714116467101372, - "frontend/src/lib/components/ui/MultiSelect.svelte": 1475503303018683038, - "frontend/build/_app/immutable/chunks/KxePT7Ip.js": 8106111085962356816, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/validation": 13992741783834278677, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pipe.py": 7400355977900310233, - "venv/lib/python3.13/site-packages/sqlalchemy/connectors/asyncio.py": 4200928269459447593, - "venv/lib/python3.13/site-packages/pandas/compat/numpy/__init__.py": 1037113402100731082, - "venv/lib/python3.13/site-packages/starlette/middleware/wsgi.py": 12506262030845301606, - "venv/lib/python3.13/site-packages/rsa/common.py": 10921682819204792805, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.py": 17538029557373507617, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/selectable.py": 14646717349365560549, - "venv/lib/python3.13/site-packages/httpcore/_trace.py": 9576253018891841832, - "venv/lib/python3.13/site-packages/pygments/lexers/archetype.py": 8995143180482517233, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_round.py": 8336918400205461173, - "venv/lib/python3.13/site-packages/gitdb/fun.py": 55226330810782184, - "backend/src/core/task_manager/cleanup.py": 13007785075566443785, - "backend/src/plugins/translate/orchestrator_cancel.py": 673611364664367049, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_scalar_compat.py": 10534925655070162459, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_construction.py": 13953424340346625390, - "frontend/build/_app/immutable/chunks/BVk3Uk_6.js": 15316567731933897520, - "venv/lib/python3.13/site-packages/pandas/core/arrays/timedeltas.py": 7318851108932357510, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/resource_protector.py": 11539718751174980004, - "frontend/build/_app/immutable/chunks/C2DipQLT.js": 333538434576244034, - "venv/lib/python3.13/site-packages/numpy/f2py/use_rules.pyi": 18395688193449688360, - "venv/lib/python3.13/site-packages/pygments/lexers/typst.py": 8883289726601667104, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_expanding.py": 9047466276603454007, - "venv/lib/python3.13/site-packages/httpx/_multipart.py": 2181282475656908730, - "backend/src/core/utils/superset_context_extractor/_recovery.py": 11393453671559067169, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/hybrid.py": 5793056975404534989, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi": 3533739482029983817, - "venv/lib/python3.13/site-packages/passlib/crypto/_md4.py": 379335134151814809, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_concat.py": 3788461606817482165, - "venv/lib/python3.13/site-packages/PIL/IcoImagePlugin.py": 14483964191652228364, - "venv/lib/python3.13/site-packages/numpy/_core/printoptions.pyi": 16758392990920041462, - "venv/lib/python3.13/site-packages/numpy/core/_dtype.pyi": 15130871412783076140, - "venv/lib/python3.13/site-packages/cffi/_embedding.h": 9441285871823018603, - "venv/lib/python3.13/site-packages/attrs/exceptions.py": 2871247302586505373, - "venv/lib/python3.13/site-packages/pip/_internal/distributions/__init__.py": 1343779312297539596, - "venv/lib/python3.13/site-packages/_pytest/freeze_support.py": 494952714451267295, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arctan.csv": 4581185622290535488, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/region.py": 12579403230062395563, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_dtypes.py": 7550022036887594386, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/pygments/formatters/svg.py": 11686316844190214147, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ranges.py": 14549386056660231279, - "backend/src/services/clean_release/stages/base.py": 14966559035592717091, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_mem_policy.py": 13856626567322091253, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/conftest.py": 13388202260795998613, - "venv/lib/python3.13/site-packages/PIL/ImageColor.py": 17058618058554970738, - "frontend/src/routes/datasets/__tests__/bulk_actions.test.js": 8445672988319354987, - "venv/lib/python3.13/site-packages/pygments/lexers/monte.py": 15158829991357994573, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_dlpack.py": 7908102652282922952, - "venv/lib/python3.13/site-packages/pandas/core/arrays/numeric.py": 17834058423729918687, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/METADATA": 10220680536734745103, - "venv/lib/python3.13/site-packages/fastapi/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/passlib/ext/__init__.py": 15240312484046875203, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/async_app.py": 4329794049222609894, - "venv/lib/python3.13/site-packages/pandas/core/sorting.py": 689057022713741051, - "venv/lib/python3.13/site-packages/psycopg2/pool.py": 8855184580138330938, - "venv/lib/python3.13/site-packages/requests/status_codes.py": 17005213506461710202, - "venv/lib/python3.13/site-packages/jsonschema_specifications/tests/test_jsonschema_specifications.py": 12693210357718751894, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_functions.py": 2255133375699086300, - "venv/lib/python3.13/site-packages/numpy/_utils/_inspect.py": 7029935879540617057, - "venv/lib/python3.13/site-packages/cffi/pkgconfig.py": 16057517851163939571, - "venv/lib/python3.13/site-packages/numpy/lib/_arraypad_impl.py": 6348811074249398741, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/comparisons.pyi": 9338084426044982038, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_re.py": 1296579393600719224, - "venv/lib/python3.13/site-packages/pandas/compat/pickle_compat.py": 11073483984394766474, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/resolver.py": 9931394693284776391, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/protocol.py": 932296179250981622, - "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/test_decimal.py": 17811784255174057561, - "venv/lib/python3.13/site-packages/numpy/lib/_twodim_base_impl.py": 4154852745131464543, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_datetimes.py": 7889573945417063183, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_polynomial.pyi": 4266795948450921502, - "venv/lib/python3.13/site-packages/pygments/formatters/rtf.py": 5850574956253747036, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ndarray_misc.pyi": 16219573290116396099, - "venv/lib/python3.13/site-packages/pip/_internal/network/session.py": 293771075394156394, - "venv/lib/python3.13/site-packages/urllib3/_collections.py": 3440910792774742262, - "venv/lib/python3.13/site-packages/pygments/lexers/_asy_builtins.py": 1665617945818958781, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/random.pyi": 1808392097712315455, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/device_code.py": 6712610002227849281, - "venv/lib/python3.13/site-packages/numpy/random/_examples/numba/extending.py": 16515485226251040454, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_function_base.pyi": 2792940598392356268, - "venv/lib/python3.13/site-packages/numpy/_core/arrayprint.pyi": 84606125837677197, - "frontend/build/_app/immutable/nodes/0.C0VwB1oL.js": 4642091940107505621, - "backend/src/core/logger/__tests__/test_logger.py": 392344140757115787, - "backend/src/api/routes/translate/_dictionary_routes.py": 5668671879929670471, - "backend/tests/services/clean_release/test_compliance_execution_service.py": 9658943217379916757, - "backend/git_repos/remote/test-repo.git/objects/c5/b992984fe856bd81206304a881faa3087937cf": 2441623644664166468, - "backend/src/api/routes/__tests__/test_dataset_review_api.py": 9392418725327519178, - "venv/lib/python3.13/site-packages/pydantic/annotated_handlers.py": 10186120300163345360, - "venv/lib/python3.13/site-packages/referencing/tests/test_referencing_suite.py": 8875120876162738440, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/char.f90": 12203871998988759364, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/coercions.py": 5112358449376598662, - "frontend/build/_app/immutable/nodes/32.DeKrAKQE.js": 400351527217645716, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286_bc.pyf": 10893958728966010450, - "frontend/src/routes/dashboards/__tests__/dashboard-profile-override.integration.test.js": 4930404579577741926, - "backend/tests/test_translate_history.py": 4612852312641794586, - "backend/src/api/routes/assistant/_history.py": 7072732884181135864, - "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_function_base.py": 15241999259666702619, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/stride_tricks.pyi": 8257977532799807847, - "venv/lib/python3.13/site-packages/authlib/oidc/registration/claims.py": 4161520263207458028, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_interval.py": 2911379732293827726, - "venv/lib/python3.13/site-packages/pandas/tests/api/test_api.py": 13385690673368400635, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_setops.py": 14246225281428284850, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_month.py": 1613806538807726074, - "backend/src/services/notifications/__tests__/test_notification_service.py": 13027609991239837872, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi": 11733449165276720901, - "venv/lib/python3.13/site-packages/requests/sessions.py": 6936640856092320928, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sort_index.py": 14187428934500390688, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py": 7624316342162916928, - "venv/lib/python3.13/site-packages/numpy/_core/function_base.py": 5676611841071163854, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarbuffer.py": 16859789411010045795, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/assertsql.py": 4633484475514351889, - "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.cpython-313-x86_64-linux-gnu.so": 16604252871044637047, - "venv/lib/python3.13/site-packages/smmap/test/lib.py": 2924931247676024085, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/processors.py": 4817637175145012571, - "frontend/playwright-report/trace/manifest.webmanifest": 565917384317025203, - "frontend/src/lib/auth/store.ts": 5831215136783173107, - "backend/src/core/utils/superset_context_extractor/_base.py": 6349561308410782726, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/endpoint.py": 8519226897299461194, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_compression.py": 8577756801858495168, - "venv/lib/python3.13/site-packages/numpy/tests/test_reloading.py": 17532116685329953400, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/parameters.py": 12219404446503940066, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/test_algos.py": 11860014896449369497, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/METADATA": 9586902338916246692, - "venv/lib/python3.13/site-packages/numpy/random/__init__.pxd": 7355772669172093814, - "venv/lib/python3.13/site-packages/pycparser/c_ast.py": 5942107079119742, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/LICENSE": 6989336036499641077, - "venv/lib/python3.13/site-packages/authlib/oidc/core/errors.py": 18154419146257747681, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/METADATA": 4868544280955034757, - "venv/lib/python3.13/site-packages/urllib3/fields.py": 9503202008440141421, - "venv/bin/pyrsa-decrypt": 10929163076272054227, - "venv/lib/python3.13/site-packages/pydantic/v1/main.py": 213087273729911492, - "venv/lib/python3.13/site-packages/pandas/core/computation/parsing.py": 3084943521520476999, - "venv/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py": 14034239842770171660, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_numpy_array_equal.py": 2089426719574307767, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_is_unique.py": 3989602816674881215, - "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/RECORD": 13494296690334916257, - "backend/src/services/clean_release/stages/__init__.py": 2966227562547886302, - "venv/lib/python3.13/site-packages/itsdangerous/timed.py": 12571102606719555007, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_multi_thread.py": 5660352470978621226, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/METADATA": 10241403930811743893, - "frontend/playwright-report/trace/uiMode.C2Efnu2P.js": 2717171022864487300, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/RECORD": 8956798822782402202, - "frontend/src/lib/stores/__tests__/test_datasetReviewSession.js": 8646274524484627210, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_misc.pyi": 7544619194032232861, - "venv/lib/python3.13/site-packages/keyring/testing/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_defmatrix.py": 2982572083770917411, - "venv/lib/python3.13/site-packages/passlib/handlers/misc.py": 18255658377109333797, - "venv/lib/python3.13/site-packages/pandas/core/indexes/base.py": 496956059910401121, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/gevent.py": 4811840397266785551, - "venv/lib/python3.13/site-packages/pygments/lexers/javascript.py": 16869490851285457857, - "backend/src/plugins/translate/__tests__/test_dictionary_filter.py": 2426844436521732941, - "venv/lib/python3.13/site-packages/gitdb/test/test_base.py": 16305779366785148795, - "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/unrolled.py": 12651425412640834530, - "venv/lib/python3.13/site-packages/pygments/styles/perldoc.py": 4857683935715743356, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_interval.py": 8549680643865283913, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/value_attrspec/gh21665.f90": 11945588837236968550, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py3-objarr.npz": 12369168483236619421, - "backend/tests/test_security_audit_fixes.py": 10329229098676202553, - "venv/lib/python3.13/site-packages/pygments/formatters/bbcode.py": 8614391937525677922, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py": 15294662527620994511, - "frontend/src/routes/settings/settings-utils.js": 1940619437304867415, - "backend/alembic/versions/8dd0a93af539_drop_deprecated_source_language_column_.py": 3574830605384611294, - "backend/git_repos/remote/test-repo.git/hooks/update.sample": 8204581436750313444, - "venv/lib/python3.13/site-packages/anyio/pytest_plugin.py": 4165280709813718099, - "venv/lib/python3.13/site-packages/greenlet/tests/test_leaks.py": 1219835696230215605, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_types.py": 7175518113263603341, - "venv/lib/python3.13/site-packages/rapidfuzz/utils_py.py": 12341806772632276946, - "venv/lib/python3.13/site-packages/keyring/util/platform_.py": 16978095707950463638, - "venv/lib/python3.13/site-packages/numpy/lib/array_utils.pyi": 14646405559193539455, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_regression.py": 4611768764484593979, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/__init__.py": 10834852742917144496, - "venv/lib/python3.13/site-packages/PIL/BufrStubImagePlugin.py": 5520941821175895889, - "venv/lib/python3.13/site-packages/greenlet/PyGreenlet.cpp": 7360124705400993707, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/WHEEL": 18203500019759199992, - "venv/lib/python3.13/site-packages/passlib/handlers/fshp.py": 13298827601291507295, - "venv/lib/python3.13/site-packages/urllib3/_version.py": 839747992523118887, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/__init__.py": 15487893533770969571, - "venv/lib/python3.13/site-packages/PIL/ImagePalette.py": 9227837918026991107, - "venv/lib/python3.13/site-packages/pygments/lexers/pony.py": 2720635393743617141, - "backend/git_repos/remote/test-repo.git/refs/heads/feature/test": 7714224145564125988, - "venv/lib/python3.13/site-packages/httpcore/_backends/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/operators.f90": 5949265961908386974, - "venv/lib/python3.13/site-packages/pandas/core/tools/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_libs/window/aggregations.pyi": 6072607880689125113, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_arithmetic.py": 14858832264660410908, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/__init__.py": 6758781485387665020, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/base.py": 7110726987481713080, - "venv/lib/python3.13/site-packages/PIL/ImageFont.py": 15621336334706847865, - "backend/git_repos/remote/test-repo.git/objects/d5/0298a42699f39e4601c0aa23eab07bcb0703c7": 1966124163198751340, - "venv/lib/python3.13/site-packages/PIL/FontFile.py": 112053841436523305, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/__init__.py": 2246704695838251846, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/base.py": 3628510830969664111, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_join.py": 17508073052750406350, - "venv/lib/python3.13/site-packages/httpcore/_async/connection.py": 2155744160496556069, - "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/METADATA": 11439969143853665311, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/oct_key.py": 11504245602045724, - "backend/src/api/routes/translate/_preview_routes.py": 12316180738640292691, - "backend/src/services/__tests__/test_llm_plugin_persistence.py": 17921598588767566887, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/reporter.py": 6510864297510700136, - "backend/git_repos/remote/test-repo.git/HEAD": 12394318939628232491, - "venv/lib/python3.13/site-packages/websockets/sync/client.py": 10892557975919033983, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi": 16048852379621461316, - "venv/lib/python3.13/site-packages/_pytest/subtests.py": 14573790885130724739, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_deprecations.py": 16367195310156359251, - "venv/lib/python3.13/site-packages/ecdsa/numbertheory.py": 13538480862642502330, - "venv/lib/python3.13/site-packages/websockets/typing.py": 13268801935274185287, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh15035.f": 13126319439858352711, - "venv/lib/python3.13/site-packages/gitdb/util.py": 645937410168583692, - "venv/lib/python3.13/site-packages/pillow.libs/libjpeg-32d42e18.so.62.4.0": 11717944412021329207, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/groupby.py": 14661033005768429774, - "venv/lib/python3.13/site-packages/PIL/ImageMorph.py": 13861961228125789866, - "frontend/src/components/git/CommitHistory.svelte": 6419514228971332714, - "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_algorithms.py": 15219408648894515493, - "venv/lib/python3.13/site-packages/numpy/linalg/lapack_lite.cpython-313-x86_64-linux-gnu.so": 11074560904305737689, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_liboffsets.py": 14705822637347212540, - "frontend/src/lib/components/translate/__tests__/TargetSchemaHint.test.js": 8659643137288661057, - "venv/lib/python3.13/site-packages/anyio/to_interpreter.py": 8369454842687342401, - "venv/lib/python3.13/site-packages/smmap/mman.py": 9091562788592406032, - "venv/lib/python3.13/site-packages/numpy/testing/tests/test_utils.py": 5291132432383518704, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_meson.pyi": 2101854548535776875, - "venv/lib/python3.13/site-packages/passlib/tests/backports.py": 17098448557554464521, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/bazaar.py": 5630511062945201327, - "frontend/src/routes/reports/+page.svelte": 18404964858248487921, - "frontend/build/_app/immutable/entry/start.H6-5rz7_.js": 3502595655690893576, - "venv/lib/python3.13/site-packages/starlette/middleware/cors.py": 11384893784314197864, - "venv/lib/python3.13/site-packages/passlib/handlers/sun_md5_crypt.py": 1949993216707182407, - "venv/lib/python3.13/site-packages/numpy/ctypeslib/_ctypeslib.pyi": 10360538024015064036, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_color.py": 3700828402084646308, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_setitem.py": 10389770446834773837, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval.py": 1228451182688768814, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/decl_api.py": 5287018911951723034, - "frontend/build/_app/immutable/chunks/DtZqxm39.js": 18304620451061391646, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/resource_protector.py": 17080006010679257864, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_string.py": 10141066226714805009, - "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/containers.py": 5969831151685016772, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_pairwise.py": 2673370322448160842, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py": 11185011314498348980, - "backend/git_repos/remote/test-repo.git/hooks/sendemail-validate.sample": 8058833260784074657, - "frontend/src/lib/api/maintenance.js": 16247720324991780393, - "venv/lib/python3.13/site-packages/numpy/core/numeric.py": 17025007229779320230, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/resources.py": 11533706401259147051, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_ordered.py": 13827016781743929164, - "venv/lib/python3.13/site-packages/numpy/lib/_utils_impl.py": 13012775703413938576, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/base.py": 7855217087916771270, - "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/LICENSE": 16343563559291870811, - "venv/lib/python3.13/site-packages/websockets/datastructures.py": 5180442040351387281, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/revocation.py": 5718403706971163960, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/__init__.py": 8880435562116660648, - "venv/lib/python3.13/site-packages/cryptography/x509/certificate_transparency.py": 11337143186866439208, - "venv/lib/python3.13/site-packages/numpy/_typing/_scalars.py": 17701938912160369190, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_update_delete.py": 1317337950621091021, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/provision.py": 9472538482404392519, - "venv/lib/python3.13/site-packages/PIL/SgiImagePlugin.py": 6916200065790425497, - "venv/lib/python3.13/site-packages/pycparser/__init__.py": 16499940957411260458, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi": 16312114056447366970, - "venv/lib/python3.13/site-packages/referencing/_core.py": 14744795336121513230, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_timedelta_range.py": 15081095442418142820, - "venv/lib/python3.13/site-packages/urllib3/util/response.py": 6106698559175827207, - "venv/lib/python3.13/site-packages/rapidfuzz/fuzz.pyi": 7410507092040239447, - "venv/lib/python3.13/site-packages/pydantic/root_model.py": 20625057828723317, - "venv/lib/python3.13/site-packages/numpy/f2py/f2py2e.pyi": 14181518821845356636, - "venv/lib/python3.13/site-packages/pydantic/_internal/_utils.py": 10936299012115637790, - "venv/lib/python3.13/site-packages/pygments/styles/arduino.py": 4578385147314541233, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_meson.py": 5735043585893007971, - "venv/lib/python3.13/site-packages/pygments/lexers/fift.py": 7537570342576781911, - "frontend/src/lib/utils.js": 2362133402815996206, - "venv/bin/pip": 13861749540792881808, - "frontend/build/_app/immutable/nodes/39.CtRM7uMz.js": 15276559781688502962, - "backend/src/services/reports/__tests__/test_type_profiles.py": 8045459741015920365, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/dml.py": 6567627855667533645, - "backend/git_repos/remote/test-repo.git/objects/f7/6ee984d9d47c3cd0b362fdf60a47162bbc202d": 5351983130474596028, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/sync_app.py": 14788764260762890368, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/__init__.py": 15130871412783076140, - "frontend/e2e/tests/login.e2e.js": 9217667783118672119, - "backend/src/models/dataset_review_pkg/_clarification_models.py": 10650387708191883580, - "frontend/playwright-report/trace/index.CzXZzn5A.css": 10367596602957476705, - "backend/src/scripts/test_dataset_dashboard_relations.py": 11883199369340933897, - "venv/lib/python3.13/site-packages/jeepney/io/trio.py": 11859775321483330469, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/METADATA": 12747626683405487434, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_backend.py": 17793139799410518847, - "venv/lib/python3.13/site-packages/numpy/matlib.py": 112839038090033740, - "venv/lib/python3.13/site-packages/uvicorn/protocols/http/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/text.py": 10572727755736597715, - "frontend/src/lib/i18n/index.ts": 14616557360624297847, - "venv/lib/python3.13/site-packages/pip/_internal/locations/__init__.py": 8147012724727395488, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_values.py": 8372572954663628844, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/dtype.pyi": 12178008080078679769, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_function.py": 13492077564015386528, - "backend/src/plugins/translate/_text_cleaner.py": 13161219043687449729, - "venv/lib/python3.13/site-packages/pygments/lexers/pddl.py": 9256112535059995841, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log.csv": 221209423454319618, - "venv/lib/python3.13/site-packages/pyasn1/type/constraint.py": 16776615503418773283, - "venv/lib/python3.13/site-packages/websockets/legacy/http.py": 16266924390281399720, - "venv/lib/python3.13/site-packages/authlib/oauth1/errors.py": 1154126353335030046, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/mt19937-testset-2.csv": 14641856424618845798, - "venv/lib/python3.13/site-packages/sqlalchemy/schema.py": 16029542421991709659, - "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/_libs/testing.cpython-313-x86_64-linux-gnu.so": 16758333404587340103, - "venv/lib/python3.13/site-packages/pydantic/mypy.py": 10034028441785588819, - "venv/lib/python3.13/site-packages/pandas/tests/test_optional_dependency.py": 7930709646653025355, - "venv/lib/python3.13/site-packages/jose/backends/cryptography_backend.py": 2875270748627611635, - "venv/lib/python3.13/site-packages/numpy/polynomial/_polybase.py": 893743087939984792, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_period_index.py": 6634414375581820058, - "venv/lib/python3.13/site-packages/authlib/integrations/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/__init__.py": 4265012785873472600, - "venv/lib/python3.13/site-packages/sqlalchemy/events.py": 9329355486544822483, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pytest_asyncio/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/RECORD": 5612689057373270213, - "venv/lib/python3.13/site-packages/pygments/lexers/webassembly.py": 17811970490091406867, - "venv/lib/python3.13/site-packages/more_itertools/__init__.py": 9858612105173082060, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/requests.py": 14847842002253212098, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/dtype.pyi": 465999539608816848, - "frontend/src/lib/ui/PageHeader.svelte": 16740944781208407079, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_hist_method.py": 2109257663592928, - "venv/lib/python3.13/site-packages/numpy/random/_philox.pyi": 7503018432880404291, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_abstract_interface.py": 17625870734108222276, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_decimal.py": 3515468590005709183, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/__init__.py": 9884041726796476720, - "venv/lib/python3.13/site-packages/numpy/lib/_npyio_impl.py": 2215312866861772848, - "frontend/src/lib/stores/__tests__/mocks/environment.js": 3065694655373335793, - "venv/lib/python3.13/site-packages/pyasn1/debug.py": 6305633719847955310, - "venv/lib/python3.13/site-packages/fastapi/dependencies/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pygments/lexers/sophia.py": 15971500155124949058, - "venv/lib/python3.13/site-packages/pandas/io/formats/style_render.py": 13586834368514801953, - "backend/tests/services/clean_release/test_demo_mode_isolation.py": 15017454272480710246, - "backend/git_repos/remote/test-repo.git/objects/99/38d17c3f4199e53e4d4ebc253fe9c840caa505": 8414792171590415839, - "venv/lib/python3.13/site-packages/authlib/oidc/core/util.py": 5364455058429522633, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/parameters.py": 5104015814292812973, - "venv/lib/python3.13/site-packages/numpy/_typing/_nbit.py": 15498810174380798405, - "venv/lib/python3.13/site-packages/pydantic/v1/config.py": 12050640083719340958, - "venv/lib/python3.13/site-packages/ecdsa/test_ecdsa.py": 17595025859105321562, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.pyx": 11739218099400096619, - "frontend/src/routes/dashboards/health/__tests__/health_page.integration.test.js": 7606382627471479368, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/module_data_docstring.f90": 18245403117623015312, - "backend/src/models/__tests__/test_models.py": 7136192055672203219, - "venv/lib/python3.13/site-packages/pydantic/_internal/_core_utils.py": 13248004771466837645, - "venv/lib/python3.13/site-packages/numpy/polynomial/polynomial.pyi": 9935587108964614958, - "venv/lib/python3.13/site-packages/pip/_internal/locations/_sysconfig.py": 4773855595767526182, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_map.py": 10769974470610467636, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_indexing.py": 9988098331562906950, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/style.py": 15214295655795348821, - "frontend/build/_app/immutable/nodes/19.CoCKLtZL.js": 4766250160488499555, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_numeric.py": 5627177940393829333, - "venv/lib/python3.13/site-packages/attrs/__init__.pyi": 14353885498883901855, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/__main__.py": 6480933938145689964, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_pad.pyi": 14755435694146003896, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_dict.py": 16252265723192124609, - "backend/src/plugins/translate/preview_resolve_provider.py": 7349483761713339246, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_multi.py": 4612816468258071810, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_repeat.py": 18394463352314692642, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_logical.py": 6818185860296232476, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_searchsorted.py": 11161416745923343741, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/signals.py": 13677199634497673845, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_args_and_kwargs.py": 3381939712123764154, - "venv/lib/python3.13/site-packages/pycparser/c_parser.py": 3954138286651284327, - "venv/lib/python3.13/site-packages/websockets/asyncio/client.py": 5694225754072131767, - "venv/lib/python3.13/site-packages/gitdb/const.py": 14122142034887286559, - "venv/lib/python3.13/site-packages/pip/_internal/utils/subprocess.py": 3095012838116670328, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/_mapping.py": 17519715342700184302, - "venv/lib/python3.13/site-packages/sqlalchemy/inspection.py": 8563914460959280101, - "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE": 3996324383113221529, - "venv/lib/python3.13/site-packages/uvicorn/supervisors/statreload.py": 5018382301336802445, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/models.py": 3567900447243180991, - "venv/lib/python3.13/site-packages/typing_inspection/introspection.py": 13916695705179237047, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/ansi.py": 948249091929588017, - "venv/lib/python3.13/site-packages/passlib/handlers/phpass.py": 16489430001449160264, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_latex.py": 2628895559914914693, - "frontend/vitest.config.js": 4756170101280085905, - "venv/lib/python3.13/site-packages/pygments/lexers/objective.py": 10966124906622044512, - "venv/lib/python3.13/site-packages/attr/__init__.py": 14436902698244718082, - "venv/lib/python3.13/site-packages/PIL/MicImagePlugin.py": 13540523615822507963, - "backend/src/services/auth_service.py": 5948958621485759282, - "venv/lib/python3.13/site-packages/numpy/fft/_helper.py": 15906444100774706395, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/endpoints.py": 18334891787808122725, - "frontend/tests/maintenance-api.test.ts": 10196278218740408254, - "backend/tests/test_maintenance_service.py": 15566750462318533004, - "backend/git_repos/remote/test-repo.git/config": 14478893374498894766, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/linalg.pyi": 7217817172953767893, - "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.pyi": 14150710436003340771, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_finfo.py": 17174674209412768422, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/signals.py": 10390443713463805090, - "venv/lib/python3.13/site-packages/PIL/_imaging.pyi": 17119084207765761921, - "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/extension_types.py": 1856757457657310231, - "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/pygments/lexers/jslt.py": 11805394130669644345, - "frontend/src/routes/datasets/__tests__/DatasetList.test.js": 10189122239208504978, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_pickle.py": 4216445955812104014, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/meson.build.template": 9935732744553086652, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_io.py": 4199750143323741326, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_reductions.py": 3227705565578016389, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/sqlalchemy.py": 811968833735951956, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/rec.pyi": 9140655366667421698, - "venv/lib/python3.13/site-packages/pandas/core/indexes/api.py": 13750417165301467381, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ndarraytypes.h": 6765088137325865789, - "venv/lib/python3.13/site-packages/sqlalchemy/util/preloaded.py": 3719702436309355562, - "venv/lib/python3.13/site-packages/_pytest/skipping.py": 10561585274103209115, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/groupby.py": 12749730954888633240, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_freq_code.py": 13758353172962109140, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py": 9559295461619813890, - "venv/lib/python3.13/site-packages/pydantic/_internal/_core_metadata.py": 5704137311404303574, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/indexable.py": 4131796922597075758, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/cymysql.py": 5570881524647789741, - "frontend/src/services/storageService.js": 9489915460172592752, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_set_value.py": 4166411740676564820, - "venv/lib/python3.13/site-packages/pydantic/v1/validators.py": 1060954771151908883, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_parse_dates.py": 7597935994945336408, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel.py": 7728646523045538484, - "venv/lib/python3.13/site-packages/jose/backends/_asn1.py": 14123487576864105793, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_contains.py": 5273759677032634868, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/resource_protector.py": 14354891358060085360, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/__init__.py": 293004106962245584, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING": 3474104874623144155, - "frontend/src/lib/components/dataset-review/ValidationFindingsPanel.svelte": 6548767763019176627, - "venv/lib/python3.13/site-packages/sqlalchemy/pool/events.py": 13473858896579666058, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_modules.py": 16835987029123241300, - "venv/lib/python3.13/site-packages/pygments/lexers/qlik.py": 3881663935630350152, - "venv/lib/python3.13/site-packages/fastapi/background.py": 16533963020573865222, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_pickle.py": 8705060420848529055, - "venv/lib/python3.13/site-packages/pygments/lexers/jsonnet.py": 1314044008440065525, - "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/RECORD": 12015288851076448205, - "venv/lib/python3.13/site-packages/numpy/exceptions.pyi": 13942486291715303235, - "venv/lib/python3.13/site-packages/pygments/lexers/ride.py": 14096748896451437594, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_fileno.py": 15541504502174047167, - "venv/lib/python3.13/site-packages/yaml/nodes.py": 3463622922914760653, - "frontend/src/routes/migration/+page.svelte": 10701023521907757906, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_symbolic.py": 8093576026032854125, - "venv/lib/python3.13/site-packages/passlib/utils/binary.py": 13123975436674239306, - "venv/lib/python3.13/site-packages/pyasn1/type/char.py": 16518487114777185541, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_constructors.py": 6515602441449955627, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/sync.py": 6189260178302531376, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_readers.py": 2136472634307645842, - "venv/lib/python3.13/site-packages/numpy/_core/lib/npy-pkg-config/mlib.ini": 16151597765994697599, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/request.py": 10492090878715126550, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi": 9294219058621261971, - "venv/lib/python3.13/site-packages/fastapi/exception_handlers.py": 9907950997607808699, - "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/__init__.py": 5896924546560667519, - "venv/lib/python3.13/site-packages/pandas/tests/extension/json/array.py": 7437107031079833232, - "venv/lib/python3.13/site-packages/pygments/lexers/c_like.py": 13004061780700827047, - "venv/lib/python3.13/site-packages/pygments/lexers/yara.py": 17510792615476493957, - "frontend/build/_app/immutable/nodes/23.y3ghKhH-.js": 13434006313990484006, - "venv/lib/python3.13/site-packages/pandas/_libs/internals.pyi": 11662356720550765508, - "venv/lib/python3.13/site-packages/_cffi_backend.cpython-313-x86_64-linux-gnu.so": 829323374625147265, - "venv/lib/python3.13/site-packages/numpy/tests/test_numpy_config.py": 3636377988901907424, - "venv/lib/python3.13/site-packages/pygments/lexers/email.py": 4355246279485460399, - "venv/lib/python3.13/site-packages/PIL/_avif.pyi": 18222325750818585549, - "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/LICENSE": 6581019367004699816, - "venv/lib/python3.13/site-packages/numpy/ctypeslib/__init__.py": 2401931196871484449, - "venv/lib/python3.13/site-packages/pygments/lexers/ecl.py": 12886695201994337568, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_string.py": 15542851215119662814, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_federal.py": 16758212916399857971, - "venv/lib/python3.13/site-packages/anyio/abc/_subprocesses.py": 4297459042599291531, - "backend/src/core/superset_client/_dashboards_crud.py": 8682388093872211883, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/npyio.pyi": 15811156298637131744, - "venv/lib/python3.13/site-packages/ecdsa/test_ecdh.py": 3338834550392548171, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/filesize.py": 13234856188049714485, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_searchsorted.py": 11208047646304753715, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/shared.py": 1162754506656505196, - "frontend/src/services/taskService.js": 11368052191249479533, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arccosh.csv": 5882025767947638305, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rename_axis.py": 12432900682994622455, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_extract.py": 14547819021277949280, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/strategies.py": 14007486769065345085, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/METADATA": 15658158392301945427, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/__init__.py": 14481526616887213120, - "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/oauth1_client.py": 3129955464287331242, - "venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py": 7343380095251236503, - "backend/src/plugins/translate/dictionary_correction.py": 18051915404774774954, - "venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py": 13206297306768491360, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein.pyi": 12925006572914814268, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/_pytest/assertion/truncate.py": 14000392306994773741, - "venv/lib/python3.13/site-packages/pydantic/utils.py": 1533455264689378477, - "venv/lib/python3.13/site-packages/pandas/tests/construction/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_read_errors.py": 4559483361564472117, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/connectionpool.py": 10453724680327835821, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f77comments.f": 4801926170672147659, - "venv/lib/python3.13/site-packages/keyring/cli.py": 10996746519742056101, - "venv/lib/python3.13/site-packages/pygments/styles/inkpot.py": 10516710471319090846, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_block_docstring.py": 18146459246837890489, - "backend/src/core/superset_client/_databases.py": 16562767538012813426, - "venv/lib/python3.13/site-packages/numpy/_core/numerictypes.pyi": 12144531601504755948, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_endian.h": 2761502363895204652, - "venv/lib/python3.13/site-packages/ecdsa/util.py": 10543788809724099209, - "venv/lib/python3.13/site-packages/websockets/legacy/server.py": 5390090919193784186, - "venv/lib/python3.13/site-packages/pip/_internal/utils/temp_dir.py": 8657533190026387896, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_legend.py": 13094583566764796297, - "frontend/tests/maintenance.test.ts": 18128393571681331195, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_mask.py": 5451866071307236899, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_numeric.py": 9383693732009547935, - "venv/lib/python3.13/site-packages/numpy/lib/_polynomial_impl.pyi": 2042169688753984918, - "venv/lib/python3.13/site-packages/pydantic/parse.py": 13750341403702794392, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_string_array.py": 8260883866404398980, - "venv/lib/python3.13/site-packages/numpy/_core/_simd.cpython-313-x86_64-linux-gnu.so": 12609666221355091416, - "venv/lib/python3.13/site-packages/dotenv/version.py": 13508433229287636267, - "run.sh": 16549488891429944178, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/status_codes.py": 17005213506461710202, - "venv/lib/python3.13/site-packages/numpy/f2py/__init__.py": 7470157159992827389, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval_range.py": 9900908262700749861, - "venv/lib/python3.13/site-packages/click/_compat.py": 14451519072991457993, - "venv/lib/python3.13/site-packages/numpy/tests/test_scripts.py": 5790352482583964348, - "venv/lib/python3.13/site-packages/numpy.libs/libscipy_openblas64_-096271d3.so": 14338208504131470036, - "venv/lib/python3.13/site-packages/click/termui.py": 7022374827798605437, - "venv/lib/python3.13/site-packages/itsdangerous/url_safe.py": 13454753900702274266, - "venv/lib/python3.13/site-packages/greenlet/greenlet_slp_switch.hpp": 1694714764745718414, - "venv/lib/python3.13/site-packages/tzlocal/windows_tz.py": 11696765495002954868, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py": 1437580234680265326, - "venv/lib/python3.13/site-packages/jeepney/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_libs/hashtable.pyi": 15034917167424979097, - "venv/lib/python3.13/site-packages/pandas/core/internals/ops.py": 4740509262379451243, - "venv/lib/python3.13/site-packages/greenlet/tests/test_greenlet_trash.py": 6191655521667576604, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_searchsorted.py": 12074107109575676897, - "venv/lib/python3.13/site-packages/cffi/_cffi_errors.h": 1479575326813300292, - "venv/lib/python3.13/site-packages/pandas/_libs/properties.cpython-313-x86_64-linux-gnu.so": 7092136701092358552, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/common.py": 11384497819737275399, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_to_xarray.py": 15341013524814290960, - "venv/lib/python3.13/site-packages/pandas/io/sql.py": 12592024569011796790, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/_typing.py": 10524021526716767489, - "venv/lib/python3.13/site-packages/PIL/GimpGradientFile.py": 9777026720028891154, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_iteration.py": 2118501258411211851, - "backend/src/api/routes/dashboards/_schemas.py": 4116381929361209080, - "venv/lib/python3.13/site-packages/pip/_internal/utils/egg_link.py": 18211947508793805393, - "venv/lib/python3.13/site-packages/numpy/dtypes.py": 14128421398870718692, - "venv/lib/python3.13/site-packages/PIL/WmfImagePlugin.py": 15685062825106444247, - "venv/lib/python3.13/site-packages/numpy/_core/_umath_tests.pyi": 4587511199710546030, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_conversion.py": 12184280074522274780, - "venv/lib/python3.13/site-packages/pygments/lexers/foxpro.py": 14032656072384708293, - "venv/lib/python3.13/site-packages/pygments/styles/igor.py": 2291640843781128270, - "backend/src/models/api_key.py": 4327024700622965951, - "venv/lib/python3.13/site-packages/pandas/io/iceberg.py": 13137128885014736233, - "venv/lib/python3.13/site-packages/PIL/_imagingtk.pyi": 18222325750818585549, - "frontend/src/routes/settings/git/__tests__/git_settings_page.ux.test.js": 3774268544046391936, - "backend/git_repos/remote/test-repo.git/objects/93/9cc583a18267406014c57617ccb557569f6aaf": 5474754694741999746, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/__init__.py": 15130871412783076140, - "frontend/src/app.css": 3020720639702954139, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/LICENSE": 14599279238716790189, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/string.tpl": 15796203549130590784, - "venv/lib/python3.13/site-packages/pyasn1/type/tag.py": 13912273274509186651, - "venv/lib/python3.13/site-packages/pandas/_libs/groupby.pyi": 6154952803757623626, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/__init__.py": 5027355874704300832, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/cx_oracle.py": 10093932131797570986, - "venv/lib/python3.13/site-packages/passlib/tests/test_utils_pbkdf2.py": 17016810698578473773, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_validate.py": 2133732492454460539, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/kind/foo.f90": 1367964042730902899, - "venv/lib/python3.13/site-packages/pandas/core/computation/pytables.py": 16326122536715961388, - "venv/lib/python3.13/site-packages/httpcore/_api.py": 16499985295426060327, - "frontend/playwright-report/data/ac7f153484f7d6b15b773641e328a5ad9204f736.webm": 17964728097298408466, - "venv/lib/python3.13/site-packages/pandas/tests/extension/list/__init__.py": 10072943986583771248, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_limited_api.py": 15788485008764560845, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_timedelta.py": 12822713918114715561, - "frontend/build/_app/immutable/nodes/27.D9JO1_YZ.js": 1768599772397553118, - "backend/git_repos/remote/test-repo.git/objects/59/3a37acec7d2bddce10df90ab17bc9ede52e523": 1117161574576783985, - "venv/lib/python3.13/site-packages/pandas/_libs/tslib.cpython-313-x86_64-linux-gnu.so": 10742615805788605480, - "venv/lib/python3.13/site-packages/pandas/core/arrays/masked.py": 13977195666947626206, - "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/WHEEL": 8954358347596196608, - "venv/lib/python3.13/site-packages/numpy/f2py/crackfortran.py": 12796890117561096360, - "backend/git_repos/remote/test-repo.git/hooks/push-to-checkout.sample": 4825338927654285910, - "venv/lib/python3.13/site-packages/pydantic/v1/error_wrappers.py": 5701679786078971939, - "venv/lib/python3.13/site-packages/numpy/_core/umath.py": 6132761780113682667, - "venv/lib/python3.13/site-packages/pandas/core/util/numba_.py": 3535857372998653863, - "venv/lib/python3.13/site-packages/numpy/random/bit_generator.cpython-313-x86_64-linux-gnu.so": 2574035311375507054, - "frontend/build/_app/immutable/chunks/B0K5kI6n.js": 6208436857520817685, - "venv/lib/python3.13/site-packages/pip/_internal/distributions/installed.py": 18153165899841229597, - "venv/lib/python3.13/site-packages/pandas/core/reshape/pivot.py": 4736553530021653868, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/nested_sequence.pyi": 10985533017688918283, - "venv/lib/python3.13/site-packages/pip/_internal/utils/wheel.py": 450504439085405418, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/aiomysql.py": 12999962380333482189, - "venv/lib/python3.13/site-packages/pandas/core/ops/mask_ops.py": 16152832446926420035, - "venv/lib/python3.13/site-packages/_pytest/deprecated.py": 5452408732344157294, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/__init__.py": 15735839022111230173, - "frontend/playwright-report/trace/uiMode.Btcz36p_.css": 7361350017361398233, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/__init__.py": 14571251344510763303, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_formats.py": 17821648708413143557, - "venv/lib/python3.13/site-packages/httpcore/_backends/sync.py": 576247220834179928, - "venv/lib/python3.13/site-packages/numpy/_typing/_ufunc.py": 16859854811012717088, - "venv/lib/python3.13/site-packages/passlib/utils/pbkdf2.py": 15802959653228956404, - "frontend/src/types/dashboard.ts": 9718666955722367566, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/types.py": 1343652083039949282, - "venv/lib/python3.13/site-packages/pandas/core/methods/describe.py": 17006836623161521092, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/sphinxext.py": 2403717774564798878, - "venv/lib/python3.13/site-packages/PIL/SunImagePlugin.py": 7661622930404688367, - "backend/src/scripts/seed_superset_load_test.py": 7430188463595432869, - "venv/lib/python3.13/site-packages/pygments/lexers/crystal.py": 3579547906957125755, - "venv/lib/python3.13/site-packages/pandas/_libs/ops_dispatch.pyi": 16176428602589420913, - "venv/lib/python3.13/site-packages/websockets/frames.py": 4901850477414613953, - "venv/lib/python3.13/site-packages/pip/_internal/commands/index.py": 16715578868094112894, - "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/WHEEL": 17410883677306885019, - "venv/lib/python3.13/site-packages/numpy/f2py/diagnose.pyi": 8607205990821121708, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_datetime.py": 1678885152993000592, - "venv/lib/python3.13/site-packages/websockets/sync/connection.py": 2791040669094103200, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/subversion.py": 7423946096970870727, - "venv/lib/python3.13/site-packages/numpy/f2py/symbolic.pyi": 14558091964387571257, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_iloc.py": 16160558158155038350, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/base.py": 16891437410462671317, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/query.py": 3867868366067025348, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/dynamic.py": 15220116196072524330, - "venv/lib/python3.13/site-packages/uvicorn/supervisors/basereload.py": 14479857245734482609, - "backend/src/services/reports/report_service.py": 9387534669439738529, - "venv/lib/python3.13/site-packages/authlib/integrations/django_client/apps.py": 14151733532064278336, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix.pyi": 2700568594438441246, - "venv/lib/python3.13/site-packages/pandas/core/indexes/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py": 10057637461647348368, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/jws.py": 7505219131537941130, - "venv/lib/python3.13/site-packages/pygments/lexers/ada.py": 17032408976634308999, - "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/INSTALLER": 17282701611721059870, - "frontend/build/_app/immutable/chunks/B2x1wvBz.js": 18181710553832181445, - "venv/lib/python3.13/site-packages/cryptography/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_map.py": 1115471561925426082, - "backend/src/scripts/delete_running_tasks.py": 4209804708500252012, - "backend/src/core/task_manager/lifecycle.py": 1696300129247014205, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/json.py": 15373167408891671190, - "venv/lib/python3.13/site-packages/requests/exceptions.py": 6474239743209354989, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_unicode_ddl.py": 2569618488804767890, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/compat.py": 5871636909854554063, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalar_ctors.py": 631744056514965940, - "frontend/src/routes/settings/+page.ts": 3719008513710037840, - "frontend/build/_app/immutable/chunks/C8K-NfB8.js": 522730246953022577, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286.pyf": 14358606965464506398, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/__init__.py": 11709551233929312136, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_constructors.py": 2786493777737472376, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/entities.py": 8001287806688585081, - "venv/lib/python3.13/site-packages/sqlalchemy/connectors/__init__.py": 17194870661869873083, - "venv/lib/python3.13/site-packages/PIL/BdfFontFile.py": 10811640174253687845, - "venv/lib/python3.13/site-packages/pandas/_libs/json.cpython-313-x86_64-linux-gnu.so": 2436285663630821963, - "backend/src/core/config_models.py": 4102600119446697065, - "backend/src/services/clean_release/manifest_service.py": 7248530010607024664, - "venv/lib/python3.13/site-packages/pip/_internal/utils/compat.py": 1841193561752758336, - "venv/lib/python3.13/site-packages/jeepney/io/tests/test_trio.py": 7459901627473962540, - "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/__init__.py": 17630019785411546070, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_masm.asm": 15349921092257597740, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timestamps.pyi": 51728851886466199, - "venv/lib/python3.13/site-packages/pandas/_libs/lib.cpython-313-x86_64-linux-gnu.so": 6452315003728497116, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/__init__.py": 10920760520224795596, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_reduction.py": 2671872764983553906, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_strptime.py": 14328510310436552635, - "frontend/src/lib/components/translate/TranslationRunProgress.svelte": 12659537213220151902, - "frontend/build/_app/immutable/nodes/38.CPUUjahQ.js": 12407535468315561894, - "venv/lib/python3.13/site-packages/jsonschema/_typing.py": 13152346021901861822, - "frontend/build/_app/immutable/nodes/12.B-78a9ub.js": 3017777354640452876, - "frontend/build/_app/immutable/chunks/BHFoudx0.js": 10681906604178491410, - "venv/lib/python3.13/site-packages/pydantic/v1/dataclasses.py": 7833468513057242440, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD": 16833702494864671773, - "venv/lib/python3.13/site-packages/pandas/io/formats/csvs.py": 17223598248259691292, - "frontend/src/lib/components/ui/SearchableMultiSelect.svelte": 1872229619122554196, - "venv/lib/python3.13/site-packages/pygments/lexers/amdgpu.py": 17249439604111838979, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_round.py": 9358309072340573675, - "backend/git_repos/remote/test-repo.git/hooks/prepare-commit-msg.sample": 7530253302780245896, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_generator_mt19937.py": 7299586490442539723, - "venv/lib/python3.13/site-packages/jeepney/tests/test_wrappers.py": 4813328996575597980, - "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/WHEEL": 16223367184831500348, - "venv/lib/python3.13/site-packages/starlette/authentication.py": 10905269573809129547, - "venv/lib/python3.13/site-packages/pandas/core/computation/expr.py": 13085709365673019494, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_index_new.py": 796607958391882182, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reindex.py": 8772423071604000084, - "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/auto.py": 12818217385551437286, - "frontend/src/lib/api/translate/schedules.js": 8616345664085016472, - "venv/lib/python3.13/site-packages/rsa/randnum.py": 13958355153634534526, - "venv/lib/python3.13/site-packages/pandas/core/series.py": 11618272682977710696, - "frontend/src/lib/components/translate/ScheduleConfig.svelte": 9548866160759602637, - "frontend/src/lib/components/dataset-review/SemanticLayerReview.svelte": 2835359394064716026, - "venv/lib/python3.13/site-packages/fastapi/__init__.py": 11054203163075417954, - "venv/lib/python3.13/site-packages/pygments/formatters/html.py": 1918541918263449443, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_utils.pyi": 3708905060001289515, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/resource_protector.py": 4823504113176750140, - "venv/lib/python3.13/site-packages/websockets/asyncio/router.py": 15039562376314233669, - "venv/lib/python3.13/site-packages/pygments/lexers/templates.py": 16267123844830647955, - "venv/lib/python3.13/site-packages/sqlalchemy/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/formatters/_mapping.py": 13335227913146542481, - "frontend/src/lib/components/assistant/AssistantChatPanel.svelte": 17490466635940795553, - "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/_config/localization.py": 11197430792343731762, - "venv/lib/python3.13/site-packages/gitdb/db/mem.py": 15823812455996199993, - "dist/docker/frontend.0.1.0.tar.xz": 16011357094675100098, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi": 4376871621615688626, - "venv/lib/python3.13/site-packages/multipart/exceptions.py": 8580522204565816132, - "venv/lib/python3.13/site-packages/numpy/_core/lib/pkgconfig/numpy.pc": 14713682399742251335, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/horizontal_shard.py": 17615732108308858890, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_grouping.py": 5994909693214299971, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libldap-2974a1ba.so.2.0.200": 13590569080612602445, - "venv/lib/python3.13/site-packages/pygments/formatters/irc.py": 2133711525226123259, - "venv/lib/python3.13/site-packages/pygments/lexers/jsx.py": 13855228003748707341, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/__init__.pyi": 16164841755339571545, - "venv/lib/python3.13/site-packages/dateutil/rrule.py": 398469817784230512, - "venv/lib/python3.13/site-packages/_pytest/faulthandler.py": 13329320306353718649, - "venv/lib/python3.13/site-packages/numpy/_typing/_array_like.py": 2161873439361281488, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/stride_tricks.pyi": 5844806555773292985, - "venv/lib/python3.13/site-packages/click/_termui_impl.py": 3296085065310341855, - "venv/lib/python3.13/site-packages/pillow.libs/libsharpyuv-95d8a097.so.0.1.2": 5320647379976541240, - "venv/lib/python3.13/site-packages/pydantic/_internal/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/ma/LICENSE": 6723325434476453127, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_distutils.pyi": 3595910367556664837, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/astype_copy.pkl": 4470155972891419163, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_kind.py": 18178830861475480607, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/env.py": 1254612137164491329, - "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pydantic/_internal/_internal_dataclass.py": 13206778611516171760, - "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft.pyi": 1521384724035973688, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_converter.py": 7709581879446228856, - "venv/lib/python3.13/site-packages/pip/__init__.py": 9449893869469432503, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py": 2873060848310644552, - "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/histograms.pyi": 2281259341486424755, - "venv/lib/python3.13/site-packages/rpds/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_half.py": 3121836756584726126, - "venv/lib/python3.13/site-packages/pydantic/_internal/_serializers.py": 12077180322353709930, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_astype.py": 11995587502880659624, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_mask.py": 9654897363729130542, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_html.py": 7732330576029516854, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/checks.pyx": 13187505236986855177, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_overlaps.py": 2328652590379935311, - "venv/lib/python3.13/site-packages/pandas/io/excel/_base.py": 1251545894005373734, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/orm.py": 7554417559838785150, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reserved_words.py": 8022121780993497971, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/ma/LICENSE": 6723325434476453127, - "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/licenses/LICENSE": 11986475601091748012, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23598.f90": 1409455010615482779, - "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/__init__.py": 15130871412783076140, - "frontend/build/_app/immutable/chunks/rrOTveCl.js": 6718040498448531057, - "backend/src/services/reports/normalizer.py": 13510015789619559475, - "backend/src/plugins/translate/dictionary_crud.py": 17858252266960667195, - "frontend/src/routes/translate/dictionaries/+page.svelte": 1038433841421198720, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_einsum.py": 17286384318722237180, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.BSD": 3858254215169937333, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_records.py": 6252761812228230408, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/styled.py": 8726407298858811635, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_non_unique.py": 15286893322149413712, - "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/licenses/LICENSE": 8438117004702803716, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/mean_.py": 3641008929910474457, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_constructors.py": 12628643543371952431, - "venv/lib/python3.13/site-packages/pandas/io/formats/printing.py": 3054136648863371285, - "venv/lib/python3.13/site-packages/passlib/tests/sample_config_1s.cfg": 1809713544666311828, - "venv/lib/python3.13/site-packages/authlib/oidc/core/models.py": 1370998944213578392, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_dialect.py": 6294522482440261756, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_get_set.py": 14375107704596905983, - "venv/lib/python3.13/site-packages/pip/_internal/utils/packaging.py": 15555781487631855604, - "venv/lib/python3.13/site-packages/PIL/_deprecate.py": 15076725072094847812, - "venv/lib/python3.13/site-packages/keyring/backend.py": 14185808762437650951, - "venv/lib/python3.13/site-packages/pygments/styles/xcode.py": 14124729477757765388, - "venv/lib/python3.13/site-packages/pygments/lexers/macaulay2.py": 8022891778577314212, - "venv/lib/python3.13/site-packages/numpy/fft/_helper.pyi": 9546918341939102632, - "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/WHEEL": 16097436423493754389, - "frontend/src/components/Footer.svelte": 12838918285533328222, - "backend/src/api/routes/datasets.py": 3167720733470487965, - "backend/src/services/clean_release/source_isolation.py": 9041802363608399236, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_excel.py": 5467043641314706635, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_manylinux.py": 12272275001961360101, - "venv/lib/python3.13/site-packages/httpx/_config.py": 8800538050293498928, - "venv/lib/python3.13/site-packages/greenlet/TPythonState.cpp": 12828594265749606443, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_groupby.py": 16180421154734310873, - "venv/lib/python3.13/site-packages/pip/_internal/req/req_set.py": 534498057184394558, - "venv/lib/python3.13/site-packages/idna/codec.py": 4260241549062101779, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_version.py": 10384171076976071398, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_lexsort.py": 10394832796613968484, - "venv/lib/python3.13/site-packages/pluggy/_warnings.py": 2664977718908223842, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/exc.py": 1448374203226983757, - "backend/tests/test_translate_corrections.py": 6483644195889451514, - "venv/lib/python3.13/site-packages/pygments/lexers/srcinfo.py": 16466766917840327610, - "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/__init__.py": 16416360448593978041, - "venv/lib/python3.13/site-packages/pip/_vendor/distro/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/markers.py": 8297667990263004097, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reset_index.py": 14490875921264161445, - "venv/lib/python3.13/site-packages/_pytest/_code/code.py": 5248836309618416369, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalar_methods.py": 14881910898871057761, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_validate.py": 12789481642730855139, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/events.py": 15099787454570172797, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py": 3177255974394221645, - "venv/lib/python3.13/site-packages/git/objects/base.py": 11498407361286170399, - "venv/lib/python3.13/site-packages/uvicorn/middleware/asgi2.py": 5355343704425405009, - "venv/lib/python3.13/site-packages/pandas/core/indexes/range.py": 3838277376774246164, - "venv/lib/python3.13/site-packages/pygments/cmdline.py": 15628499088643246809, - "frontend/e2e/fixtures/global-setup.js": 16032945890934324203, - "frontend/src/lib/api/translate/runs.js": 1220731879179347641, - "frontend/src/routes/migration/__tests__/migration_dashboard.ux.test.js": 17118608261683412409, - "backend/src/api/routes/clean_release.py": 9890311709059474429, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_add_prefix_suffix.py": 4815518357936092237, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py": 14571251344510763303, - "venv/lib/python3.13/site-packages/pandas/core/interchange/buffer.py": 12961802206383700922, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/RECORD": 10052481303799123207, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/__init__.py": 3247870839323520754, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_strings.py": 7379299916213794543, - "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/RECORD": 9974324769263969827, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi": 9405122752084210696, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/setup.py": 5482352991573617756, - "venv/lib/python3.13/site-packages/_pytest/pastebin.py": 13946273207624603063, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/reduce.py": 14976712507854054776, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/WHEEL": 13232065379159720345, - "venv/lib/python3.13/site-packages/pygments/lexers/arturo.py": 4565524340706235725, - "backend/src/models/auth.py": 4040750225610660281, - "backend/src/services/notifications/providers.py": 12802217818475476969, - "venv/lib/python3.13/site-packages/jose/exceptions.py": 8562012933958941039, - "backend/src/core/utils/__init__.py": 12454773556575864508, - "backend/src/services/git/_url.py": 11387722385592868210, - "venv/lib/python3.13/site-packages/ecdsa/_sha3.py": 10353612776869489378, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_common.py": 9097104320321411408, - "venv/lib/python3.13/site-packages/starlette/staticfiles.py": 11256974306202558529, - "venv/lib/python3.13/site-packages/idna/core.py": 7725813731640753267, - "backend/ss_tools_backend.egg-info/PKG-INFO": 15134841326777953914, - "backend/tests/test_deprecation_audit_fixes.py": 17902995210831708431, - "frontend/src/lib/components/translate/TranslationRunResult.svelte": 4434171203266080686, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/introspection.py": 5447179017910128771, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_tokenizer.py": 7994281991455916540, - "venv/lib/python3.13/site-packages/numpy/lib/mixins.py": 7404729635424818497, - "venv/lib/python3.13/site-packages/pip/_vendor/distro/__main__.py": 2688850704829116818, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arrayprint.pyi": 2424868797160722318, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py": 8864112842559211971, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_frame.py": 4303613319747945709, - "venv/lib/python3.13/site-packages/_pytest/tmpdir.py": 10834220332037364219, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_is_monotonic.py": 4626065848596214108, - "venv/lib/python3.13/site-packages/pandas/io/parquet.py": 14415622950469421518, - "venv/lib/python3.13/site-packages/PIL/FitsImagePlugin.py": 618556384932056120, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/test_as_unit.py": 4283520188709399244, - "frontend/build/_app/immutable/chunks/DcMPZ_fa.js": 6501595943098370468, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/retry.py": 17371295199208325375, - "venv/lib/python3.13/site-packages/uvicorn/server.py": 15714008348292243019, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_style.py": 6849613206971398029, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_setops.py": 15365064654930699428, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_converters.py": 8869440774594127419, - "backend/src/plugins/translate/__tests__/__init__.py": 2490542523242946173, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_pick.py": 15760492005471315814, - "venv/lib/python3.13/site-packages/passlib/utils/md4.py": 4521366665754877351, - "venv/lib/python3.13/site-packages/passlib/tests/test_pwd.py": 10089138951415591061, - "backend/tests/test_smoke_plugins.py": 10704454611361370435, - "venv/lib/python3.13/site-packages/passlib/handlers/scram.py": 12281469744083867450, - "venv/lib/python3.13/site-packages/jaraco/context/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/highway/LICENSE": 15636145745140922094, - "venv/lib/python3.13/site-packages/git/remote.py": 1694919255653049944, - "venv/lib/python3.13/site-packages/greenlet/TGreenletGlobals.cpp": 17400526028982558937, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/LICENSE": 11167201188673981085, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/core/computation/align.py": 13027916530558901817, - "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/WHEEL": 9100692507274722091, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/errors.py": 16711622442922413520, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_utils.pyi": 12312677132342982866, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_info.py": 10615285239043745712, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/roles.py": 5448455900674232810, - "venv/lib/python3.13/site-packages/pip/_internal/utils/logging.py": 9639351759822608724, - "venv/lib/python3.13/site-packages/pydantic/v1/datetime_parse.py": 10467114625921924095, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_droplevel.py": 2071197388394658690, - "venv/lib/python3.13/site-packages/pycparser/c_lexer.py": 10964496587169353564, - "frontend/e2e/tests/migration.e2e.js": 7453107045608888506, - "backend/src/api/routes/admin_api_keys.py": 6647178786430565995, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/test_numpy.py": 9825804096508014886, - "venv/lib/python3.13/site-packages/pandas/core/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/declarative/extensions.py": 217122171232375592, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/enumerated.py": 16623643153933348755, - "venv/lib/python3.13/site-packages/pandas/core/apply.py": 17080038932032802984, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/generate_umath_validation_data.cpp": 10880681943327843928, - "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/RECORD": 7810411361439269754, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7592/__init__.py": 1398617034174236358, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_set_axis.py": 4097534573847151853, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log1p.csv": 16333455295913164408, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_linux.h": 15772978805500070727, - "venv/lib/python3.13/site-packages/pygments/lexers/tls.py": 3552078393009383412, - "venv/lib/python3.13/site-packages/pydantic/experimental/__init__.py": 492399139963056461, - "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_scrypt.py": 17378030264314664250, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_struct_accessor.py": 6567451952835390075, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/visitors.py": 5190923415390076080, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/collections.py": 16114931075157411913, - "venv/lib/python3.13/site-packages/PIL/GifImagePlugin.py": 16073125611077200693, - "venv/lib/python3.13/site-packages/ecdsa/_rwlock.py": 7971972922423146201, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_case_justify.py": 8204537837649550062, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/gcp.py": 12328409672947966867, - "venv/lib/python3.13/site-packages/pluggy/_tracing.py": 7276210024011809655, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/numerictypes.pyi": 15565573472138344755, - "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs.pyi": 9282436354926617898, - "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/expressions.py": 8015786996064244656, - "venv/lib/python3.13/site-packages/fastapi/openapi/models.py": 1680354178147364813, - "venv/lib/python3.13/site-packages/numpy/f2py/common_rules.pyi": 2104100025130695295, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_base.py": 15292769510056833117, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_setops.py": 16240008859650640717, - "venv/lib/python3.13/site-packages/yaml/loader.py": 18284689412149643959, - "venv/lib/python3.13/site-packages/charset_normalizer/__main__.py": 8887772289570078278, - "venv/lib/python3.13/site-packages/pygments/lexers/factor.py": 15788613154609197002, - "venv/lib/python3.13/site-packages/pygments/lexers/pawn.py": 18127303119414402594, - "frontend/playwright-report/trace/codicon.DCmgc-ay.ttf": 15579197054804464248, - "frontend/src/lib/stores/__tests__/sidebar.test.js": 3057168376995255911, - "frontend/build/_app/immutable/nodes/20.vbM4K1GV.js": 5949005740228816871, - "frontend/build/_app/immutable/chunks/433xuBHg.js": 15795952494274306151, - "venv/lib/python3.13/site-packages/keyring/http.py": 1408024724330078009, - "backend/src/services/llm_prompt_templates.py": 16176053862101644239, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_libs/join.cpython-313-x86_64-linux-gnu.so": 2947947484481830203, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/RECORD": 2688648742701423549, - "venv/lib/python3.13/site-packages/cffi/parse_c_type.h": 9889309594462820068, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/styles/_mapping.py": 11752660241391232497, - "venv/lib/python3.13/site-packages/numpy/f2py/crackfortran.pyi": 9206355685192026844, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/util/topological.py": 11586868018611359415, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/__init__.py": 15130871412783076140, - "backend/src/plugins/translate/_batch_insert.py": 12482635271028646257, - "venv/lib/python3.13/site-packages/gitdb/db/__init__.py": 2615504918450276693, - "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/scipy_sparse.py": 2091608752719976909, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_frozen.py": 3484963987053884566, - "venv/lib/python3.13/site-packages/fastapi/security/api_key.py": 6965937678104291169, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/apps.py": 10758062668702044519, - "venv/lib/python3.13/site-packages/uvicorn/protocols/http/flow_control.py": 4822804840057360506, - "venv/lib/python3.13/site-packages/pygments/lexers/_ada_builtins.py": 16331776886501464264, - "venv/lib/python3.13/site-packages/psycopg2/_psycopg.cpython-313-x86_64-linux-gnu.so": 13471342289207537479, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/proxy.py": 13008557041076030198, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_convert_dtypes.py": 5005259275646154894, - "venv/lib/python3.13/site-packages/pandas/core/_numba/extensions.py": 4132402557064663751, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_combine.py": 16193618152415684421, - "frontend/src/components/git/useGitManager.js": 1649936771399080281, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/base.py": 5294446834530589760, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/scalar_string.f90": 15018631706178918578, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_string.py": 3834067244989779682, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_unary.py": 8046543893978198672, - "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/METADATA": 15888766579203341778, - "venv/lib/python3.13/site-packages/pip/_internal/utils/filetypes.py": 4415340223268174913, - "venv/lib/python3.13/site-packages/urllib3/connection.py": 12761371748350595804, - "venv/lib/python3.13/site-packages/pygments/lexers/dalvik.py": 5549983892200382076, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_setops.py": 9991233160569430204, - "venv/lib/python3.13/site-packages/pyasn1/codec/cer/decoder.py": 17559787396729804535, - "venv/lib/python3.13/site-packages/iniconfig/__init__.py": 12623265899068631092, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_join.py": 1697622393195784944, - "backend/src/schemas/__init__.py": 8700952869915187087, - "backend/src/api/routes/assistant/_schemas.py": 17540735345133623114, - "venv/lib/python3.13/site-packages/pluggy/_result.py": 16790448391766505769, - "frontend/src/routes/datasets/review/+page.svelte": 8512810578824138490, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_is_homogeneous_dtype.py": 15378147393056707851, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_period.py": 9715843209581883915, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/testing/_private/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_indexers.py": 6773751569163287047, - "frontend/src/routes/dashboards/[id]/components/DashboardHeader.svelte": 8694552424163588390, - "venv/lib/python3.13/site-packages/uvicorn/logging.py": 12858188863836778374, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_smoke.py": 7476432112986643847, - "venv/lib/python3.13/site-packages/_pytest/doctest.py": 6126919596776592278, - "venv/lib/python3.13/site-packages/pip/_internal/index/package_finder.py": 12631116673181479779, - "venv/lib/python3.13/site-packages/h11/_state.py": 11398755254809751139, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/common_with_division.f": 13517753924061311074, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/conftest.py": 17897502508251413988, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_item_selection.py": 1027989019709029615, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/url.py": 1558176735588971829, - "venv/lib/python3.13/site-packages/pip/_vendor/certifi/cacert.pem": 15624463015628939254, - "venv/lib/python3.13/site-packages/pandas/errors/cow.py": 14381282473643980776, - "venv/lib/python3.13/site-packages/numpy/lib/_arraysetops_impl.pyi": 3111521453255595221, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_function_base.py": 16624804022675533740, - "venv/lib/python3.13/site-packages/pygments/lexers/idl.py": 11454152060351801696, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_constructors.py": 1697610790604400105, - "venv/lib/python3.13/site-packages/jose/jwk.py": 2781217726458801910, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/locators.py": 7638945613579396718, - "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/licenses/COPYING": 14459782230785388765, - "venv/lib/python3.13/site-packages/pygments/lexers/hdl.py": 6772823608124143123, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/endpoint.py": 13389763148720370546, - "venv/lib/python3.13/site-packages/pydantic/_internal/_import_utils.py": 4029157986210295967, - "venv/lib/python3.13/site-packages/numpy/lib/_ufunclike_impl.py": 12251264586530536622, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/dtypes.py": 9839461501970023861, - "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_item.py": 17619314877770917080, - "venv/lib/python3.13/site-packages/numpy/random/_pcg64.pyi": 14785496840737986355, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mariadb.py": 3109042476851791996, - "venv/lib/python3.13/site-packages/bcrypt/py.typed": 15130871412783076140, - "frontend/playwright-report/data/d3248d538f098a40b756ead1ee1a92a7d61e7c7a.zip": 661058595618012246, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_pickle.py": 3419420815386925630, - "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/test_array_with_attr.py": 6568496539994758985, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_astype.py": 7542068949396266883, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_loop.py": 6502725909989655118, - "venv/lib/python3.13/site-packages/numpy/_globals.py": 8736093011628027941, - "venv/lib/python3.13/site-packages/pygments/lexers/functional.py": 15896849233007178031, - "frontend/src/components/tools/MapperTool.svelte": 3019722694056442354, - "backend/src/api/routes/__tests__/test_reports_detail_api.py": 8519050847848949612, - "backend/src/api/routes/git/_helpers.py": 17217408354237437064, - "backend/src/services/dataset_review/orchestrator_pkg/_helpers.py": 14441258905942300095, - "backend/git_repos/remote/test-repo.git/hooks/pre-rebase.sample": 15693225890270078290, - "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/WHEEL": 5076688779572520166, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ctypeslib.pyi": 8623725566434725526, - "venv/lib/python3.13/site-packages/anyio/_core/_signals.py": 1204322949639513552, - "venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py": 7301817934902711510, - "venv/lib/python3.13/site-packages/attr/exceptions.pyi": 12323493441583681402, - "venv/lib/python3.13/site-packages/pygments/lexers/sql.py": 15566262873151658034, - "venv/lib/python3.13/site-packages/pygments/lexers/scdoc.py": 8481749542463754279, - "backend/tests/test_sql_table_extractor.py": 13392885324292384588, - "venv/lib/python3.13/site-packages/pygments/lexers/roboconf.py": 1335271183806115470, - "backend/src/services/clean_release/__init__.py": 9144880924791476391, - "venv/lib/python3.13/site-packages/jeepney/io/blocking.py": 4699555965372200059, - "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_enc_cryptography.py": 4383854709657749855, - "venv/lib/python3.13/site-packages/sqlalchemy/log.py": 10101221585967121334, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_delitem.py": 16538190861492829338, - "venv/lib/python3.13/site-packages/uvicorn/py.typed": 15240312484046875203, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_astype.py": 7497268667246913350, - "frontend/build/_app/immutable/chunks/_Pf3rQig.js": 13183249556030654823, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_palettes.py": 13495896173068490516, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/RECORD": 1689342214025776630, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_indexing.py": 4334578480714520407, - "venv/lib/python3.13/site-packages/pandas/tests/api/test_types.py": 8889829773923216769, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_bool.py": 433342705586552936, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py": 5946672289916692272, - "backend/src/api/routes/__tests__/test_git_api.py": 4133163122739824202, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_pickle.py": 16196792378104396231, - "venv/lib/python3.13/site-packages/numpy/random/_examples/cffi/extending.py": 9859383893070793914, - "venv/lib/python3.13/site-packages/pandas/io/excel/_calamine.py": 13354427767660487637, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_indexing.py": 1926721846569184112, - "venv/lib/python3.13/site-packages/charset_normalizer/cli/__main__.py": 2148876100501691980, - "venv/lib/python3.13/site-packages/anyio/_core/_eventloop.py": 6853955946028131785, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_shift.py": 9952689832827833247, - "venv/lib/python3.13/site-packages/pandas/core/construction.py": 10646956189518908985, - "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/RECORD": 11111103193315065053, - "venv/lib/python3.13/site-packages/sqlalchemy/event/base.py": 18238453132776154057, - "venv/lib/python3.13/site-packages/greenlet/greenlet_internal.hpp": 13173115501223013762, - "venv/lib/python3.13/site-packages/pandas/tests/libs/test_hashtable.py": 7762405492052106717, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/requirements.py": 11478648568700804705, - "venv/lib/python3.13/site-packages/pygments/lexers/sas.py": 6128008194712914874, - "venv/lib/python3.13/site-packages/pygments/lexers/_lilypond_builtins.py": 1766946089314631488, - "backend/src/api/routes/__tests__/test_reports_api.py": 12407027129865592126, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/serializer.py": 8708767945343850816, - "backend/src/plugins/translate/__tests__/test_inline_correction.py": 9293076489563685553, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/modules.pyi": 131293606732000587, - "frontend/e2e/tests/settings.e2e.js": 1420830886812189435, - "venv/lib/python3.13/site-packages/numpy/f2py/__init__.pyi": 3566887042414273892, - "venv/lib/python3.13/site-packages/numpy/_core/_multiarray_umath.cpython-313-x86_64-linux-gnu.so": 2888939866336522308, - "venv/lib/python3.13/site-packages/passlib/handlers/postgres.py": 14162382430051693313, - "frontend/src/components/TaskList.svelte": 17511781335293490363, - "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/licenses/LICENSE": 10253862887434903467, - "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_utils.py": 2329717399120006435, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/yaml/constructor.py": 8731384179016992045, - "backend/src/core/auth/config.py": 4868978979228156169, - "venv/lib/python3.13/site-packages/_pytest/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_null_file.py": 6885565068723353414, - "frontend/src/lib/stores/sidebar.js": 4584261073573678043, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/nested_secrets.py": 15691917061715429369, - "venv/lib/python3.13/site-packages/pygments/lexers/html.py": 17288963642862550116, - "frontend/build/_app/immutable/nodes/34.xdrxaxTT.js": 17930280376609562318, - "backend/src/plugins/translate/orchestrator_sql.py": 15420456250044832567, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/applicator": 6870991911243684132, - "backend/tests/test_translate_executor_filter.py": 11717560360659156703, - "venv/lib/python3.13/site-packages/numpy/testing/__init__.pyi": 8126257788928282891, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_highlight.py": 7573043358244876807, - "venv/lib/python3.13/site-packages/urllib3/_request_methods.py": 13671055114247516883, - "venv/lib/python3.13/site-packages/numpy/lib/__init__.py": 12211229657513986410, - "venv/lib/python3.13/site-packages/pillow.libs/libbrotlicommon-c55a5f7a.so.1.2.0": 2635192149914499986, - "venv/lib/python3.13/site-packages/PIL/IcnsImagePlugin.py": 1870235606309784691, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_shift.py": 14026124784027171225, - "frontend/build/_app/immutable/chunks/Bz99hFgy.js": 2788010001753617987, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/aws.py": 1364297790170663941, - "frontend/src/lib/components/assistant/AssistantClarificationCard.svelte": 4264349064103133826, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_apply_relabeling.py": 5600949862632014700, - "backend/git_repos/remote/test-repo.git/description": 15262637409357137373, - "backend/src/api/routes/__init__.py": 4671856475376690434, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_duplicates.py": 9830936017197354309, - "venv/lib/python3.13/site-packages/fastapi/_compat/main.py": 13016492818231995760, - "venv/lib/python3.13/site-packages/pygments/lexers/python.py": 8995519134978505744, - "backend/src/services/clean_release/__tests__/test_preparation_service.py": 1135205964675811608, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py": 6712732248328458871, - "backend/src/models/dataset_review_pkg/__init__.py": 1796062139548584878, - "venv/lib/python3.13/site-packages/pandas/core/_numba/executor.py": 2205130934861422769, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_accessor.py": 10074496835594855786, - "venv/lib/python3.13/site-packages/pygments/lexers/julia.py": 13516407944275342328, - "venv/lib/python3.13/site-packages/numpy/_core/_asarray.pyi": 3940937389249665490, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_join.py": 1364886077926604427, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_datetimes.py": 8863748366184419339, - "venv/bin/keyring": 1488968652276547659, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rank.py": 14115215895836854973, - "backend/src/api/routes/dataset_review_pkg/_routes.py": 11040245149296528009, - "backend/src/plugins/debug.py": 13683182174969777939, - "venv/lib/python3.13/site-packages/pandas/tests/series/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/httpx/_urlparse.py": 8270294590945652412, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_with_comments.f": 3980077223827767077, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_fillna.py": 8802093795040069423, - "venv/lib/python3.13/site-packages/websockets/sync/utils.py": 15135020989207191168, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_generator_mt19937_regressions.py": 8981142329261965538, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-sin.csv": 1443087417808027268, - "venv/lib/python3.13/site-packages/pygments/lexers/smithy.py": 10789533877863290582, - "backend/git_repos/remote/test-repo.git/objects/5d/9eb555c4cac2d3ffdba84c07682b154fe4180d": 10756202165146702691, - "venv/lib/python3.13/site-packages/fastapi/dependencies/models.py": 8626894872248212015, - "venv/lib/python3.13/site-packages/greenlet/PyModule.cpp": 3464405102256525511, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-objarr.npy": 9694707264403109829, - "docker/nginx.conf": 14595959129793115016, - "venv/lib/python3.13/site-packages/numpy/linalg/lapack_lite.pyi": 14069586330277925998, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_polynomial.py": 3049262771098624825, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/licenses/LICENSE": 6808958893921859106, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_hermite.py": 3628609433179387988, - "venv/lib/python3.13/site-packages/pandas/core/arrays/datetimelike.py": 394614958716301173, - "venv/lib/python3.13/site-packages/apscheduler/triggers/base.py": 1170652622104554892, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_shape_manipulation.py": 12598431412396627042, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_engines.py": 2790877023773269276, - "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/licenses/LICENSE": 6653202620765194772, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_dict_of_blocks.py": 11646835537993064324, - "venv/lib/python3.13/site-packages/httpx/__init__.py": 6383055693166097719, - "venv/lib/python3.13/site-packages/pandas/tests/window/__init__.py": 15130871412783076140, - "backend/src/api/routes/translate/_job_routes.py": 10128664562563592050, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__multiarray_api.h": 16138871162713175599, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_set_name.py": 9094608008538024609, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/engine.py": 2652248727360250985, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libpq-9b38f5e3.so.5.17": 9680474575710585826, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/__init__.py": 4014740126161973332, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/__main__.py": 487896753130729554, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh25211.pyf": 10179237442840865225, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/asyncio.py": 11442130378027628520, - "venv/lib/python3.13/site-packages/requests/api.py": 12339139862411341381, - "venv/lib/python3.13/site-packages/websockets/extensions/permessage_deflate.py": 12957105912018691390, - "venv/lib/python3.13/site-packages/numpy/f2py/auxfuncs.pyi": 10077265709692546934, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py": 2285778903282667561, - "venv/lib/python3.13/site-packages/fastapi/types.py": 3867821246650502267, - "venv/lib/python3.13/site-packages/greenlet/tests/test_stack_saved.py": 7767924647054186572, - "venv/lib/python3.13/site-packages/itsdangerous/encoding.py": 205863946173486958, - "venv/lib/python3.13/site-packages/greenlet/greenlet_refs.hpp": 8525862687669040510, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs.py": 15657897994221955882, - "venv/lib/python3.13/site-packages/numpy/_core/__init__.py": 14951958843029076911, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/dtype.py": 9342837412280377086, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/parsing.cpython-313-x86_64-linux-gnu.so": 13104135217735363438, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_arrow_interface.py": 5231449831607036031, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_drop_duplicates.py": 2397396876872403048, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_writers.py": 103545128256076790, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_first_valid_index.py": 15763400665851423183, - "venv/lib/python3.13/site-packages/pillow.libs/libfreetype-ee1c40c4.so.6.20.4": 12301510769231120312, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/RECORD": 2024211292009381421, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/color_triplet.py": 17264298271771184, - "venv/lib/python3.13/site-packages/dateutil/parser/__init__.py": 11377431154251655738, - "venv/lib/python3.13/site-packages/httpx/_client.py": 1063593889704982038, - "venv/lib/python3.13/site-packages/urllib3/util/proxy.py": 17667887856427739069, - "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/RECORD": 12575893084587070195, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_array_utils.py": 14682148205379122638, - "venv/lib/python3.13/site-packages/pandas/_testing/contexts.py": 11714205921752896137, - "venv/lib/python3.13/site-packages/charset_normalizer/cli/__init__.py": 9702005609966176016, - "venv/lib/python3.13/site-packages/numpy/_core/_dtype_ctypes.pyi": 14543653817631274394, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/python.py": 17886036670342116501, - "venv/lib/python3.13/site-packages/annotated_types/__init__.py": 7367790549779882749, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/memory.py": 9947113720821563254, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/lower_f2py_fortran.f90": 13315882216322269383, - "venv/lib/python3.13/site-packages/pandas/tests/extension/uuid/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_formats.py": 10263085276270778330, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/WHEEL": 7145482834744213753, - "venv/lib/python3.13/site-packages/packaging/markers.py": 11602308203217831543, - "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_impl.py": 12056958946481531279, - "venv/bin/uvicorn": 3776670267111625708, - "venv/lib/python3.13/site-packages/websockets/extensions/__init__.py": 13067201313921664210, - "venv/lib/python3.13/site-packages/idna/package_data.py": 6583909243002417298, - "venv/lib/python3.13/site-packages/jsonschema/protocols.py": 847332300543820834, - "venv/lib/python3.13/site-packages/pip/_internal/build_env.py": 3614358934066127900, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_timegrouper.py": 276805119790266454, - "venv/lib/python3.13/site-packages/_pytest/_io/wcwidth.py": 13515196388826152383, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_api.py": 13739775047493489785, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ufuncobject.h": 5112456258078662871, - "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/RECORD": 11788532857617688351, - "venv/lib/python3.13/site-packages/pygments/lexers/spice.py": 1376126320935115350, - "venv/lib/python3.13/site-packages/numpy/polynomial/_polybase.pyi": 15864712173815045309, - "frontend/src/routes/datasets/__tests__/ColumnsTable.test.js": 15883951776898228284, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_defchararray.py": 15135904718007443306, - "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/METADATA": 14543822270526146783, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/content": 16257335642847993866, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/METADATA": 11419135077900073883, - "venv/lib/python3.13/site-packages/gitdb/test/test_util.py": 541144638852210407, - "venv/lib/python3.13/site-packages/pandas/io/parsers/arrow_parser_wrapper.py": 11745253171984606573, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_integer.f90": 8308927438994838783, - "venv/lib/python3.13/site-packages/PIL/_imagingtk.cpython-313-x86_64-linux-gnu.so": 1708198947135304326, - "backend/src/plugins/translate/__tests__/test_sql_generator.py": 7990788832878981127, - "frontend/src/lib/ui/Select.svelte": 1377129595022044035, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/events.py": 10224214051422678828, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/concat.py": 14737724508458849795, - "venv/lib/python3.13/site-packages/PIL/ImageShow.py": 11437096951764124817, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc64_linux.h": 4071314837793906998, - "venv/lib/python3.13/site-packages/pandas/tests/test_nanops.py": 8709105600366913011, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/RECORD": 3283324710045856319, - "backend/src/plugins/translate/__tests__/test_dictionary.py": 4341966549214032934, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/METADATA": 9041650844081036822, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_nep50_promotions.py": 6318578947214302182, - "venv/lib/python3.13/site-packages/pandas/tseries/offsets.py": 13750652921710295115, - "frontend/src/components/llm/ProviderConfig.svelte": 18108375341352259203, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_string.py": 11422235699126032386, - "venv/lib/python3.13/site-packages/numpy/_pytesttester.pyi": 5750506937526308405, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkrb5support-d0bcff84.so.0.1": 16819924515291719993, - "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/ext.py": 15699809032725838985, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_export_format.py": 17862222951776199694, - "venv/lib/python3.13/site-packages/pandas/_libs/sas.pyi": 873957906443703977, - "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/RECORD": 18314788057673509075, - "venv/lib/python3.13/site-packages/pip/_internal/index/sources.py": 11609272011565024668, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/base.py": 3250660921154829815, - "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_linalg.py": 2939739913218718132, - "venv/lib/python3.13/site-packages/httpcore/_async/http_proxy.py": 13364803556177997526, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/ddl.py": 5006132143435653867, - "backend/src/plugins/translate/__tests__/test_scheduler.py": 5715885061128238668, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_unicode.py": 1103608932321322989, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_isetitem.py": 14895552405828068177, - "venv/lib/python3.13/site-packages/secretstorage/util.py": 1004887530903069622, - "venv/lib/python3.13/site-packages/pydantic_core/__init__.py": 10563134104783445328, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/datasource.pyi": 80441145804744162, - "venv/lib/python3.13/site-packages/PIL/ImageCms.py": 5610897002957128546, - "venv/lib/python3.13/site-packages/sqlalchemy/__init__.py": 9751988289698484530, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/redis.py": 11313520438600819390, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py": 8079219938116542284, - "frontend/src/lib/api/translate/datasources.js": 17202165717960970061, - "venv/lib/python3.13/site-packages/pip/_internal/cli/main_parser.py": 7942770969280622910, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_indexing.py": 546024765756472196, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/METADATA": 1266134223155266488, - "venv/lib/python3.13/site-packages/attr/_compat.py": 4016698632899969390, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/requirements.py": 2362917888844255805, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/constant_time.py": 2499026008403328245, - "backend/src/models/dashboard.py": 18145369015035676491, - "venv/lib/python3.13/site-packages/cryptography/x509/oid.py": 13909847799728532602, - "venv/lib/python3.13/site-packages/numpy/__init__.pxd": 13527602429695748857, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_reindex.py": 15680924058960901067, - "venv/lib/python3.13/site-packages/jose/jwt.py": 3405491994268385178, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-exp2.csv": 10950201682596097452, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkeyutils-dfe70bd6.so.1.5": 9414227432578104677, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/_json.py": 6718137926109998531, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/v1/types.py": 10761779263335288559, - "venv/lib/python3.13/site-packages/keyring/__main__.py": 14602212239605295451, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_randomstate_regression.py": 17425202198134409689, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_interval.py": 2613503970235591726, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_empty.py": 13006241382741353569, - "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/RECORD": 6488682447051657004, - "venv/lib/python3.13/site-packages/packaging/_musllinux.py": 2568338440457080365, - "venv/lib/python3.13/site-packages/jsonschema/exceptions.py": 15651767069704734674, - "frontend/build/_app/immutable/chunks/DV17vNYu.js": 5906252992532056558, - "venv/lib/python3.13/site-packages/keyring/__init__.py": 991260689223167957, - "venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py": 14843908493613991959, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/quoted_character/foo.f": 15318083678609435813, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_print.py": 598821365691498702, - "venv/lib/python3.13/site-packages/numpy/tests/test_public_api.py": 11741922758622705449, - "venv/lib/python3.13/site-packages/pandas/core/frame.py": 2630807744775247533, - "backend/src/models/dataset_review_pkg/_filter_models.py": 11282786315414885098, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_ops.py": 3875181889032080505, - "backend/src/services/git/_sync.py": 18140332203522670777, - "venv/lib/python3.13/site-packages/websockets/sync/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/certifi/core.py": 2300277198409164253, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/comparisons.py": 7327629888601690759, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/base.py": 10205051944814316388, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py": 17106903014205241774, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.pxd": 13413785818999584986, - "venv/lib/python3.13/site-packages/itsdangerous/__init__.py": 6969210114978365656, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_groupby.py": 12709199432838648700, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_keys.py": 10813898277355150779, - "venv/lib/python3.13/site-packages/attr/filters.pyi": 13942974755090135724, - "venv/lib/python3.13/site-packages/PIL/WebPImagePlugin.py": 5378349556563611996, - "frontend/src/lib/components/reports/reportTypeProfiles.js": 10752964062056890725, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/asyncmy.py": 11808138763443525443, - "frontend/src/lib/components/translate/TargetSchemaHint.svelte": 9354096644840520484, - "frontend/build/_app/immutable/chunks/1jzJINoE.js": 5138497638450462989, - "venv/lib/python3.13/site-packages/pydantic/v1/networks.py": 13262073155118055511, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_shape_base.py": 8837845103338426570, - "venv/lib/python3.13/site-packages/pandas/conftest.py": 747626550806435763, - "venv/lib/python3.13/site-packages/tzlocal/__init__.py": 11017072814026497364, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/constructors.py": 7587476800569414769, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_arithmetics.py": 16527169124402715210, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/errors.py": 6538052228921426956, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multithreading.py": 12547048606098186681, - "venv/lib/python3.13/site-packages/numpy/testing/_private/utils.pyi": 17639497083041129225, - "frontend/src/routes/migration/mappings/+page.svelte": 13415361018394803129, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_info.py": 15151894356374015812, - "backend/src/api/routes/__tests__/test_assistant_api.py": 14069847490001200210, - "venv/lib/python3.13/site-packages/packaging/utils.py": 3469957615920103670, - "venv/lib/python3.13/site-packages/psycopg2/errors.py": 10441360078612452560, - "backend/src/services/dataset_review/repositories/__tests__/test_session_repository.py": 16488635694638612020, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/arrayscalars.h": 16142050006935459679, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/tzlocal/unix.py": 995019116408448073, - "venv/lib/python3.13/site-packages/keyring/backends/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/devicetree.py": 9820277168995231927, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/memmap.pyi": 15629663272474054909, - "venv/lib/python3.13/site-packages/pandas/_libs/ops.pyi": 1192312467209548763, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_comment.py": 5603075924832933306, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dtypes.py": 4985057130807802395, - "venv/lib/python3.13/site-packages/cryptography/hazmat/_oid.py": 755042927629281577, - "venv/lib/python3.13/site-packages/pygments/lexers/boa.py": 14409319610243925864, - "venv/lib/python3.13/site-packages/pygments/lexers/graph.py": 10445044822847205061, - "frontend/src/routes/translate/history/+page.svelte": 9504117584329454876, "venv/lib/python3.13/site-packages/iniconfig/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_exceptions.py": 12145393002202744314, - "venv/lib/python3.13/site-packages/greenlet/greenlet_exceptions.hpp": 8819301638282185623, - "backend/src/api/routes/__tests__/test_clean_release_v2_api.py": 17447140422807500877, - "venv/lib/python3.13/site-packages/pandas/_libs/tslib.pyi": 16170606956605100142, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_size.py": 12449835577388069407, - "venv/lib/python3.13/site-packages/yaml/events.py": 745772917931702910, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_extras.py": 16160090335191788104, - "venv/lib/python3.13/site-packages/anyio/lowlevel.py": 11919467357746648592, - "venv/lib/python3.13/site-packages/attr/_funcs.py": 5302917072419624193, - "venv/lib/python3.13/site-packages/keyring/testing/util.py": 11195868112805409554, - "venv/lib/python3.13/site-packages/pip/_internal/cli/cmdoptions.py": 12107733000019393631, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/manifest.py": 16998683210177680416, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/pretty.py": 2448541115957861214, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/__init__.py": 15130871412783076140, - "backend/src/plugins/translate/__tests__/test_target_schema.py": 2950009660172053425, - "venv/lib/python3.13/site-packages/authlib/jose/jwk.py": 13560749074922587626, - "venv/lib/python3.13/site-packages/numpy/tests/test_lazyloading.py": 17465787495701737655, - "venv/lib/python3.13/site-packages/httpx/_transports/__init__.py": 5931944625631942279, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/zip-safe": 15240312484046875203, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_apply.py": 12349190935180702377, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_describe.py": 14493300276133670380, - "venv/lib/python3.13/site-packages/fastapi/openapi/constants.py": 1111838716953068285, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_comparison.py": 4611207880323503098, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/relationships.py": 8401569216905291119, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA": 7788873460115135563, - "venv/lib/python3.13/site-packages/itsdangerous/exc.py": 11181421963755661477, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/array_api_info.pyi": 7887489694871300469, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_sort.py": 11941630642630249576, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_markdown.py": 9964642152916165317, - "venv/lib/python3.13/site-packages/jsonschema/tests/__init__.py": 15130871412783076140, - "backend/src/api/routes/dataset_review_pkg/_dependencies.py": 5445855387226126427, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/RECORD": 9678861487447993169, - "backend/tests/test_maintenance_api.py": 2012388734813578069, - "venv/lib/python3.13/site-packages/numpy/ma/testutils.py": 9355402483340137461, - "venv/lib/python3.13/site-packages/urllib3/__init__.py": 1854778274753799815, - "venv/lib/python3.13/site-packages/numpy/polynomial/hermite.py": 6617116180936986481, - "venv/lib/python3.13/site-packages/pydantic/v1/_hypothesis_plugin.py": 6383299780629629080, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_windows.py": 13341168721223961872, - "frontend/static/favicon.png": 16740551781088792605, - "backend/git_repos/remote/test-repo.git/refs/heads/master": 12485529318667335076, - "backend/src/plugins/translate/_llm_http.py": 15686826696693103176, - "venv/lib/python3.13/site-packages/PIL/PsdImagePlugin.py": 4347581352716313298, - "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/METADATA": 1684451390569121499, - "venv/lib/python3.13/site-packages/pip/_internal/wheel_builder.py": 3893922370396791826, - "backend/src/app.py": 4335519376703786949, - "venv/lib/python3.13/site-packages/cffi/setuptools_ext.py": 30796527302561458, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7636/challenge.py": 6388445104761482746, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/__init__.py": 9106887608906281686, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py": 2609365889369107154, - "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/__init__.py": 18019562641348687547, - "venv/lib/python3.13/site-packages/PIL/_avif.cpython-313-x86_64-linux-gnu.so": 5243449968857258659, - "venv/lib/python3.13/site-packages/pyasn1/type/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_non_compound.f90": 8048650253889213460, - "venv/lib/python3.13/site-packages/pygments/styles/friendly_grayscale.py": 16840106759769837649, - "venv/lib/python3.13/site-packages/pygments/lexers/make.py": 5345282370426217663, - "backend/src/plugins/llm_analysis/__tests__/test_service.py": 17317408415318686082, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_ops.py": 14420421526781215500, - "backend/src/dependencies.py": 13564949183453082453, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/padding.py": 11244071766694094554, - "venv/lib/python3.13/site-packages/pillow.libs/libbrotlidec-b57ddf63.so.1.2.0": 10032590058372320813, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ndarray.pyi": 14369009813591437391, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/revocation.py": 16178499278312777474, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/uts46data.py": 1867240043777383728, - "venv/lib/python3.13/site-packages/gitdb/exc.py": 13975852664048821278, - "venv/lib/python3.13/site-packages/numpy/testing/_private/__init__.pyi": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/future/__init__.py": 17688444679736059779, - "venv/lib/python3.13/site-packages/pydantic/_internal/_schema_generation_shared.py": 23345689300073549, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/scoping.py": 17216492046645992674, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/RECORD": 10264342250058307301, - "venv/lib/python3.13/site-packages/pandas/io/stata.py": 14370692318835340323, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arrayobject.py": 13337664596833150958, - "venv/lib/python3.13/site-packages/httpx/_exceptions.py": 18399489130669465891, - "venv/lib/python3.13/site-packages/pandas/core/arraylike.py": 11439602957100017713, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_comparisons.py": 2764694394636775220, - "venv/lib/python3.13/site-packages/rpds/rpds.cpython-313-x86_64-linux-gnu.so": 561326734302492859, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html_style.tpl": 3352086677417301397, - "venv/lib/python3.13/site-packages/pandas/_libs/indexing.cpython-313-x86_64-linux-gnu.so": 13188040757764159731, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/METADATA": 11557342107649194148, - "venv/lib/python3.13/site-packages/keyring/compat/py312.py": 17581691618899404491, - "venv/lib/python3.13/site-packages/smmap/__init__.py": 4557520096828426601, - "venv/lib/python3.13/site-packages/pip/_internal/cli/autocompletion.py": 7651919329635563739, - "venv/lib/python3.13/site-packages/cryptography/__about__.py": 10471312538528457144, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh27697.f90": 4990763135487995517, - "venv/lib/python3.13/site-packages/passlib/tests/test_totp.py": 9150389741890748343, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_pickle.py": 2910383574326146698, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_unique.py": 6234921572794573905, - "venv/lib/python3.13/site-packages/pygments/lexers/rnc.py": 9747352274729854620, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/distributions.h": 17162252287980242413, - "frontend/build/_app/immutable/nodes/37.CZZV_jk9.js": 7416395561147821738, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_3kcompat.h": 5377305123299457337, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/dtype_api.h": 17040779421165903019, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_stride_tricks.py": 1064774375151677743, - "venv/lib/python3.13/site-packages/passlib/handlers/scrypt.py": 10089372287597257402, - "venv/lib/python3.13/site-packages/git/index/__init__.py": 7874728461616959441, - "venv/lib/python3.13/site-packages/pygments/lexers/fortran.py": 6859638690245583968, - "venv/lib/python3.13/site-packages/greenlet/PyGreenlet.hpp": 6366432579621298231, - "backend/src/schemas/dataset_review_pkg/_composites.py": 9530969677898630695, - "examples/maintenance-api-bash.sh": 674396824183793987, - "backend/src/services/git/_gitea.py": 2348444900635153882, - "venv/lib/python3.13/site-packages/authlib/jose/util.py": 14843923624043422219, - "venv/lib/python3.13/site-packages/git/objects/util.py": 691018806932355307, - "frontend/src/routes/dashboards/[id]/components/DashboardTaskHistory.svelte": 2668118032578627739, - "frontend/src/components/TaskLogViewer.svelte": 15158021998452088463, - "venv/lib/python3.13/site-packages/attrs/validators.py": 10346563361083429998, - "venv/lib/python3.13/site-packages/numpy/lib/_format_impl.pyi": 15745512451486888537, - "venv/lib/python3.13/site-packages/pandas/core/indexes/interval.py": 17965911911189276907, - "venv/lib/python3.13/site-packages/pandas/tests/interchange/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/__init__.py": 17454177076687312424, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/json.py": 15085143436056608404, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/__init__.py": 12975130533860125272, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/introspection.py": 14645217065508644154, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_extension_array_equal.py": 16119106336497630796, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_na_indexing.py": 8712547126522523899, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_arithmetic.py": 16829312896275893002, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_quarter.py": 6795026338946382805, - "venv/lib/python3.13/site-packages/numpy/f2py/func2subr.py": 338595621218646492, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_sample.py": 4641567828238191927, - "venv/lib/python3.13/site-packages/pygments/lexers/sieve.py": 15757825442941567629, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/zip-safe": 15240312484046875203, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/jwt_bearer.py": 6973859422068490274, - "venv/lib/python3.13/site-packages/click/decorators.py": 2920877667855377423, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/conftest.py": 2643915042664055969, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_legacy.py": 9226692984248279094, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/core.py": 14576109242055156193, - "venv/lib/python3.13/site-packages/httpx/_transports/default.py": 8391302827983907910, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/privatemod.f90": 8999550841368314739, - "backend/logs/app.log.1": 1282701464293071456, - "venv/lib/python3.13/site-packages/pip/_internal/commands/search.py": 8292218231992728142, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/test_round.py": 7912161077874611432, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_halfyear.py": 9376272342364384767, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_elements_constructors.py": 9279447066034364952, - "venv/lib/python3.13/site-packages/itsdangerous/serializer.py": 14271229091461164933, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_parse_dates.py": 5344929031479212951, - "backend/src/models/assistant.py": 13943482616669949278, - "venv/lib/python3.13/site-packages/jsonschema/tests/_suite.py": 6307666366417438489, - "venv/lib/python3.13/site-packages/pandas/io/excel/_xlrd.py": 14430937200583666658, - "backend/src/services/llm_provider.py": 7079748167598543116, - "venv/lib/python3.13/site-packages/PIL/Image.py": 13615925856053031482, - "venv/lib/python3.13/site-packages/anyio/streams/text.py": 12507591237176920223, - "backend/src/plugins/translate/dictionary.py": 4150581558765697237, - "backend/git_repos/remote/test-repo.git/objects/ae/8d2f5dec5d421b2d6cc1eebaad6d2ef901a90d": 15877648001251681939, - "venv/lib/python3.13/site-packages/apscheduler/executors/asyncio.py": 2230610508870117058, - "venv/lib/python3.13/site-packages/packaging/licenses/_spdx.py": 16440031845441362300, - "backend/:memory:test_tasks": 9776368437354383244, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/type_check.pyi": 9177256991985898824, - "venv/lib/python3.13/site-packages/numpy/core/numerictypes.py": 5776941405348611027, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_html.py": 7947998260347730581, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/dml.py": 5340326603935367534, - "venv/lib/python3.13/site-packages/pip/_internal/distributions/sdist.py": 9490366272695301385, - "venv/lib/python3.13/site-packages/pydantic/_internal/_known_annotated_metadata.py": 9308620143218174987, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_size.py": 8527839563560550806, - "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/RECORD": 9502524172853437600, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/filewrapper.py": 17786759398959482432, - "venv/lib/python3.13/site-packages/pydantic/_migration.py": 17982816821930887921, - "venv/lib/python3.13/site-packages/pygments/lexers/modula2.py": 6575895980250662093, - "frontend/src/lib/components/dataset-review/LaunchConfirmationPanel.svelte": 16168905765241471813, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_indexing.py": 16264430536704066847, - "frontend/build/_app/immutable/chunks/Dqq0IY0w.js": 2853802158798956279, - "venv/lib/python3.13/site-packages/numpy/tests/test_ctypeslib.py": 9592016432737074765, - "venv/lib/python3.13/site-packages/anyio/streams/memory.py": 11762722143503428823, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_crosstab.py": 6631711416347033281, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_algos.py": 5356470832688354593, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/__init__.py": 11009955319062089477, - "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/METADATA": 732041908491732594, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_get.py": 6509102681661636928, - "venv/lib/python3.13/site-packages/greenlet/tests/test_throw.py": 4119265751381210399, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/extension/date/array.py": 18073740473413382768, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_polyutils.pyi": 3841660741524427413, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_wrap.py": 17083394123203662880, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_xlrd.py": 9982457234958102003, - "venv/lib/python3.13/site-packages/PIL/ImageFilter.py": 10974179993355630141, - "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/test_from_dict.py": 4937173601709369119, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_repr.py": 11737029058271003097, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/providers.py": 7267821734584612032, - "venv/lib/python3.13/site-packages/uvicorn/__init__.py": 11517239807926185665, - "backend/src/schemas/dataset_review_pkg/_dtos.py": 10114042767789130927, - "backend/src/api/routes/translate/_metrics_routes.py": 14203374652620439805, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_asof.py": 18383318159051131669, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cython.py": 14695721638531081573, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_boxplot_method.py": 7635131059308651529, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarmath.py": 9762951701352556447, - "venv/lib/python3.13/site-packages/pygments/lexers/inferno.py": 9056274496469409594, - "backend/src/api/routes/translate/_helpers.py": 6946167155296110158, - "venv/lib/python3.13/site-packages/fastapi/openapi/utils.py": 9058442333718187759, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata.py": 2021612995853910808, - "venv/lib/python3.13/site-packages/greenlet/tests/test_cpp.py": 10982107081267457286, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_pipe.py": 8255917221095334212, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/wrapper.py": 4633931060151989960, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_loc.py": 2127584756555503873, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/REQUESTED": 15130871412783076140, - "backend/src/services/security_badge_service.py": 18061005101062867126, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_drop_duplicates.py": 12601598844977346213, - "backend/git_repos/remote/test-repo.git/objects/a7/49f11fad695dff77faf1708c7320867d0be1df": 4641609158325033031, - "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py": 63497920264089252, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_numba.py": 1548992314517942530, - "venv/lib/python3.13/site-packages/PIL/__main__.py": 827665918723937817, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pct_change.py": 18056235438452125034, - "backend/src/models/config.py": 17311376253737985673, - "venv/lib/python3.13/site-packages/urllib3/util/ssl_.py": 11720964010284185952, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_complex/foo90.f90": 15981076495193915107, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_np_datetime.py": 18363183516409621205, - "venv/lib/python3.13/site-packages/rapidfuzz/process.py": 3870006735299537016, - "venv/lib/python3.13/site-packages/_pytest/unraisableexception.py": 4597178803320514675, - "venv/lib/python3.13/site-packages/numpy/lib/_version.pyi": 10804755840730584157, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel_py.py": 9112851333217812996, - "venv/lib/python3.13/site-packages/numpy/random/_pickle.pyi": 16081120364372391381, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/iniconfig/exceptions.py": 16501270224069836264, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/base.cpython-313-x86_64-linux-gnu.so": 8335798324308957127, - "venv/lib/python3.13/site-packages/_pytest/_py/path.py": 8464061867075119556, - "scripts/gen_semantics.py": 11397714264377363083, - "venv/lib/python3.13/site-packages/numpy/random/_common.pyi": 5094115692952609118, - "venv/lib/python3.13/site-packages/idna/uts46data.py": 5698404064763638591, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_resolution.py": 6076761538303762297, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_numerictypes.py": 8836108334624807647, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/RECORD": 3205266407680661753, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_dialect.py": 4700488504252803159, - "venv/lib/python3.13/site-packages/sqlalchemy/connectors/aioodbc.py": 2018840826888846321, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/json.py": 14738429697319670035, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_windows.py": 9171347078900057357, - "venv/lib/python3.13/site-packages/pygments/styles/monokai.py": 12381683616720952636, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py": 5324490103277723813, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_series.py": 16418555817529711079, - "venv/lib/python3.13/site-packages/pygments/lexers/tact.py": 1164971357219795420, - "venv/lib/python3.13/site-packages/pygments/lexers/yang.py": 7409365668425173823, - "venv/lib/python3.13/site-packages/rapidfuzz/utils_cpp.cpython-313-x86_64-linux-gnu.so": 16145829319198889672, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/background.py": 2105814165112049750, - "frontend/playwright-report/trace/snapshot.v8KI4P3m.js": 7854911091722310751, - "venv/lib/python3.13/site-packages/h11/_headers.py": 7592730288271984585, - "frontend/src/lib/components/settings/ApiKeysTab.svelte": 17208249963941978218, - "venv/bin/pyrsa-keygen": 8222542582170363672, - "frontend/src/components/git/DeploymentModal.svelte": 3761818357348583741, - "frontend/build/_app/immutable/chunks/N9kT4r7O.js": 11367070149438687372, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/util.py": 5252158959761945519, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/strings.pyi": 402863478592154500, - "venv/lib/python3.13/site-packages/pandas/_config/__init__.py": 3577026529387563519, - "venv/lib/python3.13/site-packages/keyring/backend_complete.zsh": 14339032329370660432, - "backend/src/api/routes/settings.py": 7176893095762662218, - "backend/src/services/__tests__/test_llm_prompt_templates.py": 12364821019604393930, - "venv/lib/python3.13/site-packages/numpy/fft/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/ecdsa/errors.py": 11755424742691057760, - "venv/lib/python3.13/site-packages/pandas/io/__init__.py": 9767690163638898709, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/METADATA": 2810323639884879396, - "venv/lib/python3.13/site-packages/passlib/tests/sample1c.cfg": 13088198405762342506, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_offsets.py": 4499538899492148499, - "venv/lib/python3.13/site-packages/pandas/core/reshape/melt.py": 14109947554124551986, - "frontend/src/lib/stores/__tests__/test_activity.js": 13851679930048900037, - "backend/git_repos/remote/test-repo.git/objects/8c/4ea7958b7a7e140d27e1e7d8d1f9912fdf5992": 5862166356451798197, - "venv/lib/python3.13/site-packages/pygments/lexers/nit.py": 18262907536841158657, - "backend/src/plugins/translate/orchestrator_run_completion.py": 1246106720048798445, - "backend/src/plugins/translate/preview_response_parser.py": 15690759478655959205, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py": 12264234876933578367, - "venv/lib/python3.13/site-packages/pip/_internal/operations/install/wheel.py": 3531093454660385247, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_get_dummies.py": 14871264482622327003, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_where.py": 14167991754625133668, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_week.py": 5756727157937218128, - "venv/lib/python3.13/site-packages/pandas/tests/base/common.py": 13335865314907577354, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/__init__.py": 15340047930888693984, - "venv/lib/python3.13/site-packages/pandas/io/formats/xml.py": 12235904458551067063, - "venv/lib/python3.13/site-packages/pygments/lexers/ezhil.py": 10294520768762308887, - "frontend/e2e/tests/git.e2e.js": 10018194126657448104, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_dict_compat.py": 18196543090455290455, - "frontend/src/lib/components/layout/__tests__/test_topNavbar.svelte.js": 1873684170678703500, - "venv/lib/python3.13/site-packages/PIL/ImageChops.py": 16368812693381154921, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/qt.py": 12828696264909048448, - "venv/lib/python3.13/site-packages/urllib3/util/retry.py": 17988032431204662756, - "venv/lib/python3.13/site-packages/pandas/_libs/parsers.cpython-313-x86_64-linux-gnu.so": 14134106903573638108, - "backend/src/api/routes/health.py": 13097980848666987664, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_format.py": 1947585389944838076, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/strategies.py": 15673926142454922581, - "venv/lib/python3.13/site-packages/passlib/handlers/des_crypt.py": 15304795681178011265, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/meson.build": 9642189398934130247, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jws_algs.py": 11920621906391796226, - "venv/lib/python3.13/site-packages/numpy/_core/_internal.pyi": 6840742333427164920, - "venv/lib/python3.13/site-packages/pandas/core/window/common.py": 17956497339875932377, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/__init__.py": 348469143777130970, - "venv/lib/python3.13/site-packages/referencing/retrieval.py": 11921179805977833120, - "venv/lib/python3.13/site-packages/pandas/tests/config/test_localization.py": 9524481848419616725, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_arrow_interface.py": 9757086292358759236, - "venv/lib/python3.13/site-packages/starlette/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/referencing/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x86_unix.h": 13709837360414450184, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_quoted_character.py": 2316632434571797367, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_cross.py": 17742712348672218852, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__ufunc_api.h": 4516275133897904047, - "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/core/indexes/datetimelike.py": 4356700619632833878, - "venv/lib/python3.13/site-packages/httpcore/_sync/http2.py": 11167798787131917524, - "venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py": 10265081145401348863, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/response.py": 9594165377270752433, - "venv/lib/python3.13/site-packages/pygments/lexers/_postgres_builtins.py": 2383906454995727700, - "venv/lib/python3.13/site-packages/psycopg2/_ipaddress.py": 12332672835751787869, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_clip.py": 8087139801274517318, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_old_ma.py": 18116460138221458026, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_value_counts.py": 5534713464063604301, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/common.py": 2075178842766962782, - "venv/lib/python3.13/site-packages/PIL/ImageGrab.py": 11114379915762058868, - "venv/lib/python3.13/site-packages/fastapi/middleware/__init__.py": 5289703478893407762, - "venv/lib/python3.13/site-packages/pydantic/errors.py": 3506829204186508192, - "venv/lib/python3.13/site-packages/numpy/testing/__init__.py": 2831275254313750978, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_equivalence.py": 17843623343419137458, - "venv/lib/python3.13/site-packages/pandas/tests/io/sas/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/core/arrays/_arrow_string_mixins.py": 16862663427780315543, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/types.py": 356973910046950951, - "venv/lib/python3.13/site-packages/pandas/io/pytables.py": 17482934215513855928, - "venv/lib/python3.13/site-packages/PIL/Jpeg2KImagePlugin.py": 16905402423248975204, - "venv/lib/python3.13/site-packages/pygments/lexers/ncl.py": 14838368780033177943, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/progress.py": 5951745251426856398, - "venv/lib/python3.13/site-packages/fastapi/middleware/wsgi.py": 3706578020491442104, - "venv/lib/python3.13/site-packages/_pytest/config/argparsing.py": 11156052029258891503, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nditer.pyi": 33523064068376750, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_repeat.py": 11360772447747837958, - "venv/bin/Activate.ps1": 1196103427939049710, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_period.py": 3419297908709788013, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/urllib3/contrib/socks.py": 645086578806871685, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_put.py": 8547660958963625817, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/WHEEL": 9131187629260560775, - "frontend/src/routes/settings/StorageSettings.svelte": 1953157077500445570, - "frontend/src/components/StartupEnvironmentWizard.svelte": 17705330033482916904, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js": 10530710876604536879, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/base.py": 10200916670889920659, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_infer_dtype.py": 1647214604678171565, - "frontend/src/routes/+page.ts": 11160596731849880920, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_masm.asm": 16630507336149184509, - "venv/lib/python3.13/site-packages/pandas/compat/_optional.py": 12714208019736797073, - "frontend/build/_app/immutable/chunks/DqW8GI5e.js": 3350755737206734900, - "backend/src/plugins/translate/__tests__/test_token_budget.py": 2275341408164077909, - "frontend/src/routes/settings/LlmSettings.svelte": 10881646244972773692, - "venv/lib/python3.13/site-packages/pydantic/json_schema.py": 15678278224696353978, - "venv/lib/python3.13/site-packages/numpy/lib/user_array.py": 14003456655595459585, - "venv/lib/python3.13/site-packages/numpy/core/__init__.pyi": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_matmul.py": 9323220618335072725, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/naming.py": 14503932124671438340, - "venv/lib/python3.13/site-packages/keyring/backends/Windows.py": 4103830951042463184, - "venv/bin/numpy-config": 17104619511899110252, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/cursor.py": 8074527784886981710, - "backend/src/core/auth/__tests__/test_auth.py": 6524647391979341734, - "venv/lib/python3.13/site-packages/pygments/lexers/asn1.py": 15030988816882821134, - "venv/lib/python3.13/site-packages/pip/_internal/commands/hash.py": 11824898770873127699, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/assignOnlyModule.f90": 15967199601254912096, - "backend/src/core/__init__.py": 8673978627093182792, - "backend/git_repos/remote/test-repo.git/objects/52/ec4a78c629329b8b572ec9d5205271c111baac": 18054296544295201561, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_isocalendar.py": 5704842983090753914, - "venv/lib/python3.13/site-packages/uvicorn/middleware/message_logger.py": 14825516604555033580, - "venv/lib/python3.13/site-packages/pandas/core/computation/common.py": 5369352684655954608, - "venv/lib/python3.13/site-packages/pip/_internal/commands/completion.py": 4435231315212798769, - "venv/lib/python3.13/site-packages/numpy/polynomial/legendre.py": 1731362089136926666, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_numba.py": 203614377324678234, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_reindex.py": 15794750188594767026, - "venv/lib/python3.13/site-packages/charset_normalizer/api.py": 9172704759115759638, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/adapter.py": 5908944827805063108, - "frontend/src/routes/tools/storage/+page.svelte": 8817697925409987305, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_css.py": 17765129030290410902, - "backend/tests/core/migration/test_archive_parser.py": 8027202509785909637, - "venv/lib/python3.13/site-packages/pip/_internal/operations/install/editable_legacy.py": 8145740626773638218, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_categorical.py": 12897027063618569795, - "venv/lib/python3.13/site-packages/greenlet/tests/test_contextvars.py": 6077482318964702132, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/RECORD": 6187512110158566509, - "venv/lib/python3.13/site-packages/passlib/handlers/mssql.py": 2800599582708170195, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_categorical.py": 18254320571347851153, - "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/RECORD": 4857922668040624663, - "venv/lib/python3.13/site-packages/numpy/lib/_datasource.py": 18136853038949826147, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_dt_accessor.py": 2229616362327032253, - "frontend/src/lib/components/reports/ReportDetailPanel.svelte": 5659980083465412500, - "venv/lib/python3.13/site-packages/pluggy/__init__.py": 8269188363563356631, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_use.f90": 2657057181044959432, - "venv/lib/python3.13/site-packages/git/refs/symbolic.py": 14996822770181935589, - "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/METADATA": 7214286447912789067, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/__init__.pyi": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/pascal.py": 5992422120590352714, - "venv/lib/python3.13/site-packages/pip/_internal/operations/__init__.py": 15130871412783076140, - "frontend/playwright-report/trace/codeMirrorModule.DYBRYzYX.css": 14866915564324637173, - "venv/lib/python3.13/site-packages/requests/hooks.py": 9888227370911151341, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_astype.py": 6578539240745332772, - "venv/lib/python3.13/site-packages/anyio/_core/_asyncio_selector_thread.py": 1760597191437520000, - "venv/lib/python3.13/site-packages/pydantic/alias_generators.py": 5991580234179623842, - "venv/lib/python3.13/site-packages/authlib/oidc/registration/__init__.py": 9448552677419908109, - "venv/lib/python3.13/site-packages/numpy/_core/_ufunc_config.pyi": 9291444594181042963, - "venv/lib/python3.13/site-packages/attr/_make.py": 2348458829123990579, - "venv/lib/python3.13/site-packages/keyring/devpi_client.py": 3445890176686211982, - "venv/lib/python3.13/site-packages/numpy/_core/getlimits.py": 7842717073693731093, - "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/licenses/LICENSE": 12684353321716745791, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/setitem.py": 9552868454186447925, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_arithmetic.py": 16045758521544316139, - "backend/src/services/clean_release/repositories/__init__.py": 10330511711442503831, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_api_info.py": 16491629653122827368, - "venv/lib/python3.13/site-packages/pandas/core/window/online.py": 13551140636252302201, - "venv/lib/python3.13/site-packages/pandas/core/computation/check.py": 16048939716341154196, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_custom_dtypes.py": 12322100282959605055, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_http_headers.py": 13187746870209705951, - "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_at.py": 1029744344133153888, - "frontend/src/lib/stores/__tests__/mocks/navigation.js": 16028014574825445651, - "venv/lib/python3.13/site-packages/numpy/lib/_polynomial_impl.py": 12771179468704314203, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/__init__.py": 2345997696115514124, - "venv/lib/python3.13/site-packages/PIL/ImageFile.py": 15765130658900167517, - "frontend/src/components/backups/BackupList.svelte": 7178110735645066783, - "backend/tests/services/clean_release/test_candidate_manifest_services.py": 14438251683804094377, - "docker/frontend.entrypoint.sh": 11397342350356400663, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libpcre-9513aab5.so.1.2.0": 12298861477332583668, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_invalid.py": 2762344062554575805, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arcsin.csv": 1665171675551692225, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_join.py": 13115782559805895662, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test__version.py": 9037916251087760255, - "venv/lib/python3.13/site-packages/PIL/PcdImagePlugin.py": 922809545463280224, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_overrides.py": 92685611709898742, - "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/RECORD": 173225030102092319, - "venv/lib/python3.13/site-packages/authlib/oidc/discovery/__init__.py": 308178910015974550, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/bitwise_ops.pyi": 15598239133239520456, - "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/RECORD": 6518517239543344179, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/modules.pyi": 14176187662591164602, - "venv/lib/python3.13/site-packages/websockets/legacy/auth.py": 16685128086396181286, - "venv/lib/python3.13/site-packages/pygments/formatters/groff.py": 6480830447984073574, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/common.py": 9354442374897565498, - "venv/lib/python3.13/site-packages/pygments/styles/emacs.py": 4540417536507245024, - "venv/lib/python3.13/site-packages/anyio/_core/_exceptions.py": 11969894261631227715, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_subclass.py": 16342917051908786497, - "venv/lib/python3.13/site-packages/pygments/lexers/ooc.py": 14540210212631538007, - "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/_arrow_utils.py": 17808805047762566525, - "venv/lib/python3.13/site-packages/websockets/streams.py": 15786581670248099415, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/sqltypes.py": 2952996080192295188, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_replace.py": 15992095120302643273, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/structs.py": 4479429145468072604, - "venv/lib/python3.13/site-packages/pandas/core/ops/common.py": 17314999825118928100, - "frontend/src/routes/datasets/DatasetList.svelte": 12931773180198281284, - "venv/lib/python3.13/site-packages/_pytest/monkeypatch.py": 2635774457434545573, - "venv/lib/python3.13/site-packages/ecdsa/test_numbertheory.py": 2117130219401053225, - "frontend/src/components/git/GitOperationsPanel.svelte": 5140779139910068800, - "frontend/build/_app/immutable/chunks/aniH9ONl.js": 11297774342683903539, - "venv/lib/python3.13/site-packages/requests/__version__.py": 6677532709758546816, - "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/jws_eddsa.py": 833927568269372333, - "frontend/build/_app/immutable/chunks/DWg3slHj.js": 16432655720744147297, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_formats.py": 13752366280743004410, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_asymmetric.py": 6903778603779934572, - "backend/src/scripts/create_admin.py": 12963729348700590154, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/scalars.pyi": 3130685119595923378, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_frame_equal.py": 12459816298158655274, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_indexing.py": 11572911419313573163, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_reflection.py": 10520778598547003532, - "venv/lib/python3.13/site-packages/fastapi/openapi/docs.py": 16735218221639179927, - "venv/lib/python3.13/site-packages/numpy/typing/tests/test_isfile.py": 14544060093268573418, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_astype.py": 4023134352880775277, - "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/array.py": 3517673819082574078, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/__init__.py": 1197579313959289096, - "venv/lib/python3.13/site-packages/pygments/lexers/phix.py": 16775285097768256238, - "venv/lib/python3.13/site-packages/numpy.libs/libquadmath-96973f99-934c22de.so.0.0.0": 5098713761946118139, - "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pygments/lexers/lilypond.py": 1088755646568511197, - "frontend/playwright-report/trace/uiMode.html": 2646979321132705707, - "frontend/src/lib/api/validation.js": 10650815174196870103, - "venv/lib/python3.13/site-packages/pytest_asyncio/__init__.py": 8162213292669110211, - "backend/src/core/timezone.py": 15725829269123183582, - "venv/lib/python3.13/site-packages/pandas/compat/_constants.py": 3909166275649444824, - "venv/lib/python3.13/site-packages/numpy/_core/fromnumeric.py": 9409852116555866847, - "venv/lib/python3.13/site-packages/pygments/styles/gruvbox.py": 9489017112545247388, - "backend/tests/scripts/test_clean_release_tui_v2.py": 5872535102885848729, - "backend/tests/test_dashboards_api.py": 15709552949816760924, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/pubprivmod.f90": 8680230823849248800, - "venv/lib/python3.13/site-packages/pip/_internal/index/collector.py": 7454652626329467900, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/progress_bar.py": 15595912766961891283, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_errors.py": 3301889847545579393, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/mock.py": 14010776046610111182, - "venv/lib/python3.13/site-packages/rapidfuzz/process_py.py": 17563673072076876125, - "venv/lib/python3.13/site-packages/greenlet/TExceptionState.cpp": 17617354576371846109, - "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/RECORD": 963865046004908868, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/shape.pyi": 2188930129299348535, - "venv/lib/python3.13/site-packages/pandas/tseries/__init__.py": 2648641118117738895, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_regression.py": 6742646011852052645, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_append.py": 17016125916761365423, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_indexing.py": 4063662953863959087, - "venv/lib/python3.13/site-packages/git/cmd.py": 8854786163152637148, - "venv/lib/python3.13/site-packages/git/objects/commit.py": 12317865358846331802, - "venv/lib/python3.13/site-packages/pycparser/c_generator.py": 14922277346364091122, - "venv/lib/python3.13/site-packages/websockets/client.py": 5229500079651465772, - "venv/lib/python3.13/site-packages/idna/intranges.py": 12536174834761591006, - "venv/lib/python3.13/site-packages/sqlalchemy/connectors/pyodbc.py": 4146960201984489604, - "venv/lib/python3.13/site-packages/numpy/_utils/__init__.pyi": 13530522898409268883, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/__init__.py": 697601512486720554, - "frontend/playwright-report/data/fe71864b4cbf83c1ddaa5774098c6fa987f91ff9.webm": 9945873951473992150, - "frontend/src/lib/stores/__tests__/test_taskDrawer.js": 14849615218402542643, - "venv/lib/python3.13/site-packages/psycopg2/extensions.py": 14197445323992851566, - "backend/tests/test_task_manager.py": 4305202721942095979, - "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/tokens_mixins.py": 9923721909178724437, - "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/licenses/LICENSE": 7959949171752474553, - "venv/lib/python3.13/site-packages/pandas/tests/internals/test_api.py": 11217428888457119601, - "venv/lib/python3.13/site-packages/pyasn1/codec/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/__init__.py": 4752355175318979033, - "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/LICENSE": 8423899413955829149, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/rsa.py": 5392922995791487437, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_codes.py": 13901854719435716195, - "venv/lib/python3.13/site-packages/pandas/core/api.py": 3390809109543982410, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli/py.typed": 9796674040111366709, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/__init__.py": 2397613800206300456, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_stata.py": 3030675968330529905, - "venv/lib/python3.13/site-packages/secretstorage/dhcrypto.py": 8860116996905452758, - "venv/lib/python3.13/site-packages/pandas/io/formats/_color_data.py": 15614976586613738953, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_getitem.py": 18202683049446557047, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/array.py": 13840510238256626632, - "venv/lib/python3.13/site-packages/PIL/PdfImagePlugin.py": 16082854250442815862, - "backend/src/plugins/translate/_llm_call.py": 12276699540223140419, - "backend/src/plugins/translate/orchestrator_runner.py": 6903994426268521649, - "backend/src/services/mapping_service.py": 14740129302452546978, - "venv/lib/python3.13/site-packages/numpy/random/_generator.pyi": 17167649524261942483, - "venv/lib/python3.13/site-packages/tzlocal/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/passlib/tests/test_win32.py": 13932956220195912963, - "venv/lib/python3.13/site-packages/pandas/core/util/hashing.py": 13106575357604888913, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_fillna.py": 7244491410004453166, - "venv/lib/python3.13/site-packages/httpx/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/test_astype.py": 563689238486630866, - "venv/lib/python3.13/site-packages/pandas/tests/util/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arrayterator.pyi": 15722265241660279277, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_observance.py": 18178414966262524534, - "venv/lib/python3.13/site-packages/typing_inspection/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/httpx/_models.py": 6516278895118988231, - "venv/lib/python3.13/site-packages/PIL/__init__.py": 10393984345353752724, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_logical.py": 6242457515917145500, - "venv/lib/python3.13/site-packages/pycparser/ply/cpp.py": 1665654017894222868, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_asof.py": 17616601748321325187, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_mrecords.py": 15952147778503828707, - "venv/lib/python3.13/site-packages/pygments/lexers/bqn.py": 11823648528816858738, - "frontend/build/_app/immutable/nodes/5.WMl_CdkR.js": 10177272070910457308, - "venv/lib/python3.13/site-packages/passlib/utils/decor.py": 21351391767102899, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_polyutils.py": 675639791972685455, - "venv/lib/python3.13/site-packages/pygments/styles/abap.py": 11543320440974964547, - "backend/src/schemas/auth.py": 2548857752520407876, - "venv/lib/python3.13/site-packages/git/types.py": 13960696584646279283, - "venv/lib/python3.13/site-packages/websockets/extensions/base.py": 2457233337788783873, - "venv/lib/python3.13/site-packages/more_itertools/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_libfrequencies.py": 16302676625743291594, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/WHEEL": 691462085217888236, - "backend/src/plugins/translate/orchestrator_planner.py": 16598342286617456459, - "venv/lib/python3.13/site-packages/starlette/applications.py": 13591448461234020757, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_apply_relabeling.py": 3930092097678339743, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/diagnose.py": 17275977405061138181, - "venv/lib/python3.13/site-packages/pandas/_libs/lib.pyi": 3049004444338566197, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_where.py": 16584772339591698754, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_iterrows.py": 3791886201566670087, - "venv/lib/python3.13/site-packages/pygments/styles/vs.py": 4188729978573652106, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_symbol.py": 10792387279408528886, - "venv/lib/python3.13/site-packages/pandas/core/indexes/multi.py": 9115751979327393200, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c": 17333399794446198412, - "venv/lib/python3.13/site-packages/packaging/_structures.py": 13086687542872305890, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi": 11455144434558323236, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_arithmetic.py": 976970179757115407, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/metadata.py": 7204343250279221076, - "venv/lib/python3.13/site-packages/numpy/_core/tests/_locales.py": 18178500267053825979, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix_py.py": 6653895521961110080, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_convert_dtypes.py": 13612212066710266457, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/async_openid.py": 8708980645667847439, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_legacy.py": 12735901522735836481, - "venv/lib/python3.13/site-packages/rsa/pem.py": 3118524021576082054, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/scanner.py": 5640381644804445932, - "venv/lib/python3.13/site-packages/pandas/core/indexing.py": 15507869313676722071, - "venv/lib/python3.13/site-packages/pandas/util/_print_versions.py": 15326663505771588740, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/licenses/AUTHORS": 2987771679926243782, - "venv/lib/python3.13/site-packages/sqlalchemy/util/queue.py": 1289234691048379395, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/__init__.py": 12290228927283601067, - "venv/lib/python3.13/site-packages/charset_normalizer/md.cpython-313-x86_64-linux-gnu.so": 1835299664481804968, - "venv/lib/python3.13/site-packages/pygments/styles/manni.py": 11853576691280294949, - "frontend/src/lib/components/dataset-review/__tests__/source_intake_panel.ux.test.js": 17228280298558782730, - "venv/lib/python3.13/site-packages/greenlet/greenlet_thread_support.hpp": 7773996382104849037, - "venv/lib/python3.13/site-packages/gitdb/test/lib.py": 13294941660283059872, - "venv/lib/python3.13/site-packages/pip/_internal/distributions/wheel.py": 13979536782410081712, - "venv/lib/python3.13/site-packages/pip/_internal/models/target_python.py": 422323125651848065, - "frontend/src/components/git/GitWorkspacePanel.svelte": 4516972512005887443, - "venv/lib/python3.13/site-packages/_pytest/unittest.py": 10848803633530338204, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arccos.csv": 3026156288992132911, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh24662.f90": 4241310200087270990, - "backend/src/services/notifications/service.py": 3120728755335117444, - "venv/lib/python3.13/site-packages/numpy/core/_multiarray_umath.py": 10973016138581934035, - "backend/src/services/clean_release/stages/internal_sources_only.py": 6150576100887638944, - "backend/tests/test_storage_audit_fixes.py": 6119862973635892572, - "venv/lib/python3.13/site-packages/pillow.libs/libxcb-64009ff3.so.1.1.0": 7322566017497612912, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/np_datetime.cpython-313-x86_64-linux-gnu.so": 7840846965295537844, - "backend/tests/services/clean_release/test_report_audit_immutability.py": 4795829940402801626, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/WHEEL": 7454950858448014158, - "venv/lib/python3.13/site-packages/multipart/__init__.py": 6496114190873890851, - "venv/lib/python3.13/site-packages/numpy/lib/_iotools.pyi": 12873243737872788349, - "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/METADATA": 3044554568188160018, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_compound.f90": 15012692484070385863, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/getlimits.pyi": 93747984191461691, - "backend/_batch_convert_defs.py": 2671571251303777016, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_alpha_unix.h": 2759424570606117942, - "frontend/src/lib/utils/debounce.js": 11611676161433422398, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_map.py": 4761668276463940924, - "backend/src/plugins/__init__.py": 17194112070692432889, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_npfuncs.py": 8238385897366878558, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_reductions.py": 17810094294132819208, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py": 6152202474302791232, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_analytics.py": 8155550493311083506, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/claims.py": 11853156183819186599, - "venv/lib/python3.13/site-packages/pandas/core/reshape/api.py": 16364136812252343076, - "venv/lib/python3.13/site-packages/h11/_receivebuffer.py": 4631433251046338381, - "venv/lib/python3.13/site-packages/pygments/lexers/__init__.py": 4627540245914849670, - "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/METADATA": 3179724236887811680, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssltransport.py": 8148652555908329980, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cosh.csv": 9287774220881887502, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_internal/cli/parser.py": 1064209424435927674, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/datonly.f90": 10495925225338237742, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/mypy.ini": 4763385838822685881, - "frontend/src/lib/components/dataset-review/__tests__/us3_execution_batch.ux.test.js": 17821671753127603158, - "venv/lib/python3.13/site-packages/numpy/_core/_exceptions.pyi": 3661113433078225952, - "venv/lib/python3.13/site-packages/pandas/io/json/_table_schema.py": 3103776773020058805, - "venv/lib/python3.13/site-packages/pycparser/ply/yacc.py": 4218889705926129841, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_errstate.py": 10788459171326750780, - "venv/lib/python3.13/site-packages/packaging/py.typed": 15130871412783076140, - "frontend/src/lib/api/translate.js": 18140498250896378509, - "frontend/src/routes/datasets/+page.svelte": 4090458050277453670, - "backend/tests/services/clean_release/test_compliance_task_integration.py": 1554378264976811661, - "venv/lib/python3.13/site-packages/websockets/utils.py": 17624459810483092475, - "backend/src/plugins/translate/preview_constants.py": 12447768695944862994, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/theme.py": 14225878259183479398, - "venv/lib/python3.13/site-packages/numpy/random/_sfc64.pyi": 3536657185495782642, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_unary.py": 2573825678342936734, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_formats.py": 9738552308554950419, - "venv/lib/python3.13/site-packages/pyasn1/type/opentype.py": 340146737126677655, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_ufunclike.py": 13752381070039804384, - "venv/lib/python3.13/site-packages/pandas/_libs/join.pyi": 369262334342439364, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_c_parser_only.py": 3038797485572319804, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/scalars.py": 3468820466230647963, - "venv/lib/python3.13/site-packages/uvicorn/protocols/http/auto.py": 15947958974558543657, - "venv/lib/python3.13/site-packages/pygments/styles/trac.py": 13968346768164381833, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_overlaps.py": 8287716909793575347, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/models.py": 15928924478695638423, - "venv/lib/python3.13/site-packages/PIL/ImageTk.py": 17063969714816564357, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/licenses/LICENSE": 2345070715845618109, - "venv/lib/python3.13/site-packages/pygments/lexers/robotframework.py": 11507713622179102496, - "venv/lib/python3.13/site-packages/_pytest/fixtures.py": 1442767529726551116, - "venv/lib/python3.13/site-packages/jaraco/functools/__init__.py": 15334412919279565528, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/RECORD": 3617343778671172258, - "venv/lib/python3.13/site-packages/pygments/styles/vim.py": 2621036947954523349, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/errors.py": 12777931960088171310, - "venv/lib/python3.13/site-packages/numpy/f2py/_src_pyf.pyi": 8916922961301555974, - "frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js": 10735454478982675155, - "venv/lib/python3.13/site-packages/pandas/_libs/window/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/casting.py": 12226803454582253097, - "venv/lib/python3.13/site-packages/pillow.libs/liblzma-61b1002e.so.5.8.2": 11405063484938458842, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/apply.py": 3906017176873949738, - "frontend/build/_app/immutable/chunks/BtMNxLZr.js": 5550630982455761657, - "backend/src/core/__tests__/test_superset_profile_lookup.py": 12374214375171590188, - "venv/lib/python3.13/site-packages/numpy/random/mtrand.pyi": 17144590106028661128, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE": 8359973023624924624, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_util.py": 16908393806993809474, - "backend/src/plugins/translate/preview_session_ops.py": 2497494071534748391, - "venv/lib/python3.13/site-packages/rsa/core.py": 13203947234024924497, - "venv/lib/python3.13/site-packages/pydantic/_internal/_validate_call.py": 4078236486720616395, - "venv/lib/python3.13/site-packages/numpy/random/_examples/numba/extending_distributions.py": 209769687436320665, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_tz_localize.py": 14495969595744172955, - "backend/alembic/versions/f0e9d8c7b6a5_cascade_ondelete_all_env_fks.py": 18274103435952144919, - "venv/lib/python3.13/site-packages/PIL/DcxImagePlugin.py": 11767274218348117481, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_toml_compat.py": 10196543528439925412, - "venv/lib/python3.13/site-packages/jeepney/tests/secrets_introspect.xml": 10717038359151125278, - "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/hmac.py": 18132740541139891824, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/request.py": 17642741955458391050, - "venv/lib/python3.13/site-packages/ecdsa/ssh.py": 17010933326090778158, - "venv/lib/python3.13/site-packages/cffi/lock.py": 13507686939203117974, - "venv/lib/python3.13/site-packages/jaraco/classes/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/screen.py": 6933591906297023845, - "venv/lib/python3.13/site-packages/numpy/_core/_type_aliases.py": 1644743742545329282, - "venv/lib/python3.13/site-packages/pandas/core/window/__init__.py": 15180240812077877933, - "venv/lib/python3.13/site-packages/PIL/BmpImagePlugin.py": 16682567630621529903, - "venv/lib/python3.13/site-packages/pygments/lexers/actionscript.py": 8829560731160428621, - "venv/lib/python3.13/site-packages/numpy/polynomial/polyutils.pyi": 8195943561787777127, - "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/WHEEL": 7127684561765977531, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_replace.py": 18039668944453454689, - "venv/lib/python3.13/site-packages/pip/_internal/__init__.py": 7060345458485901709, - "venv/lib/python3.13/site-packages/urllib3/http2/__init__.py": 62108352209996836, - "venv/lib/python3.13/site-packages/charset_normalizer/md__mypyc.cpython-313-x86_64-linux-gnu.so": 12629680116730190225, - "venv/lib/python3.13/site-packages/pygments/lexers/urbi.py": 1611762607688882372, - "venv/lib/python3.13/site-packages/websockets/headers.py": 13587146967490088657, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/datasource.pyi": 16752667877866430577, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_is_monotonic.py": 12899848089975919515, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/WHEEL": 16784970174376303810, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_box_unbox.py": 7579587620530953711, - "venv/lib/python3.13/site-packages/_pytest/pytester_assertions.py": 1899505062406979663, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexer.py": 14400766876373764268, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_pandas.py": 10894229569442891394, - "frontend/src/lib/components/reports/__tests__/fixtures/reports.fixtures.js": 9590309593907049070, - "backend/src/services/clean_release/policy_resolution_service.py": 1025435122296379201, - "venv/lib/python3.13/site-packages/pandas/_libs/algos.pyi": 22405377601029952, - "venv/bin/py.test": 2593802493707545818, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/REQUESTED": 15130871412783076140, - "frontend/build/_app/immutable/chunks/CuzmfnQu.js": 4320326097426684598, - "backend/src/__init__.py": 11250920420388310655, - "frontend/build/_app/immutable/chunks/C9YJaesY.js": 17698859127816820470, + "venv/lib/python3.13/site-packages/uvicorn/__main__.py": 6086938803696646644, + "docs/api/html/group__test__cte__with__schema__tables.html": 5116514654709271953, + "backend/src/core/middleware/trace.py": 10060731108870842086, + "docs/api/html/group__parse__llm__response.html": 3772780281405997991, + "docs/api/html/group____resolve__current__user__git__identity.html": 9945081661871337184, + "venv/lib/python3.13/site-packages/pandas/_testing/contexts.py": 11714205921752896137, + "backend/src/plugins/translate/preview_review.py": 5584592578627646560, + "backend/git_repos/remote/test-repo.git/description": 15262637409357137373, + "venv/lib/python3.13/site-packages/pydantic/experimental/missing_sentinel.py": 1637241331832367709, + "docs/api/html/group__extract__tables__from__sql__span.html": 1554822379773857556, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/util.py": 2866856507760047219, "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_groupby_subclass.py": 5540948578269213810, - "venv/lib/python3.13/site-packages/pandas/_libs/window/aggregations.cpython-313-x86_64-linux-gnu.so": 16327106317503267067, - "venv/lib/python3.13/site-packages/numpy/_core/einsumfunc.py": 11393954913234866059, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/oauth1_session.py": 1911069558956893789, - "venv/lib/python3.13/site-packages/cryptography/x509/base.py": 9124948989225782039, - "venv/lib/python3.13/site-packages/pandas/tests/test_multilevel.py": 10500316376521962061, - "venv/lib/python3.13/site-packages/pygments/formatters/terminal256.py": 11473927781167132440, - "venv/lib/python3.13/site-packages/pygments/regexopt.py": 16073437303824961930, - "venv/lib/python3.13/site-packages/numpy/_typing/_dtype_like.py": 1598511035344858524, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_arithmetic.py": 13320788210970132239, - "venv/lib/python3.13/site-packages/pip/_internal/req/req_install.py": 7181005402818830655, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/mod.pyi": 10591120373577657317, - "venv/lib/python3.13/site-packages/numpy/_core/defchararray.pyi": 2277933368373498515, - "backend/src/plugins/translate/sql_generator.py": 14497259013250233663, - "venv/lib/python3.13/site-packages/click/formatting.py": 6694583529073729642, - "backend/src/schemas/validation.py": 17282689016900793292, - "venv/lib/python3.13/site-packages/psycopg2/__init__.py": 15798412693009721199, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/RECORD": 18294169019244826301, - "venv/lib/python3.13/site-packages/requests/models.py": 9104898985870652256, - "venv/lib/python3.13/site-packages/_pytest/_io/pprint.py": 11202117031437223527, - "venv/lib/python3.13/site-packages/passlib/ext/django/utils.py": 8118896525895185626, - "backend/src/api/routes/dashboards/_router.py": 8641007051243802224, - "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_builtin_md4.py": 16840174243259839994, - "venv/lib/python3.13/site-packages/numpy/lib/stride_tricks.pyi": 5879290708972838025, - "venv/lib/python3.13/site-packages/pandas/util/_validators.py": 10201915528715968165, - "venv/lib/python3.13/site-packages/ecdsa/test_sha3.py": 12459459298663975730, - "venv/lib/python3.13/site-packages/pygments/formatters/pangomarkup.py": 17135620955205945255, - "venv/lib/python3.13/site-packages/websockets/legacy/__init__.py": 12332512329533591682, - "venv/lib/python3.13/site-packages/numpy/_core/arrayprint.py": 1262543237476191714, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_row.py": 918740441973901148, - "venv/lib/python3.13/site-packages/pygments/lexers/teraterm.py": 16132676290138105984, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/pyodbc.py": 8175468565413744516, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/licenses/LICENSE": 1424673738228762254, - "venv/lib/python3.13/site-packages/starlette/requests.py": 4582424111350387010, - "venv/lib/python3.13/site-packages/attr/converters.py": 5179615793507170642, - "venv/lib/python3.13/site-packages/greenlet/TThreadStateDestroy.cpp": 13749797532421836328, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/METADATA": 3390257212824996989, - "venv/lib/python3.13/site-packages/pygments/lexers/pointless.py": 17552020039609007881, - "frontend/build/index.html": 5356277431790124133, - "backend/src/plugins/translate/_batch_proc.py": 5830558923416766212, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/shape.pyi": 17197248408326188931, - "venv/lib/python3.13/site-packages/pygments/styles/stata_dark.py": 324072437809944751, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_unsupported.py": 9115440166074553860, - "venv/lib/python3.13/site-packages/keyring/backends/SecretService.py": 17482492072907438453, - "backend/src/services/clean_release/repositories/candidate_repository.py": 1901083195512401226, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_cat_accessor.py": 4304062895283374927, - "venv/lib/python3.13/site-packages/_pytest/_py/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/WHEEL": 5160964596297665692, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_formats.py": 3525283725314253763, - "frontend/src/lib/components/layout/Breadcrumbs.svelte": 8720668241659707399, - "frontend/src/lib/components/translate/__tests__/test_correction_cell.svelte.js": 7400069550465334990, - "venv/lib/python3.13/site-packages/websockets/sync/server.py": 7966978001578584901, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/help.py": 3124654001287175629, - "venv/lib/python3.13/site-packages/pandas/tests/extension/conftest.py": 16886862391161243448, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_timedeltas.py": 4118671843063545221, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_delete.py": 5958440386632506587, - "venv/lib/python3.13/site-packages/fastapi/encoders.py": 1914192268055730299, - "venv/lib/python3.13/site-packages/pygments/formatters/terminal.py": 14380579279194052030, - "backend/src/api/routes/validation/__tests__/test_validation_api.py": 3854767876193048673, - "venv/lib/python3.13/site-packages/pygments/scanner.py": 5640381644804445932, - "frontend/src/routes/datasets/review/__tests__/dataset_review_entry.test.js": 18445680453131807754, - "venv/lib/python3.13/site-packages/pygments/lexers/iolang.py": 10997512999728724130, - "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/METADATA": 11759004913807981650, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/warnings_and_errors.pyi": 3151453262733619734, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_datetime.py": 11417836378782978454, - "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_fillna.py": 16297834601116528166, - "venv/lib/python3.13/site-packages/pandas/tests/extension/json/test_json.py": 12422315190455428620, - "venv/lib/python3.13/site-packages/pygments/styles/autumn.py": 8750937312198920971, - "venv/lib/python3.13/site-packages/attr/_next_gen.py": 16353246941851015420, - "venv/lib/python3.13/site-packages/pip/_internal/cli/base_command.py": 10660882478126415399, - "backend/src/models/filter_state.py": 9299838116029912439, - "backend/tests/test_task_persistence.py": 14626604091774325821, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi": 13016654355866474644, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_indexing.py": 5910217172351020811, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_semicolon_split.py": 8153770165829451525, - "venv/lib/python3.13/site-packages/pygments/lexers/resource.py": 8057351545636349791, - "venv/lib/python3.13/site-packages/pip/_internal/models/candidate.py": 3099785363867247334, - "venv/lib/python3.13/site-packages/greenlet/TBrokenGreenlet.cpp": 10822436772777706192, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/authorization_server.py": 724388765673082720, - "venv/lib/python3.13/site-packages/numpy/_pytesttester.py": 17737911110576747508, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_interpolate.py": 7354685880215444946, - "backend/tests/services/dataset_review/test_superset_matrix.py": 3788494235626090289, - "venv/lib/python3.13/site-packages/PIL/_imagingmath.cpython-313-x86_64-linux-gnu.so": 77725273398858074, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_asfreq.py": 2701081989348180239, - "venv/lib/python3.13/site-packages/pandas/tests/test_errors.py": 10116716310156374885, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/LICENSE": 8177430849046795595, - "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_to_xml.py": 8477770807916990981, - "venv/lib/python3.13/site-packages/pandas/util/_tester.py": 1033951890304257539, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/fromnumeric.pyi": 6708743411405679061, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py": 6509914623926583629, - "venv/bin/pyrsa-sign": 15564653706771700451, - "venv/lib/python3.13/site-packages/pygments/lexers/shell.py": 3842338968014057744, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/cache.py": 3177663126928467950, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_common.py": 10797243274520625867, - "backend/src/plugins/translate/_utils.py": 7134223868160185578, - "venv/lib/python3.13/site-packages/starlette/types.py": 6372850128669191435, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_file_handling.py": 732772718210067599, - "venv/lib/python3.13/site-packages/referencing/tests/test_exceptions.py": 10846225989746274213, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/resultproxy.pyx": 5760108632332714287, - "frontend/src/lib/stores/translationRun.js": 10005138082029605368, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/filter.py": 16846063190466267618, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro.py": 183817263146423033, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/__main__.py": 111505188798650285, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/wrapper.py": 14599195010683170123, - "venv/lib/python3.13/site-packages/pygments/style.py": 17393199235575070210, - "scripts/generate_financial_arrears_data.py": 15989529185799374517, - "venv/lib/python3.13/site-packages/pyasn1/codec/native/decoder.py": 15336592439379775543, - "venv/lib/python3.13/site-packages/numpy/polynomial/laguerre.py": 151202984060101867, - "venv/lib/python3.13/site-packages/ecdsa/__init__.py": 6237633580090653788, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_cov_corr.py": 8117511855230249212, - "venv/lib/python3.13/site-packages/pandas/tests/util/conftest.py": 11143177766735481660, - "backend/src/core/utils/superset_compilation_adapter.py": 13895835815393226662, - "venv/lib/python3.13/site-packages/numpy/testing/_private/extbuild.pyi": 18253950285509265097, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_timedeltaindex.py": 2359681317403710563, - "backend/src/plugins/llm_analysis/models.py": 7637744212927477541, - "venv/lib/python3.13/site-packages/requests/certs.py": 16052880877156864882, - "venv/lib/python3.13/site-packages/pandas/core/interchange/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/METADATA": 9458019064618635438, - "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/oauth2_session.py": 7076806577412682835, - "venv/bin/pyrsa-priv2pub": 16766314338551408621, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/legacy/resolver.py": 2492962412506082234, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/operators.py": 5584982192355398255, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_deprecations.py": 8310244516175542839, - "backend/src/core/task_manager/graph.py": 3769962371015813191, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/well_known.py": 7183795183137931709, - "venv/lib/python3.13/site-packages/numpy/f2py/f2py2e.py": 738588649412338185, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_reductions.py": 8258332365408303156, - "venv/lib/python3.13/site-packages/pip/_internal/models/scheme.py": 4101322315594430874, - "venv/lib/python3.13/site-packages/rapidfuzz/__init__.py": 12462153783886855740, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/conversion.cpython-313-x86_64-linux-gnu.so": 9014806524727977333, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/provision.py": 7362363963464621570, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_swaplevel.py": 3584770792383216626, - "frontend/src/services/adminService.js": 5974657342670197690, - "backend/alembic/versions/9f8e7d6c5b4a_add_is_multimodal_to_llm_providers.py": 11090205342799426943, - "frontend/build/_app/immutable/nodes/28.CFr4yuZi.js": 11507888823107806454, - "frontend/build/_app/immutable/chunks/C20922N0.js": 14681700380768364777, - "venv/lib/python3.13/site-packages/pandas/_libs/missing.cpython-313-x86_64-linux-gnu.so": 1990755879067132155, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/wheel.py": 828222664427570058, - "venv/lib/python3.13/site-packages/pydantic_core/core_schema.py": 8106298745123589494, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/nditer.py": 10038360623032425884, - "venv/lib/python3.13/site-packages/pygments/lexers/_lasso_builtins.py": 4006621424665751347, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_replace.py": 4953527309376861139, - "backend/tests/scripts/test_clean_release_tui.py": 17813178142456308266, - "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/client_mixin.py": 17980753662107479779, - "venv/lib/python3.13/site-packages/pyasn1/compat/integer.py": 7365270971777550573, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/information_schema.py": 8551227132710897346, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_inference.py": 5741637509343419942, - "venv/lib/python3.13/site-packages/keyring/compat/__init__.py": 7578020229796085753, - "venv/lib/python3.13/site-packages/PIL/_version.py": 3025206805667405876, - "venv/lib/python3.13/site-packages/pandas/core/arrays/base.py": 664515424699746697, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_partial_slicing.py": 15567512240469921599, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_count.py": 16947194157984708529, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_repr.py": 5577699046802107144, - "venv/lib/python3.13/site-packages/cffi/ffiplatform.py": 6782148110863549472, - "venv/lib/python3.13/site-packages/numpy/_core/_methods.py": 16805668769357938792, - "venv/lib/python3.13/site-packages/pandas/plotting/_misc.py": 10202078355301731720, - "venv/lib/python3.13/site-packages/gitdb/utils/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/__init__.py": 1948986914452928735, - "venv/lib/python3.13/site-packages/pluggy/_manager.py": 18202550145040079612, - "frontend/src/lib/components/reports/__tests__/report_detail.integration.test.js": 13812015120538720344, - "venv/lib/python3.13/site-packages/fastapi/exceptions.py": 12665775976182239091, - "venv/lib/python3.13/site-packages/click/utils.py": 13475604420010022458, - "venv/lib/python3.13/site-packages/pydantic/fields.py": 4142211199816898047, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arrayterator.py": 3076316311545674897, - "venv/lib/python3.13/site-packages/_pytest/cacheprovider.py": 5114545353355728201, - "venv/lib/python3.13/site-packages/PIL/FpxImagePlugin.py": 18245056799205041866, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/reshaping.py": 18085648077811502689, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/queue.py": 7820997545569991670, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_arrayobject.py": 9578555381494297966, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/bootstrap.py": 3865947239497500815, - "frontend/src/lib/components/translate/TranslationRunGlobalIndicator.svelte": 13452471817010485891, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/scope.py": 4096190764836489091, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/__init__.py": 15130871412783076140, - "backend/src/core/migration/archive_parser.py": 16510017196974398795, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/authorization_server.py": 2491654903543600678, - "venv/lib/python3.13/site-packages/pyasn1/type/base.py": 6801504886392649787, - "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_cpp_avx2.cpython-313-x86_64-linux-gnu.so": 12574929384355254457, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/errors.py": 4817746830102488448, - "venv/lib/python3.13/site-packages/passlib/handlers/windows.py": 8969739861295277439, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE": 17284252174641192866, - "venv/lib/python3.13/site-packages/numpy/char/__init__.pyi": 12214207343146244743, - "venv/lib/python3.13/site-packages/git/objects/submodule/base.py": 10140490301897269395, - "backend/src/models/dataset_review_pkg/_profile_models.py": 16323179255423210120, - "venv/lib/python3.13/site-packages/anyio/streams/file.py": 15232345967545920863, - "venv/lib/python3.13/site-packages/fastapi/security/http.py": 8465565118555441408, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/mt19937-testset-1.csv": 16349400027062875699, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_callback.py": 1689177048527329209, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_orm_types.py": 5508682532707462217, - "venv/lib/python3.13/site-packages/cryptography/x509/ocsp.py": 17973800752927680404, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_holiday.py": 8541197358003711845, + "docs/api/html/group__TranslatePreviewRoutesModule.html": 17344666533968003326, + "backend/tests/services/clean_release/test_publication_service.py": 12656754025482108211, "backend/src/plugins/translate/orchestrator_sql_rows.py": 13887342178846174274, - "backend/tests/services/clean_release/test_policy_resolution_service.py": 684362936473488668, - "backend/tests/test_log_persistence.py": 14027169507280030218, - "venv/lib/python3.13/site-packages/pygments/lexers/codeql.py": 4254046699692048717, - "venv/lib/python3.13/site-packages/websockets/legacy/handshake.py": 376095144657994920, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufunc_config.py": 14728417910466146460, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_strings.py": 7168544888340296373, - "venv/lib/python3.13/site-packages/pandas/_libs/writers.cpython-313-x86_64-linux-gnu.so": 6878855127769203372, - "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/test_from_records.py": 12217508428903265797, - "venv/lib/python3.13/site-packages/git/index/util.py": 5022401275553420722, - "venv/lib/python3.13/site-packages/jsonschema/tests/typing/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/lib/_array_utils_impl.py": 14446508217220482719, - "venv/lib/python3.13/site-packages/numpy/testing/overrides.pyi": 17408923209056015964, - "venv/lib/python3.13/site-packages/dotenv/main.py": 7408889670575271484, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py3-objarr.npy": 17303060773267383537, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dot.py": 16876560325283070437, - "venv/lib/python3.13/site-packages/pandas/io/excel/__init__.py": 6662687963241471393, - "venv/lib/python3.13/site-packages/pygments/lexers/savi.py": 95400050302239274, - "backend/git_repos/remote/test-repo.git/objects/aa/ea042a37c6f7bd010d91db93951328da7f01cc": 11936716919619613939, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/syntax.py": 18070449217682341495, - "venv/lib/python3.13/site-packages/numpy/tests/test__all__.py": 10689265249302359388, - "venv/lib/python3.13/site-packages/pandas/core/indexes/timedeltas.py": 13653393430363556843, - "venv/lib/python3.13/site-packages/pip/py.typed": 10243553515949422671, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/exclusions.py": 15852672500377116297, - "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/METADATA": 3786116428839780263, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/version.py": 5000350193835202949, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_odf.py": 15484940480924122966, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_free.f90": 10939657740734987454, - "venv/lib/python3.13/site-packages/numpy/_core/memmap.pyi": 14124415711399771715, - "venv/lib/python3.13/site-packages/pygments/lexers/freefem.py": 9851243865301700231, - "venv/lib/python3.13/site-packages/pandas/core/tools/times.py": 6560679305255812809, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_raises.py": 9678418010293693275, - "venv/lib/python3.13/site-packages/fastapi/security/base.py": 15674297568104917749, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_util.py": 13997184496924925110, - "venv/lib/python3.13/site-packages/pydantic/functional_serializers.py": 15285359935059345032, - "venv/lib/python3.13/site-packages/h11/py.typed": 12358286306858197118, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/np_datetime.pyi": 2884703536776830012, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/WHEEL": 16097436423493754389, - "backend/src/core/database.py": 7373636721634813170, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize.py": 15511055314565873928, - "backend/src/core/superset_client/_datasets.py": 10922216252382553392, - "venv/lib/python3.13/site-packages/pip/_internal/network/auth.py": 6159841209618753296, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_django.py": 8455054295577203929, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_resolution.py": 18198858926948468112, - "venv/lib/python3.13/site-packages/numpy/random/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_config/display.py": 433650013567734821, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/__init__.py": 4781700006554860887, - "venv/lib/python3.13/site-packages/pydantic/_internal/_git.py": 8760779092674434712, - "venv/lib/python3.13/site-packages/ecdsa/eddsa.py": 15966858338456571506, - "venv/lib/python3.13/site-packages/pygments/lexers/cplint.py": 13990118342267278047, - "venv/lib/python3.13/site-packages/pandas/_libs/pandas_parser.cpython-313-x86_64-linux-gnu.so": 18056339336364727359, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/identity.py": 326059526167697655, - "frontend/src/routes/login/+page.svelte": 2655837067927461296, - "venv/lib/python3.13/site-packages/pandas/plotting/_core.py": 6766059152026241747, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/__init__.py": 15991623390785635773, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/index.py": 15694995431926521471, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_indexing.py": 6539365174681852769, - "venv/lib/python3.13/site-packages/pandas/_libs/interval.pyi": 15698173755300703836, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/__init__.py": 16434403703599680307, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/jupyter.py": 4446535289156468239, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_encoding.py": 6622474614967398246, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/windows.py": 16452996247375488034, - "venv/lib/python3.13/site-packages/pip/_internal/req/req_file.py": 5180401483285462901, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_doc.py": 7865575374100528149, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/markers.py": 5247208668583898949, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_map.py": 32086858815359344, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_npfuncs.py": 6132674295193898715, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/registry.py": 13306388361671753373, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_drop.py": 11341278355685583133, - "frontend/src/components/PasswordPrompt.svelte": 2098675312823151283, - "backend/src/core/plugin_loader.py": 8193009851819399597, - "backend/src/core/superset_client/_charts.py": 15609724925814918066, - "venv/lib/python3.13/site-packages/psycopg2/sql.py": 18041240927130590808, - "venv/lib/python3.13/site-packages/numpy/f2py/src/fortranobject.h": 5980733638838895780, - "venv/lib/python3.13/site-packages/pandas/_config/config.py": 1494288055210911451, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_functions.py": 16376319335326812580, - "venv/lib/python3.13/site-packages/pygments/lexers/wgsl.py": 9718384325049172855, - "backend/src/services/clean_release/compliance_execution_service.py": 11572933296960110695, - "backend/src/api/routes/reports.py": 11259252279199691691, - "venv/lib/python3.13/site-packages/pip/_internal/utils/unpacking.py": 106471890743211548, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_ndarray.py": 6863874753941288585, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api2.pyx": 15936470837420356071, - "venv/lib/python3.13/site-packages/jose/constants.py": 10880650415673457194, - "venv/lib/python3.13/site-packages/pip/_internal/cli/progress_bars.py": 7584699216537478969, - "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension_cpp.cpp": 4590574206187223887, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/adapters.py": 2224938661429637508, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_sh_gcc.h": 3574353221233465215, - "venv/lib/python3.13/site-packages/numpy/ma/README.rst": 13203411621071845216, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/content": 12465123883296161860, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/string.f": 17328443345813567449, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_internals.py": 10472508540875131797, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reindex.py": 16348619731902304844, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_misc.py": 16393451200513733144, - "venv/lib/python3.13/site-packages/fastapi/_compat/v1.py": 9776181748061371513, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_fillna.py": 13675584998644907265, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_tools.py": 13994164937603424236, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py": 1359143503575245224, - "venv/lib/python3.13/site-packages/PIL/ImageMath.py": 7395449734007598797, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/funcfortranname.pyf": 1361426175133186231, - "venv/lib/python3.13/site-packages/referencing/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_extension.py": 4831602527247293866, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/npyio.pyi": 14147712281086095231, - "venv/lib/python3.13/site-packages/numpy/f2py/cfuncs.py": 10803011906582324302, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_reshape.py": 10576230966727810832, - "venv/lib/python3.13/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz": 17626265752554406355, - "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/websockets_sansio_impl.py": 17221368219485351394, - "frontend/e2e/fixtures/auth.fixture.js": 13628564118439575126, - "venv/lib/python3.13/site-packages/numpy/core/_utils.py": 14108063453670701289, - "frontend/src/components/git/GitMergeDialog.svelte": 10276431474456171235, - "venv/lib/python3.13/site-packages/attr/validators.py": 4453080662115911998, - "venv/lib/python3.13/site-packages/numpy/ma/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/jeepney/io/tests/test_blocking.py": 6312017389529916004, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/bitwise_ops.py": 14350609278188982939, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reindex_like.py": 1407890639206728014, - "venv/lib/python3.13/site-packages/urllib3/util/ssltransport.py": 1175688460659745788, - "backend/test.db": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_libs/reshape.pyi": 88721900806893992, - "backend/git_repos/remote/test-repo.git/objects/71/47ad0836409b35c1650dddf5fa6329ba61a824": 16601919569600972016, - "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/RECORD": 14375680579341422646, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py": 6067836157632573182, - "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_digest.py": 7988469818593853943, - "venv/lib/python3.13/site-packages/httpcore/_async/socks_proxy.py": 9026788710898138090, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py": 14216912708889351810, - "frontend/src/routes/datasets/review/useReviewSession.js": 2360677870127730232, - "venv/lib/python3.13/site-packages/greenlet/greenlet_allocator.hpp": 11041111583319491309, - "venv/lib/python3.13/site-packages/pygments/lexers/_cocoa_builtins.py": 15468347167912293394, - "frontend/src/routes/profile/__tests__/fixtures/profile.fixtures.js": 11794595959206318249, - "venv/lib/python3.13/site-packages/ecdsa/test_keys.py": 17117188373419689467, - "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/METADATA": 6502714564886871819, - "venv/lib/python3.13/site-packages/apscheduler/__init__.py": 8652514118183227412, - "venv/lib/python3.13/site-packages/starlette/__init__.py": 3252794766897205870, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py": 9623344347519683527, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/matrix.pyi": 15667024840812783911, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_xlsxwriter.py": 8445547874832015203, - "venv/lib/python3.13/site-packages/git/config.py": 1724894144987553201, - "venv/lib/python3.13/site-packages/dateutil/parser/_parser.py": 9443336890192151397, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_resampler_grouper.py": 8388490036390951341, - "backend/src/services/clean_release/__tests__/test_audit_service.py": 10901982516436251314, - "backend/git_repos/remote/test-repo.git/hooks/pre-commit.sample": 102291230237676317, - "venv/lib/python3.13/site-packages/numpy/_core/__init__.pyi": 2783897020308040960, - "venv/lib/python3.13/site-packages/h11/_connection.py": 6971907312737339559, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/evaluator.py": 6348022789899831255, - "venv/lib/python3.13/site-packages/jsonschema/_format.py": 8987698648383779883, - "venv/lib/python3.13/site-packages/pip/_internal/commands/check.py": 6937252393012787214, - "venv/lib/python3.13/site-packages/passlib/tests/test_hosts.py": 8284535274820610802, - "docker/backend.Dockerfile": 3370913626880503214, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/hooks.py": 9888227370911151341, - "venv/lib/python3.13/site-packages/_pytest/stash.py": 14430252294763173610, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_groupby_shift_diff.py": 1210657479716368827, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_index_as_string.py": 292438690259156869, - "venv/lib/python3.13/site-packages/pydantic_settings/__init__.py": 4374954204580208673, - "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/fields.py": 8923326131649837922, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_insert.py": 11635164392966270621, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_xs.py": 11073752361562791165, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_slice.py": 9936085512921529417, - "backend/src/api/routes/translate/__init__.py": 6357999798616465776, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arrayprint.py": 5912583751693302370, - "venv/lib/python3.13/site-packages/uvicorn/supervisors/multiprocess.py": 10047012560534876149, - "venv/bin/normalizer": 10972303485259566838, - "venv/lib/python3.13/site-packages/pygments/lexers/_sourcemod_builtins.py": 11809503654078535014, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_add_prefix_suffix.py": 8367793476246001244, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py": 7852235015155694076, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/licenses/LICENSE": 9235234428907927646, - "venv/lib/python3.13/site-packages/multipart/multipart.py": 26386459953377432, - "venv/lib/python3.13/site-packages/pygments/lexers/business.py": 10410439210806697214, - "venv/lib/python3.13/site-packages/gitdb/utils/encoding.py": 1668793658272579497, - "venv/lib/python3.13/site-packages/gitdb/base.py": 7927279446353696534, - "venv/lib/python3.13/site-packages/starlette/_exception_handler.py": 9892172656847200124, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_mixins.py": 12351373879926460719, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_cisco.py": 1786475632318043669, - "venv/lib/python3.13/site-packages/passlib/registry.py": 5050675058011850564, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/azure.py": 13529763490186254462, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/transforms.py": 3773159138960141434, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_get_numeric_data.py": 5896318696417090902, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_show_versions.py": 10577134135855180356, - "venv/lib/python3.13/site-packages/pandas/io/formats/html.py": 11849941990375030601, - "frontend/src/lib/components/layout/TaskDrawer.svelte": 1108434227611806299, - "frontend/build/_app/immutable/nodes/6.AvrfqyFP.js": 13563727048315099924, - "venv/lib/python3.13/site-packages/websockets/imports.py": 1995356703044158461, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_set_index.py": 10971093361190283675, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_select.py": 7083040959665006634, - "venv/lib/python3.13/site-packages/gitdb/db/git.py": 13552203494737962026, - "venv/lib/python3.13/site-packages/pip/_vendor/typing_extensions.py": 10158933506062403688, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/_mapping.py": 13335227913146542481, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_numeric.py": 17391095502314929042, - "venv/lib/python3.13/site-packages/pandas/core/util/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_online.py": 11850497659869773510, - "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/__init__.py": 11283047029180207588, - "venv/lib/python3.13/site-packages/fastapi/temp_pydantic_v1_params.py": 9436036880518047720, - "venv/lib/python3.13/site-packages/itsdangerous/_json.py": 4872267972688724005, - "venv/lib/python3.13/site-packages/pip/_internal/commands/list.py": 13035925292530461722, - "venv/lib/python3.13/site-packages/passlib/__init__.py": 6987142392711441525, - "venv/lib/python3.13/site-packages/numpy/_typing/_add_docstring.py": 14657346268890680694, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pillow.libs/libXau-154567c4.so.6.0.0": 4340972632724893052, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/strings.pyi": 15361498560917514616, - "venv/lib/python3.13/site-packages/pip/_internal/utils/_jaraco_text.py": 9046755357011730699, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dropna.py": 3168969662216766293, - "venv/lib/python3.13/site-packages/pandas/tests/libs/test_join.py": 5982692266872978444, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling.py": 18221459425751198218, - "venv/lib/python3.13/site-packages/cryptography/__init__.py": 641702726372647770, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_timezones.py": 4771674179164304731, - "venv/lib/python3.13/site-packages/pygments/lexers/wren.py": 6259586056260713984, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_date_range.py": 16128552513324017349, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_antijoin.py": 14435396877404907826, - "venv/lib/python3.13/site-packages/apscheduler/executors/base.py": 1980520974511822101, - "venv/lib/python3.13/site-packages/numpy/polynomial/legendre.pyi": 2029639875417260268, - "venv/lib/python3.13/site-packages/packaging/specifiers.py": 2800449842990194437, - "venv/lib/python3.13/site-packages/pygments/lexers/elpi.py": 5736689911777977822, - "venv/lib/python3.13/site-packages/numpy/lib/_user_array_impl.py": 13115032674230220791, - "venv/lib/python3.13/site-packages/numpy/_core/_multiarray_tests.cpython-313-x86_64-linux-gnu.so": 442168371609469538, - "venv/lib/python3.13/site-packages/numpy/_core/_dtype.py": 7796703383405149774, - "frontend/src/lib/stores/__tests__/test_sidebar.js": 2607679830387722396, - "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/assertion_client.py": 4261295109880943573, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/basic.py": 12723021007042054402, - "venv/lib/python3.13/site-packages/websockets/server.py": 16599051743322571790, - "venv/lib/python3.13/site-packages/charset_normalizer/version.py": 9948878594498587774, - "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/fastapi/applications.py": 4975013401500183420, - "venv/lib/python3.13/site-packages/authlib/jose/drafts/__init__.py": 4770885427721822507, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/core": 6622984507059115517, - "venv/lib/python3.13/site-packages/pandas/core/methods/selectn.py": 13552176539021625776, - "venv/lib/python3.13/site-packages/anyio/functools.py": 4300781896135050327, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rank.py": 5817408252050193538, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_drop_duplicates.py": 5874427993953991216, - "venv/lib/python3.13/site-packages/pygments/lexers/eiffel.py": 8964563077187051946, - "venv/lib/python3.13/site-packages/pygments/lexers/_stan_builtins.py": 1961875544235948177, - "backend/src/core/utils/dataset_mapper.py": 3978140070131451501, - "backend/src/core/middleware/trace.py": 132582224686397900, - "backend/src/plugins/translate/orchestrator_query.py": 4760681990145471312, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi": 13850254283540522444, - "venv/lib/python3.13/site-packages/pydantic/deprecated/decorator.py": 8609500261161560793, - "frontend/src/lib/components/DashboardMaintenanceBadge.svelte": 9085495636438661604, - "venv/lib/python3.13/site-packages/pandas/core/window/ewm.py": 12143982379243011357, - "frontend/build/_app/immutable/chunks/aNI39KyB.js": 1756469162576383723, - "backend/src/core/middleware/__init__.py": 13917394130915533209, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/METADATA": 1862765380818895200, - "venv/lib/python3.13/site-packages/pygments/formatters/img.py": 18230180171537565208, - "backend/tests/test_api_key_routes.py": 8620555141760963281, - "backend/src/schemas/__tests__/test_settings_and_health_schemas.py": 17933166680828315099, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_shape_base.py": 4117141349022217163, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_aggregate.py": 15038915958422670700, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/mapped_collection.py": 11377280960650304531, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/declarative/__init__.py": 2436195108273216959, - "venv/lib/python3.13/site-packages/PIL/TiffImagePlugin.py": 6845043550424565106, - "backend/src/api/routes/dashboards/__init__.py": 14480706693953038818, - "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_interval_array_equal.py": 15654625365223535344, - "backend/git_repos/remote/test-repo.git/objects/6f/85e20ce3ef98cf07a2f102498b71b9462552c5": 3012017807908986452, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/numpyconfig.h": 13339221870252345205, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_isna.py": 18394053826166267096, - "venv/lib/python3.13/site-packages/pip/_internal/locations/base.py": 7966628150470073365, - "venv/lib/python3.13/site-packages/passlib/totp.py": 14590474309565233318, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_array.py": 12514884344165043136, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py": 342228968652072052, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_normalize.py": 11373923576259976755, - "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/licenses/LICENSE": 1126906383149772681, - "venv/lib/python3.13/site-packages/jsonschema/_keywords.py": 949562792260528762, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py": 15644105878811738516, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/dtypes.pyi": 15114028503984522176, - "frontend/build/_app/immutable/chunks/Cn56Obuw.js": 9774722709007984298, - "venv/lib/python3.13/site-packages/passlib/tests/test_context.py": 15195609282700801214, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_generic.py": 1098361087956787007, - "venv/lib/python3.13/site-packages/smmap/util.py": 13276170835044840023, - "venv/lib/python3.13/site-packages/starlette/middleware/errors.py": 1337979724602864440, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/cells.py": 8299309127027168194, - "venv/lib/python3.13/site-packages/smmap/test/test_util.py": 5634593621291240094, - "venv/lib/python3.13/site-packages/pydantic/v1/mypy.py": 17076910404409672245, - "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_ewm.py": 12153690217678546798, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/__init__.py": 16123561007855424016, - "venv/lib/python3.13/site-packages/numpy/_utils/_inspect.pyi": 17825266810219495672, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__multiarray_api.c": 9134176670140958459, - "frontend/src/routes/profile/+page.svelte": 13080303244628934788, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test__exceptions.py": 12099001631178696189, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufuncs.pyi": 1808147181379894521, - "frontend/build/_app/immutable/chunks/CrLU7zQO.js": 14265962769345069959, - "venv/lib/python3.13/site-packages/greenlet/greenlet_cpython_compat.hpp": 8396413256279803400, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_casting_unittests.py": 18157503533859249155, - "backend/src/api/routes/maintenance/__init__.py": 8921716690761316245, - "venv/lib/python3.13/site-packages/pydantic/color.py": 1007422551673129827, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_integer.py": 16102640589300356639, - "venv/lib/python3.13/site-packages/pandas/tests/reductions/test_stat_reductions.py": 11569525436540769152, - "venv/lib/python3.13/site-packages/pip/_internal/commands/help.py": 4175797322922912326, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_packbits.py": 7592956764084658562, - "backend/src/plugins/translate/dictionary_entries.py": 11394786590056973146, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/RECORD": 8104089156015954779, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_formats.py": 1265319125235346745, - "backend/alembic/versions/e5f4d3c2b1a_add_policy_id_to_validation_results.py": 11168047633691803786, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_regression.py": 16293647824734937323, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/errors.py": 14634768861119075506, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi": 7801211423226951223, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_duplicated.py": 14676058112867601208, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.cpython-313-x86_64-linux-gnu.so": 12776951671822017500, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/connection.py": 15405047955974108860, - "backend/src/core/superset_profile_lookup.py": 7466572583388472449, - "venv/lib/python3.13/site-packages/rsa/cli.py": 1753949198467694190, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/__init__.py": 6654484356035994666, - "frontend/src/routes/storage/+page.svelte": 5003283673039328108, - "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/licenses/LICENSE": 16499431172938528491, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arrayprint.pyi": 2053388407376896377, - "venv/lib/python3.13/site-packages/starlette/middleware/gzip.py": 4321371046149637632, - "venv/lib/python3.13/site-packages/_pytest/compat.py": 10046464101087327473, - "venv/lib/python3.13/site-packages/numpy/_array_api_info.py": 9709101823494959741, - "venv/lib/python3.13/site-packages/pandas/_libs/groupby.cpython-313-x86_64-linux-gnu.so": 14931394220112658268, - "frontend/playwright-report/trace/assets/codeMirrorModule-Ds_H_9Yq.js": 1369559823166915102, - "backend/tests/test_models.py": 14571471179954305607, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_take.py": 14969455660160053080, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_tz_convert.py": 13349243029437881949, - "venv/lib/python3.13/site-packages/greenlet/platform/setup_switch_x64_masm.cmd": 8473866644286785815, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_unstack.py": 11834917665446437163, - "venv/lib/python3.13/site-packages/pandas/tests/resample/conftest.py": 1643522609234951699, - "venv/lib/python3.13/site-packages/pandas/io/excel/_xlsxwriter.py": 16873939324418752965, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/core.py": 2199607970842512780, - "venv/lib/python3.13/site-packages/PIL/EpsImagePlugin.py": 1824020964179364491, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh18335.f90": 1126438609189294255, - "venv/lib/python3.13/site-packages/pygments/lexers/haxe.py": 1915270891525929751, - "venv/lib/python3.13/site-packages/_pytest/_io/__init__.py": 1510478951261938348, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_latex.py": 15077617224435782028, - "venv/lib/python3.13/site-packages/charset_normalizer/py.typed": 15130871412783076140, - "frontend/src/lib/auth/permissions.js": 7186663483939824478, - "venv/lib/python3.13/site-packages/typing_inspection/typing_objects.pyi": 18193727720492050602, - "venv/lib/python3.13/site-packages/jose/__init__.py": 15575670403380555945, - "venv/lib/python3.13/site-packages/pygments/lexers/agile.py": 5686162551416231457, - "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh22648.pyf": 15094859289098837494, - "venv/lib/python3.13/site-packages/fastapi/_compat/__init__.py": 12380131786677943349, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/test_indexing.py": 13703573544185051910, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_kurt.py": 2898715045429898166, - "venv/lib/python3.13/site-packages/pandas/io/xml.py": 326466573926392764, - "frontend/src/lib/components/layout/__tests__/test_sidebar.svelte.js": 15166117912533507471, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/aioodbc.py": 12704729841432715246, - "venv/lib/python3.13/site-packages/pip/_internal/utils/glibc.py": 12335359492756627313, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_subclass.py": 10949229764696473939, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_libsparse.py": 1859997684694949029, - "frontend/src/routes/datasets/review/ReviewWorkspaceRightRail.svelte": 13437011381072252917, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/__init__.py": 8811477458865810434, - "venv/lib/python3.13/site-packages/numpy/testing/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_chaining_and_caching.py": 15814259766479305290, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_index.py": 4908727359687606870, - "backend/src/core/__tests__/test_superset_preview_pipeline.py": 13996819877413389729, - "backend/src/models/llm.py": 4879429354068794925, - "venv/lib/python3.13/site-packages/pyasn1/error.py": 11036037300994516747, - "venv/lib/python3.13/site-packages/requests/packages.py": 7733041271118298220, - "frontend/e2e/run-enterprise-clean-e2e.sh": 11626901202531925046, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/METADATA": 13776251749114562660, - "venv/lib/python3.13/site-packages/pydantic/_internal/_schema_gather.py": 3634138701088855517, - "venv/lib/python3.13/site-packages/numpy/ma/__init__.py": 214772578978182427, - "venv/lib/python3.13/site-packages/pygments/styles/borland.py": 17570558758932580659, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py": 7019253290755243568, - "venv/lib/python3.13/site-packages/requests/adapters.py": 17161109043243436200, - "venv/lib/python3.13/site-packages/psycopg2/_range.py": 7184417109068014771, - "venv/lib/python3.13/site-packages/numpy/lib/_arrayterator_impl.pyi": 2744889206277418389, - "venv/lib/python3.13/site-packages/numpy/matrixlib/defmatrix.pyi": 17903213294220335051, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatter.py": 16499277113779414101, - "venv/lib/python3.13/site-packages/numpy/f2py/f90mod_rules.py": 2953876934840155920, - "venv/lib/python3.13/site-packages/numpy/_core/einsumfunc.pyi": 4729765666018003634, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/__init__.py": 15130871412783076140, - "frontend/build/_app/immutable/nodes/9.gqc4AufS.js": 5960943542680280016, - "venv/lib/python3.13/site-packages/numpy/_core/_internal.py": 13056946834347643109, - "backend/src/api/routes/maintenance/_routes.py": 18203881358318110485, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate_nonkeyword_arguments.py": 11676809974120007408, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/mongodb.py": 5310116401542377882, - "venv/lib/python3.13/site-packages/smmap/test/test_mman.py": 8977119225749253844, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro.pyi": 3145980717589050713, - "venv/lib/python3.13/site-packages/pip/_internal/utils/entrypoints.py": 11268059714209889385, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_reductions.py": 2816859231048302619, - "venv/lib/python3.13/site-packages/pluggy/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/j.py": 9766594937623918053, - "venv/lib/python3.13/site-packages/_pytest/logging.py": 10972553724755511468, - "venv/lib/python3.13/site-packages/keyring/backends/libsecret.py": 11621088556661567306, - "venv/lib/python3.13/site-packages/numpy/core/umath.py": 4476812261188108155, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/ops.py": 13451323660386712332, - "venv/lib/python3.13/site-packages/yaml/reader.py": 9873075843010693205, - "venv/lib/python3.13/site-packages/pygments/lexers/usd.py": 934820244673741695, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/__init__.py": 14571251344510763303, - "venv/lib/python3.13/site-packages/pydantic/typing.py": 6661252174518316760, - "venv/lib/python3.13/site-packages/httpx/_status_codes.py": 1758440600462491839, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/schema.py": 5391655516870611151, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/hashes.py": 8545380307201732345, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufunclike.pyi": 12215374902556647369, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_scrypt.py": 8106466515670064013, - "venv/lib/python3.13/site-packages/git/objects/submodule/root.py": 5322248117564025370, - "venv/lib/python3.13/site-packages/git/index/base.py": 641556304637379636, - "venv/lib/python3.13/site-packages/attr/_version_info.py": 3850449653182103457, - "venv/lib/python3.13/site-packages/smmap/buf.py": 18231775424238352734, - "frontend/build/_app/immutable/nodes/18.CyOFIVFf.js": 2394236541224813694, - "venv/lib/python3.13/site-packages/yaml/representer.py": 10550136298978225013, - "backend/src/api/routes/translate/_run_routes.py": 16216908966766661647, - "backend/src/plugins/translate/_batch_sizer.py": 13074277127276828485, - "venv/lib/python3.13/site-packages/numpy/ma/core.pyi": 4829891173366130328, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/METADATA": 12295263493152296681, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_musllinux.py": 2423350951094915747, - "venv/lib/python3.13/site-packages/pydantic/deprecated/parse.py": 819235411736647763, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timedeltas.cpython-313-x86_64-linux-gnu.so": 17089839649971421164, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein.py": 15426828792217499138, - "venv/lib/python3.13/site-packages/dateutil/zoneinfo/rebuild.py": 1813298167468704155, - "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/utils.py": 2959395751217827103, - "venv/lib/python3.13/site-packages/uvicorn/workers.py": 7213290478118197047, - "frontend/build/_app/immutable/chunks/BN27KiHS.js": 7591779568493961830, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS": 17022185907188244883, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_stringdtype.py": 8381476847196129074, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/interface.py": 3134071530627935964, - "frontend/src/lib/ui/HelpTooltip.svelte": 15082693035830243831, - "venv/lib/python3.13/site-packages/numpy/random/bit_generator.pxd": 14261507718442469988, - "backend/src/core/auth/logger.py": 13549160352454060608, - "venv/lib/python3.13/site-packages/pydantic/validators.py": 8292819706488319845, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_backend.pyi": 13083543811193933305, - "examples/maintenance-api-python.py": 18279360934407602079, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_subclass.py": 13490541871827928531, - "frontend/src/lib/components/health/ScheduleAtAGlance.svelte": 2047418178814771337, - "venv/lib/python3.13/site-packages/pydantic/warnings.py": 5142352784799639092, - "venv/lib/python3.13/site-packages/pydantic/_internal/_discriminated_union.py": 1818179910730401509, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_clip.py": 13498704233745189154, - "frontend/build/_app/immutable/chunks/2dOUpm6k.js": 11811637653151731489, - "venv/lib/python3.13/site-packages/pandas/_config/dates.py": 3863381688916127265, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/console.py": 10217327186846649646, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py": 13763154154862871596, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/test_pyinstaller.py": 9430762168079129025, - "venv/lib/python3.13/site-packages/pygments/lexers/webmisc.py": 9530962803076253849, - "backend/src/api/routes/dashboards/_detail_routes.py": 3246373568851818130, - "venv/lib/python3.13/site-packages/pandas/tests/test_common.py": 8987965560487646705, - "venv/lib/python3.13/site-packages/six.py": 948867418687428421, - "venv/lib/python3.13/site-packages/numpy/f2py/auxfuncs.py": 2234931733687557433, - "venv/lib/python3.13/site-packages/pygments/lexers/_css_builtins.py": 17478340487186531268, - "venv/lib/python3.13/site-packages/pandas/core/arrays/categorical.py": 15993211255162930859, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufunc_config.pyi": 11754104063443791746, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_indexing.py": 3841182456456779012, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_indexing.py": 14461606056665485421, - "venv/lib/python3.13/site-packages/idna-3.11.dist-info/WHEEL": 8600534672961461758, - "venv/lib/python3.13/site-packages/dotenv/py.typed": 9796674040111366709, - "venv/lib/python3.13/site-packages/httpcore/_async/http2.py": 16350817785499681224, - "venv/lib/python3.13/site-packages/numpy/lib/_stride_tricks_impl.py": 5260748170237305627, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/__init__.py": 5933622200264572885, - "venv/lib/python3.13/site-packages/pydantic/_internal/_validators.py": 2939255306814626438, - "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/WHEEL": 7314207500206292683, - "venv/lib/python3.13/site-packages/pygments/lexers/bdd.py": 5389493859905397060, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py": 7906029092844029127, - "backend/src/api/routes/git/_environment_routes.py": 5687847761729712859, - "venv/lib/python3.13/site-packages/jsonschema/tests/fuzz_validate.py": 2328585939822059352, - "backend/src/services/reports/__tests__/test_report_normalizer.py": 5081647081006613913, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_isin.py": 8136794647591341784, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/package_data.py": 3078502124870585867, - "venv/lib/python3.13/site-packages/sqlalchemy/exc.py": 6372950288664776625, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/__init__.py": 5118993772178969104, - "venv/lib/python3.13/site-packages/numpy/_core/_dtype_ctypes.py": 5564496700647900501, - "venv/lib/python3.13/site-packages/pandas/core/indexes/category.py": 18192569199634406001, - "venv/lib/python3.13/site-packages/yaml/serializer.py": 1783761365703703558, - "frontend/src/routes/datasets/__tests__/StatsBar.test.js": 16218511958634350787, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_assignability.pyi": 1718610984396277997, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64-testset-2.csv": 4052796393463357888, - "backend/tests/test_auth.py": 18059959539697963472, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_macosx.h": 3653129798702716366, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/issue232.py": 6498198296113395367, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_types.py": 651959450717569029, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/RECORD": 17985800801793506250, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ma.pyi": 8186102816080813799, - "frontend/e2e/helpers/api.helper.js": 12740720187461301874, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_file_buffer_url.py": 15377043158761455858, - "backend/git_repos/remote/test-repo.git/hooks/pre-applypatch.sample": 15598058327720909861, - "venv/lib/python3.13/site-packages/gitdb/pack.py": 7828244200815444166, - "frontend/src/lib/components/dataset-review/__tests__/us2_semantic_workspace.ux.test.js": 7475597145566385341, - "venv/lib/python3.13/site-packages/pygments/lexers/_julia_builtins.py": 8846111188795315103, - "venv/lib/python3.13/site-packages/_pytest/junitxml.py": 5871715626272366062, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/compat.py": 17520043776344667309, - "venv/lib/python3.13/site-packages/yaml/__init__.py": 11044333164208875121, - "venv/lib/python3.13/site-packages/jaraco/classes/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_parser.py": 8145921552236189367, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_format.py": 16150524965028369071, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_masked_matrix.py": 1444179242134203344, - "venv/lib/python3.13/site-packages/numpy/ma/extras.py": 7559838309481824664, - "venv/lib/python3.13/site-packages/pydantic_settings/main.py": 17272314000918984790, - "venv/lib/python3.13/site-packages/pillow.libs/libzstd-761a17b6.so.1.5.7": 17875236748140157032, - "venv/lib/python3.13/site-packages/click/_utils.py": 16491408631876616271, - "venv/lib/python3.13/site-packages/rpds/__init__.py": 5862197328247012275, - "venv/lib/python3.13/site-packages/pydantic/schema.py": 83238111330132033, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/__init__.py": 11157967642611612522, - "venv/lib/python3.13/site-packages/more_itertools/__init__.pyi": 16479506520351014608, - "frontend/src/routes/dashboards/[id]/+page.svelte": 2328002918662170835, - "frontend/src/routes/reports/llm/[taskId]/+page.svelte": 809594987288256163, - "backend/src/api/routes/git/_router.py": 14821560101452369211, - "backend/src/services/rbac_permission_catalog.py": 11280653389166352517, - "venv/lib/python3.13/site-packages/pandas/_libs/parsers.pyi": 18402185996588014111, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_envs.py": 5657151394155576509, - "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_zips.py": 5184894018177148648, - "frontend/build/_app/immutable/chunks/DgoIDw4h.js": 10605176285482573925, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/test_interval_new.py": 3893421355544517336, - "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/METADATA": 3474626408138844944, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_easter.py": 3397863170068576196, - "backend/git_repos/remote/test-repo.git/refs/heads/feature/e2e-update": 9577764946931187657, - "frontend/src/routes/settings/EnvironmentsTab.svelte": 13575164255656888464, - "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/array.py": 13040461386712513615, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_real.py": 5283415082530228716, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/__init__.py": 11850945878149145990, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_from_scalar.py": 16520136036631155842, - "venv/lib/python3.13/site-packages/numpy/_typing/__init__.py": 18242238390157333247, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data": 9599129816090399315, - "venv/lib/python3.13/site-packages/passlib/handlers/django.py": 66638338316838351, - "venv/lib/python3.13/site-packages/packaging/_parser.py": 13394093358675095309, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_almost_equal.py": 9333355453468475330, - "venv/lib/python3.13/site-packages/apscheduler/events.py": 10748346950729364899, - "venv/lib/python3.13/site-packages/pandas/core/groupby/ops.py": 2036968385544457016, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_select.py": 17823338162428379468, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_dtype.py": 12210524152630532747, - "venv/lib/python3.13/site-packages/pygments/util.py": 4815334059917765852, - "venv/lib/python3.13/site-packages/httpx/_decoders.py": 14478643473006178492, - "backend/:memory:test_auth": 1309242367339970214, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/loading.py": 3460142472461437916, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_win32_console.py": 18092547253031555768, - "frontend/build/_app/immutable/nodes/22.2G--WUWt.js": 8100099250827052249, - "venv/lib/python3.13/site-packages/numpy/random/c_distributions.pxd": 16574161095720077595, - "frontend/playwright-report/data/b13be72bc9111c369dd61bcb4b41565873341170.zip": 9286336518597330572, - "venv/lib/python3.13/site-packages/httpx/_urls.py": 4219389176352582046, - "venv/lib/python3.13/site-packages/PIL/TarIO.py": 13651401276968618561, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_api.py": 7131036004750554905, - "venv/lib/python3.13/site-packages/websockets/cli.py": 14049106025886056110, - "venv/lib/python3.13/site-packages/numpy/lib/scimath.pyi": 18165025261847276375, - "venv/lib/python3.13/site-packages/numpy/lib/recfunctions.py": 3001896031623204147, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/histograms.pyi": 9255620158831643201, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/json_schema_test_suite.py": 6152158310190822762, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/abstract_interface/foo.f90": 14491312943942432024, - "backend/src/core/superset_client/_base.py": 8704044125468217140, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_frame.py": 9378623452601244234, - "backend/src/plugins/llm_analysis/__tests__/test_client_headers.py": 6499914987034257707, - "venv/lib/python3.13/site-packages/click/types.py": 6491651131669287534, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arcsinh.csv": 13695545125848146013, - "venv/lib/python3.13/site-packages/passlib/utils/compat/__init__.py": 17369882236606423129, - "merge_spec.py": 13855568343782022, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_values.py": 430620320423334461, - "venv/lib/python3.13/site-packages/pydantic/plugin/_schema_validator.py": 857640644840976862, - "venv/lib/python3.13/site-packages/numpy/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_insert.py": 6970975909565157982, - "venv/lib/python3.13/site-packages/pytest/__init__.py": 6137272437722350673, - "venv/lib/python3.13/site-packages/numpy/lib/_array_utils_impl.pyi": 11535882608355652318, - "venv/lib/python3.13/site-packages/greenlet/tests/test_gc.py": 6383305344377882524, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_isin.py": 14387850595546682314, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_shift.py": 14681514853406253657, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_na_values.py": 13527837495439739279, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/parsing.pyi": 11967691665766452312, - "venv/lib/python3.13/site-packages/PIL/XVThumbImagePlugin.py": 7472134175570205454, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/WHEEL": 9788895026336324100, - "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/METADATA": 8128818962678047497, - "venv/lib/python3.13/site-packages/pandas/core/ops/array_ops.py": 10061020479033421596, - "frontend/e2e/tests/smoke.e2e.js": 11376448043256596939, - "scripts/build_offline_docker_bundle.sh": 1393881756263325163, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_numpy.py": 9663734591667845940, - "venv/lib/python3.13/site-packages/_pytest/python.py": 1829073958095716309, - "venv/lib/python3.13/site-packages/pydantic/_internal/_mock_val_ser.py": 12265320534388472158, - "frontend/build/_app/immutable/assets/0.DK5emaTL.css": 4565146476878643834, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/writeonly.py": 14213960431308620600, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_datetime.py": 7456744745424297814, - "backend/src/api/routes/dashboards/_projection.py": 9178951020532547334, - "venv/lib/python3.13/site-packages/PIL/_imagingft.cpython-313-x86_64-linux-gnu.so": 11054435406031360190, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/parameters.py": 1647490964392525933, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_get_dummies.py": 16112674981222844375, - "frontend/src/routes/settings/MigrationMappingsTable.svelte": 574459541553883663, - "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/base.py": 15872835330892203433, - "venv/lib/python3.13/site-packages/pygments/lexers/c_cpp.py": 1211842877043321095, - "venv/lib/python3.13/site-packages/numpy/_core/shape_base.pyi": 10225243791643474943, - "venv/lib/python3.13/site-packages/numpy/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_parse_iso8601.py": 9100947620267156161, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/pyodbc.py": 11271266527234292020, - "venv/lib/python3.13/site-packages/jaraco/classes/ancestry.py": 11742194518360056470, - "venv/lib/python3.13/site-packages/authlib/common/security.py": 2291133227104016684, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_replace.py": 8166203537440976347, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_period.py": 6255181868181182780, - "venv/bin/f2py": 11006035631504708368, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/authorization_server.py": 13696038495666024258, - "venv/lib/python3.13/site-packages/numpy/_core/shape_base.py": 3996519099530770308, - "backend/src/services/clean_release/__tests__/test_source_isolation.py": 462142504664192849, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_pop.py": 5700439923973346681, - "backend/src/plugins/translate/dictionary_import_export.py": 12639118203353044308, - "venv/lib/python3.13/site-packages/numpy/fft/__init__.py": 9343449448737026658, - "frontend/src/components/Navbar.svelte": 2640465687592983765, - "venv/lib/python3.13/site-packages/numpy/ma/mrecords.py": 687170905107114309, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/specifiers.py": 12284901056355482991, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_console.py": 11657469008721907972, - "venv/lib/python3.13/site-packages/pydantic/type_adapter.py": 10162988530225478692, - "venv/lib/python3.13/site-packages/passlib/utils/des.py": 2650106381178222229, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_attr_equal.py": 5612259834202470413, - "venv/lib/python3.13/site-packages/PIL/AvifImagePlugin.py": 1872412416505003364, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/flatiter.py": 3066469329738423021, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_regression.py": 12593643817685777170, - "venv/lib/python3.13/site-packages/numpy/lib/introspect.py": 5706729538356302335, - "venv/lib/python3.13/site-packages/pandas/tseries/api.py": 14785127136180503704, - "venv/lib/python3.13/site-packages/pygments/lexers/gleam.py": 5161116162065925222, - "frontend/src/services/git-utils.js": 12982149055119314642, - "venv/lib/python3.13/site-packages/numpy/lib/_utils_impl.pyi": 15767546107856827543, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/shape_base.pyi": 5046405609030418900, - "venv/lib/python3.13/site-packages/numpy/random/_mt19937.cpython-313-x86_64-linux-gnu.so": 85866616759631810, - "backend/src/services/maintenance/__init__.py": 3167476255502727608, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/connection.py": 5582413226288987808, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/rec/__init__.py": 7467092880535460658, - "venv/lib/python3.13/site-packages/passlib/ext/django/__init__.py": 11713862539944289631, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_processors.py": 16557117595879208702, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler.pyi": 9003794318682878317, - "venv/lib/python3.13/site-packages/PIL/DdsImagePlugin.py": 10646832373516499548, - "venv/lib/python3.13/site-packages/pygments/lexers/diff.py": 5930189593946259160, - "scripts/scan_secrets.sh": 10827095619853567115, - "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/METADATA": 7727489762869155085, - "venv/lib/python3.13/site-packages/pip/_internal/operations/check.py": 16650663913976953800, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA_py.py": 2494967094400350388, - "venv/lib/python3.13/site-packages/pydantic_settings/utils.py": 14396350455520958703, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_get_level_values.py": 12490886203425393290, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/index_tricks.pyi": 11463747060334597941, - "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_sas7bdat.py": 8963983384208121526, - "venv/lib/python3.13/site-packages/h11/_events.py": 13800479928851716538, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_str.py": 149688376805129532, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_astype.py": 15275720655739710249, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg.py": 8023549900603235601, - "venv/lib/python3.13/site-packages/pandas/core/arrays/datetimes.py": 10585034798097337148, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/chararray.pyi": 9683985931409244216, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm32_ios.h": 6751259472945638998, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/box.py": 14303526978791498662, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/index_tricks.pyi": 6035507586990711471, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion": 2607512361823362698, - "venv/lib/python3.13/site-packages/numpy/polynomial/__init__.py": 15558318749939680074, - "venv/lib/python3.13/site-packages/uvicorn/middleware/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/fastapi/utils.py": 15402403831700548944, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_cov_corr.py": 13652339565475304679, - "venv/lib/python3.13/site-packages/pydantic/_internal/_decorators_v1.py": 16723743964226526155, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_cpu.h": 13799366908726531089, - "venv/lib/python3.13/site-packages/numpy/matrixlib/defmatrix.py": 4940170059946018356, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_timer.py": 8196003526646080498, - "venv/lib/python3.13/site-packages/numpy/_typing/_nbit_base.py": 7446626038222262489, - "venv/lib/python3.13/site-packages/pandas/core/tools/datetimes.py": 13313374952742129866, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/dotenv/variables.py": 5438726379749803751, - "venv/lib/python3.13/site-packages/pygments/lexers/chapel.py": 7619603166448145621, - "venv/lib/python3.13/site-packages/pygments/lexers/zig.py": 470431199354307668, - "frontend/src/routes/validation/[id]/+page.svelte": 17573557905368368906, - "backend/src/core/async_superset_client.py": 339440171038902146, - "backend/src/services/profile_preference_service.py": 6413505886389479915, - "venv/lib/python3.13/site-packages/pygments/lexers/hare.py": 8693002231020751711, - "frontend/src/lib/stores/datasetReviewSession.js": 12759266804307584180, - "backend/src/core/utils/fileio.py": 8848681882907859355, - "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py": 9627328185578406121, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/__init__.py": 5863110456909134678, - "venv/lib/python3.13/site-packages/psycopg2/errorcodes.py": 6711830404954314463, - "venv/lib/python3.13/site-packages/idna/__init__.py": 6489437464172324468, - "venv/lib/python3.13/site-packages/jose/backends/base.py": 12795468809472351388, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/dml.py": 6519732236745017861, - "venv/lib/python3.13/site-packages/gitdb/test/test_pack.py": 7518388297247535189, - "venv/lib/python3.13/site-packages/attr/_config.py": 1864824728504480204, - "venv/lib/python3.13/site-packages/numpy/linalg/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/licenses/LICENSE": 5669644120528099197, - "venv/lib/python3.13/site-packages/pygments/formatters/other.py": 13124903290103898118, - "venv/lib/python3.13/site-packages/numpy/_utils/_convertions.py": 12886275429547303345, - "venv/lib/python3.13/site-packages/pygments/lexers/apl.py": 16767474673619335683, - "venv/lib/python3.13/site-packages/pygments/lexers/xorg.py": 14591144191879110061, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/conftest.py": 3691712173202219606, - "venv/lib/python3.13/site-packages/cryptography/x509/__init__.py": 4066756344049307453, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pip/_internal/models/format_control.py": 12916176880659590456, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_timedelta64.py": 16821719402662529276, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_tz_convert.py": 77283525137564255, - "venv/lib/python3.13/site-packages/packaging/_tokenizer.py": 7442392076059866359, - "frontend/src/routes/git/+page.svelte": 3351712750068549963, - "venv/lib/python3.13/site-packages/httpcore/_async/http11.py": 7565741048880549265, - "backend/src/scripts/clean_release_tui.py": 3006670970245009659, - "backend/git_repos/remote/test-repo.git/hooks/pre-merge-commit.sample": 10013699873067956556, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/filepost.py": 16698380375728063923, - "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/extending.pyx": 756189645898997788, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_astype.py": 4178231007649608531, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_monotonic.py": 11817523305776951162, - "venv/lib/python3.13/site-packages/cffi/verifier.py": 8473599757770867754, - "venv/lib/python3.13/site-packages/numpy/_core/_umath_tests.cpython-313-x86_64-linux-gnu.so": 3478629877770507853, - "venv/lib/python3.13/site-packages/pyasn1/codec/der/decoder.py": 11876648884087997745, - "venv/lib/python3.13/site-packages/psycopg2/tz.py": 9966680685796585198, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh25337/data.f90": 13833561828029901615, - "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_sas.py": 9446226619493404132, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/characteristics.py": 2916810597149066609, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/types.py": 16795741817129898714, - "venv/lib/python3.13/site-packages/git/__init__.py": 15867730798565725003, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/WHEEL": 16784970174376303810, - "frontend/src/routes/settings/SystemSettings.svelte": 17084926955388049976, - "backend/src/core/task_manager/manager.py": 1504518197419779491, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py": 14946223589457772924, - "venv/lib/python3.13/site-packages/pandas/util/_doctools.py": 3766479022075611396, - "venv/lib/python3.13/site-packages/sqlalchemy/util/concurrency.py": 1325673503812009695, - "venv/lib/python3.13/site-packages/numpy/_core/records.py": 11414828908088050950, - "venv/lib/python3.13/site-packages/pygments/lexers/gdscript.py": 12775803139854052838, - "frontend/src/lib/stores/__tests__/setupTests.js": 16228706107748081093, - "venv/lib/python3.13/site-packages/requests/utils.py": 17045260098091371478, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multiprocessing.py": 5522490547285108448, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_abc.py": 10164280045317807365, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/conftest.py": 8406022190801970256, - "venv/lib/python3.13/site-packages/pygments/lexers/cddl.py": 1303059539145221713, - "backend/src/models/dataset_review_pkg/_enums.py": 501173908863819198, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/comparisons.pyi": 4158883009780474220, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_string.py": 13234624995755549329, - "frontend/build/_app/immutable/nodes/33.CWQZJeNR.js": 3208333969825773593, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_fields.py": 16222559851336781264, - "venv/lib/python3.13/site-packages/urllib3/util/wait.py": 14629837381061032546, - "venv/lib/python3.13/site-packages/pandas/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_ufunc.py": 669019702416198889, - "venv/lib/python3.13/site-packages/PIL/FliImagePlugin.py": 13364963053197422923, - "venv/lib/python3.13/site-packages/packaging/requirements.py": 2896326326372719999, - "venv/lib/python3.13/site-packages/pip/_internal/utils/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/v1/schema.py": 10008526732895436361, - "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/numpy/_core/records.pyi": 14194354215405544730, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_insert.py": 17383986803728810587, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/rethinkdb.py": 16413299263077970925, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_drop.py": 17940792593116540139, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_head_tail.py": 1906121476322841736, - "venv/lib/python3.13/site-packages/pandas/tests/test_register_accessor.py": 16661086720613729974, - "venv/lib/python3.13/site-packages/anyio/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/base.py": 13634605726041717070, - "venv/lib/python3.13/site-packages/numpy/__init__.pyi": 15820654525292895396, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_random.py": 4179188367630060654, - "backend/src/scripts/seed_permissions.py": 2299443594185631497, - "venv/lib/python3.13/site-packages/rapidfuzz/_utils.py": 14374663810542207121, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_dropna.py": 17272771246760486947, - "venv/lib/python3.13/site-packages/pygments/lexers/graphviz.py": 15677908982985025500, - "venv/lib/python3.13/site-packages/referencing/tests/test_jsonschema.py": 9815500901482570619, - "venv/lib/python3.13/site-packages/keyring/backends/kwallet.py": 3071915635647280308, + "venv/lib/python3.13/site-packages/pydantic/_internal/_internal_dataclass.py": 13206778611516171760, + "frontend/build/_app/immutable/nodes/38.DR2JbkbT.js": 4406964953418448592, + "docs/api/html/search/groups_13.js": 5984573013641066016, + "docs/api/html/group____enforce__dictionary.html": 18173488447816081316, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_functions.py": 2255133375699086300, "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/code.py": 9700811903057180696, - "venv/lib/python3.13/site-packages/pandas/_libs/window/indexers.cpython-313-x86_64-linux-gnu.so": 9380059465932560412, - "venv/lib/python3.13/site-packages/pydantic/v1/__init__.py": 1642038155370734658, - "venv/lib/python3.13/site-packages/cffi/__init__.py": 13427266446746498548, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/layout.py": 11554376181083053156, - "venv/lib/python3.13/site-packages/numpy/_core/_dtype.pyi": 17662618580381221543, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/recarray_from_file.fits": 15116318600514274152, - "venv/lib/python3.13/site-packages/referencing/_attrs.py": 14434891919747863272, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc64_aix.h": 8706347224105630468, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_constructors.py": 17392287676196409733, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_names.py": 10037208029090713121, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_arithmetic.py": 17449383588949771785, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/inference.py": 2786441797589123900, - "venv/lib/python3.13/site-packages/pip/_internal/cache.py": 210214424535803946, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_series.py": 10922287546912569276, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7521/client.py": 17305914656270781911, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_is_monotonic.py": 12769599198035357753, - "venv/lib/python3.13/site-packages/uvicorn/supervisors/__init__.py": 15971002342788501945, - "venv/lib/python3.13/site-packages/pygments/lexers/carbon.py": 6753624244809529841, - "venv/lib/python3.13/site-packages/pygments/lexers/sgf.py": 6802546617450210439, - "backend/src/core/scheduler.py": 8479779689131957613, - "backend/src/core/superset_client/_dashboards_write.py": 17768282769896196778, - "venv/lib/python3.13/site-packages/pydantic/_internal/_generics.py": 16438159042939059717, - "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs_scalars.py": 652332294655046106, - "venv/lib/python3.13/site-packages/jsonschema/cli.py": 9813914882090789748, - "venv/lib/python3.13/site-packages/pandas/api/interchange/__init__.py": 181911269762882069, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_apply.py": 7511915990531229598, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_ccalendar.py": 8819357623337533489, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_check_indexer.py": 2929031395357057009, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_comparison.py": 5348781442514871089, - "venv/lib/python3.13/site-packages/jose/backends/__init__.py": 16581763658239070112, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/resultproxy.cpython-313-x86_64-linux-gnu.so": 6011605826065363427, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_network.py": 13159427333040109523, - "venv/lib/python3.13/site-packages/numpy/typing/__init__.pyi": 10058149460938883683, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/mod_derived_types.f90": 2556756676983488922, - "venv/lib/python3.13/site-packages/pip/_vendor/certifi/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/live.py": 8586058300967410643, - "venv/lib/python3.13/site-packages/pandas/core/_numba/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_categorical.py": 9923236395692943732, - "venv/lib/python3.13/site-packages/psycopg2/_json.py": 9729420372294281405, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein.pyi": 2700568594438441246, - "venv/lib/python3.13/site-packages/_pytest/setuponly.py": 10959102379908419762, - "venv/lib/python3.13/site-packages/pandas/compat/__init__.py": 6077099417711209303, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_dataframe.py": 14945138617962156057, - "venv/lib/python3.13/site-packages/jeepney/tests/test_bus_messages.py": 4323093138307306385, - "venv/lib/python3.13/site-packages/pydantic/class_validators.py": 4643597082531287188, - "venv/lib/python3.13/site-packages/sqlalchemy/event/api.py": 987321343916500337, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/dependency.py": 7300594038182867460, - "venv/lib/python3.13/site-packages/pydantic/v1/parse.py": 5875950480538559709, - "frontend/src/components/MappingTable.svelte": 16339628752309005366, - "frontend/src/components/MissingMappingModal.svelte": 14222261650100098814, - "backend/src/core/__tests__/test_native_filters.py": 3247249287628984886, - "backend/src/api/routes/__tests__/test_clean_release_legacy_compat.py": 5075014721013543720, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_tz_convert.py": 17957207974799052653, - "backend/src/api/routes/git/__init__.py": 12363460647192569481, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_categorical.py": 10863578845754547294, - "frontend/playwright-report/trace/index.BCnMPevh.js": 8625484717968740943, - "venv/lib/python3.13/site-packages/pyasn1/type/tagmap.py": 14075859042659927673, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/twodim_base.pyi": 10156504423258357540, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/row.py": 9763935103055608874, - "frontend/src/routes/validation/+page.svelte": 9845194549295283559, - "backend/src/plugins/translate/__tests__/test_dictionary_correction.py": 17508858180216288123, - "backend/src/plugins/translate/preview.py": 5579180663525515759, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cpu_features.py": 955759654189150497, - "venv/lib/python3.13/site-packages/pygments/lexers/slash.py": 8320676560518108343, - "backend/src/services/clean_release/manifest_builder.py": 16367921257027024830, - "venv/lib/python3.13/site-packages/numpy/_core/_string_helpers.pyi": 12043292763005874815, - "venv/bin/jsonschema": 16516374846693491442, - "backend/src/api/routes/__tests__/test_profile_api.py": 10215800611882169470, - "backend/src/services/clean_release/publication_service.py": 7731809712174358922, - "backend/src/services/clean_release/preparation_service.py": 9259410398708054305, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_replace.py": 8165088653532047247, - "backend/src/plugins/llm_analysis/scheduler.py": 16461360386665667203, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/accumulate.py": 5780225603819849877, - "venv/lib/python3.13/site-packages/pandas/core/groupby/numba_.py": 15997665748332235683, - "venv/lib/python3.13/site-packages/pandas/tests/test_expressions.py": 16378925536309828288, - "venv/lib/python3.13/site-packages/idna/compat.py": 9758194415584776667, - "venv/lib/python3.13/site-packages/numpy/f2py/__version__.pyi": 9759534743796867731, - "backend/src/core/migration/dry_run_orchestrator.py": 1628125044585364194, - "backend/src/plugins/git/llm_extension.py": 5713196889309291531, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA.pyi": 2700568594438441246, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq_py.py": 16054175754674285311, - "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/METADATA": 16498441272591167134, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_conversion.py": 6205112277291935767, - "venv/lib/python3.13/site-packages/numpy/lib/introspect.pyi": 12239924839764265507, - "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/array.py": 1919242530821725197, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.py": 14865906347579451546, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/compat.py": 9758194415584776667, - "venv/lib/python3.13/site-packages/passlib/tests/test_ext_django_source.py": 15577951591316518967, - "venv/lib/python3.13/site-packages/websockets/asyncio/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/rsa/__init__.py": 14623742580410014505, - "venv/lib/python3.13/site-packages/rapidfuzz/utils.py": 5682627611354455144, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_implementation.py": 12245524932757110911, - "venv/lib/python3.13/site-packages/pydantic/_internal/_model_construction.py": 694471028676746110, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/philox-testset-1.csv": 2202360898679162333, - "venv/lib/python3.13/site-packages/pandas/_libs/index.cpython-313-x86_64-linux-gnu.so": 18409579812171549318, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_typst.py": 14619529283550788275, - "venv/lib/python3.13/site-packages/PIL/_util.py": 17116054813914373606, - "venv/lib/python3.13/site-packages/numpy/lib/_ufunclike_impl.pyi": 9854069702366900663, - "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/METADATA": 15987199384245264478, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_delete.py": 3485374671877063217, - "venv/lib/python3.13/site-packages/greenlet/platform/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/client_auth.py": 3301527187487914220, - "venv/lib/python3.13/site-packages/apscheduler/executors/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_indexing.py": 16623126293364224089, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_missing.py": 3991199131191840903, - "venv/lib/python3.13/site-packages/idna-3.11.dist-info/METADATA": 14036738037171597049, - "venv/lib/python3.13/site-packages/uvicorn/loops/asyncio.py": 16496916527760969173, - "venv/lib/python3.13/site-packages/pygments/plugin.py": 18006138132596504101, - "venv/lib/python3.13/site-packages/pygments/lexers/vip.py": 11287963054551122004, - "venv/lib/python3.13/site-packages/dateutil/tz/__init__.py": 9617254832690762236, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_indexing.py": 7181087459615188551, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_user_array.py": 8711697474193296376, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_complex.py": 4290059580478881700, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/utils.py": 9959199071030996679, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_dtypes.py": 13065857166166716628, - "venv/lib/python3.13/site-packages/anyio/abc/_eventloop.py": 2023190981288767991, - "venv/lib/python3.13/site-packages/cffi/cffi_opcode.py": 8411344362428947268, - "venv/lib/python3.13/site-packages/keyring/backends/macOS/api.py": 4502902558534812719, - "venv/lib/python3.13/site-packages/numpy/f2py/common_rules.py": 7352635707860427145, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64dxsm-testset-2.csv": 16611724551361692999, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/processors.pyx": 7085380878820747579, - "venv/lib/python3.13/site-packages/pygments/lexers/scripting.py": 4167168074165473790, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_period.py": 7727606662611927293, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_describe.py": 11923715539897559626, - "venv/lib/python3.13/site-packages/git/compat.py": 16843345645628515492, - "frontend/src/components/git/CommitModal.svelte": 12274093894389435426, - "frontend/build/favicon.svg": 6451919037497541980, - "backend/src/services/maintenance/_banner_renderer.py": 17250656767428031478, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/etcd.py": 4078354986605069279, - "venv/lib/python3.13/site-packages/pygments/lexers/supercollider.py": 15306357945850389082, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_freq_attr.py": 17290447066681837965, - "venv/lib/python3.13/site-packages/cryptography/hazmat/asn1/__init__.py": 4290669519959060720, - "backend/git_repos/remote/test-repo.git/hooks/commit-msg.sample": 13435789416588783681, - "backend/git_repos/remote/test-repo.git/objects/cf/d2dcbd55735b8cedf21e04e64ac627c6f9a458": 10982669277486885525, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_drop.py": 15751236355035730554, - "venv/lib/python3.13/site-packages/pydantic/aliases.py": 14481980467204711659, - "venv/lib/python3.13/site-packages/httpx/_auth.py": 1283189552342958900, - "frontend/src/components/storage/FileUpload.svelte": 14890211974307083938, - "backend/src/core/task_manager/__tests__/test_context.py": 9922342013893651977, + "docs/api/html/group__test__end__already__completed__event.html": 5476557657288556633, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/framework_integration.py": 3935346152156572025, + "docs/api/html/group__test__clean__release__tui__v2.html": 12931166045640948787, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90": 7957683453180939605, + "docs/api/html/group__createUser__Function.html": 9916552781618582040, + "docs/api/html/group__AdminApi.html": 767628307398103052, + "venv/lib/python3.13/site-packages/attrs/exceptions.py": 2871247302586505373, + "backend/src/core/superset_client/_dashboards_filters.py": 17625905985676889586, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/requirements.py": 2362917888844255805, + "docs/api/html/group__DetectedIssue.html": 49569046639972610, + "frontend/src/lib/components/dataset-review/CompiledSQLPreview.svelte": 1996807488169542658, + "venv/lib/python3.13/site-packages/cffi/recompiler.py": 17809252277700094304, + "docs/api/html/group__ManifestBuilder.html": 9042925776836812751, + "docs/api/html/group__AuthLoggerModule.html": 4166355749229873269, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_usecols_basic.py": 16382444980424010514, "backend/src/api/routes/git/_config_routes.py": 9064062564638523731, - "frontend/src/routes/tools/debug/+page.svelte": 15220194081518936566, - "venv/lib/python3.13/site-packages/numpy/f2py/capi_maps.pyi": 10638891136586198429, - "backend/src/plugins/translate/__tests__/test_dictionary_crud.py": 2458404726842277862, - "venv/lib/python3.13/site-packages/pandas/io/parsers/__init__.py": 11752833703934347122, - "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft_umath.cpython-313-x86_64-linux-gnu.so": 16443444849116065961, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_equals.py": 9903250467264848187, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_core.py": 12712110303898046818, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/certs.py": 13366788049827102313, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_dict.py": 808180749933361743, - "venv/lib/python3.13/site-packages/pandas/tests/internals/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/h11/_readers.py": 832030916375670301, - "backend/src/api/routes/llm.py": 14720807640771498486, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/RECORD": 5169907629260560698, - "venv/lib/python3.13/site-packages/websockets/asyncio/connection.py": 17044409627448400723, - "venv/lib/python3.13/site-packages/bcrypt/_bcrypt.pyi": 15067467792538416274, - "venv/lib/python3.13/site-packages/pandas/_libs/indexing.pyi": 90995502095752726, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_array_ops.py": 6709502157317299163, - "backend/src/api/routes/assistant/__init__.py": 16856916031113491888, - "venv/lib/python3.13/site-packages/psycopg2/extras.py": 7510107741729866600, - "frontend/build/_app/immutable/nodes/26.DpPenpwY.js": 16901700715882002351, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_warnings.py": 13071210233876253749, - "backend/src/services/clean_release/facade.py": 4588791439430238149, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/dtypes.cpython-313-x86_64-linux-gnu.so": 657138415665704488, - "backend/git_repos/remote/test-repo.git/objects/a1/3525f5f44e26d8fbec3226bd488d14793575a2": 3742572048019652365, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/strptime.cpython-313-x86_64-linux-gnu.so": 12654188486128938170, - "frontend/src/routes/validation/history/+page.svelte": 3920288174017004134, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/__init__.py": 10357835306532281617, - "docker/nginx.ssl.conf": 12350396037548059686, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/_collections.py": 14307204206312829238, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_size.py": 16658280641516916790, - "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/openssl/backend.py": 9072112660082423691, - "frontend/src/routes/admin/settings/+page.svelte": 9726389419291634649, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/provision.py": 8707620698060818654, - "backend/tests/test_api_key_model.py": 18059967072469014911, - "backend/tests/test_logger.py": 1680169894013597024, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/tzconversion.cpython-313-x86_64-linux-gnu.so": 15960606468596245469, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/masked_accumulations.py": 11428556645065711062, - "venv/lib/python3.13/site-packages/numpy/random/_examples/cffi/parse.py": 2427019397934437210, - "venv/lib/python3.13/site-packages/pandas/api/internals.py": 5188134630996087511, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/util.py": 3591114320020964752, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/token.py": 4747545058753492487, - "venv/lib/python3.13/site-packages/pip/_internal/cli/req_command.py": 2887890799766730546, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/cmac.py": 12011944740750051829, - "venv/lib/python3.13/site-packages/websockets/connection.py": 5168795926684067030, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/cli.py": 6382193953727339271, - "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/__init__.py": 1798074863773727377, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_assumed_shape.py": 18361009188431483164, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_util.py": 6573034224727513309, - "venv/lib/python3.13/site-packages/PIL/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/polynomial/polynomial.py": 7658234162211356265, - "venv/lib/python3.13/site-packages/yaml/scanner.py": 8554164423030397366, - "venv/lib/python3.13/site-packages/pygments/styles/zenburn.py": 1031869867933871309, - "backend/src/core/utils/superset_context_extractor/_parsing.py": 18406152325228380468, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/token.py": 4161760290367932793, - "venv/lib/python3.13/site-packages/_pytest/python_api.py": 12953851690889336092, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/emath.pyi": 3718540478840842664, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_nonunique_indexes.py": 15468078561381939405, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_coercion.py": 3551994404797560483, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py": 18229054440703471493, - "venv/lib/python3.13/site-packages/pydantic/deprecated/class_validators.py": 2200511838255373813, - "venv/lib/python3.13/site-packages/apscheduler/triggers/calendarinterval.py": 12481650996882675949, - "venv/lib/python3.13/site-packages/numpy/_core/_ufunc_config.py": 7365943844063702766, - "venv/lib/python3.13/site-packages/pygments/lexers/ampl.py": 4594260378653369985, - "venv/lib/python3.13/site-packages/pygments/lexers/_usd_builtins.py": 8671446144574174964, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/foo.f": 6349567809926050379, - "frontend/build/_app/immutable/nodes/24.DAYbKwLH.js": 244590320749686417, - "venv/lib/python3.13/site-packages/cffi/api.py": 5325821560978502135, - "venv/lib/python3.13/site-packages/numpy/_core/_asarray.py": 3468915833437229425, - "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_rewrite_warning.py": 4895919872954538758, - "backend/src/schemas/settings.py": 18238532620797946210, - "venv/lib/python3.13/site-packages/jeepney/tests/test_low_level.py": 3579024079580951234, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/jwk.py": 6458001384702613165, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_quantile.py": 4225791949463893856, - "venv/lib/python3.13/site-packages/pygments/lexers/teal.py": 10004159499175716139, - "venv/lib/python3.13/site-packages/anyio/to_process.py": 16627578499791368365, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_api.py": 14120915875574640262, - "venv/lib/python3.13/site-packages/pandas/io/spss.py": 864838144958947906, - "backend/src/services/clean_release/repositories/policy_repository.py": 9074701224814573817, - "backend/src/services/sql_table_extractor.py": 11429348671339263380, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/index.py": 2763962019423787504, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/metadata.py": 1362166613223529108, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_header.py": 3564391095263545879, - "backend/src/plugins/translate/__tests__/test_dictionary_prompt_builder.py": 12854863376472707556, - "venv/lib/python3.13/site-packages/attr/_cmp.py": 3297594878548179300, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_arithmetic.py": 13304014482504911016, - "venv/lib/python3.13/site-packages/_pytest/config/exceptions.py": 3199245296954654462, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/strptime.pyi": 5973671421648618563, - "venv/lib/python3.13/site-packages/fastapi/middleware/trustedhost.py": 4285622102799027823, - "venv/lib/python3.13/site-packages/click/_winconsole.py": 8133229457213704188, - "venv/lib/python3.13/site-packages/requests/help.py": 1885413874621672882, - "venv/lib/python3.13/site-packages/numpy/polynomial/_polytypes.pyi": 7528777458251688517, + "backend/src/services/clean_release/__tests__/test_policy_engine.py": 7872293927249163831, + "docs/api/html/sync_on.png": 14172530649108700754, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/warnings_and_errors.pyi": 3151453262733619734, "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_append.py": 13152738905565588661, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/zip-safe": 15240312484046875203, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/requests.py": 6703055041957748929, - "venv/lib/python3.13/site-packages/PIL/McIdasImagePlugin.py": 14137545069906812251, - "venv/lib/python3.13/site-packages/attr/_cmp.pyi": 14443711863388606665, - "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE": 13479831069780783137, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py": 7707707044867513457, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_to_julian_date.py": 6868080396693831272, - "backend/src/api/routes/assistant/_admin_routes.py": 253209289619444139, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arraymethod.py": 14421188237635557797, - "venv/lib/python3.13/site-packages/pandas/tests/construction/test_extract_array.py": 3100523370314150013, - "venv/lib/python3.13/site-packages/more_itertools/more.py": 1631135582441184133, - "venv/lib/python3.13/site-packages/_pytest/runner.py": 5772610501857496741, - "venv/lib/python3.13/site-packages/jeepney/wrappers.py": 15234251727654692435, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_tooltip.py": 853808724844451770, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_unique.py": 3148372351781648868, - "backend/src/plugins/translate/preview_session_serializer.py": 8901687711861433007, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/api.py": 9829629144629841277, - "frontend/src/routes/translate/dictionaries/[id]/+page.svelte": 17719561272401762626, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23598Warn.f90": 7589258200398878529, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multiarray.py": 5928288171180750841, - "frontend/src/lib/components/translate/BulkCorrectionSidebar.svelte": 5121541182559165710, - "venv/lib/python3.13/site-packages/pandas/tests/libs/__init__.py": 15130871412783076140, - "backend/src/api/routes/__tests__/test_clean_release_source_policy.py": 15459112324357199814, - "frontend/build/_app/immutable/chunks/BtH-0okm.js": 8437682539386015542, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_dists.py": 16746363359320577809, - "frontend/src/lib/components/layout/__tests__/sidebarNavigation.test.js": 1278883813018181993, - "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/METADATA": 14158024963562115116, - "venv/lib/python3.13/site-packages/pydantic/networks.py": 15767095796055034509, - "venv/lib/python3.13/site-packages/pandas/tests/generic/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_arithmetic.py": 17427754419626622853, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-tan.csv": 6233924374281534211, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py": 16550134594771291234, - "venv/lib/python3.13/site-packages/pandas/io/parsers/base_parser.py": 15148258424429418380, - "backend/src/api/routes/git/_repo_operations_routes.py": 11164792016063890809, - "backend/src/plugins/translate/service.py": 12396293729608729912, - "venv/lib/python3.13/site-packages/rapidfuzz/_feature_detector.py": 15458248567257759500, - "venv/lib/python3.13/site-packages/fastapi/websockets.py": 9910052969532075719, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_stack_unstack.py": 3737891757817696405, - "venv/lib/python3.13/site-packages/pip/_internal/models/__init__.py": 13482731985065116750, - "venv/lib/python3.13/site-packages/pip/_vendor/pkg_resources/__init__.py": 1677532855362260338, - "venv/lib/python3.13/site-packages/yaml/_yaml.cpython-313-x86_64-linux-gnu.so": 16990140871649227895, - "venv/lib/python3.13/site-packages/pydantic/v1/generics.py": 1150594223414883339, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_tz_localize.py": 13699016868476153393, - "venv/lib/python3.13/site-packages/pip/_internal/commands/show.py": 11839987586497822300, - "venv/lib/python3.13/site-packages/pygments/lexers/r.py": 14263133575134645005, - "backend/src/core/mapping_service.py": 5863886462891122323, - "venv/lib/python3.13/site-packages/_pytest/config/findpaths.py": 7867603756389940562, - "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/accessor.py": 8373575175447947401, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_astype.py": 15384141282611151560, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath.py": 13010939919217862164, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/__init__.py": 14571251344510763303, - "venv/lib/python3.13/site-packages/numpy/ma/mrecords.pyi": 8945514863366384484, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/compat/pyarrow.py": 13693379998785127538, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_common.py": 9446944526144164255, - "venv/lib/python3.13/site-packages/attr/_typing_compat.pyi": 2823472697859409877, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_get.py": 10255752806860493777, - "venv/lib/python3.13/site-packages/pip/_internal/commands/cache.py": 1892313355296776523, - "venv/lib/python3.13/site-packages/uvicorn/config.py": 17317823506849880916, - "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/METADATA": 14070889071949105584, - "venv/lib/python3.13/site-packages/pygments/lexers/comal.py": 769727871242464458, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_missing.py": 2976310411820303374, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/reflection.py": 5951113078754792806, - "venv/lib/python3.13/site-packages/pycparser/ast_transforms.py": 9032453625977464506, - "venv/bin/websockets": 12099863324306500376, - "venv/lib/python3.13/site-packages/passlib/tests/test_registry.py": 15377817946543064293, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/connection.py": 8190661510572400096, - "venv/bin/pip3.13": 13861749540792881808, - "frontend/src/lib/stores/__tests__/taskDrawer.test.js": 9115135514077743547, - "frontend/build/_app/immutable/nodes/35.CibKGPSn.js": 8269343134459108819, - "venv/lib/python3.13/site-packages/attr/converters.pyi": 17675091788614033166, - "backend/src/plugins/translate/__tests__/test_lang_detect.py": 2328877106785068272, - "backend/src/plugins/translate/scheduler.py": 13650497976959209825, - "backend/git_repos/remote/test-repo.git/objects/48/c3fde4d5fff5bf98e9bcaa5f328b199aa18292": 6121250272621110311, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_quoting.py": 1147992698412929658, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/pysqlcipher.py": 11225173272050906977, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh27697.f90": 4990763135487995517, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/json.py": 14755215397454910426, + "venv/lib/python3.13/site-packages/attr/_version_info.pyi": 7141309436445210354, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_dict_of_blocks.py": 11646835537993064324, + "docs/api/html/group__candidate__repository.html": 7211404956141328496, + "docs/api/html/group____require__clarification__flag.html": 7381291501052368444, + "docs/api/html/group__run__compliance__violations.html": 7576622887921005784, + "docs/api/html/group__test__database__url__postgres__fallback.html": 15099231812721342773, + "docs/api/html/group__TranslationRunStore.html": 630348523706519639, + "docs/api/html/group____get__task__service.html": 7652976387374733234, + "venv/lib/python3.13/site-packages/pip/_internal/commands/freeze.py": 8644678595442275485, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/putmask.py": 10934101690788549526, + "venv/lib/python3.13/site-packages/pygments/lexers/snobol.py": 414946539602526513, + "venv/lib/python3.13/site-packages/starlette/testclient.py": 16088848330558215194, + "docs/api/html/group__ManifestRepositoryModule.html": 16790910808753143759, + "venv/lib/python3.13/site-packages/pandas/tests/tools/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/multiarray.py": 3224049574922696945, + "venv/lib/python3.13/site-packages/pandas/core/arrays/_mixins.py": 14293848457775268010, + "venv/lib/python3.13/site-packages/numpy/core/__init__.py": 10397294636564169377, "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/common.py": 15130871412783076140, "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_dtypes.py": 6831042272921908068, - "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/openssl/__init__.py": 4870269250323682576, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_copy.py": 12902342280706372953, - "frontend/build/_app/immutable/assets/AssistantChatPanel.D4L5jlt0.css": 10724144138366384732, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_parser.py": 3540203683732744499, - "venv/lib/python3.13/site-packages/pandas/_version.py": 3480474785419232091, - "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/vectorized.pyi": 15498895254516573071, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_timezones.py": 8042029178538467146, - "venv/lib/python3.13/site-packages/jose/jwe.py": 3325660353225624025, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_aarch64_gcc.h": 8140470539757491899, - "venv/lib/python3.13/site-packages/pandas/_libs/testing.pyi": 16691791330088523786, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py": 2042509334195547606, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_coercion.py": 3339075591248270762, - "venv/lib/python3.13/site-packages/pandas/core/window/rolling.py": 6316477981414191778, - "venv/lib/python3.13/site-packages/websockets/protocol.py": 6401227903827084901, - "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/__init__.py": 63497920264089252, - "venv/lib/python3.13/site-packages/pandas/io/pickle.py": 5418646169167774144, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/REQUESTED": 15130871412783076140, - "frontend/build/_app/immutable/chunks/B3miH4jD.js": 11736959945545311440, - "venv/lib/python3.13/site-packages/pandas/tests/internals/test_internals.py": 2049484047553296860, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/__init__.py": 12793458753561114666, - "backend/src/services/clean_release/__tests__/test_policy_engine.py": 7872293927249163831, - "backend/src/services/clean_release/exceptions.py": 16765031947674227117, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/shape_base.pyi": 10291383658131961346, - "backend/src/services/profile_utils.py": 11110559205027128244, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_initialstub_already_started.py": 5562030563802006923, - "venv/lib/python3.13/site-packages/numpy/_core/tests/_natype.py": 12013743717306900860, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_bcrypt.py": 11146468670439284889, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py": 14190849361275154667, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_ndarray_backed.py": 10097812802469682233, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/wrappers.py": 315409799569602977, - "venv/bin/activate.fish": 5275961582873298085, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/METADATA": 13633829318759752611, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_longdouble.py": 9337218715436213122, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_categorical.py": 9615571808720893016, - "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/RECORD": 1051307407005554409, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_mod.f90": 5765181406654284736, - "venv/lib/python3.13/site-packages/numpy/_configtool.pyi": 9670892208858157218, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_sorting.py": 10523740688498427929, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_setops.py": 10550603120090683350, - "venv/lib/python3.13/site-packages/pygments/formatter.py": 11156733836937309465, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/highlighter.py": 10615901258492570740, - "backend/src/services/__tests__/test_encryption_manager.py": 11651916791559202800, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_ints.py": 5616705208267050659, - "venv/lib/python3.13/site-packages/pycparser/plyparser.py": 5251740466238035035, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_polybase.pyi": 3404315099794022355, - "venv/lib/python3.13/site-packages/jsonschema/_utils.py": 14237077105384631097, - "venv/lib/python3.13/site-packages/pygments/lexers/typoscript.py": 6706632522710582762, - "venv/lib/python3.13/site-packages/pandas/tests/io/xml/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_gcs.py": 7733247456252965901, - "venv/lib/python3.13/site-packages/websockets/speedups.pyi": 10322382420215791091, - "backend/src/plugins/translate/orchestrator_validation.py": 17464651621865127561, - "venv/lib/python3.13/site-packages/greenlet/tests/leakcheck.py": 10179165748538820557, - "venv/lib/python3.13/site-packages/numpy/__config__.py": 15794735729525094396, - "backend/tests/core/migration/test_dry_run_orchestrator.py": 5618205549212894117, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/token_endpoint.py": 6118770923176099889, - "venv/lib/python3.13/site-packages/uvicorn/_types.py": 3339389597716220585, - "venv/lib/python3.13/site-packages/pip/_internal/exceptions.py": 2252826732781519645, - "venv/lib/python3.13/site-packages/numpy/_core/numeric.py": 12261531924304979741, - "venv/lib/python3.13/site-packages/pip/_internal/main.py": 13711402795965346761, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/foo_deps.f90": 14350239197565389508, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_repr.py": 16609300578827398344, - "backend/src/core/utils/superset_context_extractor/__init__.py": 16372223806424875537, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/binding.py": 17078280153372356796, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix_py.py": 17041764258638228993, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/token.py": 11655733747403312358, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/validator_creation.py": 2745563768861102999, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/tags.py": 254599446317461188, - "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_time.py": 10463741033950978270, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-objarr.npz": 9481735723557962988, - "venv/lib/python3.13/site-packages/idna-3.11.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/uvicorn/lifespan/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_log_render.py": 18076931145915444473, - "venv/lib/python3.13/site-packages/numpy/_typing/_shape.py": 12667553664122376205, - "venv/lib/python3.13/site-packages/pygments/lexers/forth.py": 17623561228839319663, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_apply.py": 11248068903302454630, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_cumulative.py": 11752712818547022872, - "frontend/src/components/RepositoryDashboardGrid.svelte": 8427306073875543545, - "backend/src/services/git_service.py": 12429116089116885657, - "backend/src/api/routes/assistant/_command_parser.py": 4551109710541212154, - "venv/lib/python3.13/site-packages/dateutil/tz/_common.py": 9009072600471223066, - "backend/tests/test_layout_utils.py": 15634672279171875732, - "venv/lib/python3.13/site-packages/_pytest/outcomes.py": 12782895027812738142, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_equals.py": 18261810467289276844, - "venv/lib/python3.13/site-packages/pillow.libs/libopenjp2-94e588ba.so.2.5.4": 2483101806045986252, - "venv/lib/python3.13/site-packages/pip/_internal/distributions/base.py": 16714704323747942110, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/hi77.f": 10617763407280454334, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA.py": 17817123894903120316, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/models.py": 5656065513234782067, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_api.py": 16743710460729009914, - "venv/lib/python3.13/site-packages/pygments/lexers/mips.py": 2078929831513352031, - "backend/test_pat_api.py": 4206656943734821967, - "backend/alembic_test.db": 14995253579408279707, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/constrain.py": 6513876973118703677, - "backend/src/schemas/health.py": 17351928434071690723, - "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/hybrid.py": 14287665090144592501, - "venv/lib/python3.13/site-packages/numpy/f2py/cb_rules.pyi": 12275242654430570028, - "venv/lib/python3.13/site-packages/pip/_internal/configuration.py": 2563100675379605810, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f90continuation.f90": 17056591497459381871, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_recfunctions.py": 16014503284544747867, - "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/METADATA": 14180973198574731599, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/testing.pyi": 16263777835572515739, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_map.py": 6556132946198785761, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_chaining_and_caching.py": 11784574265874608859, - "venv/lib/python3.13/site-packages/numpy/_core/multiarray.pyi": 3494871767602648807, - "venv/lib/python3.13/site-packages/numpy/_core/_struct_ufunc_tests.cpython-313-x86_64-linux-gnu.so": 13269324887178340397, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/starlette/templating.py": 9242638124487797988, - "venv/lib/python3.13/site-packages/urllib3/util/url.py": 15992369651965016538, - "frontend/src/lib/api/__tests__/reports_api.test.js": 4759560641984508050, - "frontend/src/lib/components/translate/BulkReplaceModal.svelte": 9447617465987205060, - "venv/lib/python3.13/site-packages/more_itertools/recipes.py": 5254043689078173976, - "venv/lib/python3.13/site-packages/pandas/core/arrays/numpy_.py": 16641729409992576358, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_constructors.py": 12118296571694122743, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/flatiter.pyi": 9598576095384661517, - "backend/src/api/routes/translate/_schedule_routes.py": 18139325016758974063, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/testing.pyi": 9317922890783549326, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi": 7385072545198817771, - "backend/src/plugins/maintenance_banner.py": 13137032570032257498, - "backend/src/plugins/migration.py": 10457528901248546685, - "venv/lib/python3.13/site-packages/pandas/core/generic.py": 10174952306641057447, - "venv/lib/python3.13/site-packages/pillow.libs/libpng16-4a38ea05.so.16.53.0": 13136089038268964667, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/liblber-1c9097e2.so.2.0.200": 2651879839738900594, - "venv/lib/python3.13/site-packages/click/shell_completion.py": 5858110451169927373, - "venv/lib/python3.13/site-packages/numpy/linalg/_linalg.pyi": 9629457630163613604, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/__init__.py": 8924316361489544973, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_floats.py": 3064615530495290792, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/util.py": 955993052529739164, - "venv/lib/python3.13/site-packages/pyasn1/type/useful.py": 10313387611927801339, - "backend/src/api/routes/assistant/_resolvers.py": 5636628127798453486, - "venv/lib/python3.13/site-packages/pandas/core/methods/to_dict.py": 4653628436393663485, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/bitgen.h": 12421210767114721499, - "backend/src/api/auth.py": 16676039157915315566, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_alter_axes.py": 11338712836362534969, - "venv/lib/python3.13/site-packages/pygments/lexers/dotnet.py": 17970884907837213099, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_2_complexcompat.h": 5001035774408914877, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/mod.py": 2054876501774773382, - "venv/lib/python3.13/site-packages/fastapi/cli.py": 13972351579061154035, - "venv/lib/python3.13/site-packages/iniconfig/_parse.py": 11418441008427032090, - "venv/lib/python3.13/site-packages/numpy/_globals.pyi": 12839879732484756979, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_monotonic.py": 14648437502004398715, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_csv.py": 10737444103906389448, - "venv/lib/python3.13/site-packages/more_itertools/more.pyi": 4844596605492825806, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_apply.py": 8103417303073393969, - "venv/lib/python3.13/site-packages/packaging/tags.py": 1999137344425005827, - "venv/lib/python3.13/site-packages/pandas/io/excel/_pyxlsb.py": 10035587889954731645, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_numba.py": 6409810497251251179, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_compression.py": 8061288329598682752, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/utils.h": 3920393832993063886, - "venv/lib/python3.13/site-packages/numpy/_core/overrides.py": 252940520997718714, - "venv/lib/python3.13/site-packages/pandas/core/groupby/grouper.py": 18110568057754450953, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py": 5951912505933673835, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timedeltas.pyi": 3783371827926657291, - "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/sqlalchemy/pool/base.py": 16951268065271931235, - "venv/lib/python3.13/site-packages/pygments/styles/solarized.py": 11231143047572616298, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_compare.py": 3079569478684646491, - "venv/lib/python3.13/site-packages/pygments/lexers/q.py": 15426466074881683794, - "backend/src/core/task_manager/context.py": 11799776870777277331, - "venv/lib/python3.13/site-packages/pip/_internal/utils/compatibility_tags.py": 15862649917149158291, - "backend/src/services/clean_release/repositories/report_repository.py": 8327339942479580975, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufunc_config.pyi": 2005481648919369399, - "frontend/src/components/TaskHistory.svelte": 4575283937108155085, - "venv/lib/python3.13/site-packages/pygments/lexers/maxima.py": 11824576541091274641, - "venv/lib/python3.13/site-packages/websockets/legacy/exceptions.py": 16025779645869134942, - "venv/lib/python3.13/site-packages/pandas/core/common.py": 14578909424716153057, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/base.py": 5924592154431932923, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/quantile.py": 17341029201525362074, - "backend/src/plugins/translate/__tests__/test_dictionary_utils.py": 2896829624338027530, - "backend/src/services/clean_release/stages/manifest_consistency.py": 5890428472425990952, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/fields.cpython-313-x86_64-linux-gnu.so": 16927263232848238698, - "venv/lib/python3.13/site-packages/jaraco/classes/properties.py": 6976928770004942858, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel.pyi": 16372699564794732463, - "frontend/src/components/DynamicForm.svelte": 2120031570302269345, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/control.py": 2034518223411945438, - "venv/lib/python3.13/site-packages/passlib/tests/sample1.cfg": 9597283806285213340, - "venv/lib/python3.13/site-packages/pandas/tseries/holiday.py": 1134358927599488799, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_arrow.py": 10068866425352207113, - "venv/lib/python3.13/site-packages/numpy/testing/overrides.py": 11819432487830192978, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/simple.py": 11050636051019777317, - "venv/lib/python3.13/site-packages/jeepney/__init__.py": 1063800617763464773, - "venv/lib/python3.13/site-packages/pandas/_libs/arrays.pyi": 12629806207276576877, - "backend/src/services/clean_release/repositories/manifest_repository.py": 12161285893423159929, - "venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py": 7733356903092860495, - "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/LICENSE": 16510279186416777136, - "venv/lib/python3.13/site-packages/pygments/lexers/func.py": 12257919753150082714, - "frontend/src/routes/datasets/__tests__/DatasetPreview.test.js": 12281160027416292128, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_partial.py": 15129217814262096441, - "venv/lib/python3.13/site-packages/gitdb/db/loose.py": 17467413653016810702, - "venv/lib/python3.13/site-packages/idna-3.11.dist-info/RECORD": 11541505360973709787, - "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/fallback.py": 4260636031748548345, - "venv/lib/python3.13/site-packages/anyio/__init__.py": 12752386096259972231, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_slp_switch.py": 16490710972475154509, - "venv/lib/python3.13/site-packages/pip/_internal/network/cache.py": 10606522397693824641, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rename_axis.py": 13193478481758930128, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_npfuncs.py": 13987318550267921389, - "venv/lib/python3.13/site-packages/certifi/core.py": 7472627735517449185, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/halffloat.h": 16913381775994652343, - "backend/src/plugins/translate/orchestrator_retry.py": 2531207787915962557, - "backend/src/models/dataset_review_pkg/_mapping_models.py": 1407462125644004056, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_quantile.py": 11273403743157110261, - "backend/src/schemas/dataset_review.py": 7490971410706145392, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x86_msvc.h": 2465089365642299646, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/multiarray.pyi": 17232959648651278910, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/RECORD": 15865206372525596795, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/terminal_theme.py": 13727399800263579809, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_f2cmap.py": 5863341586534531594, - "venv/lib/python3.13/site-packages/pandas/core/ops/__init__.py": 4049432353810047365, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_equals.py": 11041884432990762650, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/models.py": 11521700876708601977, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_constructors.py": 11786151805350138436, - "venv/lib/python3.13/site-packages/pygments/lexers/elm.py": 14683437310498104916, - "venv/lib/python3.13/site-packages/pygments/lexers/textedit.py": 14872291021083255414, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/numeric.pyi": 17005748821769179511, - "frontend/src/routes/datasets/ColumnsTable.svelte": 14113713230812728863, - "backend/src/services/clean_release/stages/data_purity.py": 7015962973560119808, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_timestamp.py": 12253372102602993034, - "venv/lib/python3.13/site-packages/fastapi/security/open_id_connect_url.py": 3502444317759870079, - "venv/lib/python3.13/site-packages/_pytest/terminalprogress.py": 5490989904517343259, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cpu_dispatcher.py": 2063037275809439611, - "venv/lib/python3.13/site-packages/referencing/tests/test_core.py": 8280983300775878144, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix.py": 4440659352851541547, - "venv/lib/python3.13/site-packages/numpy/random/_generator.cpython-313-x86_64-linux-gnu.so": 15625019745021657670, - "venv/lib/python3.13/site-packages/pandas/testing.py": 18352975429944961593, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_numpy_compat.py": 9112925138440787555, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_month.py": 14597470286884431085, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/ul4.py": 9580182474451220952, - "backend/src/plugins/translate/dictionary_validation.py": 16674754716565921261, - "backend/src/services/dataset_review/orchestrator_pkg/_commands.py": 2554792474786179775, - "venv/lib/python3.13/site-packages/rsa/pkcs1_v2.py": 3533398238491175229, - "venv/lib/python3.13/site-packages/pip/_internal/operations/freeze.py": 3469845570614985559, - "frontend/src/lib/api/assistant.js": 12514226537527897950, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/util.py": 4890614159013873000, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_structures.py": 16375837477294135345, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286.f90": 1249061697041863692, - "venv/lib/python3.13/site-packages/anyio/abc/_tasks.py": 16839170934610571514, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_textreader.py": 388955620768371652, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/_orm_constructors.py": 4276726508722638048, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_cpp_exception.py": 11851283355840567373, - "venv/lib/python3.13/site-packages/numpy/random/__init__.py": 11732100564412485633, - "venv/lib/python3.13/site-packages/numpy/polynomial/hermite_e.py": 3654583356259850174, - "backend/src/core/utils/network.py": 535557448085943960, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_join.py": 2585969863606902743, - "backend/src/core/migration/__init__.py": 13075189211840127611, - "venv/lib/python3.13/site-packages/pandas/core/resample.py": 13814298871925341617, - "venv/lib/python3.13/site-packages/certifi/cacert.pem": 14727832973577663826, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_common.h": 14732581790650403546, - "venv/lib/python3.13/site-packages/starlette/middleware/sessions.py": 11719848399661632707, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_readlines.py": 15928258358116399067, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_api.py": 1910541672533352625, - "venv/lib/python3.13/site-packages/anyio/_core/_subprocesses.py": 7271614043537119143, - "venv/lib/python3.13/site-packages/authlib/oauth1/__init__.py": 3692257288065292607, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_scalar_compat.py": 10068989979144965125, - "venv/lib/python3.13/site-packages/pandas/io/json/__init__.py": 12333505155070172626, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arrayterator.pyi": 7439348655567232744, - "venv/lib/python3.13/site-packages/greenlet/tests/test_version.py": 6317733744899804292, - "backend/src/services/git/_branch.py": 1746193863798413085, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_clearing_run_switches.py": 3020294789560975101, - "venv/lib/python3.13/site-packages/pip/_internal/utils/setuptools_build.py": 13594639612360346306, - "backend/tests/test_storage_config.py": 14773544217703363468, - "venv/lib/python3.13/site-packages/numpy/_utils/__init__.py": 7731065084036767848, - "venv/lib/python3.13/site-packages/apscheduler/executors/tornado.py": 6635576580306890718, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/take.py": 3170415198452493008, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py": 9888795404090331319, - "venv/lib/python3.13/site-packages/git/refs/log.py": 5175801243332619268, - "backend/src/plugins/translate/service_datasource.py": 10240814407336170041, - "venv/lib/python3.13/site-packages/pygments/lexers/prolog.py": 599539463980699865, - "frontend/src/routes/datasets/review/[id]/__tests__/dataset_review_workspace.ux.test.js": 14106200953934418963, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_timedelta.py": 7742506012012398830, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/plugin_base.py": 2880434680251108786, - "venv/lib/python3.13/site-packages/_pytest/scope.py": 7603155109542903644, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_setops.py": 13440916133402971190, - "backend/src/core/auth/jwt.py": 11190403692794990534, - "venv/lib/python3.13/site-packages/anyio/_core/_testing.py": 14024940365851109155, - "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/METADATA": 15970460108484113417, - "venv/lib/python3.13/site-packages/jsonschema/tests/typing/test_all_concrete_validators_match_protocol.py": 14824388798676578409, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_csv.py": 6678500392137188521, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/METADATA": 6596896092754256988, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/test_indexing.py": 2274965639578580723, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/version.py": 6401479036177132374, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/min_max_.py": 13457611930368041821, - "venv/lib/python3.13/site-packages/jsonschema/_types.py": 9250091433305395923, - "venv/lib/python3.13/site-packages/keyring/core.py": 2764269590123131634, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8693/__init__.py": 11065844267208884531, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/__init__.py": 13841777369501476946, - "venv/lib/python3.13/site-packages/dateutil/parser/isoparser.py": 18015430204844361067, - "venv/lib/python3.13/site-packages/numpy/fft/tests/test_pocketfft.py": 18025182347224285050, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_public_dtype_api_table.h": 8933016749764021181, - "venv/lib/python3.13/site-packages/pandas/core/internals/__init__.py": 1377108808392195313, - "venv/lib/python3.13/site-packages/idna/idnadata.py": 200840860629525970, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/vector.py": 9941185556118343263, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_dtypes.py": 2313400030798822026, - "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_xml_dtypes.py": 18293138335799308439, - "venv/lib/python3.13/site-packages/PIL/features.py": 3481835375516797487, - "venv/lib/python3.13/site-packages/numpy/__init__.cython-30.pxd": 1476688171642957054, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/METADATA": 8985010079096958084, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_datetime_index.py": 15448494560143263150, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_timezones.py": 15157687716502574038, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_compat.py": 4677414058216516380, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_selectable_constructors.py": 84919308502240880, - "venv/lib/python3.13/site-packages/pygments/styles/rainbow_dash.py": 12236746494379891602, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_astype.py": 1961831758405941258, - "venv/lib/python3.13/site-packages/pip/_internal/network/utils.py": 13421242949994555055, - "frontend/build/_app/immutable/chunks/DNOraAy0.js": 868732761380476466, - "venv/lib/python3.13/site-packages/passlib/tests/test_utils_handlers.py": 556092537518149789, - "venv/lib/python3.13/site-packages/pygments/lexers/igor.py": 6506221273085723501, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/lambdas.py": 13377298868598623228, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_printing.py": 8859757563354666575, - "venv/lib/python3.13/site-packages/websockets/http11.py": 11022534176398053082, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarprint.py": 9482100952562512933, - "venv/lib/python3.13/site-packages/fastapi/logger.py": 11590581556317053213, - "frontend/src/routes/settings/__tests__/settings_page.integration.test.js": 4898515600493251972, - "backend/src/core/utils/superset_context_extractor/_templates.py": 13945363390780279343, - "venv/lib/python3.13/site-packages/ecdsa/ecdh.py": 12596317261561755793, - "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA": 18410956221497090898, - "backend/src/plugins/translate/_llm_parse.py": 3278211416813203155, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_freq_attr.py": 1720704043778272895, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_construction.py": 10619501873883861745, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_misc.py": 8706265665356094801, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/totp.py": 11888568940387752607, - "venv/lib/python3.13/site-packages/passlib/handlers/bcrypt.py": 8125664010268654055, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_reduction.py": 1049551473665255648, - "backend/src/api/routes/assistant/_dataset_review_dispatch.py": 555136946286235411, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_period_range.py": 9598872514187524706, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_month.py": 8485374160446988786, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/__init__.py": 7062045842767697645, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_infer_objects.py": 6769980076977692890, - "venv/lib/python3.13/site-packages/numpy/f2py/symbolic.py": 16854377502491291093, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_results.py": 18145930285449734975, - "venv/lib/python3.13/site-packages/pygments/lexers/tlb.py": 1169242051301155885, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/authenticate_client.py": 16886645731942472285, - "venv/lib/python3.13/site-packages/starlette/status.py": 16192064443996706569, - "venv/lib/python3.13/site-packages/_pytest/timing.py": 14080119171718125986, - "frontend/build/_app/immutable/nodes/16.BQspsH4T.js": 16103085405789869452, - "venv/lib/python3.13/site-packages/numpy/polynomial/hermite_e.pyi": 13068936038543812082, - "backend/tests/test_translate_scheduler.py": 9870953183282058719, - "venv/lib/python3.13/site-packages/numpy/core/_internal.py": 14816989375912210674, - "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/licenses/LICENSE": 14610443802372107702, - "venv/lib/python3.13/site-packages/numpy/lib/array_utils.py": 18135114588643176359, - "venv/lib/python3.13/site-packages/packaging/licenses/__init__.py": 15879493360260891293, - "backend/src/models/__tests__/test_report_models.py": 1002634514476529590, - "frontend/src/routes/datasets/__tests__/split_view.test.js": 6143972529940917004, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_time_grouper.py": 3203729024111501071, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_interaction.py": 12216477658994324787, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/gh_22819.pyf": 14717748358749934995, - "backend/src/api/routes/assistant/_dataset_review.py": 4389080462745572364, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/dtype.py": 5553691086633215767, - "venv/lib/python3.13/site-packages/starlette/responses.py": 14081178833432955042, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_unary.py": 7128845965976836334, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_find_common_type.py": 9581516171321396333, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/__init__.py": 15130871412783076140, - "backend/src/models/task.py": 13936135007931808732, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_autocorr.py": 1092316868398391792, - "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/RECORD": 1556051687830913019, - "venv/lib/python3.13/site-packages/numpy/linalg/__init__.py": 15647756307608142577, - "backend/src/services/__init__.py": 15123879863527585264, - "backend/tests/core/test_mapping_service.py": 14025593540151022064, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/base.py": 13269563625127294513, - "venv/lib/python3.13/site-packages/numpy/_core/_type_aliases.pyi": 15848834171197104301, - "venv/lib/python3.13/site-packages/httpx/_transports/asgi.py": 12335675489870745729, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufuncs.py": 12732599294816239111, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/segment.py": 2555584120510872966, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/licenses/LICENSE": 8364608327598414179, - "venv/lib/python3.13/site-packages/_pytest/warning_types.py": 10695097290648045427, - "venv/lib/python3.13/site-packages/passlib/handlers/sha1_crypt.py": 5752556581809938954, - "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/passlib/crypto/des.py": 14699826058580193499, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm32_gcc.h": 3561524604274567339, - "venv/lib/python3.13/site-packages/anyio/_core/_streams.py": 6436461519284884601, - "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/oauth2_client.py": 6742098857947604729, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/build_tracker.py": 9389444024234384408, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/misc.py": 6571241778569465264, - "venv/lib/python3.13/site-packages/pandas/core/reshape/concat.py": 2218848863149192467, - "frontend/build/_app/immutable/entry/app.BlZMRWBE.js": 11956739625343860073, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_twodim_base.py": 17623133613018058380, - "venv/lib/python3.13/site-packages/passlib/hash.py": 5238710192614935875, - "backend/src/api/routes/__tests__/test_assistant_authz.py": 3835028453926095879, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timezones.cpython-313-x86_64-linux-gnu.so": 1137453907225619959, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_dml_constructors.py": 4497038002189188311, - "venv/lib/python3.13/site-packages/ecdsa/test_ellipticcurve.py": 11125783981574901613, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_real.f90": 9097998998863007705, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_scalar_compat.py": 1306236983392218709, - "frontend/build/_app/immutable/chunks/krqknA6L.js": 13706362651914504619, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/util.py": 2866856507760047219, - "venv/lib/python3.13/site-packages/pandas/tests/apply/conftest.py": 13798335354961261346, - "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/WHEEL": 5179340427739743287, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_validators.py": 14178329676643700151, - "venv/lib/python3.13/site-packages/pandas/tests/test_sorting.py": 10751098438703044961, - "venv/lib/python3.13/site-packages/pydantic/env_settings.py": 18250976255197243083, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_matplotlib.py": 12775850858284584296, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/context.py": 1041624619197012753, - "venv/lib/python3.13/site-packages/dateutil/zoneinfo/__init__.py": 10261654903106416888, - "backend/src/plugins/translate/orchestrator_lang_stats.py": 5713612003349083382, - "backend/tests/test_datasets.py": 9766141609165223604, - "backend/tests/test_api_key_auth.py": 15854247672009604904, - "venv/lib/python3.13/site-packages/numpy/typing/mypy_plugin.py": 1306129775649200113, - "backend/src/plugins/translate/orchestrator_config.py": 1227864697811313446, - "venv/lib/python3.13/site-packages/greenlet/tests/test_tracing.py": 10227316489696807112, - "venv/lib/python3.13/site-packages/numpy/random/_common.cpython-313-x86_64-linux-gnu.so": 12834724130890991478, - "venv/lib/python3.13/site-packages/pandas/tests/reductions/test_reductions.py": 11624188672428941494, - "venv/lib/python3.13/site-packages/cffi/backend_ctypes.py": 2042566833861899211, - "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/meson.build": 17468163147765825687, - "venv/lib/python3.13/site-packages/pandas/core/ops/docstrings.py": 3721650738518391256, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/extension/list/array.py": 8065856342131357421, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py": 2516476609539242190, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_to_numpy.py": 14845850776625255794, - "frontend/playwright-report/index.html": 16542149899775356791, - "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py": 2375452080667815941, - "frontend/src/lib/stores/__tests__/mocks/env_public.js": 17950613826406014914, - "backend/alembic/versions/ed310b33f02c_multi_language_translation_tables.py": 1424919631205944664, - "backend/src/api/routes/translate/_correction_routes.py": 9348235443422223333, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi": 14119032813912827271, - "venv/lib/python3.13/site-packages/jsonschema_specifications/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/core/arrays/floating.py": 1215586266958421991, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/core/col.py": 4221271461723119525, - "venv/lib/python3.13/site-packages/numpy/f2py/_src_pyf.py": 546976622482819095, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_dst.py": 12243642467695371088, - "venv/lib/python3.13/site-packages/pygments/styles/paraiso_light.py": 15941591873059208999, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/models.py": 17870758731501836303, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_iteration.py": 15247340610412364508, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_no_deprecated_api.h": 7896028550808252043, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90": 15768643271492041853, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_sparse_accessor.py": 6774374030220202353, - "venv/lib/python3.13/site-packages/uvicorn/loops/uvloop.py": 5385425357504191161, - "backend/src/core/task_manager/event_bus.py": 1436794780600195410, - "venv/lib/python3.13/site-packages/rapidfuzz/utils.pyi": 7400725037332728015, - "backend/tests/test_translate_scheduler_execution.py": 16687335504320865378, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/misc/extended_precision.pyi": 6541258584648209609, - "venv/lib/python3.13/site-packages/passlib/utils/compat/_ordered_dict.py": 14248790502300368024, - "venv/lib/python3.13/site-packages/pycparser/ply/__init__.py": 5040371336745852622, - "backend/git_repos/remote/test-repo.git/hooks/applypatch-msg.sample": 12627299623252391515, - "venv/lib/python3.13/site-packages/PIL/ImageWin.py": 13635870584232081323, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/__init__.py": 16532856661318424631, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufuncs.pyi": 14995898537484305307, - "venv/lib/python3.13/site-packages/pandas/util/__init__.py": 4070574585004336241, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_unique.py": 16285418015531891530, - "backend/src/plugins/translate/_run_service.py": 1705461175389858266, - "frontend/src/components/git/GitInitPanel.svelte": 515428146955886062, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/compiler.py": 11662494978292401568, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_datetimelike.py": 15246580603900811749, - "venv/lib/python3.13/site-packages/pandas/core/indexes/accessors.py": 14394872772838047912, - "venv/lib/python3.13/site-packages/greenlet/TStackState.cpp": 16720079760074325527, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/assertion.py": 5287436128235488464, - "venv/lib/python3.13/site-packages/packaging/metadata.py": 9168255069163141470, - "backend/src/core/superset_client/_layout_utils.py": 1180616937544609564, - "venv/lib/python3.13/site-packages/pip/_internal/cli/main.py": 9304034369762028739, - "venv/lib/python3.13/site-packages/numpy/_configtool.py": 2946953194004101078, - "frontend/src/routes/settings/automation/+page.svelte": 13199339263146300897, - "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_salsa.py": 1756536674254931838, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_serialization.py": 2011519400081029270, - "venv/lib/python3.13/site-packages/pygments/lexers/thingsdb.py": 6073447481627395832, - "venv/lib/python3.13/site-packages/pandas/_libs/byteswap.pyi": 6723628093359375823, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_asfreq.py": 12721047184483392773, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/__init__.py": 5895297076117159245, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/anyio/_core/_sockets.py": 10525237827959090532, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rename.py": 4890779493250245903, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/LICENSE": 2032205056284080825, - "venv/lib/python3.13/site-packages/yaml/parser.py": 18021832376874455801, - "venv/lib/python3.13/site-packages/pillow.libs/libharfbuzz-0692f733.so.0.61230.0": 23110287346167671, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_common.py": 2265736743367879051, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/cache.py": 15037055977924167732, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_openssl.py": 10446441599800965961, - "venv/lib/python3.13/site-packages/pandas/_libs/missing.pyi": 13543139288840944411, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh26920/two_mods_with_one_public_routine.f90": 7957683453180939605, - "venv/lib/python3.13/site-packages/pandas/core/arrays/_mixins.py": 14293848457775268010, - "venv/lib/python3.13/site-packages/passlib/apache.py": 2357244937629445006, - "venv/lib/python3.13/site-packages/pandas/_testing/__init__.py": 10127496080404419481, - "venv/lib/python3.13/site-packages/git/refs/head.py": 16271128287606894569, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_arithmetic.py": 17043958604607035425, - "venv/lib/python3.13/site-packages/urllib3/contrib/__init__.py": 15130871412783076140, - "venv/bin/dotenv": 953953349803507198, - "frontend/src/lib/components/reports/__tests__/report_card.ux.test.js": 10328656559485751380, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_pivot_multilevel.py": 9830258607305392103, - "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/__init__.py": 18036348770966744795, - "venv/lib/python3.13/site-packages/pygments/console.py": 3540660073442483692, - "venv/lib/python3.13/site-packages/anyio/_core/_typedattr.py": 17584691045493791349, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_diff.py": 7420674239386436885, - "frontend/src/components/tasks/TaskResultPanel.svelte": 2978429516796744791, - "frontend/build/_app/env.js": 8815854342083926790, - "venv/lib/python3.13/site-packages/numpy/_core/printoptions.py": 3897105663572772838, - "venv/lib/python3.13/site-packages/pandas/core/algorithms.py": 487939626203097713, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/tzconversion.pyi": 10947021928755741366, - "venv/lib/python3.13/site-packages/requests/cookies.py": 4997226307650350876, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_where.py": 3272402211717453881, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/__init__.py": 260774374497653876, - "backend/src/api/routes/git/_merge_routes.py": 12751818588668193353, - "venv/lib/python3.13/site-packages/referencing/_attrs.pyi": 10030665705880994025, - "venv/lib/python3.13/site-packages/pydantic/plugin/_loader.py": 792663962985957671, - "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/RECORD": 1164466882742493155, - "backend/src/services/clean_release/artifact_catalog_loader.py": 16917420865314497219, - "venv/lib/python3.13/site-packages/pygments/styles/coffee.py": 17584414468786822371, - "backend/src/plugins/translate/__tests__/test_clickhouse_insert_integration.py": 990102078989024575, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/android.py": 8607703347015852195, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_partial.py": 3151286293440416036, - "venv/lib/python3.13/site-packages/greenlet/tests/test_weakref.py": 6780204527427742510, - "venv/lib/python3.13/site-packages/numpy/lib/_shape_base_impl.py": 16539612003028676816, - "venv/lib/python3.13/site-packages/websockets/asyncio/async_timeout.py": 7267209982032642028, - "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/greenlet/_greenlet.cpython-313-x86_64-linux-gnu.so": 6036818030377883416, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust.abi3.so": 2537152913308578487, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/METADATA": 4954909612926293404, - "venv/lib/python3.13/site-packages/numpy/_distributor_init.py": 1101690714183863290, - "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py": 5995058808539530576, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_data.py": 2397937327057341, - "venv/lib/python3.13/site-packages/pip/_internal/commands/inspect.py": 1401259241736437656, - "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_timedelta.py": 364160935264757405, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/methods.py": 8059372834301557565, + "docs/api/html/group__status__to__report__status.html": 9738740379403112359, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/macos.py": 17442393555211213147, + "docs/api/html/group__download__file.html": 17674094830144003140, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/operators.py": 5584982192355398255, + "docs/api/html/group__MaintenanceBannerPlugin.html": 17523541172049741190, + "venv/lib/python3.13/site-packages/anyio/_core/_exceptions.py": 11969894261631227715, "venv/lib/python3.13/site-packages/sqlalchemy/orm/state.py": 10500170103357297551, - "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/__main__.py": 11917862648584782420, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reflection.py": 1799734694597531652, - "venv/lib/python3.13/site-packages/pandas/tests/extension/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/deprecated/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/exceptions.py": 7518613450390473990, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_polynomial.py": 777287409151500309, - "venv/lib/python3.13/site-packages/passlib/tests/test_utils.py": 10362977406431569031, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/__init__.py": 8807410829260170597, - "venv/lib/python3.13/site-packages/dateutil/tzwin.py": 5149446703746204349, - "venv/lib/python3.13/site-packages/urllib3/util/request.py": 9432067988603015849, - "venv/lib/python3.13/site-packages/pandas/io/orc.py": 12754290195886557668, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_normalize.py": 3203921571999101793, - "venv/lib/python3.13/site-packages/uvicorn/importer.py": 5449629250971153435, - "venv/lib/python3.13/site-packages/pygments/lexers/_vim_builtins.py": 6842381248727719900, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_cumulative.py": 16283954014170928273, - "venv/lib/python3.13/site-packages/pygments/lexers/parsers.py": 12372594608244797844, - "venv/lib/python3.13/site-packages/gitdb/typ.py": 16374739906244805047, - "venv/lib/python3.13/site-packages/pygments/lexers/numbair.py": 17382646010399794697, - "venv/lib/python3.13/site-packages/pygments/lexers/lisp.py": 11872331622183590758, - "venv/lib/python3.13/site-packages/pygments/lexers/nix.py": 15050086330545600356, - "venv/lib/python3.13/site-packages/pygments/lexer.py": 3658450949169647228, - "venv/include/site/python3.13/greenlet/greenlet.h": 16216120538647882082, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/__init__.py": 15130871412783076140, - "frontend/src/lib/components/layout/__tests__/test_breadcrumbs.svelte.js": 16890149311572703440, - "frontend/src/lib/components/translate/__tests__/test_translation_preview.svelte.js": 2673586123384011532, - "venv/lib/python3.13/site-packages/pip/_internal/network/xmlrpc.py": 5064964778750366059, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_csky_gcc.h": 12929785267195988209, - "venv/lib/python3.13/site-packages/numpy/f2py/cb_rules.py": 11397521081216402594, - "venv/lib/python3.13/site-packages/fastapi/security/__init__.py": 1345944646061334046, - "venv/lib/python3.13/site-packages/anyio/from_thread.py": 7973678341601453474, - "venv/lib/python3.13/site-packages/numpy/strings/__init__.py": 6523674574341354095, - "venv/lib/python3.13/site-packages/keyring/errors.py": 4587094338672775040, - "venv/lib/python3.13/site-packages/pydantic/v1/errors.py": 11245135449608452720, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timestamps.cpython-313-x86_64-linux-gnu.so": 13209491675968970365, - "venv/lib/python3.13/site-packages/pandas/tests/test_aggregation.py": 16863055892192070549, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_deprecated_kwargs.py": 10379929935087904974, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_f2py2e.py": 8571347023940385644, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log2.csv": 13979868713429167140, - "venv/lib/python3.13/site-packages/pygments/lexers/_luau_builtins.py": 13690910306072616818, - "venv/lib/python3.13/site-packages/pygments/lexers/varnish.py": 3608370156692616959, - "venv/lib/python3.13/site-packages/pygments/lexers/solidity.py": 5071425960622305629, - "venv/lib/python3.13/site-packages/packaging/_manylinux.py": 8268418900652790584, - "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_gen_files.py": 11149423183253618378, - "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/METADATA": 2604612822968175379, - "frontend/build/_app/immutable/chunks/BAEbOLv3.js": 18043792224008034479, - "venv/lib/python3.13/site-packages/pandas/core/accessor.py": 1188716996113179524, - "backend/src/services/clean_release/policy_engine.py": 7078053766918689048, - "venv/lib/python3.13/site-packages/jose/backends/ecdsa_backend.py": 2684176977865283060, - "backend/src/services/dataset_review/repositories/repository_pkg/_mutations.py": 968076476163114767, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/test_indexing.py": 1947969642791009285, - "venv/lib/python3.13/site-packages/pydantic/_internal/_forward_ref.py": 10623110912945011703, - "venv/lib/python3.13/site-packages/greenlet/CObjects.cpp": 3454797518210223926, - "backend/src/plugins/llm_analysis/__tests__/test_screenshot_service.py": 359905908083162759, - "venv/lib/python3.13/site-packages/pandas/io/formats/string.py": 14718123345899686696, - "venv/lib/python3.13/site-packages/pygments/lexers/_stata_builtins.py": 18053452765493556047, - "venv/lib/python3.13/site-packages/cffi/cparser.py": 5246372077864988755, - "venv/lib/python3.13/site-packages/pandas/tests/resample/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/_writer.py": 15053365792216907149, - "venv/lib/python3.13/site-packages/rsa/pkcs1.py": 2576732594642491910, - "frontend/src/components/EnvSelector.svelte": 6483243153689240649, - "backend/src/core/__tests__/test_config_manager_compat.py": 16202699597948342431, - "venv/lib/python3.13/site-packages/pip/_internal/utils/appdirs.py": 539688259643447487, - "venv/lib/python3.13/site-packages/pip/_vendor/__init__.py": 11734104142988812647, - "venv/lib/python3.13/site-packages/urllib3/poolmanager.py": 15431313180245757657, - "venv/lib/python3.13/site-packages/numpy/lib/recfunctions.pyi": 10487441680587530350, - "backend/src/core/superset_client/__init__.py": 3185082867840025180, - "venv/lib/python3.13/site-packages/passlib/handlers/ldap_digests.py": 8658529184965699766, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/type_check.pyi": 1599910480066368464, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_cumulative.py": 15644124412739892167, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_timedelta.py": 17052461094717926538, - "backend/src/plugins/translate/service_utils.py": 15103456860964805370, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/exceptions.py": 14982764273485726199, - "venv/lib/python3.13/site-packages/pillow.libs/liblcms2-cc10e42f.so.2.0.17": 4221600618602131476, - "frontend/src/routes/tools/backups/+page.svelte": 2765328366215862593, - "venv/lib/python3.13/site-packages/pydantic/deprecated/tools.py": 16466182352694741629, - "venv/lib/python3.13/site-packages/numpy/_core/_rational_tests.cpython-313-x86_64-linux-gnu.so": 13475521165331256711, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_pydatetime.py": 16228315407662560992, - "venv/lib/python3.13/site-packages/fastapi/middleware/httpsredirect.py": 5775982317459922443, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/win64python2.npy": 11005857803794805939, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/const_vs_enum.py": 12873459583943748931, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/codec.py": 14814999235499530522, - "venv/lib/python3.13/site-packages/numpy/_distributor_init.pyi": 1308368231471324581, - "venv/lib/python3.13/site-packages/numpy/core/multiarray.py": 18368443598659711836, - "venv/lib/python3.13/site-packages/jaraco/functools/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/lib/_shape_base_impl.pyi": 12052895927933479005, - "venv/lib/python3.13/site-packages/greenlet/TGreenlet.cpp": 4121171004360760212, - "venv/lib/python3.13/site-packages/numpy/polynomial/hermite.pyi": 3573629536236108391, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_object_arr.py": 4725156416161661681, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/request.py": 10484280068366411541, - "venv/lib/python3.13/site-packages/numpy/lib/_type_check_impl.py": 15989335816452913951, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/subrout.f": 18215492757907465667, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_fiscal.py": 14652343698825214870, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/__init__.py": 6327819603201859020, - "venv/lib/python3.13/site-packages/sqlalchemy/util/deprecations.py": 7020540470348910770, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_compat.py": 11481259393140789881, - "venv/lib/python3.13/site-packages/pygments/lexers/hexdump.py": 10665271113239513484, - "backend/git_repos/remote/test-repo.git/refs/heads/main": 7667767390913789840, - "venv/lib/python3.13/site-packages/pydantic/experimental/arguments_schema.py": 8644805798814234457, - "frontend/build/_app/immutable/chunks/BEgtrFG1.js": 8322179021947182552, - "backend/src/core/auth/repository.py": 15675496219240601253, - "frontend/build/_app/immutable/nodes/25.D9n_59tf.js": 16181415213724830381, - "venv/lib/python3.13/site-packages/pydantic/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/__init__.py": 16146480198665866916, - "venv/lib/python3.13/site-packages/pandas/tests/test_col.py": 14781555956509956371, - "venv/lib/python3.13/site-packages/PIL/ExifTags.py": 6869879826623916830, - "venv/lib/python3.13/site-packages/pygments/lexers/tablegen.py": 2917626373516779857, - "venv/lib/python3.13/site-packages/pydantic/v1/color.py": 14545509649623975912, - "venv/lib/python3.13/site-packages/attrs/__init__.py": 9502968706258875910, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/intranges.py": 12536174834761591006, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_neighborhood_iterator_imp.h": 10634781863364525895, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_timezones.py": 1962830142478494009, - "venv/lib/python3.13/site-packages/pytest/__main__.py": 8747175113746141224, - "backend/src/models/storage.py": 14886607138033931307, - "backend/src/services/maintenance/_chart_manager.py": 11268757631496775895, - "venv/lib/python3.13/site-packages/pygments/lexers/x10.py": 6167378515780115912, - "venv/lib/python3.13/site-packages/uvicorn/protocols/utils.py": 6147480543268737542, - "venv/lib/python3.13/site-packages/pygments/lexers/ambient.py": 18106929781201758080, - "venv/lib/python3.13/site-packages/pycparser/_build_tables.py": 569728086093219621, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/converter.py": 9041278869295701566, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_editable.py": 14352954849821931255, - "venv/lib/python3.13/site-packages/pandas/_libs/pandas_datetime.cpython-313-x86_64-linux-gnu.so": 15874094681262240628, - "venv/lib/python3.13/site-packages/pandas/tests/libs/test_libalgos.py": 13934861984871432400, - "venv/lib/python3.13/site-packages/pydantic/_internal/_docs_extraction.py": 5210114991139191634, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/test_na_scalar.py": 13950899907067372014, - "venv/lib/python3.13/site-packages/httpcore/_sync/interfaces.py": 1532245423878428608, - "venv/lib/python3.13/site-packages/pygments/lexers/configs.py": 7712797939104760185, - "venv/lib/python3.13/site-packages/pygments/lexers/console.py": 18266795648198475028, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/__init__.py": 15130871412783076140, - "backend/tests/core/test_git_service_gitea_pr.py": 18003501172717000629, - "venv/lib/python3.13/site-packages/pygments/styles/stata_light.py": 16319330015324455277, - "backend/alembic/versions/b0c1d2e3f4a5_cascade_ondelete_translate_fks.py": 1764442834210967136, - "venv/lib/python3.13/site-packages/keyring/compat/properties.py": 1562771115138037410, - "venv/lib/python3.13/site-packages/pandas/tests/computation/test_compat.py": 11655000938111420543, - "frontend/src/lib/components/translate/CorrectionCell.svelte": 17398304999652244378, - "venv/lib/python3.13/site-packages/authlib/oidc/discovery/models.py": 6924198551176217533, - "venv/lib/python3.13/site-packages/numpy/fft/__init__.pyi": 10354990065626209946, - "venv/lib/python3.13/site-packages/referencing/tests/test_retrieval.py": 10782087416909177703, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/common/block.f": 10727418304254548946, - "frontend/src/app.html": 10207534912546549080, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_xs.py": 1897144171324167738, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/WHEEL": 1598805043198466373, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_pivot.py": 334735766122314163, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/type_api.py": 10299750173867399533, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/expression.py": 15511250785671695359, - "venv/lib/python3.13/site-packages/attr/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/fastapi/_compat/shared.py": 5249003014594464718, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py": 8530403239168529668, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/secrets.py": 17816662030600756342, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh24008.f": 3872245077994936272, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/RECORD": 4487477737768669516, - "venv/lib/python3.13/site-packages/websockets/asyncio/server.py": 885415484558949506, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_ewm.py": 13789842684407148830, - "frontend/playwright-report/trace/index.html": 6654608714409350530, - "backend/src/plugins/llm_analysis/__init__.py": 9254812131558249924, - "venv/lib/python3.13/site-packages/pygments/token.py": 6987328478153445584, - "venv/lib/python3.13/site-packages/cryptography/x509/general_name.py": 4481582226129488535, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_extending.py": 10202091354750153497, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64_np126.pkl.gz": 1630203486813146863, - "frontend/build/_app/immutable/nodes/36.BNORbvJG.js": 6540996846559400613, - "backend/tests/test_smoke_app.py": 15091189356064171349, - "venv/lib/python3.13/site-packages/authlib/integrations/django_client/integration.py": 13610682193839598457, - "venv/lib/python3.13/site-packages/pandas/io/common.py": 12088195203620154171, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/create.py": 16693261531832306870, - "venv/lib/python3.13/site-packages/pygments/lexers/other.py": 6893672181003034910, - "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/RECORD": 10552906886624188222, - "venv/lib/python3.13/site-packages/PIL/TgaImagePlugin.py": 9208942494595222259, - "backend/src/services/clean_release/repositories/artifact_repository.py": 7507938934134519998, - "venv/lib/python3.13/site-packages/certifi/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/greenlet/TUserGreenlet.cpp": 16258622236210473101, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/response.py": 353446217435156470, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_factorize.py": 5585211699185937865, - "venv/lib/python3.13/site-packages/pytest_asyncio/plugin.py": 13414541723622354359, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py": 16768579082462294745, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/setup.py": 17086801293303202021, - "venv/lib/python3.13/site-packages/PIL/ImageDraw2.py": 13610162107593278891, - "venv/lib/python3.13/site-packages/pandas/tests/apply/common.py": 1113935558495455492, - "venv/lib/python3.13/site-packages/idna/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/core/_dtype_ctypes.py": 17055498803745289016, - "venv/bin/activate": 14735074000123383125, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize_py.py": 6518425342376455821, - "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/WHEEL": 12146818530001975731, - "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/METADATA": 14126682758562488244, - "venv/lib/python3.13/site-packages/pyasn1/type/univ.py": 7163437624197683039, - "backend/src/api/routes/assistant/_llm_planner_intent.py": 1835887541250815399, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/infer.py": 12541904372617915365, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_base_indexer.py": 3129123098288498633, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_base.py": 16710163879060522196, - "venv/lib/python3.13/site-packages/numpy/core/overrides.py": 11228841530565061867, - "venv/lib/python3.13/site-packages/passlib/pwd.py": 14727089240749133060, - "venv/lib/python3.13/site-packages/pyasn1/codec/der/encoder.py": 4790267438222037867, - "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/extending_distributions.pyx": 15302775787158991386, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_interface.py": 13648006002292914247, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/versioncontrol.py": 13742159245132241245, - "venv/lib/python3.13/site-packages/pygments/lexers/felix.py": 2334148799642808111, - "venv/lib/python3.13/site-packages/pydantic/v1/utils.py": 902648247561165429, - "venv/lib/python3.13/site-packages/passlib/handlers/argon2.py": 835074952952017434, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_misc.py": 9190561773853901527, - "venv/lib/python3.13/site-packages/anyio/abc/_testing.py": 16484863782452886547, - "venv/lib/python3.13/site-packages/numpy/linalg/_linalg.py": 9654828595008925976, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo_free.f90": 8821492401453445757, - "venv/lib/python3.13/site-packages/git/refs/tag.py": 9979537867501757110, - "venv/lib/python3.13/site-packages/git/repo/fun.py": 9019364012746153312, - "frontend/src/routes/settings/git/+page.svelte": 13757324397807811651, - "venv/lib/python3.13/site-packages/PIL/Hdf5StubImagePlugin.py": 15654153796225833950, - "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension_cpp.cpython-313-x86_64-linux-gnu.so": 7659849621107414188, - "venv/lib/python3.13/site-packages/jose/backends/rsa_backend.py": 13507186353881931758, - "venv/lib/python3.13/site-packages/numpy/typing/tests/test_typing.py": 10311989961588249147, - "docker/all-in-one.Dockerfile": 10896793266219904099, - "venv/lib/python3.13/site-packages/pyasn1/codec/der/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/missing.py": 11241703105777668183, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_interval_pyarrow.py": 3849382723890414899, - "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/licenses/LICENSE": 3868190977070717994, - "venv/lib/python3.13/site-packages/pandas/core/strings/__init__.py": 13025387151657797130, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/__init__.py": 10470644151952252331, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_format.py": 5231304674283854194, - "venv/lib/python3.13/site-packages/pandas/tests/io/conftest.py": 5864037534050136837, - "frontend/src/routes/dashboards/health/+page.svelte": 11635018493969113169, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/expression.py": 1248029135284283479, - "backend/alembic/versions/c4a3a2f74bfe_add_missing_columns_needs_review_.py": 4320606555167902916, - "frontend/eslint.config.js": 14296985543214702398, - "venv/lib/python3.13/site-packages/httpx/_types.py": 12461152436147308761, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/METADATA": 2053484635654179443, - "backend/src/services/clean_release/repositories/approval_repository.py": 11060626515832882475, - "venv/lib/python3.13/site-packages/pip/_internal/models/installation_report.py": 14534544543677907640, - "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/__init__.py": 14268033439436797364, - "venv/lib/python3.13/site-packages/numpy/lib/_scimath_impl.pyi": 8879196542984811747, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/ec_key.py": 5961540064444749833, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reorder_levels.py": 10996225584998355824, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_interval.py": 14749388246573356959, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_inclusive.py": 1389676378885557519, - "backend/src/api/routes/migration.py": 16089356899043357784, - "venv/lib/python3.13/site-packages/greenlet/tests/test_greenlet.py": 10727595500186011102, - "venv/lib/python3.13/site-packages/httpcore/_sync/connection.py": 1539337414493486168, - "venv/lib/python3.13/site-packages/keyring/completion.py": 1027436016070040568, - "venv/lib/python3.13/site-packages/PIL/XpmImagePlugin.py": 6644626557482464312, - "venv/lib/python3.13/site-packages/git/objects/blob.py": 8972374723153211283, - "venv/lib/python3.13/site-packages/PIL/_imaging.cpython-313-x86_64-linux-gnu.so": 1425926264271197601, - "venv/lib/python3.13/site-packages/pandas/io/parsers/python_parser.py": 7297059565749331767, - "backend/git_repos/remote/test-repo.git/objects/00/fcf77cecdf261aef91eda792ab3384a3339922": 1527330822006618217, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/_pytest/_code/source.py": 9488112979192923739, - "venv/lib/python3.13/site-packages/pyasn1/type/error.py": 1479878696626082697, - "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9207/__init__.py": 8434616194114282088, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_series.pyi": 7112486730197067087, - "venv/lib/python3.13/site-packages/pycparser/_c_ast.cfg": 2649342580905806389, - "frontend/src/pages/Dashboard.svelte": 16189908777731571070, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/vectorized.cpython-313-x86_64-linux-gnu.so": 5441755022198996487, - "backend/src/api/__init__.py": 5287505122015708040, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_encs.py": 9703572751543253904, - "backend/src/plugins/translate/orchestrator_aggregator.py": 1906675302571034503, - "frontend/src/lib/stores/taskDrawer.js": 16349119158364586930, - "venv/lib/python3.13/site-packages/pandas/core/sample.py": 11913688303879867963, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_intervalindex.py": 5053113227747333759, - "backend/git_repos/remote/test-repo.git/objects/4e/227f4d8289ea657ae813b1460f979ae4b676b3": 5659284628452785331, - "venv/lib/python3.13/site-packages/attr/setters.py": 12467854389745942025, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/RECORD": 16558021503346615951, - "backend/src/api/routes/maintenance/_router.py": 1368406181799456173, - "backend/_convert_defs.py": 208535643309836247, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/fromnumeric.pyi": 8671744104085911610, - "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pycparser/_ast_gen.py": 5464347629908906775, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_asof.py": 15792528637923603240, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_cte.py": 9274103293201050794, - "venv/lib/python3.13/site-packages/PIL/_imagingft.pyi": 1385456134120145584, - "backend/src/api/routes/dashboards/_listing_routes.py": 10092152880931335002, - "venv/lib/python3.13/site-packages/_pytest/_argcomplete.py": 3586514420674089892, - "venv/lib/python3.13/site-packages/PIL/ImageOps.py": 3884310863548175682, - "venv/lib/python3.13/site-packages/httpx/__version__.py": 9473642134297828811, - "venv/lib/python3.13/site-packages/jeepney/low_level.py": 6546206679858571608, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/base_server.py": 9643197259080504542, - "venv/lib/python3.13/site-packages/pip/_internal/models/index.py": 2839270935469791607, - "venv/lib/python3.13/site-packages/pandas/core/reshape/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_exceptions.py": 15290185665769490169, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arithmetic.pyi": 10265823318697442495, - "venv/lib/python3.13/site-packages/pip/_internal/commands/freeze.py": 8644678595442275485, - "venv/lib/python3.13/site-packages/pandas/core/tools/timedeltas.py": 7221393731712061943, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler.py": 1341849861184131135, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/METADATA": 15876173086384975957, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_unix.h": 9608771997528633681, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming.py": 3762934316884129514, - "venv/lib/python3.13/site-packages/websockets/exceptions.py": 12048063047468402740, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/pickleable.py": 7712040860601343075, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/poly1305.py": 10854598965202354516, - "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/implicit.py": 5400555157488808948, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_astype.py": 8505605634958454768, - "venv/lib/python3.13/site-packages/dateutil/__init__.py": 17666544837260663800, - "frontend/build/_app/immutable/nodes/13.CDE6GkmM.js": 4106587619847708568, - "backend/git_repos/remote/test-repo.git/objects/79/b070ad8af7bbc12169f7660d2a7a72ec7a889a": 8153595714065675791, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/authorization_server.py": 2913800420669417152, - "backend/src/services/clean_release/compliance_orchestrator.py": 6747364300631405520, - "venv/lib/python3.13/site-packages/pandas/io/excel/_odfreader.py": 2760916559416783928, - "venv/lib/python3.13/site-packages/numpy/core/_dtype.py": 2806449741844148191, - "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/apps.py": 4219758952914498116, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_round_trip.py": 14684057343786032776, - "venv/lib/python3.13/site-packages/authlib/oauth2/base.py": 12948318231066662045, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/bitwise_ops.pyi": 751490187478960891, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/PIL/_tkinter_finder.py": 14045496501810535432, - "venv/lib/python3.13/site-packages/click/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/greenlet/TMainGreenlet.cpp": 9489520001674089404, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/unused_registry.py": 10153622516112471812, - "venv/lib/python3.13/site-packages/keyring/testing/backend.py": 14295829193445781542, - "venv/lib/python3.13/site-packages/cryptography/exceptions.py": 5173540025160237758, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/RECORD": 17545477863793260029, - "venv/lib/python3.13/site-packages/pygments/styles/nord.py": 8469538903422182155, - "venv/lib/python3.13/site-packages/smmap/test/test_tutorial.py": 16309370344201290582, - "frontend/build/_app/immutable/chunks/DsnmJJEf.js": 17416107759626312632, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py": 10843527833285941674, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/licenses/LICENSE.PSF": 13208428090829817329, - "venv/lib/python3.13/site-packages/itsdangerous/signer.py": 3694661094753475840, - "venv/lib/python3.13/site-packages/requests/structures.py": 2668010839316715865, - "venv/lib/python3.13/site-packages/pip/__pip-runner__.py": 1138979712722199296, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/types.py": 13384984564922916167, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_m68k_gcc.h": 6580173800099450404, - "venv/lib/python3.13/site-packages/referencing/__init__.py": 10093824711214801917, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/errors.py": 17581857895562494222, - "venv/lib/python3.13/site-packages/numpy/conftest.py": 8971879716683736515, - "venv/lib/python3.13/site-packages/websockets/asyncio/compatibility.py": 9716993942839407921, - "venv/lib/python3.13/site-packages/numpy/f2py/diagnose.py": 503331864022631297, - "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/WHEEL": 11630459739183915695, - "frontend/build/_app/immutable/chunks/DA0oX2nF.js": 4762485859359244720, - "frontend/tests/maintenance-store.test.ts": 7211673236234440419, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_concat.py": 1351478313334379336, - "backend/alembic/versions/b1c2d3e4f5a6_add_source_hash_to_translation_records.py": 4775534557742900399, - "backend/src/plugins/translate/service_bulk_replace.py": 5355744069308185607, - "venv/lib/python3.13/site-packages/pygments/lexers/dax.py": 10868881057512002309, - "backend/git_repos/remote/test-repo.git/hooks/pre-receive.sample": 6118492409684431911, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/accesstype.f90": 877982462186396830, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufunclike.pyi": 14623308681600207918, - "venv/lib/python3.13/site-packages/anyio/_core/_contextmanagers.py": 1258491775823080427, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_factorize.py": 17995673140216929494, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/heuristics.py": 1422768761337195135, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_transform.py": 6759417099641034692, - "backend/src/core/task_manager/persistence.py": 9599258324212845325, - "venv/lib/python3.13/site-packages/fastapi/routing.py": 466387159689567541, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_fillna.py": 4610666845291315333, - "venv/lib/python3.13/site-packages/fastapi/responses.py": 6092572095549573593, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/asyncio.py": 2517623574187179319, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_riscv_unix.h": 8607317131295864391, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_.py": 644667973700652263, - "venv/lib/python3.13/site-packages/pandas/tests/window/conftest.py": 10673264126684571493, - "venv/lib/python3.13/site-packages/requests/auth.py": 912521029864094489, - "venv/lib/python3.13/site-packages/pygments/lexers/theorem.py": 15666523910367201285, - "frontend/build/_app/immutable/chunks/Ct73Sust.js": 3385889491616825090, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_repeat.py": 16971624301893342868, - "venv/lib/python3.13/site-packages/websockets/speedups.c": 11800200877763464246, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi": 8666343427862784832, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation": 4826455560768665215, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/zookeeper.py": 4318643109309626098, - "venv/lib/python3.13/site-packages/numpy/__init__.py": 2331213407497901634, - "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.pxd": 9126772093305708921, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/printing.py": 8681519649669408795, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_fillna.py": 9297637486401098611, - "venv/lib/python3.13/site-packages/PIL/_imagingmath.pyi": 18222325750818585549, - "venv/bin/fastapi": 12400009726251862770, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/util.py": 9373891872370603585, - "backend/src/plugins/translate/__tests__/test_orchestrator.py": 10313792176402719801, - "frontend/build/_app/immutable/nodes/1.DqVrwQJv.js": 13991321400801874043, - "venv/lib/python3.13/site-packages/numpy/_core/lib/libnpymath.a": 17555816778997028283, - "frontend/src/components/llm/ValidationReport.svelte": 17900215752976182981, - "venv/lib/python3.13/site-packages/packaging/version.py": 13470993734108007779, - "frontend/src/lib/components/assistant/__tests__/assistant_clarification.integration.test.js": 15614617116241362179, - "backend/src/api/routes/__tests__/test_clean_release_v2_release_api.py": 7304392396276280230, - "backend/git_repos/remote/test-repo.git/hooks/post-update.sample": 4288868784459664203, - "venv/lib/python3.13/site-packages/numpy/matrixlib/__init__.pyi": 1942236362568669510, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/recfunctions.py": 18330899924171767482, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/util.py": 6088868370298560146, - "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/wsproto_impl.py": 3072714633272661847, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90": 12296500845667555672, - "backend/git_repos/remote/test-repo.git/objects/22/91d2eb86d77accf7401f8952778809cd1aa4d4": 5120428041118096941, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/models.py": 17356033861792227817, - "backend/src/models/translate.py": 15158235523537226249, - "venv/lib/python3.13/site-packages/pandas/core/arrays/integer.py": 7775055011080964709, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/METADATA": 6557531107125553027, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_size.py": 14032390806503440750, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py": 3042005457138956499, - "venv/lib/python3.13/site-packages/pillow.libs/libavif-01e67780.so.16.3.0": 13947441788826399574, - "venv/lib/python3.13/site-packages/cffi/vengine_cpy.py": 10684192171370688079, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_skew.py": 5276102682005383261, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py": 15060063324909302240, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_mixed.py": 3476101699679108025, - "venv/lib/python3.13/site-packages/pygments/lexers/snobol.py": 414946539602526513, - "venv/lib/python3.13/site-packages/authlib/oidc/core/userinfo.py": 17201158389976619872, - "venv/lib/python3.13/site-packages/pip/_vendor/certifi/__main__.py": 8412594868333244844, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/LICENSE": 12064892310002036996, - "frontend/src/routes/admin/roles/+page.svelte": 7687872545536151950, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/numerictypes.py": 5719374287454872555, - "venv/lib/python3.13/site-packages/pandas/_libs/interval.cpython-313-x86_64-linux-gnu.so": 8964760352224019544, - "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/RECORD": 17341460504914308184, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/sum_.py": 7062070517544958546, - "frontend/src/components/Toast.svelte": 1736760619841085958, - "backend/src/plugins/translate/prompt_builder.py": 11939931262286362350, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_factorize.py": 861897342553280506, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_equals.py": 9405821443172167066, - "venv/lib/python3.13/site-packages/h11/__init__.py": 222801976520197308, - "venv/lib/python3.13/site-packages/keyring/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/useless_keywords.py": 11487954623214475915, - "venv/lib/python3.13/site-packages/passlib/tests/sample1b.cfg": 2872366861156549016, - "venv/lib/python3.13/site-packages/pandas/tests/resample/test_resample_api.py": 3278209206670699265, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_day.py": 2200008998040663785, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/profiling.py": 16030397164203895281, - "venv/lib/python3.13/site-packages/pygments/lexers/_scilab_builtins.py": 17453812809700086888, - "frontend/src/components/storage/FileList.svelte": 6226735853135032532, - "frontend/src/components/backups/BackupManager.svelte": 15318298322895797591, - "venv/lib/python3.13/site-packages/numpy/random/_mt19937.pyi": 15904463104068500379, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_direct.py": 12680113511641199070, - "venv/lib/python3.13/site-packages/pydantic/v1/version.py": 2758971830527526972, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_matmul.py": 16169282225324014901, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_split_partition.py": 2715491071550545667, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_explode.py": 18263694040596159591, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/json.py": 4660603129768960095, - "frontend/src/components/tasks/TaskLogPanel.svelte": 10382066588776421689, - "venv/lib/python3.13/site-packages/apscheduler/jobstores/base.py": 11386927749822539057, - "venv/lib/python3.13/site-packages/passlib/tests/__main__.py": 16477180140297957650, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_series.py": 2980850649986213051, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_numba.py": 1668304729617150075, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/__init__.py": 15130871412783076140, - "backend/src/services/validation_run_service.py": 5527352359336135164, - "venv/lib/python3.13/site-packages/git/index/typ.py": 11661540784850363024, - "backend/src/services/clean_release/__tests__/test_manifest_builder.py": 4923613189073397440, - "venv/lib/python3.13/site-packages/pandas/core/config_init.py": 16537122488227845090, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_nth.py": 17151595277666975085, - "venv/lib/python3.13/site-packages/pydantic/types.py": 785880062468926292, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_reductions.py": 3575617237516305456, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize_cpp.cpython-313-x86_64-linux-gnu.so": 7490281502544276964, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/client.py": 18443944554871937480, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py": 8539232219382152238, - "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/METADATA": 10707390829735099042, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/modules.py": 9023244176010175562, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/fromnumeric.py": 3792079757208879362, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_index_tricks.py": 4676293127859087991, - "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/RECORD": 6349071557579241461, - "venv/lib/python3.13/site-packages/pydantic/_internal/_fields.py": 2692892815545218335, - "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL": 18203500019759199992, - "venv/lib/python3.13/site-packages/jeepney/io/tests/utils.py": 10346859893683522113, - "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension.c": 9318655518998644962, - "backend/src/models/git.py": 9387561498910534118, - "venv/lib/python3.13/site-packages/pydantic/v1/annotated_types.py": 12925825196690299531, - "backend/src/core/cot_logger.py": 9539001363130629806, - "venv/lib/python3.13/site-packages/apscheduler/executors/twisted.py": 2695602672085615762, - "venv/lib/python3.13/site-packages/packaging/_elffile.py": 9546225990833172494, - "frontend/src/routes/datasets/MetricsTable.svelte": 4644516916752609053, - "venv/lib/python3.13/site-packages/pydantic/deprecated/json.py": 17692639396786690144, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/named_types.py": 6099185243355915896, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test__iotools.py": 6260912730310453037, - "backend/src/plugins/storage/__init__.py": 5046554941488079204, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/panel.py": 17832701246248000383, - "venv/lib/python3.13/site-packages/pandas/core/missing.py": 13332302791063948992, - "backend/tests/core/test_migration_engine.py": 11015960127863747154, - "venv/lib/python3.13/site-packages/starlette/concurrency.py": 9835859079437525910, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq.py": 13853220736499979380, - "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/RECORD": 12733654377842895588, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py": 17908437937265384125, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_setops.py": 15196593522537569500, - "venv/lib/python3.13/site-packages/PIL/_imagingmorph.pyi": 18222325750818585549, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_combine_first.py": 11425059090050867171, - "venv/lib/python3.13/site-packages/_pytest/hookspec.py": 387790426108810884, - "venv/lib/python3.13/site-packages/PIL/BlpImagePlugin.py": 7209218638257731375, - "venv/lib/python3.13/site-packages/pygments/lexers/promql.py": 8929925488296216854, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_all_methods.py": 18227706645906325527, - "backend/test_app.db": 2486636812009447051, - "dist/docker/backend.0.1.0.tar.xz": 3591917885965226179, - "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/RECORD": 3288669175908898843, - "venv/lib/python3.13/site-packages/passlib/handlers/cisco.py": 15004707325761459775, - "venv/lib/python3.13/site-packages/typing_extensions.py": 8402965285733247527, - "venv/lib/python3.13/site-packages/numpy/lib/npyio.pyi": 3212440968296555560, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/AB.inc": 10441778083831997423, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/columns.py": 8488246354818721406, - "venv/lib/python3.13/site-packages/secretstorage/exceptions.py": 16701299261122689924, - "venv/lib/python3.13/site-packages/pandas/core/groupby/groupby.py": 5536922766239875007, - "venv/lib/python3.13/site-packages/_pytest/pytester.py": 5423287282155948827, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_inf.py": 8659210689723088321, - "venv/lib/python3.13/site-packages/pandas/io/_util.py": 13608922148814398500, - "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/WHEEL": 15858869568085970864, - "frontend/src/lib/ui/index.ts": 6883965364006817450, - "backend/src/services/clean_release/repositories/audit_repository.py": 1431160646630812395, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_ufunc.py": 5025605639221470838, - "venv/lib/python3.13/site-packages/h11/_writers.py": 8585823094975171480, - "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_impl.py": 16610770935842519289, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_infer_datetimelike.py": 17304541521108700317, - "backend/src/plugins/translate/_token_budget.py": 13508548690925198562, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/core/interchange/from_dataframe.py": 8278998381856028462, - "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/hook-numpy.pyi": 14233146512272397376, - "venv/lib/python3.13/site-packages/numpy/_core/_operand_flag_tests.cpython-313-x86_64-linux-gnu.so": 12296711931541109624, - "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/var_.py": 12699521091170347311, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_operators.py": 12686786829906210592, - "venv/lib/python3.13/site-packages/pluggy/_version.py": 7195758686717994475, - "frontend/src/components/llm/__tests__/provider_config.integration.test.js": 2807487384272452401, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_msvc.h": 14580207065003376324, - "frontend/build/_app/immutable/nodes/7.CqIp9Pt6.js": 8474213930858732275, - "backend/src/services/clean_release/repository.py": 2475446738311184132, - "venv/lib/python3.13/site-packages/PIL/MspImagePlugin.py": 3034490726971829439, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_crackfortran.py": 10278720705326601943, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_nlargest_nsmallest.py": 11049656379959696695, - "backend/src/api/routes/git_schemas.py": 10492336192775355750, - "venv/lib/python3.13/site-packages/anyio/abc/_streams.py": 8089057973257658396, - "backend/src/api/routes/translate/_run_list_routes.py": 11620203305409913352, - "venv/lib/python3.13/site-packages/_pytest/mark/__init__.py": 9343015549300275714, - "venv/lib/python3.13/site-packages/_pytest/pathlib.py": 9719734558816066453, - "venv/lib/python3.13/site-packages/numpy/_utils/_pep440.py": 15854257948148516490, - "venv/lib/python3.13/site-packages/numpy/_core/numeric.pyi": 17785360553418386488, - "venv/lib/python3.13/site-packages/numpy/_core/_methods.pyi": 9155045948490225716, - "venv/lib/python3.13/site-packages/git/refs/remote.py": 4391983355222612205, - "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/authlib/oauth1/client.py": 7314311571224771, - "venv/lib/python3.13/site-packages/pygments/lexers/esoteric.py": 16839499623020685146, - "venv/lib/python3.13/site-packages/rsa/py.typed": 11041940105507257053, - "venv/lib/python3.13/site-packages/pandas/_libs/internals.cpython-313-x86_64-linux-gnu.so": 2008633361686956377, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/_pytest/legacypath.py": 7512065138259788426, - "venv/lib/python3.13/site-packages/pygments/lexers/rdf.py": 14488319292387226505, - "venv/lib/python3.13/site-packages/pygments/formatters/__init__.py": 8009871891954370829, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/legacy/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_args.py": 5821040955806257450, - "backend/src/plugins/translate/dictionary_filter.py": 18047895364995512274, - "venv/lib/python3.13/site-packages/pydantic/deprecated/copy_internals.py": 1245428320513062166, - "venv/lib/python3.13/site-packages/numpy/f2py/use_rules.py": 17277594393032382485, - "venv/lib/python3.13/site-packages/starlette/middleware/base.py": 16850428285382256618, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/dml.py": 17308908394336670576, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_function.py": 7048185308307653546, - "backend/alembic/versions/a5b6c7d8e9f0_set_null_ondelete_for_task_records_env_fk.py": 17528129825127496932, - "venv/lib/python3.13/site-packages/numpy/matlib.pyi": 8017902013455539981, - "venv/lib/python3.13/site-packages/ecdsa/curves.py": 812969717084691115, - "venv/lib/python3.13/site-packages/numpy/lib/_datasource.pyi": 5894423389796456573, - "venv/lib/python3.13/site-packages/numpy/testing/_private/utils.py": 3646474165295296669, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/align.py": 6078666505647454830, - "venv/lib/python3.13/site-packages/rapidfuzz/process.pyi": 6959881293311340830, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/text.py": 6096215585499446070, - "venv/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.pyi": 12566839271245057531, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/generator_pcg64_np126.pkl.gz": 9677994062701347206, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_logical/foo77.f": 16250175448122328648, - "venv/lib/python3.13/site-packages/passlib/utils/__init__.py": 11704122205941631503, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_get_value.py": 389530025760539462, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_isin.py": 11330491145602008796, - "venv/lib/python3.13/site-packages/anyio/abc/_resources.py": 8330687082933028623, - "venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py": 7899068668225389287, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/provision.py": 2676876852726658063, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/collections.pyx": 17138729833735744777, - "backend/src/services/resource_service.py": 12557244514401781887, - "backend/src/services/clean_release/repositories/compliance_repository.py": 2888085832526178946, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_indexing.py": 6039808271042864401, - "backend/src/plugins/translate/__tests__/test_text_cleaner.py": 5456979246104056266, - "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/METADATA": 317417773265681256, - "venv/lib/python3.13/site-packages/websockets/http.py": 9406523480132204760, - "venv/lib/python3.13/site-packages/jose/jws.py": 11592462993417182096, - "venv/lib/python3.13/site-packages/numpy/lib/_arrayterator_impl.py": 4037074830103951000, - "venv/lib/python3.13/site-packages/starlette/config.py": 16509394679506300256, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/modes.py": 6832635056228445650, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/console.py": 3540660073442483692, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_array.py": 11271807719833350332, - "frontend/playwright-report/trace/assets/defaultSettingsView-D31xz8zv.js": 1301407320635785789, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_2_compat.h": 6512969159139431485, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_sorted.py": 1899608688401238388, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/licenses/LICENSE": 11199044866758471950, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/padding.py": 7470483648602195268, - "venv/lib/python3.13/site-packages/pygments/lexers/json5.py": 9736695186548899403, - "venv/lib/python3.13/site-packages/numpy/_core/getlimits.pyi": 15746478550640231553, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_utils.py": 4612923732868929770, - "venv/lib/python3.13/site-packages/numpy/f2py/rules.pyi": 1342380029484127983, - "venv/lib/python3.13/site-packages/pip/_internal/models/direct_url.py": 4619204214785230341, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_contains.py": 17630310725250553247, - "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/METADATA": 3814104793342833872, - "venv/lib/python3.13/site-packages/pygments/styles/lilypond.py": 12486578704132023691, - "venv/lib/python3.13/site-packages/pandas/core/sparse/__init__.py": 15130871412783076140, - "backend/src/services/clean_release/stages/no_external_endpoints.py": 5083253025896929417, - "backend/git_repos/remote/test-repo.git/objects/6a/f2b28e314c04fb4e03476c12d6491213591512": 4526311953587849385, - "venv/lib/python3.13/site-packages/numpy/polynomial/__init__.pyi": 8708830448398500675, - "venv/lib/python3.13/site-packages/pydantic/_internal/_signature.py": 17075003201648027250, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_getitem.py": 11882213323878588707, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_compat.py": 6032546839876195115, - "backend/src/plugins/translate/metrics.py": 11628699537333742678, - "venv/lib/python3.13/site-packages/numpy/testing/_private/extbuild.py": 4984721349618127021, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_reindex.py": 12459492712890114705, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_style.py": 14810883299259169406, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data": 11957232619107868023, - "backend/alembic/versions/2a7b8c9d0e1f_add_target_languages_to_translation_jobs.py": 7201017059554918882, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_histograms.py": 47631283818191049, - "venv/lib/python3.13/site-packages/numpy/f2py/__version__.py": 8588600299261398598, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/publicmod.f90": 2174121054736811903, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro_py.py": 11991492232381887787, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_kwargs.py": 10173906126211473463, - "venv/lib/python3.13/site-packages/pyasn1/codec/cer/encoder.py": 3261739474564948330, - "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/WHEEL": 2823347510103459191, - "venv/lib/python3.13/site-packages/passlib/handlers/roundup.py": 3844280972451753019, - "venv/lib/python3.13/site-packages/pandas/core/arrays/string_.py": 14865733321317939478, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_offsets_properties.py": 2340780879864207500, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_ratio.py": 940213488194452623, - "venv/lib/python3.13/site-packages/pydantic/__init__.py": 11536052293866174672, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_index.py": 1551768441102117466, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/git.py": 17060377178521307324, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/json.py": 6429651405841289922, - "venv/lib/python3.13/site-packages/PIL/ContainerIO.py": 7551929914241379005, - "frontend/e2e/e2e-nohealth.mjs": 5921562935931064381, - "venv/lib/python3.13/site-packages/referencing/jsonschema.py": 14596871117484757502, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_query_eval.py": 17613800806748649144, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_finalize.py": 12539815426478689538, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_amd64_unix.h": 16679226724722970205, - "venv/lib/python3.13/site-packages/attrs/setters.py": 5775359015245600592, - "backend/src/services/clean_release/audit_service.py": 13892224612412540989, - "backend/src/core/auth/api_key.py": 15898549010462339946, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath_accuracy.py": 3904008607472505376, - "backend/tests/test_constants_audit_fixes.py": 18298690956132739779, - "backend/src/plugins/translate/executor.py": 15866803979457728942, - "backend/git_repos/remote/test-repo.git/hooks/fsmonitor-watchman.sample": 14381968406977928721, - "venv/lib/python3.13/site-packages/click/testing.py": 15973659312284678327, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_setops.py": 8622608042929141013, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api_latest.c": 5472633890472031814, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_style.py": 10405592363651914796, - "venv/lib/python3.13/site-packages/pillow.libs/libtiff-295fd75c.so.6.2.0": 17866578820357536656, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_simd.py": 7577408467041941595, - "venv/lib/python3.13/site-packages/pandas/_libs/hashing.pyi": 5241441378073929968, - "venv/lib/python3.13/site-packages/numpy/random/_common.pxd": 3402284125943848851, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_missing.py": 6224750552277937853, - "venv/lib/python3.13/site-packages/pandas/io/sas/sas_constants.py": 14492427939536692313, - "venv/lib/python3.13/site-packages/pygments/lexers/modeling.py": 15714077241620129689, - "backend/src/api/routes/git/_deps.py": 11478430655620147674, - "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/WHEEL": 8600534672961461758, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7521/__init__.py": 635200170992032966, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/serialize.py": 11139432164346742421, - "backend/src/services/superset_lookup_service.py": 131886522963644068, - "frontend/src/types/backup.ts": 1741234034896689348, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_algs.py": 2479791018067637690, - "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_expanding.py": 12504275097476819918, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_s3.py": 17425535047477778484, - "venv/lib/python3.13/site-packages/pygments/lexers/asc.py": 10744437946030875496, - "frontend/src/routes/tools/mapper/+page.svelte": 11733240042848459104, - "venv/lib/python3.13/site-packages/keyring/backend_complete.bash": 16589214602970214174, - "venv/lib/python3.13/site-packages/numpy/ma/tests/test_subclassing.py": 17318983445227658412, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh17797.f90": 17319074662077763768, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_astype.py": 8633811117672837999, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arithmetic.py": 3209727509456212551, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/pymssql.py": 6650008663791598065, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/pytestplugin.py": 1591034895268415944, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/controller.py": 5450931608244830335, - "backend/src/plugins/translate/__tests__/test_executor.py": 9030484360469714630, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_type_check.py": 3935091606923106753, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/appengine.py": 16194997685865850655, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/missing.py": 14589973874359353799, - "venv/lib/python3.13/site-packages/fastapi/param_functions.py": 14585101566697773072, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_classes.py": 1440926036579216168, - "venv/lib/python3.13/site-packages/pandas/api/typing/__init__.py": 6438268275857060114, - "backend/alembic.ini": 8897071018956157084, - "backend/src/services/git/_merge.py": 13573452468406399167, - "backend/git_repos/remote/test-repo.git/hooks/pre-push.sample": 8029776382195911768, - "venv/lib/python3.13/site-packages/numpy.libs/libgfortran-040039e1-0352e75f.so.5.0.0": 13946067868274850557, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_complex/foo77.f": 7353666717928699883, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_coercion.py": 7261787308019145312, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/__init__.py": 11526998905763262175, - "venv/lib/python3.13/site-packages/numpy/f2py/setup.cfg": 17974180080760231128, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_constructors.pyi": 164538008396001632, - "venv/lib/python3.13/site-packages/numpy/f2py/_isocbind.pyi": 5786150108623563787, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_cell_widths.py": 5724379364993806351, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/fields.py": 10090313990429695520, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_formats.py": 13500155167624433622, - "venv/lib/python3.13/site-packages/pygments/lexers/web.py": 11104721221615804497, - "venv/lib/python3.13/site-packages/numpy/f2py/src/fortranobject.c": 2519219289444051739, - "venv/lib/python3.13/site-packages/PIL/ImagePath.py": 18323293175183057101, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/METADATA": 6438256145634479451, - "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/METADATA": 5628172948035858892, - "venv/lib/python3.13/site-packages/pygments/lexers/tal.py": 447505725492547461, - "frontend/src/routes/translate/+page.svelte": 15284819686967093613, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reset_index.py": 5946666595195952693, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/pyinstaller-smoke.py": 13570990531070630950, - "frontend/src/lib/stores/__tests__/mocks/stores.js": 12764819706469057535, - "backend/src/services/clean_release/enums.py": 5838176998590033780, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_count.py": 9186538441380080087, - "venv/lib/python3.13/site-packages/pygments/lexers/php.py": 17636450950688953288, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_mangle_dupes.py": 15613858733226279352, - "venv/lib/python3.13/site-packages/pydantic/plugin/__init__.py": 16803973597469216174, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein_py.py": 11350239659973489646, - "backend/src/api/routes/__tests__/test_migration_routes.py": 12273917934344716029, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/claims.py": 12645788445743898136, - "venv/lib/python3.13/site-packages/pip/_internal/index/__init__.py": 14829074315307489628, - "venv/lib/python3.13/site-packages/dateutil/_version.py": 8279235793001245767, - "backend/src/api/routes/translate/_router.py": 18140665710457768874, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/__init__.py": 1923528231486706442, - "venv/lib/python3.13/site-packages/pip/_internal/utils/datetime.py": 6816292030061301011, - "venv/lib/python3.13/site-packages/pillow.libs/libwebpdemux-747f2b49.so.2.0.17": 7615380692384566654, - "venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py": 8159971229245441880, - "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/RECORD": 15574202654585730126, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_legendre.py": 18266595775500927868, - "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/METADATA": 10810011740984652381, - "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/utils.py": 8633356372647820801, - "venv/lib/python3.13/site-packages/pillow.libs/libwebpmux-7f11e5ce.so.3.1.2": 13105940093474848953, - "venv/lib/python3.13/site-packages/numpy/linalg/_umath_linalg.cpython-313-x86_64-linux-gnu.so": 17652852308919396403, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq.pyi": 16372699564794732463, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_getitem.py": 8414677531950073373, - "venv/lib/python3.13/site-packages/pandas/tests/computation/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_cython_aggregations.py": 10818895573637904764, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/io.py": 11072022722163954973, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/RECORD": 7914594107698271488, - "frontend/src/components/auth/ProtectedRoute.svelte": 9152870722988000278, - "frontend/src/lib/components/dataset-review/__tests__/validation_findings_panel.ux.test.js": 16008187945694980240, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE": 11041304845352917971, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libselinux-0922c95c.so.1": 16516617710645376769, - "frontend/src/routes/datasets/__tests__/inline_edit.test.js": 17712409018171053453, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_groupby.py": 2738671407653333726, - "frontend/build/_app/immutable/chunks/Dul6iTE7.js": 10339509389374345579, - "backend/src/api/routes/__tests__/test_reports_openapi_conformance.py": 17231166761215151699, - "backend/src/api/routes/__tests__/conftest.py": 3768471623650776808, - "venv/lib/python3.13/site-packages/numpy/testing/print_coercion_tables.pyi": 3814281717779245045, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_quantile.py": 17110581927381599978, - "venv/lib/python3.13/site-packages/pygments/lexers/maple.py": 7402467573829618534, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reindex_like.py": 13803156447991282315, - "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/LICENSE": 16174281248426886206, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_chunksize.py": 7107619871245389835, - "venv/lib/python3.13/site-packages/apscheduler/job.py": 1858376671986108667, - "backend/src/core/auth/oauth.py": 2441694487419087464, - "venv/lib/python3.13/site-packages/git/repo/__init__.py": 6173604284490891047, - "venv/lib/python3.13/site-packages/pygments/lexers/special.py": 4972294202790455038, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_partial_slicing.py": 16219611534574666182, - "backend/tests/test_logging_audit_fixes.py": 6972807998099938509, - "venv/lib/python3.13/site-packages/pandas/_libs/ops.cpython-313-x86_64-linux-gnu.so": 10490009128553397250, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_float.py": 10455718110956856820, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/_spdx.py": 17182188548503720124, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/conversion.pyi": 16976386782787920450, - "venv/lib/python3.13/site-packages/authlib/integrations/django_client/__init__.py": 14186136918454802843, - "frontend/src/lib/components/layout/sidebarNavigation.js": 14306348671588504207, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_datetime.py": 7862725028865965163, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_three_greenlets.py": 10923534235697247269, - "venv/lib/python3.13/site-packages/pygments/filter.py": 16846063190466267618, - "venv/bin/pyrsa-verify": 6762739642629904442, - "frontend/build/_app/immutable/chunks/CETQmtx2.js": 6702904950123068169, - "backend/src/models/dataset_review_pkg/_execution_models.py": 13278357366267031549, - "venv/lib/python3.13/site-packages/jeepney/io/threading.py": 525625939662612746, - "venv/lib/python3.13/site-packages/passlib/tests/_test_bad_register.py": 5446848310854472376, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_reshape.py": 5572426834735088916, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_concat.py": 4472503149811617440, - "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/METADATA": 3188324716322823755, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_duplicated.py": 6659959750254523427, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_append.py": 9644955836191900614, - "frontend/src/routes/+error.svelte": 9437886843842311915, - "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/style.py": 10665998898253460114, - "venv/lib/python3.13/site-packages/passlib/tests/__init__.py": 16543763165305017760, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_regression.py": 9375525053479844400, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/util.py": 1520899420719605380, - "frontend/build/_app/immutable/chunks/gRGygy_f.js": 17282722948808474320, - "backend/src/core/__tests__/test_throttled_scheduler.py": 3526995607557121417, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_can_hold_element.py": 5406431247116557833, - "venv/lib/python3.13/site-packages/passlib/ifc.py": 14479133654556657428, - "venv/lib/python3.13/site-packages/rsa/prime.py": 10820898885044917095, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log10.csv": 13441294827017400897, - "venv/lib/python3.13/site-packages/pandas/core/tools/numeric.py": 8510988912136285022, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_qcut.py": 8972418112914954758, - "venv/lib/python3.13/site-packages/httpcore/_sync/http_proxy.py": 14037211594707072958, - "venv/lib/python3.13/site-packages/cryptography/x509/extensions.py": 10197248868682803019, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_indexing.py": 81180636019259296, - "venv/lib/python3.13/site-packages/authlib/jose/__init__.py": 317573635113539563, - "venv/lib/python3.13/site-packages/numpy/polynomial/chebyshev.py": 1590647503660777156, - "venv/lib/python3.13/site-packages/git/index/fun.py": 18338379518768926372, - "venv/lib/python3.13/site-packages/pygments/lexers/apdlexer.py": 14222752852221009085, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_numeric.py": 9417128508433693658, - "frontend/src/lib/components/layout/__tests__/test_taskDrawer.svelte.js": 7736587487210851851, - "venv/lib/python3.13/site-packages/sqlalchemy/types.py": 15819795572817819102, - "frontend/playwright-report/trace/assets/urlMatch-BYQrIQwR.js": 8070494174996726626, - "venv/lib/python3.13/site-packages/pygments/lexers/prql.py": 1159462562014166646, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_index_equal.py": 10617870815989304510, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py": 8395157526634674143, - "venv/lib/python3.13/site-packages/numpy/_utils/_pep440.pyi": 6796322258258182775, - "venv/lib/python3.13/site-packages/passlib/hosts.py": 11171402820797380938, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/putmask.py": 10934101690788549526, - "backend/alembic/script.py.mako": 7041141123739810216, - "venv/bin/httpx": 6651007446865716794, - "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/WHEEL": 7795541085444298627, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_ssl_constants.py": 14834514243239777933, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html_table.tpl": 17198355067645888735, - "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/WHEEL": 14929202952940710322, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_masm.obj": 2884737706935637437, - "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_py.py": 6428078990080243608, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/annotation.py": 15855576199737688124, - "venv/lib/python3.13/site-packages/pandas/io/api.py": 8275376846208437741, - "venv/lib/python3.13/site-packages/yaml/cyaml.py": 9157893742065554693, - "venv/lib/python3.13/site-packages/pandas/tests/io/generate_legacy_storage_files.py": 11015954144633661960, - "venv/lib/python3.13/site-packages/pygments/lexers/algebra.py": 9651893228421050246, - "venv/pyvenv.cfg": 2513607356761047446, - "venv/lib/python3.13/site-packages/pygments/lexers/markup.py": 10311057264960923433, - "venv/lib/python3.13/site-packages/pygments/lexers/mime.py": 7768464764849718825, - "backend/src/plugins/translate/preview_llm_client.py": 14412557858942627249, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/RECORD": 7844752443022514265, - "venv/lib/python3.13/site-packages/cryptography/x509/verification.py": 1079694784860492682, - "venv/lib/python3.13/site-packages/numpy/char/__init__.py": 4428218097234308768, - "backend/src/core/task_manager/models.py": 11636421249104836957, - "venv/lib/python3.13/site-packages/secretstorage/collection.py": 17903258621904912493, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_missing.py": 7034102519042351965, - "venv/lib/python3.13/site-packages/dateutil/tz/win.py": 8427821225251397364, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/__init__.py": 8093984834068317399, - "venv/lib/python3.13/site-packages/numpy/lib/_arraysetops_impl.py": 5583478355093966990, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/random.pyi": 9425735458050148191, - "frontend/src/lib/ui/Card.svelte": 8508366526326051165, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/licenses/LICENSE": 16147999986886816451, - "venv/lib/python3.13/site-packages/pydantic/_internal/_repr.py": 1758478941817868344, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_logical/foo90.f90": 12508663906609241323, - "venv/lib/python3.13/site-packages/starlette/exceptions.py": 15978811612997200737, - "venv/lib/python3.13/site-packages/numpy/lib/_stride_tricks_impl.pyi": 9243829615414967057, - "backend/src/services/maintenance/_orchestrators.py": 995360865260101856, - "venv/lib/python3.13/site-packages/pip/_internal/models/pylock.py": 16697828625021519459, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py": 3369246520501764730, - "venv/lib/python3.13/site-packages/_pytest/tracemalloc.py": 5530234062530858720, - "venv/lib/python3.13/site-packages/numpy/ma/__init__.pyi": 1855615156913010107, - "venv/lib/python3.13/site-packages/numpy/lib/_histograms_impl.pyi": 6534825471013879522, - "venv/lib/python3.13/site-packages/urllib3/_base_connection.py": 14495079097019980154, - "venv/lib/python3.13/site-packages/jaraco/context/__init__.py": 10975097417056278427, - "venv/lib/python3.13/site-packages/pandas/core/groupby/__init__.py": 3015263524218708013, - "frontend/src/routes/storage/backups/+page.svelte": 9728305121470326167, - "venv/lib/python3.13/site-packages/PIL/GimpPaletteFile.py": 2040459799887417392, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_value_counts.py": 15633881149834196174, - "venv/lib/python3.13/site-packages/pygments/lexers/_php_builtins.py": 2344562378679281201, - "backend/src/services/clean_release/mappers.py": 16365217670331724280, - "frontend/src/lib/ui/LanguageSwitcher.svelte": 15175441556916164874, - "venv/lib/python3.13/site-packages/pandas/core/computation/ops.py": 18250656489649699560, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/__init__.pyi": 17469792319379909312, - "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/array.py": 12658302948819867972, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/strategy_options.py": 16342048970907383117, - "venv/lib/python3.13/site-packages/bcrypt/_bcrypt.abi3.so": 8691731321358529264, - "frontend/playwright-report/trace/xtermModule.DYP7pi_n.css": 9346562810570076139, - "venv/lib/python3.13/site-packages/authlib/common/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/_string_helpers.py": 17192211156810267818, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/__init__.py": 371829636800613137, - "venv/lib/python3.13/site-packages/pygments/__main__.py": 13200500591994479045, - "venv/lib/python3.13/site-packages/rapidfuzz/_feature_detector_cpp.cpython-313-x86_64-linux-gnu.so": 16337157355618216738, - "venv/lib/python3.13/site-packages/urllib3/util/ssl_match_hostname.py": 7411350247004265632, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/validator.py": 14200019408839159476, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_api.py": 13319208721442328400, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ndarrayobject.h": 7320510589635636690, - "venv/lib/python3.13/site-packages/PIL/PpmImagePlugin.py": 7107324729714470853, - "venv/lib/python3.13/site-packages/passlib/win32.py": 5311393450489898748, - "venv/lib/python3.13/site-packages/python_multipart/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/nimrod.py": 8457135214131458774, - "docker/frontend.Dockerfile": 11291701046055590331, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/rapidfuzz/__pyinstaller/__init__.py": 1229691061011958769, - "backend/src/plugins/llm_analysis/service.py": 8630918629937474981, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_fsspec.py": 6936167344144998172, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py": 5126234270435358377, - "venv/lib/python3.13/site-packages/authlib/common/encoding.py": 52296066492753953, - "venv/lib/python3.13/site-packages/pydantic/v1/fields.py": 3948219773415054006, - "frontend/src/routes/+layout.svelte": 729110825767878269, - "frontend/build/_app/immutable/chunks/Dn-Kr3zV.js": 11981784044886973393, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_inference.py": 16402427186697071465, - "frontend/build/_app/immutable/assets/9.tn0RQdqM.css": 15130871412783076140, - "venv/lib/python3.13/site-packages/jeepney/tests/test_bus.py": 4260827599660763641, - "venv/lib/python3.13/site-packages/pandas/_testing/_hypothesis.py": 12298650110193262367, - "venv/lib/python3.13/site-packages/numpy/random/bit_generator.pyi": 15790738442952696034, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_repeat.py": 9155935990114743583, - "venv/lib/python3.13/site-packages/charset_normalizer/constant.py": 3070316197495651997, - "backend/src/core/plugin_base.py": 5063738955101125652, - "venv/lib/python3.13/site-packages/websockets/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/WHEEL": 18203500019759199992, - "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_cpp.cpython-313-x86_64-linux-gnu.so": 14187094676876471848, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/response.py": 15004896908941411698, - "venv/lib/python3.13/site-packages/starlette/routing.py": 16063812008141874150, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_cumulative.py": 6346947559103505068, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_format.py": 9331389900588353667, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_py.py": 13809503317864539103, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_character.py": 17168707712220699738, - "venv/lib/python3.13/site-packages/PIL/JpegImagePlugin.py": 10621639599916796689, - "venv/lib/python3.13/site-packages/PIL/ImtImagePlugin.py": 17599267755504817169, - "venv/lib/python3.13/site-packages/urllib3/http2/connection.py": 1661620860881397554, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/pager.py": 18072372651585577904, - "venv/lib/python3.13/site-packages/pygments/lexers/verifpal.py": 9190813166686923928, - "venv/lib/python3.13/site-packages/ecdsa/ellipticcurve.py": 15624510849346629163, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/measure.py": 18327922742808984428, - "venv/lib/python3.13/site-packages/attr/exceptions.py": 11532465891810816417, - "frontend/build/_app/immutable/nodes/40.B6yQkigH.js": 5534402906319190952, - "backend/src/services/clean_release/approval_service.py": 14346840951852454312, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_libgroupby.py": 9985769511561272200, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_arithmetic.py": 11620920548943067949, - "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_records.py": 18167578114159312327, - "frontend/src/components/llm/DocPreview.svelte": 14349224708133169902, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/__init__.py": 6489437464172324468, - "venv/lib/python3.13/site-packages/_pytest/recwarn.py": 15312759837838083596, - "venv/lib/python3.13/site-packages/pydantic/experimental/missing_sentinel.py": 1637241331832367709, - "backend/src/plugins/storage/plugin.py": 8516872254456553013, - "venv/lib/python3.13/site-packages/pip/_internal/models/selection_prefs.py": 14700113736620314923, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/associationproxy.py": 7421910137064160936, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkrb5-fcafa220.so.3.3": 5620628698712971642, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/spinner.py": 5564789578696016201, - "venv/lib/python3.13/site-packages/gitdb/test/test_stream.py": 18159319442241857857, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9207/parameter.py": 2793853093222900337, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/base_key.py": 10402800587070352851, - "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/util.py": 18279366777506483176, - "venv/lib/python3.13/site-packages/annotated_doc/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/computation/test_eval.py": 2921337784087808487, - "venv/lib/python3.13/site-packages/pandas/io/sas/sas_xport.py": 16525568795475918874, - "venv/lib/python3.13/site-packages/pygments/lexers/clean.py": 17772169928835025327, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/errors.py": 2147619440137604907, - "backend/src/api/routes/assistant/_llm_planner.py": 7325833916307204752, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_insert.py": 9195027887301180927, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_usecols_basic.py": 16382444980424010514, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/__init__.py": 8632038387100622009, - "venv/lib/python3.13/site-packages/pandas/core/sparse/api.py": 9094651265692218821, - "venv/lib/python3.13/site-packages/httpcore/_backends/base.py": 5491727479625093183, - "venv/lib/python3.13/site-packages/numpy/doc/ufuncs.py": 11706048944901534664, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/RECORD": 11976403473353722969, - "venv/lib/python3.13/site-packages/PIL/PixarImagePlugin.py": 12061717157676819554, - "venv/lib/python3.13/site-packages/pandas/_libs/sas.cpython-313-x86_64-linux-gnu.so": 16309838137741124637, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/array_constructors.py": 6727209833819502644, - "venv/lib/python3.13/site-packages/pip/_internal/locations/_distutils.py": 13559457590971821771, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/functions.py": 16567226076808693246, - "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/METADATA": 4975169119201255384, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__ufunc_api.c": 11535375410441493281, - "venv/lib/python3.13/site-packages/pandas/core/indexers/utils.py": 5861072573716897447, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py": 3960540415600165213, - "venv/lib/python3.13/site-packages/pandas/tests/io/__init__.py": 15130871412783076140, - "frontend/src/lib/ui/Icon.svelte": 18238812161544525261, - "frontend/src/routes/settings/MigrationSettings.svelte": 12844990967512238268, - "venv/lib/python3.13/site-packages/fastapi/openapi/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/validator.py": 11486125578281617670, - "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo.f": 5690596225005490325, - "venv/lib/python3.13/site-packages/pandas/core/reshape/reshape.py": 5387892304726762127, - "venv/lib/python3.13/site-packages/pandas/io/sas/__init__.py": 8095743504390517992, - "venv/lib/python3.13/site-packages/PIL/PSDraw.py": 1927169421822446045, - "backend/src/plugins/translate/__tests__/test_preview.py": 13201708414970983394, - "venv/lib/python3.13/site-packages/passlib/apps.py": 4633269405597895766, - "backend/tests/conftest.py": 5565151856098492311, - "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/METADATA": 16700674024421191168, - "venv/lib/python3.13/site-packages/numpy/lib/_histograms_impl.py": 13446184230476677032, - "venv/lib/python3.13/site-packages/pandas/io/clipboards.py": 5183212433608887727, - "venv/lib/python3.13/site-packages/pandas/io/formats/format.py": 3364941338174434661, - "frontend/build/_app/immutable/chunks/BddPqa-e.js": 3040470451817822725, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_docs.py": 17898499890274685198, - "backend/src/services/__tests__/test_rbac_permission_catalog.py": 2963458864311994307, - "venv/lib/python3.13/site-packages/urllib3/util/__init__.py": 2848870790459558599, - "backend/src/models/clean_release.py": 4198911944577810567, - "venv/lib/python3.13/site-packages/pip/_internal/pyproject.py": 6155748929233245415, - "backend/src/services/reports/__init__.py": 11818812865847046400, - "backend/src/plugins/translate/superset_executor.py": 5480256123348033488, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_isoc.py": 4923640657296076239, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/prompt.py": 9561640601516933380, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_sort_values.py": 834951665649981397, - "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/licenses/LICENSE": 3868190977070717994, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/authorization_code.py": 4958605540994687737, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_regression.py": 16266600037241221681, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_json_table_schema.py": 14454690938977069049, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_constructors.py": 3440572832185940666, - "venv/lib/python3.13/site-packages/PIL/JpegPresets.py": 12342262642420923471, - "frontend/src/routes/datasets/review/__tests__/dataset_review_entry.ux.test.js": 3080911695504204499, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cos.csv": 12896264205153363031, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/random.py": 12722750410117529986, - "venv/lib/python3.13/site-packages/pandas/_libs/window/indexers.pyi": 9911899303567570646, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/WHEEL": 7414522633964952515, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_assign.py": 2647902466315482406, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/dictionary.py": 9599439750713575741, - "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/functions.py": 14107377669163193871, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/palette.py": 17383863392192572184, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/util.py": 4815334059917765852, - "venv/lib/python3.13/site-packages/pydantic/_internal/_namespace_utils.py": 5237766366340181382, - "venv/lib/python3.13/site-packages/pydantic/v1/typing.py": 13467331592583800299, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arraypad.pyi": 12178766981280242620, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_character.py": 850554362222586199, - "venv/lib/python3.13/site-packages/pyasn1/codec/streaming.py": 13202773554072937140, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_freq_attr.py": 7685756734926749093, - "venv/lib/python3.13/site-packages/rpds/__init__.pyi": 12037474523494903587, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_replace.py": 8784361132920473760, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated": 11193150813314469394, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mysqldb.py": 2138006249556140141, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_extension.py": 17245018204352082978, - "venv/lib/python3.13/site-packages/fastapi/middleware/gzip.py": 436886407566263171, - "venv/lib/python3.13/site-packages/numpy/lib/user_array.pyi": 1968484998382771986, - "venv/lib/python3.13/site-packages/jsonschema/benchmarks/subcomponents.py": 10365594934527289233, - "venv/lib/python3.13/site-packages/numpy/core/arrayprint.py": 9652368112174245943, - "venv/lib/python3.13/site-packages/PIL/_imagingcms.cpython-313-x86_64-linux-gnu.so": 15198265718775753589, - "venv/lib/python3.13/site-packages/PIL/_typing.py": 17407980360703360848, - "venv/lib/python3.13/site-packages/PIL/PngImagePlugin.py": 5076219228736706283, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/constants.pyi": 15633065380510755171, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/timeseries.py": 17641722582848932332, - "venv/lib/python3.13/site-packages/passlib/tests/tox_support.py": 9200774792427691602, - "backend/src/models/profile.py": 12524181549230399253, - "venv/lib/python3.13/site-packages/numpy/f2py/f90mod_rules.pyi": 18290764713161282980, - "venv/lib/python3.13/site-packages/passlib/handlers/pbkdf2.py": 16686685453577026643, - "venv/lib/python3.13/site-packages/cffi/error.py": 8147505969912539538, - "venv/lib/python3.13/site-packages/uvicorn/middleware/wsgi.py": 9179913252056394958, - "backend/test_auth.db": 18214842050920965999, - "venv/lib/python3.13/site-packages/pandas/core/indexes/period.py": 1181348384346239378, - "venv/lib/python3.13/site-packages/passlib/context.py": 10362592407593745107, - "venv/lib/python3.13/site-packages/anyio/_core/_tasks.py": 14104828341875599130, - "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-np0-objarr.npy": 1615546603475261360, - "venv/lib/python3.13/site-packages/numpy/f2py/cfuncs.pyi": 8232620851756907417, - "venv/lib/python3.13/site-packages/starlette/convertors.py": 17839747154274354605, - "venv/lib/python3.13/site-packages/jose/utils.py": 1926138853970725083, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_truncate.py": 6478126371906156409, - "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/licenses/LICENSE": 3868190977070717994, - "venv/lib/python3.13/site-packages/pygments/styles/lightbulb.py": 12433916113773598760, - "frontend/src/routes/settings/+page.svelte": 13008569925433466788, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_constructors.py": 9478848417896027917, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/chararray.pyi": 17340224970247832290, - "venv/lib/python3.13/site-packages/pandas/tests/window/moments/conftest.py": 6137462119729731945, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/conftest.py": 9673372914396625461, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_jsonschema_test_suite.py": 12733761462141495972, - "venv/lib/python3.13/site-packages/fastapi/security/utils.py": 2616633862993539558, - "venv/lib/python3.13/site-packages/PIL/ImageTransform.py": 7825940907094338808, - "venv/lib/python3.13/site-packages/attr/setters.pyi": 6670509359139243236, - "venv/lib/python3.13/site-packages/greenlet/TThreadState.hpp": 15599148954148720463, - "venv/lib/python3.13/site-packages/numpy/lib/_npyio_impl.pyi": 6576645822227068922, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/implicit.py": 7379110378465568776, - "venv/lib/python3.13/site-packages/anyio/abc/_sockets.py": 15042495744291042062, - "venv/bin/pyrsa-encrypt": 5858278204727417482, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_equals.py": 6429101196875333574, - "frontend/src/routes/settings/__tests__/settings_page.ux.test.js": 14507112961464496362, - "frontend/src/services/toolsService.js": 1568142461283466080, - "venv/lib/python3.13/site-packages/authlib/common/urls.py": 13627272625165922482, - "venv/lib/python3.13/site-packages/numpy/lib/npyio.py": 6782361985454523908, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_matrix_linalg.py": 2858987911347541177, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/test_astype.py": 10171766562093740708, - "venv/lib/python3.13/site-packages/ecdsa/test_pyecdsa.py": 14542286382742044648, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/typst.tpl": 5055419073126793137, - "frontend/src/lib/components/MaintenanceEventsTable.svelte": 1697386217337210174, - "venv/lib/python3.13/site-packages/pygments/lexers/_sql_builtins.py": 5906655440517434734, - "venv/lib/python3.13/site-packages/PIL/MpoImagePlugin.py": 644327650732339301, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_repr.py": 13147587049887075335, - "venv/lib/python3.13/site-packages/requests/_internal_utils.py": 4091305333167213279, - "venv/lib/python3.13/site-packages/python_multipart/multipart.py": 5677735019292537174, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/__init__.py": 9820770319106921495, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/arrayobject.h": 4345432890284821918, - "backend/alembic/versions/543d43d752b8_migrate_old_dictionary_entries_and_.py": 10988663686444687907, - "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/RECORD": 10036839994791510159, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/nonce.py": 18219168479887197733, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arrayterator.py": 1646530870049791291, - "venv/lib/python3.13/site-packages/websockets/uri.py": 264376168984862773, - "frontend/src/lib/stores/assistantChat.js": 16716458796178537885, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py": 18325640697829098192, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-sinh.csv": 12358602501260667480, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/shape.py": 13410030168622484801, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_ddl.py": 3690189094298044728, - "venv/lib/python3.13/site-packages/pygments/styles/bw.py": 869630132791421268, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_reductions.py": 14432782234851468060, - "venv/lib/python3.13/site-packages/httpcore/_async/connection_pool.py": 932468678264370661, - "frontend/build/_app/immutable/chunks/Ck4a7ANl.js": 3561562300210641559, - "venv/lib/python3.13/site-packages/pip/_internal/commands/download.py": 7533669665002975823, - "venv/lib/python3.13/site-packages/_pytest/helpconfig.py": 3033477806668470951, - "venv/lib/python3.13/site-packages/referencing/typing.py": 8296636464219681747, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufunclike.py": 12077553320554633586, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_real/foo90.f90": 58572216018544419, - "venv/lib/python3.13/site-packages/pandas/api/typing/aliases.py": 11194270368147942988, - "venv/lib/python3.13/site-packages/PIL/MpegImagePlugin.py": 7726254767528154514, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/color.py": 15062855556511243610, - "venv/lib/python3.13/site-packages/keyring/util/__init__.py": 9635016046220094473, - "venv/lib/python3.13/site-packages/ecdsa/test_malformed_sigs.py": 2606295770491528880, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_character/foo90.f90": 2435648607844815947, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_msvc.h": 17581467060937454503, - "venv/lib/python3.13/site-packages/fastapi/__main__.py": 10755252341326986079, - "venv/lib/python3.13/site-packages/fastapi/_compat/v2.py": 15078491685917047095, - "venv/lib/python3.13/site-packages/authlib/deprecate.py": 3563885283090710443, - "venv/lib/python3.13/site-packages/pip/_internal/commands/install.py": 17631777189475433503, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/ssh.py": 16262079536832961001, - "venv/lib/python3.13/site-packages/anyio/_core/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/anyio/_backends/_trio.py": 4764555436057754985, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_normalize.py": 7378656958631172603, - "venv/lib/python3.13/site-packages/numpy/f2py/__main__.py": 12567751646090102167, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_sort_values.py": 15072305514178699398, - "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/WHEEL": 3749476255729626245, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/char.pyi": 1639810799219814643, - "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_laguerre.py": 7475592201750602042, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_label_or_level_utils.py": 3423644585913150841, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_read.py": 8825002468745406134, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_multiindex.py": 13723677252432338937, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/INSTALLER": 17282701611721059870, - "frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js": 10120412205695269578, - "venv/lib/python3.13/site-packages/numpy/random/__init__.pyi": 13833571330152615376, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_constructors.py": 2439700578107653984, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cbrt.csv": 8929553891827331780, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/style.py": 12654125988995362593, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/compiler.py": 13924519162400330589, - "venv/lib/python3.13/site-packages/uvicorn/lifespan/on.py": 2866195356090164296, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_formats.py": 5259100336852479395, - "venv/lib/python3.13/site-packages/PIL/PcfFontFile.py": 8867692961463798279, - "venv/lib/python3.13/site-packages/httpcore/_backends/anyio.py": 6167729964577005634, - "frontend/src/lib/api/translate/target-schema.js": 10665479411127476571, - "frontend/src/services/__tests__/gitService.test.js": 2011135397906862721, - "venv/lib/python3.13/site-packages/numpy/random/mtrand.cpython-313-x86_64-linux-gnu.so": 16146459667121787202, - "backend/src/services/clean_release/dto.py": 16033619016556005561, - "venv/lib/python3.13/site-packages/pygments/styles/algol_nu.py": 6229131016121450375, - "frontend/src/lib/components/assistant/__tests__/assistant_confirmation.integration.test.js": 12582020574293031526, - "venv/lib/python3.13/site-packages/pip/_internal/req/__init__.py": 12266077985828139928, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/live_render.py": 14619617939683800204, - "venv/lib/python3.13/site-packages/passlib/crypto/__init__.py": 16409196868630049365, - "venv/lib/python3.13/site-packages/passlib/tests/utils.py": 15403198680231294263, - "venv/lib/python3.13/site-packages/pygments/lexers/data.py": 9365024327689738663, - "venv/lib/python3.13/site-packages/pygments/lexers/haskell.py": 8011341851439354724, - "venv/lib/python3.13/site-packages/python_multipart/__init__.py": 10290895261363712562, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_retain_attributes.py": 16210262356844956764, - "frontend/src/lib/components/reports/ReportCard.svelte": 7009840605870276729, - "venv/lib/python3.13/site-packages/websockets/legacy/client.py": 4032878587330592478, - "venv/lib/python3.13/site-packages/gitdb/test/__init__.py": 18393574323937353933, - "venv/lib/python3.13/site-packages/pip/_internal/cli/index_command.py": 15798187258841839292, - "venv/lib/python3.13/site-packages/pyasn1/codec/ber/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/jwe.py": 10478268710546063196, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/__init__.py": 71159121705871510, - "dist/docker/backend.0.1.1.tar.xz": 932529191402352855, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/__init__.py": 12849371269359608058, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/__init__.py": 2791238481813240414, - "venv/lib/python3.13/site-packages/pip/_internal/commands/uninstall.py": 11003472265011262515, - "venv/lib/python3.13/site-packages/numpy/core/shape_base.py": 17925759824894973734, - "venv/lib/python3.13/site-packages/starlette/datastructures.py": 12097180838087229563, - "venv/lib/python3.13/site-packages/greenlet/TThreadStateCreator.hpp": 9887867766190459665, - "venv/lib/python3.13/site-packages/pandas/core/window/expanding.py": 14141093310397856286, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_timeseries_window.py": 1973365560758236222, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler_py.py": 16189204441438239231, - "venv/lib/python3.13/site-packages/pip/_internal/commands/__init__.py": 3795218871212151351, - "venv/lib/python3.13/site-packages/pandas/core/groupby/base.py": 16888506204910366302, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_asfreq.py": 6162659555626011770, - "venv/lib/python3.13/site-packages/numpy/f2py/_isocbind.py": 15031197044862908440, - "venv/lib/python3.13/site-packages/pip/_internal/utils/deprecation.py": 7435269308988385470, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/base.py": 14908084548919567658, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_dtypes_basic.py": 10917162988625838981, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_to_offset.py": 3929599794655343911, - "venv/lib/python3.13/site-packages/pandas/_libs/sparse.pyi": 12526865400413362140, - "venv/lib/python3.13/site-packages/numpy/_core/umath.pyi": 11775804030935134661, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_sequence.py": 3721630758772772345, - "venv/lib/python3.13/site-packages/numpy/tests/test_numpy_version.py": 849232015288488204, - "venv/lib/python3.13/site-packages/jeepney/io/common.py": 15160647397460834508, - "venv/lib/python3.13/site-packages/pandas/io/excel/_odswriter.py": 17220892094904423676, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_common.py": 2223069451949206319, - "venv/lib/python3.13/site-packages/sqlalchemy/util/_has_cy.py": 11979732417254560424, - "venv/lib/python3.13/site-packages/sqlalchemy/pool/__init__.py": 4337679908168515343, - "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/METADATA": 15225661995655327539, - "venv/lib/python3.13/site-packages/starlette/middleware/httpsredirect.py": 16837082808103815044, - "venv/lib/python3.13/site-packages/attrs/converters.py": 13109003765349201809, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/packages.py": 11689856177725665974, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_setitem.py": 14920902525192671548, - "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/websockets_impl.py": 15673691977157706075, - "frontend/src/routes/maintenance/+page.svelte": 5467232163447861441, - "frontend/src/pages/Settings.svelte": 14062925006358678049, - "venv/lib/python3.13/site-packages/pandas/tests/series/test_logical_ops.py": 4438104524064299182, - "backend/src/api/routes/__tests__/test_clean_release_api.py": 8153144254371183034, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/resource_protector.py": 9147671710440653567, - "backend/src/plugins/translate/orchestrator_exec.py": 965301343860940811, - "backend/tests/scripts/test_clean_release_cli.py": 14028295526033195944, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_shift.py": 8547819448301023303, - "venv/lib/python3.13/site-packages/numpy/_core/multiarray.py": 4484782354376574355, - "venv/lib/python3.13/site-packages/pip/_internal/cli/command_context.py": 9426036980437931533, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_sql.py": 3901697517087276687, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/__init__.py": 96341051676048910, - "venv/bin/pytest": 2593802493707545818, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_core_functionalities.py": 10449747865888948579, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/_version.py": 15336513445621042105, - "venv/lib/python3.13/site-packages/pandas/api/__init__.py": 1145864207387918302, - "venv/lib/python3.13/site-packages/pandas/api/indexers/__init__.py": 17431573013142626187, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_clip.py": 11111183698178681331, - "venv/lib/python3.13/site-packages/urllib3/py.typed": 12220177918227495093, - "venv/lib/python3.13/site-packages/pygments/styles/staroffice.py": 11694998942433220413, - "backend/src/services/git/_base.py": 18009686862342149948, - "venv/lib/python3.13/site-packages/attr/__init__.pyi": 13203080513025719049, - "venv/lib/python3.13/site-packages/pandas/core/interchange/column.py": 9498044216416177656, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_as_unit.py": 8492383355919959393, - "venv/lib/python3.13/site-packages/keyring/backends/chainer.py": 12526770797516553385, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py": 5068814626384132900, - "venv/lib/python3.13/site-packages/pydantic/generics.py": 15019381413806459410, - "frontend/build/_app/immutable/nodes/11.C2Q0x739.js": 15308213278050514327, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_three_greenlets2.py": 11100501798741918610, - "venv/lib/python3.13/site-packages/starlette/middleware/trustedhost.py": 8302185291610019926, - "venv/lib/python3.13/site-packages/ecdsa/test_curves.py": 6577762025900435885, - "venv/lib/python3.13/site-packages/dotenv/ipython.py": 15904966766060247908, - "venv/lib/python3.13/site-packages/_pytest/mark/structures.py": 12237146603608917650, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo_fixed.f90": 8079594129222364031, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_timestamp.py": 10308799534491190078, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_typing.py": 17589387690638097975, - "venv/lib/python3.13/site-packages/yaml/composer.py": 13619070314468518566, - "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_transform.py": 18159263102656491974, - "venv/lib/python3.13/site-packages/pandas/tests/test_take.py": 17628004130770326677, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/token_validator.py": 2932866595454490527, - "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/WHEEL": 2357997949040430835, - "frontend/src/lib/api/translate/jobs.js": 9613844538417291513, - "venv/lib/python3.13/site-packages/numpy/_core/fromnumeric.pyi": 13945478633722616250, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/fields.pyi": 15420142722808118826, - "venv/lib/python3.13/site-packages/pygments/lexers/oberon.py": 15220143799603451830, - "frontend/src/lib/components/reports/__tests__/reports_page.integration.test.js": 966219842574639412, - "frontend/src/components/DashboardGrid.svelte": 49663074759987369, - "frontend/build/_app/immutable/nodes/14.DRir6aHV.js": 16259183276893641425, - "backend/src/core/superset_client/_datasets_preview.py": 15457586484984946621, - "venv/lib/python3.13/site-packages/anyio/streams/__init__.py": 15130871412783076140, - "backend/src/services/maintenance/_dashboard_scanner.py": 1401108008906511280, - "backend/src/plugins/translate/events.py": 7105758998894297601, - "venv/lib/python3.13/site-packages/urllib3/util/timeout.py": 17922362393077965047, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi": 2777456956260371820, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_concatenate_chunks.py": 9693420220003544490, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/pysqlcipher.py": 11225173272050906977, - "venv/lib/python3.13/site-packages/fastapi/_compat/model_field.py": 392699021682253569, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libcrypto-2e26a48f.so.3": 3658133521245392852, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/unicode_comment.f90": 11326797716215117266, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/replace.py": 1708865864686705833, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/traversals.py": 1188980668212022868, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_categorical_equal.py": 7942323667866280872, - "venv/lib/python3.13/site-packages/pygments/lexers/rego.py": 16022844238903541738, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arraysetops.pyi": 1782641795267171928, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_iterator.py": 13869355993837330406, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7592/endpoint.py": 18260428408051728802, - "frontend/src/routes/+page.svelte": 5863865830077771796, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/regexopt.py": 16073437303824961930, - "frontend/src/lib/components/dataset-review/SourceIntakePanel.svelte": 2392958189014264590, - "venv/lib/python3.13/site-packages/websockets/__init__.py": 4916307256304054040, - "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/RECORD": 9461427699726982537, - "venv/lib/python3.13/site-packages/rsa/parallel.py": 4968566722541778371, - "venv/lib/python3.13/site-packages/pygments/lexers/blueprint.py": 6370363226580199085, - "frontend/src/lib/components/layout/TopNavbar.svelte": 16154704878262712977, - "frontend/build/_app/immutable/nodes/8.xOR7dmBp.js": 6245655214318207283, - "backend/src/api/routes/admin.py": 14496518311272057274, - "venv/lib/python3.13/site-packages/PIL/ImageSequence.py": 16459886231802763032, - "frontend/src/assets/svelte.svg": 13872699371039797074, - "venv/lib/python3.13/site-packages/numpy/version.pyi": 5075382895829889457, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/WHEEL": 6514509858522675228, - "venv/lib/python3.13/site-packages/authlib/__init__.py": 8957417237987377675, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_stmts.f90": 6123192245816905092, - "venv/lib/python3.13/site-packages/pandas/core/internals/managers.py": 13547912653290063698, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_constructors.py": 11065058462752831997, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/warnings_and_errors.py": 11172336980866895356, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/test_transform.py": 5674175311567817854, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_masked.py": 5380551301916549925, - "venv/lib/python3.13/site-packages/pandas/io/formats/css.py": 11288129826285529457, - "venv/lib/python3.13/site-packages/authlib/common/errors.py": 16082974228565515177, - "venv/lib/python3.13/site-packages/rsa/util.py": 13423880475585138638, - "venv/lib/python3.13/site-packages/sqlalchemy/util/typing.py": 17638587764345605306, - "venv/lib/python3.13/site-packages/PIL/ImageMode.py": 2361901066832921091, - "venv/lib/python3.13/site-packages/git/util.py": 7424113599506269603, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/common/gh19161.f90": 7691871466158049079, - "frontend/src/lib/stores/maintenance.svelte.js": 17672315346665850067, - "frontend/src/lib/components/dataset-review/ExecutionMappingReview.svelte": 17593699210431624897, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_comparison.py": 11333735187162513512, - "venv/lib/python3.13/site-packages/attrs/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/api/extensions/__init__.py": 882327406374020760, - "venv/lib/python3.13/site-packages/numpy/polynomial/chebyshev.pyi": 5269136485429780038, - "venv/lib/python3.13/site-packages/pandas/core/computation/expressions.py": 10684284531040203747, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_groupby.py": 15721254196883995634, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/discovery.py": 12479996594187326798, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/__init__.py": 1856412417337875350, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_like.pyi": 1968570015765106620, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-tanh.csv": 6674536825156196036, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_chained_assignment_deprecation.py": 7694137945143129474, - "venv/lib/python3.13/site-packages/more_itertools/recipes.pyi": 16788810745659802820, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/signature.py": 3614545297259098566, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/base.py": 16052592982063844259, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libssl-81ffa89e.so.3": 13913673119166658781, - "venv/lib/python3.13/site-packages/pip/_internal/network/__init__.py": 1586148254475575526, - "venv/lib/python3.13/site-packages/numpy/lib/_twodim_base_impl.pyi": 15509415708991012734, - "venv/lib/python3.13/site-packages/numpy/lib/_version.py": 15294708923334674060, - "venv/lib/python3.13/site-packages/authlib/consts.py": 14226604841596736870, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_win_type.py": 18105114803686556748, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_api.py": 6439927798101672423, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_s390_unix.h": 5161826643658505126, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_melt.py": 15663807247682146566, - "venv/lib/python3.13/site-packages/pandas/tests/strings/__init__.py": 5060190599837877599, - "venv/lib/python3.13/site-packages/_pytest/config/__init__.py": 12787579251203510616, - "venv/lib/python3.13/site-packages/pip/_vendor/distlib/scripts.py": 8759605303886441976, - "venv/lib/python3.13/site-packages/pandas/io/html.py": 2727247063231114153, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/__init__.py": 3969805865048730851, - "venv/lib/python3.13/site-packages/PIL/IptcImagePlugin.py": 14329453455296600824, - "venv/lib/python3.13/site-packages/numpy/lib/_format_impl.py": 1809069379864985298, - "venv/lib/python3.13/site-packages/_pytest/capture.py": 17850967053989495422, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_constructors.py": 979131987837682435, - "venv/lib/python3.13/site-packages/apscheduler/triggers/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64-testset-1.csv": 5708101386018266998, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/url.py": 9692934100602135106, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_backend.py": 1472021608501071055, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/api.py": 13134394673408254097, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi": 9835891299056543360, - "venv/lib/python3.13/site-packages/numpy/ctypeslib/_ctypeslib.py": 12636954896699095212, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_value_counts.py": 9352540710376306520, - "venv/lib/python3.13/site-packages/pandas/_libs/algos.cpython-313-x86_64-linux-gnu.so": 15706331654215762588, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_html.py": 12040484325988635032, - "venv/lib/python3.13/site-packages/pandas/tests/generic/test_generic.py": 1297407268239966429, - "venv/lib/python3.13/site-packages/uvicorn/supervisors/watchfilesreload.py": 13062440477475586751, - "frontend/src/lib/components/reports/__tests__/reports_filter_performance.test.js": 6358696236009732713, - "frontend/src/lib/components/translate/TranslationPreview.svelte": 9514416214545061268, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/twisted.py": 16059862619165885730, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_cli.py": 3173259257428855556, - "frontend/build/_app/immutable/chunks/DkSc7bnI.js": 16633882293462436801, - "frontend/build/_app/immutable/chunks/CHelQZPK.js": 13538277300205681632, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/__init__.py": 3673322722277252961, - "backend/src/core/superset_client/_dashboards_list.py": 18014687561732553425, - "backend/src/services/validation_service.py": 4040391162969506763, - "backend/src/plugins/translate/preview_token_estimator.py": 254295902082954386, - "frontend/src/lib/api/translate/dictionaries.js": 13928848549982189213, - "frontend/src/lib/components/reports/__tests__/report_detail.ux.test.js": 7841254655898186872, - "frontend/build/_app/immutable/chunks/D2LDFDH5.js": 1513005501777757570, - "venv/lib/python3.13/site-packages/numpy/_typing/_extended_precision.py": 4201820494689784136, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/markup.py": 5413800947725916538, - "backend/src/services/health_service.py": 7707107506464919176, - "venv/lib/python3.13/site-packages/fastapi/params.py": 14263655860695381481, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/funcfortranname.f": 9330535808093475892, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/rsa_key.py": 7092106298733667895, - "venv/lib/python3.13/site-packages/numpy/tests/test_matlib.py": 14395481530627870882, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/core": 10616484054735611337, - "venv/lib/python3.13/site-packages/pyasn1/codec/native/encoder.py": 120921270972591880, - "venv/lib/python3.13/site-packages/python_multipart/exceptions.py": 5971058243218049183, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arithmetic.pyi": 467927803068643024, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/modeline.py": 6194365452131561478, - "venv/lib/python3.13/site-packages/pandas/core/reshape/merge.py": 300205528811693975, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/applicator": 6616723520993329538, - "venv/lib/python3.13/site-packages/pip/_internal/models/link.py": 7172346414535657925, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/subrout.pyf": 4660465266594480405, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_list_accessor.py": 8613662386779664039, - "venv/lib/python3.13/site-packages/attrs/filters.py": 6844006230924162452, - "venv/lib/python3.13/site-packages/authlib/integrations/base_client/framework_integration.py": 3935346152156572025, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/conftest.py": 4124267277224879990, - "venv/lib/python3.13/site-packages/pydantic_core/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/test_nat.py": 7400568652984772972, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/baked.py": 6911138208603240867, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mutable.py": 9323088483998280629, - "venv/lib/python3.13/site-packages/yaml/dumper.py": 11376022992370902766, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/__init__.py": 14522970260621605208, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_version.pyi": 3636944488233043883, - "venv/lib/python3.13/site-packages/urllib3/util/util.py": 12490259045660543460, - "venv/lib/python3.13/site-packages/authlib/oidc/discovery/well_known.py": 8259335680633926377, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_astype.py": 4854809596041987380, - "venv/lib/python3.13/site-packages/uvicorn/lifespan/off.py": 16254524872582859561, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi": 18143251582901996072, - "venv/lib/python3.13/site-packages/jeepney/io/asyncio.py": 13239992245695516007, - "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs_scalars.pyi": 1826323011169529229, - "venv/lib/python3.13/site-packages/numpy/_core/_exceptions.py": 5570375156851166818, - "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/__init__.py": 4390908730288159455, - "venv/lib/python3.13/site-packages/numpy/version.py": 1497063540123613501, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/numeric.py": 14451517189908259173, - "venv/lib/python3.13/site-packages/authlib/jose/errors.py": 15231759002942436632, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/masked_reductions.py": 633644255158859565, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_bin_groupby.py": 14831211659124136806, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arraypad.py": 4907193085512342162, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_case_when.py": 4133174129660834805, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_data_list.py": 1131520422778420758, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py": 18069619555394133945, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/schema.py": 8358664670620586363, - "venv/lib/python3.13/site-packages/PIL/_imagingmorph.cpython-313-x86_64-linux-gnu.so": 11171810899664471137, - "venv/lib/python3.13/site-packages/numpy/core/defchararray.py": 11371045148957547088, - "venv/lib/python3.13/site-packages/httpcore/_synchronization.py": 10997080307461682786, - "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/RECORD": 3649834117451110628, - "venv/lib/python3.13/site-packages/pygments/styles/onedark.py": 17580335614588531275, - "venv/lib/python3.13/site-packages/pandas/core/internals/blocks.py": 6448406236246476333, - "venv/lib/python3.13/site-packages/pygments/lexers/_openedge_builtins.py": 4979988747924637739, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/offsets.cpython-313-x86_64-linux-gnu.so": 6726636942028566415, - "venv/lib/python3.13/site-packages/authlib/oauth2/__init__.py": 13682931764896414722, - "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_resolution.py": 9651416588266430520, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_join.py": 4213933887062089605, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_datetime.py": 4179112383995346046, - "venv/lib/python3.13/site-packages/numpy/typing/tests/test_runtime.py": 12534621594420844770, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_datetimelike.py": 5317270578347271174, - "venv/lib/python3.13/site-packages/pygments/lexers/procfile.py": 3860651022061090738, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_arrow_compat.py": 12986187285988432338, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/pg8000.py": 6580512354643849828, - "venv/lib/python3.13/site-packages/numpy/random/_pcg64.cpython-313-x86_64-linux-gnu.so": 5759445712745875888, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/__init__.py": 8558541715982163200, - "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/METADATA": 13428590545328703138, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_astype.py": 4975959187621745360, - "venv/lib/python3.13/site-packages/numpy/core/function_base.py": 12696640832638144604, - "venv/lib/python3.13/site-packages/pandas/tests/config/__init__.py": 15130871412783076140, - "backend/src/plugins/translate/preview_prompt_helpers.py": 14303328860208074708, - "backend/git_repos/remote/test-repo.git/objects/ee/59553241ef084b83d3351ba4c33caf2ed9a840": 11587106407031972706, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_copy.py": 11335108864615756235, - "venv/lib/python3.13/site-packages/pygments/lexers/matlab.py": 1880915927722177654, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/RECORD": 16342326945648353387, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_update.py": 12293424926920594944, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/scalars.pyi": 17683675356659300769, - "venv/lib/python3.13/site-packages/jeepney/io/__init__.py": 2568357146184259175, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/generator_pcg64_np121.pkl.gz": 4708588000144933291, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_iat.py": 3570464615146398178, - "venv/lib/python3.13/site-packages/pygments/lexers/mosel.py": 1877592344012288438, - "venv/lib/python3.13/site-packages/pygments/lexers/_googlesql_builtins.py": 12251289884604745945, - "backend/src/services/dataset_review/__init__.py": 3695054675894579272, - "venv/lib/python3.13/site-packages/pip/_internal/utils/misc.py": 17461379236189029253, - "backend/git_repos/remote/test-repo.git/objects/3e/05ec6ef6504483c4bc7d00f0d0272c38ec661f": 11182016264585388842, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/literal.py": 5641382379370828704, - "venv/lib/python3.13/site-packages/charset_normalizer/cd.py": 8687667152597941021, - "venv/lib/python3.13/site-packages/passlib/handlers/mysql.py": 11165762635383041460, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_interp_fillna.py": 5530041283991655415, - "backend/alembic/versions/a7b1c2d3e4f5_add_provider_id_to_validation_policies.py": 7446022200459040057, - "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/REQUESTED": 15130871412783076140, - "backend/src/api/routes/environments.py": 6175447476823722833, - "venv/lib/python3.13/site-packages/certifi/__main__.py": 13417658012431779061, - "venv/lib/python3.13/site-packages/pandas/io/sas/sasreader.py": 12766780210114366112, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex_longtable.tpl": 12723621983797415444, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_logical_ops.py": 16166386974005224415, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_period.py": 6047041810867211174, - "venv/lib/python3.13/site-packages/pandas/core/groupby/indexing.py": 18009437216172136227, - "frontend/src/routes/dashboards/+page.svelte": 5522148689707175338, - "frontend/vite.config.js": 3769019895915732131, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_diff.py": 2216748778018882333, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_value_attrspec.py": 7741590618654448240, - "venv/lib/python3.13/site-packages/ecdsa/test_jacobi.py": 1249543655136186433, - "venv/lib/python3.13/site-packages/anyio/to_thread.py": 12767326212338028587, - "venv/lib/python3.13/site-packages/_pytest/assertion/rewrite.py": 2425990712758915831, - "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_inspect.py": 10573558345297891848, - "venv/lib/python3.13/site-packages/pandas/tests/extension/list/test_list.py": 4538625980063375611, - "venv/lib/python3.13/site-packages/py.py": 16248211404003181569, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_cat.py": 15988884721768567895, - "venv/lib/python3.13/site-packages/dateutil/tz/tz.py": 5258008267965780817, - "venv/lib/python3.13/site-packages/pygments/lexers/_lua_builtins.py": 12653747099659257203, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/themes.py": 6451091097727599550, - "frontend/src/lib/api/translate/__tests__/test-target-schema.test.js": 16872327388398551554, - "venv/lib/python3.13/site-packages/pip/__main__.py": 574438877257676911, - "frontend/src/lib/auth/__tests__/permissions.test.js": 14871965971459735540, - "venv/lib/python3.13/site-packages/ecdsa/rfc6979.py": 11564966030899162026, - "venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py": 1419719055394402145, - "venv/lib/python3.13/site-packages/websockets/legacy/protocol.py": 762692033188392424, - "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_take.py": 1216902953519121176, - "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/graphql.py": 2307854666015224677, - "backend/src/plugins/translate/_lang_detect.py": 2125979777533490081, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_indexing.py": 14717641281147152159, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/clsregistry.py": 1589692649837935355, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/isocintrin/isoCtests.f90": 6208802899442270399, - "venv/lib/python3.13/site-packages/click/core.py": 16793133181718891193, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_round.py": 1299086932398824299, - "venv/lib/python3.13/site-packages/ecdsa/ecdsa.py": 9770689913380927623, - "venv/lib/python3.13/site-packages/pyasn1/type/namedval.py": 8273171503516887681, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_nat.py": 18428782698385974380, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_common_basic.py": 1945891789924713537, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_orc.py": 1248059610437937895, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/sql.py": 13315906751371033170, - "venv/lib/python3.13/site-packages/dotenv/parser.py": 17651523026132242005, - "venv/lib/python3.13/site-packages/itsdangerous/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/base.py": 10514193453447954780, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/constants.pyi": 4415188581374004936, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/bulk_persistence.py": 2307818727114646866, - "frontend/src/services/gitService.js": 15727247604802461729, - "backend/src/plugins/translate/__tests__/test_dictionary_import.py": 17094877730934121606, - "backend/src/api/routes/git/_gitea_routes.py": 3966408809424419232, - "backend/src/plugins/translate/preview_prompt_builder.py": 15837150631111510351, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_value_counts.py": 12340872812120847127, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_indexerrors.py": 4434868847540549873, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/unix.py": 13808187640638677050, - "venv/lib/python3.13/site-packages/pip/_internal/commands/lock.py": 14782882714168174465, - "venv/lib/python3.13/site-packages/_pytest/__init__.py": 3769333500910148571, - "venv/lib/python3.13/site-packages/pygments/styles/colorful.py": 15708848112363953394, - "frontend/playwright-report/data/cc5452f8d8c308a176676866ee06628a569362aa.zip": 18382826147717299104, - "venv/lib/python3.13/site-packages/pandas/plotting/__init__.py": 13230487326686617492, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nbit_base_example.pyi": 8571452382806614924, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/base.py": 14734745827490220667, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/gitdb/stream.py": 3035738824550231197, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/descriptor_props.py": 7044852927393650707, - "frontend/src/components/git/GitManager.svelte": 12767660311913624739, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_sparse.py": 14343335524508450058, - "venv/lib/python3.13/site-packages/pygments/lexers/ldap.py": 17455983150181177257, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/generic.py": 17755579497690180620, - "frontend/src/lib/components/health/PolicyForm.svelte": 17995152707951193436, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/util.cpython-313-x86_64-linux-gnu.so": 12473903676666680134, - "venv/lib/python3.13/site-packages/pydantic/experimental/pipeline.py": 9493054841465227788, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/toml.py": 2225382735669153136, - "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_builtin.py": 74545289993348593, - "venv/lib/python3.13/site-packages/passlib/tests/test_apache.py": 12515001998770565375, - "venv/lib/python3.13/site-packages/starlette/websockets.py": 13834731343216764204, - "venv/lib/python3.13/site-packages/pandas/core/roperator.py": 2587829042468916489, - "venv/lib/python3.13/site-packages/cffi/model.py": 13544803366359102016, - "venv/lib/python3.13/site-packages/pandas/tests/config/test_config.py": 4630144191929135452, - "venv/lib/python3.13/site-packages/gitdb/__init__.py": 15381521749253695923, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_partial_indexing.py": 4132091154215910029, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_spinners.py": 15873416546130487469, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_get_numeric_data.py": 11747933921770969706, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/result.py": 12262298207886620908, - "venv/lib/python3.13/site-packages/keyring/backends/macOS/__init__.py": 1010937986753403630, - "venv/lib/python3.13/site-packages/git/repo/base.py": 13975465345838683533, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py": 10367325397209016951, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh17859.f": 13562390882286135024, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_methods.py": 12694335778731418517, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_between_time.py": 14266333058913745751, - "venv/lib/python3.13/site-packages/pygments/formatters/latex.py": 7514533384468139434, - "frontend/src/components/tools/DebugTool.svelte": 8095371084479333656, - "venv/lib/python3.13/site-packages/pyasn1/__init__.py": 8089201217593738032, - "venv/lib/python3.13/site-packages/pygments/lexers/perl.py": 17014528337020572681, - "backend/src/api/routes/profile.py": 8666418382456481533, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/__init__.py": 16211693040174992594, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/plugin.py": 16042078006552521613, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/httpcore/_sync/socks_proxy.py": 4418971149260853240, - "venv/lib/python3.13/site-packages/pygments/lexers/jvm.py": 897669925284011089, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_indexing.py": 16291207621268530224, - "frontend/build/_app/immutable/chunks/rzyp_Wbp.js": 10559672264716197308, - "backend/src/scripts/clean_release_cli.py": 777127038463156812, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/automap.py": 4672057253309608464, - "backend/git_repos/remote/test-repo.git/objects/4f/4e0958b3a42eff67a2b8cfd084d05c43e54716": 6040513978194442637, - "venv/lib/python3.13/site-packages/annotated_doc/__init__.py": 6834198874252778425, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_promote.py": 16601872688404846307, - "frontend/src/lib/stores/health.js": 3621667160018048028, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_period.py": 15671388508498441412, - "backend/src/plugins/translate/orchestrator.py": 6762154654706349158, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_tzconversion.py": 7205566353454584259, - "venv/lib/python3.13/site-packages/git/objects/__init__.py": 2110615482320355676, - "backend/src/plugins/backup.py": 1465877198420371496, - "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/PIL/ImageQt.py": 6607270889359138659, - "backend/src/services/clean_release/report_builder.py": 14118825155100404762, - "backend/src/services/dataset_review/repositories/session_repository.py": 4897386456198762089, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/__init__.py": 11121941644106061453, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/table.py": 16856253349556498073, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_constructors.py": 9815164146739254076, - "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libcom_err-2abe824b.so.2.1": 12870528025628871295, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/status.py": 2214590120238144582, - "frontend/src/lib/stores/environmentContext.js": 9960741825828562980, - "venv/lib/python3.13/site-packages/pydantic/version.py": 3699343596421001359, - "venv/lib/python3.13/site-packages/pycparser/yacctab.py": 18018314512916353707, - "frontend/src/lib/components/MaintenanceSettingsPanel.svelte": 8672462648876875400, - "venv/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py": 11621577915097515056, - "venv/lib/python3.13/site-packages/pandas/util/_exceptions.py": 14426860079366867683, - "venv/lib/python3.13/site-packages/passlib/tests/test_apps.py": 10454136535890937237, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_align.py": 6050248183327934780, - "venv/lib/python3.13/site-packages/pandas/tseries/frequencies.py": 2262381949755250516, - "venv/lib/python3.13/site-packages/pip/_internal/commands/configuration.py": 1608697090566485893, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/einsumfunc.pyi": 200771351328522379, - "frontend/src/lib/components/health/HealthMatrix.svelte": 18141816318382901531, - "venv/lib/python3.13/site-packages/_pytest/terminal.py": 885450969703476729, - "venv/lib/python3.13/site-packages/numpy/core/__init__.py": 10397294636564169377, - "venv/lib/python3.13/site-packages/greenlet/TGreenlet.hpp": 6993553444981671786, - "venv/lib/python3.13/site-packages/pygments/lexers/css.py": 517586374264113606, - "venv/lib/python3.13/site-packages/charset_normalizer/legacy.py": 1706599349563920562, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/jwt.py": 9642615960197748105, - "venv/lib/python3.13/site-packages/charset_normalizer/md.py": 2029760700380476138, - "venv/lib/python3.13/site-packages/_pytest/nodes.py": 515939386237558331, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/styles/__init__.py": 9482393721453335937, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23533.f": 12558972205518833024, - "venv/lib/python3.13/site-packages/numpy/_core/memmap.py": 4093510602708416858, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/period.pyi": 13110894861187422750, - "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_skew_kurt.py": 15225601437354712351, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sample.py": 16877779557071324115, - "venv/lib/python3.13/site-packages/gitdb/db/pack.py": 13460574575424209609, - "venv/lib/python3.13/site-packages/numpy/_core/strings.py": 3623885046208831106, - "venv/lib/python3.13/site-packages/numpy/linalg/_umath_linalg.pyi": 7674087576653964854, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/period.cpython-313-x86_64-linux-gnu.so": 14468234464367691795, - "venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py": 1246582552828542841, - "venv/lib/python3.13/site-packages/greenlet/tests/__init__.py": 1181423074160870921, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh25211.f": 1486878017876900890, - "venv/lib/python3.13/site-packages/git/diff.py": 6691274015605451565, - "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/licenses/LICENSE": 13322127602069971876, - "backend/src/models/maintenance.py": 7247376865754977732, - "venv/lib/python3.13/site-packages/pandas/io/formats/info.py": 215303194287834907, - "backend/:memory:test_main": 8120796031785944903, - "venv/lib/python3.13/site-packages/pyasn1/codec/cer/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/httpx/_api.py": 6697370469329778523, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/_libs/ops_dispatch.cpython-313-x86_64-linux-gnu.so": 5284769758475394095, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_cpp_avx2.cpython-313-x86_64-linux-gnu.so": 2991745295485163924, - "venv/lib/python3.13/site-packages/pip/_vendor/distro/distro.py": 12494639376332486204, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_formats.py": 2601044064677727807, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/provider.py": 16463243654123731993, - "venv/lib/python3.13/site-packages/pip/_internal/utils/direct_url_helpers.py": 6075890513530296650, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_indexing.py": 8943385096811168079, - "venv/lib/python3.13/site-packages/_pytest/stepwise.py": 3527630676691417317, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_timedeltas.py": 1175883320586860493, - "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/METADATA": 3643456577199395707, - "venv/lib/python3.13/site-packages/pandas/io/json/_json.py": 1393095374713367445, - "backend/src/plugins/git/__init__.py": 2144831474780401625, - "venv/lib/python3.13/site-packages/attr/_version_info.pyi": 7141309436445210354, - "venv/lib/python3.13/site-packages/pandas/tests/io/xml/conftest.py": 17514079438846557943, - "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/integration.py": 3085827906490477329, - "venv/lib/python3.13/site-packages/passlib/handlers/oracle.py": 12959175637015399815, - "frontend/build/_app/immutable/nodes/4.CcWcsp3l.js": 17995715878844731568, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/conftest.py": 25473177671450048, - "venv/lib/python3.13/site-packages/pygments/lexers/bare.py": 18266858932333619451, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_os.h": 7883047506449405400, - "venv/lib/python3.13/site-packages/bcrypt/__init__.py": 11415155211917181362, - "venv/lib/python3.13/site-packages/authlib/oidc/core/claims.py": 2035724920423374302, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_version.pyi": 18093228021414910594, - "venv/lib/python3.13/site-packages/pygments/lexers/qvt.py": 1895735583818227972, - "venv/lib/python3.13/site-packages/pandas/_libs/byteswap.cpython-313-x86_64-linux-gnu.so": 17856848989827220388, - "venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py": 10408538054406276433, - "venv/lib/python3.13/site-packages/greenlet/greenlet.cpp": 3281107194043468270, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/file_proxy.py": 17695135735211897444, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/hook-numpy.py": 5221550291012182443, - "venv/lib/python3.13/site-packages/rapidfuzz/process_cpp.py": 16797760903996739079, - "venv/lib/python3.13/site-packages/pandas/core/reshape/tile.py": 17137524194129840833, - "venv/lib/python3.13/site-packages/pandas/core/arrays/_utils.py": 11574890848475750509, - "venv/lib/python3.13/site-packages/pydantic/v1/tools.py": 1995883197897112278, - "venv/lib/python3.13/site-packages/numpy/lib/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_concat.py": 16549010224568175202, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/offsets.pyi": 13173581775000480811, - "venv/lib/python3.13/site-packages/pandas/tests/window/moments/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_array_from_pyobj.py": 9596224861290975079, - "venv/lib/python3.13/site-packages/sqlalchemy/engine/interfaces.py": 4890958419958257958, - "venv/lib/python3.13/site-packages/pygments/styles/algol.py": 3040373291664740876, - "frontend/src/lib/Counter.svelte": 3616557554460116236, - "frontend/build/_app/immutable/chunks/Cs7qTEqk.js": 15866070137921022262, - "venv/lib/python3.13/site-packages/cffi/recompiler.py": 17809252277700094304, - "backend/src/services/git/_status.py": 13381104725964137243, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi": 16934250836612138541, - "venv/lib/python3.13/site-packages/rsa/asn1.py": 3861968161559322784, - "venv/lib/python3.13/site-packages/pandas/util/_decorators.py": 14780166101442507665, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix.py": 4672871351134074735, - "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/ccalendar.pyi": 15789956857032062129, - "venv/lib/python3.13/site-packages/attr/validators.pyi": 15579625896285277321, - "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/METADATA": 3448868793744358515, - "venv/lib/python3.13/site-packages/urllib3/exceptions.py": 9687187566231423953, - "frontend/build/_app/immutable/chunks/DSxK3NUv.js": 8639953729041066468, - "venv/lib/python3.13/site-packages/pandas/core/indexes/frozen.py": 1419685664276640120, - "backend/src/api/routes/mappings.py": 2467003850993962558, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/filters/__init__.py": 2992007913496948339, - "venv/lib/python3.13/site-packages/pydantic/tools.py": 8931184638883701008, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate.py": 16723865897349422996, - "venv/lib/python3.13/site-packages/urllib3/connectionpool.py": 7493427857878469165, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/warnings_and_errors.pyi": 9019577563960071498, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_join.py": 11910166566689889389, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_insert.py": 15536994417338770457, - "venv/lib/python3.13/site-packages/fastapi/staticfiles.py": 4094330072433302614, - "venv/lib/python3.13/site-packages/pygments/lexers/_csound_builtins.py": 14530739818491398298, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh2848.f90": 5799106109999071412, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/json.py": 14755215397454910426, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_windows_renderer.py": 1076842273781909680, - "venv/lib/python3.13/site-packages/pygments/styles/_mapping.py": 11752660241391232497, - "venv/lib/python3.13/site-packages/jsonschema/validators.py": 3832874295500213309, - "venv/lib/python3.13/site-packages/pluggy/_hooks.py": 6941854999025808196, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_astype.py": 16700461036658228009, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/einsumfunc.py": 9944042006439149561, - "venv/lib/python3.13/site-packages/pandas/compat/numpy/function.py": 18405870240333383757, - "venv/lib/python3.13/site-packages/PIL/FtexImagePlugin.py": 8196606399875185931, - "venv/lib/python3.13/site-packages/pandas/core/ops/invalid.py": 10186546927135277579, - "venv/lib/python3.13/site-packages/numpy/polynomial/polyutils.py": 12355826783958402233, - "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/METADATA": 14608873187265321271, - "venv/lib/python3.13/site-packages/_pytest/raises.py": 8188402179490363767, - "venv/lib/python3.13/site-packages/numpy/random/_philox.cpython-313-x86_64-linux-gnu.so": 9916143171057774705, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/__init__.py": 13749066369790839334, - "venv/lib/python3.13/site-packages/pandas/tests/extension/uuid/test_uuid.py": 13955678427426850807, - "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/keyring/credentials.py": 14515496037842724455, - "venv/lib/python3.13/site-packages/cffi/_cffi_include.h": 13094899814611950155, - "venv/lib/python3.13/site-packages/pandas/io/sas/sas7bdat.py": 17851617851457266799, - "venv/lib/python3.13/site-packages/pygments/lexers/erlang.py": 11757064262773184741, - "frontend/src/lib/components/StartMaintenanceForm.svelte": 11114259982483681666, - "venv/lib/python3.13/site-packages/numpy/core/getlimits.py": 14257687540182552408, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_arithmetic.py": 15071337112968886738, - "frontend/src/routes/storage/repos/+page.svelte": 2273592022555593164, - "backend/src/core/superset_client/_user_projection.py": 15240732089847883635, - "venv/lib/python3.13/site-packages/pandas/core/flags.py": 4690844374637430013, - "build.sh": 5842665574427443016, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_value_counts.py": 13270420637302622174, - "frontend/src/lib/api.js": 7712788935523484149, - "venv/lib/python3.13/site-packages/PIL/PalmImagePlugin.py": 13008868719182630239, - "venv/lib/python3.13/site-packages/pip/_vendor/tomli/__init__.py": 12906995259233516197, - "venv/lib/python3.13/site-packages/httpx/_transports/wsgi.py": 11981127094916412794, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_nlargest.py": 14518132768753249360, - "venv/lib/python3.13/site-packages/pandas/core/array_algos/datetimelike_accumulations.py": 14719894187829729175, - "venv/lib/python3.13/site-packages/urllib3/contrib/pyopenssl.py": 11839715589709210412, - "venv/lib/python3.13/site-packages/pip/_vendor/idna/idnadata.py": 1169745920682458213, - "venv/lib/python3.13/site-packages/charset_normalizer/models.py": 9917300217816275821, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/common.py": 16314033415206173235, - "backend/src/services/clean_release/repositories/publication_repository.py": 1097065694003039928, - "venv/lib/python3.13/site-packages/typing_inspection/typing_objects.py": 16856718240972376883, - "venv/lib/python3.13/site-packages/PIL/_webp.pyi": 18222325750818585549, - "venv/lib/python3.13/site-packages/iniconfig/_version.py": 8497474654470220170, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_index.py": 10837492069089787028, - "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/RECORD": 7320381591791379627, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_masm.obj": 11967637259540485652, - "venv/lib/python3.13/site-packages/numpy/lib/_function_base_impl.pyi": 2628035888703031029, - "venv/lib/python3.13/site-packages/numpy/_typing/_nested_sequence.py": 7827259347937485408, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/fixed_string.f90": 8654788371538544793, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath_complex.py": 11732242536199439023, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_common.py": 3559416690270529904, - "frontend/src/routes/+layout.ts": 8392799000856778740, - "venv/lib/python3.13/site-packages/sqlalchemy/pool/impl.py": 4687705587963980337, - "venv/lib/python3.13/site-packages/starlette/middleware/authentication.py": 15211131264936212938, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex.tpl": 8820045022551446255, - "venv/lib/python3.13/site-packages/jeepney/tests/test_bindgen.py": 8637878018232418583, - "venv/lib/python3.13/site-packages/numpy/f2py/rules.py": 9322914583460630877, - "backend/git_repos/remote/test-repo.git/objects/17/66251d8cb2693136e09ea3def3e776559cb722": 1137762010493457272, - "venv/lib/python3.13/site-packages/sqlalchemy/event/legacy.py": 13465911776953636949, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_x32_unix.h": 9165722966153119887, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi": 10784666243744187693, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_numba.py": 18148155441554555618, - "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/WHEEL": 2357997949040430835, - "frontend/src/routes/dashboards/[id]/components/DashboardGitManager.svelte": 12995972702842177800, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/__version__.py": 14138134075118474134, - "venv/lib/python3.13/site-packages/_pytest/_py/error.py": 2257336434271433543, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_tz_localize.py": 4937713043686953098, - "frontend/src/components/git/BranchSelector.svelte": 2850678079887313044, - "venv/lib/python3.13/site-packages/git/objects/tree.py": 10239027037919781330, - "frontend/playwright-report/trace/snapshot.html": 11716473056415565262, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_interpolate.py": 6154072863387383113, - "venv/lib/python3.13/site-packages/pandas/tests/api/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/error_wrappers.py": 11273827025986230629, - "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/licenses/LICENSE": 4123064337800029995, - "venv/lib/python3.13/site-packages/numpy/_array_api_info.pyi": 13283968924732680159, - "venv/lib/python3.13/site-packages/pip/_internal/operations/install/__init__.py": 10456333337205488584, - "venv/lib/python3.13/site-packages/ecdsa/keys.py": 10281170640484982154, - "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/default_comparator.py": 47118577003622736, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE": 9584102918819171104, - "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/format": 12697928260201325593, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/libdivide.h": 5314232500579481313, - "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/zip-safe": 15240312484046875203, - "frontend/e2e/tests/live-project-check.e2e.js": 4657915737640702974, - "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/zip-safe": 15240312484046875203, - "venv/lib/python3.13/site-packages/pandas/core/nanops.py": 18291534943985310005, - "venv/lib/python3.13/site-packages/PIL/QoiImagePlugin.py": 17663704273100331654, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_nlargest.py": 1423106021399469694, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/scoping.py": 18223258186431020473, - "venv/lib/python3.13/site-packages/numpy/_core/function_base.pyi": 8343632640078378312, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_constructors.py": 13890224577680389718, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ma.pyi": 6467636381637286867, - "frontend/src/lib/api/datasetReview.js": 11780670121350173465, - "frontend/build/_app/immutable/nodes/2.CzvoUmY2.js": 5644623930213002650, - "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/RECORD": 7363618870628306370, - "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/_cmd.py": 14954780419054588164, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_function.py": 644452398244782315, - "venv/lib/python3.13/site-packages/click/parser.py": 13988544851350599869, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_extint128.py": 11074657869101074458, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/orderinglist.py": 10162099108656794338, - "venv/lib/python3.13/site-packages/urllib3/http2/probe.py": 4069929463671970243, - "backend/src/services/clean_release/candidate_service.py": 12771065368619689666, - "venv/lib/python3.13/site-packages/starlette/schemas.py": 697416731579555195, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_rank.py": 5398520257852104723, - "frontend/svelte.config.js": 8473636210766821560, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi": 3893434234020223151, - "venv/lib/python3.13/site-packages/numpy/ma/testutils.pyi": 3899348061346041413, - "venv/lib/python3.13/site-packages/pandas/_testing/_io.py": 14264259716673715185, - "frontend/tailwind.config.js": 13139381085024634801, - "backend/conftest.py": 16521922883434363388, - "venv/lib/python3.13/site-packages/pandas/_testing/compat.py": 10172779814048259850, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/refresh_token.py": 17927903035152872556, - "venv/lib/python3.13/site-packages/numpy/core/fromnumeric.py": 2136433423902202138, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_internal/utils/urls.py": 8698341051522816167, - "venv/lib/python3.13/site-packages/annotated_types/test_cases.py": 5123395674810472016, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_old_base.py": 191359377446257900, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/philox-testset-2.csv": 7063857529719738394, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/base.py": 6348888156686452825, - "venv/lib/python3.13/site-packages/packaging/__init__.py": 5479277484104486860, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_both.f90": 13943066317159236257, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_formats.py": 18080627205081311773, - "venv/lib/python3.13/site-packages/PIL/ImImagePlugin.py": 15452956038794399492, - "venv/lib/python3.13/site-packages/pygments/__init__.py": 14493583771211110135, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_update.py": 9098258267671647783, - "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/__init__.py": 12911374670789466961, - "venv/lib/python3.13/site-packages/pip/_internal/utils/hashes.py": 17310331665429541812, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_integer/foo77.f": 12000068001851270396, - "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/__init__.py": 3521833849634327520, - "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/_pytest/reports.py": 13930709338396699351, - "backend/src/core/logger.py": 11870126816969695787, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/char.pyi": 13143560686049627445, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame.py": 16757570551941104401, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_shares_memory.py": 2911029123657970431, - "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_delitem.py": 14336697139511118920, - "venv/lib/python3.13/site-packages/git/refs/__init__.py": 16246686106073400519, - "venv/lib/python3.13/site-packages/PIL/ImageEnhance.py": 3218405223202808764, - "backend/src/api/routes/dashboards/_action_routes.py": 10305887713397749487, - "venv/lib/python3.13/site-packages/click/_textwrap.py": 14586282603215052310, - "frontend/build/_app/immutable/nodes/17.CGMpcAVz.js": 10821941490965601406, - "backend/src/plugins/mapper.py": 12075913231649127940, - "venv/lib/python3.13/site-packages/sqlalchemy/util/tool_support.py": 4926732415520779988, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/instrumentation.py": 14882045449667214075, - "venv/lib/python3.13/site-packages/cryptography/utils.py": 18088508841978595788, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py": 17873236864291624476, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_strings.py": 17398806130402098912, - "frontend/src/lib/stores/__tests__/mocks/state.js": 10691107564567912815, - "venv/lib/python3.13/site-packages/fastapi/dependencies/utils.py": 7687214523082385505, - "venv/lib/python3.13/site-packages/pygments/styles/paraiso_dark.py": 3976779833379189837, - "frontend/playwright-report/trace/sw.bundle.js": 10879347794748701702, - "venv/lib/python3.13/site-packages/keyring/backends/null.py": 12740996416911604870, - "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/asymmetric_key.py": 14948661854506285135, - "venv/lib/python3.13/site-packages/jose/backends/native.py": 50023158618000658, - "venv/lib/python3.13/site-packages/apscheduler/triggers/combining.py": 1264860868414723829, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_protocols.py": 5019018645804313814, - "venv/lib/python3.13/site-packages/PIL/PdfParser.py": 13710342183037972042, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_iloc.py": 7586049606891014270, - "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/meson.build": 8784756284679859367, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_pytables_missing.py": 12154582133989896069, - "venv/lib/python3.13/site-packages/websockets/__main__.py": 11948055520555854616, - "venv/lib/python3.13/site-packages/websockets/speedups.cpython-313-x86_64-linux-gnu.so": 10941658763526595989, - "venv/lib/python3.13/site-packages/pandas/io/clipboard/__init__.py": 3656451154829206939, - "venv/lib/python3.13/site-packages/jaraco/classes/meta.py": 15930255620248873425, - "venv/lib/python3.13/site-packages/passlib/ext/django/models.py": 12386223748379294996, - "venv/lib/python3.13/site-packages/git/db.py": 6680123567509774609, - "venv/lib/python3.13/site-packages/jsonschema/_legacy_keywords.py": 16481666133229715822, - "venv/lib/python3.13/site-packages/git/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/styles/default.py": 13992125975366109635, - "venv/lib/python3.13/site-packages/pygments/lexers/gcodelexer.py": 13712494327007684318, - "frontend/build/_app/immutable/chunks/DrLlT35Y.js": 13372359563307010137, - "backend/src/models/dataset_review_pkg/_semantic_models.py": 6371476812115351221, - "venv/lib/python3.13/site-packages/pluggy/_callers.py": 1042673447718196223, - "backend/alembic/env.py": 7020161137665650592, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_ipython_compat.py": 12632271159842988561, - "venv/lib/python3.13/site-packages/jeepney/io/tests/test_threading.py": 6656552495241857519, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_api.py": 10514120091521589282, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_tolist.py": 8343058000369672317, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/resource_protector.py": 3563910821279222695, - "venv/lib/python3.13/site-packages/pygments/lexers/testing.py": 17148598391210353576, - "venv/lib/python3.13/site-packages/pandas/core/internals/concat.py": 12151675567885981464, - "venv/lib/python3.13/site-packages/pip/_internal/req/req_dependency_group.py": 10505346210114745037, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_day.py": 6371851881186970754, - "venv/lib/python3.13/site-packages/pygments/lexers/openscad.py": 13045825115225232396, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_seed_sequence.py": 7687465232954593311, - "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/RECORD": 9964194961227523130, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein.py": 17993169044119596860, - "venv/lib/python3.13/site-packages/pandas/core/interchange/utils.py": 11401792151107207834, - "venv/lib/python3.13/site-packages/urllib3/filepost.py": 3814725067598042920, - "venv/lib/python3.13/site-packages/pandas/core/indexers/objects.py": 409599993084996593, - "venv/lib/python3.13/site-packages/pandas/tests/frame/conftest.py": 15090201792072045503, - "venv/lib/python3.13/site-packages/keyring/backends/fail.py": 5792496235026678021, - "venv/lib/python3.13/site-packages/pydantic/v1/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/pyproject.py": 12684373765476932108, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/wait.py": 6196757964348666082, - "venv/lib/python3.13/site-packages/ecdsa/_version.py": 17707102226558781833, - "venv/lib/python3.13/site-packages/pip/_internal/commands/wheel.py": 16397273591245583356, - "venv/lib/python3.13/site-packages/click/exceptions.py": 9734955259447933725, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_cumulative.py": 8178093067175155877, - "venv/lib/python3.13/site-packages/multipart/decoders.py": 11346752866822986212, - "venv/lib/python3.13/site-packages/git/objects/submodule/__init__.py": 12958523219496107878, - "backend/src/plugins/translate/preview_review.py": 5584592578627646560, - "venv/lib/python3.13/site-packages/PIL/ImageDraw.py": 12919304671639673744, - "venv/lib/python3.13/site-packages/urllib3/util/connection.py": 15511685694589961094, - "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/licenses/LICENSE": 5757922580822401219, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_elffile.py": 5728213398707817049, - "backend/git_repos/remote/test-repo.git/objects/22/c0ea49cea7e5138fb91b25b1bc0e101ae6e017": 17630871400599334193, - "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/WHEEL": 14550174241288068152, - "frontend/src/routes/datasets/StatsBar.svelte": 4241697609925045735, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/RECORD": 16874983218652404911, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_parsing.py": 2228959015420278458, - "venv/lib/python3.13/site-packages/pygments/styles/tango.py": 12389250878249075539, - "venv/lib/python3.13/site-packages/pandas/io/formats/excel.py": 797619981868084011, - "venv/lib/python3.13/site-packages/websockets/sync/messages.py": 15699091325918681038, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_quarter.py": 11099677280196239755, - "backend/src/api/routes/maintenance/_schemas.py": 16377052636841886346, - "venv/lib/python3.13/site-packages/pandas/_libs/properties.pyi": 9268470215750269699, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/auth.py": 13542332344403032059, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_parquet.py": 11050150015772440923, - "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/PIL/ImageText.py": 15322496455608242001, - "venv/lib/python3.13/site-packages/git/refs/reference.py": 2038789918710608481, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py": 16386268386376675175, - "venv/lib/python3.13/site-packages/smmap/test/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/dns.py": 17149871769553794654, - "frontend/playwright-report/data/36557793d7fda8ef412a553a55389600452506f9.png": 8526067803082440263, - "backend/src/models/dataset_review_pkg/_finding_models.py": 13502025287982574359, - "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_argon2.py": 11345706437113628133, - "venv/lib/python3.13/site-packages/anyio/_core/_fileio.py": 4507100568401692983, - "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/jsonschema_specifications/__init__.py": 5732822354953774657, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7636/__init__.py": 913610541217778747, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic/v1/env_settings.py": 6194387033830177219, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_time_series.py": 5205199092955498507, - "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pydantic/datetime_parse.py": 196119761382305574, - "venv/lib/python3.13/site-packages/pandas/_libs/_cyutility.cpython-313-x86_64-linux-gnu.so": 3372660143512868174, - "venv/lib/python3.13/site-packages/pandas/core/dtypes/common.py": 10996276696597806957, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_transpose.py": 17983160984979323393, - "venv/lib/python3.13/site-packages/PIL/ImageStat.py": 18442709639217312689, - "venv/lib/python3.13/site-packages/pandas/tests/libs/test_lib.py": 6721066015604956469, - "venv/lib/python3.13/site-packages/pygments/lexers/compiled.py": 8215290039991205531, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/authorization_server.py": 17967809814827547139, - "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_numpyconfig.h": 18150055639397773687, - "venv/lib/python3.13/site-packages/pandas/core/base.py": 10262717073058743378, - "venv/lib/python3.13/site-packages/annotated_types/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/filters/__init__.py": 835924536855006596, - "venv/lib/python3.13/site-packages/dotenv/__main__.py": 16883579879172186355, - "venv/lib/python3.13/site-packages/httpx/_utils.py": 4836536051177895209, - "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/RECORD": 17594742868855466393, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nested_sequence.pyi": 11245460325970663922, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize.pyi": 6616985736007157309, - "venv/lib/python3.13/site-packages/pip/_internal/self_outdated_check.py": 991029278889407558, - "venv/lib/python3.13/site-packages/numpy/lib/_arraypad_impl.pyi": 2186875333484796630, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_ops.py": 16346030307660048773, - "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/__init__.py": 8705044848308260480, - "venv/lib/python3.13/site-packages/fastapi/datastructures.py": 727178955746650271, - "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/dotenv.py": 5872848911499749500, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi": 13061638961405460334, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_indexing.py": 5063545640498065297, - "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pygments/modeline.py": 6194365452131561478, - "venv/lib/python3.13/site-packages/pygments/lexers/kuin.py": 2818054539831699366, - "venv/lib/python3.13/site-packages/pandas/tests/extension/date/__init__.py": 16789767433439616593, - "venv/lib/python3.13/site-packages/pandas/_libs/writers.pyi": 10494773026133244183, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/hooks.py": 8580161128344266243, - "venv/lib/python3.13/site-packages/pygments/lexers/webidl.py": 8097260111959278117, - "venv/lib/python3.13/site-packages/passlib/handlers/sha2_crypt.py": 8171587560325812664, - "venv/lib/python3.13/site-packages/pygments/sphinxext.py": 2768161754523156130, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_conversion.py": 9159276697339089788, - "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/base.py": 17992335652981439676, - "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/RECORD": 7266315886702289726, - "venv/lib/python3.13/site-packages/websockets/sync/router.py": 10335595955948355382, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_simd_module.py": 7122050193390298178, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh26681.f90": 1515497186927052106, - "venv/lib/python3.13/site-packages/pandas/tests/strings/test_find_replace.py": 262184394614748386, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/config.py": 10707678943298497676, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/RECORD": 9803861100978586236, - "venv/lib/python3.13/site-packages/PIL/XbmImagePlugin.py": 12256750478268246137, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/precision.f90": 5518911932373565642, - "venv/lib/python3.13/site-packages/git/objects/submodule/util.py": 8621897576747443758, - "venv/lib/python3.13/site-packages/pygments/lexers/csound.py": 2175454840368374515, - "frontend/src/routes/datasets/review/review-workspace-helpers.js": 8577563379877694502, - "venv/lib/python3.13/site-packages/jeepney/bus_messages.py": 5871341372541525842, - "backend/src/core/utils/async_network.py": 7880952036357722891, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_filters.py": 17271344092069736999, - "venv/lib/python3.13/site-packages/pandas/io/formats/__init__.py": 18140261896107421679, - "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/__init__.py": 9083396324667433335, - "venv/lib/python3.13/site-packages/httpcore/_models.py": 2501866419898326733, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_deprecations.py": 16124509063246256847, - "backend/src/services/__tests__/test_llm_provider.py": 14345242680566878510, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_union_categoricals.py": 6843679254735807, - "venv/lib/python3.13/site-packages/pygments/lexers/rebol.py": 10460732731157940232, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_at_time.py": 15352346149584081864, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90": 6219951399575860362, - "venv/lib/python3.13/site-packages/numpy/tests/test_warnings.py": 3154249157134620649, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_concat.py": 10207975532842927134, - "frontend/src/lib/components/translate/__tests__/test_bulk_replace_modal.svelte.js": 16164320505605430516, - "backend/tests/test_translate_jobs.py": 14073962595360719355, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_series_equal.py": 1223890028205011021, - "venv/lib/python3.13/site-packages/greenlet/tests/test_generator.py": 14156412320760444199, - "venv/lib/python3.13/site-packages/uvicorn/loops/__init__.py": 15130871412783076140, - "backend/src/plugins/translate/_run_source.py": 11569137727611732019, - "frontend/src/routes/settings/notifications/+page.svelte": 11507547877108528071, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/decl_class.py": 6328411894571735935, - "venv/lib/python3.13/site-packages/starlette/middleware/__init__.py": 9524277524025372856, - "venv/lib/python3.13/site-packages/pandas/_libs/json.pyi": 10989301892466547548, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/test_interval.py": 18040371224712437126, - "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/anyio/streams/tls.py": 4191898645554875562, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/repr.py": 839417422880281122, - "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/WHEEL": 5990830714395966792, - "venv/lib/python3.13/site-packages/greenlet/greenlet_msvc_compat.hpp": 12504008513945919250, - "venv/lib/python3.13/site-packages/passlib/crypto/digest.py": 15890463288512025688, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/path_registry.py": 8410829659513707067, - "venv/lib/python3.13/site-packages/pygments/lexers/automation.py": 8021926838024836904, - "backend/tests/core/test_defensive_guards.py": 12897956916491464449, - "venv/lib/python3.13/site-packages/pygments/lexers/bibtex.py": 14652372822443154388, - "venv/lib/python3.13/site-packages/yaml/error.py": 5626374410579058436, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_openpyxl.py": 9542840527483618681, - "venv/lib/python3.13/site-packages/numpy/lib/format.pyi": 11752225430594536662, - "venv/lib/python3.13/site-packages/pandas/tests/reductions/__init__.py": 16150188643076000414, - "models": 14346352665111990852, - "venv/lib/python3.13/site-packages/starlette/testclient.py": 16088848330558215194, - "venv/lib/python3.13/site-packages/numpy/linalg/__init__.pyi": 18409133021422984774, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_combine_concat.py": 3201068805128232483, - "venv/lib/python3.13/site-packages/jsonschema/tests/test_utils.py": 8668650648802195016, - "venv/lib/python3.13/site-packages/pycparser/ply/lex.py": 3393278208465358140, - "venv/lib/python3.13/site-packages/pygments/lexers/stata.py": 7249891970174867363, - "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_spec_conformance.py": 16448324304809345527, - "backend/src/services/git/__init__.py": 18353922816391181902, - "venv/lib/python3.13/site-packages/numpy/_core/defchararray.py": 15550230459945996915, - "venv/lib/python3.13/site-packages/pandas/tests/test_flags.py": 411845322592830527, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/oracledb.py": 7158791242292470472, - "backend/src/services/reports/type_profiles.py": 9186322444310801411, - "venv/lib/python3.13/site-packages/pandas/tests/io/test_spss.py": 4865360315909532603, - "venv/lib/python3.13/site-packages/jeepney/io/tests/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_parameter.py": 15173522343126004527, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_datetime.py": 13781712980921881470, - "backend/src/plugins/translate/__tests__/test_orthogonal_fixes.py": 12993935170413202399, - "venv/lib/python3.13/site-packages/passlib/tests/test_utils_md4.py": 15270721044910698449, - "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/licenses/COPYING": 14459782230785388765, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_mem_overlap.py": 4202716587079637350, - "venv/lib/python3.13/site-packages/anyio/streams/stapled.py": 9733127303038397237, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test__datasource.py": 1747755531265478106, - "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_multiarray.py": 3592197154340095431, - "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_to_pydatetime.py": 1129954411080617001, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_categorical.py": 8844412630511751140, - "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/__init__.py": 4761936067832638585, - "venv/lib/python3.13/site-packages/pip/_internal/models/wheel.py": 10473287225032326206, - "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/core/internals/api.py": 14632030170441237968, - "backend/src/plugins/search.py": 13705421801923369220, - "venv/lib/python3.13/site-packages/_pytest/_code/__init__.py": 6211607282116942091, - "venv/lib/python3.13/site-packages/pandas/_libs/sparse.cpython-313-x86_64-linux-gnu.so": 2051484129454294720, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_loadtxt.py": 17562784940619942447, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_category.py": 3944898528119364040, - "venv/lib/python3.13/site-packages/httpx/_transports/mock.py": 13564349939188292363, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/tree.py": 4991806303236874829, - "venv/lib/python3.13/site-packages/pygments/lexers/_cl_builtins.py": 16540712925368297957, - "venv/lib/python3.13/site-packages/PIL/GribStubImagePlugin.py": 14954946414134984896, - "venv/lib/python3.13/site-packages/greenlet/slp_platformselect.h": 10428201768098464386, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein_py.py": 1933257612725836484, - "venv/lib/python3.13/site-packages/pandas/_libs/__init__.py": 17117112389651696580, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/einsumfunc.pyi": 8902765738896588686, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_filter.py": 2388681477981649268, - "venv/lib/python3.13/site-packages/pandas/tests/apply/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/lexers/ruby.py": 6898093948224302592, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/integration.py": 12670848015915724967, - "backend/alembic/README": 17625003422504608299, - "venv/lib/python3.13/site-packages/pygments/lexers/_tsql_builtins.py": 829193091321611630, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_to_timestamp.py": 17572983799929378095, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/__init__.py": 13584649922093198724, - "venv/lib/python3.13/site-packages/pygments/lexers/minecraft.py": 10133579583270214110, - "venv/lib/python3.13/site-packages/pydantic_settings/version.py": 17263591404988984480, - "frontend/src/lib/api/translate/corrections.js": 3619404083693055292, - "venv/lib/python3.13/site-packages/tzlocal/win32.py": 1949985224569608978, - "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/passlib/utils/handlers.py": 10182859005870689026, - "venv/lib/python3.13/site-packages/cryptography/x509/name.py": 15338066443257445241, - "venv/lib/python3.13/site-packages/pip/_internal/network/lazy_wheel.py": 12936988990566680659, - "venv/lib/python3.13/site-packages/numpy/lib/mixins.pyi": 15597536290223628777, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64dxsm-testset-1.csv": 9129730764673472086, - "frontend/src/lib/components/translate/TranslationMetricsDashboard.svelte": 8577281635452165836, - "venv/lib/python3.13/site-packages/pandas/io/json/_normalize.py": 15938855324762935595, - "backend/src/plugins/git_plugin.py": 5910855495971245586, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_round.py": 14996007456708990295, - "venv/lib/python3.13/site-packages/pip/_internal/req/constructors.py": 17485271035479378662, - "venv/lib/python3.13/site-packages/pandas/core/strings/accessor.py": 14021462534679430426, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/pkg_resources.py": 14271077832999370068, - "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_missing.py": 1963705411068820866, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_string_arrow.py": 10008395772220468318, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_mips_unix.h": 17373389962405490482, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_datetime64.py": 16272266806084058743, - "venv/lib/python3.13/site-packages/pandas/tests/frame/test_block_internals.py": 17935662848672401507, - "venv/lib/python3.13/site-packages/httpcore/_backends/auto.py": 10488908050307887802, - "backend/src/api/routes/storage.py": 3921659652525719249, - "venv/lib/python3.13/site-packages/anyio/streams/buffered.py": 8916188172110578587, - "backend/src/core/superset_client/_dashboards_filters.py": 17625905985676889586, - "venv/lib/python3.13/site-packages/anyio/_core/_synchronization.py": 7050001375718876608, - "venv/lib/python3.13/site-packages/rapidfuzz/process_cpp_impl.cpython-313-x86_64-linux-gnu.so": 11767771662042404251, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/parameters.py": 247312908510013930, - "backend/src/services/dataset_review/orchestrator.py": 15350066045014880242, - "venv/lib/python3.13/site-packages/apscheduler/schedulers/blocking.py": 3483388533957772681, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/errors.py": 12935154705443176852, - "venv/lib/python3.13/site-packages/numpy/lib/__init__.pyi": 1537495515469182226, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_pct_change.py": 10313980265441433173, - "venv/lib/python3.13/site-packages/ecdsa/test_rw_lock.py": 1572802971060634697, - "venv/lib/python3.13/site-packages/uvicorn/__main__.py": 6086938803696646644, - "venv/lib/python3.13/site-packages/gitdb/test/test_example.py": 3039934065817753241, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/registration.py": 14639972512303032712, - "venv/lib/python3.13/site-packages/pip/_internal/utils/virtualenv.py": 14416705841810221305, - "frontend/public/vite.svg": 13568221685541582385, - "frontend/src/components/tasks/LogFilterBar.svelte": 1342324464094667837, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_character/foo77.f": 4046503346951676582, - "frontend/build/_app/immutable/nodes/15.Dfk1Lz29.js": 1026201780612355026, - "backend/src/services/clean_release/__tests__/test_stages.py": 15550789367780507193, - "backend/alembic/versions/aa1b2c3d4e5f_drop_deprecated_translate_columns.py": 15433357059529111004, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/licenses/LICENSE": 1641332741515411734, - "venv/lib/python3.13/site-packages/pyasn1/codec/ber/encoder.py": 8912119133548489544, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_halfyear.py": 587199217232946404, - "backend/src/services/__tests__/test_health_service.py": 16470443406586362974, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/models.py": 16636119441941357281, - "venv/lib/python3.13/site-packages/pygments/lexers/smalltalk.py": 6113431347120223592, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/util.py": 2176177435997659667, - "venv/lib/python3.13/site-packages/numpy/random/tests/test_randomstate.py": 11205714006000849926, - "venv/lib/python3.13/site-packages/pandas/core/arrays/boolean.py": 8821671562937866269, - "venv/lib/python3.13/site-packages/pygments/unistring.py": 18037463865539157041, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_ujson.py": 12184194085993665945, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/assertions.py": 5556667947376168765, - "venv/lib/python3.13/site-packages/pandas/core/ops/missing.py": 9493665944764255854, - "frontend/playwright.config.js": 802586619504012017, - "frontend/build/_app/immutable/chunks/CC_MCBkD.js": 11709343780956289454, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/emoji.py": 9166774203918731896, - "venv/lib/python3.13/site-packages/_pytest/setupplan.py": 7496801885995567141, - "venv/lib/python3.13/site-packages/pandas/_libs/arrays.cpython-313-x86_64-linux-gnu.so": 8634234308863090562, - "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_array_to_datetime.py": 3467480435568672840, - "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_deprecations.py": 14624516389510242394, - "venv/lib/python3.13/site-packages/greenlet/tests/test_generator_nested.py": 12822240347707346718, - "dist/docker/frontend.0.1.1.tar.xz": 14558310887004056908, - "venv/lib/python3.13/site-packages/dotenv/cli.py": 7952654621986067973, - "venv/lib/python3.13/site-packages/ecdsa/_compat.py": 13034064768731879065, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_calendar.py": 12313641252472031631, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/util.py": 10640907133050862176, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_indexing.py": 14552860427542050771, - "venv/lib/python3.13/site-packages/yaml/emitter.py": 6036657460416912844, - "frontend/src/lib/stores/__tests__/assistantChat.test.js": 11108218971449015168, - "frontend/src/routes/settings/FeaturesSettings.svelte": 14192374301379217586, - "venv/lib/python3.13/site-packages/pydantic/functional_validators.py": 5835339743072048940, - "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arctanh.csv": 8620268345075425735, - "venv/lib/python3.13/site-packages/pycparser/lextab.py": 16045770806700381661, - "venv/lib/python3.13/site-packages/pandas/core/interchange/dataframe_protocol.py": 12857147443873820285, - "venv/lib/python3.13/site-packages/rapidfuzz/fuzz.py": 1094797446508902066, - "venv/lib/python3.13/site-packages/numpy/lib/_type_check_impl.pyi": 2667658052734929089, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_enc_cryptodome.py": 15753279711312689193, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_datetimelike.py": 10294379314868108649, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/__init__.py": 13331622784664204066, - "venv/lib/python3.13/site-packages/anyio/abc/__init__.py": 11428476337116642278, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_types.py": 4083297168618981717, - "venv/lib/python3.13/site-packages/pydantic/deprecated/config.py": 12280996227531856230, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/__init__.py": 6532094538918910232, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/nditer.pyi": 2351219156711800159, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_cython.py": 2933400021016349431, - "venv/lib/python3.13/site-packages/pygments/lexers/_vbscript_builtins.py": 9882134558469491349, - "venv/lib/python3.13/site-packages/jsonschema_specifications/_core.py": 14812112544772987164, - "venv/lib/python3.13/site-packages/pygments/lexers/grammar_notation.py": 9009644754106884095, - "frontend/src/routes/datasets/review/ReviewWorkspaceLeftSidebar.svelte": 9009994851177005358, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/multiarray.py": 3224049574922696945, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_index_as_string.py": 13421551616136437100, - "venv/lib/python3.13/site-packages/numpy/random/tests/data/__init__.py": 15130871412783076140, - "backend/src/services/dataset_review/clarification_pkg/_helpers.py": 16131390986170241319, - "frontend/e2e/tests/enterprise-clean-setup.e2e.js": 6434855878266981931, - "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/authorization_server.py": 6858244712625056421, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/fft.pyi": 14454280827038327842, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/_internal_utils.py": 4091305333167213279, - "venv/lib/python3.13/site-packages/secretstorage/item.py": 15486045386471912693, - "venv/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/__init__.py": 2635182244050911910, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_join.py": 17874591841487372992, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/_psycopg_common.py": 4111797647365870137, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_loc.py": 17839380711970027363, - "venv/lib/python3.13/site-packages/starlette/formparsers.py": 9019779181100355515, - "venv/lib/python3.13/site-packages/websockets/auth.py": 499195617702591757, - "venv/lib/python3.13/site-packages/authlib/oauth2/client.py": 7237359250450222680, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/inout.f90": 1521999519583206538, - "venv/lib/python3.13/site-packages/yaml/tokens.py": 2279161238859232338, - "venv/lib/python3.13/site-packages/pandas/api/executors/__init__.py": 16954693181142010028, - "venv/lib/python3.13/site-packages/dateutil/easter.py": 14631233890122048084, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_skiprows.py": 8764515842253490735, - "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/REQUESTED": 15130871412783076140, - "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/authorization_server.py": 4427151727224472650, - "venv/lib/python3.13/site-packages/pip/_internal/vcs/mercurial.py": 335201628064585213, - "venv/lib/python3.13/site-packages/cffi/_imp_emulation.py": 17246725564704952212, - "venv/lib/python3.13/site-packages/pip/_internal/metadata/base.py": 13444129650880426353, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/client_credentials.py": 256154392957334831, - "venv/lib/python3.13/site-packages/ecdsa/test_der.py": 7117444285097824495, - "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/exceptions.py": 11303331612406662162, - "venv/lib/python3.13/site-packages/numpy/ma/core.py": 338350463523585845, - "venv/lib/python3.13/site-packages/numpy/_core/_simd.pyi": 13553578040186939249, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_deprecations.py": 6015734648984591027, - "venv/lib/python3.13/site-packages/pandas/core/interchange/dataframe.py": 16525846817331842080, - "venv/lib/python3.13/site-packages/pandas/core/arrays/__init__.py": 10460719978124302175, - "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_subplots.py": 4596089143375088346, - "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_store.py": 1500300322083708794, - "venv/lib/python3.13/site-packages/click/__init__.py": 9261629899056870564, - "venv/lib/python3.13/site-packages/pandas/_libs/reshape.cpython-313-x86_64-linux-gnu.so": 10639750501333255943, - "venv/lib/python3.13/site-packages/sqlalchemy/testing/provision.py": 17812733620485633975, - "venv/lib/python3.13/site-packages/pyasn1/type/namedtype.py": 1859990775875190116, - "venv/lib/python3.13/site-packages/git/objects/tag.py": 7954808535585493300, - "venv/lib/python3.13/site-packages/dateutil/relativedelta.py": 5903095963079475484, - "frontend/src/lib/stores/activity.js": 10599836924066718828, - "frontend/build/_app/immutable/chunks/0SSHfn-s.js": 1512028033550082311, - "frontend/src/lib/components/reports/ReportsList.svelte": 17367781544989044334, - "venv/lib/python3.13/site-packages/authlib/oauth2/auth.py": 8455258275234626534, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_sort_index.py": 13517883160584591966, - "backend/src/core/migration_engine.py": 4215834818829537236, - "venv/lib/python3.13/site-packages/sqlalchemy/util/_py_collections.py": 16825222625411635946, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_infer_objects.py": 16868563755487479303, - "venv/lib/python3.13/site-packages/pip/_internal/cli/status_codes.py": 9143625681947330756, - "venv/lib/python3.13/site-packages/passlib/handlers/md5_crypt.py": 7669328623914474137, - "venv/lib/python3.13/site-packages/certifi/__init__.py": 9045580998764948967, - "venv/lib/python3.13/site-packages/jeepney/io/tests/test_asyncio.py": 2820168745710754136, - "venv/lib/python3.13/site-packages/bcrypt/__about__.py": 11196369962175692786, - "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE": 4274653168153720331, - "venv/lib/python3.13/site-packages/passlib/tests/test_context_deprecated.py": 7876919198015151018, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/names.py": 705261158040926128, - "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/WHEEL": 2357997949040430835, - "venv/lib/python3.13/site-packages/pandas/core/strings/object_array.py": 17631047188839635539, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/interfaces.py": 5371646629319169153, - "venv/lib/python3.13/site-packages/git/objects/fun.py": 15014209679156260865, - "venv/lib/python3.13/site-packages/pygments/lexers/tcl.py": 10343667975436015855, - "venv/lib/python3.13/site-packages/numpy/_core/tests/test_nditer.py": 8341339612899904236, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/tools.py": 6437315459200419827, - "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_editable.py": 12494407279914732338, - "venv/lib/python3.13/site-packages/pygments/lexers/trafficscript.py": 776604244051744646, - "backend/src/core/migration/risk_assessor.py": 4161499861941446814, - "venv/lib/python3.13/site-packages/pip/_internal/operations/prepare.py": 13514839972066861359, - "frontend/src/routes/settings/LoggingSettings.svelte": 5172094246995863925, - "backend/src/core/task_manager/__init__.py": 15991802770215124472, - "venv/lib/python3.13/site-packages/numpy/random/lib/libnpyrandom.a": 1802449692091040396, - "venv/lib/python3.13/site-packages/annotated_doc/main.py": 3384049281532298500, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_setops.py": 17350958906336246626, - "venv/lib/python3.13/site-packages/uvicorn/protocols/__init__.py": 15130871412783076140, - "backend/src/api/routes/validation.py": 13836068409484617547, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_frame.py": 2169381747938271444, - "backend/src/plugins/translate/__init__.py": 12400577052797809611, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/processors.cpython-313-x86_64-linux-gnu.so": 18139875206371157315, - "venv/lib/python3.13/site-packages/numpy/rec/__init__.pyi": 1782063765067823837, - "venv/lib/python3.13/site-packages/dateutil/utils.py": 7067026915090881998, - "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_object.py": 9215781825358309147, - "backend/src/services/reports/__tests__/test_report_service.py": 2262310201779987221, - "venv/lib/python3.13/site-packages/numpy/fft/tests/test_helper.py": 5362180645056413158, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_combine_first.py": 3100691245280812910, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_take.py": 3281943380342853080, - "backend/src/services/git/_remote_providers.py": 7497094824437995253, - "venv/lib/python3.13/site-packages/apscheduler/executors/debug.py": 14072221218785494847, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/incfile.f90": 4348588746493647387, - "venv/lib/python3.13/site-packages/git/exc.py": 14278238357119816365, - "venv/lib/python3.13/site-packages/pip/_internal/network/download.py": 5256731341219268693, - "venv/lib/python3.13/site-packages/pydantic/_internal/_dataclasses.py": 15256193972947054890, - "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/WHEEL": 7454950858448014158, - "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_periodindex.py": 13430003945574795792, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/_py_util.py": 12836989066113400538, - "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_datetime.py": 3499461736474530062, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/requests.py": 1102963893193914979, - "venv/lib/python3.13/site-packages/greenlet/__init__.py": 3447613556981242475, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_ticks.py": 11649965080303468085, - "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/RECORD": 12555714734722889695, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix.pyi": 2700568594438441246, - "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_series.py": 17126297747681689408, - "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_json_table_schema_ext_dtype.py": 13021437050542691118, - "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/result.py": 8306497889916212025, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_nunique.py": 8450574751331186943, - "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_bar.py": 7791068963246005463, - "venv/lib/python3.13/site-packages/jaraco/functools/__init__.pyi": 2872039192528394677, - "venv/lib/python3.13/site-packages/pip/_internal/utils/_log.py": 13011536737418204268, - "venv/lib/python3.13/site-packages/numpy/lib/_index_tricks_impl.py": 13574106461973044500, - "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_str_accessor.py": 4066094997616994612, - "venv/lib/python3.13/site-packages/sqlalchemy/util/_collections.py": 7772437080414835462, - "venv/lib/python3.13/site-packages/pygments/lexers/vyper.py": 6477559246065994199, - "venv/lib/python3.13/site-packages/pip/_internal/models/search_scope.py": 9282393652860589543, - "venv/lib/python3.13/site-packages/websockets/version.py": 5853118844880112885, - "venv/lib/python3.13/site-packages/httpcore/_backends/trio.py": 8394426709857317737, - "venv/lib/python3.13/site-packages/pygments/lexers/arrow.py": 6699009974224818979, - "frontend/playwright-report/trace/playwright-logo.svg": 4728037962520658573, - "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/WHEEL": 16097436423493754389, - "venv/lib/python3.13/site-packages/pip/_vendor/requests/cookies.py": 4997226307650350876, - "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/licenses/LICENSE": 14316979437290727897, - "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/licenses/LICENSE": 14524289631770661180, - "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/RECORD": 11904769847385571600, - "venv/lib/python3.13/site-packages/pydantic/dataclasses.py": 12384956801113860889, - "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_distutils.py": 1948707545068786, - "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/util.pyx": 649821942746469002, - "frontend/e2e/tests/translation.e2e.js": 9863246540495731784, - "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/okp_key.py": 10312614562914096039, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/sqlalchemy/util/compat.py": 16148553252010089561, - "backend/src/scripts/__init__.py": 5400372851656282343, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_describe.py": 362374422228593281, - "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/WHEEL": 8600534672961461758, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_utils.py": 15197339054699289627, - "venv/lib/python3.13/site-packages/numpy/_typing/_ufunc.pyi": 6286629088867436848, - "venv/lib/python3.13/site-packages/sqlalchemy/util/__init__.py": 15821192733097665649, - "venv/lib/python3.13/site-packages/pygments/styles/rrt.py": 9490973359165080360, - "venv/lib/python3.13/site-packages/pygments/lexers/kusto.py": 16285533608924436308, - "venv/lib/python3.13/site-packages/secretstorage/defines.py": 9590959702075554048, - "venv/lib/python3.13/site-packages/pandas/tests/extension/test_numpy.py": 4073641912755651877, - "venv/lib/python3.13/site-packages/pandas/_testing/_warnings.py": 5640964566228306285, - "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/__init__.py": 3619091571279924576, - "venv/lib/python3.13/site-packages/pandas/_libs/index.pyi": 17679349633640606985, - "venv/lib/python3.13/site-packages/greenlet/platform/switch_sparc_sun_gcc.h": 2915128971664712180, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_arithmetic.py": 4858019700859362660, - "backend/src/models/dataset_review_pkg/_session_models.py": 9902104970008253748, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_frequencies.py": 14039315221824123200, - "backend/src/services/dataset_review/event_logger.py": 8944052747593678117, - "backend/git_repos/remote/test-repo.git/objects/d8/3fe0db1279ef07c4c4f3de4156a629373b4057": 7507193819578792576, - "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arraysetops.py": 10588903945244480732, - "venv/lib/python3.13/site-packages/httpcore/_async/interfaces.py": 18250473733460571816, - "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/timeout.py": 1807228452024740476, - "venv/lib/python3.13/site-packages/numpy/f2py/func2subr.pyi": 16573082220135508510, - "venv/lib/python3.13/site-packages/urllib3/response.py": 1987354357306756790, - "frontend/build/favicon.png": 16740551781088792605, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_scalar.py": 2434773821902319678, - "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_two_greenlets.py": 11156275429806391390, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/flatiter.pyi": 6885824496927786205, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_constructors.py": 9767900500541600486, - "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_upcast.py": 6496794053681247105, - "venv/lib/python3.13/site-packages/httpcore/__init__.py": 5897259569277532401, - "frontend/src/routes/admin/settings/llm/+page.svelte": 17653948269643098768, - "backend/src/services/dataset_review/semantic_resolver.py": 11369306880421964134, - "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension.cpython-313-x86_64-linux-gnu.so": 1211491156495529145, - "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/__init__.py": 9997757256282720103, - "venv/lib/python3.13/site-packages/cryptography/hazmat/__init__.py": 6534110674636458866, - "venv/lib/python3.13/site-packages/_pytest/assertion/__init__.py": 16392348866405910618, - "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_other.py": 783701524491896337, - "venv/lib/python3.13/site-packages/numpy/lib/_iotools.py": 10522826373041592861, - "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/INSTALLER": 17282701611721059870, - "docker/backend.entrypoint.sh": 1034669340368151691, - "venv/lib/python3.13/site-packages/pydantic/json.py": 4109352930301629308, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_routines.py": 4860173574365060471, - "venv/lib/python3.13/site-packages/pandas/core/ops/dispatch.py": 7041711677358147534, - "venv/lib/python3.13/site-packages/rapidfuzz/__init__.pyi": 13131938031654453415, - "venv/lib/python3.13/site-packages/pandas/tests/extension/base/dim2.py": 5767600151459095125, - "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate_kwarg.py": 10417724544218303733, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ma.py": 15912582628112164509, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/numerictypes.pyi": 15443101937711720707, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/linalg.pyi": 269481015135399748, - "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_setitem.py": 2059440410065814114, - "venv/lib/python3.13/site-packages/httpx/_transports/base.py": 6498990531443644896, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi": 17458894097215345719, - "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_hour.py": 13754646634123368797, - "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex_table.tpl": 8706980975714184465, - "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pyasn1/codec/native/__init__.py": 15728752901274520502, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_array.py": 16867692337986161626, - "venv/lib/python3.13/site-packages/sqlalchemy/orm/exc.py": 3242780937124999391, - "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_macos.py": 7028037591427052891, - "venv/lib/python3.13/site-packages/pip/_vendor/pygments/token.py": 6987328478153445584, - "venv/lib/python3.13/site-packages/passlib/handlers/digests.py": 18158237109145814857, - "venv/lib/python3.13/site-packages/pycparser/ply/ctokens.py": 1599952198962458730, - "venv/lib/python3.13/site-packages/pygments/styles/__init__.py": 18383248976818885498, - "venv/lib/python3.13/site-packages/pygments/lexers/lean.py": 14518351619544450286, - "venv/lib/python3.13/site-packages/pygments/lexers/soong.py": 10273453675034306814, - "venv/lib/python3.13/site-packages/pandas/tests/test_downstream.py": 5635510753354256507, - "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/AUTHORS": 10073225185964928425, - "venv/lib/python3.13/site-packages/numpy/_core/cversions.py": 9724467539503410469, - "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/WHEEL": 5838667082726674838, - "venv/lib/python3.13/site-packages/pandas/core/groupby/generic.py": 4857114071347950833, - "venv/lib/python3.13/site-packages/ecdsa/test_eddsa.py": 1785854649532849946, - "venv/lib/python3.13/site-packages/pygments/lexers/ml.py": 7510453371068494792, - "frontend/build/_app/immutable/nodes/3.C1LP-xCa.js": 9807460888503131276, - "venv/lib/python3.13/site-packages/pygments/lexers/gsql.py": 15294109558028161389, - "backend/src/api/routes/__tests__/test_git_status_route.py": 4501452711469218555, - "venv/lib/python3.13/site-packages/fastapi/middleware/cors.py": 7452860773712601508, - "venv/lib/python3.13/site-packages/numpy/core/_dtype_ctypes.pyi": 15130871412783076140, - "venv/lib/python3.13/site-packages/pygments/styles/murphy.py": 8177992406082781615, - "venv/lib/python3.13/site-packages/pygments/lexers/installers.py": 5083244110640899732, - "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE": 14230156892574098522, - "venv/lib/python3.13/site-packages/authlib/oidc/core/__init__.py": 16029653645350087968, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f77fixedform.f95": 10898637805043867370, - "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_copy.py": 3114918520437707410, - "backend/src/plugins/llm_analysis/plugin.py": 11133953577515642529, - "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/base.py": 13454394827268856575, - "venv/lib/python3.13/site-packages/rsa/transform.py": 12261738253972114335, - "venv/lib/python3.13/site-packages/pygments/lexers/parasail.py": 7758704230750989282, - "backend/tests/services/clean_release/test_publication_service.py": 12656754025482108211, - "backend/git_repos/remote/test-repo.git/objects/c2/491dfd8c841bacd5f491510f6334aa4a626f00": 6297303620364618482, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_array.f90": 9711940829820746513, - "frontend/src/routes/reports/llm/[taskId]/report_page.contract.test.js": 4485532466755188385, - "venv/lib/python3.13/site-packages/pygments/lexers/_qlik_builtins.py": 1728058904137960444, - "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/hstore.py": 9700253004947691961, - "venv/lib/python3.13/site-packages/pandas/core/reshape/encoding.py": 12702053687535473061, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_util.py": 16024147572807865219, - "venv/lib/python3.13/site-packages/rapidfuzz/__pyinstaller/test_rapidfuzz_packaging.py": 5189055608193366093, - "venv/lib/python3.13/site-packages/pandas/tests/frame/common.py": 7426635866622531875, - "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/token_validator.py": 13917237710752731397, - "venv/lib/python3.13/site-packages/pydantic_core/_pydantic_core.pyi": 16799580742094025110, + "venv/lib/python3.13/site-packages/cffi/pkgconfig.py": 16057517851163939571, + "frontend/src/components/git/CommitHistory.svelte": 6419514228971332714, + "frontend/src/routes/settings/+page.ts": 3719008513710037840, + "venv/lib/python3.13/site-packages/PIL/GimpGradientFile.py": 9777026720028891154, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____getSettings.html": 17142414359252665834, + "docs/api/html/group__test__update__git__config__raises__404__if__not__found.html": 17378932393540768304, + "docs/api/html/group__test__json__load__if__needed__none.html": 16725871875362821962, "backend/git_repos/remote/test-repo.git/refs/heads/dev": 8596267258668462395, - "backend/src/models/__tests__/test_clean_release.py": 9937664704633848570, - "venv/lib/python3.13/site-packages/starlette/endpoints.py": 3379755567024530053, - "venv/lib/python3.13/site-packages/pydantic_settings/py.typed": 15130871412783076140, - "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/METADATA": 6960169108624303030, - "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/collections.cpython-313-x86_64-linux-gnu.so": 6157288238855118017, - "venv/lib/python3.13/site-packages/pydantic/_internal/_config.py": 12760390602912369447, - "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api1.c": 8494977275215578998, - "venv/lib/python3.13/site-packages/h11/_util.py": 9362339074207904329, - "frontend/src/lib/components/reports/__tests__/reports_list.ux.test.js": 10301023261856534116, - "venv/lib/python3.13/site-packages/_pytest/_io/saferepr.py": 8025234471485188730, - "venv/lib/python3.13/site-packages/pygments/styles/fruity.py": 7925019839136894457, - "backend/src/core/superset_client/_datasets_preview_filters.py": 3588066821120121881, - "frontend/playwright-report/trace/defaultSettingsView.BDKsFU3c.css": 12935551588108679759, - "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/licenses/LICENSE": 17020744174398828059, - "backend/src/models/dataset_review.py": 18282368342351080120, - "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/version.py": 14723293207188512766, - "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_align.py": 10284128457194204574, - "venv/lib/python3.13/site-packages/numpy/core/einsumfunc.py": 3484247123731380377, - "backend/src/api/routes/assistant/_routes.py": 17155281273786858236, - "venv/lib/python3.13/site-packages/pygments/lexers/d.py": 18120801227801223376, - "venv/lib/python3.13/site-packages/numpy/ctypeslib/__init__.pyi": 13208953770241664384, - "venv/lib/python3.13/site-packages/numpy/tests/test_configtool.py": 8208415015478205502, - "backend/src/services/notifications/__init__.py": 16179868089470006686, - "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/__init__.py": 3577295959173028042, - "venv/lib/python3.13/site-packages/pandas/core/computation/scope.py": 16859504937881548797, - "venv/lib/python3.13/site-packages/jeepney/bus.py": 5163075760432139100, - "venv/lib/python3.13/site-packages/numpy/_typing/_char_codes.py": 14162745886150625150, - "venv/lib/python3.13/site-packages/jeepney/auth.py": 10565040329507087892, - "venv/lib/python3.13/site-packages/packaging/pylock.py": 15346942039643310253, - "backend/src/schemas/translate.py": 15896789917354585618, - "venv/lib/python3.13/site-packages/pip/_internal/cli/__init__.py": 11914508471759255927, - "venv/lib/python3.13/site-packages/pygments/lexers/rita.py": 8105458520706587972, - "venv/lib/python3.13/site-packages/pygments/lexers/unicon.py": 1155454077052833821, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/abc.py": 6227782083136374888, - "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_odswriter.py": 5134385709728943904, - "frontend/build/_app/immutable/nodes/10.CizHWbJb.js": 15960943239719776356, - "venv/lib/python3.13/site-packages/pandas/tests/strings/conftest.py": 12065119814157197510, - "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi": 16042272072158438261, - "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming.pyi": 4432290176776357346, - "venv/lib/python3.13/site-packages/pip/_vendor/rich/_stack.py": 5316826578695144945, - "venv/lib/python3.13/site-packages/pygments/styles/material.py": 14325514369696961874, - "frontend/build/_app/immutable/chunks/sEGDVeoa.js": 9540107777971680079, - "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_des.py": 7198931807116651263, - "venv/lib/python3.13/site-packages/pygments/lexers/int_fiction.py": 8806961041808606055, - "venv/lib/python3.13/site-packages/pandas/core/internals/construction.py": 893951849732478990, + "docs/api/html/group__frontend__src__lib__api__validation__js____createTask.html": 11277710494667674474, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_c_parser_only.py": 3038797485572319804, + "docs/api/html/group____ensure__git__server__configs__columns.html": 11324045515305585, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_pivot.py": 334735766122314163, + "venv/lib/python3.13/site-packages/pandas/core/construction.py": 10646956189518908985, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/__init__.py": 13331622784664204066, + "docs/api/html/group__test__end__all__returns__202.html": 2143037192454601486, + "docs/api/html/group__seed__superset__load__data.html": 314813090128633817, + "docs/api/html/group__ValidationFindingsPanel.html": 16524458792905973929, + "docs/api/html/search/pages_2.js": 10895953379429449652, + "docs/api/html/group__SupersetAuthCache__get.html": 5371825726490397800, + "docs/api/html/group__getSortStatusValue__Function.html": 16892527846024245299, + "docs/api/html/group__ClarificationAnswer.html": 11735527821059013045, + "docs/api/html/group__load__persisted__tasks.html": 897838907183043727, + "docs/api/html/tab_hd.png": 15081546309524496729, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/traceback.py": 2535227583726271746, + "venv/lib/python3.13/site-packages/numpy/version.py": 1497063540123613501, + "venv/lib/python3.13/site-packages/pandas/core/computation/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mariadbconnector.py": 14865906347579451546, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_pipe.py": 8255917221095334212, + "docs/api/html/group____cleanup__manager.html": 13234621596823816761, + "venv/lib/python3.13/site-packages/numpy/core/numeric.py": 17025007229779320230, + "venv/lib/python3.13/site-packages/anyio/streams/memory.py": 11762722143503428823, + "docs/api/html/group__ResolutionState.html": 10695599682099168307, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/file_proxy.py": 17695135735211897444, + "docs/api/html/group__start__session.html": 8274556149199075536, + "docs/api/html/group__test__belief__scope__success__coherence.html": 9904691934239125152, + "docs/api/html/group__DEFAULT__LLM__PROVIDER__BINDINGS.html": 1197817568915985055, + "docs/api/html/group__SupersetContextTemplatesMixin.html": 15324522568275459473, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/numpy/_typing/_nbit_base.py": 7446626038222262489, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/database.py": 7111764828004587758, + "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/meson.build": 17468163147765825687, + "venv/lib/python3.13/site-packages/pygments/lexers/ul4.py": 9580182474451220952, + "docs/api/html/group__Task.html": 4118191587870262013, + "venv/lib/python3.13/site-packages/pydantic/__init__.py": 11536052293866174672, + "venv/lib/python3.13/site-packages/pandas/_libs/pandas_parser.cpython-313-x86_64-linux-gnu.so": 18056339336364727359, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____pollStatus.html": 17320763933447233448, + "docs/api/html/group__encodeStoragePath__Function.html": 13436882047096086584, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/ddl.py": 5006132143435653867, + "venv/lib/python3.13/site-packages/pandas/core/indexes/datetimelike.py": 4356700619632833878, + "frontend/build/_app/immutable/nodes/9.DpzREatp.js": 279253596265401371, + "docs/api/html/group__test__get__dashboard__detail__env__not__found.html": 9982209556180665563, + "docs/api/html/group______Function.html": 11167138341912770463, + "venv/lib/python3.13/site-packages/pygments/lexers/verification.py": 16645885125604874183, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py": 1331438198531942242, + "docs/api/html/group__TaskDrawerTestModule.html": 15361427361837653112, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dot.py": 16876560325283070437, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/serializer.py": 8708767945343850816, + "docs/api/html/group__TranslationMetricsDashboard.html": 15575796997965788450, + "docs/api/html/group__TaskLogPanel.html": 14846603073845295002, + "docs/api/html/group__get__dialect__from__database.html": 988662418075902152, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_unique.py": 6234921572794573905, + "docs/api/html/group__DebounceModule.html": 8591276512225370990, + "docs/api/html/globals.html": 8891371690034474264, + "venv/lib/python3.13/site-packages/jeepney/fds.py": 16573439672758641560, + "docs/api/html/group__DictionaryCreate.html": 5296179021197586468, + "docs/api/html/group__PROMPT__BASE__TOKENS.html": 625575964554485020, + "docs/api/html/group__test__parse__dashboard__url__for__filters__native__key.html": 10269943654735165789, + "backend/tests/core/test_defensive_guards.py": 16395624498768711683, + "venv/lib/python3.13/site-packages/smmap/test/test_util.py": 5634593621291240094, + "docs/api/html/group__build__banner__text.html": 9722068729315930641, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_simd_module.py": 7122050193390298178, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_arrow_compat.py": 17818294260710640443, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__test__parse__datetime__integer.html": 1059776138445462771, + "venv/lib/python3.13/site-packages/pandas/tests/libs/test_lib.py": 6721066015604956469, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/test_na_scalar.py": 13950899907067372014, + "docs/api/html/group__CorrectionCell.html": 13749448967384828012, + "venv/lib/python3.13/site-packages/httpx/_exceptions.py": 18399489130669465891, + "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/extending_distributions.pyx": 15302775787158991386, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_both.f90": 13943066317159236257, + "docs/api/html/group__test__existing__test__would__fail.html": 6044563429962222801, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_julian_date.py": 850085757774959003, + "docs/api/html/group__lock__field__semantic.html": 2797198914997806470, + "venv/lib/python3.13/site-packages/pygments/lexers/graphics.py": 13783143864729682444, + "backend/src/core/utils/superset_context_extractor/_pii.py": 15135596230141304567, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_old_ma.py": 18116460138221458026, + "venv/lib/python3.13/site-packages/pygments/lexers/cddl.py": 1303059539145221713, + "docs/api/html/group__GitServiceStatusMixin.html": 4523615132638465854, + "venv/lib/python3.13/site-packages/gitdb/db/pack.py": 13460574575424209609, + "docs/api/html/group__TaskLogViewer.html": 7478297409067123926, + "venv/lib/python3.13/site-packages/PIL/_webp.pyi": 18222325750818585549, + "docs/api/html/group__GitUtils.html": 17815241981515134154, + "venv/lib/python3.13/site-packages/pycparser/plyparser.py": 5251740466238035035, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_datetime64.py": 16272266806084058743, + "venv/lib/python3.13/site-packages/pygments/lexers/console.py": 18266795648198475028, + "frontend/src/lib/api/__tests__/reports_api.test.js": 4759560641984508050, + "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/__init__.py": 8705044848308260480, + "venv/lib/python3.13/site-packages/dotenv/variables.py": 5438726379749803751, + "frontend/src/lib/components/reports/reportTypeProfiles.js": 10752964062056890725, + "docs/api/html/group__SupersetContextTemplatesMixin__discover__template__variables.html": 1854980804207129510, + "venv/lib/python3.13/site-packages/_pytest/python.py": 1829073958095716309, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/licenses/AUTHORS": 3558407083075395848, + "venv/lib/python3.13/site-packages/numpy/polynomial/_polytypes.pyi": 7528777458251688517, + "docs/api/html/group__ClarificationSessionSummaryResponse.html": 6287729552566678011, + "docs/api/html/search/all_16.js": 6930966498952410677, + "backend/src/plugins/translate/orchestrator_run_completion.py": 1246106720048798445, + "docs/api/html/files_dup.js": 6566197532364479572, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_editable.py": 14352954849821931255, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_set_index.py": 10971093361190283675, + "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/WHEEL": 18203500019759199992, + "docs/api/html/group__datasetReviewSession__Store.html": 2454065544502690848, + "backend/src/services/__tests__/test_encryption_manager.py": 11651916791559202800, + "venv/lib/python3.13/site-packages/numpy/core/multiarray.py": 18368443598659711836, + "docs/api/html/group__ADGroupMappingSchema.html": 11869729536945519142, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo_free.f90": 8821492401453445757, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/pickleable.py": 7712040860601343075, + "frontend/src/lib/components/layout/__tests__/test_taskDrawer.svelte.js": 7736587487210851851, + "docs/api/html/group__formatSize__Function.html": 8913344485781991642, + "docs/api/html/group__ValidationRoutes.html": 9947226758890063064, + "docs/api/html/group__AuditService.html": 14546698565795749486, + "venv/lib/python3.13/site-packages/numpy/lib/_format_impl.pyi": 15745512451486888537, + "backend/src/plugins/translate/__tests__/test_dictionary.py": 4341966549214032934, + "backend/src/core/superset_client/_datasets.py": 10922216252382553392, + "backend/src/core/superset_client/_dashboards_crud.py": 8682388093872211883, + "frontend/build/_app/immutable/chunks/0Mp-5rTH.js": 10539257590394310220, + "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libcom_err-2abe824b.so.2.1": 12870528025628871295, + "docs/api/html/group__LoggingConfig.html": 5718768754954658081, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/coercions.py": 5112358449376598662, + "docs/api/html/group__DashboardChartItem.html": 6833781467610303476, + "docs/api/html/group__APIClient__authenticate.html": 3524465342974233149, + "docs/api/html/group__get__sources.html": 16601137258119600037, + "docs/api/html/group__test__get__dashboards__with__search.html": 9037019464046043095, + "docs/api/html/group__test__override__root__path.html": 18363961162670447666, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_concat.py": 1351478313334379336, + "venv/lib/python3.13/site-packages/pygments/lexers/archetype.py": 8995143180482517233, + "docs/api/html/group__TranslationStageRunner.html": 5118717378303155773, + "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/licenses/COPYING": 14459782230785388765, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_asfreq.py": 2701081989348180239, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/RECORD": 16558021503346615951, + "venv/lib/python3.13/site-packages/pycparser/ply/lex.py": 3393278208465358140, + "venv/bin/jsonschema": 16516374846693491442, + "docs/api/html/group__test__key__without__end__time.html": 1016524169546718308, + "dist/docker/backend.0.1.2.tar.xz": 16563303263172488254, + "backend/src/core/task_manager/__tests__/test_task_logger.py": 2358230637213309608, + "venv/bin/pip3": 13861749540792881808, + "docs/api/html/group__test__dashboard__health__item__status__accepts__only__whitelisted__values.html": 136153182983638913, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_constructors.py": 12628643543371952431, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_iteration.py": 15247340610412364508, + "docs/api/html/group__start__scheduler.html": 5136832911990580041, + "frontend/build/_app/immutable/nodes/28.BuG2LCbC.js": 13515061122874684102, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_query_eval.py": 17613800806748649144, + "docs/api/html/group__test__manifest__build__contract.html": 6734412557509934205, + "docs/api/html/group__test__belief__scope__reason__not__visible__at__info.html": 4840136292915497368, + "venv/lib/python3.13/site-packages/numpy/_core/_asarray.pyi": 3940937389249665490, + "docs/api/html/group__TestMappingService.html": 11609065687830081419, + "docs/api/html/group__test__create__job__missing__translation__column.html": 9558284213073049757, + "docs/api/html/group__test__tui__clear__history__f7.html": 2956037542999638884, + "docs/api/html/group__reject__candidate.html": 4888870338363798729, + "docs/api/html/group__SupersetAPIError.html": 5887592897373484111, + "frontend/src/lib/components/layout/Sidebar.svelte": 18409661059413656763, + "venv/lib/python3.13/site-packages/numpy/polynomial/hermite.py": 6617116180936986481, + "venv/lib/python3.13/site-packages/pycparser/ply/cpp.py": 1665654017894222868, + "venv/lib/python3.13/site-packages/passlib/utils/binary.py": 13123975436674239306, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata.py": 2021612995853910808, + "backend/src/plugins/translate/events.py": 16974204038587054475, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_tz_localize.py": 18409231586451494605, + "docs/api/html/group__DatabaseMappingsResponse.html": 13473207819975423910, + "venv/lib/python3.13/site-packages/ecdsa/test_eddsa.py": 1785854649532849946, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_character.py": 17168707712220699738, + "docs/api/html/group__SessionEventLogger.html": 3346105078868199944, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ed448.py": 12264234876933578367, + "docs/api/html/group__stop.html": 16956058968433395845, + "docs/api/html/group__test__load__config__syncs__environment__records__from__existing__db__payload.html": 5104582144704294884, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____stopTranslationRun.html": 2429083995964044538, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/RECORD": 2688648742701423549, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_reindex.py": 15794750188594767026, + "docs/api/html/group__FuzzyMatching.html": 7818943824809763950, + "frontend/src/routes/translate/history/+page.svelte": 9504117584329454876, + "docs/api/html/group__HealthCenterPage.html": 18169365959978788379, + "frontend/vitest.config.js": 4756170101280085905, + "venv/lib/python3.13/site-packages/pandas/core/reshape/concat.py": 2218848863149192467, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix.pyi": 2700568594438441246, + "docs/api/html/group__activity__Store.html": 10103402141887655434, + "backend/src/api/routes/migration.py": 16089356899043357784, + "docs/api/html/group__CompiledPreviewDto.html": 13008981899007160436, + "docs/api/html/group__DashboardHub__loadDashboards__Function.html": 3241502516261310568, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/__init__.py": 2791238481813240414, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/claims.py": 14794441479740527265, + "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/jws_eddsa.py": 833927568269372333, "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libgssapi_krb5-497db0c6.so.2.2": 6199424505696679197, - "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/INSTALLER": 17282701611721059870, - "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/boxplot.py": 7090586111222952862, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_formats.py": 12299393760307251036, - "venv/lib/python3.13/site-packages/pandas/core/__init__.py": 15130871412783076140, - "venv/lib/python3.13/site-packages/rsa/key.py": 4783269051050521475, - "backend/src/api/routes/__tests__/test_datasets.py": 5175841745704208723, - "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_function_base.pyi": 10972502518588022706, - "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_construction.py": 6564829381134214401, - "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/argon2.py": 15389474901714096890, - "venv/lib/python3.13/site-packages/sqlalchemy/sql/crud.py": 805684028038896506, - "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_integrity.py": 12010564145080323987, - "venv/lib/python3.13/site-packages/pygments/lexers/go.py": 11118104397271513417, - "venv/lib/python3.13/site-packages/pandas/tests/base/test_transpose.py": 1686867045869336370, - "venv/lib/python3.13/site-packages/numpy/_typing/_nbit_base.pyi": 6546751036506752550, - "backend/src/scripts/init_auth_db.py": 8910351541713877041, - "backend/src/models/mapping.py": 17370626239851802183, - "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_real/foo77.f": 16156304612888138777, - "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/RECORD": 11604408378998955169, + "venv/lib/python3.13/site-packages/pip/_internal/utils/retry.py": 15244280495983216204, + "docs/api/html/group__ClarificationSession.html": 5830007380019646698, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/color.py": 15062855556511243610, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py": 7624316342162916928, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____listEvents.html": 2536379713149954797, + "docs/api/html/group__JobLifecycleModule.html": 9294657013529103257, + "docs/api/html/group__test__toggleSidebar__Function.html": 11685985194827077966, + "docs/api/html/group__CleanReleaseV2Api.html": 4541756624375891819, + "venv/lib/python3.13/site-packages/cffi/setuptools_ext.py": 30796527302561458, + "docs/api/html/group__SidebarIntegrationTest__Module.html": 17744089971418699905, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_abc.py": 10164280045317807365, + "docs/api/html/group__end__maintenance.html": 13575739036759149752, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_join.py": 1697622393195784944, + "docs/api/html/group__test__json__load__if__needed__plain__string.html": 16000096952478615435, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/core.py": 14576109242055156193, + "venv/lib/python3.13/site-packages/pip/_internal/configuration.py": 2563100675379605810, + "docs/api/html/group__test__execution__snapshot__preserves__mapped__template__variables__and__filter__context.html": 9629082711066592094, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arraypad.py": 4907193085512342162, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_replace.py": 8165088653532047247, + "docs/api/html/splitbard.png": 7867562212225872131, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq.pyi": 16372699564794732463, + "docs/api/html/group__RepoStatusBatchRequest.html": 4909634255465475833, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/common.py": 9354442374897565498, + "venv/lib/python3.13/site-packages/rapidfuzz/utils.py": 5682627611354455144, + "docs/api/html/group__test__get__logs__with__filters.html": 8248101620464596303, + "venv/lib/python3.13/site-packages/greenlet/PyGreenletUnswitchable.cpp": 3160733517193315684, + "docs/api/html/group__test__sync__environment__upserts__correctly.html": 13332214453849370730, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/exceptions.py": 14982764273485726199, + "venv/lib/python3.13/site-packages/starlette/convertors.py": 17839747154274354605, + "docs/api/html/group__SchemasPackage.html": 18430871611068960110, + "venv/lib/python3.13/site-packages/numpy/random/_common.cpython-313-x86_64-linux-gnu.so": 12834724130890991478, + "docs/api/html/group__TestRegressionGuard.html": 15882303187698666439, + "docs/api/html/group__MaintenanceRouter.html": 16070342961663373297, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_deprecations.py": 16367195310156359251, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_size.py": 12449835577388069407, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_scalar.py": 2434773821902319678, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_string.py": 9224234539232195189, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/pyproject.py": 12684373765476932108, + "venv/lib/python3.13/site-packages/PIL/CurImagePlugin.py": 17697303205012181529, + "venv/lib/python3.13/site-packages/git/__init__.py": 15867730798565725003, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py3-objarr.npz": 12369168483236619421, + "venv/lib/python3.13/site-packages/pygments/styles/colorful.py": 15708848112363953394, + "venv/lib/python3.13/site-packages/pandas/_libs/window/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/vyper.py": 6477559246065994199, + "frontend/build/_app/immutable/nodes/8.qFUsBXPN.js": 1171125291889808439, + "frontend/build/_app/immutable/chunks/DNOraAy0.js": 868732761380476466, + "backend/src/plugins/translate/orchestrator_validation.py": 17464651621865127561, + "docs/api/html/group__DashboardScope.html": 315673707971698397, + "docs/api/html/group__persist__task.html": 17252468204924884629, + "docs/api/html/group__SupersetCompilationAdapter____normalize__preview__response.html": 18275343522306944195, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rename.py": 4890779493250245903, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_with_comments.f": 3980077223827767077, + "backend/src/core/superset_client/_user_projection.py": 15240732089847883635, + "docs/api/html/group__preview__prompt__helpers.html": 17763275894621267369, + "docs/api/html/group__StorageSettings.html": 7194021643193109279, + "venv/lib/python3.13/site-packages/numpy/core/_dtype_ctypes.pyi": 15130871412783076140, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/__init__.py": 11709551233929312136, + "venv/lib/python3.13/site-packages/pygments/lexers/tls.py": 3552078393009383412, + "docs/api/html/group____make__manager.html": 16413916660006283470, + "frontend/src/components/llm/ProviderConfig.svelte": 18108375341352259203, + "docs/api/html/group__resetDataTimeout__Function.html": 1556809234079451125, + "docs/api/html/group__DatasetReviewWorkspaceEntry.html": 10861049542091300011, + "frontend/src/lib/components/translate/TermCorrectionPopup.svelte": 2290415616531498089, + "docs/api/html/group__triggerRun__Function.html": 981175398640370870, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_complex.py": 4290059580478881700, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_limited_api.py": 15788485008764560845, + "venv/lib/python3.13/site-packages/fastapi/security/utils.py": 2616633862993539558, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py": 15644105878811738516, + "docker/nginx.conf": 14595959129793115016, + "docs/api/html/group__SupersetClientDeleteDashboard.html": 11929736219574951751, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/nattype.cpython-313-x86_64-linux-gnu.so": 2311012065007769341, + "venv/lib/python3.13/site-packages/git/objects/blob.py": 8972374723153211283, + "docs/api/html/group__RunHistoryFilter.html": 14147174199498703539, + "venv/lib/python3.13/site-packages/pydantic_settings/main.py": 17272314000918984790, + "docs/api/html/group__MigrationMappingsPage.html": 17363977661933102131, + "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/RECORD": 9502524172853437600, + "venv/lib/python3.13/site-packages/dotenv/ipython.py": 15904966766060247908, + "venv/lib/python3.13/site-packages/PIL/ImtImagePlugin.py": 17599267755504817169, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7521/__init__.py": 635200170992032966, + "docs/api/html/group__test__parse__dashboard__url__for__filters__no__filters.html": 2766201645946091724, + "docs/api/html/group__CleanReleaseConfig.html": 5411302572007077971, + "docs/api/html/group__test__sql__table__extractor.html": 10962497480453520163, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py": 6109201994963211857, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_crosstab.py": 6631711416347033281, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_pbkdf2.py": 4977067068389993374, + "venv/lib/python3.13/site-packages/dateutil/tzwin.py": 5149446703746204349, + "docs/api/html/group__test__sync__network__404__mapping__keeps__non__dashboard__endpoints__generic.html": 12571154995084509267, + "docs/api/html/search/groups_c.js": 3976149661731985741, + "docs/api/html/group__test__start__returns__202.html": 4326452274740298704, + "frontend/src/pages/Settings.svelte": 14062925006358678049, + "docs/api/html/group__HealthPageIntegrationTest__Module.html": 8263116403958014254, + "docs/api/html/group__test__create__api__key.html": 9726291706125777558, + "docs/api/html/group____init__session.html": 12506025499557216543, + "venv/lib/python3.13/site-packages/pip/_vendor/certifi/core.py": 2300277198409164253, + "docs/api/html/group__test__checking__state.html": 1723457618410256625, + "docs/api/html/group__TriggerRunResponse.html": 2460487645521789314, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/authorization_server.py": 17967809814827547139, + "venv/lib/python3.13/site-packages/pydantic/functional_validators.py": 5835339743072048940, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarmath.py": 9762951701352556447, + "venv/lib/python3.13/site-packages/pandas/io/orc.py": 12754290195886557668, + "docs/api/html/group__MAX__OUTPUT__HEADROOM.html": 8679042542420488178, + "venv/lib/python3.13/site-packages/pandas/io/parsers/base_parser.py": 15148258424429418380, + "docs/api/html/group__OUTPUT__PER__ROW__PER__LANG.html": 8649435613507294987, + "venv/lib/python3.13/site-packages/attrs/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/comparisons.pyi": 9338084426044982038, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_year.py": 17441853503700184299, + "venv/lib/python3.13/site-packages/PIL/_version.py": 3025206805667405876, + "docs/api/html/group__StateMock.html": 14819043532305148003, + "docs/api/html/group__test__preview__prefers__supported__client__method__before__network__fallback.html": 4750969353248108687, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_setops.py": 8622608042929141013, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_cat.py": 15988884721768567895, + "venv/lib/python3.13/site-packages/pyasn1/type/tagmap.py": 14075859042659927673, + "docs/api/html/group__test__delete__task__not__found.html": 11432183556776181332, + "venv/lib/python3.13/site-packages/jose/backends/rsa_backend.py": 13507186353881931758, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/__init__.py": 13749066369790839334, + "venv/lib/python3.13/site-packages/numpy/typing/__init__.py": 3608665862759745048, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_copy.py": 3114918520437707410, + "docs/api/html/group__get__repository__diff.html": 13880615963280114333, + "docs/api/html/group____sync__environment__records.html": 7144329195517588362, + "venv/lib/python3.13/site-packages/numpy/polynomial/laguerre.pyi": 11310761736182213265, + "docs/api/html/group____get__dictionary__entry__counts.html": 15029433129373486518, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.cpython-313-x86_64-linux-gnu.so": 12776951671822017500, + "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/METADATA": 7727489762869155085, + "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/libs/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libldap-2974a1ba.so.2.0.200": 13590569080612602445, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23598Warn.f90": 7589258200398878529, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_groupby.py": 15721254196883995634, + "venv/lib/python3.13/site-packages/pyasn1/codec/der/encoder.py": 4790267438222037867, + "backend/src/core/task_manager/__init__.py": 15991802770215124472, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_map.py": 6556132946198785761, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_constructors.py": 16197656939536784142, + "docs/api/html/group____matches__dashboard__actor__aliases.html": 12171503296402923897, + "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/WHEEL": 2357997949040430835, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_comparison.py": 5348781442514871089, + "venv/lib/python3.13/site-packages/httpcore/_trace.py": 9576253018891841832, + "backend/tests/services/clean_release/test_demo_mode_isolation.py": 15017454272480710246, + "docs/api/html/group__estimate__token__budget.html": 8041209033225986920, + "docs/api/html/group__get__repository__status__batch.html": 5326587489507383540, + "venv/lib/python3.13/site-packages/passlib/handlers/digests.py": 18158237109145814857, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/WHEEL": 1598805043198466373, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_value_counts.py": 9352540710376306520, + "venv/lib/python3.13/site-packages/charset_normalizer/cli/__init__.py": 9702005609966176016, + "venv/lib/python3.13/site-packages/pygments/lexers/yara.py": 17510792615476493957, + "backend/src/api/routes/git/_repo_operations_routes.py": 11164792016063890809, + "backend/git_repos/remote/test-repo.git/objects/6f/85e20ce3ef98cf07a2f102498b71b9462552c5": 3012017807908986452, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/request.py": 10492090878715126550, + "venv/lib/python3.13/site-packages/_pytest/mark/structures.py": 12237146603608917650, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein_py.py": 1933257612725836484, + "venv/lib/python3.13/site-packages/pandas/tests/window/conftest.py": 10673264126684571493, + "docs/api/html/group__frontend__src__services__git__utils__js____extractHttpHost.html": 17505817962163768324, "venv/lib/python3.13/site-packages/dotenv/__init__.py": 15464030923609356017, + "venv/lib/python3.13/site-packages/numpy/_typing/_array_like.py": 2161873439361281488, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/util.py": 6088868370298560146, + "venv/lib/python3.13/site-packages/pygments/styles/inkpot.py": 10516710471319090846, + "docs/api/html/group__ScheduleConfig.html": 11162916934238527143, + "backend/src/core/utils/superset_context_extractor/__init__.py": 16372223806424875537, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarprint.py": 9482100952562512933, + "frontend/src/lib/components/translate/TranslationMetricsDashboard.svelte": 8577281635452165836, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh22648.pyf": 15094859289098837494, + "frontend/build/_app/immutable/chunks/B0K5kI6n.js": 6208436857520817685, + "venv/lib/python3.13/site-packages/uvicorn/supervisors/basereload.py": 14479857245734482609, + "venv/lib/python3.13/site-packages/keyring/backends/kwallet.py": 3071915635647280308, + "docs/api/html/group__TaskLogViewerTest__Module.html": 3664733466330383169, + "venv/lib/python3.13/site-packages/anyio/to_process.py": 16627578499791368365, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____normalizeLlmSettings.html": 11184309114880759934, + "venv/bin/Activate.ps1": 1196103427939049710, + "frontend/build/_app/immutable/nodes/25.CEgu5Uwc.js": 2456525993732594619, + "docs/api/html/group____trigger__backup.html": 17397691449018850685, + "docs/api/html/group__test__key__hash__unique.html": 5562302720760720176, + "docs/api/html/group__test__get__dashboard__tasks__history__filters__success.html": 6489322718230741980, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/color_triplet.py": 17264298271771184, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/mt19937-testset-2.csv": 14641856424618845798, + "docs/api/html/group____fetch__batch__records.html": 733170840838093592, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/response.py": 353446217435156470, + "venv/lib/python3.13/site-packages/pygments/lexers/theorem.py": 15666523910367201285, + "venv/lib/python3.13/site-packages/passlib/pwd.py": 14727089240749133060, + "docs/api/html/search/groups_9.js": 11508513771310591301, + "frontend/tests/maintenance-store.test.ts": 7211673236234440419, + "backend/git_repos/remote/test-repo.git/hooks/update.sample": 8204581436750313444, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/astype.py": 9925183787411796679, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____loadSettings.html": 10425411179983087921, + "docs/api/html/search/mag.svg": 12711116757118699539, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/models.py": 11521700876708601977, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/dictionary.py": 9599439750713575741, + "docs/api/html/group____serialize__preview.html": 9415726163648130901, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE": 4274653168153720331, + "docs/api/html/group__rebuild__banner.html": 11712513970127576620, + "venv/lib/python3.13/site-packages/PIL/_avif.cpython-313-x86_64-linux-gnu.so": 5243449968857258659, + "venv/lib/python3.13/site-packages/numpy/polynomial/hermite_e.pyi": 13068936038543812082, + "docs/api/html/group__frontend__src__lib__api__validation__js____deleteRun.html": 1830404720177429055, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____buildWorkspaceLaunchBlockers.html": 15003605714654482517, + "backend/tests/test_translate_executor_filter.py": 11717560360659156703, + "docs/api/html/group__ActivityStore.html": 16046706190501806767, + "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/WHEEL": 5076688779572520166, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel_legacy.py": 12735901522735836481, + "docs/api/html/group__GitServiceRemoteMixin.html": 16511670561438840755, + "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/__init__.py": 12911374670789466961, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ufuncobject.h": 5112456258078662871, + "docs/api/html/group__test__missing__task__id.html": 366377427514445618, + "backend/_convert_defs.py": 208535643309836247, + "docs/api/html/group__fetch__source__rows.html": 5710393657520357008, + "docs/api/html/search/groups_6.js": 13269109705568320590, + "backend/src/api/routes/admin.py": 14496518311272057274, + "docs/api/html/group__TranslationSchedule.html": 9479348771909724895, + "docs/api/html/group__test__baseline__expired__full__mode.html": 2044862420922151303, + "venv/lib/python3.13/site-packages/fastapi/exception_handlers.py": 9907950997607808699, + "docs/api/html/group__TestClickHouseInsertSqlGeneration.html": 10830522054938082095, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/min_max_.py": 13457611930368041821, + "frontend/build/_app/immutable/nodes/37.CSQu-kNz.js": 5339990103822194529, + "docs/api/html/group__test__manifest__service__rejects__missing__candidate.html": 17562104709800078179, + "docs/api/html/group__list__conversations.html": 9235216586392560543, + "venv/lib/python3.13/site-packages/cffi/verifier.py": 8473599757770867754, + "docs/api/html/group__ToastsModule.html": 15194540860991792583, + "docs/api/html/group__DashboardHub__handleTemporaryShowAll__Function.html": 4145528349117048216, + "docs/api/html/group__DataPurityStage.html": 13800816093664302434, + "docs/api/html/group__normalize__whitespace.html": 7327563330573824911, + "docs/api/html/group__GitManager.html": 13687479863451466340, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/adapters.py": 2224938661429637508, + "docs/api/html/group____task__matches__dashboard.html": 12761291922272569962, + "frontend/src/lib/ui/Select.svelte": 1377129595022044035, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/api.py": 12339139862411341381, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/diagnose.py": 17275977405061138181, + "backend/src/core/middleware/__init__.py": 13917394130915533209, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/random.py": 12722750410117529986, + "docs/api/html/group__ReleaseCandidateStatus.html": 5853358063003918750, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_scrypt.py": 8106466515670064013, + "venv/lib/python3.13/site-packages/websockets/legacy/http.py": 16266924390281399720, + "docs/api/html/group__OrchestratorCommands.html": 4670264817515095687, + "venv/lib/python3.13/site-packages/jaraco/context/__init__.py": 10975097417056278427, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_tz_localize.py": 13699016868476153393, + "venv/lib/python3.13/site-packages/pygments/styles/autumn.py": 8750937312198920971, + "docs/api/html/group__test__audit__hooks__emit__append__only__event__stream.html": 17318960105938087804, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_normalize.py": 7378656958631172603, + "frontend/src/lib/components/translate/CorrectionCell.svelte": 17398304999652244378, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_frame_equal.py": 12459816298158655274, + "venv/lib/python3.13/site-packages/pygments/lexers/pointless.py": 17552020039609007881, + "backend/tests/test_auth.py": 18059959539697963472, + "venv/lib/python3.13/site-packages/apscheduler/triggers/combining.py": 1264860868414723829, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_iceberg.py": 1726421917529457420, + "docs/api/html/group__test__list__with__keys.html": 10936269121502713168, + "docs/api/html/group____parse__args.html": 15401654965875624913, + "venv/lib/python3.13/site-packages/pip/_internal/utils/compat.py": 1841193561752758336, + "venv/lib/python3.13/site-packages/pandas/io/json/_json.py": 1393095374713367445, + "venv/lib/python3.13/site-packages/httpcore/_async/connection_pool.py": 932468678264370661, + "docs/api/html/group__middleware__package.html": 12440510290894977924, + "docs/api/html/group____PluginLoaderStub.html": 11751810125582050067, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_odf.py": 15484940480924122966, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_io.py": 4199750143323741326, + "docs/api/html/group__DashboardValidationPlugin.html": 4604274485935435783, + "docs/api/html/group__TargetSchemaApiTest.html": 17699774859084481912, + "venv/lib/python3.13/site-packages/fastapi/openapi/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/base.py": 13269563625127294513, + "docs/api/html/globals_func_u.html": 9477828494895601314, + "venv/lib/python3.13/site-packages/pytest_asyncio/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/ma/mrecords.pyi": 8945514863366384484, + "docs/api/html/group__SeedPermissionsScript.html": 3283052414462232547, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_replace.py": 18039668944453454689, + "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/WHEEL": 8600534672961461758, + "venv/lib/python3.13/site-packages/pydantic_settings/exceptions.py": 18300876747412267999, + "venv/lib/python3.13/site-packages/pydantic/v1/schema.py": 10008526732895436361, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_overlaps.py": 8287716909793575347, + "backend/src/scripts/init_auth_db.py": 8910351541713877041, + "docs/api/html/group__test__submit__correction__conflict__detected.html": 13261203944442671395, + "venv/lib/python3.13/site-packages/yaml/cyaml.py": 9157893742065554693, + "docs/api/html/group__FieldSemanticUpdateRequest.html": 7457072171844274462, + "venv/lib/python3.13/site-packages/rapidfuzz/fuzz.pyi": 7410507092040239447, + "backend/src/api/routes/tasks.py": 13688847871690186483, + "docs/api/html/group__test__mixed__jinja__and__sql.html": 6942646961625701929, + "venv/lib/python3.13/site-packages/_pytest/_code/source.py": 9488112979192923739, + "docs/api/html/group__SettingsRouter.html": 16627647098664476974, + "docs/api/html/group__test__recent__pending__run__not__stale.html": 3405692392212130999, + "venv/lib/python3.13/site-packages/pandas/tests/apply/__init__.py": 15130871412783076140, + "docs/api/html/group__filterDashboardsWithRepositories__Function.html": 3751486221728345447, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/test_indexing.py": 13703573544185051910, + "docs/api/html/group__ValidationTaskCreate.html": 6710870961962534726, + "docs/api/html/group__CONVERSATIONS.html": 17013475999409508111, + "docs/api/html/group__test__api__list__jobs.html": 9050185050148987988, + "venv/lib/python3.13/site-packages/pandas/core/indexes/period.py": 1181348384346239378, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_tools.py": 13994164937603424236, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_indexing.py": 14717641281147152159, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_types.py": 4083297168618981717, + "venv/lib/python3.13/site-packages/charset_normalizer/md.py": 2029760700380476138, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/wait.py": 6196757964348666082, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_to_timestamp.py": 17572983799929378095, + "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/auto.py": 12818217385551437286, + "backend/conftest.py": 16521922883434363388, + "docs/api/html/group__loadData__Function.html": 8139473336432513519, + "frontend/src/routes/datasets/[id]/+page.svelte": 7539252327680602221, + "venv/lib/python3.13/site-packages/numpy/f2py/capi_maps.py": 2490579175967301457, + "docs/api/html/group__ProfileService.html": 6914047737105070955, + "venv/lib/python3.13/site-packages/greenlet/greenlet_compiler_compat.hpp": 465436185632243991, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_hashtable.py": 2620207240930665390, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sort_values.py": 12064896795288302730, + "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/websockets_sansio_impl.py": 17221368219485351394, + "docs/api/html/group__DashboardHub__getSortValue__Function.html": 10869826115392569762, + "venv/lib/python3.13/site-packages/gitdb/__init__.py": 15381521749253695923, + "docs/api/html/group____make__add__log__callback.html": 1369040010068771538, + "venv/lib/python3.13/site-packages/pip/_internal/models/search_scope.py": 9282393652860589543, + "docs/api/html/group__list__sessions.html": 4853566056432919079, + "venv/lib/python3.13/site-packages/packaging/_parser.py": 13394093358675095309, + "venv/lib/python3.13/site-packages/requests/__init__.py": 2604491098990438229, + "docs/api/html/group__get__mapping__service.html": 10008745365667639243, + "docs/api/html/group__TargetSchemaValidation.html": 4385079790289560163, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_meson.pyi": 2101854548535776875, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_sorted.py": 1899608688401238388, + "docs/api/html/group__set__trace__id.html": 10194237527174132581, + "docs/api/html/group__TranslationRunLanguageStatsResponse.html": 13012330439222660734, + "venv/lib/python3.13/site-packages/certifi/py.typed": 15130871412783076140, + "docs/api/html/group__remove__tasks.html": 11302233214919049269, + "backend/src/core/async_superset_client.py": 339440171038902146, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_read_errors.py": 4559483361564472117, + "docs/api/html/group__EnvironmentMock.html": 17907946510124954226, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_formats.py": 13500155167624433622, + "docs/api/html/group__test__revoke__valid.html": 15486457788430868004, + "docs/api/html/group__get__task__logs.html": 5609188290893457831, + "venv/lib/python3.13/site-packages/authlib/integrations/django_client/apps.py": 14151733532064278336, + "venv/lib/python3.13/site-packages/uvicorn/py.typed": 15240312484046875203, + "docs/api/html/closed.png": 16898092673784447083, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_mrecords.py": 15952147778503828707, + "backend/src/services/mapping_service.py": 14740129302452546978, + "backend/tests/test_task_persistence.py": 13658802670129434578, + "docs/api/html/group__test__generate__docs__env__not__found.html": 10999514980476456328, + "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/METADATA": 13428590545328703138, + "venv/lib/python3.13/site-packages/pydantic/deprecated/class_validators.py": 2200511838255373813, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_is_monotonic.py": 12899848089975919515, + "docs/api/html/group__sendAssistantMessage__Function.html": 2736224334042274893, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/__init__.py": 16146480198665866916, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_backend.pyi": 13083543811193933305, + "docs/api/html/group__test__composite__keys.html": 3672461709156266376, + "venv/lib/python3.13/site-packages/git/config.py": 1724894144987553201, + "docs/api/html/group__test__api__error.html": 8524046232458013902, + "venv/lib/python3.13/site-packages/httpx/_transports/wsgi.py": 11981127094916412794, + "docs/api/html/group__test__configure__logger__post__conditions.html": 10707062206466040317, + "venv/lib/python3.13/site-packages/numpy/polynomial/polynomial.pyi": 9935587108964614958, + "venv/lib/python3.13/site-packages/pygments/lexers/smithy.py": 10789533877863290582, + "docs/api/html/group__selectTask__Function.html": 13172211009893761565, + "venv/lib/python3.13/site-packages/websockets/legacy/framing.py": 12759022769700230409, + "docs/api/html/group__BackupTypes.html": 10757767469167289047, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/utils.py": 9959199071030996679, + "venv/lib/python3.13/site-packages/cryptography/hazmat/_oid.py": 755042927629281577, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/gcp.py": 12328409672947966867, + "venv/lib/python3.13/site-packages/idna/package_data.py": 6583909243002417298, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f77fixedform.f95": 10898637805043867370, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_constructors.py": 7466113171256856591, + "backend/tests/test_security_orthogonal.py": 17356198010201191448, + "venv/lib/python3.13/site-packages/pygments/styles/default.py": 13992125975366109635, + "docs/api/html/group__frontend__src__services__storageService__js____uploadFile.html": 16382303397706812434, + "frontend/src/components/storage/FileUpload.svelte": 14890211974307083938, + "docs/api/html/group__update__my__preference.html": 13895164481872930227, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/type_check.pyi": 9177256991985898824, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_quoted_character.py": 2316632434571797367, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_implementation.py": 12245524932757110911, + "docs/api/html/group__test__except__pass__replaced__with__log.html": 2189835448945118208, + "venv/lib/python3.13/site-packages/_pytest/_io/wcwidth.py": 13515196388826152383, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_function.py": 7048185308307653546, + "frontend/src/lib/stores/health.js": 3621667160018048028, + "backend/src/services/clean_release/repositories/candidate_repository.py": 1901083195512401226, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/checks.pyx": 13187505236986855177, + "venv/lib/python3.13/site-packages/passlib/tests/utils.py": 15403198680231294263, + "backend/src/api/routes/git/__init__.py": 12363460647192569481, + "docs/api/html/group__test__backup__category__unchanged.html": 13517270357463076954, + "docs/api/html/search/functions_2.js": 2385164718268290961, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_read_fwf.py": 13684564756628524738, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/dml.py": 6519732236745017861, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_interpolate.py": 7354685880215444946, + "venv/lib/python3.13/site-packages/fastapi/_compat/may_v1.py": 9880083742927480960, + "docs/api/html/group__AppConfigRecord.html": 6504206258479760211, + "docs/api/html/group__test__blocked__run__finalization__blocks__report__builder.html": 10456245679320672835, + "docs/api/html/group__SidebarStore.html": 9185421740800209773, + "venv/lib/python3.13/site-packages/_pytest/pastebin.py": 13946273207624603063, + "docs/api/html/group__FilterState.html": 14518206927080029563, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/METADATA": 3448868793744358515, + "venv/lib/python3.13/site-packages/packaging/utils.py": 3469957615920103670, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_struct_accessor.py": 6567451952835390075, + "backend/src/services/maintenance/_orchestrators.py": 995360865260101856, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_parse_dates.py": 7597935994945336408, + "venv/lib/python3.13/site-packages/pydantic_core/core_schema.py": 8106298745123589494, + "docs/api/html/group__test__list__runs__filter__job__id.html": 7845039968622069882, + "venv/lib/python3.13/site-packages/PIL/TarIO.py": 13651401276968618561, + "venv/lib/python3.13/site-packages/pydantic/class_validators.py": 4643597082531287188, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/warnings.py": 2552021607611112605, + "venv/lib/python3.13/site-packages/httpx/_decoders.py": 14478643473006178492, + "docs/api/html/group__ClarificationQuestionPayload.html": 13225683527391113096, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/licenses/LICENSE.PSF": 13208428090829817329, + "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/INSTALLER": 17282701611721059870, + "frontend/src/lib/components/MaintenanceSettingsPanel.svelte": 8672462648876875400, + "venv/lib/python3.13/site-packages/numpy/random/_common.pxd": 3402284125943848851, + "venv/lib/python3.13/site-packages/PIL/MspImagePlugin.py": 3034490726971829439, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/isocintrin/isoCtests.f90": 6208802899442270399, + "docs/api/html/group__save__preview.html": 10710352658491088679, + "docs/api/html/group__test__delete__schedule.html": 16032542899335467172, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/default_comparator.py": 47118577003622736, + "frontend/e2e/tests/enterprise-clean-setup.e2e.js": 6434855878266981931, + "docs/api/html/group__PreviewRowUpdate.html": 17634414564160299335, + "venv/lib/python3.13/site-packages/pandas/_libs/tslib.pyi": 16170606956605100142, + "backend/src/plugins/translate/superset_executor.py": 5480256123348033488, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_item.py": 17619314877770917080, + "docs/api/html/group__TestConfigManagerDefaults.html": 5818758037140085192, + "venv/lib/python3.13/site-packages/websockets/datastructures.py": 5180442040351387281, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_string.py": 10141066226714805009, + "venv/lib/python3.13/site-packages/numpy/_core/printoptions.pyi": 16758392990920041462, + "docs/api/html/group____make__us2__session.html": 6547387069315862625, + "venv/lib/python3.13/site-packages/numpy/lib/introspect.py": 5706729538356302335, + "docs/api/html/group__Icon.html": 13262643427544485857, + "venv/lib/python3.13/site-packages/numpy/lib/_shape_base_impl.pyi": 12052895927933479005, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/METADATA": 6656194161182818439, + "frontend/src/lib/api/translate.js": 18140498250896378509, + "docs/api/html/group__PageHeader.html": 5497869529552626290, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_pickle.py": 4216445955812104014, + "docs/api/html/group__cancel__run.html": 14246191788643114054, + "docs/api/html/group__SupersetDatasetsMixin.html": 1567821220831285583, + "venv/lib/python3.13/site-packages/numpy/random/_pcg64.cpython-313-x86_64-linux-gnu.so": 5759445712745875888, + "venv/lib/python3.13/site-packages/rsa/cli.py": 1753949198467694190, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/securetransport.py": 12104888897121018676, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/aws.py": 1364297790170663941, + "docs/api/html/group__ValidationService.html": 18408866395625101302, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_chebyshev.py": 8054411443686791426, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_index_as_string.py": 13421551616136437100, + "frontend/build/_app/immutable/chunks/2dOUpm6k.js": 11811637653151731489, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/legacy/resolver.py": 2492962412506082234, + "docs/api/html/group__TaskDrawerTest__Module.html": 14203440361140799361, + "docs/api/html/group__orchestrator__query.html": 186936932358706266, + "docs/api/html/group__test__sync__environment__handles__api__error__gracefully.html": 3531439474218526807, + "docs/api/html/group____register__plugin.html": 4747901438274521925, + "docs/api/html/group__test__enable__belief__state__flag.html": 9288819795406438186, + "docs/api/html/group__normalizeEnvStage__Function.html": 702224648569356204, + "backend/src/plugins/storage/__init__.py": 5046554941488079204, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_logical/foo77.f": 16250175448122328648, + "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/WHEEL": 9100692507274722091, + "docs/api/html/group__ReactiveDashboardFetch__Block.html": 2051150487389286262, + "venv/lib/python3.13/site-packages/fastapi/temp_pydantic_v1_params.py": 9436036880518047720, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-sin.csv": 1443087417808027268, + "venv/lib/python3.13/site-packages/numpy/_utils/__init__.pyi": 13530522898409268883, + "backend/src/scripts/clean_release_tui.py": 3006670970245009659, + "venv/lib/python3.13/site-packages/authlib/jose/util.py": 14843923624043422219, + "docs/api/html/group__DatasetItem.html": 14862648460163668817, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize.pyi": 6616985736007157309, + "docs/api/html/group__LinkedDashboard.html": 16245670045855947237, + "docs/api/html/group__ComplianceStageRun.html": 4711615660021558641, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_argparse.py": 11111699418217357084, + "docs/api/html/group__frontend__src__lib__api__validation__js____duplicateTask.html": 9243462936463003663, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/ec_key.py": 5961540064444749833, + "docs/api/html/group__SemanticFieldEntry.html": 12684503746911343519, + "venv/lib/python3.13/site-packages/cryptography/x509/oid.py": 13909847799728532602, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/events.py": 15099787454570172797, + "docs/api/html/group__Route__Group__Contracts.html": 11731434895920260883, + "backend/src/api/routes/assistant/_admin_routes.py": 253209289619444139, + "frontend/src/lib/components/reports/__tests__/report_detail.ux.test.js": 7841254655898186872, + "venv/lib/python3.13/site-packages/anyio/abc/_testing.py": 16484863782452886547, + "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/implicit.py": 5400555157488808948, + "venv/lib/python3.13/site-packages/passlib/apache.py": 2357244937629445006, + "docs/api/html/group__update__storage__settings.html": 5443519149117079992, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/profiling.py": 16030397164203895281, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/philox-testset-2.csv": 7063857529719738394, + "venv/lib/python3.13/site-packages/rapidfuzz/process.pyi": 6959881293311340830, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/RECORD": 17985800801793506250, + "venv/lib/python3.13/site-packages/pygments/lexers/maple.py": 7402467573829618534, + "docs/api/html/group____build__documentation__export.html": 16699691799165712675, + "backend/src/core/plugin_base.py": 5063738955101125652, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/licenses/LICENSE": 5757922580822401219, + "venv/lib/python3.13/site-packages/numpy/f2py/_src_pyf.pyi": 8916922961301555974, + "venv/lib/python3.13/site-packages/pandas/_libs/ops_dispatch.cpython-313-x86_64-linux-gnu.so": 5284769758475394095, + "docs/api/html/group____collect__src__files.html": 6109138608748972582, + "venv/lib/python3.13/site-packages/attrs/__init__.pyi": 14353885498883901855, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/incfile.f90": 4348588746493647387, + "venv/lib/python3.13/site-packages/numpy/lib/_histograms_impl.py": 13446184230476677032, + "venv/lib/python3.13/site-packages/passlib/registry.py": 5050675058011850564, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_index.py": 1551768441102117466, + "docs/api/html/group____parse__cron.html": 6292735699445558304, + "docs/api/html/group__cot__trace__context.html": 7845040058445266458, + "docs/api/html/group__get__auth__db.html": 7153540610662793603, + "venv/lib/python3.13/site-packages/numpy/_core/_internal.pyi": 6840742333427164920, + "venv/lib/python3.13/site-packages/fastapi/middleware/gzip.py": 436886407566263171, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/base.py": 10205051944814316388, + "venv/lib/python3.13/site-packages/pydantic/deprecated/tools.py": 16466182352694741629, + "frontend/src/lib/components/dataset-review/LaunchConfirmationPanel.svelte": 16168905765241471813, + "venv/lib/python3.13/site-packages/PIL/features.py": 3481835375516797487, + "docs/api/html/group__ExecutionMode.html": 359045115396835597, + "docs/api/html/globals_d.html": 2840545806846753350, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_multi.py": 4612816468258071810, + "venv/lib/python3.13/site-packages/pandas/_libs/ops_dispatch.pyi": 16176428602589420913, + "docs/api/html/group__MappingsApi.html": 11117168124577566737, + "docs/api/html/group__test__get__users__page__preserves__primary__schema__error__over__fallback__auth__error.html": 92546336677002310, + "docs/api/html/group__ConfigModels.html": 17708399333384858246, + "backend/src/api/routes/plugins.py": 6640856303389338188, + "docs/api/html/group__SupersetClientImportDashboard.html": 8056171795857604639, + "venv/lib/python3.13/site-packages/pandas/core/indexes/category.py": 18192569199634406001, + "docs/api/html/group__test__api__datasource__columns__missing__env.html": 12699662960552384887, + "docs/api/html/group__test__patch__dashboard__metadata__handles__missing__targets.html": 6681139266574011125, + "docs/api/html/group__handleSaveGlobal__Function.html": 5196092168626458120, + "docs/api/html/group__test__html__escaping.html": 6092029763861815279, + "venv/lib/python3.13/site-packages/charset_normalizer/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/asc.py": 10744437946030875496, + "frontend/src/lib/stores/maintenance.svelte.js": 17672315346665850067, + "docs/api/html/group__test__patch__dashboard__metadata__skips__when__no__metadata.html": 9093107496317548408, + "docs/api/html/group__record__clarification__answer.html": 18379043236673928126, + "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/METADATA": 3188324716322823755, + "venv/lib/python3.13/site-packages/pygments/lexers/mime.py": 7768464764849718825, + "backend/src/core/utils/network.py": 535557448085943960, + "docs/api/html/group__SupersetClientValidateImportFile.html": 9535308086571101211, + "venv/lib/python3.13/site-packages/pandas/tests/strings/__init__.py": 5060190599837877599, + "docs/api/html/group__TestTokenBudget.html": 11141209479743213441, + "docs/api/html/group__TranslationScheduler.html": 13712731753540269518, + "docs/api/html/group__extract__tables__from__jinja.html": 5053769374599061373, + "docs/api/html/group__ConfirmationRecord.html": 3457268499822373186, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro.py": 183817263146423033, + "docs/api/html/group__test__add__logs__batch.html": 7044990428068455797, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_stack.py": 5316826578695144945, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arrayprint.py": 5912583751693302370, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/test_indexing.py": 2274965639578580723, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_sparse_accessor.py": 6774374030220202353, + "venv/lib/python3.13/site-packages/pandas/tests/strings/conftest.py": 12065119814157197510, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mutable.py": 9323088483998280629, + "venv/lib/python3.13/site-packages/httpcore/_sync/socks_proxy.py": 4418971149260853240, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_copy.py": 11335108864615756235, + "backend/src/models/task.py": 13936135007931808732, + "docs/api/html/group__add__logs.html": 9269565121918575356, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/licenses/LICENSE": 17020744174398828059, + "frontend/tailwind.config.js": 13139381085024634801, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/__init__.py": 15130871412783076140, + "backend/src/api/routes/__tests__/test_git_api.py": 4133163122739824202, + "venv/lib/python3.13/site-packages/pandas/_libs/properties.pyi": 9268470215750269699, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/type_check.pyi": 1599910480066368464, + "docs/api/html/group__docker__frontend__entrypoint__select__nginx__config.html": 5783880392055327340, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_arithmetic.py": 17043958604607035425, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_shape_base.py": 8837845103338426570, + "docs/api/html/group__ComplianceReport.html": 8461864359499297379, + "docs/api/html/group__taskDrawer__Store.html": 6664598723983358111, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ndarray.pyi": 14369009813591437391, + "backend/src/plugins/backup.py": 1465877198420371496, + "frontend/src/routes/validation/history/+page.svelte": 17086781413900596714, + "docs/api/html/group__test__create__task__success.html": 17553466713847616318, + "venv/lib/python3.13/site-packages/charset_normalizer/version.py": 9948878594498587774, + "frontend/build/_app/immutable/chunks/CC_MCBkD.js": 11709343780956289454, + "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/__init__.py": 6758781485387665020, + "venv/lib/python3.13/site-packages/pandas/tests/test_take.py": 17628004130770326677, + "venv/lib/python3.13/site-packages/numpy/_utils/_inspect.py": 7029935879540617057, + "docs/api/html/group__BulkReplaceModalTests.html": 16436012889032153667, + "venv/lib/python3.13/site-packages/pandas/api/executors/__init__.py": 16954693181142010028, + "docs/api/html/group__UnifiedReportsPage.html": 4964051768663825925, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_info.py": 10615285239043745712, + "venv/lib/python3.13/site-packages/greenlet/greenlet_internal.hpp": 13173115501223013762, + "docs/api/html/group__DatasetReviewEnums.html": 8736640618120318797, + "docs/api/html/group__MockEnvPublic.html": 16155621137935179699, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_missing.py": 3991199131191840903, + "venv/lib/python3.13/site-packages/sqlalchemy/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/multiarray.pyi": 6368268452184570195, + "docs/api/html/group__test__get__dashboards__override__show__all__contract.html": 16206749140891179616, + "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pyasn1/codec/ber/decoder.py": 12653470212935324322, + "docs/api/html/group__engine.html": 6333404802173760004, + "docs/api/html/group__set__schedule.html": 8284012278188829172, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_version.py": 10384171076976071398, + "venv/lib/python3.13/site-packages/pandas/testing.py": 18352975429944961593, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_ndarray_backed.py": 10097812802469682233, + "docs/api/html/group__SupersetClientHeaders.html": 659607831527775901, + "docs/api/html/group__execute.html": 813912290626657753, + "venv/lib/python3.13/site-packages/rapidfuzz/process_py.py": 17563673072076876125, + "venv/lib/python3.13/site-packages/pip/_internal/utils/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pluggy/_tracing.py": 7276210024011809655, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/x25519.py": 18229054440703471493, + "venv/lib/python3.13/site-packages/pygments/styles/emacs.py": 4540417536507245024, + "venv/lib/python3.13/site-packages/pandas/tests/extension/list/__init__.py": 10072943986583771248, + "docs/api/html/group__delete__role.html": 8546807030559673692, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api2.pyx": 15936470837420356071, + "docs/api/html/globals_func_f.html": 11627460573470994982, + "venv/lib/python3.13/site-packages/authlib/oidc/core/__init__.py": 16029653645350087968, + "docs/api/html/group__SupersetContextExtractorBase____extract__chart__id__from__state.html": 14330234105370642214, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/negative_bounds/issue_20853.f90": 3911644649277659333, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/inference.py": 2786441797589123900, + "venv/lib/python3.13/site-packages/jaraco/functools/__init__.pyi": 2872039192528394677, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reset_index.py": 14490875921264161445, + "venv/lib/python3.13/site-packages/websockets/version.py": 5853118844880112885, + "docs/api/html/search/functions_6.js": 16111349203442418291, + "docs/api/html/group__SessionPhase.html": 10683758452248873915, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssltransport.py": 8148652555908329980, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timestamps.cpython-313-x86_64-linux-gnu.so": 13209491675968970365, + "docs/api/html/group__detect__jinja__spans.html": 15712299430254929498, + "docs/api/html/group__handlePasswordPrompt__Function.html": 13969204145161370143, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_astype.py": 1961831758405941258, + "venv/lib/python3.13/site-packages/pandas/core/groupby/generic.py": 4857114071347950833, + "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs.pyi": 9282436354926617898, + "frontend/src/lib/components/reports/__tests__/fixtures/reports.fixtures.js": 9590309593907049070, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_shift.py": 14026124784027171225, + "venv/lib/python3.13/site-packages/psycopg2/extensions.py": 14197445323992851566, + "docs/api/html/group__SmokeE2E.html": 5059040919589105636, + "venv/lib/python3.13/site-packages/pyasn1/codec/native/__init__.py": 15728752901274520502, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ed25519.py": 2285778903282667561, + "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/WHEEL": 7454950858448014158, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_na_indexing.py": 8712547126522523899, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pygments/lexers/amdgpu.py": 17249439604111838979, + "frontend/src/components/RepositoryDashboardGrid.svelte": 8427306073875543545, + "venv/lib/python3.13/site-packages/websockets/py.typed": 15130871412783076140, + "docs/api/html/group__clean__release__enums.html": 3886475013764944523, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_factorize.py": 5585211699185937865, + "docs/api/html/group__test__sync__environment__skips__resources__without__uuid.html": 6431696107355961195, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_longdouble.py": 9337218715436213122, + "venv/lib/python3.13/site-packages/jsonschema/_legacy_keywords.py": 16481666133229715822, + "venv/lib/python3.13/site-packages/pip/_internal/distributions/__init__.py": 1343779312297539596, + "venv/lib/python3.13/site-packages/pip/_internal/models/__init__.py": 13482731985065116750, + "venv/lib/python3.13/site-packages/numpy/core/fromnumeric.py": 2136433423902202138, + "frontend/src/routes/settings/FeaturesSettings.svelte": 14192374301379217586, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arraymethod.py": 14421188237635557797, + "venv/lib/python3.13/site-packages/passlib/handlers/fshp.py": 13298827601291507295, + "venv/lib/python3.13/site-packages/pygments/lexers/r.py": 14263133575134645005, + "venv/lib/python3.13/site-packages/pip/_internal/network/download.py": 5256731341219268693, + "venv/lib/python3.13/site-packages/packaging/_structures.py": 13086687542872305890, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_drop.py": 17940792593116540139, + "docs/api/html/group__ValidationPolicyUpdate.html": 14465919311238997171, + "venv/lib/python3.13/site-packages/_pytest/scope.py": 7603155109542903644, + "docs/api/html/group__TestConfigManagerCompat.html": 13874940420207193288, + "venv/lib/python3.13/site-packages/ecdsa/test_sha3.py": 12459459298663975730, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/connectionpool.py": 10453724680327835821, + "venv/lib/python3.13/site-packages/dateutil/zoneinfo/rebuild.py": 1813298167468704155, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_setops.py": 14246225281428284850, + "venv/lib/python3.13/site-packages/pandas/_libs/hashing.pyi": 5241441378073929968, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_union_categoricals.py": 6843679254735807, + "venv/lib/python3.13/site-packages/anyio/py.typed": 15130871412783076140, + "docs/api/html/group__AuthOauthModule.html": 13530771519498131347, + "docs/api/html/group__import__dictionary__entries.html": 15238522570085331527, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/arrayscalars.h": 16142050006935459679, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/groupby.py": 14661033005768429774, + "docs/api/html/group__get__chart__async.html": 1917535031433692607, + "venv/lib/python3.13/site-packages/packaging/_tokenizer.py": 7442392076059866359, + "docs/api/html/group__test__release__candidate__empty__id.html": 12372974039816984488, + "venv/lib/python3.13/site-packages/jeepney/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__test__get__dashboard__thumbnail__202.html": 9047480873947971115, + "venv/lib/python3.13/site-packages/pandas/tests/reductions/test_reductions.py": 11624188672428941494, + "docs/api/html/group__test__deprecation__comment__exists.html": 5453492904479567908, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_constructors.py": 17392287676196409733, + "backend/tests/core/test_git_service_gitea_pr.py": 18003501172717000629, + "venv/lib/python3.13/site-packages/pygments/lexers/_ada_builtins.py": 16331776886501464264, + "frontend/src/routes/datasets/review/review-workspace-helpers.js": 8577563379877694502, + "scripts/gen_semantics.py": 11397714264377363083, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize_py.py": 6518425342376455821, + "docs/api/html/group__verify__password.html": 16868760447655092510, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____resetSession.html": 1485006596273058906, + "docs/api/html/group__test__legacy__checks__endpoints__still__available.html": 6527479084678491892, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_hist_method.py": 2109257663592928, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/__init__.py": 15130871412783076140, + "docs/api/html/group__test__get__dashboards__success.html": 1205024512730425920, + "docs/api/html/group__LlmModels.html": 338390014476636, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/pretty.py": 2448541115957861214, + "docs/api/html/group__ResourceServiceModule.html": 7820716333589136956, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/wheel.py": 828222664427570058, + "docs/api/html/group__MigrationPackage.html": 671195743151997854, + "venv/lib/python3.13/site-packages/pandas/core/interchange/dataframe.py": 16525846817331842080, + "docs/api/html/group__selectPlugin__Function.html": 7924969411262828408, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/__init__.py": 15130871412783076140, + "backend/src/services/notifications/__tests__/test_notification_service.py": 13027609991239837872, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_indexing.py": 3841182456456779012, + "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft.pyi": 1521384724035973688, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reflection.py": 1799734694597531652, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____openDrawer.html": 1057387600319463508, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/applicator": 6616723520993329538, + "docs/api/html/group____other__admin__user.html": 12434910978826868451, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/core.py": 2199607970842512780, + "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/_gen_files.py": 6273314671315377131, + "venv/lib/python3.13/site-packages/fastapi/openapi/models.py": 1680354178147364813, + "docs/api/html/group____load__config.html": 9007854862967223337, + "docs/api/html/group__get__environment.html": 1343499401732476775, + "docs/api/html/group__test__other__defaults__unchanged.html": 8009088910763350176, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi": 1065808244870331598, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/accesstype.f90": 877982462186396830, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/request.py": 10484280068366411541, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_diff.py": 7420674239386436885, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/version.py": 6401479036177132374, + "docs/api/html/group__warning.html": 8389706144157265523, + "backend/git_repos/remote/test-repo.git/hooks/push-to-checkout.sample": 4825338927654285910, + "docs/api/html/group__test__api__get__job__not__found.html": 11032532759238415335, + "docs/api/html/group__PolicyEngine.html": 10697573766276435812, + "docs/api/html/group__CleanReleaseTuiScript.html": 1449983814226815844, + "venv/lib/python3.13/site-packages/pandas/errors/__init__.py": 13444371880185740908, + "docs/api/html/group__AssistantFirstMessageIntegrationTest__Module.html": 16939727239361198220, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_tz_convert.py": 17957207974799052653, + "venv/lib/python3.13/site-packages/PIL/PngImagePlugin.py": 5076219228736706283, + "docs/api/html/group__LLMAnalysisModels.html": 10454605905980143274, + "venv/lib/python3.13/site-packages/_pytest/deprecated.py": 5452408732344157294, + "venv/lib/python3.13/site-packages/jeepney/tests/test_fds.py": 6257376331171761928, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f77comments.f": 4801926170672147659, + "venv/lib/python3.13/site-packages/PIL/BlpImagePlugin.py": 7209218638257731375, + "frontend/build/_app/immutable/nodes/33.IQSVPmFm.js": 17762634792066116270, + "docs/api/html/group__test__provider__config.html": 10682630246046688970, + "docs/api/html/group__await__input.html": 16300840224339823745, + "docs/api/html/group__CreateAdminScript.html": 9770308413681571026, + "docs/api/html/group__handleCreate__Function.html": 16671349204777339326, + "docs/api/html/group____resolve__dashboard__title.html": 7648595970899356173, + "merge_kilo.py": 4282227344165325430, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_transform.py": 18159263102656491974, + "docs/api/html/group__list__permissions.html": 2593836930320988861, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_drop_duplicates.py": 12601598844977346213, + "venv/lib/python3.13/site-packages/PIL/ImageCms.py": 5610897002957128546, + "venv/lib/python3.13/site-packages/httpcore/_exceptions.py": 6716590711697088732, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/hook-numpy.py": 5221550291012182443, + "backend/git_repos/remote/test-repo.git/refs/heads/master": 12485529318667335076, + "venv/lib/python3.13/site-packages/urllib3/http2/__init__.py": 62108352209996836, + "docs/api/html/group__resetForm__Function.html": 7796618286277147047, + "docs/api/html/group__getTaskStatus__Function.html": 16832723243113851896, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_typing.py": 17589387690638097975, + "backend/src/api/routes/storage.py": 3921659652525719249, + "venv/lib/python3.13/site-packages/smmap/test/lib.py": 2924931247676024085, + "venv/lib/python3.13/site-packages/pip/_internal/network/utils.py": 13421242949994555055, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/validation": 13992741783834278677, + "docs/api/html/group__test__virtual__dataset__match.html": 2595415352137646256, + "venv/lib/python3.13/site-packages/pygments/formatter.py": 11156733836937309465, + "docs/api/html/group__test__get__session__detail__export__and__lifecycle__endpoints.html": 7302188143370256832, + "venv/lib/python3.13/site-packages/httpx/_status_codes.py": 1758440600462491839, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_codes.py": 13901854719435716195, + "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/RECORD": 14375680579341422646, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____buildAssistantContextPrompt.html": 7622914159072277055, + "docs/api/html/group__frontend__src__services__adminService__js____updateUser.html": 10078748986285317841, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/RECORD": 11976403473353722969, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_generator_mt19937.py": 7299586490442539723, + "docs/api/html/group__MaintenanceRoutesPackage.html": 8654226804027186583, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_symbol.py": 10792387279408528886, + "venv/lib/python3.13/site-packages/more_itertools/more.py": 1631135582441184133, + "venv/lib/python3.13/site-packages/pandas/tests/computation/test_eval.py": 2921337784087808487, + "venv/lib/python3.13/site-packages/fastapi/templating.py": 10760135144345238340, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/conftest.py": 2643915042664055969, + "venv/lib/python3.13/site-packages/PIL/ImageTk.py": 17063969714816564357, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/METADATA": 1266134223155266488, + "backend/src/services/rbac_permission_catalog.py": 11280653389166352517, + "docs/api/html/group__TranslateHelpersModule.html": 2380085236737921146, + "docs/api/html/group____append__history.html": 2245659271654816283, + "docs/api/html/group__test__patch__profile__preferences__success.html": 3112680572132768752, + "docs/api/html/group__test__candidate__registration__contract.html": 1989144001943621829, + "docs/api/html/group__goToPage__Function.html": 17867667754784109519, + "venv/lib/python3.13/site-packages/click/types.py": 6491651131669287534, + "venv/lib/python3.13/site-packages/pip/_internal/utils/logging.py": 9639351759822608724, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_select.py": 7083040959665006634, + "docs/api/html/group__TargetSchemaColumnInfo.html": 8163902877022443310, + "docs/api/html/group__revoke__publication__endpoint.html": 828753596319821516, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/WHEEL": 7414522633964952515, + "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/unrolled.py": 12651425412640834530, + "venv/lib/python3.13/site-packages/gitdb/test/test_base.py": 16305779366785148795, + "venv/lib/python3.13/site-packages/pygments/plugin.py": 18006138132596504101, + "docs/api/html/group__SupersetCompilationAdapter__create__sql__lab__session.html": 13996430015600704960, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_sort_index.py": 13517883160584591966, + "venv/lib/python3.13/site-packages/dateutil/rrule.py": 398469817784230512, + "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/RECORD": 11604408378998955169, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arithmetic.py": 3209727509456212551, + "frontend/src/routes/dashboards/__tests__/dashboard-profile-override.integration.test.js": 4930404579577741926, + "docs/api/html/group__test__list__runs__includes__language__info.html": 6499374490278250016, + "venv/lib/python3.13/site-packages/sqlalchemy/event/registry.py": 2857989070743633709, + "backend/src/api/routes/settings.py": 7176893095762662218, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/licenses/LICENSE": 9235234428907927646, + "docs/api/html/group__MigrationSettings.html": 7191961132337035743, + "backend/src/core/superset_client/_charts.py": 15609724925814918066, + "venv/lib/python3.13/site-packages/pandas/io/sas/sas_constants.py": 14492427939536692313, + "docs/api/html/group____clear__assistant__state.html": 17985750078223833333, + "venv/lib/python3.13/site-packages/anyio/_core/_synchronization.py": 7050001375718876608, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286.f90": 1249061697041863692, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_custom_dtypes.py": 12322100282959605055, + "docs/api/html/group__SupersetAccountLookupAdapter.html": 16273317223969819045, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_sort_values.py": 15072305514178699398, + "docs/api/html/group__getRepositoryStatusToken__Function.html": 49346559759034535, + "docs/api/html/group__LogEntryRow.html": 18132223528335475191, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/char.pyi": 1639810799219814643, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_strings.py": 7379299916213794543, + "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/METADATA": 14126682758562488244, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_numpy.py": 4073641912755651877, + "venv/lib/python3.13/site-packages/PIL/_imaging.pyi": 17119084207765761921, + "frontend/src/lib/ui/LanguageSwitcher.svelte": 15175441556916164874, + "venv/lib/python3.13/site-packages/pyasn1/codec/ber/__init__.py": 15728752901274520502, + "venv/lib/python3.13/site-packages/_pytest/_py/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/csound.py": 2175454840368374515, + "docs/api/html/group__ApiKeysTab.html": 8274883643642903708, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/pkcs12.py": 5946672289916692272, + "venv/lib/python3.13/site-packages/packaging/pylock.py": 15346942039643310253, + "venv/lib/python3.13/site-packages/itsdangerous/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_py_util.py": 12836989066113400538, + "docs/api/html/group__test__maintenance__service.html": 4028053446391236615, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/crud.py": 805684028038896506, + "venv/lib/python3.13/site-packages/anyio/streams/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_win32_console.py": 18092547253031555768, + "venv/lib/python3.13/site-packages/pydantic/typing.py": 6661252174518316760, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/array.py": 13840510238256626632, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_pip_wrapper.py": 2516476609539242190, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_reindex.py": 12459492712890114705, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_online.py": 11850497659869773510, + "backend/src/schemas/auth.py": 1879729190428074314, + "venv/lib/python3.13/site-packages/pygments/lexers/haxe.py": 1915270891525929751, + "venv/lib/python3.13/site-packages/numpy/_core/_string_helpers.py": 17192211156810267818, + "docs/api/html/group__test__get__dashboards__superset__failure.html": 4480500139441012004, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_object.py": 9215781825358309147, + "docs/api/html/group__test__enterprise__policy__external__allowed.html": 13390827241810832379, + "docs/api/html/group__SourceRegistrySnapshot.html": 16441767339963706656, + "docs/api/html/group__MaintenanceAlreadyActiveResponse.html": 3971170803741620113, + "docs/api/html/group__ProfileSecuritySummary.html": 13465338754935140981, + "docs/api/html/group__PolicyForm.html": 18395519007487395459, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_three_greenlets2.py": 11100501798741918610, + "docs/api/html/group__test__resolve__trusted__policy__snapshots__rejects__override__attempt.html": 17876948714761629910, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/index_tricks.pyi": 11463747060334597941, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_categorical.py": 12897027063618569795, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/attr/validators.pyi": 15579625896285277321, + "venv/lib/python3.13/site-packages/pygments/lexers/css.py": 517586374264113606, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_analytics.py": 8155550493311083506, + "backend/src/core/auth/security.py": 11836436636390315707, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_mask.py": 5451866071307236899, + "docs/api/html/group__test__create__admin__creates__user__with__optional__email.html": 4774635466855603335, + "docs/api/html/group__FileCategory.html": 1512310133619337976, + "docs/api/html/group__create__validation__policy.html": 17844050931400995860, + "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/WHEEL": 14929202952940710322, + "venv/lib/python3.13/site-packages/authlib/oidc/core/userinfo.py": 17201158389976619872, + "venv/lib/python3.13/site-packages/pip/_internal/utils/subprocess.py": 3095012838116670328, + "venv/lib/python3.13/site-packages/pandas/core/arrays/__init__.py": 10460719978124302175, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_pytables_missing.py": 12154582133989896069, + "venv/lib/python3.13/site-packages/pandas/io/iceberg.py": 13137128885014736233, + "venv/lib/python3.13/site-packages/keyring/backends/macOS/api.py": 4502902558534812719, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc64_linux.h": 4071314837793906998, + "frontend/src/routes/dashboards/[id]/components/DashboardGitManager.svelte": 12995972702842177800, + "frontend/build/_app/immutable/chunks/Cn56Obuw.js": 9774722709007984298, + "venv/lib/python3.13/site-packages/dotenv/parser.py": 17651523026132242005, + "frontend/build/_app/immutable/nodes/23.D5IfY_Wm.js": 4234056891832193499, + "frontend/src/components/tasks/TaskResultPanel.svelte": 2978429516796744791, + "docs/api/html/group__get__providers.html": 2676511877365075835, + "docs/api/html/group____valid__artifacts.html": 18020364086775197515, + "venv/lib/python3.13/site-packages/PIL/ExifTags.py": 6869879826623916830, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_unary.py": 2573825678342936734, + "docs/api/html/group__TranslationBatch.html": 8584550832559177298, + "frontend/src/routes/datasets/DatasetPreview.svelte": 4250995999947659034, + "docs/api/html/group__test__tui__exit__f10.html": 6092888054021050903, + "docs/api/html/group__test__cors__parsing__with__trailing__spaces.html": 2388414963323398944, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_common.h": 14732581790650403546, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dropna.py": 3168969662216766293, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/module_data_docstring.f90": 18245403117623015312, + "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/WHEEL": 3749476255729626245, + "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/WHEEL": 2357997949040430835, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_produces_warning.py": 750781117570375777, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_put.py": 8547660958963625817, + "docs/api/html/group__ManifestSummary.html": 5053023856336130679, + "venv/lib/python3.13/site-packages/numpy/tests/test_scripts.py": 5790352482583964348, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/umath/svml/LICENSE": 9584102918819171104, + "docs/api/html/group__test__continue__merge__passes__message__and__returns__commit.html": 7335459609919818162, + "docs/api/html/group__AssistantApi__Module.html": 4671602144528618803, + "venv/lib/python3.13/site-packages/pydantic/schema.py": 83238111330132033, + "docs/api/html/group__MapperPluginModule.html": 12912874537129750677, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_pad.pyi": 14755435694146003896, + "venv/lib/python3.13/site-packages/git/repo/fun.py": 9019364012746153312, + "venv/lib/python3.13/site-packages/pandas/io/clipboards.py": 5183212433608887727, + "docs/api/html/group__create__sub__context.html": 6446207849507974736, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/accumulate.py": 5780225603819849877, + "docs/api/html/group__register__candidate.html": 9069772319908727023, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mariadb.py": 3109042476851791996, + "venv/lib/python3.13/site-packages/websockets/sync/client.py": 10892557975919033983, + "docs/api/html/group__TranslateApiTests__Class.html": 5018753849981248243, + "venv/lib/python3.13/site-packages/pyasn1/type/__init__.py": 15728752901274520502, + "docs/api/html/group__AsyncAPIClient__get__headers.html": 4827871173278773347, + "venv/lib/python3.13/site-packages/_pytest/_version.py": 4890545974654141536, + "frontend/src/components/Toast.svelte": 1736760619841085958, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/forth.py": 17623561228839319663, + "docs/api/html/group__TestDictionaryPromptBuilder.html": 990574254125574660, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_cell_widths.py": 5724379364993806351, + "venv/lib/python3.13/site-packages/annotated_doc/main.py": 3384049281532298500, + "docs/api/html/group__get__api__key__principal.html": 5141844013262669360, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/__init__.py": 15130871412783076140, + "docs/api/html/group__superset__lookup__service.html": 13295169492630932341, + "docs/api/html/group__frontend__src__lib__api__validation__js____updateTask.html": 5295403112831889335, + "backend/src/api/routes/translate/_job_routes.py": 10128664562563592050, + "docs/api/html/group____get__owned__mapping__or__404.html": 17632372297671515109, + "docs/api/html/group__test__get__task__logs__success.html": 14138133046940925663, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/shape.pyi": 2188930129299348535, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_cut.py": 7800833253841657380, + "venv/lib/python3.13/site-packages/passlib/__init__.py": 6987142392711441525, + "docs/api/html/group__configure__logger.html": 6165988274497149791, + "venv/lib/python3.13/site-packages/pygments/styles/__init__.py": 18383248976818885498, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_ratio.py": 940213488194452623, + "frontend/src/lib/ui/index.ts": 6883965364006817450, + "docs/api/html/group____run__async.html": 1312288416173170323, + "docs/api/html/search/groups_12.js": 10902160763074406551, + "docs/api/html/group__resumeTask__Function.html": 15320819225352081425, + "dist/docker/backend.0.1.1.tar.xz": 932529191402352855, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/authorization_server.py": 2913800420669417152, + "venv/lib/python3.13/site-packages/pip/_internal/req/req_install.py": 7181005402818830655, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/socks.py": 17581293673028078134, + "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/WHEEL": 12054782055241301457, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/LICENSE": 12064892310002036996, + "frontend/playwright-report/trace/assets/defaultSettingsView-D31xz8zv.js": 1301407320635785789, + "docs/api/html/globals_v.html": 10195887458242636103, + "docs/api/html/group__run__mapping.html": 4039233635360893448, + "venv/lib/python3.13/site-packages/pandas/core/arrays/integer.py": 7775055011080964709, + "backend/src/services/__tests__/test_llm_plugin_persistence.py": 17921598588767566887, + "venv/lib/python3.13/site-packages/pygments/styles/native.py": 4559566444883341527, + "docs/api/html/group__get__preferences.html": 14948180484738743961, + "venv/lib/python3.13/site-packages/rapidfuzz/process.py": 3870006735299537016, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/rethinkdb.py": 16413299263077970925, + "venv/lib/python3.13/site-packages/numpy/random/_pcg64.pyi": 14785496840737986355, + "docs/api/html/group__should__log__task__level.html": 3031004604954435079, + "frontend/src/services/__tests__/gitService.test.js": 2011135397906862721, + "venv/lib/python3.13/site-packages/pandas/io/formats/style.py": 13235403689320479165, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_ipython_compat.py": 12632271159842988561, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____stringifyValue.html": 757351777204500206, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_sequence.py": 3721630758772772345, + "docs/api/html/group____check__translation__cache.html": 3321256720514303969, + "venv/lib/python3.13/site-packages/yaml/constructor.py": 8731384179016992045, + "docs/api/html/group__ToolsService.html": 2114074285056843811, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/METADATA": 6438256145634479451, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_crackfortran.py": 10278720705326601943, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_equals.py": 11041884432990762650, + "docs/api/html/group__test__persist__task__update.html": 8785260065895714433, + "docs/api/html/group__get__config__manager.html": 9948904039819241913, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/index.py": 15694995431926521471, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jws_algs.py": 11920621906391796226, + "venv/lib/python3.13/site-packages/httpx/_auth.py": 1283189552342958900, + "venv/lib/python3.13/site-packages/authlib/oauth2/base.py": 12948318231066662045, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/columns.py": 8488246354818721406, + "docs/api/html/group__Toast.html": 15408687886829508162, + "docs/api/html/group____resolve__dashboard__id__entity.html": 6374255965303558769, + "docs/api/html/group__get__type__profile.html": 8801753117531383071, + "venv/lib/python3.13/site-packages/fastapi/background.py": 16533963020573865222, + "venv/lib/python3.13/site-packages/pydantic/deprecated/__init__.py": 15130871412783076140, + "docs/api/html/group__mock__api__deps.html": 6995100017269636667, + "docker/frontend.entrypoint.sh": 11397342350356400663, + "venv/lib/python3.13/site-packages/pandas/core/arrays/interval.py": 16281221279220043867, + "docs/api/html/group__TestAssistantAuthz.html": 3742284651131782250, + "docs/api/html/group__ReportsListTest__Module.html": 16813306558696724690, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/METADATA": 1862765380818895200, + "docs/api/html/group__test__logger.html": 11504400505756254792, + "venv/lib/python3.13/site-packages/_pytest/setupplan.py": 7496801885995567141, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/horizontal_shard.py": 17615732108308858890, + "docs/api/html/group____terminal__run.html": 17656532889079902778, + "docs/api/html/group__get__clean__release__repository.html": 3802772279404902522, + "frontend/src/components/TaskLogViewer.svelte": 15158021998452088463, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/core": 6622984507059115517, + "docs/api/html/group____apply__dashboard__filters.html": 13208356314740961922, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/test_interval.py": 18040371224712437126, + "backend/tests/services/dataset_review/test_superset_matrix.py": 3788494235626090289, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_pydatetime.py": 16228315407662560992, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_clipboard.py": 12674078499544938252, + "venv/lib/python3.13/site-packages/passlib/tests/test_win32.py": 13932956220195912963, + "docs/api/html/group____seed__repository.html": 7316844014942440184, + "backend/src/core/utils/superset_context_extractor/_parsing.py": 18406152325228380468, + "docs/api/html/group____apply__features__from__env.html": 5044527824719200918, + "docs/api/html/navtreeindex14.js": 14969246354997611461, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein.pyi": 2700568594438441246, + "venv/bin/uvicorn": 3776670267111625708, + "docs/api/html/group____save__config__to__db.html": 11046536065710831313, + "docs/api/html/group__MigrationJob.html": 8882884563951880280, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/_mapping.py": 17519715342700184302, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_size.py": 8527839563560550806, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/comparisons.py": 7327629888601690759, + "frontend/src/lib/components/reports/ReportDetailPanel.svelte": 5659980083465412500, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/region.py": 12579403230062395563, + "venv/lib/python3.13/site-packages/numpy/lib/_stride_tricks_impl.pyi": 9243829615414967057, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_character/foo90.f90": 2435648607844815947, + "docs/api/html/group__MaintenanceBannerPage.html": 9819977167182180539, + "venv/lib/python3.13/site-packages/pluggy/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_cipheralgorithm.py": 10057637461647348368, + "venv/lib/python3.13/site-packages/passlib/apps.py": 4633269405597895766, + "venv/lib/python3.13/site-packages/dateutil/tz/_common.py": 9009072600471223066, + "venv/lib/python3.13/site-packages/uvicorn/loops/asyncio.py": 16496916527760969173, + "docs/api/html/group__test__plugin__loader__logger__calls__exist.html": 14504869611475287296, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/RECORD": 15865206372525596795, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_s3.py": 17425535047477778484, + "backend/src/services/dataset_review/semantic_resolver.py": 11369306880421964134, + "docs/api/html/group__test__revoke__unknown__publication__rejected.html": 2648436309555498591, + "docs/api/html/group____is__dashboard__endpoint.html": 16400823815894598847, + "venv/lib/python3.13/site-packages/numpy/lib/stride_tricks.py": 548928042543500365, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/keywrap.py": 10424037418528425800, + "backend/src/plugins/translate/_batch_proc.py": 5830558923416766212, + "backend/tests/test_translate_scheduler_execution.py": 16687335504320865378, + "docs/api/html/group__MetricsTable.html": 17283314771986202846, + "venv/lib/python3.13/site-packages/jaraco/functools/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arithmetic.pyi": 467927803068643024, + "venv/lib/python3.13/site-packages/numpy/fft/_helper.py": 15906444100774706395, + "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py": 2375452080667815941, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/licenses/LICENSE": 3509878235770224233, + "docs/api/html/group__test__get__job.html": 17537338432908316746, + "docs/api/html/group__AdminService.html": 15757284534026835957, + "docs/api/html/group__test__prepare__candidate__api__success.html": 2373678927354742506, + "docs/api/html/group__MigrationPlugin.html": 12305721336063597680, + "docs/api/html/group__PreviewEnqueueResultResponse.html": 6184757346716551211, + "docs/api/html/globals_l.html": 8615069986131999743, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_dropna.py": 17272771246760486947, + "docs/api/html/group__GitConfigRoutes.html": 1739917609920142885, + "venv/lib/python3.13/site-packages/pip/_internal/utils/filesystem.py": 7716285033598020316, + "venv/lib/python3.13/site-packages/pygments/lexers/xorg.py": 14591144191879110061, + "docs/api/html/group__apply__record__action.html": 5054356330772600177, + "venv/lib/python3.13/site-packages/PIL/ImageColor.py": 17058618058554970738, + "venv/lib/python3.13/site-packages/pygments/styles/lightbulb.py": 12433916113773598760, + "docs/api/html/group__AssistantDispatch.html": 16287296406438246956, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_smoke.py": 7476432112986643847, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/default_styles.py": 4469204219504675080, + "venv/lib/python3.13/site-packages/starlette/_exception_handler.py": 9892172656847200124, + "venv/lib/python3.13/site-packages/pandas/io/excel/_openpyxl.py": 6676451564208867775, + "docs/api/html/globals_func_m.html": 5387554071243242205, + "venv/lib/python3.13/site-packages/itsdangerous/timed.py": 12571102606719555007, + "venv/lib/python3.13/site-packages/sqlalchemy/util/typing.py": 17638587764345605306, + "venv/lib/python3.13/site-packages/uvicorn/protocols/http/httptools_impl.py": 10367325397209016951, + "venv/lib/python3.13/site-packages/pygments/lexers/x10.py": 6167378515780115912, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/METADATA": 9041650844081036822, + "docs/api/html/group__fetchData__Function.html": 12479170828711469156, + "docs/api/html/group__getReports__Function.html": 10989136831349411204, + "docs/api/html/group__test__permission__denied__all__actions.html": 9271173936930380116, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/WHEEL": 5838667082726674838, + "frontend/src/routes/dashboards/[id]/components/DashboardLinkedResources.svelte": 2349700459673295788, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/__init__.py": 15130871412783076140, + "docs/api/html/group__UserUpdate.html": 17001565136687815956, + "docs/api/html/group____resolve__candidate__and__report.html": 16524530636169236472, + "venv/lib/python3.13/site-packages/numpy/ma/extras.py": 7559838309481824664, + "docs/api/html/group__TaskDrawerStoreTest__Module.html": 12333000150269624051, + "backend/src/services/clean_release/stages/base.py": 14966559035592717091, + "docs/api/html/group__test__build__dataset__preview__query__context__preserves__time__range__from__native__filter__payload.html": 814719278183998378, + "venv/lib/python3.13/site-packages/git/index/fun.py": 18338379518768926372, + "frontend/src/components/TaskHistory.svelte": 4575283937108155085, + "docs/api/html/group__abort__merge.html": 8636553700350043115, + "docs/api/html/search/functions_14.js": 8813812505202203027, + "venv/lib/python3.13/site-packages/h11/_version.py": 9334144031400715479, + "docs/api/html/group____filters__imports.html": 16499647191503680899, + "docs/api/html/group__test__no__schema__qualified__tables.html": 4881082392133398377, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_cumulative.py": 11752712818547022872, + "venv/lib/python3.13/site-packages/charset_normalizer/__main__.py": 8887772289570078278, + "docs/api/html/group__test__get__dashboards__profile__filter__no__match__results__contract.html": 6248644768287182615, + "backend/src/services/clean_release/dto.py": 16033619016556005561, + "docs/api/html/group__frontend__src__lib__utils__js____cn.html": 8947971455954097415, + "docs/api/html/group__load__Function.html": 10190139410181623652, + "docs/api/html/group__test__jinja__string__concat.html": 16396089337050427793, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7636/__init__.py": 913610541217778747, + "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/METADATA": 16700674024421191168, + "venv/lib/python3.13/site-packages/numpy/random/_philox.cpython-313-x86_64-linux-gnu.so": 9916143171057774705, + "docs/api/html/group__LaunchDatasetResponse.html": 17085095085234548738, + "venv/lib/python3.13/site-packages/pandas/core/computation/expressions.py": 10684284531040203747, + "venv/lib/python3.13/site-packages/click/decorators.py": 2920877667855377423, + "docs/api/html/group__test__release__candidate__valid.html": 9747216871494350774, + "venv/lib/python3.13/site-packages/pip/_internal/cli/spinners.py": 7664056305019151182, + "docs/api/html/group__frontend__src__services__git__utils__js____applyGitflowStageDefaults.html": 10826927969679877530, + "backend/src/plugins/migration.py": 10457528901248546685, + "docs/api/html/group__ResourceMapping.html": 12067212261017894140, + "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/METADATA": 14070889071949105584, + "docs/api/html/group__ReportsApiTest.html": 634823893276138685, + "docs/api/html/group__addToast__Function.html": 13046327232086323563, + "docs/api/html/group__LoggingSettings.html": 1027847486912759228, + "docs/api/html/group__FileIO.html": 16081394467127736340, + "docs/api/html/group__run__approve.html": 18017929900631845017, + "venv/lib/python3.13/site-packages/pandas/tests/config/test_config.py": 4630144191929135452, + "frontend/src/lib/auth/permissions.js": 7186663483939824478, + "docs/api/html/group__test__get__sources.html": 11705664249388270176, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/zookeeper.py": 4318643109309626098, + "venv/lib/python3.13/site-packages/numpy/random/_sfc64.cpython-313-x86_64-linux-gnu.so": 17186695607612591922, + "docs/api/html/globals_func_c.html": 11616926192994037587, + "docs/api/html/group__ColumnDescriptionUpdate.html": 13860285606848382812, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_indexing.py": 16291207621268530224, + "docs/api/html/group__sanitize__text.html": 15662367841313346736, + "venv/lib/python3.13/site-packages/numpy/lib/user_array.pyi": 1968484998382771986, + "docs/api/html/group__SourceIntakePanel.html": 556586784232827301, + "docs/api/html/group__TranslateHistoryPage.html": 13167035080416259682, + "docs/api/html/group____build__banner__text__for__dashboard.html": 5689918064001964476, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro_py.py": 11991492232381887787, + "docs/api/html/group____make__requests__http__error.html": 13378194080112951253, + "venv/lib/python3.13/site-packages/httpx/_multipart.py": 2181282475656908730, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/scope.py": 4096190764836489091, + "venv/lib/python3.13/site-packages/numpy/core/_dtype_ctypes.py": 17055498803745289016, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/aioodbc.py": 12704729841432715246, + "docs/api/html/group__delete__task__with__logs.html": 14316927894050853121, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_windows_renderer.py": 1076842273781909680, + "frontend/src/routes/datasets/review/__tests__/dataset_review_entry.ux.test.js": 3080911695504204499, + "docs/api/html/group__get__run__status.html": 4185917444778756301, + "docs/api/html/group__LaunchConfirmationPanel.html": 10912367734580070482, + "docs/api/html/group__test__schedule__not__found__skips.html": 10866822650203142876, + "docs/api/html/group____FakeQueryDel.html": 12251734858726214042, + "docs/api/html/group__SupersetContextExtractorBase____decode__query__state.html": 5669940893460409072, + "venv/lib/python3.13/site-packages/pandas/tests/resample/conftest.py": 1643522609234951699, + "docs/api/html/group__GitPluginModule.html": 9711439707382347339, + "venv/lib/python3.13/site-packages/pygments/styles/arduino.py": 4578385147314541233, + "docs/api/html/group__test__transform__yaml__nonexistent__file.html": 12815312108870320072, + "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/METADATA": 18410956221497090898, + "docs/api/html/group__remove__chart__from__layout.html": 9632071695913277477, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_api.py": 16743710460729009914, + "docs/api/html/group____flusher__loop.html": 18087124842264758700, + "venv/lib/python3.13/site-packages/_pytest/pytester_assertions.py": 1899505062406979663, + "docs/api/html/group__confirmAssistantOperation__Function.html": 12036132904812216461, + "frontend/tests/maintenance.test.ts": 18128393571681331195, + "venv/lib/python3.13/site-packages/greenlet/tests/test_generator_nested.py": 12822240347707346718, + "venv/lib/python3.13/site-packages/websockets/asyncio/connection.py": 17044409627448400723, + "docs/api/html/group__BackupsPage.html": 927182552608523101, + "venv/lib/python3.13/site-packages/jeepney/wrappers.py": 15234251727654692435, + "docs/api/html/group____process__states__for__end.html": 17185750365367165889, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/__init__.py": 7062045842767697645, + "docs/api/html/group__test__setActiveItem__Function.html": 8801230193725679964, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_dict_compat.py": 18196543090455290455, + "docs/api/html/group__SemanticCandidate.html": 16155484952491481356, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timezones.cpython-313-x86_64-linux-gnu.so": 1137453907225619959, + "venv/lib/python3.13/site-packages/urllib3/_base_connection.py": 14495079097019980154, + "frontend/src/lib/api/reports.js": 12520710039739782171, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_period.py": 15671388508498441412, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data": 9599129816090399315, + "docs/api/html/group__Token.html": 5997049889797174101, + "venv/lib/python3.13/site-packages/fastapi/openapi/utils.py": 9058442333718187759, + "docs/api/html/group__DatasetReviewExecutionModels.html": 15585823821459317231, + "venv/lib/python3.13/site-packages/numpy/_core/_multiarray_umath.cpython-313-x86_64-linux-gnu.so": 2888939866336522308, + "docs/api/html/group__user__roles.html": 5258273442326465678, + "docs/api/html/group__test__parse__dashboard__url__for__filters__native__key__slug.html": 10954317903886069968, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_rewrite_warning.py": 4895919872954538758, + "venv/lib/python3.13/site-packages/pandas/core/computation/expr.py": 13085709365673019494, + "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/idna/intranges.py": 12536174834761591006, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/models.py": 17356033861792227817, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_frame.py": 4303613319747945709, + "docs/api/html/group__MaintenanceEventItem.html": 15520444473677444041, + "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/RECORD": 963865046004908868, + "venv/lib/python3.13/site-packages/anyio/_core/_eventloop.py": 6853955946028131785, + "venv/lib/python3.13/site-packages/websockets/speedups.pyi": 10322382420215791091, + "venv/lib/python3.13/site-packages/pillow.libs/libopenjp2-94e588ba.so.2.5.4": 2483101806045986252, + "venv/lib/python3.13/site-packages/numpy/_core/lib/npy-pkg-config/npymath.ini": 1071371630695963467, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/decl_base.py": 8678387511873412922, + "backend/src/api/routes/dashboards/_schemas.py": 4116381929361209080, + "docs/api/html/group__TestResourceHubs.html": 18340295788009698355, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_gcs.py": 7733247456252965901, + "examples/maintenance-api-python.py": 18279360934407602079, + "venv/lib/python3.13/site-packages/pip/__pip-runner__.py": 1138979712722199296, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_indexing.py": 16264430536704066847, + "docs/api/html/group__StoredFile.html": 17068629307196027308, + "docs/api/html/group__discover__declared__permissions.html": 14317626307828346282, + "docs/api/html/group__SupersetContextTemplatesMixin____append__template__variable.html": 14259073888034384633, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath_accuracy.py": 3904008607472505376, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/setup.py": 5482352991573617756, + "docs/api/html/group__DictionaryCorrectionService.html": 5320595430025547036, + "docs/api/html/group__test__reload__validation__policy__adds__job.html": 1850773905928943851, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/elements.py": 11185011314498348980, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufunc_config.py": 14728417910466146460, + "docs/api/html/group__LLMProviderService.html": 12709095326863843331, + "docs/api/html/group__test__lookup__superset__accounts__success.html": 21505406146454782, + "venv/lib/python3.13/site-packages/attr/_compat.py": 4016698632899969390, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/base.py": 10200916670889920659, + "docs/api/html/group__test__empty__content.html": 11172556345158624109, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/METADATA": 3643456577199395707, + "docs/api/html/group__resume__task.html": 10211397007728257393, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_scalar_compat.py": 1306236983392218709, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_calendar.py": 12313641252472031631, + "docs/api/html/group__frontend__src__services__git__utils__js____isNumericDashboardRef.html": 10032907620430901043, + "backend/src/core/cot_logger.py": 9539001363130629806, + "backend/src/plugins/translate/sql_generator.py": 14497259013250233663, + "venv/lib/python3.13/site-packages/pandas/tests/apply/common.py": 1113935558495455492, + "venv/lib/python3.13/site-packages/gitdb/fun.py": 55226330810782184, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_dists.py": 16746363359320577809, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/introspection.py": 5447179017910128771, + "backend/src/services/reports/__init__.py": 11818812865847046400, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_join.py": 17874591841487372992, + "backend/src/api/routes/clean_release.py": 9890311709059474429, + "docs/api/html/group__SupersetContextFiltersExtractMixin.html": 8312542412809507085, + "docs/api/html/group____make__preview__ready__session.html": 4654960038289930410, + "venv/lib/python3.13/site-packages/cffi/api.py": 5325821560978502135, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/x448.pyi": 11733449165276720901, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_categorical.py": 10863578845754547294, + "frontend/playwright-report/data/e22baf04065a196fa914a4a2640b3e055cda5768.zip": 2929961739056234978, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_isna.py": 18394053826166267096, + "backend/src/core/rate_limiter.py": 8058892433074032268, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_year.py": 1478857009124807836, + "docs/api/html/group__handleDeleteGiteaRepo__Function.html": 8343489638685254730, + "docs/api/html/group__debug.html": 5353036165559255799, + "docs/api/html/search/close.svg": 6737892306857409458, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_data_list.py": 1131520422778420758, + "backend/src/services/clean_release/manifest_builder.py": 16367921257027024830, + "docs/api/html/group__TranslateRunListRoutesModule.html": 7983808577352812807, + "docs/api/html/group__DashboardHelpers.html": 17415235275942195386, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalar_methods.py": 14881910898871057761, + "docs/api/html/group__get__tasks.html": 6039993422624738994, + "docs/api/html/group__fetchPlugins__Function.html": 3672886601071817310, + "venv/lib/python3.13/site-packages/git/index/base.py": 641556304637379636, + "venv/lib/python3.13/site-packages/numpy/random/c_distributions.pxd": 16574161095720077595, + "frontend/src/routes/storage/+page.svelte": 5003283673039328108, + "venv/lib/python3.13/site-packages/pandas/_libs/reshape.cpython-313-x86_64-linux-gnu.so": 10639750501333255943, + "docs/api/html/group__MetricsResponse.html": 2931960474908647551, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/descriptor_props.py": 7044852927393650707, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_http_headers.py": 13187746870209705951, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/interface.py": 3134071530627935964, + "docs/api/html/group__SupersetDatabasesMixin.html": 296914084518346512, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/__init__.py": 15130871412783076140, + "frontend/build/_app/immutable/nodes/17.Dbd7wpxW.js": 11111564486711173973, + "docs/api/html/group____cleanup__history__ttl.html": 12209285080355144481, + "venv/lib/python3.13/site-packages/pandas/_libs/writers.pyi": 10494773026133244183, + "venv/lib/python3.13/site-packages/urllib3/_request_methods.py": 13671055114247516883, + "docs/api/html/group__AsyncAPIClient____is__dashboard__endpoint.html": 11542093610496385064, + "docs/api/html/navtreeindex3.js": 4980194464875678268, + "docs/api/html/tab_a.png": 119030213786483377, + "docs/api/html/group__test__sanitize__imported__filter__for__assistant__masks__sensitive__raw__values.html": 9414613568874782438, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/DamerauLevenshtein.py": 17993169044119596860, + "venv/lib/python3.13/site-packages/pip/_internal/cli/__init__.py": 11914508471759255927, + "docs/api/html/group__GitReleasePanel.html": 2228780701983179318, + "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/oauth1_session.py": 1911069558956893789, + "docs/api/html/group__FieldKind.html": 4665292646026475164, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/authenticate_client.py": 16886645731942472285, + "venv/lib/python3.13/site-packages/numpy/_configtool.pyi": 9670892208858157218, + "venv/lib/python3.13/site-packages/pygments/styles/abap.py": 11543320440974964547, + "venv/lib/python3.13/site-packages/pandas/_testing/__init__.py": 10127496080404419481, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/base.py": 16052592982063844259, + "frontend/src/lib/components/reports/__tests__/reports_filter_performance.test.js": 6358696236009732713, + "backend/tests/test_api_key_auth.py": 15854247672009604904, + "docs/api/html/group____base__imports.html": 13349247487959032441, + "docs/api/html/group__now.html": 883313604471122224, + "docs/api/html/group__ComplianceStageContext.html": 15065570275790964378, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/reflection.py": 5951113078754792806, + "docs/api/html/group__MaintenanceModels.html": 14224150703489813843, + "venv/lib/python3.13/site-packages/greenlet/PyGreenlet.cpp": 7360124705400993707, + "docs/api/html/group__get__repository__binding.html": 642256703362197453, + "venv/lib/python3.13/site-packages/pandas/tests/frame/common.py": 7426635866622531875, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/fields.py": 10090313990429695520, + "venv/lib/python3.13/site-packages/uvicorn/middleware/message_logger.py": 14825516604555033580, + "frontend/src/routes/datasets/review/[id]/+page.svelte": 3692143812318259790, + "venv/lib/python3.13/site-packages/attrs/setters.py": 5775359015245600592, + "venv/lib/python3.13/site-packages/sqlalchemy/util/queue.py": 1289234691048379395, + "docs/api/html/group__test__duplicate__job__custom__name.html": 1186685615290746284, + "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__NavigationContracts.html": 585565417315368787, + "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/licenses/LICENSE": 11986475601091748012, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_textreader.py": 388955620768371652, + "venv/lib/python3.13/site-packages/py.py": 16248211404003181569, + "venv/lib/python3.13/site-packages/pandas/api/indexers/__init__.py": 17431573013142626187, + "frontend/build/_app/immutable/chunks/DGNzAwKo.js": 17568648881596997070, + "docs/api/html/group__TestReportsOpenapiConformance.html": 14837764071303153325, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_at_time.py": 15352346149584081864, + "venv/lib/python3.13/site-packages/numpy/random/_sfc64.pyi": 3536657185495782642, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/privatemod.f90": 8999550841368314739, + "venv/lib/python3.13/site-packages/pandas/core/reshape/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/__init__.py": 14951958843029076911, + "docs/api/html/group__frontend__src__services__storageService__js____getStorageAuthHeaders.html": 18312324080831107841, + "venv/lib/python3.13/site-packages/urllib3/util/url.py": 15992369651965016538, + "venv/lib/python3.13/site-packages/jeepney/bus.py": 5163075760432139100, + "docs/api/html/group__test__get__logs__with__pagination.html": 2508602189967508929, + "docs/api/html/navtreeindex17.js": 16370759160904060398, + "venv/lib/python3.13/site-packages/greenlet/tests/test_greenlet.py": 10727595500186011102, + "venv/lib/python3.13/site-packages/sqlalchemy/future/engine.py": 4639404437703898767, + "frontend/build/_app/immutable/nodes/5.CvEvHdok.js": 7069431821432479784, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_bcrypt.py": 11146468670439284889, + "venv/lib/python3.13/site-packages/pandas/core/internals/ops.py": 4740509262379451243, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/operators.py": 2468046993343796128, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufunc_config.pyi": 11754104063443791746, + "venv/lib/python3.13/site-packages/numpy/f2py/use_rules.py": 17277594393032382485, + "docs/api/html/group____discover__plugin__execute__permissions__cached.html": 2910829467411233416, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_riscv_unix.h": 8607317131295864391, + "venv/lib/python3.13/site-packages/numpy/_core/_methods.py": 16805668769357938792, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_numba.py": 6409810497251251179, + "venv/lib/python3.13/site-packages/click/exceptions.py": 9734955259447933725, + "venv/lib/python3.13/site-packages/rapidfuzz/utils_cpp.cpython-313-x86_64-linux-gnu.so": 16145829319198889672, + "backend/src/plugins/llm_analysis/__tests__/test_screenshot_service.py": 359905908083162759, + "docs/api/html/group__profile__service.html": 18177058371654387128, + "docs/api/html/group__TargetSchemaValidationRequest.html": 12191974137983183185, + "docs/api/html/group__docker__backend__entrypoint__install__playwright.html": 13661351030986705030, + "docs/api/html/group__TranslationPreviewResponse.html": 10623704899221380546, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_astype.py": 7497268667246913350, + "docs/api/html/group__TranslationRunResponse.html": 11155567943243725782, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_invalid_arg.py": 610891871484326055, + "docs/api/html/group__ProfileFixtures__Module.html": 11831895659314053968, + "docs/api/html/group__frontend__src__services__adminService__js____getLoggingConfig.html": 10395249450462043320, + "venv/lib/python3.13/site-packages/authlib/common/encoding.py": 52296066492753953, + "venv/lib/python3.13/site-packages/pandas/util/_doctools.py": 3766479022075611396, + "docs/api/html/group__getAssistantHistory__Function.html": 15491234740107286264, + "docs/api/html/search/all_d.js": 15064235828292081974, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/provider.py": 16463243654123731993, + "venv/lib/python3.13/site-packages/numpy/lib/_type_check_impl.py": 15989335816452913951, + "docs/api/html/tab_sd.png": 7906432400932174880, + "venv/lib/python3.13/site-packages/pandas/_libs/parsers.pyi": 18402185996588014111, + "docs/api/html/group__test__throttled__scheduler.html": 9291093931746926808, + "venv/lib/python3.13/site-packages/numpy/strings/__init__.py": 6523674574341354095, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_conversion.py": 12184280074522274780, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/decl_class.py": 6328411894571735935, + "venv/lib/python3.13/site-packages/numpy/_core/overrides.pyi": 13121243505132110607, + "venv/lib/python3.13/site-packages/pygments/lexers/rebol.py": 10460732731157940232, + "docs/api/html/group__DatasetDetailResponse.html": 5915339838963904539, + "backend/src/models/__tests__/test_clean_release.py": 9937664704633848570, + "docs/api/html/group__clean__text.html": 5688432700406149182, + "docs/api/html/group__SupersetClientGetDashboardsPage.html": 14973966407203177325, + "docs/api/html/group__test__dataset__review__scoped__command__returns__confirmation__for__mapping__approval.html": 2557882480884590809, + "venv/lib/python3.13/site-packages/pip/_internal/utils/unpacking.py": 106471890743211548, + "frontend/postcss.config.js": 5714274776976071678, + "docs/api/html/group__test__patch__dashboard__metadata__replaces__chart__ids.html": 13396557809840355456, + "frontend/src/lib/components/translate/TranslationRunProgress.svelte": 12659537213220151902, + "docs/api/html/group__handleDelete__Function.html": 16605529400179631647, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_read.py": 8825002468745406134, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/__init__.py": 6489437464172324468, + "docs/api/html/group____require__session__version__header.html": 2001910810017263415, + "venv/lib/python3.13/site-packages/jsonschema_specifications/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_internal/models/installation_report.py": 14534544543677907640, + "frontend/src/lib/api/translate/dictionaries.js": 13928848549982189213, + "docs/api/html/group__trigger__run.html": 4132187777294958921, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_map.py": 4761668276463940924, + "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/dtype_api.h": 17040779421165903019, + "docs/api/html/group__test__progress__log.html": 16396212906693979688, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/missing.py": 11241703105777668183, + "docs/api/html/group__ProfilePreferencesIntegrationTest.html": 5649513853335976994, + "venv/lib/python3.13/site-packages/pydantic/validate_call_decorator.py": 11130572937843915026, + "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/test_from_dict.py": 4937173601709369119, + "docs/api/html/group__test__legacy__prepare__endpoint__still__available.html": 4064504421429684226, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_analytics.py": 4510712334676848202, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_categorical.py": 9615571808720893016, + "backend/src/services/clean_release/publication_service.py": 7731809712174358922, + "docs/api/html/group__save__recovery__state.html": 16571398624709231386, + "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/licenses/LICENSE": 14524289631770661180, + "docs/api/html/group__test__api__key__auth__wrong__permission.html": 546528114053680205, + "docs/api/html/group__SupersetClientExportDashboard.html": 9407120539221335337, + "frontend/src/lib/components/translate/__tests__/test_correction_cell.svelte.js": 7400069550465334990, + "backend/src/api/routes/__tests__/test_assistant_api.py": 14069847490001200210, + "docs/api/html/group__ClarificationOption.html": 4855555471647664817, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_get_numeric_data.py": 11747933921770969706, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____endEvent.html": 8695734456482640318, + "docs/api/html/group__update__environment.html": 9173380704665104139, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/authorization_server.py": 13696038495666024258, + "venv/lib/python3.13/site-packages/yaml/scanner.py": 8554164423030397366, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_excel.py": 5467043641314706635, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/abstract_interface/foo.f90": 14491312943942432024, + "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_enc_cryptography.py": 4383854709657749855, + "frontend/src/lib/api/translate/corrections.js": 3619404083693055292, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/implicit.py": 7379110378465568776, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_cpp_exception.py": 11851283355840567373, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-exp2.csv": 10950201682596097452, + "venv/lib/python3.13/site-packages/PIL/FontFile.py": 112053841436523305, + "docs/api/html/group__test__get__schedule__not__found.html": 2262227817332764614, + "docs/api/html/group__getStorageAuthHeaders__Function.html": 16351303303145823090, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/json.py": 4660603129768960095, + "frontend/playwright-report/trace/xtermModule.DYP7pi_n.css": 9346562810570076139, + "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/array.py": 1919242530821725197, + "docs/api/html/group__SupersetClientGetDashboardsSummary.html": 6037771020479068589, + "docs/api/html/group__upload__file.html": 3260287998952682208, + "venv/lib/python3.13/site-packages/pillow.libs/libwebpdemux-747f2b49.so.2.0.17": 7615380692384566654, + "venv/lib/python3.13/site-packages/annotated_doc/py.typed": 15130871412783076140, + "docs/api/html/group__setAssistantDatasetReviewSessionId__Function.html": 9358397705824505617, + "venv/lib/python3.13/site-packages/passlib/tests/test_registry.py": 15377817946543064293, + "venv/lib/python3.13/site-packages/pyasn1/codec/cer/decoder.py": 17559787396729804535, + "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/fields.py": 8923326131649837922, + "venv/lib/python3.13/site-packages/pygments/lexers/go.py": 11118104397271513417, + "docs/api/html/group__test__parse__dashboard__url__for__filters__native__filters__direct.html": 15481616716847220529, + "docs/api/html/group__TaskType.html": 10021229358037103244, + "backend/src/core/utils/fileio.py": 8848681882907859355, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_ordered.py": 13827016781743929164, + "venv/lib/python3.13/site-packages/passlib/tests/test_apps.py": 10454136535890937237, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_isin.py": 8136794647591341784, + "docs/api/html/group__SessionRepositoryMutations.html": 18413228896823064680, + "backend/ss_tools_backend.egg-info/PKG-INFO": 15134841326777953914, + "venv/lib/python3.13/site-packages/pip/_internal/index/package_finder.py": 12631116673181479779, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_npfuncs.py": 8238385897366878558, + "venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py": 1419719055394402145, + "docs/api/html/group__MaintenanceComponentTests.html": 2439633927977952953, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_compat.py": 11481259393140789881, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_compare.py": 3079569478684646491, + "frontend/src/routes/settings/MigrationMappingsTable.svelte": 574459541553883663, + "venv/lib/python3.13/site-packages/keyring/completion.py": 1027436016070040568, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_parse_iso8601.py": 9100947620267156161, + "backend/src/core/utils/async_network.py": 7880952036357722891, + "venv/bin/activate.fish": 5275961582873298085, + "frontend/src/routes/translate/dictionaries/+page.svelte": 1038433841421198720, + "docs/api/html/group__venv__lib__python3__13__site__packages__greenlet__TThreadState__hpp____ThreadState.html": 17071810675918401264, + "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/licenses/LICENSE": 10253862887434903467, + "docs/api/html/group__test__empty__tables.html": 4751367125471660220, + "venv/lib/python3.13/site-packages/passlib/handlers/__init__.py": 3424087230285514388, + "venv/lib/python3.13/site-packages/packaging/version.py": 13470993734108007779, + "venv/lib/python3.13/site-packages/pip/_internal/utils/packaging.py": 15555781487631855604, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____setSession.html": 5227957195092266456, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_timedelta.py": 12822713918114715561, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/__init__.py": 15130871412783076140, + "docs/api/html/group__SupersetClientGetDataset.html": 11557014812456007471, + "docs/api/html/group__mask__api__key.html": 16683069110574371100, + "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/METADATA": 15888766579203341778, + "venv/lib/python3.13/site-packages/yaml/loader.py": 18284689412149643959, + "backend/git_repos/remote/test-repo.git/objects/17/66251d8cb2693136e09ea3def3e776559cb722": 1137762010493457272, + "docs/api/html/group__test__error__state.html": 9960175687355518879, + "venv/lib/python3.13/site-packages/click/py.typed": 15130871412783076140, + "docs/api/html/group__TestSettingsAndHealthSchemas.html": 3643400458745019094, + "venv/lib/python3.13/site-packages/authlib/integrations/django_client/integration.py": 13610682193839598457, + "venv/lib/python3.13/site-packages/numpy/_typing/_add_docstring.py": 14657346268890680694, + "venv/lib/python3.13/site-packages/authlib/jose/__init__.py": 317573635113539563, + "venv/lib/python3.13/site-packages/PIL/EpsImagePlugin.py": 1824020964179364491, + "venv/lib/python3.13/site-packages/jeepney/io/tests/test_trio.py": 7459901627473962540, + "docs/api/html/group__test__migrate__dashboards__pre__checks.html": 3207110507188780911, + "venv/lib/python3.13/site-packages/bcrypt/_bcrypt.pyi": 15067467792538416274, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh26920/two_mods_with_no_public_entities.f90": 12296500845667555672, + "backend/src/plugins/search.py": 13705421801923369220, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/__init__.py": 1948986914452928735, + "docs/api/html/group____get__default__tz__name.html": 1065268266892012697, + "docs/api/html/group__DatabaseResponse.html": 9450948146278252865, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_any_index.py": 10800968419286329268, + "docs/api/html/group__test__get__repository__status__returns__no__repo__payload__for__missing__repo.html": 12740974116041500221, + "venv/lib/python3.13/site-packages/numpy/lib/recfunctions.py": 3001896031623204147, + "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/LICENSE": 16510279186416777136, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/boxplot.py": 7090586111222952862, + "venv/lib/python3.13/site-packages/numpy/core/numerictypes.py": 5776941405348611027, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_astype.py": 6578539240745332772, + "docs/api/html/folderopend.svg": 12848593963915777968, + "docs/api/html/group__handleDownload__Function.html": 4146074044892202143, + "docs/api/html/navtreeindex4.js": 237051005493385994, + "docs/api/html/group__test__report__models.html": 3181628753533046372, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____loadEvents.html": 2661201656392934757, + "docs/api/html/group__test__get__log__stats.html": 13273447744955427101, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked_shared.py": 8453174300922339015, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/__init__.py": 15130871412783076140, + "docs/api/html/group__is__masked__or__placeholder.html": 8401491085323739641, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/cx_oracle.py": 10093932131797570986, + "frontend/build/index.html": 7811861699760349510, + "venv/lib/python3.13/site-packages/pygments/lexers/erlang.py": 11757064262773184741, + "docs/api/html/group__DuplicateJobResponse.html": 4274099317404144755, + "docs/api/html/group__delete__provider.html": 17051246773127866409, + "venv/lib/python3.13/site-packages/pandas/core/reshape/pivot.py": 4736553530021653868, + "frontend/src/lib/components/layout/TopNavbar.svelte": 16154704878262712977, + "venv/lib/python3.13/site-packages/annotated_types/py.typed": 15130871412783076140, + "backend/src/api/routes/environments.py": 6175447476823722833, + "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/RECORD": 1051307407005554409, + "docs/api/html/group__preview__session__ops.html": 10729427969834726798, + "docs/api/html/group____coerce__query__bool.html": 12206666042007651766, + "venv/lib/python3.13/site-packages/iniconfig/_parse.py": 11418441008427032090, + "docs/api/html/group__generate__uuid.html": 5567603167679991463, + "venv/lib/python3.13/site-packages/passlib/crypto/digest.py": 15890463288512025688, + "backend/src/core/utils/superset_context_extractor/_recovery.py": 11393453671559067169, + "docs/api/html/group__handleValidate__Function.html": 2317767928210351135, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/__init__.py": 15130871412783076140, + "frontend/build/_app/immutable/chunks/Dul6iTE7.js": 10339509389374345579, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/array_constructors.py": 6727209833819502644, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_snap.py": 4515844385819802784, + "venv/lib/python3.13/site-packages/packaging/licenses/__init__.py": 15879493360260891293, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data": 11957232619107868023, + "backend/src/core/utils/superset_compilation_adapter.py": 13895835815393226662, + "docs/api/html/group__PermissionsTest__Module.html": 11555877868744698217, + "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_rolling.py": 11118160360072677569, + "backend/src/models/__tests__/test_models.py": 7136192055672203219, + "docs/api/html/group__createAuthStore__Function.html": 15632886189609660791, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_assign.py": 2647902466315482406, + "docs/api/html/group__approval__repository.html": 7564608071995148831, + "docs/api/html/group__DatasourceColumnsResponse.html": 1250225195653267212, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_aarch64_gcc.h": 8140470539757491899, + "venv/lib/python3.13/site-packages/pydantic/plugin/__init__.py": 16803973597469216174, + "backend/src/services/git/_merge.py": 13573452468406399167, + "docs/api/html/group__get__metrics.html": 15776096111007526779, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_mips_unix.h": 17373389962405490482, + "docs/api/html/group__SQLInsertService.html": 818564019015064565, + "venv/lib/python3.13/site-packages/pandas/tests/test_col.py": 14781555956509956371, + "backend/src/services/clean_release/repositories/__init__.py": 10330511711442503831, + "venv/lib/python3.13/site-packages/click/_winconsole.py": 8133229457213704188, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/LICENSE": 6774760218010069963, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_astype.py": 11386658862732393123, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/wrapper.py": 4633931060151989960, + "backend/alembic/README": 17625003422504608299, + "docs/api/html/group__SupersetClientBuildDatasetPreviewQueryContext.html": 18205655956081911529, + "docs/api/html/group__SupersetClientGetCharts.html": 6360695148314682778, + "venv/lib/python3.13/site-packages/attr/setters.pyi": 6670509359139243236, + "docs/api/html/group__TranslateJobTests.html": 10178968892133505657, + "backend/src/services/llm_prompt_templates.py": 16176053862101644239, + "backend/src/plugins/translate/preview_constants.py": 12447768695944862994, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/RECORD": 12555714734722889695, + "venv/lib/python3.13/site-packages/pygments/lexers/tnt.py": 4657130609241407766, + "build.sh": 5842665574427443016, + "docs/api/html/group__MappingCollectionResponse.html": 393143085518008707, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_printing.py": 1901396869745313303, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/strategies.py": 14007486769065345085, + "venv/lib/python3.13/site-packages/pygments/lexers/ooc.py": 14540210212631538007, + "docs/api/html/group__test__get__repository__status__propagates__non__404__http__exception.html": 2565945077269641492, + "backend/src/api/routes/assistant/_history.py": 7072732884181135864, + "venv/lib/python3.13/site-packages/pandas/core/api.py": 3390809109543982410, + "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/ext.py": 15699809032725838985, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py": 6712732248328458871, + "docs/api/html/group__unsubscribe__dataset__events.html": 1558763019678339438, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/getlimits.pyi": 93747984191461691, + "docs/api/html/group____normalize__superset__env__url.html": 13235708743999854328, + "venv/lib/python3.13/site-packages/pandas/_libs/internals.cpython-313-x86_64-linux-gnu.so": 2008633361686956377, + "venv/lib/python3.13/site-packages/pyasn1/codec/native/encoder.py": 120921270972591880, + "docs/api/html/group__DatasetReviewApi.html": 5473514434428079682, + "docs/api/html/search/functions_e.js": 16386749146387179095, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/endpoint.py": 13389763148720370546, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/__init__.py": 15130871412783076140, + "docs/api/html/group__ADGroupMapping.html": 9762691734208300582, + "docs/api/html/group__test__get__report__detail__success.html": 15353646901351166916, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_fields.py": 16222559851336781264, + "frontend/src/routes/tools/mapper/+page.svelte": 11733240042848459104, + "docs/api/html/group____build__insert__rows.html": 14245761913362401637, + "backend/src/models/filter_state.py": 9299838116029912439, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_ops.py": 14420421526781215500, + "docs/api/html/group____ensure__llm__validation__results__columns.html": 11439277965253958659, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/METADATA": 9458019064618635438, + "docs/api/html/group____extract__result__payload.html": 866721391193515598, + "docs/api/html/navtreeindex13.js": 13124871548171693035, + "frontend/build/_app/immutable/chunks/BEgtrFG1.js": 8322179021947182552, + "docs/api/html/group__test__rebuild__active__banner.html": 5240773112878811635, + "docs/api/html/group__GitServerConfigBase.html": 14855349343114147443, + "docs/api/html/group__openAssistantChat__Function.html": 13650659288497145081, + "backend/git_repos/remote/test-repo.git/hooks/post-update.sample": 4288868784459664203, + "docs/api/html/group__headers.html": 18390732070560226439, + "docs/api/html/group____resolve__or__create__conversation.html": 8613625745536476404, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_jsonschema_test_suite.py": 12733761462141495972, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/ansi.py": 948249091929588017, + "venv/lib/python3.13/site-packages/urllib3/util/response.py": 6106698559175827207, + "docs/api/html/group__test__task__crash__mid__run__marks__failed.html": 17772358674218724371, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_non_compound.f90": 8048650253889213460, + "venv/lib/python3.13/site-packages/numpy/lib/_twodim_base_impl.py": 4154852745131464543, + "docs/api/html/group__candidate__service.html": 9508293729016004404, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____endAllMaintenance.html": 9764396289727492852, + "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/fallback.py": 4260636031748548345, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_dict.py": 808180749933361743, + "docs/api/html/group__AsyncSupersetClientModule.html": 9966218695940620420, + "venv/lib/python3.13/site-packages/websockets/sync/router.py": 10335595955948355382, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log10.csv": 13441294827017400897, + "venv/lib/python3.13/site-packages/cryptography/utils.py": 18088508841978595788, + "docs/api/html/group__SourceIntakePanelUxTests__Module.html": 16574757076650646043, + "docs/api/html/group__test__parse__superset__link__dashboard__permalink__partial__recovery.html": 2884738583447431524, + "docs/api/html/group__PluginsRouter.html": 17546343283725473848, + "venv/lib/python3.13/site-packages/anyio/_core/_tempfile.py": 230288423480899091, + "docs/api/html/group__setUser__Function.html": 17905907968752822833, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/licenses/LICENSE": 12688029424398428498, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_datetimeindex.py": 14816894350435545024, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/__init__.py": 8811477458865810434, + "frontend/src/components/git/ConflictResolver.svelte": 12314421232300049275, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/__init__.py": 8807410829260170597, + "docs/api/html/group__preview__translation.html": 3914934483187354741, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.pyx": 11739218099400096619, + "frontend/build/_app/immutable/nodes/21.DfehgIvZ.js": 15936430434341718519, + "backend/src/plugins/llm_analysis/__tests__/test_client_headers.py": 6499914987034257707, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_constructors.py": 3440572832185940666, + "docs/api/html/group__AssistantChatStore.html": 13379737640010123041, + "docs/api/html/group__ClarificationAnswerResultResponse.html": 9302017620017253639, + "docs/api/html/globals_h.html": 17479549949189588951, + "docs/api/html/group__BulkCorrectionSidebar.html": 5126405434557743105, + "docs/api/html/group__resolve__namespace.html": 18066940045737474091, + "venv/lib/python3.13/site-packages/PIL/MpegImagePlugin.py": 7726254767528154514, + "frontend/src/lib/components/reports/__tests__/report_card.ux.test.js": 10328656559485751380, + "docs/api/html/globals_o.html": 15925482099999156324, + "docs/api/html/group__frontend__src__lib__api__validation__js____fetchRuns.html": 486975390462306986, + "venv/lib/python3.13/site-packages/starlette/middleware/sessions.py": 11719848399661632707, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/automap.py": 4672057253309608464, + "docs/api/html/group__archive__exports.html": 9704090435080462719, + "frontend/src/lib/stores/activity.js": 10599836924066718828, + "venv/lib/python3.13/site-packages/pydantic/_internal/_forward_ref.py": 10623110912945011703, + "docs/api/html/group__MergeSpec.html": 4696541116430893567, + "venv/lib/python3.13/site-packages/PIL/ImageSequence.py": 16459886231802763032, + "docs/api/html/group__PreviewPromptBuilder.html": 1054343519842154092, + "backend/tests/test_dashboards_api.py": 14932659980570012781, + "venv/lib/python3.13/site-packages/idna/idnadata.py": 200840860629525970, + "venv/lib/python3.13/site-packages/pandas/_libs/writers.cpython-313-x86_64-linux-gnu.so": 6878855127769203372, + "venv/lib/python3.13/site-packages/pygments/lexers/configs.py": 7712797939104760185, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/memory.py": 9947113720821563254, + "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/config/test_localization.py": 9524481848419616725, + "docs/api/html/group__resolve__future.html": 11803620953629948836, + "docs/api/html/search/pages_0.js": 9801887205019013612, + "docs/api/html/group__frontend__src__lib__api__validation__js____fetchRunDetail.html": 7905597516894841314, + "docs/api/html/group__SupersetClientInit.html": 12194497519496768637, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/common.py": 10996276696597806957, + "docs/api/html/group__MarkerLogger__reflect.html": 9704040044531782477, + "docs/api/html/group__get__remote__ids__batch.html": 13066542161010026756, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/types.py": 1343652083039949282, + "docs/api/html/group__test__migrate__dashboards__env__not__found.html": 17516663970497083336, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_randomstate.py": 11205714006000849926, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/abstract_interface/gh18403_mod.f90": 6219951399575860362, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_generic.py": 1098361087956787007, + "venv/lib/python3.13/site-packages/pygments/lexers/boa.py": 14409319610243925864, + "frontend/src/routes/migration/+page.svelte": 10701023521907757906, + "docs/api/html/group__db__session.html": 16354950519275316694, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/pymysql.py": 12923876736367229454, + "venv/lib/python3.13/site-packages/jeepney/io/blocking.py": 4699555965372200059, + "venv/lib/python3.13/site-packages/pip/_internal/network/cache.py": 10606522397693824641, + "venv/lib/python3.13/site-packages/urllib3/contrib/__init__.py": 15130871412783076140, + "docs/api/html/group__TranslateJobResponse.html": 12927067343734685379, + "docs/api/html/group__invalidateRepositoryStatuses__Function.html": 3906405379094094913, + "docs/api/html/group__get__all__tasks.html": 11728882406952380263, + "docs/api/html/group__TranslationOrchestrator.html": 6470000776760688783, + "docs/api/html/group____recover__from__markdown.html": 9363288958314889837, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarbuffer.py": 16859789411010045795, + "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_builtin.py": 74545289993348593, + "venv/lib/python3.13/site-packages/pandas/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_processors.py": 16557117595879208702, + "docs/api/html/group__AuthFixture.html": 17387223620144513588, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_cpp.cpython-313-x86_64-linux-gnu.so": 10263790384087091349, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arrayterator.py": 1646530870049791291, + "docs/api/html/group__test__get__dashboards__profile__filter__contract__owners__or__modified__by.html": 190248188377076802, + "docs/api/html/group__test__native__filter__data__mask__model.html": 14477752184631397987, + "docs/api/html/group__add__environment.html": 5721811152365136259, + "docs/api/html/group__TestLogPersistence.html": 3552045492355387515, + "venv/lib/python3.13/site-packages/httpcore/_backends/mock.py": 6849131425727092784, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_describe.py": 11923715539897559626, + "backend/src/plugins/translate/orchestrator_aggregator.py": 1906675302571034503, + "docs/api/html/group__handleRunMapper__Function.html": 4381627270655982198, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/__init__.py": 16211693040174992594, + "venv/lib/python3.13/site-packages/passlib/tests/tox_support.py": 9200774792427691602, + "docs/api/html/group__TargetSchemaHintTest.html": 14589542991368144718, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_size.py": 14032390806503440750, + "docs/api/html/group__WebSocketLogHandler__emit.html": 18196197399566537987, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/__init__.py": 10470644151952252331, + "docs/api/html/group__ApiModule.html": 8246096891534355769, + "docs/api/html/group__src__plugins.html": 5004920650497586279, + "venv/lib/python3.13/site-packages/PIL/TgaImagePlugin.py": 9208942494595222259, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/__init__.py": 10357835306532281617, + "backend/src/plugins/translate/__tests__/test_dictionary_prompt_builder.py": 12854863376472707556, + "docs/api/html/search/all_6.js": 9451005297611312251, + "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_time.py": 10463741033950978270, + "venv/lib/python3.13/site-packages/pandas/io/spss.py": 864838144958947906, + "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/util.py": 18279366777506483176, + "docs/api/html/group__src__core.html": 15005492864993881989, + "docs/api/html/group__test__parsed__native__filters__empty.html": 14083649022229199477, + "venv/lib/python3.13/site-packages/pygments/lexers/jmespath.py": 7426464251945393925, + "docs/api/html/group__get__git__configs.html": 3034817285370598287, + "backend/alembic/versions/9f8e7d6c5b4a_add_is_multimodal_to_llm_providers.py": 11090205342799426943, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_period_index.py": 6634414375581820058, + "docs/api/html/group__log__requests.html": 1562379206737898620, + "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/RECORD": 1556051687830913019, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_time_grouper.py": 3203729024111501071, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_elements_constructors.py": 9279447066034364952, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____mergeCollectionItem.html": 2019932382006674486, + "venv/lib/python3.13/site-packages/pandas/_libs/algos.cpython-313-x86_64-linux-gnu.so": 15706331654215762588, + "frontend/src/components/git/CommitModal.svelte": 12274093894389435426, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____isDashboardValidationBindingValid.html": 18348584692471214107, + "frontend/src/components/git/GitInitPanel.svelte": 515428146955886062, + "docs/api/html/group__create__api__key.html": 9694652778073542091, + "docs/api/html/group__test__delete__run__success.html": 1498123514744381906, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/proxy.py": 13008557041076030198, + "docs/api/html/group__test__create__job__valid.html": 2035819506657562745, + "venv/lib/python3.13/site-packages/pip/_internal/utils/_log.py": 13011536737418204268, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/accessors.py": 12743680296510533030, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/authorization_server.py": 2491654903543600678, + "venv/lib/python3.13/site-packages/websockets/speedups.cpython-313-x86_64-linux-gnu.so": 10941658763526595989, + "venv/lib/python3.13/site-packages/pydantic/_internal/_git.py": 8760779092674434712, + "docs/api/html/group__test__get__next__executions__invalid.html": 11892479945639081834, + "docs/api/html/group__PermissionsTest.html": 1551075608656490066, + "venv/lib/python3.13/site-packages/pydantic/env_settings.py": 18250976255197243083, + "frontend/build/_app/immutable/chunks/DcMPZ_fa.js": 6501595943098370468, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/METADATA": 6596896092754256988, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/METADATA": 5045041742469375466, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/reporters.py": 10760889726586439724, + "venv/lib/python3.13/site-packages/pandas/core/indexers/objects.py": 409599993084996593, + "docs/api/html/group____admin__user.html": 6240483045330435769, + "docs/api/html/group__test__jinja__comment__excluded.html": 17442480642563518330, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_to_xarray.py": 15341013524814290960, + "docs/api/html/group____prepare__owned__session__mutation.html": 12698201251511839350, + "docs/api/html/group__ComplianceCheckRun.html": 5481441428574708297, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_time_series.py": 5205199092955498507, + "docs/api/html/group__StoresMock.html": 2868613847587767061, + "docs/api/html/group__RepoInitRequest.html": 5997274099282176233, + "docs/api/html/group__LLMAnalysisPlugin.html": 4902416040278143520, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_misc.pyi": 7544619194032232861, + "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_xport.py": 14080914637071212225, + "venv/lib/python3.13/site-packages/pandas/io/sas/sas_xport.py": 16525568795475918874, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/naming.py": 14503932124671438340, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_unstack.py": 11834917665446437163, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/random.pyi": 9425735458050148191, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/RECORD": 8104089156015954779, + "venv/lib/python3.13/site-packages/httpcore/_backends/anyio.py": 6167729964577005634, + "venv/lib/python3.13/site-packages/multipart/decoders.py": 11346752866822986212, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/zip-safe": 15240312484046875203, + "frontend/src/routes/settings/notifications/+page.svelte": 11507547877108528071, + "backend/git_repos/remote/test-repo.git/objects/4f/4e0958b3a42eff67a2b8cfd084d05c43e54716": 6040513978194442637, + "docs/api/html/group__validate__job__preconditions.html": 8970079820851005162, + "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/RECORD": 11788532857617688351, + "backend/src/services/__tests__/test_resource_service.py": 7247551330585718683, + "venv/lib/python3.13/site-packages/rapidfuzz/_feature_detector.py": 15458248567257759500, + "venv/lib/python3.13/site-packages/cffi/error.py": 8147505969912539538, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_finalize.py": 12539815426478689538, + "venv/lib/python3.13/site-packages/passlib/handlers/phpass.py": 16489430001449160264, + "backend/src/plugins/translate/preview_llm_client.py": 14412557858942627249, + "docs/api/html/group__TranslateJobService.html": 14826837477872478202, + "venv/lib/python3.13/site-packages/pandas/tests/extension/date/array.py": 18073740473413382768, + "docs/api/html/group__create__ad__mapping.html": 5919069328535603221, + "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_des.py": 7198931807116651263, + "docs/api/html/group__ClarificationAnswerDto.html": 15559720501743641230, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_validate.py": 12789481642730855139, + "backend/src/schemas/dataset_review_pkg/_composites.py": 9530969677898630695, + "docs/api/html/group__ReportsApi__Module.html": 17635169210537766774, + "docs/api/html/group__test__prepare__candidate__blocks__external__source.html": 6336322874440712308, + "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py": 5995058808539530576, + "docs/api/html/group__Role.html": 11260980512040554350, + "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/RECORD": 1164466882742493155, + "docs/api/html/group__TranslationRunLanguageStats.html": 6103116714421346031, + "frontend/src/lib/components/dataset-review/ValidationFindingsPanel.svelte": 6548767763019176627, + "docs/api/html/group__frontend__src__lib__stores__sidebar__js____setActiveItem.html": 1169479244989646628, + "docs/api/html/group__test__api__key__auth__revoked.html": 11241522851613980961, + "docs/api/html/group__frontend__src__services__storageService__js____listFiles.html": 3465282820892681941, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/arrayterator.py": 3076316311545674897, + "docs/api/html/globals_func_o.html": 8547213010974082815, + "venv/lib/python3.13/site-packages/jaraco/context/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/util/_test_decorators.py": 17930801441803090445, + "docs/api/html/group__load__schedules.html": 3794053930475684249, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/instrumentation.py": 14882045449667214075, + "venv/lib/python3.13/site-packages/starlette/applications.py": 13591448461234020757, + "venv/lib/python3.13/site-packages/pandas/core/methods/selectn.py": 13552176539021625776, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/__init__.py": 237070345717942041, + "docs/api/html/group__TranslateCorrectionsApi.html": 9939568944183336332, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation": 4826455560768665215, + "docs/api/html/group__DictionaryEntryCRUD.html": 6734073441533159576, + "docs/api/html/group____EXT__frontend__ReportTypeProfiles__Test__Module.html": 4055177384498479214, + "docs/api/html/group__TranslationPreviewLanguageResponse.html": 7881198517650898374, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/resource_protector.py": 11539718751174980004, + "docs/api/html/group__PreparePreviewCommand.html": 3982816096514415073, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_item_selection.py": 1027989019709029615, + "venv/lib/python3.13/site-packages/dateutil/easter.py": 14631233890122048084, + "venv/lib/python3.13/site-packages/_pytest/_py/error.py": 2257336434271433543, + "docs/api/html/group__get__latest__preview.html": 13518123627661036753, + "docs/api/html/group__AssistantClarificationIntegrationTest__Module.html": 8857034340039410277, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex.tpl": 8820045022551446255, + "venv/lib/python3.13/site-packages/pip/_internal/exceptions.py": 2252826732781519645, + "venv/lib/python3.13/site-packages/pandas/io/excel/_pyxlsb.py": 10035587889954731645, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/engines.py": 10876954465293959720, + "venv/lib/python3.13/site-packages/pygments/lexers/rnc.py": 9747352274729854620, + "frontend/playwright-report/trace/uiMode.Btcz36p_.css": 7361350017361398233, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/request.py": 17642741955458391050, + "frontend/src/lib/api/translate/runs.js": 1220731879179347641, + "frontend/src/routes/datasets/review/ReviewWorkspaceRightRail.svelte": 13437011381072252917, + "venv/lib/python3.13/site-packages/PIL/PdfImagePlugin.py": 16082854250442815862, + "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs_scalars.pyi": 1826323011169529229, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_concat.py": 3788461606817482165, + "docs/api/html/group__make__adapter.html": 7726861153656207298, + "venv/lib/python3.13/site-packages/multipart/exceptions.py": 8580522204565816132, + "docs/api/html/group__TestTaskPersistenceService.html": 12922838788856571301, + "venv/lib/python3.13/site-packages/numpy/lib/array_utils.pyi": 14646405559193539455, + "backend/src/core/plugin_loader.py": 8193009851819399597, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi": 18143251582901996072, + "docs/api/html/group__test__cors__wildcard__default.html": 5002966097368002344, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/create.py": 16693261531832306870, + "venv/lib/python3.13/site-packages/sqlalchemy/util/deprecations.py": 7020540470348910770, + "frontend/src/routes/datasets/__tests__/StatsBar.test.js": 16218511958634350787, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_style.py": 14810883299259169406, + "venv/lib/python3.13/site-packages/pygments/lexers/kusto.py": 16285533608924436308, + "docs/api/html/group__test__start__too__many__tables.html": 8520186301114425960, + "docs/api/html/group__CleanReleaseApi.html": 15834070851858806583, + "docs/api/html/group__test__database__url__env__override.html": 11621545109542978109, + "docs/api/html/group__AssistantHistory.html": 5407469429685717474, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/np_datetime.pyi": 2884703536776830012, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_timedeltaindex.py": 2359681317403710563, + "venv/lib/python3.13/site-packages/jeepney/tests/test_bus.py": 4260827599660763641, + "venv/lib/python3.13/site-packages/PIL/GimpPaletteFile.py": 2040459799887417392, + "docs/api/html/group__test__preview__falls__back__across__matrix__until__supported__endpoint__returns__sql.html": 14400928836202677761, + "docs/api/html/navtree.css": 8480429594731608749, + "frontend/src/routes/settings/EnvironmentsTab.svelte": 13575164255656888464, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____openDrawerForTask.html": 5669096331612000811, + "docs/api/html/group__TestSessionConfig.html": 10172148335639053015, + "backend/src/services/reports/report_service.py": 9387534669439738529, + "backend/git_repos/remote/test-repo.git/objects/22/91d2eb86d77accf7401f8952778809cd1aa4d4": 5120428041118096941, + "docs/api/html/group__DatasetReviewSemanticModels.html": 9045404324038154150, + "venv/lib/python3.13/site-packages/pandas/_version.py": 3480474785419232091, + "backend/tests/test_translate_jobs.py": 14073962595360719355, + "docs/api/html/topics.html": 3630804099840379445, + "docs/api/html/group__audit__repository.html": 4149687455544451812, + "venv/lib/python3.13/site-packages/greenlet/TThreadState.hpp": 15599148954148720463, + "docs/api/html/group__ReactivePasswordPrompt__Block.html": 6497383366601912081, + "docs/api/html/group__frontend__src__services__git__utils__js____getSelectedConfig.html": 1957773391502963518, + "venv/lib/python3.13/site-packages/pandas/core/arrays/datetimelike.py": 394614958716301173, + "docs/api/html/group__test__ensure__encryption__key__generates__backend__env__file.html": 17024487701570331364, + "docs/api/html/group__DemoDataService.html": 12469614615958816935, + "venv/lib/python3.13/site-packages/cffi/cffi_opcode.py": 8411344362428947268, + "docs/api/html/group__TranslationPreviewSession.html": 709141522736963142, + "docs/api/html/group__TaskManagerModels.html": 10684990442170315567, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_engines.py": 2790877023773269276, + "venv/lib/python3.13/site-packages/PIL/_tkinter_finder.py": 14045496501810535432, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/apply.py": 3906017176873949738, + "docs/api/html/group__test__superset__api__failure.html": 13822775890788292618, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html_table.tpl": 17198355067645888735, + "docs/api/html/group__handlePasswordResume__Function.html": 9536732305476854074, + "docs/api/html/group__normalizePermissionRequirement__Function.html": 3697197038016374909, + "docs/api/html/group__handleMappingResolve__Function.html": 2057230359464505849, + "venv/lib/python3.13/site-packages/starlette/websockets.py": 13834731343216764204, + "docs/api/html/group__required__permission.html": 10075560287490873276, + "docs/api/html/group__get__trace__id.html": 8371547524761107402, + "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/WHEEL": 7314207500206292683, + "venv/lib/python3.13/site-packages/urllib3/contrib/socks.py": 645086578806871685, + "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/RECORD": 6349071557579241461, + "backend/tests/core/test_migration_engine.py": 14926155747277116633, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/scalars.py": 3468820466230647963, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_sort.py": 11941630642630249576, + "backend/alembic/versions/e5f4d3c2b1a_add_policy_id_to_validation_results.py": 11168047633691803786, + "venv/lib/python3.13/site-packages/pygments/lexers/algebra.py": 9651893228421050246, + "venv/lib/python3.13/site-packages/pygments/lexers/qvt.py": 1895735583818227972, + "docs/api/html/group____detector__cache__key.html": 17353560702377924027, + "docs/api/html/group__handleEnvChange__Function.html": 18099502322897430177, + "docs/api/html/group__openGitManagerForDashboard__Function.html": 13281219317667598991, + "docs/api/html/search/groups_10.js": 10270802865887856312, + "docs/api/html/group__ValidationStatus.html": 3516721738710393355, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_melt.py": 15663807247682146566, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_core_functionalities.py": 10449747865888948579, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_week.py": 5756727157937218128, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_pickle.py": 2910383574326146698, + "venv/lib/python3.13/site-packages/pandas/io/formats/_color_data.py": 15614976586613738953, + "frontend/src/routes/translate/[id]/+page.svelte": 1911443262444004956, + "docs/api/html/group__BulkFindReplaceRequest.html": 8587097893554395288, + "venv/lib/python3.13/site-packages/numpy/_core/numeric.pyi": 17785360553418386488, + "docs/api/html/group__MigrationMappingsTable.html": 14769683728212158945, + "frontend/src/components/git/GitMergeDialog.svelte": 10276431474456171235, + "venv/lib/python3.13/site-packages/jose/jwt.py": 3405491994268385178, + "venv/lib/python3.13/site-packages/pillow.libs/libbrotlidec-b57ddf63.so.1.2.0": 10032590058372320813, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/asyncmy.py": 11808138763443525443, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/METADATA": 2810323639884879396, + "docs/api/html/group__dry__run__migration.html": 12031214645025182651, + "venv/lib/python3.13/site-packages/git/types.py": 13960696584646279283, + "docs/api/html/group____resolve__candidate__source__version.html": 16340094199420833679, + "backend/src/api/routes/__tests__/test_clean_release_api.py": 8153144254371183034, + "backend/src/plugins/translate/plugin.py": 15783602737040717978, + "backend/git_repos/remote/test-repo.git/objects/c2/491dfd8c841bacd5f491510f6334aa4a626f00": 6297303620364618482, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh17797.f90": 17319074662077763768, + "docs/api/html/group__count__resolved__questions.html": 17204134154082267008, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_f2py2e.py": 8571347023940385644, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_interface.py": 13648006002292914247, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/base.py": 5924592154431932923, + "docs/api/html/group__ClarificationSessionDto.html": 15558163197172650048, + "docs/api/html/group__StoresMock__Module.html": 1302505229892495674, + "docs/api/html/group__create__temp__file.html": 13523091680298755029, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/git.py": 17060377178521307324, + "docs/api/html/group__believed.html": 3317841457835430076, + "frontend/src/lib/api/maintenance.js": 16247720324991780393, + "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/RECORD": 12598309574903741388, + "backend/tests/test_logging_audit_fixes.py": 6972807998099938509, + "docs/api/html/group__build__manifest.html": 14209312220395832967, + "docs/api/html/group__record__field__feedback.html": 1747834751721830995, + "docs/api/html/group__ProfilePreference.html": 684032724215963462, + "docs/api/html/group__delete__task.html": 11691883776137464961, + "venv/lib/python3.13/site-packages/python_multipart/__init__.py": 10290895261363712562, + "venv/lib/python3.13/site-packages/numpy/f2py/rules.pyi": 1342380029484127983, + "venv/lib/python3.13/site-packages/dateutil/_version.py": 8279235793001245767, + "venv/lib/python3.13/site-packages/pygments/styles/rrt.py": 9490973359165080360, + "venv/lib/python3.13/site-packages/pip/_internal/models/target_python.py": 422323125651848065, + "venv/lib/python3.13/site-packages/secretstorage/util.py": 1004887530903069622, + "docs/api/html/group__test__multiple__tables.html": 3501237513508769585, + "docs/api/html/group__TestStorageConfigMigration.html": 18428544366449284343, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/asn1.pyi": 16048852379621461316, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_routines.py": 4860173574365060471, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/conversion.pyi": 16976386782787920450, + "venv/lib/python3.13/site-packages/cryptography/hazmat/asn1/__init__.py": 4290669519959060720, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py": 5324490103277723813, + "docs/api/html/group__run__compliance__run.html": 16684598694182162144, + "venv/lib/python3.13/site-packages/keyring/testing/backend.py": 14295829193445781542, + "venv/lib/python3.13/site-packages/httpcore/_ssl.py": 6665087294869504820, + "backend/src/services/clean_release/__tests__/test_stages.py": 15550789367780507193, + "docs/api/html/group__GiteaRepoSchema.html": 16599628414846816204, + "frontend/src/lib/components/StartMaintenanceForm.svelte": 11114259982483681666, + "venv/lib/python3.13/site-packages/numpy/_core/_ufunc_config.py": 7365943844063702766, + "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_scrypt.py": 17378030264314664250, + "docs/api/html/group__test__get__repository__status__batch__returns__mixed__statuses.html": 7606080893793687994, + "docs/api/html/globals_func_b.html": 7416406823814080837, + "venv/lib/python3.13/site-packages/numpy/random/_common.pyi": 5094115692952609118, + "venv/lib/python3.13/site-packages/pydantic_core/py.typed": 15130871412783076140, + "docs/api/html/group__update__banner__on__dashboard.html": 1731887400533112584, + "backend/src/schemas/__tests__/test_settings_and_health_schemas.py": 17933166680828315099, + "backend/src/services/clean_release/repositories/audit_repository.py": 1431160646630812395, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_series_equal.py": 1223890028205011021, + "docs/api/html/search/functions_5.js": 12994729569996994977, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/_cmd.py": 14954780419054588164, + "docs/api/html/search/groups_11.js": 14985601485741813433, + "backend/src/models/translate.py": 3611792946430568934, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/base.py": 3250660921154829815, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_clearing_run_switches.py": 3020294789560975101, + "docs/api/html/group____extract__chart__uuids__from__archive.html": 5294683500183190826, + "docs/api/html/group__test__extract__imported__filters__preserves__clause__level__native__filter__payload__for__preview.html": 14624980795486649087, + "backend/alembic/versions/c4a3a2f74bfe_add_missing_columns_needs_review_.py": 4320606555167902916, + "docs/api/html/group__test__prefix__length.html": 10686431834265921774, + "docs/api/html/group__docker__backend__entrypoint.html": 6509924598611355, + "venv/lib/python3.13/site-packages/itsdangerous/encoding.py": 205863946173486958, + "venv/lib/python3.13/site-packages/PIL/_imagingft.cpython-313-x86_64-linux-gnu.so": 11054435406031360190, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/WHEEL": 7145482834744213753, + "frontend/build/_app/immutable/chunks/B9yoyTb0.js": 16665209953872767073, + "docs/api/html/group__frontend__src__services__adminService__js____updateLoggingConfig.html": 2515261969785467260, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_function.py": 644452398244782315, + "venv/lib/python3.13/site-packages/jsonschema/_types.py": 9250091433305395923, + "backend/git_repos/remote/test-repo.git/objects/3e/05ec6ef6504483c4bc7d00f0d0272c38ec661f": 11182016264585388842, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/subversion.py": 7423946096970870727, + "docs/api/html/group__GitServerConfigUpdate.html": 4756737950210180794, + "docs/api/html/group__test__success.html": 17787477233526904556, + "venv/lib/python3.13/site-packages/PIL/PsdImagePlugin.py": 4347581352716313298, + "venv/lib/python3.13/site-packages/dateutil/relativedelta.py": 5903095963079475484, + "venv/lib/python3.13/site-packages/referencing/retrieval.py": 11921179805977833120, + "venv/lib/python3.13/site-packages/websockets/http.py": 9406523480132204760, + "docs/api/html/group__TestNormalizeApiError__Class.html": 2259840618123379616, + "venv/lib/python3.13/site-packages/pip/_vendor/distro/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel_py.py": 9112851333217812996, + "docs/api/html/group__test__get__datasets__env__not__found.html": 15409672532193793329, + "docs/api/html/group__build__detector.html": 17019644481515088584, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/foo.f": 6349567809926050379, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_public_dtype_api_table.h": 8933016749764021181, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_slice.py": 9936085512921529417, + "backend/tests/test_api_key_routes.py": 8620555141760963281, + "venv/lib/python3.13/site-packages/PIL/GbrImagePlugin.py": 7681313333602257802, + "docs/api/html/group__test__simple__select.html": 7841602152481376118, + "frontend/build/_app/immutable/chunks/BU2uRVL9.js": 13186892857011149119, + "venv/lib/python3.13/site-packages/pip/_internal/utils/virtualenv.py": 14416705841810221305, + "docs/api/html/group__ClarificationEngine.html": 9404742488372089320, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/base.py": 13444129650880426353, + "venv/lib/python3.13/site-packages/keyring/backend.py": 14185808762437650951, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/fromnumeric.pyi": 8671744104085911610, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/__init__.py": 3619091571279924576, + "docs/api/html/group__build__context__keys.html": 16614569594821867197, + "docs/api/html/group__test__compile__dataset__preview__falls__back__to__chart__data__after__legacy__failures.html": 9366582312624823738, + "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group____coerce__intent__entities.html": 14588365769904720775, + "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/openssl/backend.py": 9072112660082423691, + "docs/api/html/search/search.css": 7835737499276132321, + "venv/lib/python3.13/site-packages/cryptography/x509/__init__.py": 4066756344049307453, + "docs/api/html/group__deleteAssistantConversation__Function.html": 8387243433121457609, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_cumulative.py": 6346947559103505068, + "venv/lib/python3.13/site-packages/keyring/py.typed": 15130871412783076140, + "backend/src/services/clean_release/repositories/policy_repository.py": 9074701224814573817, + "docs/api/html/group__test__us3__launch__endpoint__requires__launch__permission.html": 13518476876564276937, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_pickle.py": 8705060420848529055, + "docs/api/html/group__SupersetClient.html": 17296693003009978086, + "docs/api/html/group__suggest__mappings__api.html": 3498879923583655660, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_inspect.py": 10573558345297891848, + "docs/api/html/group__test__parse__superset__link__dashboard__partial__recovery.html": 3627304491605755157, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/METADATA": 2053484635654179443, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_nat.py": 18428782698385974380, + "docs/api/html/group__LLMProviderType.html": 16741126194237819812, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_deprecations.py": 16124509063246256847, + "docs/api/html/group__disconnectWebSocket__Function.html": 8352221169150959669, + "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_salsa.py": 1756536674254931838, + "docs/api/html/group__AssistantClarificationCard.html": 6642464260066671228, + "venv/lib/python3.13/site-packages/pip/_internal/network/auth.py": 6159841209618753296, + "docs/api/html/group____clarification__text__for__intent.html": 15580443210255744848, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_describe.py": 14493300276133670380, + "docs/api/html/group__test__calculate__schedule__empty__list.html": 9256285575620728758, + "docs/api/html/group__GitSchemas.html": 7299943490999314464, + "docs/api/html/group__TestProfileApi.html": 12173172201557312976, + "venv/lib/python3.13/site-packages/jeepney/tests/secrets_introspect.xml": 10717038359151125278, + "venv/lib/python3.13/site-packages/pip/_internal/commands/download.py": 7533669665002975823, + "venv/lib/python3.13/site-packages/keyring/backends/SecretService.py": 17482492072907438453, + "docs/api/html/group__approve__candidate__endpoint.html": 16706174447280477431, + "docs/api/html/group__CandidateArtifact.html": 1360984683406873421, + "docs/api/html/group__ClarificationAnswerCommand.html": 1340014238187838879, + "docs/api/html/group____validate__artifacts.html": 18436640877945920098, + "venv/lib/python3.13/site-packages/rsa/parallel.py": 4968566722541778371, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/_collections.py": 14307204206312829238, + "venv/lib/python3.13/site-packages/keyring/backends/macOS/__init__.py": 1010937986753403630, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_from_dummies.py": 5670811108950300761, + "docs/api/html/group__DashboardHub__getValidationBadgeClass__Function.html": 6720343436632169859, + "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/oauth2_session.py": 7076806577412682835, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/constant_time.py": 2499026008403328245, + "venv/lib/python3.13/site-packages/pygments/filters/__init__.py": 2992007913496948339, + "backend/git_repos/remote/test-repo.git/hooks/pre-rebase.sample": 15693225890270078290, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_mem_policy.py": 13856626567322091253, + "docs/api/html/group__LayoutUtils.html": 6665402780325047543, + "docs/api/html/group____generate__insert__sql.html": 5361897751695942720, + "docs/api/html/group__updateLoggingConfig__Function.html": 5025211689617667851, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/licenses/LICENSE.rst": 5960743202700406649, + "docs/api/html/group__test__metrics__per__language__breakdown.html": 8039163332388559175, + "backend/src/services/validation_run_service.py": 4735086522257772570, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_parameter.py": 15173522343126004527, + "venv/lib/python3.13/site-packages/urllib3/util/ssl_.py": 11720964010284185952, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_3kcompat.h": 5377305123299457337, + "backend/git_repos/remote/test-repo.git/objects/99/38d17c3f4199e53e4d4ebc253fe9c840caa505": 8414792171590415839, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/scalars.pyi": 17683675356659300769, + "venv/lib/python3.13/site-packages/keyring/backends/null.py": 12740996416911604870, + "docs/api/html/group__services.html": 715009395158677164, + "docs/api/html/group__ComplianceRun.html": 6928859539002591467, + "venv/lib/python3.13/site-packages/pydantic/v1/__init__.py": 1642038155370734658, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_numpyconfig.h": 18150055639397773687, + "venv/lib/python3.13/site-packages/attr/validators.py": 4453080662115911998, + "venv/lib/python3.13/site-packages/rapidfuzz/__init__.pyi": 13131938031654453415, + "venv/lib/python3.13/site-packages/pandas/_libs/lib.cpython-313-x86_64-linux-gnu.so": 6452315003728497116, + "docs/api/html/group__test__authenticate__user__updates__last__login.html": 681636108963024398, + "docs/api/html/group__resolve__task.html": 7907422604422526815, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/retry.py": 17371295199208325375, + "docs/api/html/group__test__task__log__level__default.html": 11083738057915848718, + "docs/api/html/group__deploy__dashboard.html": 874940735926289549, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/conftest.py": 17897502508251413988, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_insert.py": 17383986803728810587, + "venv/lib/python3.13/site-packages/numpy/tests/test_public_api.py": 11741922758622705449, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/response.py": 9594165377270752433, + "frontend/build/_app/immutable/entry/app.Cst_W8ea.js": 7511824294684432619, + "docs/api/html/group__DICT__TOKENS__PER__ENTRY.html": 6326579402835354804, + "venv/lib/python3.13/site-packages/h11/_connection.py": 6971907312737339559, + "docs/api/html/group__handleSave__Function.html": 12255691954229374900, + "venv/lib/python3.13/site-packages/numpy/polynomial/legendre.pyi": 2029639875417260268, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_infer_datetimelike.py": 17304541521108700317, + "venv/lib/python3.13/site-packages/anyio/_core/_contextmanagers.py": 1258491775823080427, + "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/WHEEL": 14550174241288068152, + "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension.cpython-313-x86_64-linux-gnu.so": 1211491156495529145, + "docs/api/html/group__update__yamls.html": 9301161878142210176, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi": 16312114056447366970, + "docs/api/html/group__update__markdown__chart.html": 1789011860209290209, + "venv/lib/python3.13/site-packages/fastapi/dependencies/models.py": 8626894872248212015, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/palette.py": 17383863392192572184, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/poolmanager.py": 5071697837617938064, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/locators.py": 7638945613579396718, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/token_endpoint.py": 6118770923176099889, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexer.py": 14400766876373764268, + "venv/lib/python3.13/site-packages/numpy/testing/overrides.pyi": 17408923209056015964, + "docs/api/html/group__test__complete__state.html": 10840390930299689847, + "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/METADATA": 15970460108484113417, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_resolution.py": 6076761538303762297, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/__init__.py": 15130871412783076140, + "docs/api/html/group__build__initial__profile.html": 17311912746267862536, + "venv/lib/python3.13/site-packages/pandas/core/groupby/__init__.py": 3015263524218708013, + "venv/lib/python3.13/site-packages/pandas/_libs/indexing.pyi": 90995502095752726, + "docs/api/html/group__test__recover__imported__filters__collapses__state__and__metadata__duplicates__into__one__canonical__filter.html": 4764189400381267919, + "backend/git_repos/remote/test-repo.git/hooks/pre-applypatch.sample": 15598058327720909861, + "venv/lib/python3.13/site-packages/pandas/_testing/compat.py": 10172779814048259850, + "docs/api/html/group__isRepositoryReady__Function.html": 3411912494396355874, + "docs/api/html/group__storageService__Module.html": 12420552828308744419, + "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_xml_dtypes.py": 18293138335799308439, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_shape_manipulation.py": 12598431412396627042, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_interaction.py": 12216477658994324787, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_util.py": 16024147572807865219, + "docs/api/html/group__flush__task__logs.html": 6410178404460258558, + "venv/lib/python3.13/site-packages/gitdb/test/__init__.py": 18393574323937353933, + "venv/lib/python3.13/site-packages/pygments/lexers/lean.py": 14518351619544450286, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_conversion.pyi": 11580106670226366710, + "docs/api/html/group__SupersetCompilationAdapter.html": 17117078588254804652, + "docs/api/html/group__approve__batch__semantic__fields.html": 3745065335953800486, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_format.py": 9331389900588353667, + "docs/api/html/group____serialize__dataset__review__context.html": 10048110432135787617, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_use.f90": 2657057181044959432, + "venv/lib/python3.13/site-packages/uvicorn/supervisors/multiprocess.py": 10047012560534876149, + "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/LICENSE": 16343563559291870811, + "docs/api/html/group__setup__class.html": 16392913197681512262, + "docs/api/html/group____get__or__create__preference__row.html": 5428234839987069116, + "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/METADATA": 3179724236887811680, + "venv/lib/python3.13/site-packages/jose/jwe.py": 3325660353225624025, + "venv/lib/python3.13/site-packages/yaml/representer.py": 10550136298978225013, + "frontend/src/routes/admin/users/+page.svelte": 6187566471376083204, + "venv/lib/python3.13/site-packages/passlib/handlers/sun_md5_crypt.py": 1949993216707182407, + "docs/api/html/group__DashboardSelection.html": 1501151870893618877, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_retain_attributes.py": 16210262356844956764, + "docs/api/html/group__FilterRecoveryStatus.html": 15412053149747747307, + "docs/api/html/group__test__delete__logs__for__task.html": 15106642576678649464, + "backend/src/api/routes/mappings.py": 2467003850993962558, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/unitofwork.py": 3177255974394221645, + "venv/lib/python3.13/site-packages/pygments/styles/staroffice.py": 11694998942433220413, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nditer.pyi": 33523064068376750, + "docs/api/html/navtreeindex23.js": 17692914288402765747, + "venv/lib/python3.13/site-packages/pydantic/v1/env_settings.py": 6194387033830177219, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_ccalendar.py": 8819357623337533489, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mysqlconnector.py": 17538029557373507617, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_conversion.py": 9159276697339089788, + "frontend/src/lib/components/translate/BulkReplaceModal.svelte": 9447617465987205060, + "venv/lib/python3.13/site-packages/pygments/lexers/slash.py": 8320676560518108343, + "backend/src/core/task_manager/__tests__/test_context.py": 9922342013893651977, + "venv/lib/python3.13/site-packages/yaml/error.py": 5626374410579058436, + "frontend/e2e/fixtures/global-setup.js": 16032945890934324203, + "docs/api/html/group__get__dashboards__page__async.html": 17651441154400395496, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/properties.py": 5799883762127872919, + "frontend/build/_app/immutable/chunks/CuzmfnQu.js": 4320326097426684598, + "docs/api/html/group__TranslationRecord.html": 17258624764504208878, + "venv/lib/python3.13/site-packages/numpy/random/_generator.cpython-313-x86_64-linux-gnu.so": 15625019745021657670, + "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/test_decimal.py": 17811784255174057561, + "venv/lib/python3.13/site-packages/pandas/core/groupby/numba_.py": 15997665748332235683, + "venv/lib/python3.13/site-packages/pip/_internal/utils/_jaraco_text.py": 9046755357011730699, + "venv/lib/python3.13/site-packages/numpy/tests/test_lazyloading.py": 17465787495701737655, + "frontend/src/pages/Dashboard.svelte": 16189908777731571070, + "docs/api/html/group__TaskLogRecord.html": 14921887044252207523, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_asfreq.py": 12721047184483392773, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/baked.py": 6911138208603240867, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_setitem.py": 2059440410065814114, + "venv/lib/python3.13/site-packages/pandas/io/parsers/python_parser.py": 7297059565749331767, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_fsspec.py": 6936167344144998172, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/pytestplugin.py": 1591034895268415944, + "venv/lib/python3.13/site-packages/pandas/tests/io/sas/__init__.py": 15130871412783076140, + "docs/api/html/group__CheckStageStatus.html": 18359275546300366477, + "docs/api/html/group__version.html": 2015740676777523593, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_select.py": 17823338162428379468, + "docs/api/html/group__test__get__git__configs__masks__pat.html": 6988882008771183656, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/authorization_server.py": 724388765673082720, + "venv/lib/python3.13/site-packages/urllib3/poolmanager.py": 15431313180245757657, + "venv/lib/python3.13/site-packages/numpy/core/arrayprint.py": 9652368112174245943, + "docs/api/html/group__normalizer.html": 9731908195312484209, + "docs/api/html/group__delete__git__config.html": 13270580245597492214, + "venv/lib/python3.13/site-packages/pandas/io/excel/_base.py": 1251545894005373734, + "docs/api/html/group__PreviewCompilationPayload.html": 10856751322722254656, + "docs/api/html/group__getRoles__Function.html": 4843900854760058913, + "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/licenses/LICENSE": 7959949171752474553, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/histograms.pyi": 9255620158831643201, + "venv/lib/python3.13/site-packages/starlette/datastructures.py": 12097180838087229563, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_round_trip.py": 14684057343786032776, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg2cffi.py": 5997687240967250164, + "docs/api/html/group__DebugPluginModule.html": 18319951556663504137, + "docs/api/html/group__delete__logs__for__task.html": 14542367631920374192, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_argon2.py": 11345706437113628133, + "venv/lib/python3.13/site-packages/dateutil/zoneinfo/dateutil-zoneinfo.tar.gz": 17626265752554406355, + "frontend/src/routes/storage/backups/+page.svelte": 9728305121470326167, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cpu_dispatcher.py": 2063037275809439611, + "backend/src/services/git/__init__.py": 18353922816391181902, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli/__init__.py": 12906995259233516197, + "docs/api/html/group__DashboardDetailResponse.html": 10795760041340688929, + "docs/api/html/search/groups_2.js": 4162831969457518591, + "docs/api/html/search/all_e.js": 4022996882705418530, + "docs/api/html/group__handleNavigate__Function.html": 14764981181056434794, + "docs/api/html/dir_bff1a75f97c7ace650ee0c8d57d0aaa5_dep.dot": 17431168212830508462, + "frontend/src/routes/+error.svelte": 9437886843842311915, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_reductions.py": 8258332365408303156, + "venv/lib/python3.13/site-packages/pandas/core/indexes/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/api/typing/__init__.py": 6438268275857060114, + "venv/lib/python3.13/site-packages/pygments/lexers/ncl.py": 14838368780033177943, + "frontend/src/routes/settings/__tests__/settings_page.integration.test.js": 4898515600493251972, + "venv/lib/python3.13/site-packages/pip/_internal/utils/datetime.py": 6816292030061301011, + "docs/api/html/group__provider__config__edit__contract__tests__Function.html": 15824301754871063235, + "venv/lib/python3.13/site-packages/pandas/tseries/holiday.py": 1134358927599488799, + "venv/lib/python3.13/site-packages/ecdsa/ssh.py": 17010933326090778158, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_csky_gcc.h": 12929785267195988209, + "docs/api/html/group__test__create__isolated__repository__keeps__mode__data__separate.html": 8351843508860649482, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_datetime.py": 11417836378782978454, + "docs/api/html/group__test__transform__yaml__ignores__unmapped__uuid.html": 2406741085212843540, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel.pyi": 16372699564794732463, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_pickle.py": 3419420815386925630, + "docs/api/html/group__test__build__namespaced__id__prevents__cross__mode__collisions.html": 3515946137513241293, + "venv/lib/python3.13/site-packages/pydantic/v1/utils.py": 902648247561165429, + "venv/lib/python3.13/site-packages/numpy/fft/__init__.pyi": 10354990065626209946, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_normalize.py": 11373923576259976755, + "docs/api/html/group__TestComplianceTaskIntegration.html": 13584167952680330678, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_asof.py": 8656532774394927388, + "docs/api/html/group____process__dashboards__for__start.html": 12366425439832314749, + "docs/api/html/group__SupersetContextRecoveryMixin.html": 3332182683532590481, + "docs/api/html/group__create__access__token.html": 2049056774682954094, + "docs/api/html/group__sanitize__username.html": 7200979889774485267, + "docs/api/html/group____dashboard__git__filter__value.html": 5762878789386422054, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py": 17873236864291624476, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_datetimes.py": 8863748366184419339, + "docs/api/html/search/functions_10.js": 7871242740222700745, + "venv/lib/python3.13/site-packages/websockets/typing.py": 13268801935274185287, + "venv/lib/python3.13/site-packages/packaging/requirements.py": 2896326326372719999, + "docs/api/html/group__update__column__description.html": 6565104927390241388, + "frontend/src/components/tasks/TaskLogPanel.svelte": 10382066588776421689, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/METADATA": 15876173086384975957, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_datetimelike.py": 15246580603900811749, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_version.pyi": 3636944488233043883, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_complex.py": 12963449957363121481, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_real/foo77.f": 16156304612888138777, + "docs/api/html/group__ProfilePage.html": 7621039567597119091, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_delitem.py": 16538190861492829338, + "backend/src/api/routes/__tests__/test_dashboards.py": 3130878778754818679, + "docs/api/html/group__test__delete__logs__for__tasks.html": 8831029806986025325, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/f90continuation.f90": 17056591497459381871, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_string_array.py": 8260883866404398980, + "venv/lib/python3.13/site-packages/keyring/credentials.py": 14515496037842724455, + "venv/lib/python3.13/site-packages/pycparser/__init__.py": 16499940957411260458, + "backend/src/api/routes/__tests__/test_git_status_route.py": 4501452711469218555, + "docs/api/html/group__LastTask.html": 9510396811518924648, + "docs/api/html/group__ReportsFilterPerformanceTest__Module.html": 6300674926783924392, + "docs/api/html/group__MaintenanceStore__state.html": 4681812142330433679, + "venv/lib/python3.13/site-packages/fastapi/types.py": 3867821246650502267, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/async_openid.py": 8708980645667847439, + "docs/api/html/group__SessionEventLoggerModule.html": 766072337035773703, + "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/base.py": 15872835330892203433, + "docs/api/html/group__test__add__and__remove__translation__job.html": 2228611743163264158, + "docs/api/html/group__handleTest__Function.html": 17441043050901879377, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/styled.py": 8726407298858811635, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_get_level_values.py": 12490886203425393290, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_numeric_only.py": 13610631681447961840, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_comment.py": 5603075924832933306, + "docs/api/html/group__fetchDatabases__Function.html": 8786717975484135660, + "venv/lib/python3.13/site-packages/urllib3/util/timeout.py": 17922362393077965047, + "docs/api/html/group__test__get__run__detail__not__found.html": 9435086798292174243, + "venv/lib/python3.13/site-packages/pygments/lexers/dalvik.py": 5549983892200382076, + "docs/api/html/group__test__auth__db__dev__fallback__works.html": 4992951578259739834, + "docs/api/html/group__MapColumnsRequest.html": 17510027445054962, + "docs/api/html/group__lookup__superset__accounts.html": 11041872730104611728, + "backend/tests/test_translate_scheduler_guard.py": 13396608843530344156, + "venv/lib/python3.13/site-packages/pydantic/main.py": 14086938579850319884, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log.csv": 221209423454319618, + "docs/api/html/group__type__profiles.html": 8266323522750752760, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/base.py": 13634605726041717070, + "docs/api/html/group__pop__span.html": 10448187202370662718, + "backend/src/core/utils/__init__.py": 12454773556575864508, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____endMaintenance.html": 8307569460468971226, + "docs/api/html/group__get__plugin.html": 13473880094770668887, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_distutils.py": 1948707545068786, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/__init__.py": 11157967642611612522, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_factorize.py": 861897342553280506, + "venv/lib/python3.13/site-packages/jaraco/classes/properties.py": 6976928770004942858, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_fillna.py": 13675584998644907265, + "docs/api/html/group__TaskHistory.html": 12837645096150183863, + "venv/lib/python3.13/site-packages/pydantic/experimental/arguments_schema.py": 8644805798814234457, + "backend/src/services/clean_release/policy_engine.py": 7078053766918689048, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____listDashboardBanners.html": 6341650642747001563, + "venv/lib/python3.13/site-packages/pandas/core/arrays/numeric.py": 17834058423729918687, + "docs/api/html/group____build__context__keys.html": 703884142675670583, + "venv/lib/python3.13/site-packages/attr/__init__.pyi": 13203080513025719049, + "venv/lib/python3.13/site-packages/numpy/f2py/cb_rules.py": 11397521081216402594, + "venv/lib/python3.13/site-packages/pygments/lexers/meson.py": 14659991367778746658, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html.tpl": 12550218314797699304, + "docs/api/html/group__test__api__datasource__columns__bad__env.html": 6521752800637051274, + "venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py": 8159971229245441880, + "docs/api/html/group__run__check__legacy.html": 14080804246720725799, + "venv/lib/python3.13/site-packages/greenlet/_greenlet.cpython-313-x86_64-linux-gnu.so": 6036818030377883416, + "venv/lib/python3.13/site-packages/httpcore/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/poly1305.py": 10854598965202354516, + "docs/api/html/group__test__api__duplicate__job__not__found.html": 18058786778280506982, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_emoji_replace.py": 8166203537440976347, + "docs/api/html/group__GitPluginExt.html": 959273690760699620, + "docs/api/html/group__test__mobile__functions__Function.html": 10962243893129004667, + "docs/api/html/group__apply__retention__policy.html": 3669478677806189613, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/python.py": 17886036670342116501, + "venv/lib/python3.13/site-packages/numpy/ma/LICENSE": 6723325434476453127, + "docs/api/html/group__SupersetDatasetsPreviewMixin.html": 9433049209236361670, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh2848.f90": 5799106109999071412, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_searchsorted.py": 11161416745923343741, + "venv/lib/python3.13/site-packages/urllib3/util/util.py": 12490259045660543460, + "docs/api/html/group__test__patch__profile__preferences__cross__user__denied.html": 11110530851215495265, + "venv/lib/python3.13/site-packages/requests/structures.py": 2668010839316715865, + "docs/api/html/group__PreviewExecutor.html": 5786108329700439190, + "backend/src/services/git/_status.py": 13381104725964137243, + "venv/lib/python3.13/site-packages/numpy/_core/fromnumeric.pyi": 13945478633722616250, + "docs/api/html/group__test__execution__snapshot__includes__recovered__imported__filters__without__template__mapping.html": 4769785789675369801, + "venv/lib/python3.13/site-packages/pygments/lexers/nimrod.py": 8457135214131458774, + "docs/api/html/group__select__next__open__question.html": 6182628715898661160, + "venv/lib/python3.13/site-packages/rapidfuzz/__init__.py": 12462153783886855740, + "docs/api/html/group__health__router.html": 16305034473081450586, + "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_sas7bdat.py": 8963983384208121526, + "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/wsproto_impl.py": 3072714633272661847, + "docs/api/html/group__MergeStatusSchema.html": 12600052237122559158, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkrb5support-d0bcff84.so.0.1": 16819924515291719993, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/applicator": 6870991911243684132, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_kwargs.py": 10173906126211473463, + "docs/api/html/group__ServiceUtils.html": 9023919090808833531, + "venv/bin/websockets": 12099863324306500376, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_case_when.py": 4133174129660834805, + "docs/api/html/group__handleAddOrUpdateEnv__Function.html": 3373509982933940852, + "docs/api/html/group__SupersetClientResolveExportFilename.html": 4965049196551993810, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__MaintenanceEvent.html": 7096871059783087964, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_delete.py": 3485374671877063217, + "venv/lib/python3.13/site-packages/typing_inspection/typing_objects.py": 16856718240972376883, + "venv/lib/python3.13/site-packages/pygments/lexers/macaulay2.py": 8022891778577314212, + "venv/lib/python3.13/site-packages/greenlet/slp_platformselect.h": 10428201768098464386, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/aiomysql.py": 12999962380333482189, + "docs/api/html/group__remove__translation__job.html": 17823493926961254166, + "docs/api/html/group__ComplianceOrchestrator.html": 1898684865008336902, + "docs/api/html/group__GitServiceBranchMixin.html": 12313083573663321996, + "docs/api/html/group__MockGitService.html": 15745917040920989657, + "docs/api/html/group__handleInitializeRepositories__Function.html": 4127737207323707916, + "frontend/build/_app/immutable/nodes/32.998cmedr.js": 7475181462383722002, + "docs/api/html/group__AuthSchemas.html": 10571020082050700369, + "venv/lib/python3.13/site-packages/numpy/_core/lib/libnpymath.a": 17555816778997028283, + "docs/api/html/group__docker__nginx__ssl__conf.html": 6000110961620180556, + "venv/lib/python3.13/site-packages/greenlet/tests/test_tracing.py": 10227316489696807112, + "venv/lib/python3.13/site-packages/pandas/core/computation/engines.py": 1889823242704769952, + "docs/api/html/group__test__active__default__true.html": 1870632923808868585, + "docs/api/html/group__get__log__stats.html": 6749080858232448787, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_constructors.py": 11065058462752831997, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/_pytest/unittest.py": 10848803633530338204, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/packages.py": 11689856177725665974, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/shape_base.pyi": 10291383658131961346, + "docs/api/html/group__call__llm.html": 18394029930905917337, + "docs/api/html/group__ValidationPolicyBase.html": 9049806250569046639, + "venv/lib/python3.13/site-packages/pygments/lexers/webidl.py": 8097260111959278117, + "docs/api/html/group__fetch__paginated__data.html": 2029155159485988556, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/package_data.py": 3078502124870585867, + "venv/lib/python3.13/site-packages/cryptography/x509/verification.py": 1079694784860492682, + "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/uvicorn/supervisors/watchfilesreload.py": 13062440477475586751, + "venv/lib/python3.13/site-packages/git/index/util.py": 5022401275553420722, + "docs/api/html/group__is__string__literal.html": 4316654409980882843, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_algs.py": 2479791018067637690, + "venv/lib/python3.13/site-packages/numpy/_core/_operand_flag_tests.cpython-313-x86_64-linux-gnu.so": 12296711931541109624, + "docs/api/html/group__frontend__src__services__adminService__js____updateRole.html": 1298256109882565356, + "docs/api/html/group__ValidationResult.html": 15773352481010235482, + "backend/alembic/versions/543d43d752b8_migrate_old_dictionary_entries_and_.py": 10988663686444687907, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh24008.f": 3872245077994936272, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/models.py": 16636119441941357281, + "venv/lib/python3.13/site-packages/jeepney/tests/test_auth.py": 15125055415702968414, + "docs/api/html/group__update__job.html": 3867501244194585555, + "venv/lib/python3.13/site-packages/rpds/rpds.cpython-313-x86_64-linux-gnu.so": 561326734302492859, + "venv/lib/python3.13/site-packages/tzlocal/utils.py": 7893867974548929154, + "venv/lib/python3.13/site-packages/ecdsa/test_ecdsa.py": 17595025859105321562, + "venv/lib/python3.13/site-packages/click/termui.py": 7022374827798605437, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_timegrouper.py": 276805119790266454, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_repr.py": 11737029058271003097, + "venv/lib/python3.13/site-packages/pygments/lexers/ampl.py": 4594260378653369985, + "docs/api/html/group__test__abort__controller.html": 12820594964734088755, + "docs/api/html/group__test__returns__existing__banner.html": 12335002589831108201, + "docs/api/html/group__ApiHelper.html": 11728817047769872638, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/client_auth.py": 3301527187487914220, + "venv/lib/python3.13/site-packages/pip/_internal/commands/__init__.py": 3795218871212151351, + "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/licenses/LICENSE": 14316979437290727897, + "backend/git_repos/remote/test-repo.git/objects/59/3a37acec7d2bddce10df90ab17bc9ede52e523": 1117161574576783985, + "docs/api/html/group__health__service.html": 14616989535045356318, + "docs/api/html/navtreeindex25.js": 18335817056234416468, + "venv/lib/python3.13/site-packages/websockets/protocol.py": 6401227903827084901, + "docs/api/html/group__TaskLog.html": 12777742835079365241, + "backend/src/core/task_manager/context.py": 11799776870777277331, + "docs/api/html/group__notifications.html": 16884491307342259092, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_to_julian_date.py": 6868080396693831272, + "backend/tests/test_api_key_model.py": 18059967072469014911, + "docs/api/html/group__TraceContextMiddleware______init____.html": 1201832506877617610, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/infer.py": 12541904372617915365, + "venv/lib/python3.13/site-packages/httpcore/_utils.py": 3255581092836273826, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_ndarray.py": 6863874753941288585, + "docs/api/html/group__end__all__maintenance.html": 3898926746936500242, + "venv/lib/python3.13/site-packages/pip/_internal/network/xmlrpc.py": 5064964778750366059, + "docs/api/html/group__GitServerConfigSchema.html": 14623914455240364180, + "docs/api/html/group__test__acceptPreview__Function.html": 12813709054328235897, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/__init__.py": 11526998905763262175, + "docs/api/html/group__LaunchStatus.html": 3552441502967473600, + "backend/src/services/clean_release/repositories/report_repository.py": 8327339942479580975, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_regression.py": 12593643817685777170, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_missing.py": 7034102519042351965, + "docs/api/html/group__frontend__src__services__storageService__js____downloadFile.html": 13909418440035321568, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/emscripten_fetch_worker.js": 10530710876604536879, + "docs/api/html/group__frontend__src__services__taskService__js____clearTasks.html": 16739125797009486352, + "venv/lib/python3.13/site-packages/authlib/oidc/discovery/well_known.py": 8259335680633926377, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_real.py": 5283415082530228716, + "venv/lib/python3.13/site-packages/numpy/f2py/common_rules.pyi": 2104100025130695295, + "docs/api/html/group__dataset__review.html": 12837365615967684273, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/RECORD": 5169907629260560698, + "docs/api/html/globals_i.html": 10148981415694925638, + "venv/lib/python3.13/site-packages/numpy/random/_mt19937.pyi": 15904463104068500379, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_real.f90": 9097998998863007705, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_timestamp_method.py": 11393911418463808195, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rank.py": 14115215895836854973, + "docs/api/html/group__test__no__prior__run__returns__all__rows.html": 3777590034380927800, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_asymmetric.py": 6903778603779934572, + "docs/api/html/group__TranslateDictionaryRoutesModule.html": 3644389177415562158, + "docs/api/html/group__sanitize__filename.html": 18087990957535401473, + "docs/api/html/group__ClarificationOptionDto.html": 16094217856744339801, + "venv/lib/python3.13/site-packages/attr/filters.pyi": 13942974755090135724, + "venv/lib/python3.13/site-packages/apscheduler/executors/debug.py": 14072221218785494847, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_css.py": 17765129030290410902, + "venv/lib/python3.13/site-packages/anyio/streams/file.py": 15232345967545920863, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/markers.py": 5247208668583898949, + "venv/lib/python3.13/site-packages/numpy/lib/format.py": 14971167445246135440, + "docs/api/html/group__build__default__preference.html": 9555424369113315940, + "docs/api/html/group__PROVIDER__DEFAULTS.html": 865392888129938339, + "venv/lib/python3.13/site-packages/_pytest/debugging.py": 16135285365306979060, + "docs/api/html/group__test__add__validation__job.html": 17097612352066161020, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arctan.csv": 4581185622290535488, + "venv/lib/python3.13/site-packages/PIL/XpmImagePlugin.py": 6644626557482464312, + "venv/lib/python3.13/site-packages/starlette/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/core/internals/blocks.py": 6448406236246476333, + "docs/api/html/group__task__id.html": 14850347989291467417, + "venv/lib/python3.13/site-packages/pandas/plotting/__init__.py": 13230487326686617492, + "docs/api/html/group____make__httpx__status__error.html": 1809671805993904222, + "venv/lib/python3.13/site-packages/pygments/lexers/kuin.py": 2818054539831699366, + "venv/bin/keyring": 1488968652276547659, + "docs/api/html/search/all_1.js": 5807190646834111663, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py": 16386268386376675175, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_html.py": 7732330576029516854, + "docs/api/html/group____commit__owned__session__mutation.html": 16349315849175268536, + "backend/src/plugins/git_plugin.py": 5910855495971245586, + "docs/api/html/group__AppDependencies.html": 8553210380267321705, + "venv/lib/python3.13/site-packages/cffi/backend_ctypes.py": 2042566833861899211, + "docs/api/html/group__MaintenanceEventStatus.html": 8449077302738724154, + "venv/lib/python3.13/site-packages/pip/_internal/cli/command_context.py": 9426036980437931533, + "docs/api/html/group__get__role__by__id.html": 5025478251031829538, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/json.py": 15373167408891671190, + "docs/api/html/group__test__us3__preview__response__propagates__refreshed__session__version__for__launch__follow__up.html": 14305667278559815270, + "venv/lib/python3.13/site-packages/numpy/tests/test_configtool.py": 8208415015478205502, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/types.py": 16795741817129898714, + "backend/git_repos/remote/test-repo.git/objects/d5/0298a42699f39e4601c0aa23eab07bcb0703c7": 1966124163198751340, + "docs/api/html/group__test__empty__key__cols__returns__all__rows.html": 72705144746688470, + "venv/lib/python3.13/site-packages/fastapi/openapi/docs.py": 16735218221639179927, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_cisco.py": 1786475632318043669, + "docs/api/html/group____is__production__env.html": 8724827897681230971, + "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/__init__.py": 1798074863773727377, + "docs/api/html/group__translate__router.html": 11232553803187505597, + "docs/api/html/group__AuthRepository.html": 8945062834514291149, + "venv/lib/python3.13/site-packages/pip/__init__.py": 9449893869469432503, + "venv/lib/python3.13/site-packages/pygments/lexers/devicetree.py": 9820277168995231927, + "docs/api/html/group__test__delete__git__config__removes__record.html": 6921631931687420246, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_api_info.py": 16491629653122827368, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_macosx.h": 3653129798702716366, + "venv/lib/python3.13/site-packages/numpy/lib/_npyio_impl.pyi": 6576645822227068922, + "docs/api/html/group__ValidationRecord.html": 5281046073662609348, + "backend/src/plugins/translate/dictionary_crud.py": 17858252266960667195, + "docs/api/html/group__GitInitPanel.html": 15661107424053425656, + "venv/lib/python3.13/site-packages/uvicorn/protocols/http/flow_control.py": 4822804840057360506, + "frontend/src/routes/dashboards/[id]/+page.svelte": 2328002918662170835, + "venv/lib/python3.13/site-packages/pygments/formatters/__init__.py": 8009871891954370829, + "venv/lib/python3.13/site-packages/apscheduler/triggers/interval.py": 3964550092873794670, + "docs/api/html/group__TestLoggingAuditFixes.html": 525186929866307297, + "docs/api/html/group__execute__migration.html": 4270006163430911897, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_frequencies.py": 14039315221824123200, + "venv/lib/python3.13/site-packages/starlette/middleware/gzip.py": 4321371046149637632, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_searchsorted.py": 11208047646304753715, + "docs/api/html/group__TestTranslateExecutorFilter.html": 7954474206063805341, + "docs/api/html/group__test__confirmation__owner__mismatch__returns__403.html": 2005624954638348501, + "venv/lib/python3.13/site-packages/pip/_vendor/typing_extensions.py": 10158933506062403688, + "frontend/build/_app/immutable/chunks/CZV46x5e.js": 6902302160092901507, + "venv/lib/python3.13/site-packages/rsa/randnum.py": 13958355153634534526, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/np_datetime.cpython-313-x86_64-linux-gnu.so": 7840846965295537844, + "frontend/playwright-report/trace/assets/urlMatch-BYQrIQwR.js": 8070494174996726626, + "frontend/src/lib/components/settings/ApiKeysTab.svelte": 17208249963941978218, + "docs/api/html/group__wait__for__resolution.html": 4445289133815184420, + "docs/api/html/group__TestTextCleaner.html": 16532067994218161464, + "frontend/build/favicon.png": 16740551781088792605, + "docs/api/html/group__LogFilter.html": 10465257837287313695, + "backend/src/plugins/translate/preview_session_ops.py": 2497494071534748391, + "venv/lib/python3.13/site-packages/pip/_internal/operations/install/__init__.py": 10456333337205488584, + "docs/api/html/group__frontend__e2e__helpers__api__helper__js____apiPost.html": 16080559730888993459, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix_py.py": 17041764258638228993, + "venv/lib/python3.13/site-packages/pandas/core/accessor.py": 1188716996113179524, + "docs/api/html/group__MaintenanceSettingsResponse.html": 15485267918904014972, + "venv/lib/python3.13/site-packages/pandas/tests/test_common.py": 8987965560487646705, + "frontend/src/lib/components/assistant/__tests__/assistant_first_message.integration.test.js": 7546622841909210622, + "docs/api/html/group__test__compile__dataset__preview__prefers__legacy__explore__form__data__strategy.html": 15164673100544799582, + "venv/lib/python3.13/site-packages/pandas/core/interchange/buffer.py": 12961802206383700922, + "docs/api/html/group__upsert__clarification__finding.html": 8857419435924114441, + "docs/api/html/open.png": 3773965092868909301, + "docs/api/html/group__createTask__Function.html": 15327860435941970591, + "frontend/src/lib/stores.js": 8225317698711142177, + "venv/lib/python3.13/site-packages/greenlet/TGreenlet.cpp": 4121171004360760212, + "venv/lib/python3.13/site-packages/pandas/io/formats/xml.py": 12235904458551067063, + "docs/api/html/group__MaintenanceEndTaskResult.html": 18181177616321427742, + "venv/bin/pyrsa-priv2pub": 16766314338551408621, + "docs/api/html/group__openAssistantChatWithContext__Function.html": 6437289261413282510, + "venv/lib/python3.13/site-packages/_pytest/config/findpaths.py": 7867603756389940562, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/compiler.py": 13924519162400330589, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_doc.py": 7865575374100528149, + "backend/src/core/auth/repository.py": 15675496219240601253, + "venv/lib/python3.13/site-packages/passlib/handlers/scrypt.py": 10089372287597257402, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/__init__.py": 6654484356035994666, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/provision.py": 17812733620485633975, + "docs/api/html/group__clean__release__repositories.html": 4346082490646294177, + "docs/api/html/group______init____.html": 12200029640079662818, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_getlimits.py": 118041882543413669, + "dist/docker/frontend.0.1.0.tar.xz": 16011357094675100098, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py": 10843527833285941674, + "docs/api/html/group__test__list__runs__invalid__status.html": 987375723925520985, + "docs/api/html/group__ReviewWorkspaceRightRail.html": 6482365234920032721, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_is_unique.py": 3989602816674881215, + "docs/api/html/group__test__jinja__set__block.html": 1391771195083382074, + "docs/api/html/group__has__permission.html": 1685491093213182094, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_pct_change.py": 10313980265441433173, + "docs/api/html/group__MergeConflictFileSchema.html": 6451830131202489447, + "docs/api/html/group__test__validation__policy__create__accepts__structured__custom__channels.html": 12324191215161408510, + "venv/lib/python3.13/site-packages/fastapi/routing.py": 466387159689567541, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/util.py": 1520899420719605380, + "venv/lib/python3.13/site-packages/attr/_config.py": 1864824728504480204, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/common/block.f": 10727418304254548946, + "venv/lib/python3.13/site-packages/git/compat.py": 16843345645628515492, + "frontend/src/routes/datasets/+page.svelte": 4090458050277453670, + "frontend/build/_app/immutable/chunks/B92OcwSl.js": 16271941207641380171, + "docs/api/html/group__run__compliance__status.html": 18273707357208548255, + "docs/api/html/group__Card.html": 8557385791478592213, + "docs/api/html/group__has__plugin.html": 2360443021065095729, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Indel.py": 17112989332785349705, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_hermite_e.py": 8912795372542950449, + "frontend/build/_app/immutable/nodes/27.b6yAZh1u.js": 1743695304248018897, + "docs/api/html/group__BulkReplacePreviewItem.html": 14430839695131325196, + "backend/tests/test_logger.py": 1680169894013597024, + "docs/api/html/group__IdMappingServiceModule.html": 13805743174711201381, + "docs/api/html/group__GitRepositorySchema.html": 13549814497751486913, + "docs/api/html/group__DatasetProfile.html": 5331057226299357274, + "venv/lib/python3.13/site-packages/greenlet/TStackState.cpp": 16720079760074325527, + "venv/lib/python3.13/site-packages/pip/_internal/build_env.py": 3614358934066127900, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_polybase.pyi": 3404315099794022355, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_formats.py": 13752366280743004410, + "venv/lib/python3.13/site-packages/pygments/lexers/_lasso_builtins.py": 4006621424665751347, + "docs/api/html/group__list__runs.html": 16735737419042964016, + "docs/api/html/group____generate__banner__id.html": 4235550462258700579, + "docs/api/html/group__test__us2__clarification__endpoints__persist__answer__and__feedback.html": 8985005200241520206, + "docs/api/html/group__TextCleaner.html": 4066249505895592095, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_concat.py": 10207975532842927134, + "docs/api/html/group__SQLGenerator.html": 14160413998657267182, + "venv/lib/python3.13/site-packages/pip/_internal/commands/show.py": 11839987586497822300, + "venv/lib/python3.13/site-packages/numpy/_core/_dtype_ctypes.py": 5564496700647900501, + "frontend/build/_app/immutable/chunks/_Pf3rQig.js": 13183249556030654823, + "docs/api/html/group____load__db__mapping.html": 5085581099428529195, + "venv/lib/python3.13/site-packages/packaging/tags.py": 1999137344425005827, + "docs/api/html/group__revoke__api__key.html": 5362512618088609082, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_regression.py": 16266600037241221681, + "venv/lib/python3.13/site-packages/websockets/__main__.py": 11948055520555854616, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ranges.py": 14549386056660231279, + "docs/api/html/group__TranslationRunGlobalIndicator.html": 7439172912927142076, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/halffloat.h": 16913381775994652343, + "venv/lib/python3.13/site-packages/click/globals.py": 18353671282454331523, + "venv/lib/python3.13/site-packages/h11/_util.py": 9362339074207904329, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/licenses/LICENSE": 5563356551734678258, + "docs/api/html/group__create__gitea__repository.html": 8308843234769151760, + "docs/api/html/group__TargetSchemaHint.html": 10951669208141820307, + "docs/api/html/group__frontend__src__services__adminService__js____deleteRole.html": 151266335644835279, + "venv/lib/python3.13/site-packages/pygments/lexers/tlb.py": 1169242051301155885, + "venv/lib/python3.13/site-packages/numpy/_core/arrayprint.py": 1262543237476191714, + "venv/lib/python3.13/site-packages/numpy/lib/_scimath_impl.py": 14696841109142419143, + "docs/api/html/group__environmentContext__Store.html": 12330215193574148972, + "venv/lib/python3.13/site-packages/numpy/lib/npyio.py": 6782361985454523908, + "docs/api/html/group__MapperToolPage.html": 15826560549177500594, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/meson.build.template": 9935732744553086652, + "venv/lib/python3.13/site-packages/psycopg2/extras.py": 7510107741729866600, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/util.py": 3591114320020964752, + "venv/lib/python3.13/site-packages/pydantic/annotated_handlers.py": 10186120300163345360, + "docs/api/html/group__frontend__src__services__storageService__js____encodeStoragePath.html": 13531232492438542038, + "docs/api/html/group__DatasetReviewEntryUxTests.html": 11847231912591045967, + "backend/src/services/profile_utils.py": 11110559205027128244, + "backend/alembic/versions/86c7b1d6a710_add_is_admin_column_to_roles_table.py": 7648823106726571577, + "venv/lib/python3.13/site-packages/anyio/lowlevel.py": 11919467357746648592, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/__init__.py": 16532856661318424631, + "venv/lib/python3.13/site-packages/PIL/PpmImagePlugin.py": 7107324729714470853, + "venv/lib/python3.13/site-packages/numpy/random/bit_generator.pxd": 14261507718442469988, + "docs/api/html/group__test__metric__snapshot__stores__per__language.html": 12291939914587003915, + "docs/api/html/group__SecurityBadgeService.html": 10559304755960949908, + "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs.py": 15657897994221955882, + "docs/api/html/group__test__delete__task__runs__default__false.html": 12317988397081006520, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/errors.py": 2147619440137604907, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_offsets.py": 4499538899492148499, + "docs/api/html/group__test__update__git__config__modifies__record.html": 2052816531421607126, + "venv/lib/python3.13/site-packages/pydantic/_internal/_decorators.py": 9928398334052202841, + "docs/api/html/group__test__tui__real__mode__bootstrap__imports__artifacts__catalog.html": 6102024140189662129, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/argon2.py": 15389474901714096890, + "backend/tests/test_security_audit_fixes.py": 10329229098676202553, + "docs/api/html/group__test__cli__candidate__register__scaffold.html": 18082978099842834637, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_categorical.py": 8844412630511751140, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_to_pydatetime.py": 1129954411080617001, + "docs/api/html/group__ScheduleAtAGlance.html": 7804111443901031953, + "docs/api/html/group__create__mapping.html": 1348589188703029518, + "docs/api/html/group__test__list__runs__pagination.html": 11299418008517910530, + "venv/lib/python3.13/site-packages/tzlocal/__init__.py": 11017072814026497364, + "docs/api/html/group____load__plugins.html": 2375668507770172038, + "docs/api/html/group__test__persist__task__resolves__environment__slug__to__existing__id.html": 12362861300562934210, + "frontend/playwright-report/trace/manifest.webmanifest": 565917384317025203, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/METADATA": 11419135077900073883, + "docs/api/html/group__MaintenanceEndAllTaskResult.html": 2276064404712323484, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_head_tail.py": 13047338070883375426, + "docs/api/html/group__goBackToList__Function.html": 7594473002237426910, + "docs/api/html/group__schedule__dashboard__validation.html": 18088681835965473182, + "venv/lib/python3.13/site-packages/jeepney/__init__.py": 1063800617763464773, + "docs/api/html/group__APIKeyModel.html": 7167590347437218348, + "docs/api/html/group__test__environment__connection.html": 7656214946341009354, + "docs/api/html/group__test__sql__lab__launch__falls__back__to__legacy__execute__endpoint.html": 3611882124869363, + "venv/lib/python3.13/site-packages/ecdsa/_version.py": 17707102226558781833, + "venv/lib/python3.13/site-packages/referencing/typing.py": 8296636464219681747, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/rec.pyi": 14615751247243515028, + "venv/lib/python3.13/site-packages/pandas/core/reshape/reshape.py": 5387892304726762127, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_setops.py": 15365064654930699428, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex_longtable.tpl": 12723621983797415444, + "docs/api/html/group____handle__network__error.html": 15557655064289466036, + "venv/lib/python3.13/site-packages/anyio/__init__.py": 12752386096259972231, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_format.py": 5231304674283854194, + "venv/lib/python3.13/site-packages/passlib/crypto/_blowfish/__init__.py": 3521833849634327520, + "venv/lib/python3.13/site-packages/pygments/styles/dracula.py": 12379322008538174078, + "docs/api/html/group__ReportQuery.html": 17989748081758748935, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/errors.py": 10750605030539582738, + "venv/lib/python3.13/site-packages/pygments/lexers/_stan_builtins.py": 1961875544235948177, + "docs/api/html/group__SupersetContextExtractorBase____extract__dashboard__reference.html": 7880890145565202782, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/RECORD": 3205266407680661753, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64-testset-2.csv": 4052796393463357888, + "docs/api/html/group__ClarificationHelpers.html": 2159036796456300532, + "frontend/build/_app/immutable/chunks/DV17vNYu.js": 5906252992532056558, + "backend/tests/test_constants_audit_fixes.py": 132399385608717170, + "docs/api/html/group__test__api__delete__job__not__found.html": 9283924924862498850, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_extension.py": 17245018204352082978, + "docs/api/html/group__cancel__operation.html": 16696836689617631015, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_fillna.py": 8802093795040069423, + "docs/api/html/group__AsyncSupersetClientInit.html": 2528317931875935210, + "venv/lib/python3.13/site-packages/h11/_receivebuffer.py": 4631433251046338381, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/common.py": 11384497819737275399, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____normalizeSupersetBaseUrl.html": 9936225426251260789, + "venv/lib/python3.13/site-packages/_pytest/pathlib.py": 9719734558816066453, + "venv/lib/python3.13/site-packages/pydantic/_internal/_generate_schema.py": 7343380095251236503, + "venv/lib/python3.13/site-packages/pydantic_settings/__init__.py": 4374954204580208673, + "venv/lib/python3.13/site-packages/numpy/_core/_dtype.pyi": 17662618580381221543, + "docs/api/html/group__clean__db.html": 17613548754885493168, + "venv/lib/python3.13/site-packages/git/refs/tag.py": 9979537867501757110, + "venv/lib/python3.13/site-packages/charset_normalizer/md.cpython-313-x86_64-linux-gnu.so": 1835299664481804968, + "docs/api/html/group__test__validate__path__creates__directory.html": 7116834460076222248, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/style.py": 10665998898253460114, + "venv/lib/python3.13/site-packages/passlib/handlers/scram.py": 12281469744083867450, + "docs/api/html/group__CleanReleaseCompliancePlugin.html": 18416685483683975434, + "backend/src/api/routes/translate/_dictionary_routes.py": 5668671879929670471, + "venv/lib/python3.13/site-packages/passlib/tests/test_utils_pbkdf2.py": 17016810698578473773, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_dialect.py": 6294522482440261756, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_set_name.py": 9094608008538024609, + "venv/lib/python3.13/site-packages/pip/_internal/cli/base_command.py": 10660882478126415399, + "backend/git_repos/remote/test-repo.git/hooks/pre-receive.sample": 6118492409684431911, + "docs/api/html/group__CandidateStatus.html": 1355862946696425686, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/requests.py": 14847842002253212098, + "venv/lib/python3.13/site-packages/jose/backends/_asn1.py": 14123487576864105793, + "docs/api/html/group__DatasetReviewSession.html": 6474466834876618927, + "venv/lib/python3.13/site-packages/sqlalchemy/util/_has_cy.py": 11979732417254560424, + "venv/lib/python3.13/site-packages/pycparser/_ast_gen.py": 5464347629908906775, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/jupyter.py": 4446535289156468239, + "venv/lib/python3.13/site-packages/pydantic/validators.py": 8292819706488319845, + "backend/git_repos/remote/test-repo.git/objects/a7/49f11fad695dff77faf1708c7320867d0be1df": 4641609158325033031, + "docs/api/html/group__save__config.html": 12986586572590781292, + "docs/api/html/group__import__artifacts.html": 3620849422629917960, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/tzconversion.cpython-313-x86_64-linux-gnu.so": 15960606468596245469, + "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/WHEEL": 7795541085444298627, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_array_to_datetime.py": 3467480435568672840, + "docs/api/html/group__SemanticLayerReview.html": 10939641694027258903, + "venv/lib/python3.13/site-packages/cffi/_cffi_include.h": 13094899814611950155, + "venv/lib/python3.13/site-packages/PIL/ImImagePlugin.py": 15452956038794399492, + "venv/lib/python3.13/site-packages/pygments/lexers/wgsl.py": 9718384325049172855, + "docs/api/html/navtreeindex24.js": 8251711078163677251, + "docs/api/html/group__validate__path.html": 9061978304641306658, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/philox-testset-1.csv": 2202360898679162333, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/base.py": 17992335652981439676, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_take.py": 9847808489301498487, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/util.py": 2176177435997659667, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/pager.py": 18072372651585577904, + "frontend/src/routes/translate/+page.svelte": 15284819686967093613, + "frontend/build/_app/immutable/nodes/4.Bm444SfC.js": 15753381425875800765, + "docs/api/html/group__init__repository.html": 16356863681930678181, + "docs/api/html/group__sanitize__imported__filter__for__assistant.html": 11096067160073736807, + "venv/lib/python3.13/site-packages/click/_textwrap.py": 14586282603215052310, + "docs/api/html/group__test__endpoints__require__authentication.html": 6923064043031748125, + "docs/api/html/group__SupersetParsedContext.html": 16475087038796278202, + "docs/api/html/group__test__create__missing__name.html": 13297392854389513523, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_timezones.py": 4771674179164304731, + "docs/api/html/globals_u.html": 9479390597620491497, + "venv/lib/python3.13/site-packages/urllib3/filepost.py": 3814725067598042920, + "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_to_xml.py": 8477770807916990981, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_shape_manipulation.pyi": 3533739482029983817, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh15035.f": 13126319439858352711, + "docs/api/html/group__PreviewRow.html": 89719087155129857, + "venv/lib/python3.13/site-packages/cryptography/x509/base.py": 9124948989225782039, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_setitem.py": 14920902525192671548, + "backend/git_repos/remote/test-repo.git/objects/ee/59553241ef084b83d3351ba4c33caf2ed9a840": 11587106407031972706, + "venv/lib/python3.13/site-packages/pyasn1/codec/cer/encoder.py": 3261739474564948330, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/RECORD": 9461427699726982537, + "venv/lib/python3.13/site-packages/starlette/endpoints.py": 3379755567024530053, + "venv/lib/python3.13/site-packages/authlib/oauth1/errors.py": 1154126353335030046, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/mypy.py": 823265492261272631, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/histograms.pyi": 2281259341486424755, + "backend/src/api/routes/translate/_metrics_routes.py": 14203374652620439805, + "docs/api/html/group__delete__run.html": 15832347541244359990, + "venv/lib/python3.13/site-packages/passlib/handlers/bcrypt.py": 8125664010268654055, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7592/endpoint.py": 18260428408051728802, + "docs/api/html/group__adminService__Module.html": 6173971485001272907, + "venv/lib/python3.13/site-packages/websockets/client.py": 5229500079651465772, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_twodim_base.py": 17623133613018058380, + "docs/api/html/group____normalize__timestamp__value.html": 16608102179483469578, + "docs/api/html/group____latest__decision__for__candidate.html": 17368372638299477528, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/__init__.py": 293004106962245584, + "venv/lib/python3.13/site-packages/numpy/__init__.pyi": 15820654525292895396, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_distutils.pyi": 3595910367556664837, + "docs/api/html/group__WebSocketLogHandler.html": 930622065954511642, + "venv/lib/python3.13/site-packages/passlib/utils/decor.py": 21351391767102899, + "docs/api/html/group__TestReportAuditImmutability.html": 17837908356806354015, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_indexing.py": 14552860427542050771, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_cat_accessor.py": 4304062895283374927, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_header.py": 3564391095263545879, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_row.py": 918740441973901148, + "venv/lib/python3.13/site-packages/PIL/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/inferno.py": 9056274496469409594, + "docs/api/html/group__TestCoreScheduler.html": 8832629785112398533, + "venv/lib/python3.13/site-packages/pip/_internal/utils/compatibility_tags.py": 15862649917149158291, + "backend/alembic/versions/b0c1d2e3f4a5_cascade_ondelete_translate_fks.py": 1764442834210967136, + "docs/api/html/group__downloadFile__Function.html": 6136195968307907091, + "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/exceptions.py": 11303331612406662162, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_complex/foo90.f90": 15981076495193915107, + "docs/api/html/group__TestDictionaryImport.html": 7122493165124405852, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/licenses/LICENSE": 4672913476475760762, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/__init__.py": 15340047930888693984, + "venv/lib/python3.13/site-packages/pandas/core/groupby/base.py": 16888506204910366302, + "docs/api/html/group__create__dictionary.html": 15927500895860773676, + "venv/lib/python3.13/site-packages/pygments/lexers/int_fiction.py": 8806961041808606055, + "docs/api/html/group__derive__readiness__state.html": 15658475287495832903, + "run_clean_tui.sh": 14305120550349644601, + "docs/api/html/group____build__mock__stdscr.html": 18188773364932506767, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/__main__.py": 111505188798650285, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_parquet.py": 11050150015772440923, + "docs/api/html/group__ResourceSourceRegistry.html": 11897883287885038128, + "docs/api/html/group__assistant__first__message__tests__Function.html": 1507496403746675511, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/connection.py": 15405047955974108860, + "venv/lib/python3.13/site-packages/gitdb/test/test_stream.py": 18159319442241857857, + "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/assertion_client.py": 4261295109880943573, + "venv/lib/python3.13/site-packages/numpy/random/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__extract__effective__filter__value.html": 5687710115716327783, + "venv/lib/python3.13/site-packages/authlib/oauth2/__init__.py": 13682931764896414722, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/models.py": 15928924478695638423, + "venv/lib/python3.13/site-packages/pydantic/version.py": 3699343596421001359, + "docs/api/html/group__requestDatasetReviewApi__Function.html": 8663890311322961011, + "venv/lib/python3.13/site-packages/pandas/_libs/groupby.pyi": 6154952803757623626, + "venv/lib/python3.13/site-packages/pandas/io/formats/excel.py": 797619981868084011, + "docs/api/html/group__ConfigManager.html": 2939116672940219717, + "venv/lib/python3.13/site-packages/jose/jws.py": 11592462993417182096, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/pyodbc.py": 8175468565413744516, + "docs/api/html/group__index__by__uuid.html": 3464688372161598541, + "venv/lib/python3.13/site-packages/anyio/_core/_sockets.py": 10525237827959090532, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_hour.py": 13754646634123368797, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/util.py": 4815334059917765852, + "docs/api/html/group__MigrationArchiveParserModule.html": 245299514416957043, + "venv/lib/python3.13/site-packages/numpy/testing/print_coercion_tables.pyi": 3814281717779245045, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_legacy.py": 9226692984248279094, + "frontend/src/lib/components/dataset-review/__tests__/us3_execution_batch.ux.test.js": 17821671753127603158, + "backend/src/plugins/translate/_llm_http.py": 15686826696693103176, + "backend/src/api/routes/validation.py": 13836068409484617547, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler.py": 1341849861184131135, + "venv/lib/python3.13/site-packages/numpy/lib/scimath.pyi": 18165025261847276375, + "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/test_from_records.py": 12217508428903265797, + "venv/lib/python3.13/site-packages/numpy/f2py/__version__.py": 8588600299261398598, + "venv/lib/python3.13/site-packages/pandas/tests/extension/list/array.py": 8065856342131357421, + "docs/api/html/group__resolveRepositoryStatusToken__Function.html": 17579339820007621981, + "frontend/build/_app/immutable/chunks/Ct73Sust.js": 3385889491616825090, + "docs/api/html/group__get__report__detail.html": 11469102499923216293, + "venv/lib/python3.13/site-packages/pip/_internal/req/req_uninstall.py": 3515239440812977025, + "docs/api/html/group__DictionaryDetailPage.html": 4983283205838955822, + "venv/lib/python3.13/site-packages/requests/status_codes.py": 17005213506461710202, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/layout.py": 11554376181083053156, + "docs/api/html/group__test__banner__not__found.html": 8635777298336273949, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/conversion.cpython-313-x86_64-linux-gnu.so": 9014806524727977333, + "docs/api/html/group__ValidationApi.html": 8585641606625752685, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_downcast.py": 10399746645741452200, + "docs/api/html/group__update__task.html": 2054851862802669708, + "venv/lib/python3.13/site-packages/pygments/lexers/_openedge_builtins.py": 4979988747924637739, + "venv/lib/python3.13/site-packages/PIL/ImageQt.py": 6607270889359138659, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_show_versions.py": 10577134135855180356, + "backend/src/scripts/create_admin.py": 12963729348700590154, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_nth.py": 17151595277666975085, + "docs/api/html/group____update__semantic__field__state.html": 9761433395553999447, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_astype.py": 7542068949396266883, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ctypeslib.pyi": 8623725566434725526, + "venv/lib/python3.13/site-packages/_pytest/faulthandler.py": 13329320306353718649, + "venv/lib/python3.13/site-packages/numpy/f2py/diagnose.py": 503331864022631297, + "venv/lib/python3.13/site-packages/passlib/ext/django/models.py": 12386223748379294996, + "docs/api/html/group__ValidationRunListResponse.html": 1652982914005412268, + "venv/lib/python3.13/site-packages/pandas/io/excel/_odfreader.py": 2760916559416783928, + "venv/lib/python3.13/site-packages/pygments/lexers/smalltalk.py": 6113431347120223592, + "docs/api/html/search/functions_1.js": 11481182983342275162, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_extension_array_equal.py": 16119106336497630796, + "venv/lib/python3.13/site-packages/packaging/metadata.py": 9168255069163141470, + "backend/src/plugins/llm_analysis/__tests__/test_service.py": 17317408415318686082, + "venv/lib/python3.13/site-packages/passlib/handlers/misc.py": 18255658377109333797, + "docs/api/html/group__AuthSessionLocal.html": 12226538716122831966, + "venv/lib/python3.13/site-packages/pydantic/v1/networks.py": 13262073155118055511, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/sql.py": 13315906751371033170, + "backend/src/core/__tests__/test_native_filters.py": 3247249287628984886, + "venv/lib/python3.13/site-packages/pandas/core/sample.py": 11913688303879867963, + "venv/lib/python3.13/site-packages/jsonschema/_typing.py": 13152346021901861822, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_reductions.py": 14432782234851468060, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_cov_corr.py": 8117511855230249212, + "docs/api/html/dynsections.js": 9903691534904054073, + "docs/api/html/group__DatasetReviewFilterModels.html": 3609237248730765067, + "venv/lib/python3.13/site-packages/PIL/BufrStubImagePlugin.py": 5520941821175895889, + "venv/lib/python3.13/site-packages/pygments/lexers/func.py": 12257919753150082714, + "frontend/src/lib/components/assistant/__tests__/assistant_clarification.integration.test.js": 15614617116241362179, + "backend/src/services/reports/type_profiles.py": 9186322444310801411, + "backend/alembic/versions/aa1b2c3d4e5f_drop_deprecated_translate_columns.py": 15433357059529111004, + "docs/api/html/globals_func_v.html": 13758024740377138009, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_utils.py": 8668650648802195016, + "docs/api/html/group__test__concurrent__run__skips.html": 8827273582130280115, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/cookies.py": 4997226307650350876, + "docs/api/html/group____load__module.html": 9106125961389789525, + "docs/api/html/group__list__api__keys.html": 13338086264861974569, + "docs/api/html/group__BusinessSummarySource.html": 1094425953916303548, + "venv/lib/python3.13/site-packages/websockets/sync/messages.py": 15699091325918681038, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_extint128.py": 11074657869101074458, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/util.py": 955993052529739164, + "venv/lib/python3.13/site-packages/sqlalchemy/connectors/__init__.py": 17194870661869873083, + "backend/src/services/clean_release/source_isolation.py": 9041802363608399236, + "docs/api/html/group__test__get__dashboards__pagination__oversize.html": 18020532049469957534, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/resolver.py": 9931394693284776391, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_float.py": 10455718110956856820, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/period.pyi": 13110894861187422750, + "docs/api/html/group__test__reports__list__openapi__required__keys.html": 16840541688018374528, + "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/licenses/LICENSE": 3996324383113221529, + "docs/api/html/group____task.html": 14186673195894587117, + "frontend/build/_app/immutable/chunks/DSxK3NUv.js": 8639953729041066468, + "frontend/src/lib/ui/HelpTooltip.svelte": 15082693035830243831, + "venv/lib/python3.13/site-packages/requests/help.py": 1885413874621672882, + "docs/api/html/group__frontend__e2e__helpers__api__helper__js____apiGet.html": 14001607880380347297, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/size/foo.f90": 18067977329435720684, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/RECORD": 3283324710045856319, + "docs/api/html/group____make__session.html": 3765523648902768678, + "venv/lib/python3.13/site-packages/jsonschema/validators.py": 3832874295500213309, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/AB.inc": 10441778083831997423, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_array.f90": 9711940829820746513, + "docs/api/html/group____require__fernet__key.html": 5961515902811999476, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_contains.py": 5273759677032634868, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.py": 1359143503575245224, + "venv/lib/python3.13/site-packages/PIL/MicImagePlugin.py": 13540523615822507963, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein.pyi": 12925006572914814268, + "docs/api/html/group__DashboardsResponse.html": 9460608762964369730, + "venv/lib/python3.13/site-packages/typing_extensions.py": 8402965285733247527, + "backend/tests/services/clean_release/test_approval_service.py": 8273158625698254525, + "docs/api/html/group__BranchSchema.html": 986826748050343530, + "venv/lib/python3.13/site-packages/greenlet/tests/__init__.py": 1181423074160870921, + "docs/api/html/group__test__superset__client__import__dashboard__guard.html": 2274917772442192787, + "docs/api/html/group__SidebarTest__Module.html": 17956644577281325892, + "venv/lib/python3.13/site-packages/tzlocal/unix.py": 995019116408448073, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_multiarray.py": 3592197154340095431, + "venv/lib/python3.13/site-packages/pandas/tests/frame/conftest.py": 15090201792072045503, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/licenses/LICENSE": 11199044866758471950, + "docs/api/html/group__SupersetClientResolveTargetIdForDelete.html": 16317999718630461982, + "venv/lib/python3.13/site-packages/keyring/compat/__init__.py": 7578020229796085753, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/provision.py": 9472538482404392519, + "venv/lib/python3.13/site-packages/pygments/lexers/_qlik_builtins.py": 1728058904137960444, + "venv/lib/python3.13/site-packages/pandas/tests/extension/json/array.py": 7437107031079833232, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE": 17284252174641192866, + "docs/api/html/group__get__report.html": 3004053766336257006, + "frontend/src/routes/settings/LlmSettings.svelte": 10881646244972773692, + "docs/api/html/group__SupersetProfileLookup.html": 7471338261277310068, + "docs/api/html/group____get__repository.html": 857041345230199829, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_halfyear.py": 587199217232946404, + "venv/lib/python3.13/site-packages/rsa/pkcs1.py": 2576732594642491910, + "frontend/e2e/fixtures/auth.fixture.js": 13628564118439575126, + "backend/git_repos/remote/test-repo.git/objects/48/c3fde4d5fff5bf98e9bcaa5f328b199aa18292": 6121250272621110311, + "venv/lib/python3.13/site-packages/pygments/lexers/rdf.py": 14488319292387226505, + "docs/api/html/group__EncryptionKeyModule.html": 10145923645674172016, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/__init__.py": 7526309124863950484, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/exceptions.pyi": 9294219058621261971, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_logical_ops.py": 16166386974005224415, + "venv/bin/pyrsa-decrypt": 10929163076272054227, + "venv/lib/python3.13/site-packages/pydantic_core/_pydantic_core.cpython-313-x86_64-linux-gnu.so": 13917011878259810696, + "venv/lib/python3.13/site-packages/jaraco/classes/meta.py": 15930255620248873425, + "frontend/src/routes/settings/SystemSettings.svelte": 17084926955388049976, + "docs/api/html/group__AsyncAPIClient______init____.html": 2185805261011326243, + "frontend/build/_app/immutable/chunks/B00uzF5h.js": 14631562204103256604, + "docs/api/html/group__test__start__missing__tables.html": 12776370102130311528, + "venv/lib/python3.13/site-packages/numpy/lib/_polynomial_impl.pyi": 2042169688753984918, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/einsumfunc.pyi": 200771351328522379, + "docs/api/html/group__TaskService.html": 12725768316127349890, + "docs/api/html/group__render__prompt.html": 12771717951488483090, + "frontend/src/routes/datasets/__tests__/DatasetList.test.js": 10189122239208504978, + "venv/lib/python3.13/site-packages/pycparser/yacctab.py": 18018314512916353707, + "docs/api/html/group__TranslateMetricsRoutesModule.html": 13065795937255941504, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_label_or_level_utils.py": 3423644585913150841, + "venv/lib/python3.13/site-packages/git/diff.py": 6691274015605451565, + "docs/api/html/group__frontend__src__services__adminService__js____createADGroupMapping.html": 543017303917156388, + "docs/api/html/group__TuiFacadeAdapter.html": 9778651468218666889, + "docs/api/html/group__PublishRequest.html": 15758562664567551847, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate.py": 16723865897349422996, + "docs/api/html/group__update__dictionary.html": 9189704466838089002, + "venv/lib/python3.13/site-packages/PIL/WebPImagePlugin.py": 5378349556563611996, + "backend/src/api/routes/git_schemas.py": 10492336192775355750, + "venv/lib/python3.13/site-packages/more_itertools/__init__.py": 9858612105173082060, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_duplicates.py": 9830936017197354309, + "docs/api/html/group__ProfilePreferenceResponse.html": 14962554366043501331, + "venv/lib/python3.13/site-packages/cffi/_imp_emulation.py": 17246725564704952212, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libpq-9b38f5e3.so.5.17": 9680474575710585826, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_setops.py": 17350958906336246626, + "docs/api/html/group__test__json__load__if__needed__empty__string.html": 4809024742473574705, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/WHEEL": 2357997949040430835, + "docs/api/html/group__test__editRow__Function.html": 7862387474531942746, + "venv/lib/python3.13/site-packages/idna/core.py": 7725813731640753267, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_append.py": 17016125916761365423, + "venv/lib/python3.13/site-packages/PIL/GribStubImagePlugin.py": 14954946414134984896, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_random.py": 4179188367630060654, + "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/METADATA": 3474626408138844944, + "backend/git_repos/remote/test-repo.git/objects/22/c0ea49cea7e5138fb91b25b1bc0e101ae6e017": 17630871400599334193, + "docs/api/html/group__get__task__log__level.html": 8101832559719739013, + "docs/api/html/group__DeployRequest.html": 15085302046619241640, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_value_attrspec.py": 7741590618654448240, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq_py.py": 16054175754674285311, + "docs/api/html/group__test__task__logger__initialization.html": 11239153689675430218, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/hooks.py": 9888227370911151341, + "venv/lib/python3.13/site-packages/pandas/compat/_optional.py": 12714208019736797073, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/scoping.py": 18223258186431020473, + "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__SupersetClientGetDashboardsSummaryPage.html": 12787892430248800577, + "docs/api/html/group__DatasetPreview.html": 13745385565163960445, + "venv/lib/python3.13/site-packages/pandas/_testing/_warnings.py": 5640964566228306285, + "venv/lib/python3.13/site-packages/sqlalchemy/util/_concurrency_py3k.py": 7301817934902711510, + "docs/api/html/group__test__provision__adfs__user__new.html": 1392791487923839022, + "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/WHEEL": 16223367184831500348, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py": 16550134594771291234, + "docs/api/html/group__ConsolidatedSettingsResponse.html": 6466679869565868829, + "venv/lib/python3.13/site-packages/starlette/middleware/errors.py": 1337979724602864440, + "venv/lib/python3.13/site-packages/numpy/core/einsumfunc.py": 3484247123731380377, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/numpy_/test_numpy.py": 9825804096508014886, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_subclass.py": 10949229764696473939, + "docs/api/html/group____enforce__session__version.html": 8264349099371763057, + "docs/api/html/group__taskLogs__Data.html": 10064937378577441554, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/table.py": 16856253349556498073, + "merge_spec.py": 13855568343782022, + "venv/lib/python3.13/site-packages/numpy/_core/getlimits.py": 7842717073693731093, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/progress_bar.py": 15595912766961891283, + "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/RECORD": 12015288851076448205, + "docs/api/html/group__AssistantRoutes.html": 11177343112252329246, + "docs/api/html/group__test__us2__field__semantic__override__lock__unlock__and__feedback.html": 7173438708880743570, + "docs/api/html/group__CheckStageName.html": 3993716435006752710, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_chained_assignment_deprecation.py": 7694137945143129474, + "backend/src/api/routes/dashboards/_helpers.py": 13624740316332136004, + "backend/src/api/routes/__tests__/test_clean_release_legacy_compat.py": 5075014721013543720, + "venv/lib/python3.13/site-packages/pygments/formatters/rtf.py": 5850574956253747036, + "docs/api/html/group__DatasetMapperModule.html": 15394484234769389552, + "docs/api/html/group__ValidationRunDetailResponse.html": 2243954401431072205, + "docs/api/html/group__prepare__candidate__legacy.html": 17583352627738261078, + "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/REQUESTED": 15130871412783076140, + "backend/src/schemas/dataset_review.py": 7490971410706145392, + "venv/lib/python3.13/site-packages/keyring/backends/chainer.py": 12526770797516553385, + "venv/lib/python3.13/site-packages/pandas/io/api.py": 8275376846208437741, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_apply_relabeling.py": 5600949862632014700, + "docs/api/html/group__TestValidatePath.html": 12521153993368156395, + "venv/lib/python3.13/site-packages/pandas/tests/test_expressions.py": 16378925536309828288, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__belief__scope.html": 2116670201736502743, + "backend/src/plugins/git/llm_extension.py": 5713196889309291531, + "backend/src/api/routes/__tests__/test_clean_release_v2_api.py": 17447140422807500877, + "docs/api/html/group__ProfilePreferenceService.html": 9611968709231329554, + "venv/lib/python3.13/site-packages/PIL/FtexImagePlugin.py": 8196606399875185931, + "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension.c": 9318655518998644962, + "venv/lib/python3.13/site-packages/numpy/random/_generator.pyi": 17167649524261942483, + "venv/lib/python3.13/site-packages/pandas/io/formats/css.py": 11288129826285529457, + "docs/api/html/group__MaintenanceDashboardScanner.html": 7477142727721457580, + "docs/api/html/group__Footer.html": 12554974943803824206, + "venv/lib/python3.13/site-packages/pandas/compat/numpy/__init__.py": 1037113402100731082, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/validator_creation.py": 2745563768861102999, + "venv/lib/python3.13/site-packages/starlette/authentication.py": 10905269573809129547, + "venv/lib/python3.13/site-packages/pygments/lexers/asn1.py": 15030988816882821134, + "backend/git_repos/remote/test-repo.git/hooks/pre-commit.sample": 102291230237676317, + "docs/api/html/group__test__get__dashboard__detail__success.html": 2526597651975031803, + "venv/lib/python3.13/site-packages/numpy/dtypes.pyi": 6713822658171717369, + "venv/lib/python3.13/site-packages/referencing/tests/test_core.py": 8280983300775878144, + "docs/api/html/group__DashboardHub__toggleFilterValue__Function.html": 4775698047438821697, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_interval.py": 14749388246573356959, + "venv/lib/python3.13/site-packages/pygments/lexers/_lua_builtins.py": 12653747099659257203, + "docs/api/html/group__TranslateJobList.html": 13432818086805315799, + "docs/api/html/group__test__auth__config__module__contract.html": 10228088760530679113, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/h11/py.typed": 12358286306858197118, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/attributes.py": 5068814626384132900, + "venv/lib/python3.13/site-packages/pygments/styles/onedark.py": 17580335614588531275, + "venv/lib/python3.13/site-packages/pandas/core/tools/numeric.py": 8510988912136285022, + "venv/lib/python3.13/site-packages/pillow.libs/libsharpyuv-95d8a097.so.0.1.2": 5320647379976541240, + "venv/lib/python3.13/site-packages/itsdangerous/url_safe.py": 13454753900702274266, + "docs/api/html/group__test__persist__task__failed__extracts__error.html": 3464011014621751693, + "venv/lib/python3.13/site-packages/pydantic/fields.py": 4142211199816898047, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/reshaping.py": 18085648077811502689, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_numba.py": 1668304729617150075, + "frontend/src/routes/validation/+page.svelte": 9845194549295283559, + "venv/lib/python3.13/site-packages/pygments/styles/zenburn.py": 1031869867933871309, + "venv/lib/python3.13/site-packages/numpy/random/__init__.pyi": 13833571330152615376, + "frontend/src/routes/settings/__tests__/settings_page.ux.test.js": 14507112961464496362, + "docs/api/html/group__buildAssistantSeedMessage__Function.html": 8962217409153936203, + "docs/api/html/group__EnvironmentResponse.html": 9633575500379521671, + "venv/lib/python3.13/site-packages/pillow.libs/liblzma-61b1002e.so.5.8.2": 11405063484938458842, + "venv/lib/python3.13/site-packages/pandas/io/excel/_calamine.py": 13354427767660487637, + "backend/src/core/utils/dataset_mapper.py": 3978140070131451501, + "docs/api/html/group__test__extra__form__data__merge.html": 8128733170632705704, + "docs/api/html/group__confirm__operation.html": 3794428125492004515, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/dtypes.cpython-313-x86_64-linux-gnu.so": 657138415665704488, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_store.py": 1500300322083708794, + "venv/lib/python3.13/site-packages/pygments/lexers/chapel.py": 7619603166448145621, + "venv/lib/python3.13/site-packages/pandas/_libs/window/indexers.cpython-313-x86_64-linux-gnu.so": 9380059465932560412, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_common.py": 2265736743367879051, + "frontend/static/favicon.png": 16740551781088792605, + "venv/lib/python3.13/site-packages/git/refs/log.py": 5175801243332619268, + "backend/git_repos/remote/test-repo.git/objects/ed/0432f88f5f7d95b26ecde34345abe741dd9db2": 13426916511127204463, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libssl-81ffa89e.so.3": 13913673119166658781, + "docs/api/html/group__TestLayoutUtils.html": 3035905040939536258, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi": 11455144434558323236, + "venv/lib/python3.13/site-packages/pydantic/v1/config.py": 12050640083719340958, + "venv/lib/python3.13/site-packages/pandas/tests/config/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_rank.py": 5398520257852104723, + "docs/api/html/group__SupersetCompilationAdapter____supports__client__method.html": 15057319214542689475, + "venv/lib/python3.13/site-packages/PIL/_binary.py": 14039167720582222043, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/base.py": 13454394827268856575, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/util.py": 9373891872370603585, + "docs/api/html/group__fetchTask__Function.html": 3934212245276248677, + "docs/api/html/group__test__get__detector__cache.html": 7969731651409649319, + "docs/api/html/group____collect__yaml__objects.html": 706456919847215611, + "docs/api/html/group____json__safe__value.html": 1390575450608766153, + "venv/lib/python3.13/site-packages/uvicorn/main.py": 5843333502356171120, + "venv/lib/python3.13/site-packages/_pytest/assertion/truncate.py": 14000392306994773741, + "frontend/build/_app/immutable/nodes/1.Cyet0ba6.js": 12906236210713562147, + "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/METADATA": 8128818962678047497, + "docs/api/html/group__ReportsPageTest__Module.html": 7688339467374188309, + "venv/lib/python3.13/site-packages/pandas/core/window/__init__.py": 15180240812077877933, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py": 3042005457138956499, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_datetime.py": 7862725028865965163, + "docs/api/html/group__test__abort__merge__calls__service__and__returns__result.html": 12531578259821930099, + "frontend/src/lib/components/layout/__tests__/test_breadcrumbs.svelte.js": 16890149311572703440, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_modules.py": 16835987029123241300, + "docs/api/html/group__TargetSchemaValidationResponse.html": 4850993964475160143, + "docs/api/html/group__LLMTranslationService.html": 12719944626760388569, + "venv/lib/python3.13/site-packages/PIL/ImagePalette.py": 9227837918026991107, + "venv/lib/python3.13/site-packages/numpy/tests/test_ctypeslib.py": 9592016432737074765, + "venv/lib/python3.13/site-packages/pip/_internal/distributions/installed.py": 18153165899841229597, + "venv/lib/python3.13/site-packages/pygments/lexers/scripting.py": 4167168074165473790, + "venv/lib/python3.13/site-packages/requests/cookies.py": 4997226307650350876, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_timer.py": 8196003526646080498, + "venv/lib/python3.13/site-packages/pip/_internal/wheel_builder.py": 3893922370396791826, + "venv/lib/python3.13/site-packages/_pytest/main.py": 931018496411984909, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_arithmetics.py": 16527169124402715210, + "venv/lib/python3.13/site-packages/pandas/io/__init__.py": 9767690163638898709, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_round.py": 14996007456708990295, + "venv/lib/python3.13/site-packages/psycopg2/sql.py": 18041240927130590808, + "docs/api/html/group__TranslationBatchResponse.html": 15097744887458440847, + "venv/lib/python3.13/site-packages/pandas/tests/io/__init__.py": 15130871412783076140, + "docs/api/html/group__TranslateApi.html": 7635708107203092858, + "docs/api/html/group____recover__truncated__rows.html": 4179907453973361909, + "docs/api/html/globals_w.html": 15465521333184498068, + "docs/api/html/group__test__rejectRow__Function.html": 14197518524874918963, + "docs/api/html/group__test__api__create__job.html": 15555049302714485159, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_cpu.h": 13799366908726531089, + "venv/lib/python3.13/site-packages/numpy/_core/_dtype_ctypes.pyi": 14543653817631274394, + "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/core/tools/datetimes.py": 13313374952742129866, + "venv/lib/python3.13/site-packages/more_itertools/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/click/_utils.py": 16491408631876616271, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_all_methods.py": 18227706645906325527, + "docs/api/html/group__MappingService.html": 14790116697814336524, + "venv/lib/python3.13/site-packages/typing_inspection/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/httpx/_client.py": 1063593889704982038, + "venv/lib/python3.13/site-packages/numpy/polynomial/__init__.pyi": 8708830448398500675, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/identity.py": 326059526167697655, + "venv/lib/python3.13/site-packages/urllib3/util/ssltransport.py": 1175688460659745788, + "venv/lib/python3.13/site-packages/pygments/lexers/python.py": 8995519134978505744, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/nit.py": 18262907536841158657, + "docs/api/html/group__StorageConfig.html": 12738778311037071479, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA.pyi": 2700568594438441246, + "docs/api/html/group__HealthSchemas.html": 5884366198523374362, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/packaging/_manylinux.py": 8268418900652790584, + "venv/lib/python3.13/site-packages/jeepney/io/common.py": 15160647397460834508, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/modules.pyi": 14176187662591164602, + "frontend/src/lib/components/layout/__tests__/test_topNavbar.svelte.js": 1873684170678703500, + "frontend/src/routes/validation/[id]/+page.svelte": 4125480744270905746, + "venv/lib/python3.13/site-packages/pygments/lexers/_php_builtins.py": 2344562378679281201, + "backend/test_app.db": 2486636812009447051, + "docs/api/html/group__get__native__filter__state__async.html": 204597673029712023, + "docs/api/html/group__SupersetClientGetDashboard.html": 5538675640686031469, + "docs/api/html/group__isDirectory__Function.html": 3452622402682011690, + "venv/lib/python3.13/site-packages/jsonschema/tests/typing/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/rec/__init__.pyi": 1782063765067823837, + "venv/bin/pyrsa-sign": 15564653706771700451, + "venv/lib/python3.13/site-packages/urllib3/_collections.py": 3440910792774742262, + "venv/lib/python3.13/site-packages/pygments/lexers/dsls.py": 11696359794961833087, + "backend/src/plugins/debug.py": 13683182174969777939, + "docs/api/html/search/all_12.js": 9323517322081325944, + "venv/lib/python3.13/site-packages/numpy/f2py/src/fortranobject.h": 5980733638838895780, + "venv/lib/python3.13/site-packages/pandas/_config/display.py": 433650013567734821, + "backend/src/core/task_manager/manager.py": 1504518197419779491, + "backend/src/plugins/translate/preview.py": 5579180663525515759, + "docs/api/html/search/groups_1.js": 5807190646834111663, + "venv/lib/python3.13/site-packages/numpy/tests/test__all__.py": 10689265249302359388, + "venv/lib/python3.13/site-packages/pygments/lexers/robotframework.py": 11507713622179102496, + "docs/api/html/group__cancel__Function.html": 843296188658809904, + "docs/api/html/search/all_f.js": 12596024952098859181, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/test_interval_new.py": 3893421355544517336, + "backend/git_repos/remote/test-repo.git/objects/ae/8d2f5dec5d421b2d6cc1eebaad6d2ef901a90d": 15877648001251681939, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/flatiter.pyi": 6885824496927786205, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_api.py": 6439927798101672423, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/toml.py": 2225382735669153136, + "docs/api/html/group__BASE__DIR.html": 4143991800839240540, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/__init__.py": 15130871412783076140, + "docs/api/html/group__LLMHttpClient.html": 14802937964955012182, + "docs/api/html/group__DashboardHealthItem.html": 14118707309412866355, + "venv/lib/python3.13/site-packages/greenlet/tests/test_weakref.py": 6780204527427742510, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/bitwise_ops.pyi": 751490187478960891, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_fillna.py": 7349777469648334282, + "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pip/_internal/commands/lock.py": 14782882714168174465, + "docs/api/html/nav_h.png": 18087931637685379732, + "docs/api/html/group____normalize__base__url.html": 5091254209090535827, + "docs/api/html/group__sanitize__secret.html": 18277308754712559382, + "docs/api/html/group__GitServerConfigCreate.html": 6897428372780872078, + "docs/api/html/group__TestGitServiceGiteaPr.html": 5702873534344534880, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi": 16934250836612138541, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/methods.py": 8059372834301557565, + "docs/api/html/group____require__owner__mutation__scope.html": 370851885631546971, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/__init__.py": 9820770319106921495, + "docs/api/html/group____get__or__init__decisions__store.html": 15627912227755842908, + "frontend/playwright-report/trace/sw.bundle.js": 10879347794748701702, + "docs/api/html/group__test__update__job.html": 13489385965364167749, + "venv/lib/python3.13/site-packages/click/utils.py": 13475604420010022458, + "frontend/build/_app/immutable/chunks/DKXhHShG.js": 5818012674247396946, + "docs/api/html/group__mask__secret__value.html": 2433163108890976342, + "backend/src/plugins/translate/orchestrator_retry.py": 2531207787915962557, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.py": 8079219938116542284, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi": 13850254283540522444, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_upcast.py": 6496794053681247105, + "backend/src/api/routes/__tests__/test_dataset_review_api.py": 9392418725327519178, + "venv/lib/python3.13/site-packages/passlib/tests/test_ext_django_source.py": 15577951591316518967, + "docs/api/html/group__delete__chart.html": 6831863026577067657, + "frontend/src/lib/utils.js": 2362133402815996206, + "venv/lib/python3.13/site-packages/pygments/lexers/_tsql_builtins.py": 829193091321611630, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_frozen.py": 3484963987053884566, + "docs/api/html/group__handleTestEnv__Function.html": 9541743355280005945, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/rec.pyi": 9140655366667421698, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_list_accessor.py": 8613662386779664039, + "docs/api/html/group__test__get__task__logs__invalid__limit.html": 7729306372384942790, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/utils.py": 3710235316419562274, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_fileno.py": 15541504502174047167, + "docs/api/html/group__get__task__manager.html": 17905058662693391528, + "docs/api/html/group__truncate__text.html": 15964456244302237036, + "docs/api/html/group__StartSessionResult.html": 15571965797483331043, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/named_types.py": 6099185243355915896, + "venv/lib/python3.13/site-packages/sqlalchemy/log.py": 10101221585967121334, + "venv/lib/python3.13/site-packages/numpy/f2py/_isocbind.py": 15031197044862908440, + "venv/lib/python3.13/site-packages/pandas/_libs/sparse.cpython-313-x86_64-linux-gnu.so": 2051484129454294720, + "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_algorithms.py": 15219408648894515493, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_lexsort.py": 10394832796613968484, + "docs/api/html/group__compute__preview__fingerprint.html": 9160170929765714565, + "venv/lib/python3.13/site-packages/numpy/linalg/_linalg.pyi": 9629457630163613604, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_polyutils.py": 675639791972685455, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_join.py": 2585969863606902743, + "docs/api/html/group__downloadFileUrl__Function.html": 10917163696944210952, + "backend/src/models/__tests__/test_report_models.py": 1002634514476529590, + "venv/lib/python3.13/site-packages/httpcore/_async/socks_proxy.py": 9026788710898138090, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_compat.py": 6032546839876195115, + "docs/api/html/group__frontend__src__services__git__utils__js____buildSuggestedRepoName.html": 9912150894737317582, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_html.py": 7947998260347730581, + "docs/api/html/group__test__auth.html": 2421668339643460366, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufunclike.py": 12077553320554633586, + "docs/api/html/group__AuthPackage.html": 9983939503119143826, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_interval.py": 2911379732293827726, + "venv/lib/python3.13/site-packages/numpy/f2py/capi_maps.pyi": 10638891136586198429, + "venv/lib/python3.13/site-packages/PIL/_deprecate.py": 15076725072094847812, + "venv/lib/python3.13/site-packages/secretstorage/__init__.py": 4535964275649588672, + "docs/api/html/group__ComplianceExecutionService.html": 2017272940317881457, + "venv/lib/python3.13/site-packages/pandas/core/window/common.py": 17956497339875932377, + "frontend/src/lib/stores/__tests__/test_taskDrawer.js": 14849615218402542643, + "venv/lib/python3.13/site-packages/numpy/_globals.py": 8736093011628027941, + "venv/lib/python3.13/site-packages/jeepney/io/tests/test_blocking.py": 6312017389529916004, + "venv/lib/python3.13/site-packages/pandas/tests/series/__init__.py": 15130871412783076140, + "docs/api/html/group____serialize__session__summary.html": 12633044514321560047, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_subplots.py": 4596089143375088346, + "docs/api/html/group__validate__timezone.html": 10510695123016011574, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/__init__.py": 15130871412783076140, + "docs/api/html/group__test__content__with__padding.html": 3201553403801844016, + "docs/api/html/group__get__clean__release__facade.html": 9736682632079627043, + "venv/lib/python3.13/site-packages/fastapi/py.typed": 15130871412783076140, + "docs/api/html/group__GitServiceMergeMixin.html": 4354986681189316190, + "venv/lib/python3.13/site-packages/sqlalchemy/schema.py": 16029542421991709659, + "venv/lib/python3.13/site-packages/pandas/core/internals/construction.py": 893951849732478990, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/registry.py": 13306388361671753373, + "frontend/src/routes/profile/+page.svelte": 13080303244628934788, + "docs/api/html/group__AuthApi.html": 1701222343226214552, + "docs/api/html/group__GitPlugin.html": 16223539126912136426, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/exc.py": 3242780937124999391, + "venv/lib/python3.13/site-packages/websockets/sync/server.py": 7966978001578584901, + "venv/lib/python3.13/site-packages/numpy/core/_internal.py": 14816989375912210674, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/parameters.py": 12219404446503940066, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286_bc.pyf": 10893958728966010450, + "venv/lib/python3.13/site-packages/greenlet/tests/test_stack_saved.py": 7767924647054186572, + "docs/api/html/group__handleDeleteUser__Function.html": 7705917636267502529, + "docs/api/html/group__inline__edit__translation.html": 14461008762407918187, + "venv/lib/python3.13/site-packages/greenlet/greenlet.cpp": 3281107194043468270, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/endpoints.py": 18334891787808122725, + "docs/api/html/group__TraceContextMiddleware.html": 8346923034582577387, + "venv/lib/python3.13/site-packages/pip/_vendor/distro/__init__.py": 11414161642984633362, + "venv/lib/python3.13/site-packages/pygments/lexers/j.py": 9766594937623918053, + "backend/git_repos/remote/test-repo.git/refs/heads/feature/e2e-update": 9577764946931187657, + "docs/api/html/group__test__tui__run__checks__f5.html": 11086893283846655051, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multiprocessing.py": 5522490547285108448, + "venv/lib/python3.13/site-packages/pandas/core/arrays/_utils.py": 11574890848475750509, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_na_values.py": 13527837495439739279, + "backend/src/services/__tests__/test_llm_prompt_templates.py": 12364821019604393930, + "docs/api/html/globals_func_g.html": 530559393513453799, + "backend/src/core/task_manager/models.py": 11636421249104836957, + "docs/api/html/group__fixtures.html": 7724348357498077937, + "docs/api/html/group__DashboardDetailRoutes.html": 8608175949358740288, + "docs/api/html/group__AsyncAPIClient__authenticate.html": 9150281512735244674, + "venv/lib/python3.13/site-packages/pygments/lexers/usd.py": 934820244673741695, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/events.py": 7576713358952064464, + "docs/api/html/group__LLMProviderConfig.html": 477820453193814610, + "docs/api/html/group__TestContext.html": 16549518825764564714, + "docs/api/html/group__DashboardHub__applyGridTransforms__Function.html": 6805737041086802084, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_head_tail.py": 1906121476322841736, + "docs/api/html/group__test__start__session__endpoint__returns__created__summary.html": 4072374425456734100, + "docs/api/html/group__AggregatedMetricsResponse.html": 5296336191776764582, + "docs/api/html/group__test__list__runs__filter__status.html": 7762165836370653178, + "venv/lib/python3.13/site-packages/numpy/random/lib/libnpyrandom.a": 1802449692091040396, + "docs/api/html/group__ResourceSourceEntry.html": 8011516002332864562, + "docs/api/html/group__SupersetClientValidateQueryParams.html": 1288505283032735283, + "docs/api/html/group__extract__dataset__id__from__form__data.html": 6984612851511739917, + "docs/api/html/group__test__get__datasets__success.html": 17085020636702913343, + "venv/lib/python3.13/site-packages/numpy/f2py/f2py2e.py": 738588649412338185, + "venv/lib/python3.13/site-packages/pandas/core/sparse/api.py": 9094651265692218821, + "docs/api/html/group__test__maintenance__api.html": 10206796814843197798, + "backend/git_repos/remote/test-repo.git/hooks/pre-merge-commit.sample": 10013699873067956556, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/LICENSE": 14599279238716790189, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/fields.pyi": 15420142722808118826, + "docs/api/html/group__DictionaryImportExport.html": 4551906910630157436, + "venv/lib/python3.13/site-packages/pillow.libs/libwebp-d8b9687f.so.7.2.0": 116215608212382352, + "venv/lib/python3.13/site-packages/pandas/core/algorithms.py": 487939626203097713, + "venv/lib/python3.13/site-packages/pandas/_libs/testing.pyi": 16691791330088523786, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/state_changes.py": 11425629729736599320, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh25337/use_data.f90": 14624074967635860696, + "backend/src/core/superset_profile_lookup.py": 7466572583388472449, + "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/utils.py": 2959395751217827103, + "backend/src/core/migration/risk_assessor.py": 4161499861941446814, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/cmac.py": 12011944740750051829, + "venv/lib/python3.13/site-packages/pillow.libs/libtiff-295fd75c.so.6.2.0": 17866578820357536656, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/nested_schemas.py": 4114645644496880787, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo.f": 5690596225005490325, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_names.py": 10037208029090713121, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_orc.py": 1248059610437937895, + "backend/tests/scripts/test_clean_release_tui.py": 17813178142456308266, + "docs/api/html/group__create__admin.html": 11166797148814690447, + "venv/lib/python3.13/site-packages/PIL/FitsImagePlugin.py": 618556384932056120, + "backend/src/api/routes/git/_repo_routes.py": 12158952761025397291, + "venv/lib/python3.13/site-packages/pip/_internal/utils/deprecation.py": 7435269308988385470, + "backend/src/core/mapping_service.py": 5863886462891122323, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sort_index.py": 14187428934500390688, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_chaining_and_caching.py": 11784574265874608859, + "docs/api/html/group__TestDashboardsApi.html": 5509739390736522040, + "docs/api/html/group__BreadcrumbsContractTest__Module.html": 11002777887735789654, + "venv/lib/python3.13/site-packages/pygments/styles/pastie.py": 15784474766258831882, + "backend/tests/test_sql_table_extractor.py": 13392885324292384588, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/__init__.py": 9106887608906281686, + "venv/lib/python3.13/site-packages/PIL/_webp.cpython-313-x86_64-linux-gnu.so": 11070012119632935103, + "docs/api/html/group__TranslationPreviewLanguage.html": 13625916657703783936, + "docs/api/html/group__validate__target__table__schema.html": 17860602982230273522, + "venv/lib/python3.13/site-packages/pandas/core/window/expanding.py": 14141093310397856286, + "docs/api/html/group__TraceContextMiddlewareModule.html": 16492855860524137184, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/declarative/__init__.py": 2436195108273216959, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/npyio.pyi": 14147712281086095231, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ma.py": 15912582628112164509, + "venv/lib/python3.13/site-packages/numpy/_core/memmap.py": 4093510602708416858, + "venv/lib/python3.13/site-packages/pandas/core/computation/pytables.py": 16326122536715961388, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_arraysetops.py": 10588903945244480732, + "frontend/playwright-report/trace/codicon.DCmgc-ay.ttf": 15579197054804464248, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufunc_config.pyi": 2005481648919369399, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_construction.py": 10619501873883861745, + "venv/lib/python3.13/site-packages/click/__init__.py": 9261629899056870564, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/test_downstream.py": 5635510753354256507, + "venv/lib/python3.13/site-packages/pandas/io/pickle.py": 5418646169167774144, + "venv/lib/python3.13/site-packages/yaml/composer.py": 13619070314468518566, + "backend/src/services/__init__.py": 15123879863527585264, + "venv/lib/python3.13/site-packages/uvicorn/loops/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/__init__.py": 4390908730288159455, + "docs/api/html/group__PlaywrightConfig.html": 300679414561245473, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/unix.py": 13808187640638677050, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_categorical.py": 18254320571347851153, + "backend/src/models/config.py": 17311376253737985673, + "venv/lib/python3.13/site-packages/httpcore/_backends/__init__.py": 15130871412783076140, + "docs/api/html/group__TranslateCorrectionRoutesModule.html": 12198261775802784372, + "docs/api/html/group__UseGitManager.html": 11005313010951220315, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/__init__.py": 4014740126161973332, + "venv/lib/python3.13/site-packages/numpy/_typing/_char_codes.py": 14162745886150625150, + "docs/api/html/group__frontend__src__services__toolsService__js____runTask.html": 8322693038275083284, + "venv/lib/python3.13/site-packages/pydantic/v1/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/gitdb/const.py": 14122142034887286559, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/__init__.py": 11808051681178127650, + "docs/api/html/group____normalize__actor__alias__token.html": 5763510838664670977, + "backend/src/services/git/_branch.py": 1746193863798413085, + "venv/lib/python3.13/site-packages/authlib/jose/errors.py": 15231759002942436632, + "docs/api/html/group__test__create__schedule.html": 6101710034110852291, + "venv/lib/python3.13/site-packages/pip/_internal/operations/freeze.py": 3469845570614985559, + "docs/api/html/group__DatabaseMapping.html": 6106397605843909678, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/testing.pyi": 16263777835572515739, + "docs/api/html/group__test__verify__password__empty__hash.html": 5792654688365761152, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multiarray.py": 5928288171180750841, + "venv/lib/python3.13/site-packages/pandas/core/arrays/string_.py": 14865733321317939478, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/string.f": 17328443345813567449, + "frontend/build/_app/immutable/nodes/15.D75TwS7V.js": 13696333152806937873, + "venv/lib/python3.13/site-packages/pandas/core/window/doc.py": 4204367435727844696, + "docs/api/html/group__handleManageSelected__Function.html": 6277194528006873152, + "frontend/src/routes/migration/__tests__/migration_dashboard.ux.test.js": 17118608261683412409, + "docs/api/html/group__GitMergeDialog.html": 16071754970378737774, + "docs/api/html/group__test__map__columns__empty__ids.html": 6731261812856257693, + "docs/api/html/group__SupersetClientGetChart.html": 12922958291009873472, + "docs/api/html/group__progress.html": 3466818030353762768, + "docs/api/html/group__approve__candidate.html": 16919945520220435820, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_.py": 644667973700652263, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_value_counts.py": 13270420637302622174, + "backend/src/models/dataset_review_pkg/_semantic_models.py": 6371476812115351221, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/processors.pyx": 7085380878820747579, + "docs/api/html/group____trigger__validation.html": 7745124024594471315, + "docs/api/html/group__llm__provider.html": 10759065886221772665, + "frontend/src/routes/datasets/__tests__/inline_edit.test.js": 17712409018171053453, + "docs/api/html/group__clean__release__dto.html": 8303338663879364604, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/wrapper.py": 14599195010683170123, + "venv/lib/python3.13/site-packages/pandas/core/interchange/__init__.py": 15130871412783076140, + "backend/src/services/maintenance/_chart_manager.py": 11268757631496775895, + "docs/api/html/group__CandidateMatchType.html": 12481194623088347299, + "docs/api/html/group__handleSelect__Function.html": 16158838263000329677, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_subclassing.py": 17318983445227658412, + "frontend/build/_app/immutable/chunks/C20922N0.js": 14681700380768364777, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_compare.py": 171535659467902751, + "docs/api/html/group__update__language__stats.html": 15508043268515320115, + "docs/api/html/group__startDataTimeout__Function.html": 93996475289484245, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/__init__.py": 15130871412783076140, + "docs/api/html/group__test__api__update__job__not__found.html": 17098826918877275745, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_indexing.py": 7181087459615188551, + "frontend/e2e/run-enterprise-clean-e2e.sh": 11626901202531925046, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/__init__.py": 17454177076687312424, + "venv/lib/python3.13/site-packages/requests/certs.py": 16052880877156864882, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/_mapping.py": 13335227913146542481, + "venv/lib/python3.13/site-packages/pygments/styles/sas.py": 12363791134941577382, + "venv/lib/python3.13/site-packages/passlib/ext/django/__init__.py": 11713862539944289631, + "venv/lib/python3.13/site-packages/rsa/util.py": 13423880475585138638, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/nonce.py": 18219168479887197733, + "docs/api/html/group__ValidationTaskResponse.html": 10449136656682527650, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/numerictypes.pyi": 15443101937711720707, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_conversion_utils.py": 1567199588622767277, + "venv/lib/python3.13/site-packages/pandas/tests/window/moments/conftest.py": 6137462119729731945, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_shift.py": 14681514853406253657, + "docs/api/html/group__ApiRoutesGetAttr.html": 10833820970838947139, + "docs/api/html/search/functions_13.js": 8491110692914206388, + "venv/lib/python3.13/site-packages/requests/utils.py": 17045260098091371478, + "venv/lib/python3.13/site-packages/numpy/_typing/_nbit.py": 15498810174380798405, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/comparisons.pyi": 4158883009780474220, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_indexing.py": 16623126293364224089, + "frontend/build/_app/immutable/nodes/14.D6hALL1X.js": 8372887877621592663, + "docs/api/html/group__test__git__service__configure__identity__updates__repo__local__config.html": 5513064374674137589, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_overrides.py": 92685611709898742, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_formats.py": 3525283725314253763, + "frontend/src/routes/reports/+page.svelte": 18404964858248487921, + "docs/api/html/group__formatDate__Function.html": 15997975478657062019, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/__init__.py": 15130871412783076140, + "docs/api/html/group__test__component__exists.html": 8771500170212558619, + "docs/api/html/group__BulkReplaceModal.html": 1782439446991758677, + "venv/lib/python3.13/site-packages/httpcore/_async/http2.py": 16350817785499681224, + "backend/tests/test_log_persistence.py": 7807469395396702613, + "venv/lib/python3.13/site-packages/pandas/core/_numba/executor.py": 2205130934861422769, + "backend/src/services/clean_release/stages/data_purity.py": 7015962973560119808, + "docs/api/html/group__get__task__log__stats.html": 13399644287740867608, + "venv/lib/python3.13/site-packages/_pytest/subtests.py": 14573790885130724739, + "venv/lib/python3.13/site-packages/jeepney/io/tests/test_asyncio.py": 2820168745710754136, + "docs/api/html/group__DashboardTaskHistoryResponse.html": 4494151273240950242, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_str_accessor.py": 4066094997616994612, + "frontend/build/_app/immutable/chunks/BE93hbNr.js": 10367577961995972982, + "frontend/src/lib/components/translate/ScheduleConfig.svelte": 9548866160759602637, + "venv/lib/python3.13/site-packages/anyio/_core/_streams.py": 6436461519284884601, + "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/METADATA": 14180973198574731599, + "docs/api/html/group__resolve__merge__conflicts.html": 237817549844254377, + "venv/lib/python3.13/site-packages/PIL/WalImageFile.py": 12442826195371137238, + "backend/src/core/encryption.py": 6401049364294007361, + "docs/api/html/search/all_2.js": 12325006021233833726, + "docs/api/html/group__test__constants__are__immutable.html": 18426400293933334698, + "docs/api/html/group__DictionaryResolutionResult.html": 4103555385968464679, + "docs/api/html/group__compute__config__hash.html": 6669149726626922468, + "venv/lib/python3.13/site-packages/authlib/jose/drafts/__init__.py": 4770885427721822507, + "venv/lib/python3.13/site-packages/python_multipart/exceptions.py": 5971058243218049183, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_types.py": 7175518113263603341, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_truncate.py": 6478126371906156409, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/status_codes.py": 17005213506461710202, + "venv/lib/python3.13/site-packages/pygments/lexers/tact.py": 1164971357219795420, + "backend/src/services/clean_release/mappers.py": 16365217670331724280, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/wheel.py": 7728646523045538484, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/datonly.f90": 10495925225338237742, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_partial_slicing.py": 15567512240469921599, + "docs/api/html/globals_func_s.html": 12786975089129434154, + "docs/api/html/group__cot__logger__instance.html": 13706182001628895155, + "venv/lib/python3.13/site-packages/dateutil/parser/_parser.py": 9443336890192151397, + "venv/lib/python3.13/site-packages/fastapi/param_functions.py": 14585101566697773072, + "frontend/src/lib/components/assistant/AssistantChatPanel.svelte": 17490466635940795553, + "venv/lib/python3.13/site-packages/pip/_internal/network/session.py": 293771075394156394, + "frontend/build/_app/immutable/nodes/35.BDALurfW.js": 9619547512402758415, + "backend/git_repos/remote/test-repo.git/objects/a1/3525f5f44e26d8fbec3226bd488d14793575a2": 3742572048019652365, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/WHEEL": 13232065379159720345, + "docs/api/html/group__RoleCreate.html": 982606771719996224, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____writeTabToUrl.html": 13401008738381827718, + "docs/api/html/group__AuthConfig.html": 8514504409080395912, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_pivot_multilevel.py": 9830258607305392103, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_function_base.pyi": 2792940598392356268, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/base.py": 3628510830969664111, + "venv/lib/python3.13/site-packages/PIL/_imagingcms.pyi": 12476347428820346383, + "docs/api/html/group__frontend__src__lib__stores__sidebar__js____setMobileOpen.html": 14669790376571342620, + "venv/lib/python3.13/site-packages/anyio/to_thread.py": 12767326212338028587, + "docs/api/html/group__handleSort__Function.html": 14047089905040001393, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_null_file.py": 6885565068723353414, + "venv/lib/python3.13/site-packages/pyasn1/codec/native/decoder.py": 15336592439379775543, + "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_expanding.py": 12504275097476819918, + "backend/src/services/llm_provider.py": 17053465522943758939, + "venv/lib/python3.13/site-packages/numpy/_core/_simd.pyi": 13553578040186939249, + "venv/lib/python3.13/site-packages/websockets/cli.py": 14049106025886056110, + "docs/api/html/minus.svg": 5110402206540728274, + "docs/api/html/group__DashboardHub__getLlmSummaryLabel__Function.html": 17960034083462652821, + "docs/api/html/group__test__jwt__precedence.html": 11405311010293398777, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/use_modules.f90": 3913612933340746297, + "venv/lib/python3.13/site-packages/passlib/tests/test_ext_django.py": 3210697476292094384, + "docs/api/html/group__DatasetReviewUs2WorkspaceUxTests__Module.html": 7172401692085262664, + "venv/lib/python3.13/site-packages/pandas/io/sas/sas7bdat.py": 17851617851457266799, + "venv/lib/python3.13/site-packages/git/objects/base.py": 11498407361286170399, + "venv/lib/python3.13/site-packages/pygments/styles/fruity.py": 7925019839136894457, + "docs/api/html/group__AssistantMessageRequest.html": 8567828667244420847, + "venv/lib/python3.13/site-packages/typing_inspection/typing_objects.pyi": 18193727720492050602, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_non_unique.py": 15286893322149413712, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/resource_protector.py": 17080006010679257864, + "venv/lib/python3.13/site-packages/passlib/tests/test_pwd.py": 10089138951415591061, + "docs/api/html/group__ScheduleResponse.html": 597319143140494541, + "docs/api/html/group__frontend__src__services__adminService__js____getUsers.html": 5532590091702017666, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/appengine.py": 16194997685865850655, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_period.py": 12593777226419608212, + "docs/api/html/folderopen.svg": 11265655722809871940, + "venv/lib/python3.13/site-packages/numpy/_core/einsumfunc.pyi": 4729765666018003634, + "docs/api/html/group__readJson__Function.html": 17492082868349391161, + "docs/api/html/group__getReportTypeProfile__Function.html": 16691315682732378844, + "venv/lib/python3.13/site-packages/cffi/__init__.py": 13427266446746498548, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_conversion.py": 6205112277291935767, + "venv/lib/python3.13/site-packages/pandas/io/sql.py": 12592024569011796790, + "venv/lib/python3.13/site-packages/yaml/reader.py": 9873075843010693205, + "docs/api/html/group__list__reports.html": 7378159237170020810, + "venv/lib/python3.13/site-packages/pandas/io/sas/sasreader.py": 12766780210114366112, + "venv/lib/python3.13/site-packages/pygments/regexopt.py": 16073437303824961930, + "venv/lib/python3.13/site-packages/pip/_internal/req/req_file.py": 5180401483285462901, + "frontend/src/components/DynamicForm.svelte": 2120031570302269345, + "backend/src/core/superset_client/__init__.py": 3185082867840025180, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/numerictypes.py": 5719374287454872555, + "docs/api/html/navtreeindex15.js": 13503057042941155951, + "docs/api/html/group__test__semantic__source__version__propagation__preserves__locked__fields.html": 12577203451483874098, + "venv/lib/python3.13/site-packages/pydantic/_internal/_discriminated_union.py": 1818179910730401509, + "docs/api/html/group__dataset__websocket__endpoint.html": 3534578434362936086, + "venv/lib/python3.13/site-packages/pandas/core/strings/accessor.py": 14021462534679430426, + "venv/lib/python3.13/site-packages/dateutil/parser/isoparser.py": 18015430204844361067, + "venv/lib/python3.13/site-packages/pygments/lexers/haskell.py": 8011341851439354724, + "docs/api/html/group__DashboardHub__normalizeTaskStatus__Function.html": 805796678502738814, + "venv/lib/python3.13/site-packages/numpy/_core/_rational_tests.cpython-313-x86_64-linux-gnu.so": 13475521165331256711, + "docs/api/html/group__NativeFilterDataMask.html": 16691586180906605871, + "venv/lib/python3.13/site-packages/numpy/lib/_shape_base_impl.py": 16539612003028676816, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/quantile.py": 17341029201525362074, + "backend/src/api/routes/__tests__/test_reports_detail_api.py": 8519050847848949612, + "venv/lib/python3.13/site-packages/_pytest/junitxml.py": 5871715626272366062, + "docs/api/html/group__resolveTask__Function.html": 18339026573508690713, + "venv/lib/python3.13/site-packages/charset_normalizer/utils.py": 11724147997933584095, + "docs/api/html/group__test__i18n__usage.html": 8090230676674799070, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/assertion.py": 5287436128235488464, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_extension.py": 4831602527247293866, + "venv/lib/python3.13/site-packages/numpy/lib/_datasource.py": 18136853038949826147, + "docs/api/html/group____check__any__permission.html": 4366102498601457818, + "venv/lib/python3.13/site-packages/pygments/lexers/tcl.py": 10343667975436015855, + "venv/lib/python3.13/site-packages/pygments/lexers/graphql.py": 2307854666015224677, + "backend/src/core/migration/dry_run_orchestrator.py": 1628125044585364194, + "venv/lib/python3.13/site-packages/websockets/legacy/server.py": 5390090919193784186, + "docs/api/html/group__test__get__dashboards__invalid__pagination.html": 5025034056693178117, + "docs/api/html/group__SchedulerService.html": 9915139758062001823, + "docs/api/html/group__test__get__history__wraps__unexpected__error__as__500.html": 11007813825591521037, + "docs/api/html/group__test__get__datasets__pagination__oversize.html": 6499529865741709635, + "docs/api/html/group__orchestrator__cancel.html": 7070873577920045293, + "venv/lib/python3.13/site-packages/greenlet/tests/test_contextvars.py": 6077482318964702132, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_arrow.py": 10068866425352207113, + "docs/api/html/group____seed__legacy__repo.html": 8385616245583706934, + "venv/lib/python3.13/site-packages/pandas/_libs/hashtable.cpython-313-x86_64-linux-gnu.so": 16963890771704942465, + "docs/api/html/group__SupersetCompilationAdapter____request__superset__preview.html": 13296042812426892350, + "docs/api/html/group__FastAPI__App.html": 16248117540359228223, + "docs/api/html/group____make__environment.html": 15812631705541506807, + "docs/api/html/group__InternalSourcesOnlyStage.html": 4233027249297243678, + "docs/api/html/navtreeindex11.js": 3487316622421924543, + "venv/lib/python3.13/site-packages/_pytest/raises.py": 8188402179490363767, + "frontend/src/routes/+page.svelte": 5863865830077771796, + "backend/src/api/routes/assistant/_routes.py": 17155281273786858236, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/ma/LICENSE": 6723325434476453127, + "docs/api/html/search/groups_b.js": 9594259470903340735, + "venv/lib/python3.13/site-packages/passlib/tests/sample1b.cfg": 2872366861156549016, + "docs/api/html/group__get__logs.html": 15112919543989403638, + "docs/api/html/search/all_3.js": 16759903393811042899, + "docs/api/html/group__LogLevel.html": 10025057817499119875, + "docs/api/html/group__mock__profile__route__dependencies.html": 17310608398693875616, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/secrets.py": 17816662030600756342, + "venv/lib/python3.13/site-packages/git/repo/__init__.py": 6173604284490891047, + "docs/api/html/group__orchestrator__run__completion.html": 9161921145624746021, + "docs/api/html/group__TestTranslateSchedulerGuard.html": 5632425831791394338, + "venv/lib/python3.13/site-packages/starlette/middleware/trustedhost.py": 8302185291610019926, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_half.py": 3121836756584726126, + "docs/api/html/group__SupersetAccountCandidate.html": 12015919113929683883, + "frontend/src/lib/components/translate/TranslationRunGlobalIndicator.svelte": 13452471817010485891, + "docs/api/html/group__ValidationTaskList.html": 10113816788777682664, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_logical.py": 6818185860296232476, + "docs/api/html/group__ImportedFilter.html": 10182695392168978110, + "docs/api/html/group__InlineCorrectionService.html": 11403442380597184495, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/zip-safe": 15240312484046875203, + "venv/lib/python3.13/site-packages/keyring/errors.py": 4587094338672775040, + "venv/lib/python3.13/site-packages/jaraco.classes-3.4.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/h11/_state.py": 11398755254809751139, + "docs/api/Doxyfile": 3726528055138990005, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_timedelta64.py": 16821719402662529276, + "docs/api/html/group__ReviewWorkspaceHeader.html": 7831080431402796410, + "docs/api/html/group__LaunchDatasetResult.html": 13328722234223010453, + "docs/api/html/group____resolve__dashboard__id__from__ref.html": 3342456016478632916, + "backend/src/core/superset_client/_datasets_preview_filters.py": 3588066821120121881, + "docs/api/html/group__fetchTargetDatabases__Function.html": 12217542332937976148, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/py.typed": 15130871412783076140, + "docs/api/html/group__internal__sources__only.html": 7674825160661281445, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/__init__.py": 15130871412783076140, + "docs/api/html/group__parse__position__json.html": 14006761960498316468, + "venv/lib/python3.13/site-packages/numpy/lib/_index_tricks_impl.py": 13574106461973044500, + "docs/api/html/group__EnterpriseCleanSetupE2E.html": 12663560821891997943, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_datetime_index.py": 15448494560143263150, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/_psycopg_common.py": 4111797647365870137, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/json.py": 14738429697319670035, + "backend/src/models/auth.py": 10012201935491426274, + "docs/api/html/test.html": 12181232123406114727, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__add__validation__job.html": 8326497628811170515, + "venv/lib/python3.13/site-packages/greenlet/greenlet_exceptions.hpp": 8819301638282185623, + "docs/api/html/search/groups_7.js": 14622460438011001410, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_data.py": 2397937327057341, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/distributions.h": 17162252287980242413, + "venv/lib/python3.13/site-packages/gitdb/db/ref.py": 1176701624460337371, + "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/_arrow_utils.py": 17808805047762566525, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_take.py": 14969455660160053080, + "docs/api/html/group__auth__config.html": 14653694386669705505, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_csv.py": 6678500392137188521, + "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_byteswap.py": 5090287710338893350, + "venv/lib/python3.13/site-packages/pandas/io/formats/csvs.py": 17223598248259691292, + "venv/lib/python3.13/site-packages/pygments/lexers/ambient.py": 18106929781201758080, + "docs/api/html/group__RepositoryBindingSchema.html": 7912861215581324084, + "venv/lib/python3.13/site-packages/packaging/markers.py": 11602308203217831543, + "backend/src/api/routes/maintenance/__init__.py": 8921716690761316245, + "backend/_batch_convert_defs.py": 2671571251303777016, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_indexing.py": 9988098331562906950, + "backend/src/api/routes/__tests__/test_reports_api.py": 12407027129865592126, + "venv/lib/python3.13/site-packages/pydantic/deprecated/decorator.py": 8609500261161560793, + "docs/api/html/globals_t.html": 18109595601088428353, + "venv/lib/python3.13/site-packages/requests/exceptions.py": 6474239743209354989, + "docs/api/html/group__no__external__endpoints.html": 4259752722362818397, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_dict.py": 16252265723192124609, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_openpyxl.py": 9542840527483618681, + "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/numpy/lib/_utils_impl.pyi": 15767546107856827543, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cbrt.csv": 8929553891827331780, + "backend/src/plugins/translate/service_target_schema.py": 5277952452702772295, + "venv/lib/python3.13/site-packages/pygments/lexers/pony.py": 2720635393743617141, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_filter.py": 2388681477981649268, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/RECORD": 10052481303799123207, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/numeric.pyi": 17005748821769179511, + "frontend/src/lib/stores/__tests__/mocks/env_public.js": 17950613826406014914, + "docs/api/html/group__test__list__gitea__repositories__returns__payload.html": 8122355547255221781, + "docs/api/html/group__test__permission__denied__non__admin.html": 13139728334206364468, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_factorize.py": 17995673140216929494, + "backend/src/api/routes/dashboards/_listing_routes.py": 10092152880931335002, + "docs/api/html/group__test__manifest__service__existing__manifest__cannot__be__mutated.html": 856424001917918075, + "docs/api/html/group__SrcRoot.html": 9966390518366512890, + "venv/lib/python3.13/site-packages/uvicorn/server.py": 15714008348292243019, + "venv/lib/python3.13/site-packages/fastapi/middleware/trustedhost.py": 4285622102799027823, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_unary.py": 8046543893978198672, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_dtype.py": 5336980126536664360, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/common/pythoncapi-compat/COPYING": 3474104874623144155, + "venv/lib/python3.13/site-packages/PIL/WmfImagePlugin.py": 15685062825106444247, + "venv/lib/python3.13/site-packages/PIL/report.py": 9428754440615681790, + "venv/lib/python3.13/site-packages/git/objects/__init__.py": 2110615482320355676, + "venv/lib/python3.13/site-packages/fastapi/testclient.py": 2606236077497278662, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_quoting.py": 1147992698412929658, + "backend/src/plugins/translate/orchestrator_runner.py": 6903994426268521649, + "venv/lib/python3.13/site-packages/pandas/core/arrays/masked.py": 13977195666947626206, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/config.py": 10707678943298497676, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_iter.py": 9232021002336641851, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_seed_sequence.py": 7687465232954593311, + "venv/lib/python3.13/site-packages/jsonschema/__init__.py": 6925762200139836824, + "docs/api/html/files.html": 4939049439273801457, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____clearOnCompleteCallback.html": 13631531026182073774, + "venv/lib/python3.13/site-packages/numpy/core/getlimits.py": 14257687540182552408, + "venv/lib/python3.13/site-packages/uvicorn/protocols/utils.py": 6147480543268737542, + "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/METADATA": 1684451390569121499, + "frontend/src/routes/+page.ts": 11160596731849880920, + "backend/src/models/dataset_review_pkg/_enums.py": 501173908863819198, + "venv/lib/python3.13/site-packages/starlette/config.py": 16509394679506300256, + "docs/api/html/group__test__environment__model.html": 11941389798995546650, + "docs/api/html/group__run__publish.html": 18279744766750814950, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/format": 12697928260201325593, + "venv/lib/python3.13/site-packages/pytest_asyncio/__init__.py": 8162213292669110211, + "docs/api/html/navtreeindex12.js": 15950560879981123236, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__DashboardHub__hasColumnFilter__Function.html": 16255620732519975073, + "backend/src/services/resource_service.py": 12557244514401781887, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/sqltypes.py": 2952996080192295188, + "venv/lib/python3.13/site-packages/pygments/lexers/hare.py": 8693002231020751711, + "venv/lib/python3.13/site-packages/pytest_asyncio/plugin.py": 13414541723622354359, + "venv/lib/python3.13/site-packages/pandas/__init__.py": 793698514004377486, + "venv/lib/python3.13/site-packages/pygments/lexers/fantom.py": 1986459352773446836, + "venv/lib/python3.13/site-packages/PIL/AvifImagePlugin.py": 1872412416505003364, + "frontend/src/components/tasks/LogEntryRow.svelte": 7224781044020990429, + "docs/api/html/group__test__tui__f8__blocked__without__facade__binding.html": 5329039055415769403, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_insert.py": 9195027887301180927, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_deprecations.py": 8310244516175542839, + "venv/lib/python3.13/site-packages/git/objects/tag.py": 7954808535585493300, + "docs/api/html/group__DashboardDatasetItem.html": 288797829356699689, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_frame.py": 2169381747938271444, + "docs/api/html/group__test__end__event__shared__banner.html": 116805575152722056, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_reindex.py": 15680924058960901067, + "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/RECORD": 13494296690334916257, + "venv/lib/python3.13/site-packages/httpcore/_sync/interfaces.py": 1532245423878428608, + "docs/api/html/group__AssistantSchemas.html": 17488044216136493605, + "docs/api/html/group__ProfileAuthorizationError.html": 17298627696052003006, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/hook-numpy.pyi": 14233146512272397376, + "venv/lib/python3.13/site-packages/pip/_internal/self_outdated_check.py": 991029278889407558, + "docs/api/html/group__detect__language.html": 18333706809382540759, + "venv/lib/python3.13/site-packages/pandas/io/formats/string.py": 14718123345899686696, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_quarter.py": 6795026338946382805, + "docs/api/html/group____recovery__imports.html": 14364048882219717740, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_arithmetic.py": 17449383588949771785, + "venv/lib/python3.13/site-packages/git/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_repr.py": 16609300578827398344, + "docs/api/html/group__SidebarTestModule.html": 15647744772485755211, + "venv/lib/python3.13/site-packages/urllib3/contrib/emscripten/fetch.py": 13937019222549208796, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_index_new.py": 796607958391882182, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/__init__.py": 3577295959173028042, + "docs/api/html/doxygen__docs_8h.html": 4085601024655800433, + "docs/api/html/group__SlackProvider.html": 13046100064758196543, + "docs/api/html/group__EventBusModule.html": 12486786797945687836, + "docs/api/html/group__TranslatePluginPackage.html": 16341267951062510196, + "docs/api/html/group__get__filename__from__headers.html": 457671362301086919, + "venv/lib/python3.13/site-packages/click/parser.py": 13988544851350599869, + "venv/lib/python3.13/site-packages/greenlet/greenlet_refs.hpp": 8525862687669040510, + "docs/api/html/group__TranslationJobDictionary.html": 12589120419165244757, + "docs/api/html/navtreeindex18.js": 12393713505269071662, + "docs/api/html/group__TestClickHouseTimestampNormalization.html": 16093633626248389892, + "docs/api/html/group__FilterConfidenceState.html": 10329024197508984898, + "backend/git_repos/remote/test-repo.git/hooks/pre-push.sample": 8029776382195911768, + "docs/api/html/group__BulkFindReplaceService.html": 13762621363378124184, + "backend/src/core/superset_client/_dashboards_write.py": 17768282769896196778, + "venv/lib/python3.13/site-packages/numpy/f2py/_src_pyf.py": 546976622482819095, + "docs/api/html/group____build__target__columns.html": 5216268696007966716, + "venv/lib/python3.13/site-packages/rapidfuzz/__pyinstaller/__init__.py": 1229691061011958769, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_api.py": 7131036004750554905, + "backend/src/api/routes/__tests__/test_reports_openapi_conformance.py": 17231166761215151699, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_sql.py": 3901697517087276687, + "frontend/static/favicon.svg": 6451919037497541980, + "venv/lib/python3.13/site-packages/_pytest/config/exceptions.py": 3199245296954654462, + "docs/api/html/group____FakeTask.html": 16676856916522433598, + "venv/lib/python3.13/site-packages/pandas/tests/computation/test_compat.py": 11655000938111420543, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/test_transform.py": 5674175311567817854, + "frontend/src/components/tasks/LogFilterBar.svelte": 1342324464094667837, + "venv/lib/python3.13/site-packages/numpy/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/agile.py": 5686162551416231457, + "docs/api/html/group__test__llm__analysis__timeout__constants.html": 8010871658971891725, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_py.py": 13809503317864539103, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Prefix.py": 4672871351134074735, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_integer/foo90.f90": 3492659529812762861, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/processors.cpython-313-x86_64-linux-gnu.so": 18139875206371157315, + "docs/api/html/group__LogFilterBar.html": 6090838125002308969, + "docs/api/html/group__test__multiple__events.html": 15612673565402865625, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/models.py": 17870758731501836303, + "venv/lib/python3.13/site-packages/numpy/f2py/f2py2e.pyi": 14181518821845356636, + "venv/lib/python3.13/site-packages/pygments/styles/igor.py": 2291640843781128270, + "frontend/build/_app/immutable/chunks/C2DipQLT.js": 333538434576244034, + "venv/lib/python3.13/site-packages/keyring/__main__.py": 14602212239605295451, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/METADATA": 14608873187265321271, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_compression.py": 8061288329598682752, + "backend/src/services/reports/__tests__/test_report_service.py": 2262310201779987221, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_dtype.py": 12210524152630532747, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_regression.py": 6742646011852052645, + "venv/lib/python3.13/site-packages/pandas/core/methods/__init__.py": 15130871412783076140, + "docs/api/html/group__DatasetProfileDto.html": 15394265151763865885, + "backend/src/core/superset_client/_databases.py": 16562767538012813426, + "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/__init__.py": 9083396324667433335, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_args.py": 5821040955806257450, + "docs/api/html/search/mag_d.svg": 14208504129760637316, + "frontend/playwright-report/trace/index.CzXZzn5A.css": 10367596602957476705, + "docs/api/html/group__test__revoke__not__found.html": 17990266220085436024, + "docs/api/html/group__login__adfs.html": 10102492706907150145, + "backend/src/plugins/translate/preview_prompt_helpers.py": 14303328860208074708, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/WHEEL": 13347410390513723930, + "docs/api/html/dir_bff1a75f97c7ace650ee0c8d57d0aaa5.html": 13431474567808681090, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/schema.py": 5391655516870611151, + "frontend/build/_app/immutable/chunks/DkSc7bnI.js": 16633882293462436801, + "docs/api/html/group__ValidationRunService.html": 9956169665748668204, + "docs/api/html/group__SupersetSqlLabExecutor.html": 4626317945232616372, + "venv/lib/python3.13/site-packages/cryptography/py.typed": 15130871412783076140, + "docs/api/html/group__wait__for__input.html": 11071282356984674501, + "docs/api/html/group__test__release__reject__contract.html": 11500420123173892128, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/METADATA": 13633829318759752611, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_take.py": 1216902953519121176, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_between.py": 337429135216881486, + "venv/bin/pip": 13861749540792881808, + "docs/api/html/group__frontend__src__services__taskService__js____getTasks.html": 12754837933544376454, + "venv/lib/python3.13/site-packages/passlib/totp.py": 14590474309565233318, + "venv/lib/python3.13/site-packages/cryptography/exceptions.py": 5173540025160237758, + "docs/api/html/group__test__enterprise__policy__valid.html": 195059262392650565, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_astype.py": 15768655715952923925, + "backend/src/models/dashboard.py": 18145369015035676491, + "venv/lib/python3.13/site-packages/pillow.libs/libbrotlicommon-c55a5f7a.so.1.2.0": 2635192149914499986, + "docs/api/html/group__frontend__src__lib__api__validation__js____buildParams.html": 8870797152431444795, + "docs/api/html/group__TaskStatus.html": 16939779299568979357, + "docs/api/html/group__ReportTypeProfiles__Module.html": 6048512366307639028, + "venv/lib/python3.13/site-packages/fastapi/utils.py": 15402403831700548944, + "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh26681.f90": 1515497186927052106, + "venv/lib/python3.13/site-packages/pygments/lexers/textfmts.py": 17438453283146671997, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_kurt.py": 2898715045429898166, + "venv/lib/python3.13/site-packages/pandas/_libs/interval.cpython-313-x86_64-linux-gnu.so": 8964760352224019544, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pyasn1/type/tag.py": 13912273274509186651, + "venv/lib/python3.13/site-packages/fastapi/security/api_key.py": 6965937678104291169, + "backend/src/core/encryption_key.py": 11618631956132703846, + "docs/api/html/group__test__republish__after__revoke__creates__new__active__record.html": 4995611949973079733, + "docs/api/html/group__test__clean__release__cli.html": 3665197736868730317, + "venv/lib/python3.13/site-packages/pygments/lexers/compiled.py": 8215290039991205531, + "frontend/src/lib/ui/Card.svelte": 8508366526326051165, + "docs/api/html/group__SupersetClientGetAllResources.html": 16201935844007355283, + "docs/api/html/group__SupersetContextRecoveryMixin____normalize__imported__filter__payload.html": 13846106026428255506, + "frontend/src/routes/dashboards/health/__tests__/health_page.integration.test.js": 7606382627471479368, + "docs/api/html/group__test__get__users__page__sends__lowercase__order__direction.html": 17648935033667456417, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/characteristics.py": 2916810597149066609, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/help.py": 3124654001287175629, + "venv/lib/python3.13/site-packages/apscheduler/executors/gevent.py": 17122637996105344344, + "docs/api/html/group__get__resource__service.html": 18383236607747383835, + "venv/lib/python3.13/site-packages/iniconfig/__init__.py": 12623265899068631092, + "docs/api/html/group__GiteaRepoCreateRequest.html": 610515655183349355, + "docs/api/html/group__test__task__context__preserves__background__tasks__across__sub__context.html": 15827171381080992984, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_strptime.py": 14328510310436552635, + "venv/bin/dotenv": 953953349803507198, + "frontend/src/lib/components/reports/__tests__/reports_list.ux.test.js": 10301023261856534116, + "docs/api/html/group__test__report__builder__sets__immutable__snapshot__flag.html": 4818862330013157215, + "venv/lib/python3.13/site-packages/pandas/tests/frame/constructors/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/f2py/symbolic.pyi": 14558091964387571257, + "docs/api/html/group__ScreenshotService.html": 3636441712660943738, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_quantile.py": 17110581927381599978, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_character.py": 850554362222586199, + "frontend/build/_app/immutable/nodes/20.CrNL0ah0.js": 8059546893479032360, + "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/RECORD": 7320381591791379627, + "venv/lib/python3.13/site-packages/urllib3/util/proxy.py": 17667887856427739069, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh17859.f": 13562390882286135024, + "docs/api/html/group__get__scheduler__service.html": 12730756881612997283, + "docs/api/html/group__DatasetRunContext.html": 16196372668932517376, + "venv/lib/python3.13/site-packages/passlib/handlers/des_crypt.py": 15304795681178011265, + "venv/lib/python3.13/site-packages/requests/auth.py": 912521029864094489, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_clip.py": 11111183698178681331, + "venv/lib/python3.13/site-packages/numpy/fft/_helper.pyi": 9546918341939102632, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/WHEEL": 11630459739183915695, + "docs/api/html/group__DatasourceMetadataService.html": 6885799880168091624, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_win_type.py": 18105114803686556748, + "venv/lib/python3.13/site-packages/httpcore/_models.py": 2501866419898326733, + "venv/lib/python3.13/site-packages/pandas/tests/resample/__init__.py": 15130871412783076140, + "backend/src/plugins/translate/orchestrator_cancel.py": 673611364664367049, + "venv/lib/python3.13/site-packages/anyio/_core/_testing.py": 14024940365851109155, + "docs/api/html/group__get__user__by__username.html": 2246686587123622263, + "docs/api/html/group__TranslationResultAggregator.html": 7516401936647746773, + "venv/lib/python3.13/site-packages/numpy/random/_examples/cython/extending.pyx": 756189645898997788, + "venv/lib/python3.13/site-packages/numpy/_core/defchararray.pyi": 2277933368373498515, + "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/RECORD": 9964194961227523130, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_at.py": 1029744344133153888, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_getitem.py": 11882213323878588707, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23598.f90": 1409455010615482779, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/common.py": 2075178842766962782, + "venv/lib/python3.13/site-packages/urllib3/fields.py": 9503202008440141421, + "docs/api/html/group__ui__Module.html": 3556271867573996475, + "frontend/src/lib/stores/sidebar.js": 4584261073573678043, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/__init__.py": 96341051676048910, + "venv/lib/python3.13/site-packages/pygments/lexers/testing.py": 17148598391210353576, + "frontend/src/lib/components/health/ScheduleAtAGlance.svelte": 2047418178814771337, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/__init__.py": 1437580234680265326, + "docs/api/html/group__test__commit__changes__wraps__unexpected__error__as__500.html": 2137933037595901582, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/recarray_from_file.fits": 15116318600514274152, + "venv/lib/python3.13/site-packages/pandas/api/typing/aliases.py": 11194270368147942988, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_frame.py": 9378623452601244234, + "frontend/playwright-report/index.html": 73860403936737424, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_constructors.py": 11786151805350138436, + "frontend/build/_app/immutable/nodes/31.B1endBte.js": 11672575267879175465, + "venv/lib/python3.13/site-packages/numpy/lib/_polynomial_impl.py": 12771179468704314203, + "venv/lib/python3.13/site-packages/pandas/io/excel/_util.py": 6664989864423807444, + "venv/lib/python3.13/site-packages/git/cmd.py": 8854786163152637148, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libk5crypto-b1f99d5c.so.3.1": 10669523137596317954, + "frontend/src/components/backups/BackupList.svelte": 7178110735645066783, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_parser.py": 8145921552236189367, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_equals.py": 6429101196875333574, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/rsa/prime.py": 10820898885044917095, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/parameters.py": 5104015814292812973, + "docs/api/html/group__TestGitStatusRoute.html": 2805903254981550979, + "docs/api/html/group__save__profile__and__findings.html": 2929839953576621200, + "venv/lib/python3.13/site-packages/pandas/_libs/algos.pyi": 22405377601029952, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/einsumfunc.pyi": 8902765738896588686, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/controller.py": 5450931608244830335, + "frontend/src/routes/datasets/review/useReviewSession.js": 2360677870127730232, + "venv/lib/python3.13/site-packages/psycopg2/tz.py": 9966680685796585198, + "venv/lib/python3.13/site-packages/pygments/lexers/bdd.py": 5389493859905397060, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_docs.py": 17898499890274685198, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_polyutils.pyi": 3841660741524427413, + "docs/api/html/group__EnvironmentMock__Module.html": 14116359480209547116, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/__init__.py": 15130871412783076140, + "docs/api/html/group__test__create__remote__repository__creates__provider__repo.html": 13400861927477164469, + "venv/lib/python3.13/site-packages/pygments/lexers/web.py": 11104721221615804497, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x32_unix.h": 9165722966153119887, + "venv/lib/python3.13/site-packages/pip/_vendor/certifi/py.typed": 15130871412783076140, + "docs/api/html/group__DatasetsApiTests.html": 8138723528945535385, + "venv/lib/python3.13/site-packages/_pytest/assertion/util.py": 16957445183087315124, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/trafficscript.py": 776604244051744646, + "venv/lib/python3.13/site-packages/websockets/legacy/__init__.py": 12332512329533591682, + "docs/api/html/group__TermCorrectionBulkSubmit.html": 8087312419241004448, + "docs/api/html/group__test__get__next__executions.html": 17453367342374515739, + "venv/lib/python3.13/site-packages/itsdangerous/signer.py": 3694661094753475840, + "venv/lib/python3.13/site-packages/numpy/lib/array_utils.py": 18135114588643176359, + "frontend/src/lib/stores/__tests__/sidebar.test.js": 3057168376995255911, + "docs/api/html/group__test__parse__dashboard__url__for__filters__permalink.html": 5330991424170288666, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/expression.py": 15511250785671695359, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_update_delete.py": 1317337950621091021, + "docs/api/html/group__test__run__without__manifest__rejected.html": 13460920870647693397, + "docs/api/html/group__build__columns.html": 14782239725954054542, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/useless_keywords.py": 11487954623214475915, + "frontend/build/_app/immutable/chunks/B5kMH_bQ.js": 13942101361562838660, + "docs/api/html/group____parse__command.html": 2613491451304576155, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x86_unix.h": 13709837360414450184, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/hotp.py": 18325640697829098192, + "backend/src/services/auth_service.py": 5948958621485759282, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/linalg/__init__.pyi": 18409133021422984774, + "docs/api/html/group__frontend__src__services__git__utils__js____resolveCurrentEnvironmentId.html": 18338234361034582529, + "docs/api/html/group__normalize__owner__tokens.html": 10173921796259136968, + "venv/lib/python3.13/site-packages/pandas/core/indexing.py": 15507869313676722071, + "docs/api/html/group____broadcast__dataset__updated.html": 8967669920658939702, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_formats.py": 12299393760307251036, + "docs/api/html/group____handle__response__format__fallback.html": 11346867985412676592, + "backend/src/services/clean_release/__init__.py": 9144880924791476391, + "venv/lib/python3.13/site-packages/cryptography/x509/certificate_transparency.py": 11337143186866439208, + "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/RECORD": 10552906886624188222, + "docs/api/html/group__update__execution__mapping.html": 5866096724549130972, + "docs/api/html/group__test__belief__scope__success__reflect.html": 8691621763793235095, + "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/INSTALLER": 17282701611721059870, + "backend/src/plugins/translate/_llm_call.py": 12276699540223140419, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_integer/foo77.f": 12000068001851270396, + "frontend/src/lib/api/translate/target-schema.js": 10665479411127476571, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/RECORD": 5612689057373270213, + "venv/lib/python3.13/site-packages/pyasn1/codec/ber/eoo.py": 5126566925877730303, + "docs/api/html/navtreeindex2.js": 14264443857454783261, + "venv/lib/python3.13/site-packages/_pytest/skipping.py": 10561585274103209115, + "backend/src/core/auth/jwt.py": 16970967561039664297, + "docs/api/html/group__MigrationEngine.html": 9187249700735075008, + "docs/api/html/group__get__database__mappings.html": 4882039116942012048, + "docs/api/html/group__AssistantModels.html": 13818196745867110031, + "venv/lib/python3.13/site-packages/fastapi/websockets.py": 9910052969532075719, + "backend/src/schemas/health.py": 17351928434071690723, + "venv/lib/python3.13/site-packages/authlib/oauth2/client.py": 7237359250450222680, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/bitwise_ops.pyi": 15598239133239520456, + "venv/lib/python3.13/site-packages/numpy/lib/_npyio_impl.py": 2215312866861772848, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/rsa_key.py": 7092106298733667895, + "venv/lib/python3.13/site-packages/anyio/_core/_fileio.py": 4507100568401692983, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_case_justify.py": 8204537837649550062, + "venv/lib/python3.13/site-packages/rsa/transform.py": 12261738253972114335, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/__init__.py": 13841777369501476946, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/url.py": 1558176735588971829, + "venv/lib/python3.13/site-packages/pygments/lexers/jsonnet.py": 1314044008440065525, + "docs/api/html/group__read__dashboard__from__disk.html": 6267975408342998536, + "docs/api/html/group__frontend__src__routes____page__ts____load.html": 10563006296048613280, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_index.py": 10837492069089787028, + "venv/lib/python3.13/site-packages/pydantic/v1/main.py": 213087273729911492, + "docs/api/html/group__test__approveRow__Function.html": 17163537917081477745, + "venv/lib/python3.13/site-packages/starlette/templating.py": 9242638124487797988, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_constructors.py": 9815164146739254076, + "venv/lib/python3.13/site-packages/pygments/formatters/bbcode.py": 8614391937525677922, + "docs/api/html/group__loadRecentTasks__Function.html": 8342396704682270870, + "venv/lib/python3.13/site-packages/pygments/styles/algol.py": 3040373291664740876, + "backend/src/plugins/translate/preview_token_estimator.py": 254295902082954386, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_coercion.py": 7261787308019145312, + "docs/api/html/search/groups_d.js": 1277170985754207380, + "docs/api/html/group__BuildOfflineDockerBundle.html": 2244041374994039539, + "venv/lib/python3.13/site-packages/greenlet/TMainGreenlet.cpp": 9489520001674089404, + "venv/lib/python3.13/site-packages/pygments/lexers/_postgres_builtins.py": 2383906454995727700, + "venv/lib/python3.13/site-packages/fastapi/_compat/model_field.py": 392699021682253569, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/prompt.py": 9561640601516933380, + "venv/lib/python3.13/site-packages/pygments/lexers/dns.py": 17149871769553794654, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____createMaintenanceStore.html": 15666277817262057243, + "docs/api/html/group__SessionCollaboratorRole.html": 3015568436480767444, + "docs/api/html/group__get__settings.html": 1490728116106832265, + "docs/api/html/group__frontend__src__lib__api__validation__js____triggerRun.html": 4533127585714595290, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_hour.py": 14128508606361694814, + "venv/lib/python3.13/site-packages/pandas/_libs/testing.cpython-313-x86_64-linux-gnu.so": 16758333404587340103, + "docs/api/html/group__updateTask__Function.html": 11102333396610846970, + "docs/api/html/group__SettingsPage.html": 11139530217038362934, + "docs/api/html/group__resolve__provider__model.html": 3697548583109098137, + "docs/api/html/group__test__valid__key__returns__principal.html": 14343096821860232032, + "venv/lib/python3.13/site-packages/itsdangerous/serializer.py": 14271229091461164933, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_copy.py": 12902342280706372953, + "docs/api/html/group__fetchTasks__Function.html": 2358966877665297910, + "venv/lib/python3.13/site-packages/pluggy/__init__.py": 8269188363563356631, + "docs/api/html/group__Permission.html": 12943669349918425540, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_concat.py": 16549010224568175202, + "frontend/src/lib/i18n/index.ts": 14616557360624297847, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_resolution.py": 9651416588266430520, + "backend/ss_tools_dev.db": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_timezones.py": 8042029178538467146, + "docs/api/html/group__InlineCorrectionSubmit.html": 13969595502641036335, + "docs/api/html/group__create__isolated__repository.html": 15487512963939648991, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_laguerre.py": 7475592201750602042, + "venv/lib/python3.13/site-packages/pandas/core/arrays/numpy_.py": 16641729409992576358, + "venv/lib/python3.13/site-packages/h11/__init__.py": 222801976520197308, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/__init__.py": 4781700006554860887, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi": 13061638961405460334, + "venv/lib/python3.13/site-packages/numpy/random/__init__.py": 11732100564412485633, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/__init__.py": 14522970260621605208, + "venv/lib/python3.13/site-packages/pygments/formatters/terminal256.py": 11473927781167132440, + "docs/api/html/group__TokenData.html": 10513747130917299744, + "venv/lib/python3.13/site-packages/anyio/_core/_tasks.py": 14104828341875599130, + "docs/api/html/search/groups_16.js": 8625558773447853349, + "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/WHEEL": 8954358347596196608, + "backend/src/plugins/translate/service_bulk_replace.py": 5355744069308185607, + "frontend/test-results/live-project-check.e2e.js--abfe5-project-with-admin-admin123-chromium/trace.zip": 2929961739056234978, + "venv/lib/python3.13/site-packages/uvicorn/protocols/http/__init__.py": 15130871412783076140, + "docs/api/html/group__client.html": 9166531319498298577, + "venv/lib/python3.13/site-packages/secretstorage/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api1.c": 8494977275215578998, + "frontend/src/components/git/GitWorkspacePanel.svelte": 4516972512005887443, + "venv/lib/python3.13/site-packages/pygments/lexers/ptx.py": 4855144232064607995, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix.pyi": 2700568594438441246, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_find_common_type.py": 9581516171321396333, + "docs/api/html/globals_func_t.html": 17227441317231061430, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_datetime.py": 13781712980921881470, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_periodindex.py": 13430003945574795792, + "venv/lib/python3.13/site-packages/starlette/middleware/httpsredirect.py": 16837082808103815044, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh18335.f90": 1126438609189294255, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/shape.py": 13410030168622484801, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/__init__.py": 15130871412783076140, + "docs/api/html/group__handleDeleteReport__Function.html": 6406518708534911213, + "docs/api/html/group____persist__audit.html": 17877024820327467143, + "venv/lib/python3.13/site-packages/greenlet/tests/test_extension_interface.py": 11693583111513457974, + "venv/lib/python3.13/site-packages/pygments/lexers/modeling.py": 15714077241620129689, + "venv/lib/python3.13/site-packages/pip/_vendor/distro/distro.py": 12494639376332486204, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_update.py": 12293424926920594944, + "docs/api/html/group__frontend__src__services__adminService__js____getPermissions.html": 986367622820934646, + "docs/api/html/group__MigrationDryRunService.html": 12712480299293943779, + "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_utils.py": 2329717399120006435, + "backend/src/plugins/translate/_lang_detect.py": 2125979777533490081, + "docs/api/html/group__ReportCollection.html": 7174779192702599484, + "docs/api/html/group__MigrationE2E.html": 11325763991415698239, + "docs/api/html/group__CompiledPreview.html": 13362113672066090539, + "docs/api/html/group____normalize__filter__values.html": 7790645858095652627, + "docs/api/html/group__delete__file.html": 5881932655140602026, + "venv/lib/python3.13/site-packages/gitdb/db/loose.py": 17467413653016810702, + "venv/lib/python3.13/site-packages/_pytest/stash.py": 14430252294763173610, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_quantile.py": 4225791949463893856, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/typst.tpl": 5055419073126793137, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/RECORD": 2963644632913976754, + "venv/lib/python3.13/site-packages/apscheduler/__init__.py": 8652514118183227412, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_info.py": 15151894356374015812, + "venv/lib/python3.13/site-packages/pyasn1/type/error.py": 1479878696626082697, + "venv/lib/python3.13/site-packages/PIL/DcxImagePlugin.py": 11767274218348117481, + "frontend/build/_app/immutable/chunks/ZvPSSfIA.js": 7807067580962053496, + "venv/lib/python3.13/site-packages/pandas/core/_numba/__init__.py": 15130871412783076140, + "docs/api/html/group____get__default__environment__id.html": 17375226256254872481, + "venv/lib/python3.13/site-packages/pygments/lexers/arturo.py": 4565524340706235725, + "docs/api/html/group__SessionDetail.html": 8883911469141750019, + "docs/api/html/group____extract__chart__data__rows.html": 2508559388931054401, + "docs/api/html/group____make__us3__session.html": 16077792546481746027, + "backend/src/core/task_manager/graph.py": 3769962371015813191, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_asof.py": 15792528637923603240, + "docs/api/html/group__AuthService.html": 17583408280713591083, + "backend/src/plugins/translate/orchestrator_config.py": 1227864697811313446, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_copy_deprecation.py": 16045426957636349035, + "docs/api/html/group__approve__batch__execution__mappings.html": 17647944553899662758, + "venv/lib/python3.13/site-packages/pandas/io/excel/_xlsxwriter.py": 16873939324418752965, + "docs/api/html/group__ScriptsPackage.html": 4686762520162845714, + "frontend/src/lib/components/DashboardMaintenanceBadge.svelte": 9085495636438661604, + "docs/api/html/group____seed__candidate__with__report.html": 5421169190057147596, + "docs/api/html/group__MappingsPageScript__Block.html": 3290002320641902083, + "backend/src/plugins/storage/plugin.py": 8516872254456553013, + "venv/lib/python3.13/site-packages/cffi/_cffi_errors.h": 1479575326813300292, + "backend/git_repos/remote/test-repo.git/objects/71/47ad0836409b35c1650dddf5fa6329ba61a824": 16601919569600972016, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_csv.py": 571991535656576735, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_defmatrix.py": 2982572083770917411, + "docs/api/html/group__SupersetClientGetNativeFilterState.html": 7632236885296955181, + "venv/lib/python3.13/site-packages/anyio/abc/_subprocesses.py": 4297459042599291531, + "venv/lib/python3.13/site-packages/numpy/_typing/__init__.py": 18242238390157333247, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_repr.py": 7552782621374439569, + "venv/lib/python3.13/site-packages/pandas/_testing/_hypothesis.py": 12298650110193262367, + "backend/src/models/dataset_review_pkg/__init__.py": 1796062139548584878, + "backend/git_repos/remote/test-repo.git/objects/f7/6ee984d9d47c3cd0b362fdf60a47162bbc202d": 5351983130474596028, + "venv/lib/python3.13/site-packages/fastapi/security/base.py": 15674297568104917749, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/timeout.py": 1807228452024740476, + "docs/api/html/group__deleteRun__Function.html": 15413700130406237535, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_deprecated_kwargs.py": 10379929935087904974, + "docs/api/html/group__MapperTool.html": 2827767962983201486, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/value_attrspec/gh21665.f90": 11945588837236968550, + "docs/api/html/group__get__merge__conflicts.html": 13270034822172825745, + "venv/lib/python3.13/site-packages/pygments/lexers/rego.py": 16022844238903541738, + "docs/api/html/group__test__register__candidate__rejects__duplicate__candidate__id.html": 6105187651633201559, + "docs/api/html/group____plan__intent__with__llm.html": 11560361184946600835, + "docs/api/html/group__test__git__service__get__repo__path__guard.html": 14019768017372580436, + "docs/api/html/group__test__duplicate__job.html": 16156801753517777022, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_get_numeric_data.py": 5896318696417090902, + "venv/lib/python3.13/site-packages/httpcore/_sync/http11.py": 5947339024588907032, + "docs/api/html/group__test__plugin__loader__uses__logger__not__print.html": 9927001174578654853, + "docs/api/html/group__SupersetClientUpdateDataset.html": 9267713141598532121, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/resolution.py": 5132658725516243311, + "docs/api/html/group__SupersetContextFiltersExtractMixin____extract__imported__filters.html": 5149922330981040989, + "docs/api/html/group__test__git__config.html": 14894041378515335606, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_timezones.py": 15157687716502574038, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/missing.py": 14589973874359353799, + "venv/lib/python3.13/site-packages/pandas/core/roperator.py": 2587829042468916489, + "docs/api/html/group__loadStatus__Watcher.html": 5559550850267014121, + "docs/api/html/group__TestAPIKeyRoutes.html": 4190666277064889784, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/asyncio.py": 2517623574187179319, + "venv/lib/python3.13/site-packages/uvicorn/middleware/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/registration.py": 14639972512303032712, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/mixed/foo_fixed.f90": 8079594129222364031, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_encoding.py": 6622474614967398246, + "venv/lib/python3.13/site-packages/pygments/styles/borland.py": 17570558758932580659, + "docs/api/html/group__TranslationLanguageResponse.html": 17228524673941050506, + "venv/lib/python3.13/site-packages/iniconfig/_version.py": 8497474654470220170, + "docs/api/html/group____handle__http__error.html": 9220062881002809882, + "docs/api/html/search/functions_16.js": 14777540345560864351, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/__init__.py": 12849371269359608058, + "docs/api/html/group__run__revoke.html": 8815559895593475894, + "docs/api/html/doxygen.svg": 12256108328721719854, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/__init__.py": 9751988289698484530, + "venv/lib/python3.13/site-packages/urllib3/util/connection.py": 15511685694589961094, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkeyutils-dfe70bd6.so.1.5": 9414227432578104677, + "venv/lib/python3.13/site-packages/pygments/lexers/templates.py": 16267123844830647955, + "venv/lib/python3.13/site-packages/PIL/Image.py": 13615925856053031482, + "venv/lib/python3.13/site-packages/pygments/lexers/vip.py": 11287963054551122004, + "frontend/build/_app/immutable/nodes/2.D23is_vV.js": 13661853902901523795, + "backend/src/api/routes/validation/__tests__/test_validation_api.py": 3854767876193048673, + "venv/lib/python3.13/site-packages/numpy/lib/_arrayterator_impl.pyi": 2744889206277418389, + "venv/lib/python3.13/site-packages/numpy/polynomial/laguerre.py": 151202984060101867, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/wrappers.py": 315409799569602977, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_arithmetic.py": 11620920548943067949, + "docs/api/html/group__normalizeDatasetReviewDetail__Function.html": 8804263811893076635, + "docs/api/html/group__clean__release__mappers.html": 5318141435059670889, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust.abi3.so": 2537152913308578487, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_args_and_kwargs.py": 3381939712123764154, + "docs/api/html/group__handleCreateMapping__Function.html": 12147099060978125723, + "docs/api/html/group__MarkerLogger.html": 12923422177561303819, + "venv/lib/python3.13/site-packages/pillow.libs/libfreetype-ee1c40c4.so.6.20.4": 12301510769231120312, + "dist/docker/backend.e2e-test-20260526-112457.tar.xz": 4108388229722907376, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/_py_util.py": 13997184496924925110, + "venv/lib/python3.13/site-packages/pillow.libs/libzstd-761a17b6.so.1.5.7": 17875236748140157032, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/provision.py": 8707620698060818654, + "docs/api/html/group__stage__result__map.html": 18249886114510031003, + "frontend/eslint.config.js": 14296985543214702398, + "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/METADATA": 3814104793342833872, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_xlrd.py": 9982457234958102003, + "venv/lib/python3.13/site-packages/PIL/PdfParser.py": 13710342183037972042, + "venv/lib/python3.13/site-packages/pandas/_libs/__init__.py": 17117112389651696580, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_validators.py": 14178329676643700151, + "venv/lib/python3.13/site-packages/itsdangerous/_json.py": 4872267972688724005, + "docs/api/html/group__DashboardMetadata.html": 3536240584361293053, + "venv/lib/python3.13/site-packages/certifi/core.py": 7472627735517449185, + "venv/lib/python3.13/site-packages/anyio/_core/__init__.py": 15130871412783076140, + "docs/api/html/group__SupersetClientGetDatabase.html": 4802291779474339990, + "docs/api/html/group__isAdminUser__Function.html": 2409880753894519871, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_index_as_string.py": 292438690259156869, + "venv/lib/python3.13/site-packages/httpx/_transports/asgi.py": 12335675489870745729, + "docs/api/html/group__test__multiple__stale__pending__all__cleared.html": 9272463816474981933, + "frontend/src/components/git/GitOperationsPanel.svelte": 5140779139910068800, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/bitgen.h": 12421210767114721499, + "docs/api/html/group__trigger__preview__generation.html": 17109618387126264866, + "docs/api/html/group__SqlTableExtractorModule.html": 7193260644238587422, + "venv/lib/python3.13/site-packages/numpy/_typing/_shape.py": 12667553664122376205, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_equals.py": 9405821443172167066, + "docs/api/html/group__test__pagination__boundaries.html": 7157080918011904103, + "docs/api/html/group__test__key__table__sorting.html": 7072979890307169502, + "venv/lib/python3.13/site-packages/passlib/utils/compat/_ordered_dict.py": 14248790502300368024, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_set_value.py": 4166411740676564820, + "docs/api/html/group__test__save__config__accepts__raw__payload__and__keeps__extras.html": 11846202691943319524, + "venv/lib/python3.13/site-packages/pydantic/v1/class_validators.py": 6471688474853407718, + "venv/lib/python3.13/site-packages/sqlalchemy/exc.py": 6372950288664776625, + "frontend/e2e/tests/migration.e2e.js": 7453107045608888506, + "venv/lib/python3.13/site-packages/pandas/core/frame.py": 2630807744775247533, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_isin.py": 14387850595546682314, + "venv/lib/python3.13/site-packages/numpy/fft/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/pkg_resources/__init__.py": 1677532855362260338, + "docs/api/html/group__ValidationHistory.html": 75479766067234130, + "docs/api/doxygen_docs.h": 7306291205722937283, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_describe.py": 362374422228593281, + "venv/lib/python3.13/site-packages/passlib/handlers/mysql.py": 11165762635383041460, "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_indexing.py": 9862204223281834360, + "venv/lib/python3.13/site-packages/sqlalchemy/pool/impl.py": 4687705587963980337, + "backend/src/models/storage.py": 14886607138033931307, + "venv/lib/python3.13/site-packages/pillow.libs/libwebpmux-7f11e5ce.so.3.1.2": 13105940093474848953, + "docs/api/html/group__GitStatus.html": 12469885171313367595, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_rename_axis.py": 12432900682994622455, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_cte.py": 9274103293201050794, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/base.py": 6348888156686452825, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arccosh.csv": 5882025767947638305, + "venv/lib/python3.13/site-packages/passlib/crypto/_md4.py": 379335134151814809, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_explode.py": 18263694040596159591, + "docs/api/html/group__seed__trace__id.html": 9478009198218783393, + "docs/api/html/group____require__auto__review__flag.html": 8794268766415982314, + "venv/lib/python3.13/site-packages/pandas/tests/test_optional_dependency.py": 7930709646653025355, + "docs/api/html/group____perform__upload.html": 16003778061143161761, + "docs/api/html/group__get__dashboard__filter__binding.html": 2139882779492208369, + "docs/api/html/group____resolve__repository__status.html": 14395426941616609866, + "docs/api/html/group____build__sql__lab__redirect__url.html": 4568202178269138535, + "docs/api/html/group__test__get__task__not__found.html": 13878984338730956196, + "docs/api/html/group__DatasetReviewSchemaDtos.html": 4934342432845855674, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion": 2607512361823362698, + "venv/lib/python3.13/site-packages/pandas/io/html.py": 2727247063231114153, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_cython_aggregations.py": 10818895573637904764, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____setLoading.html": 8035127119828589627, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_stmts.f90": 6123192245816905092, + "docs/api/html/group__get__merge__status.html": 5585461605770877372, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_xs.py": 11073752361562791165, + "venv/lib/python3.13/site-packages/PIL/QoiImagePlugin.py": 17663704273100331654, + "venv/lib/python3.13/site-packages/pydantic/errors.py": 3506829204186508192, + "frontend/src/lib/toasts.js": 17626443524470260846, + "backend/alembic/versions/f0e9d8c7b6a5_cascade_ondelete_all_env_fks.py": 18274103435952144919, + "docs/api/html/tab_h.png": 1719686501894845356, + "venv/lib/python3.13/site-packages/httpcore/_sync/http_proxy.py": 14037211594707072958, + "frontend/src/lib/components/translate/TargetSchemaHint.svelte": 9354096644840520484, + "docs/api/html/group__ApiKeyRevokeResponse.html": 17229380547322413204, + "venv/lib/python3.13/site-packages/attr/_version_info.py": 3850449653182103457, + "venv/lib/python3.13/site-packages/_pytest/mark/__init__.py": 9343015549300275714, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/getitem.py": 556339939822508169, + "venv/lib/python3.13/site-packages/numpy/_typing/_ufunc.py": 16859854811012717088, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_join.py": 17508073052750406350, + "docs/api/html/group__ReportCardTest__Module.html": 2682480122400206889, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/__init__.py": 8632038387100622009, + "frontend/build/_app/immutable/nodes/6.lH4o9phB.js": 11604714069031543912, + "docs/api/html/group__RemoteRepoCreateRequest.html": 12603451785316041896, + "docs/api/html/group__test__create__job__invalid__upsert__strategy.html": 1478408184279931764, + "frontend/build/_app/immutable/nodes/11.DTcqXkiC.js": 9346257290917656558, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_classes.py": 1440926036579216168, + "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/licenses/LICENSE": 6653202620765194772, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/collections.py": 16114931075157411913, + "docs/api/html/group____dispatch__dataset__review__intent.html": 12800069212370219281, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/claims.py": 11853156183819186599, + "docs/api/html/group__get__branches.html": 10322130489312145131, + "venv/lib/python3.13/site-packages/apscheduler/job.py": 1858376671986108667, + "venv/lib/python3.13/site-packages/dotenv/__main__.py": 16883579879172186355, + "venv/lib/python3.13/site-packages/pygments/lexers/graphviz.py": 15677908982985025500, + "docs/api/html/group__frontend__src__services__taskService__js____getTaskLogs.html": 14401072635225830595, + "frontend/build/_app/immutable/chunks/DaqvCktX.js": 12117033425016065257, + "docs/api/html/group__list__roles.html": 13386931894504978817, + "docs/api/html/group__PrepareCandidateRequest.html": 3237622670833360342, + "venv/lib/python3.13/site-packages/idna/compat.py": 9758194415584776667, + "docs/api/html/group__test__key__cols__none__returns__all.html": 8776324869922559549, + "docs/api/html/group__test__stale__pending__cleared__and__proceeds.html": 15143795866405966436, + "venv/lib/python3.13/site-packages/jsonschema/tests/_suite.py": 6307666366417438489, + "docs/api/html/group__ExecutionMapping.html": 9160979664327901038, + "docs/api/html/group__startPolling__Function.html": 11240654189362337669, + "docs/api/html/group__add__backup__job.html": 16776188740195692544, + "venv/lib/python3.13/site-packages/pip/_internal/models/wheel.py": 10473287225032326206, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/shape_base.pyi": 5046405609030418900, + "venv/lib/python3.13/site-packages/pandas/core/reshape/encoding.py": 12702053687535473061, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/git/objects/submodule/util.py": 8621897576747443758, + "venv/lib/python3.13/site-packages/pygments/lexers/codeql.py": 4254046699692048717, + "docs/api/html/group__test__get__reports__invalid__filter__returns__400.html": 7652617513834271963, + "docs/api/html/group__ReportDetailIntegrationTest__Module.html": 11014134516097175898, + "docs/api/html/group__SemanticSource.html": 8217407902309590848, + "docs/api/html/group__test__extract__native__filters__from__permalink__direct__response.html": 2976726265511560969, + "docs/api/html/group__DatasetReviewFindingModels.html": 8713463567973015699, + "docs/api/html/group__normalize__start__page.html": 845187168959113829, + "frontend/src/lib/components/translate/BulkCorrectionSidebar.svelte": 5121541182559165710, + "backend/src/plugins/translate/__init__.py": 12400577052797809611, + "docs/api/html/group__test__expired__key__raises__401.html": 14311462003347056857, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test__exceptions.py": 12099001631178696189, + "venv/lib/python3.13/site-packages/pandas/core/arrays/string_arrow.py": 16997970607998635570, + "backend/src/plugins/git/__init__.py": 2144831474780401625, + "docs/api/html/group__test__get__datasets__service__failure.html": 7841926539827711165, + "docs/api/html/group__GitLLMExtension.html": 13438682288527399729, + "docs/api/html/group__normalize__username.html": 9149179080201447778, + "venv/lib/python3.13/site-packages/_pytest/_argcomplete.py": 3586514420674089892, + "venv/lib/python3.13/site-packages/pygments/lexers/comal.py": 769727871242464458, + "docs/api/html/bc_s.png": 11826155430197355290, + "docs/api/html/group__SupersetContextExtractorBase____search__nested__numeric__key.html": 8181622518576542399, + "docs/api/html/group__AssistantResolvers.html": 2791936012509790266, + "venv/lib/python3.13/site-packages/passlib/handlers/roundup.py": 3844280972451753019, + "docs/api/html/group__get__dashboard__async.html": 462527770103196028, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_constructors.py": 9767900500541600486, + "frontend/src/components/TaskRunner.svelte": 12776680477391915065, + "docs/api/html/group__apply__language__action.html": 6258130513680615487, + "docs/api/html/group__test__json__load__if__needed__json__string.html": 13679424805613281118, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/structures.py": 2668010839316715865, + "venv/lib/python3.13/site-packages/jose/__init__.py": 15575670403380555945, + "backend/src/scripts/test_dataset_dashboard_relations.py": 11883199369340933897, + "docker/nginx.ssl.conf": 12350396037548059686, + "docs/api/html/group__UpdateSessionRequest.html": 6044024401135206762, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_categorical_equal.py": 7942323667866280872, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_is_monotonic.py": 12769599198035357753, + "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/METADATA": 6960169108624303030, + "docs/api/html/group__PluginBase.html": 12795916349382052793, + "venv/lib/python3.13/site-packages/pygments/lexers/supercollider.py": 15306357945850389082, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/simple.py": 11050636051019777317, + "docs/api/html/group__get__job__metrics.html": 440506911200266424, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/mercurial.py": 335201628064585213, + "venv/lib/python3.13/site-packages/pip/_internal/req/constructors.py": 17485271035479378662, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_2_compat.h": 6512969159139431485, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reindex.py": 8772423071604000084, + "venv/lib/python3.13/site-packages/pycparser/_build_tables.py": 569728086093219621, + "docs/api/html/group__get__permission__by__id.html": 9650598973405100772, + "docs/api/html/group__SupersetContextParsingMixin__parse__superset__link.html": 5643145243445652253, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_numba.py": 1548992314517942530, + "frontend/build/_app/immutable/chunks/Cs7qTEqk.js": 15866070137921022262, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_federal.py": 16758212916399857971, + "venv/lib/python3.13/site-packages/sqlalchemy/pool/base.py": 16951268065271931235, + "venv/lib/python3.13/site-packages/urllib3/connectionpool.py": 7493427857878469165, + "frontend/src/routes/profile/__tests__/fixtures/profile.fixtures.js": 11794595959206318249, + "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/WHEEL": 2357997949040430835, + "docs/api/html/group__SearchPlugin.html": 13020517702009127534, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/dynamic.py": 15220116196072524330, + "docs/api/html/group__SupersetContextExtractorBase__build__recovery__summary.html": 4966078538740573780, + "venv/lib/python3.13/site-packages/requests/compat.py": 5836590172733661320, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/oracledb.py": 7158791242292470472, + "venv/lib/python3.13/site-packages/pygments/lexers/prolog.py": 599539463980699865, + "venv/lib/python3.13/site-packages/urllib3/contrib/pyopenssl.py": 11839715589709210412, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_repeat.py": 9155935990114743583, + "backend/src/plugins/translate/_text_cleaner.py": 13161219043687449729, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arrayterator.pyi": 7439348655567232744, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_converter.py": 7709581879446228856, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_printing.py": 8859757563354666575, + "venv/lib/python3.13/site-packages/pygments/formatters/html.py": 1918541918263449443, + "docs/api/html/group__InlineEditRequest.html": 11326341888929414464, + "venv/lib/python3.13/site-packages/numpy/doc/ufuncs.py": 11706048944901534664, + "docs/api/html/group__SupersetCompilationAdapter______init____.html": 4108260053223346394, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/METADATA": 13776251749114562660, + "docs/api/html/group__preview__response__parser.html": 10892982313411363249, + "docs/api/html/group__getUsers__Function.html": 16614665774395265088, + "docs/api/html/group__test__delete__tasks.html": 5667196877695653798, + "venv/lib/python3.13/site-packages/pip/_internal/utils/hashes.py": 17310331665429541812, + "docs/api/html/group__test__expired__event__auto__ends.html": 11366519398118405696, + "venv/lib/python3.13/site-packages/pandas/core/arrays/_arrow_string_mixins.py": 16862663427780315543, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/indexable.py": 4131796922597075758, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_to_offset.py": 3929599794655343911, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_check_indexer.py": 2929031395357057009, + "docs/api/html/group__EnvironmentNotFoundError.html": 10410223898319526966, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/zip-safe": 15240312484046875203, + "venv/lib/python3.13/site-packages/PIL/_avif.pyi": 18222325750818585549, + "docs/api/html/group__update__role.html": 15657294037902023797, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufunclike.pyi": 12215374902556647369, + "venv/lib/python3.13/site-packages/PIL/PixarImagePlugin.py": 12061717157676819554, + "docs/api/html/group__DashboardHub__getValidationLabel__Function.html": 15200568549441097956, + "venv/lib/python3.13/site-packages/greenlet/TBrokenGreenlet.cpp": 10822436772777706192, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_mangle_dupes.py": 15613858733226279352, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/provision.py": 2676876852726658063, + "venv/lib/python3.13/site-packages/numpy/core/_utils.py": 14108063453670701289, + "docs/api/html/group__TestOrchestratorInsertFlow.html": 10014979661308261378, + "venv/lib/python3.13/site-packages/keyring/backend_complete.zsh": 14339032329370660432, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/__init__.py": 71159121705871510, + "docs/api/html/group__llm__report__screenshot__effect__contract__Function.html": 11766872533400793722, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reindex_like.py": 13803156447991282315, + "docs/api/html/group__test__manifest__versioning__and__immutability.html": 7762946147479843686, + "frontend/build/_app/immutable/chunks/DG7gdutz.js": 15031800362632650272, + "backend/src/core/utils/matching.py": 1700014874878218207, + "venv/lib/python3.13/site-packages/ecdsa/ecdh.py": 12596317261561755793, + "docs/api/html/group__update__provider.html": 11827750116531988760, + "docs/api/html/group__valid__job__payload.html": 7175119685712825438, + "venv/lib/python3.13/site-packages/pygments/lexers/q.py": 15426466074881683794, + "docs/api/html/group__auth__engine.html": 14325530296654107623, + "docs/api/html/group__has__environments.html": 1097953362161131768, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_round.py": 1299086932398824299, + "docs/api/html/group__MockMappingService.html": 3005546302419221307, + "docs/api/html/group__get__db.html": 16144093670776149736, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/psycopg.py": 8023549900603235601, + "frontend/build/_app/immutable/chunks/Ck4a7ANl.js": 3561562300210641559, + "venv/lib/python3.13/site-packages/pygments/lexers/spice.py": 1376126320935115350, + "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/RECORD": 8971487317739420905, + "backend/tests/test_translate_history.py": 4612852312641794586, + "frontend/e2e/tests/settings.e2e.js": 1420830886812189435, + "docs/api/html/group__ensure__encryption__key.html": 10633170068816212756, + "venv/lib/python3.13/site-packages/numpy/polynomial/polynomial.py": 7658234162211356265, + "venv/lib/python3.13/site-packages/pandas/api/extensions/__init__.py": 882327406374020760, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_util.py": 16908393806993809474, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/result.py": 12262298207886620908, + "docs/api/html/group__TestGitPluginConfigIntegration.html": 5014758280841319650, + "docs/api/html/group__test__build__dataset__preview__legacy__form__data__preserves__native__filter__clauses.html": 4251865033456434354, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/base.py": 7110726987481713080, + "docs/api/html/group__TasksRouter.html": 10219138142182893604, + "backend/src/schemas/translate.py": 15896789917354585618, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming_py.py": 16133454512601432815, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/WHEEL": 6514509858522675228, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_shape_base.py": 4117141349022217163, + "venv/lib/python3.13/site-packages/pygments/lexers/grammar_notation.py": 9009644754106884095, + "docs/api/html/bc_sd.png": 10097603501861382643, + "venv/lib/python3.13/site-packages/PIL/PaletteFile.py": 4104323659569809769, + "venv/lib/python3.13/site-packages/referencing/tests/test_exceptions.py": 10846225989746274213, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__test__cli__compliance__run__scaffold.html": 11653178433842340027, + "docs/api/html/group__get__dashboard__permalink__state__async.html": 14127921399924019544, + "docs/api/html/group__CotJsonFormatter.html": 14965099602834571127, + "venv/lib/python3.13/site-packages/pygments/lexers/_css_builtins.py": 17478340487186531268, + "docs/api/html/group__runBulkGitAction__Function.html": 11579106801115881689, + "venv/lib/python3.13/site-packages/authlib/jose/rfc8037/okp_key.py": 10312614562914096039, + "docs/api/html/group__execute__scheduled__translation.html": 4589753414234722765, + "venv/lib/python3.13/site-packages/numpy/lib/introspect.pyi": 12239924839764265507, + "docs/api/html/group__test__get__profile__preferences__returns__self__payload.html": 17928297903681882891, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____startPolling.html": 5414561271979953996, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_lint_dependency_groups.py": 2609365889369107154, + "venv/lib/python3.13/site-packages/httpcore/_async/http11.py": 7565741048880549265, + "venv/lib/python3.13/site-packages/pygments/scanner.py": 5640381644804445932, + "docs/api/html/group__LanguageDetectService.html": 5256473727119538247, + "docs/api/html/group__get__plugin__loader.html": 13012257189536947305, + "docs/api/html/group__test__basic__key.html": 14205937453274407552, + "docs/api/html/group__SupersetAuthCache.html": 17439611318511412216, + "docs/api/html/group__role__permissions.html": 12460381868773175294, + "docs/api/html/group__TaskDrawerStore.html": 6675046395365943586, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_join.py": 4213933887062089605, + "venv/lib/python3.13/site-packages/pygments/lexers/praat.py": 54226477748516386, + "venv/lib/python3.13/site-packages/pydantic/v1/json.py": 16596969681914729251, + "frontend/e2e/tests/smoke.e2e.js": 11376448043256596939, + "backend/src/models/dataset_review_pkg/_profile_models.py": 16323179255423210120, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/funcfortranname.pyf": 1361426175133186231, + "docs/api/html/group__test__save__config__syncs__deletions__to__persistence.html": 7761700222914838538, + "backend/src/scripts/clean_release_cli.py": 777127038463156812, + "venv/lib/python3.13/site-packages/pip/_internal/cli/status_codes.py": 9143625681947330756, + "docs/api/html/group__record__clarification__feedback.html": 15926160429308910947, + "venv/lib/python3.13/site-packages/jsonschema_specifications/_core.py": 14812112544772987164, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_palettes.py": 13495896173068490516, + "docs/api/html/globals_func_p.html": 6858706269345690058, + "docs/api/html/group__CorrectionSubmitResponse.html": 6015523326141419112, + "docs/api/html/group__test__api__create__job__422__missing__name.html": 13658018012548984469, + "docs/api/html/group__create__provider.html": 15799595578960944885, + "venv/lib/python3.13/site-packages/pygments/lexers/textedit.py": 14872291021083255414, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_readers.py": 2136472634307645842, + "docs/api/html/group____parse__sqllab__result.html": 10462280637644525478, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_numpy.py": 222383250675686477, + "venv/lib/python3.13/site-packages/cryptography/__about__.py": 10471312538528457144, + "venv/lib/python3.13/site-packages/pandas/tests/test_register_accessor.py": 16661086720613729974, + "docs/api/html/group__test__orchestrator__start__session__bootstraps__recovery__state.html": 13152006356907717305, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_numpy_compat.py": 9112925138440787555, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi": 3893434234020223151, + "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/RECORD": 10036839994791510159, + "frontend/src/lib/stores/taskDrawer.js": 16349119158364586930, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_nanfunctions.py": 2356468092336024365, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/sync_app.py": 14788764260762890368, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/subcomponents.py": 10365594934527289233, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libcrypto-2e26a48f.so.3": 3658133521245392852, + "docs/api/html/group__SystemSettings.html": 4117500366250322872, + "backend/git_repos/remote/test-repo.git/refs/heads/preprod": 2288780285329550368, + "docs/api/html/globals_b.html": 2050803601864762326, + "docs/api/html/group__extract__error__context.html": 10063584913283401746, + "docs/api/html/group__MaintenanceDashboardResult.html": 796312223553899991, + "docs/api/html/group__GitServiceModule.html": 11876529200168327141, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/__main__.py": 487896753130729554, + "docs/api/html/group__test__execution__error__handled.html": 16361858862762216227, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/__init__.py": 5863110456909134678, + "venv/lib/python3.13/site-packages/starlette/status.py": 16192064443996706569, + "venv/lib/python3.13/site-packages/pandas/core/computation/api.py": 17919983681396223380, + "frontend/build/_app/env.js": 8815854342083926790, + "venv/lib/python3.13/site-packages/jeepney/bindgen.py": 7094585345946943534, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__test__dashboards__api.html": 3569185305104571400, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/version.py": 5000350193835202949, + "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/assertion_session.py": 18109848200936213195, + "venv/lib/python3.13/site-packages/apscheduler/executors/twisted.py": 2695602672085615762, + "venv/lib/python3.13/site-packages/numpy/ma/extras.pyi": 15292036493781556342, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_subclass.py": 13490541871827928531, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_groupby_dropna.py": 3620959914439334511, + "frontend/src/routes/datasets/review/ReviewWorkspaceLeftSidebar.svelte": 9009994851177005358, + "backend/src/core/auth/__init__.py": 16435384828055133073, + "docs/api/html/group__SchedulerModule.html": 11350421649937027060, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/jeepney/io/threading.py": 525625939662612746, + "docs/api/html/group__test__generate__docs__empty__ids.html": 1697382171673264282, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_amd64_unix.h": 16679226724722970205, + "docs/api/html/group__test__user__role__association.html": 6316579439480183046, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_cov_corr.py": 13652339565475304679, + "frontend/src/lib/components/assistant/AssistantClarificationCard.svelte": 4264349064103133826, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/reserved_words.py": 8022121780993497971, + "docs/api/html/navtreeindex6.js": 6833292869822138239, + "venv/lib/python3.13/site-packages/numpy.libs/libgfortran-040039e1-0352e75f.so.5.0.0": 13946067868274850557, + "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/WHEEL": 7127684561765977531, + "venv/lib/python3.13/site-packages/pandas/_version_meson.py": 4875297137037630519, + "docs/api/html/group__test__task__persistence.html": 1637708909770153120, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_masked_matrix.py": 1444179242134203344, + "docs/api/html/group____build__profile__preference__stub.html": 17148946407396504332, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/styles/__init__.py": 9482393721453335937, + "docs/api/html/group____discover__plugin__execute__permissions.html": 14000239163315189840, + "venv/lib/python3.13/site-packages/pip/_vendor/certifi/cacert.pem": 15624463015628939254, + "docs/api/html/search/all_c.js": 9934344868053304351, + "docs/api/html/group__DashboardHub__doesDashboardPassColumnFilters__Function.html": 16470140080507162324, + "docs/api/html/group__selectedTask__Data.html": 6917775707953198812, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_arrow_interface.py": 9757086292358759236, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/useless_applicator_schemas.py": 8395157526634674143, + "docs/api/html/group__BatchProcessingService.html": 10275821343943605247, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/operators.f90": 5949265961908386974, + "docs/api/html/group__get__permission__by__resource__action.html": 15000945978517431577, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log1p.csv": 16333455295913164408, + "venv/lib/python3.13/site-packages/numpy/f2py/common_rules.py": 7352635707860427145, + "venv/lib/python3.13/site-packages/numpy/_core/multiarray.py": 4484782354376574355, + "venv/lib/python3.13/site-packages/pygments/lexers/gsql.py": 15294109558028161389, + "venv/lib/python3.13/site-packages/pip/_internal/models/index.py": 2839270935469791607, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/unused_registry.py": 10153622516112471812, + "backend/src/services/git/_url.py": 11387722385592868210, + "docs/api/html/group__CostEstimate.html": 1003350075352370602, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_count.py": 9186538441380080087, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_partial.py": 3151286293440416036, + "venv/lib/python3.13/site-packages/pandas/io/clipboard/__init__.py": 3656451154829206939, + "docs/api/html/group__DashboardsApi.html": 8580056325448816200, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix.py": 4440659352851541547, + "venv/lib/python3.13/site-packages/pandas/core/groupby/ops.py": 2036968385544457016, + "docs/api/html/group__PromoteRequest.html": 11374219910371019333, + "docs/api/html/group__handleCommit__Function.html": 15953199697396659260, + "venv/lib/python3.13/site-packages/starlette/_utils.py": 8384087194580626069, + "docs/api/html/group__subscribe__logs.html": 16463697240897933473, + "docs/api/html/group__LLMAnalysisPackage.html": 5388615837684236664, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/resource_protector.py": 14354891358060085360, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/styles/_mapping.py": 11752660241391232497, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/twodim_base.pyi": 3773329770170248877, + "docs/api/html/group__test__git__service__get__repo__path__recreates__base__dir.html": 7635897550275628246, + "docs/api/html/group__AsyncAPIClient__aclose.html": 207928245913411569, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_get_value.py": 389530025760539462, + "docs/api/html/group__create__dashboard__export.html": 1314555688976481845, + "venv/lib/python3.13/site-packages/more_itertools/__init__.pyi": 16479506520351014608, + "venv/lib/python3.13/site-packages/pandas/tests/construction/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_numeric.py": 5627177940393829333, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/strategy_options.py": 16342048970907383117, + "docs/api/html/group__run__artifact__import.html": 14280186280620385233, + "docs/api/html/tab_ad.png": 18360990721051584886, + "docs/api/html/group__ValidationTaskConfig.html": 9838515327973111291, + "venv/lib/python3.13/site-packages/pillow.libs/libXau-154567c4.so.6.0.0": 4340972632724893052, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__reason.html": 7755071372929183522, + "backend/git_repos/remote/test-repo.git/hooks/commit-msg.sample": 13435789416588783681, + "docs/api/html/group__get__run__records.html": 5134890805919610739, + "docs/api/html/group__handleBulkPush__Function.html": 5303517562095146306, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_repr.py": 13147587049887075335, + "docs/api/html/group__DashboardHub__clearColumnFilter__Function.html": 11839612735463468101, + "venv/lib/python3.13/site-packages/numpy/lib/_iotools.py": 10522826373041592861, + "frontend/src/routes/settings/StorageSettings.svelte": 1953157077500445570, + "frontend/src/components/__tests__/task_log_viewer.test.js": 4344163242946147110, + "venv/lib/python3.13/site-packages/websockets/exceptions.py": 12048063047468402740, + "docs/api/html/group__MarkerLogger__reason.html": 11360973389497670827, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_extras.py": 16160090335191788104, + "docs/api/html/group__SupersetClientGetDatabaseByUuid.html": 12211338617460141726, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/padding.py": 13763154154862871596, + "docs/api/html/group__TaskList.html": 17909740066705680833, + "docs/api/html/search/groups_8.js": 9394148223818886948, + "docs/api/html/group__SearchPluginModule.html": 11654743945648339497, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_character/foo77.f": 4046503346951676582, + "docs/api/html/group__frontend__src__services__adminService__js____getRoles.html": 5558475973207051005, + "venv/lib/python3.13/site-packages/pandas/io/excel/__init__.py": 6662687963241471393, + "docs/api/html/group__DashboardActionRoutes.html": 7575118008410498480, + "venv/lib/python3.13/site-packages/numpy/_core/tests/_locales.py": 18178500267053825979, + "venv/lib/python3.13/site-packages/pygments/lexers/sql.py": 15566262873151658034, + "venv/lib/python3.13/site-packages/numpy/_utils/_pep440.pyi": 6796322258258182775, + "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/licenses/LICENSE": 16147999986886816451, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/ssh.py": 16262079536832961001, + "backend/src/api/routes/maintenance/_router.py": 1368406181799456173, + "venv/lib/python3.13/site-packages/pygments/lexers/make.py": 5345282370426217663, + "venv/lib/python3.13/site-packages/pygments/lexers/html.py": 17288963642862550116, + "docs/api/html/group__run__translation.html": 12662554478381074393, + "docs/api/html/group__resolve__Function.html": 442849213114832901, + "docs/api/html/group__test__manifest__service__rebuild__creates__new__version.html": 15569805611870644295, + "docs/api/html/group__health__store__Store.html": 8056741375988649819, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/RECORD": 1689342214025776630, + "docs/api/html/group____build__default__preference.html": 12609186263613185575, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/token_validator.py": 13917237710752731397, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/char.pyi": 13143560686049627445, + "venv/lib/python3.13/site-packages/pandas/tests/computation/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/METADATA": 2624107638694809013, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/_orm_constructors.py": 4276726508722638048, + "frontend/src/components/DashboardGrid.svelte": 3453508702214419189, + "venv/lib/python3.13/site-packages/jeepney/io/tests/conftest.py": 13381752264278264218, + "docs/api/html/group__createRole__Function.html": 17635275329141621796, + "docs/api/html/group__NoExternalEndpointsStage.html": 18436422189478912804, + "docs/api/html/group__CleanPolicyEngine.html": 5866910644172522724, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/dh.pyi": 3254633032236269842, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_regression.py": 9375525053479844400, + "venv/lib/python3.13/site-packages/dateutil/tz/win.py": 8427821225251397364, + "venv/lib/python3.13/site-packages/PIL/ImageShow.py": 11437096951764124817, + "venv/lib/python3.13/site-packages/pygments/lexers/d.py": 18120801227801223376, + "docs/api/html/group__PublicationRecord.html": 12219741124071026101, + "docs/api/html/group__handleDrop__Function.html": 7991568720228574649, + "venv/lib/python3.13/site-packages/cffi/commontypes.py": 11198107299826138465, + "venv/lib/python3.13/site-packages/uvicorn/logging.py": 12858188863836778374, + "docs/api/html/group__frontend__src__types__dashboard__ts____DashboardMetadata.html": 16596283258366470252, + "venv/lib/python3.13/site-packages/pyasn1/codec/__init__.py": 15728752901274520502, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/idnadata.py": 1169745920682458213, + "venv/lib/python3.13/site-packages/httpx/_urlparse.py": 8270294590945652412, + "venv/lib/python3.13/site-packages/pygments/styles/algol_nu.py": 6229131016121450375, + "backend/src/core/config_models.py": 4102600119446697065, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/py.typed": 15130871412783076140, + "docs/api/html/group__SupersetCompilationAdapter____request__sql__lab__session.html": 2880186868861912390, + "venv/lib/python3.13/site-packages/numpy/char/__init__.pyi": 12214207343146244743, + "docs/api/html/group__MaintenanceDashboardBanner.html": 13827348584356629256, + "venv/lib/python3.13/site-packages/numpy/_typing/_extended_precision.py": 4201820494689784136, + "venv/lib/python3.13/site-packages/jeepney/io/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/_libs/join.pyi": 369262334342439364, + "venv/lib/python3.13/site-packages/pandas/tests/api/test_api.py": 13385690673368400635, + "docs/api/html/group__DatasetReviewSessionStoreTests__Module.html": 5623361748252231964, + "venv/lib/python3.13/site-packages/pygments/lexers/_mysql_builtins.py": 16087227298679432006, + "frontend/src/routes/profile/__tests__/profile-settings-state.integration.test.js": 5982682724976240528, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____openDrawerForTaskIfPreferred.html": 7335878052514362026, + "venv/lib/python3.13/site-packages/jeepney/low_level.py": 6546206679858571608, + "frontend/src/routes/+layout.svelte": 729110825767878269, + "docs/api/html/group__startup__event.html": 11110363748286248660, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_indexing.py": 5063545640498065297, + "docs/api/html/group__TestReportsDetailApi.html": 1827756407896142735, + "backend/src/api/routes/profile.py": 8666418382456481533, + "backend/src/core/timezone.py": 15725829269123183582, + "docs/api/html/group__test__database__url__raises__when__both__unset.html": 842987545358384743, + "docs/api/html/group__list__ad__mappings.html": 4036472726252673441, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_monotonic.py": 11817523305776951162, + "docs/api/html/group__test__reload__validation__policy__removes__job__when__policy__gone.html": 2311098519001920581, + "docs/api/html/group____iter__route__files.html": 11857371736918099276, + "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/RECORD": 3288669175908898843, + "venv/lib/python3.13/site-packages/pip/_internal/commands/cache.py": 1892313355296776523, + "docs/api/html/group__TaskManagerModule.html": 10905637838927544085, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_arrayobject.py": 9578555381494297966, + "venv/lib/python3.13/site-packages/fastapi/requests.py": 14587947416691824903, + "docs/api/html/group__BatchApproveSemanticItemRequest.html": 8441557849246446003, + "venv/lib/python3.13/site-packages/numpy/tests/test_reloading.py": 17532116685329953400, + "venv/lib/python3.13/site-packages/pandas/_libs/arrays.cpython-313-x86_64-linux-gnu.so": 8634234308863090562, + "venv/lib/python3.13/site-packages/pygments/lexers/sgf.py": 6802546617450210439, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/relationships.py": 8401569216905291119, + "venv/lib/python3.13/site-packages/pandas/tests/extension/date/__init__.py": 16789767433439616593, + "venv/lib/python3.13/site-packages/pip/_internal/operations/install/wheel.py": 3531093454660385247, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/arrayobject.h": 4345432890284821918, + "docs/api/html/group__find__affected__dashboards.html": 15893909015363041840, + "docs/api/html/group__test__error__string__fallback.html": 16246095716833508917, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_repeat.py": 18394463352314692642, + "docs/api/html/group__ImportedFilterDto.html": 5501399725886626676, + "backend/git_repos/remote/test-repo.git/objects/4e/227f4d8289ea657ae813b1460f979ae4b676b3": 5659284628452785331, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____buildImportMilestones.html": 8235208288594735263, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/warnings_and_errors.pyi": 9019577563960071498, + "docs/api/html/group__RegisterCandidateRequest.html": 7180845738222833015, + "docs/api/html/group__normalize__answer__value.html": 5431564849732382081, + "docs/api/html/group__SupersetClientGetDashboardDetail.html": 4781513685980981790, + "venv/lib/python3.13/site-packages/numpy/_core/_umath_tests.cpython-313-x86_64-linux-gnu.so": 3478629877770507853, + "frontend/src/routes/settings/settings-utils.js": 1940619437304867415, + "venv/lib/python3.13/site-packages/pygments/styles/paraiso_dark.py": 3976779833379189837, + "docs/api/html/group__MaintenanceStartResponse.html": 16246400810680453876, + "docs/api/html/group____extract__result__deep__links.html": 2321729088905700625, + "venv/lib/python3.13/site-packages/pydantic_settings/utils.py": 14396350455520958703, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/npyio.pyi": 15811156298637131744, + "docs/api/html/group__ReadinessState.html": 18424054850820487060, + "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_deprecations.py": 14624516389510242394, + "docs/api/html/group__DatasetReviewClarificationModels.html": 4185914668418818885, + "docs/api/html/group__TaskGraphModule.html": 1612918400039070240, + "venv/lib/python3.13/site-packages/_pytest/nodes.py": 515939386237558331, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_period.py": 9715843209581883915, + "venv/lib/python3.13/site-packages/dateutil/_common.py": 12492546559232079071, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/x509.pyi": 17458894097215345719, + "docs/api/html/group____FakeConfigManager.html": 11213537801456913525, + "docs/api/html/group__test__sync__environment__requires__existing__env.html": 7580953010735906417, + "docs/api/html/group____delete__stale__environment__records.html": 1017402888179208355, + "frontend/src/routes/datasets/__tests__/ColumnsTable.test.js": 15883951776898228284, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/anyio/streams/buffered.py": 8916188172110578587, + "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/array.py": 12658302948819867972, + "backend/git_repos/remote/test-repo.git/objects/8c/4ea7958b7a7e140d27e1e7d8d1f9912fdf5992": 5862166356451798197, + "backend/src/services/clean_release/preparation_service.py": 9259410398708054305, + "docs/api/html/group__mask__pii__value.html": 9015692423384438989, + "venv/lib/python3.13/site-packages/pandas/_libs/indexing.cpython-313-x86_64-linux-gnu.so": 13188040757764159731, + "docs/api/html/group__handleEdit__Function.html": 15858142229042020143, + "venv/lib/python3.13/site-packages/pandas/_libs/pandas_datetime.cpython-313-x86_64-linux-gnu.so": 15874094681262240628, + "venv/lib/python3.13/site-packages/keyring/testing/util.py": 11195868112805409554, + "backend/src/plugins/translate/dictionary_import_export.py": 12639118203353044308, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_date_range.py": 16128552513324017349, + "docs/api/html/group__SemanticFieldEntryDto.html": 7770402299955438341, + "docs/api/html/search/functions_c.js": 2394026458529255260, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_apply_relabeling.py": 3930092097678339743, + "backend/src/api/routes/translate/_run_routes.py": 16216908966766661647, + "venv/lib/python3.13/site-packages/websockets/__init__.py": 4916307256304054040, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/connection.py": 5582413226288987808, + "venv/lib/python3.13/site-packages/pygments/lexers/minecraft.py": 10133579583270214110, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_tooltip.py": 853808724844451770, + "venv/lib/python3.13/site-packages/pandas/_libs/window/aggregations.cpython-313-x86_64-linux-gnu.so": 16327106317503267067, + "venv/lib/python3.13/site-packages/numpy/_array_api_info.py": 9709101823494959741, + "docs/api/html/globals_func_w.html": 13805272721469242053, + "venv/lib/python3.13/site-packages/numpy/testing/tests/test_utils.py": 5291132432383518704, + "venv/lib/python3.13/site-packages/numpy/f2py/symbolic.py": 16854377502491291093, + "venv/lib/python3.13/site-packages/fastapi/params.py": 14263655860695381481, + "backend/src/plugins/translate/executor.py": 15866803979457728942, + "docs/api/html/group__AssistantAction.html": 12554190230328062237, + "venv/lib/python3.13/site-packages/pip/_internal/commands/hash.py": 11824898770873127699, + "docs/api/html/group____to__payload.html": 15947679921723097883, + "docs/api/html/group__PublicationService.html": 7781551738502534209, + "backend/src/plugins/translate/orchestrator_planner.py": 16598342286617456459, + "venv/lib/python3.13/site-packages/pydantic/_internal/_fields.py": 2692892815545218335, + "venv/lib/python3.13/site-packages/gitdb/test/lib.py": 13294941660283059872, + "venv/lib/python3.13/site-packages/passlib/win32.py": 5311393450489898748, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____updateSettings.html": 7369380578343660660, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_groupby.py": 16180421154734310873, + "docs/api/html/group__AuthModels.html": 12156417709466649370, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/__init__.py": 15130871412783076140, + "docs/api/html/group__test__text__only__model__returns__false.html": 3042385293654228545, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/console.py": 10217327186846649646, + "frontend/src/lib/stores/translationRun.js": 10005138082029605368, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64-testset-1.csv": 16078879475693341404, + "docs/api/html/group__test__get__report__not__found__returns__404.html": 6644055404803276631, + "docs/api/html/group__test__normalizeTranslateError__Function.html": 11445053005894736515, + "venv/lib/python3.13/site-packages/starlette/exceptions.py": 15978811612997200737, + "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/LICENSE": 8423899413955829149, + "docs/api/html/group__loadSettings__Function.html": 6940780943269890952, + "venv/lib/python3.13/site-packages/authlib/oidc/core/util.py": 5364455058429522633, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_constructors.py": 13890224577680389718, + "backend/git_repos/remote/test-repo.git/hooks/prepare-commit-msg.sample": 7530253302780245896, + "docs/api/html/group__TestAuth.html": 14086643015610504609, + "docs/api/html/group__get__user__dashboard__preference.html": 17414742887363265789, + "venv/lib/python3.13/site-packages/psycopg2_binary-2.9.11.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/annotated_doc/__init__.py": 6834198874252778425, + "venv/lib/python3.13/site-packages/apscheduler/executors/base.py": 1980520974511822101, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/control.py": 2034518223411945438, + "docs/api/html/group__BranchCheckout.html": 659397655908615531, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/parameters.py": 1647490964392525933, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_inference.py": 5741637509343419942, + "venv/lib/python3.13/site-packages/pygments/lexers/iolang.py": 10997512999728724130, + "docs/api/html/group__test__trigger__run__not__found.html": 13928430633871527174, + "docs/api/html/group__deleteTask__Function.html": 4139589046906492186, + "venv/lib/python3.13/site-packages/pip/_internal/locations/_sysconfig.py": 4773855595767526182, + "venv/lib/python3.13/site-packages/dotenv/version.py": 13508433229287636267, + "frontend/src/components/llm/ValidationReport.svelte": 17900215752976182981, + "docs/api/html/group__login__for__access__token.html": 5634643443334465635, + "venv/lib/python3.13/site-packages/jsonschema/protocols.py": 847332300543820834, + "venv/lib/python3.13/site-packages/numpy/_core/shape_base.pyi": 10225243791643474943, + "venv/lib/python3.13/site-packages/sqlalchemy/util/concurrency.py": 1325673503812009695, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/dtype.py": 9342837412280377086, + "venv/lib/python3.13/site-packages/pygments/lexers/_mql_builtins.py": 2376212048709413586, + "docs/api/html/group____strip__html__tags.html": 1085064762657441380, + "venv/lib/python3.13/site-packages/httpx/__version__.py": 9473642134297828811, + "backend/src/plugins/translate/__tests__/test_text_cleaner.py": 5456979246104056266, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_month.py": 8485374160446988786, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_astype.py": 4178231007649608531, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/authorization_code.py": 4958605540994687737, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_get.py": 10255752806860493777, + "docs/api/html/splitbar.png": 3792397713596451358, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_extending.py": 10202091354750153497, + "venv/lib/python3.13/site-packages/authlib/oauth1/client.py": 7314311571224771, + "docs/api/html/group__updateRole__Function.html": 935827486794561356, + "docs/api/html/group__getTasks__Function.html": 1086888913183663785, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_network.py": 13159427333040109523, + "docs/api/html/group__get__dashboard__layout.html": 16387331877683303616, + "venv/lib/python3.13/site-packages/PIL/PcfFontFile.py": 8867692961463798279, + "docs/api/html/group__ActivityTest__Module.html": 938547209662965960, + "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/globals_g.html": 13803013789474748050, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate_kwarg.py": 10417724544218303733, + "venv/lib/python3.13/site-packages/dateutil/__init__.py": 17666544837260663800, + "backend/src/plugins/translate/__tests__/test_dictionary_filter.py": 2426844436521732941, + "venv/lib/python3.13/site-packages/numpy/random/_mt19937.cpython-313-x86_64-linux-gnu.so": 85866616759631810, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_comparison.py": 11333735187162513512, + "docs/api/html/group__test__idle__state.html": 1062794876151599472, + "docs/api/html/group__artifact__repository.html": 16366748896523529191, + "docs/api/html/globals_func.html": 10725622132015229383, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py": 5951912505933673835, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/sqlalchemy.py": 811968833735951956, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_legendre.py": 18266595775500927868, + "venv/lib/python3.13/site-packages/pandas/util/_decorators.py": 14780166101442507665, + "venv/lib/python3.13/site-packages/numpy/ma/testutils.pyi": 3899348061346041413, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_keys.py": 10813898277355150779, + "docs/api/html/group__frontend__src__services__git__utils__js____tryParseJsonObject.html": 8683269790796874276, + "docs/api/html/group__LLMResponseParser.html": 18031787096044719689, + "venv/lib/python3.13/site-packages/numpy/lib/_iotools.pyi": 12873243737872788349, + "backend/src/plugins/translate/_llm_parse.py": 3278211416813203155, + "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/_typing/_dtype_like.py": 1598511035344858524, + "docs/api/html/group__get__task__log__sources.html": 10195752095365161863, + "docs/api/html/group__SupersetContextTemplatesMixin____normalize__default__literal.html": 8062184899607586465, + "venv/lib/python3.13/site-packages/pandas/core/strings/object_array.py": 17631047188839635539, + "venv/lib/python3.13/site-packages/pyasn1/codec/ber/encoder.py": 8912119133548489544, + "venv/lib/python3.13/site-packages/numpy/polynomial/_polybase.py": 893743087939984792, + "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/test_array_with_attr.py": 6568496539994758985, + "venv/lib/python3.13/site-packages/git/refs/__init__.py": 16246686106073400519, + "venv/lib/python3.13/site-packages/pygments/lexers/esoteric.py": 16839499623020685146, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_math.h": 16701045088211015518, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/METADATA": 9586902338916246692, + "docs/api/html/group__test__should__log__task__level.html": 11553737108336190998, + "venv/lib/python3.13/site-packages/rapidfuzz/_common_py.py": 15410157970973169427, + "venv/lib/python3.13/site-packages/pip/_internal/network/__init__.py": 1586148254475575526, + "venv/bin/activate.csh": 14513616043256836238, + "docs/api/html/group__ProfilePermissionState.html": 771733666078465816, + "docs/api/html/group__test__parse__datetime__invalid__string.html": 3666486688843083256, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_is_homogeneous_dtype.py": 15378147393056707851, + "docs/api/html/group__ReportStatus.html": 11659907177460625683, + "venv/lib/python3.13/site-packages/pygments/token.py": 6987328478153445584, + "frontend/src/lib/auth/store.ts": 5831215136783173107, + "venv/lib/python3.13/site-packages/pygments/lexers/monte.py": 15158829991357994573, + "venv/lib/python3.13/site-packages/pandas/core/computation/align.py": 13027916530558901817, + "docs/api/html/group__SessionSummary.html": 13869105024431340740, + "docs/api/html/group__test__belief__scope__missing__anchor.html": 6431050729212027713, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/models.py": 3567900447243180991, + "venv/lib/python3.13/site-packages/pip/_internal/commands/index.py": 16715578868094112894, + "venv/lib/python3.13/site-packages/numpy/_typing/_nbit_base.pyi": 6546751036506752550, + "venv/lib/python3.13/site-packages/pandas/tests/extension/uuid/test_uuid.py": 13955678427426850807, + "docs/api/html/group__test__enable__disable__schedule.html": 10584328518682693637, + "venv/lib/python3.13/site-packages/jose/utils.py": 1926138853970725083, + "venv/lib/python3.13/site-packages/numpy/conftest.py": 8971879716683736515, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/RECORD": 16874983218652404911, + "venv/lib/python3.13/site-packages/numpy/_core/cversions.py": 9724467539503410469, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/concat.py": 14737724508458849795, + "venv/lib/python3.13/site-packages/pygments/console.py": 3540660073442483692, + "venv/lib/python3.13/site-packages/pandas/core/interchange/column.py": 9498044216416177656, + "venv/lib/python3.13/site-packages/pygments/lexers/unicon.py": 1155454077052833821, + "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/WHEEL": 15858869568085970864, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_msvc.h": 14580207065003376324, + "backend/src/plugins/translate/__tests__/test_dictionary_import.py": 17094877730934121606, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8414/well_known.py": 7183795183137931709, + "venv/lib/python3.13/site-packages/numpy/_distributor_init.py": 1101690714183863290, + "venv/lib/python3.13/site-packages/jaraco/functools/__init__.py": 15334412919279565528, + "docs/api/html/group__extract__tables__from__sql.html": 8074608921519700652, + "docs/api/html/group__test__build__dataset__preview__query__context__merges__dataset__template__params__and__preserves__user__values.html": 13508623923930235675, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/criterion.py": 2042509334195547606, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_npfuncs.py": 6132674295193898715, + "frontend/src/routes/dashboards/[id]/components/DashboardHeader.svelte": 8694552424163588390, + "docs/api/html/group__test__authenticate__inactive__user.html": 8193931683359814732, + "docs/api/html/group__closeAssistantChat__Function.html": 5957962497908010406, + "docs/api/html/group__TASKS__DATABASE__URL.html": 7804801392493995117, + "docs/api/html/group__TranslationJob.html": 10104141994060655725, + "docs/api/html/group__tasks__Data.html": 8580763785347797438, + "docs/api/html/group__update__environment__schedule.html": 2300037495501071972, + "docs/api/html/group__logout__Function.html": 17141287000825844798, + "docs/api/html/group__test__plugin__loader__imports__logger.html": 4750311694643540001, + "venv/bin/pip3.13": 13861749540792881808, + "docs/api/html/group__frontend__src__services__taskService__js____resolveTask.html": 1005823194380786515, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/text.py": 6096215585499446070, + "venv/lib/python3.13/site-packages/anyio/_backends/_trio.py": 4764555436057754985, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/multiarray.pyi": 17232959648651278910, + "docs/api/html/group____ensure__user__dashboard__preferences__health__columns.html": 14728727752602035739, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7592/__init__.py": 1398617034174236358, + "backend/src/plugins/translate/__tests__/test_executor.py": 9030484360469714630, + "docs/api/html/group__test__get__dashboard__tasks__history__success.html": 3755590925245868067, + "docs/api/html/group__test__create__task__invalid__provider.html": 13091245729533197947, + "venv/lib/python3.13/site-packages/_pytest/runner.py": 5772610501857496741, + "venv/lib/python3.13/site-packages/requests/api.py": 12339139862411341381, + "venv/lib/python3.13/site-packages/numpy/_core/_asarray.py": 3468915833437229425, + "venv/lib/python3.13/site-packages/httpx/_main.py": 1812303705973265093, + "docs/api/html/group__MaintenanceStore__methods.html": 7821050348134458375, + "venv/lib/python3.13/site-packages/pygments/lexers/_stata_builtins.py": 18053452765493556047, + "venv/lib/python3.13/site-packages/pygments/styles/solarized.py": 11231143047572616298, + "frontend/src/routes/datasets/__tests__/split_view.test.js": 6143972529940917004, + "docs/api/html/group__loadFiles__Function.html": 12100105929385234165, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/RECORD": 16740224557818847141, + "venv/lib/python3.13/site-packages/pydantic/_internal/_generics.py": 16438159042939059717, + "venv/lib/python3.13/site-packages/numpy/lib/_arraypad_impl.py": 6348811074249398741, + "docs/api/html/group__createADGroupMapping__Function.html": 2891869775354387407, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_replace.py": 4953527309376861139, + "docs/api/html/group__NextExecutionResponse.html": 8976572706922461958, + "venv/lib/python3.13/site-packages/urllib3/util/wait.py": 14629837381061032546, + "venv/lib/python3.13/site-packages/pip/_internal/index/sources.py": 11609272011565024668, + "docs/api/html/group____update__yaml__file.html": 8696461266423546257, + "venv/lib/python3.13/site-packages/passlib/tests/sample1c.cfg": 13088198405762342506, + "venv/lib/python3.13/site-packages/uvicorn/__init__.py": 11517239807926185665, + "venv/lib/python3.13/site-packages/authlib/integrations/django_client/__init__.py": 14186136918454802843, + "docs/api/html/group__getTaskLogs__Function.html": 4009919543108782960, + "docs/api/html/group__require__api__key__or__jwt.html": 452602241730021960, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_two_greenlets.py": 11156275429806391390, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/__init__.py": 4752355175318979033, + "venv/lib/python3.13/site-packages/pandas/core/missing.py": 13332302791063948992, + "frontend/build/_app/immutable/chunks/DsnmJJEf.js": 17416107759626312632, + "backend/src/api/routes/assistant/_dataset_review.py": 4389080462745572364, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize_cpp.cpython-313-x86_64-linux-gnu.so": 7490281502544276964, + "backend/src/plugins/translate/__tests__/test_dictionary_utils.py": 2896829624338027530, + "venv/lib/python3.13/site-packages/pandas/core/tools/times.py": 6560679305255812809, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_arithmetic.py": 13304014482504911016, + "frontend/src/routes/dashboards/[id]/components/DashboardTaskHistory.svelte": 2668118032578627739, + "venv/lib/python3.13/site-packages/numpy/_expired_attrs_2_0.pyi": 1424133074692438241, + "venv/lib/python3.13/site-packages/pip/_internal/commands/configuration.py": 1608697090566485893, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_function_base.pyi": 10972502518588022706, + "venv/lib/python3.13/site-packages/pandas/tests/internals/test_internals.py": 2049484047553296860, + "docs/api/html/group__test__load__tasks__with__status__filter.html": 12175575007475513280, + "docs/api/html/group__MaintenanceSettingsUpdate.html": 5565369427863367370, + "docs/api/html/group__delete__dictionary__entry.html": 3989967080669519654, + "docs/api/html/group__test__html__only__content.html": 3771397076204846018, + "venv/lib/python3.13/site-packages/anyio/streams/stapled.py": 9733127303038397237, + "docs/api/html/group__test__execution__snapshot__skips__partial__imported__filters__without__values.html": 4065395894553398621, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/android.py": 8607703347015852195, + "venv/lib/python3.13/site-packages/numpy/lib/_index_tricks_impl.pyi": 5892973170789971535, + "venv/lib/python3.13/site-packages/websockets/asyncio/server.py": 885415484558949506, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_add_prefix_suffix.py": 8367793476246001244, + "docs/api/html/group__I18nModule.html": 3811966300603139836, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_no_deprecated_api.h": 7896028550808252043, + "docs/api/html/group__TaskResultPanel.html": 4837205169025137611, + "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/METADATA": 11759004913807981650, + "docs/api/html/group__gitServiceContractTests__Module.html": 15217057486548108664, + "docs/api/html/group__ValidationTaskService.html": 42675372436809990, + "venv/lib/python3.13/site-packages/fastapi/dependencies/utils.py": 7687214523082385505, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/polynomial/chebyshev.pyi": 5269136485429780038, + "docs/api/html/group__publish__candidate__endpoint.html": 8010913513962824406, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_day.py": 2200008998040663785, + "docs/api/html/group__ReportDetailUxTest__Module.html": 17811262593949560202, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_construction.py": 6564829381134214401, + "docs/api/html/group__SupersetClientExtractChartIdsFromLayout.html": 397319256700010303, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/cache_key.py": 11118819065204404106, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/pg_catalog.py": 15726448028057859831, + "venv/lib/python3.13/site-packages/pygments/lexers/thingsdb.py": 6073447481627395832, + "docs/api/html/group__report__service.html": 3161527402315470112, + "docs/api/html/group__list__execution__mappings.html": 5449792529029019677, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64-testset-2.csv": 5423145402839576695, + "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/lib/__init__.py": 12211229657513986410, + "docs/api/html/group__TranslateRoutes.html": 12674068421448873561, + "docs/api/html/group__RunListResponse.html": 11273163658263807436, + "venv/lib/python3.13/site-packages/rapidfuzz/__pyinstaller/test_rapidfuzz_packaging.py": 5189055608193366093, + "venv/lib/python3.13/site-packages/starlette/middleware/wsgi.py": 12506262030845301606, + "docs/api/html/group__handleUpload__Function.html": 10159956200065592690, + "docs/api/html/group____discover__route__permissions.html": 6994842999221083334, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/const_vs_enum.py": 12873459583943748931, + "docs/api/html/group__FeedbackRequest.html": 5229199263614285726, + "docs/api/html/group__frontend__src__routes__settings____page__ts____load.html": 17232811554336351206, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_string.py": 11422235699126032386, + "venv/lib/python3.13/site-packages/pandas/_libs/interval.pyi": 15698173755300703836, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_unix.h": 9608771997528633681, + "venv/lib/python3.13/site-packages/numpy/core/records.py": 12604652690721760437, + "docs/api/html/group__test__page__size__constant__exists.html": 5309175304176573078, + "venv/lib/python3.13/site-packages/numpy/f2py/func2subr.py": 338595621218646492, + "venv/lib/python3.13/site-packages/numpy/polynomial/polyutils.pyi": 8195943561787777127, + "docs/api/html/search/functions_0.js": 18275711831096102872, + "venv/lib/python3.13/site-packages/referencing/_attrs.py": 14434891919747863272, + "docs/api/html/group__test__parse__superset__link__dashboard__permalink__recovers__dataset__from__nested__dashboard__state.html": 16106300672165677177, + "docs/api/html/group__TaskModels.html": 17614003799808664482, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/__init__.pyi": 15130871412783076140, + "docs/api/html/group__CotLoggerModule.html": 10976879847879957078, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_datetimes.py": 7889573945417063183, + "venv/lib/python3.13/site-packages/pandas/tseries/frequencies.py": 2262381949755250516, + "docs/api/html/group__CorrectionCellTests.html": 16634413555411031846, + "venv/lib/python3.13/site-packages/typing_inspection/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/dateutil/tz/_factories.py": 7538654189286887518, + "backend/src/services/clean_release/repositories/publication_repository.py": 1097065694003039928, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_interval_array_equal.py": 15654625365223535344, + "backend/src/api/routes/llm.py": 14720807640771498486, + "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/licenses/LICENSE": 3868190977070717994, + "venv/lib/python3.13/site-packages/pip/_internal/cli/cmdoptions.py": 12107733000019393631, + "venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py": 10408538054406276433, + "docs/api/html/group__TranslationMetrics.html": 4038252507282181238, + "docs/api/html/group__SettingsSchemas.html": 7781964904235893244, + "venv/lib/python3.13/site-packages/click/formatting.py": 6694583529073729642, + "venv/lib/python3.13/site-packages/pydantic/_internal/_repr.py": 1758478941817868344, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_round.py": 9358309072340573675, + "docs/api/html/group__AppTimezone.html": 1905496000801051257, + "docs/api/html/group__SourceIsolation.html": 15074253220325240781, + "docs/api/html/group__PasswordPrompt.html": 16889108354807031960, + "backend/src/dependencies.py": 3093520809371792884, + "docs/api/html/group____accumulate__objects.html": 12340985983036661997, + "venv/lib/python3.13/site-packages/pandas/_libs/groupby.cpython-313-x86_64-linux-gnu.so": 14931394220112658268, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_setops.py": 9991233160569430204, + "docs/api/html/group__GitRepoOperationsRoutes.html": 17274671154448200931, + "venv/lib/python3.13/site-packages/fastapi/middleware/cors.py": 7452860773712601508, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/RECORD": 9803861100978586236, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_series.py": 17126297747681689408, + "venv/lib/python3.13/site-packages/passlib/ext/__init__.py": 15240312484046875203, + "docs/api/html/group__get__detector.html": 10160834986755311488, + "docs/api/html/group__DashboardNotFoundError.html": 3334527199488317700, + "docs/api/html/doxygen.css": 8786819515706830953, + "backend/tests/test_deprecation_audit_fixes.py": 17902995210831708431, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_dtypes_basic.py": 10917162988625838981, + "venv/lib/python3.13/site-packages/keyring/compat/properties.py": 1562771115138037410, + "docs/api/html/group__test__validate__path__already__exists.html": 13732390823029512954, + "docs/api/html/navtreeindex10.js": 1322788531203602791, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/RECORD": 7363618870628306370, + "backend/src/services/clean_release/stages/internal_sources_only.py": 6150576100887638944, + "docs/api/html/group____extract__id.html": 3759315153888823869, + "docs/api/html/group__MergeContinueRequest.html": 15873066823531580576, + "venv/lib/python3.13/site-packages/pandas/core/computation/eval.py": 3176226283265954028, + "docs/api/html/group____flush__task__logs.html": 9037017981358195543, + "docs/api/html/group____serialize__clarification__question__payload.html": 2145294211221341001, + "venv/lib/python3.13/site-packages/jsonschema/__main__.py": 18136546137047911521, + "docs/api/html/group__loadGiteaRepos__Function.html": 6310672505465620281, + "docs/api/html/group__NavigationMock.html": 10866560030441854001, + "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_cpp_avx2.cpython-313-x86_64-linux-gnu.so": 12574929384355254457, + "venv/lib/python3.13/site-packages/apscheduler/triggers/date.py": 9545774812177853725, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timedeltas.cpython-313-x86_64-linux-gnu.so": 17089839649971421164, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_format.py": 1947585389944838076, + "docs/api/html/group__TranslateJobCreate.html": 13885891459376922086, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/errors.py": 16711622442922413520, + "venv/lib/python3.13/site-packages/passlib/utils/compat/__init__.py": 17369882236606423129, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/hstore.py": 9700253004947691961, + "docs/api/html/group__get__my__preference.html": 12554124199014209894, + "venv/lib/python3.13/site-packages/psycopg2/_ipaddress.py": 12332672835751787869, + "venv/lib/python3.13/site-packages/_pytest/terminalprogress.py": 5490989904517343259, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/astype_copy.pkl": 4470155972891419163, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_api.py": 14120915875574640262, + "docs/api/html/group__build__impact__summary.html": 17415672638957538101, + "docs/api/html/group__test__us3__mapping__patch__approval__preview__and__launch__endpoints.html": 12512918894261325848, + "venv/lib/python3.13/site-packages/pydantic/_internal/_core_metadata.py": 5704137311404303574, + "docs/api/html/group__frontend__src__services__adminService__js____deleteUser.html": 16139969298187481622, + "docs/api/html/group__test__storage__model__compiles.html": 12703678636634941542, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/METADATA": 4868544280955034757, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath_complex.py": 11732242536199439023, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_convert_dtypes.py": 13612212066710266457, + "venv/lib/python3.13/site-packages/pygments/styles/trac.py": 13968346768164381833, + "docs/api/html/group__getStatusBadgeClass__Function.html": 12235710533832862804, + "docs/api/html/group__run__cleanup.html": 10946982331286352210, + "venv/lib/python3.13/site-packages/pydantic/v1/datetime_parse.py": 10467114625921924095, + "frontend/src/routes/admin/roles/+page.svelte": 7687872545536151950, + "frontend/src/lib/api/translate/__tests__/test-target-schema.test.js": 16872327388398551554, + "docs/api/html/group__test__invalid__add__log__fn.html": 13488633198272059949, + "docs/api/html/group__test__get__dashboard__thumbnail__env__not__found.html": 2691256043030470661, + "docs/api/html/group__DatabaseModule.html": 14601049603487173809, + "docs/api/html/group__MissingMappingModal.html": 3905855008524248166, + "venv/lib/python3.13/site-packages/numpy/f2py/func2subr.pyi": 16573082220135508510, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/RECORD": 8956798822782402202, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_halfyear.py": 9376272342364384767, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/METADATA": 12295263493152296681, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_reductions.py": 3575617237516305456, + "docs/api/html/group__fetch__models.html": 1931603908808447028, + "venv/lib/python3.13/site-packages/sqlalchemy/event/attr.py": 5971663429221923939, + "venv/lib/python3.13/site-packages/pygments/lexers/ldap.py": 17455983150181177257, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/ecdsa/test_numbertheory.py": 2117130219401053225, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/test_round.py": 7912161077874611432, + "venv/lib/python3.13/site-packages/pip/_internal/utils/entrypoints.py": 11268059714209889385, + "venv/lib/python3.13/site-packages/numpy/_core/__init__.pyi": 2783897020308040960, + "venv/lib/python3.13/site-packages/numpy/lib/mixins.py": 7404729635424818497, + "backend/tests/test_layout_utils.py": 15634672279171875732, + "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_regression.py": 4611768764484593979, + "venv/lib/python3.13/site-packages/pandas/tests/extension/list/test_list.py": 4538625980063375611, + "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/__init__.py": 63497920264089252, + "docs/api/html/group__extract__owner__identifiers.html": 8294813531215300582, + "venv/lib/python3.13/site-packages/numpy/f2py/auxfuncs.pyi": 10077265709692546934, + "frontend/src/lib/api/validation.js": 10650815174196870103, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/plugin_base.py": 2880434680251108786, + "docs/api/html/group__TerminologyDictionary.html": 430268445994358090, + "docs/api/html/group__test__api__key__auth__valid.html": 3238968940529899361, + "docs/api/html/group__TranslationE2E.html": 15552322666790950919, + "backend/src/models/dataset_review_pkg/_session_models.py": 9902104970008253748, + "backend/src/plugins/translate/__tests__/test_orchestrator.py": 10313792176402719801, + "venv/lib/python3.13/site-packages/attr/exceptions.pyi": 12323493441583681402, + "docs/api/html/group__build__violation.html": 1522726666566321384, + "docs/api/html/group__TemplateVariable.html": 1861586953213650229, + "venv/lib/python3.13/site-packages/pydantic/_internal/_namespace_utils.py": 5237766366340181382, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_drop.py": 11341278355685583133, + "venv/lib/python3.13/site-packages/pip/_internal/locations/base.py": 7966628150470073365, + "docs/api/html/group__resolve__task__type.html": 14911663331335466278, + "docs/api/html/group____persist__confirmation.html": 1641246192766111863, + "venv/lib/python3.13/site-packages/pandas/core/indexes/datetimes.py": 14331984919364185787, + "venv/lib/python3.13/site-packages/pandas/util/_print_versions.py": 15326663505771588740, + "frontend/src/services/gitService.js": 6764482702653031888, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/cache.py": 3177663126928467950, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/INSTALLER": 17282701611721059870, + "frontend/build/_app/immutable/nodes/12.Dup5w6id.js": 2480806793952674044, + "venv/lib/python3.13/site-packages/numpy/tests/test_matlib.py": 14395481530627870882, + "frontend/build/_app/immutable/nodes/34.Dxv3smSb.js": 4631280726068973380, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/regexopt.py": 16073437303824961930, + "docs/api/html/group__LoggingConfigResponse.html": 16867400746359802764, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arithmetic.pyi": 10265823318697442495, + "docs/api/html/group____estimate__markdown__height.html": 16586606759606629897, + "docs/api/html/navtreeindex5.js": 5360518571003728409, + "docs/api/html/group__update__metric__description.html": 15940615433146474716, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_duplicated.py": 14676058112867601208, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_reshape.py": 10576230966727810832, + "docs/api/html/navtreeindex8.js": 16014422725768627041, + "docs/api/html/group__GitRepository.html": 11611249034372487005, + "docs/api/html/group__test__baseline__expired__fallback.html": 15287350939065441355, + "venv/lib/python3.13/site-packages/pip/_internal/cli/index_command.py": 15798187258841839292, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/subrout.f": 18215492757907465667, + "docs/api/html/group__toggleAssistantChat__Function.html": 16851022063245577373, + "venv/lib/python3.13/site-packages/authlib/jose/drafts/_jwe_enc_cryptodome.py": 15753279711312689193, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/vectorized.cpython-313-x86_64-linux-gnu.so": 5441755022198996487, + "docs/api/html/group__DatasetReviewWorkspace.html": 16920997955167704434, + "docs/api/html/search/all_17.js": 369213695750280983, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_combine.py": 4446011286411407708, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_delete.py": 5958440386632506587, + "backend/src/services/reports/__tests__/test_report_normalizer.py": 5081647081006613913, + "docs/api/html/group__MaintenanceStoreTests.html": 14540516874541556957, + "frontend/src/routes/datasets/ColumnsTable.svelte": 14113713230812728863, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_libgroupby.py": 9985769511561272200, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/METADATA": 6557531107125553027, + "frontend/build/_app/immutable/chunks/CMoL_NLs.js": 17187013106646297092, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/modeline.py": 6194365452131561478, + "venv/lib/python3.13/site-packages/_pytest/unraisableexception.py": 4597178803320514675, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/pubprivmod.f90": 8680230823849248800, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/urllib3/http2/connection.py": 1661620860881397554, + "docs/api/html/group__test__detect__language__edge__cases.html": 18380807334063203499, + "docs/api/html/group__delete__job.html": 992976939561111352, + "venv/lib/python3.13/site-packages/click/_compat.py": 14451519072991457993, + "venv/lib/python3.13/site-packages/numpy/typing/tests/test_isfile.py": 14544060093268573418, + "backend/src/core/migration/__init__.py": 13075189211840127611, + "venv/lib/python3.13/site-packages/pandas/_libs/ops.pyi": 1192312467209548763, + "docs/api/html/group__test__migrate__dashboards__no__ids.html": 5314005886091290809, + "docs/api/html/group__update__logging__config.html": 18321262860475642376, + "docs/api/html/group__register__adfs.html": 7944423328544762483, + "docs/api/html/group__storage__routes.html": 18273179632379125125, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_log_render.py": 18076931145915444473, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_constructors.py": 12118296571694122743, + "venv/lib/python3.13/site-packages/uvicorn/supervisors/statreload.py": 5018382301336802445, + "venv/lib/python3.13/site-packages/pygments/lexers/automation.py": 8021926838024836904, + "venv/lib/python3.13/site-packages/_pytest/doctest.py": 6126919596776592278, + "venv/lib/python3.13/site-packages/pygments/styles/nord.py": 8469538903422182155, + "frontend/src/lib/stores/__tests__/mocks/state.js": 10691107564567912815, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_csv.py": 10737444103906389448, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_get.py": 6509102681661636928, + "docs/api/html/group__MappingWarningLevel.html": 16869836344481921740, + "frontend/build/_app/immutable/chunks/BeYMLtlT.js": 8363179184295836132, + "frontend/src/lib/api/translate/datasources.js": 17202165717960970061, + "docs/api/html/group__manifest__consistency.html": 302557474349744915, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/abc.py": 6227782083136374888, + "venv/lib/python3.13/site-packages/pygments/lexers/business.py": 10410439210806697214, + "venv/lib/python3.13/site-packages/pytest/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_mem_overlap.py": 4202716587079637350, + "docs/api/html/group__SupersetClientBase.html": 11179460536607971200, + "docs/api/html/group__test__chart__creation__failure.html": 15228478008422010264, + "venv/lib/python3.13/site-packages/pip/_internal/operations/install/editable_legacy.py": 8145740626773638218, + "venv/lib/python3.13/site-packages/pandas/_testing/_io.py": 14264259716673715185, + "docs/api/html/group__frontend__src__lib__stores__health__js____createHealthStore.html": 18071199202062130010, + "docs/api/html/group__test__calculate__schedule__single__task.html": 12252381417874237319, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/schema.py": 8358664670620586363, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_masm.obj": 2884737706935637437, + "venv/lib/python3.13/site-packages/sqlalchemy/util/__init__.py": 15821192733097665649, + "docs/api/html/group__frontend__src__services__taskService__js____resumeTask.html": 2730926071021487540, + "venv/lib/python3.13/site-packages/pygments/lexers/basic.py": 12723021007042054402, + "venv/lib/python3.13/site-packages/pygments/lexers/webmisc.py": 9530962803076253849, + "frontend/src/lib/components/ui/MultiSelect.svelte": 1475503303018683038, + "docs/api/html/group__remove__validation__job.html": 18264277450501764734, + "frontend/src/components/llm/__tests__/provider_config.integration.test.js": 2807487384272452401, + "backend/src/core/ws_log_handler.py": 16227392517834423362, + "backend/git_repos/remote/test-repo.git/objects/38/0395343915d386a8d58774cc6c6677205065e8": 5481382229802988191, + "venv/lib/python3.13/site-packages/pydantic/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/httpcore/_sync/connection.py": 1539337414493486168, + "venv/lib/python3.13/site-packages/pandas/tests/interchange/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension_cpp.cpp": 4590574206187223887, + "venv/bin/httpx": 6651007446865716794, + "docs/api/html/tabs.css": 16739738225401062757, + "venv/lib/python3.13/site-packages/PIL/ImageDraw.py": 12919304671639673744, + "venv/lib/python3.13/site-packages/anyio/_core/_signals.py": 1204322949639513552, + "docs/api/html/group__SessionEvent.html": 1211750384704363849, + "docs/api/html/group__AsyncAPIClient____normalize__base__url.html": 18252709079294820175, + "docs/api/html/search/groups_14.js": 15467890647915855647, + "venv/lib/python3.13/site-packages/pydantic_core/_pydantic_core.pyi": 16799580742094025110, + "docs/api/html/globals_func_l.html": 2863216576558791276, + "docs/api/html/pages.html": 4338336449088201146, + "venv/lib/python3.13/site-packages/pandas/_libs/json.cpython-313-x86_64-linux-gnu.so": 2436285663630821963, + "docs/api/html/group__SupersetDashboardsFiltersMixin.html": 17578063671731484965, + "docs/api/html/group__ReviewWorkspaceHelpers.html": 1176940369643831408, + "docs/api/html/group__ValidationFindingsPanelUxTests__Module.html": 3492500435759183400, + "docs/api/html/group__EnvironmentsApi.html": 15457246866592390632, + "venv/lib/python3.13/site-packages/pygments/lexers/teraterm.py": 16132676290138105984, + "docs/api/html/group__verifySessionAndAccess__Function.html": 6518276629640187972, + "docs/api/html/group__BackupsRedirectPage.html": 2891216165677443076, + "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/METADATA": 10810011740984652381, + "venv/lib/python3.13/site-packages/numpy/_pytesttester.py": 17737911110576747508, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_promote.py": 16601872688404846307, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_period.py": 6047041810867211174, + "venv/lib/python3.13/site-packages/_yaml/__init__.py": 3395829783751571350, + "venv/lib/python3.13/site-packages/pygments/lexers/jslt.py": 11805394130669644345, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/WHEEL": 18203500019759199992, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/licenses/LICENSE": 3868190977070717994, + "venv/lib/python3.13/site-packages/greenlet/tests/_test_extension_cpp.cpython-313-x86_64-linux-gnu.so": 7659849621107414188, + "docs/api/html/group__format__timezone__offset.html": 14635780330486688343, + "venv/lib/python3.13/site-packages/pygments/lexers/wowtoc.py": 17527844575999013592, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23879.f90": 13174951794239860144, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_api.py": 13319208721442328400, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/types.py": 356973910046950951, + "venv/lib/python3.13/site-packages/pygments/lexers/_lilypond_builtins.py": 1766946089314631488, + "venv/lib/python3.13/site-packages/pygments/lexers/mosel.py": 1877592344012288438, + "docs/api/html/group__sync__environment.html": 1811187775036019320, + "docs/api/html/group__build__namespaced__id.html": 12150766799543768530, + "docs/api/html/group__TestCleanReleaseApi.html": 16185754403987215515, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/ccalendar.pyi": 15789956857032062129, + "docs/api/html/group__startDryRun__Function.html": 1798526875933461819, + "docs/api/html/group__transform__zip.html": 10792708138270698712, + "docs/api/html/group__delete__running__tasks.html": 1080036419250840372, + "backend/src/plugins/llm_analysis/service.py": 8630918629937474981, + "docs/api/html/group____dispatch__intent.html": 9089068514794356054, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ndarray_assignability.pyi": 1718610984396277997, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_dialect.py": 4700488504252803159, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/decl_api.py": 5287018911951723034, + "docs/api/html/group__DatasetReviewDependencies.html": 2190246894914856689, + "docs/api/html/group__RegistryStatus.html": 11698693702774238014, + "venv/lib/python3.13/site-packages/numpy/lib/_function_base_impl.pyi": 2628035888703031029, + "venv/lib/python3.13/site-packages/pip/_internal/utils/setuptools_build.py": 13594639612360346306, + "docs/api/html/group__check__api__key__environment__scope.html": 12869540980840565823, + "backend/src/services/clean_release/approval_service.py": 14346840951852454312, + "docs/api/html/group__MockConfigManager.html": 2192424076609045256, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_categorical.py": 9923236395692943732, + "docs/api/html/group__get__task.html": 2469252830729210519, + "venv/lib/python3.13/site-packages/numpy/f2py/__main__.py": 12567751646090102167, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_where.py": 3272402211717453881, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/orderinglist.py": 10162099108656794338, + "docs/api/html/navtreeindex21.js": 7533748426858788437, + "docs/api/html/group__test__get__job__metrics.html": 1706423668878190645, + "venv/lib/python3.13/site-packages/jsonschema/_utils.py": 14237077105384631097, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/align.py": 6078666505647454830, + "backend/src/scripts/seed_superset_load_test.py": 7430188463595432869, + "docs/api/html/group__LLMProvider.html": 9637931473416605279, + "docs/api/html/group__TestCleanReleaseModels.html": 7307930441105961889, + "docs/api/html/group__DeleteRunningTasksUtil.html": 11213940847453331921, + "venv/lib/python3.13/site-packages/passlib/crypto/scrypt/_gen_files.py": 11149423183253618378, + "frontend/playwright-report/trace/uiMode.C2Efnu2P.js": 2717171022864487300, + "docs/api/html/group__test__extract__native__filters__from__permalink.html": 12643899760315874197, + "frontend/build/_app/immutable/chunks/rzyp_Wbp.js": 10559672264716197308, + "docs/api/html/group__update__maintenance__settings.html": 17618732781129600578, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_simd.py": 7577408467041941595, + "backend/src/core/utils/superset_context_extractor/_base.py": 6349561308410782726, + "docs/api/html/group__data__purity.html": 7580580678977879350, + "venv/lib/python3.13/site-packages/_pytest/outcomes.py": 12782895027812738142, + "venv/lib/python3.13/site-packages/websockets/legacy/exceptions.py": 16025779645869134942, + "docs/api/html/group__test__api__key__auth__environment__scope__ok.html": 15499030741410944952, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_ufunc.py": 3326502989311831856, + "docs/api/html/search/groups_4.js": 16921846554525899660, + "docs/api/html/group__log__security__event.html": 18315452659527006860, + "backend/src/plugins/__init__.py": 17194112070692432889, + "docs/api/html/group__list__jobs.html": 7585793809542090283, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/converter.py": 9041278869295701566, + "backend/src/api/routes/__tests__/test_assistant_authz.py": 3835028453926095879, + "docs/api/html/group__extract__data__rows.html": 16073979208553120843, + "frontend/src/routes/datasets/StatsBar.svelte": 4241697609925045735, + "frontend/src/routes/login/+page.svelte": 2655837067927461296, + "docs/api/html/group____build__target__signatures.html": 16982125749763522469, + "venv/lib/python3.13/site-packages/pygments/lexers/ada.py": 17032408976634308999, + "docs/api/html/group__TokenEstimator.html": 12075103575602311347, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_utils.py": 4612923732868929770, + "venv/lib/python3.13/site-packages/cryptography/x509/general_name.py": 4481582226129488535, + "venv/lib/python3.13/site-packages/typing_inspection/introspection.py": 13916695705179237047, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame.py": 16757570551941104401, + "docs/api/html/group__FetchModelsRequest.html": 12761345404730870015, + "venv/lib/python3.13/site-packages/pandas/_libs/index.pyi": 17679349633640606985, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_libsparse.py": 1859997684694949029, + "frontend/src/routes/settings/automation/+page.svelte": 13199339263146300897, + "docs/api/html/group__test__delete__task__success.html": 6168518344728381187, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/resource_protector.py": 4823504113176750140, + "docs/api/html/group__CheckFinalStatus.html": 8660527585364518838, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/bar.py": 12859947592168238832, + "venv/lib/python3.13/site-packages/numpy/_core/_exceptions.pyi": 3661113433078225952, + "venv/lib/python3.13/site-packages/numpy/_core/numerictypes.py": 6205675182996213576, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_missing.py": 1963705411068820866, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/env.py": 1254612137164491329, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_numpy_array_equal.py": 2089426719574307767, + "docs/api/html/group__register__candidate__v2__endpoint.html": 5175001187205682785, + "venv/lib/python3.13/site-packages/attr/_next_gen.py": 16353246941851015420, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/nditer.pyi": 2351219156711800159, + "docs/api/html/group__duplicateTask__Function.html": 6572424327379812707, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_apply.py": 7511915990531229598, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/__init__.py": 16434403703599680307, + "backend/src/api/routes/maintenance/_routes.py": 18203881358318110485, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/WHEEL": 9788895026336324100, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/linalg.pyi": 269481015135399748, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_arithmetic.py": 17427754419626622853, + "backend/src/services/clean_release/enums.py": 5838176998590033780, + "backend/tests/test_maintenance_service.py": 6347730951072309013, + "backend/src/core/__tests__/test_superset_preview_pipeline.py": 13996819877413389729, + "backend/src/api/routes/__tests__/test_migration_routes.py": 12273917934344716029, + "docs/api/html/group__fetchRuns__Function.html": 10568246588417794919, + "venv/lib/python3.13/site-packages/pandas/io/excel/_xlrd.py": 14430937200583666658, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nested_sequence.pyi": 11245460325970663922, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_empty.py": 13006241382741353569, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_mask.py": 9654897363729130542, + "venv/lib/python3.13/site-packages/pip/_internal/commands/check.py": 6937252393012787214, + "docs/api/html/group__ASSISTANT__AUDIT.html": 13579278608656856819, + "docs/api/html/group__update__preferences.html": 18008584156403722342, + "venv/lib/python3.13/site-packages/pandas/tests/io/xml/test_xml.py": 6906547816798138000, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/latex_table.tpl": 8706980975714184465, + "frontend/src/routes/settings/git/+page.svelte": 13757324397807811651, + "venv/lib/python3.13/site-packages/pydantic/_migration.py": 17982816821930887921, + "venv/lib/python3.13/site-packages/pandas/io/stata.py": 14370692318835340323, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_block_docstring.py": 18146459246837890489, + "venv/lib/python3.13/site-packages/numpy/f2py/diagnose.pyi": 8607205990821121708, + "venv/lib/python3.13/site-packages/_pytest/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/ma/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__Base.html": 12380905760850821737, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_logical.py": 6242457515917145500, + "backend/src/services/notifications/service.py": 3120728755335117444, + "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_datetime.py": 3499461736474530062, + "venv/lib/python3.13/site-packages/PIL/ImageDraw2.py": 13610162107593278891, + "venv/lib/python3.13/site-packages/numpy/testing/_private/extbuild.py": 4984721349618127021, + "docs/api/html/group__test__provision__adfs__user__existing.html": 3869094630531615689, + "venv/lib/python3.13/site-packages/rsa/__init__.py": 14623742580410014505, + "docs/api/html/group__test__resolve__trusted__policy__snapshots__missing__profile.html": 13528681884996041677, + "venv/lib/python3.13/site-packages/anyio/functools.py": 4300781896135050327, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/__init__.py": 15130871412783076140, + "frontend/src/components/Footer.svelte": 12838918285533328222, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_arithmetic.py": 16829312896275893002, + "docs/api/html/doc.svg": 6703136184032142780, + "docs/api/html/group__test__belief__scope__not__visible__at__info.html": 7650312905986638988, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_deprecate_nonkeyword_arguments.py": 11676809974120007408, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/assertsql.py": 4633484475514351889, + "venv/lib/python3.13/site-packages/pygments/lexers/perl.py": 17014528337020572681, + "docs/api/html/group__frontend__src__lib__stores__sidebar__js____toggleSidebar.html": 1585062636957734877, + "docs/api/html/group__test__batch__detect.html": 9632306453893154983, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/measure.py": 18327922742808984428, + "backend/src/services/reports/__tests__/test_type_profiles.py": 8045459741015920365, + "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/METADATA": 11439969143853665311, + "docs/api/html/group__test__list__tasks__success.html": 9673959434282998524, + "venv/lib/python3.13/site-packages/pandas/io/formats/printing.py": 3054136648863371285, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/LICENSE": 6989336036499641077, + "docs/api/html/group__SupersetDashboardsWriteMixin.html": 8613916271231427973, + "docs/api/html/group__test__missing__secret__key__crashes.html": 8704844476215085040, + "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/websockets/sync/__init__.py": 15130871412783076140, + "docs/api/html/group__test__get__remote__ids__batch__returns__empty__for__empty__input.html": 5603538648054911229, + "backend/tests/test_storage_audit_fixes.py": 6119862973635892572, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____patchSession.html": 5561812461916057904, + "docs/api/html/tab_b.png": 17139676106204569061, + "docs/api/html/group__test__extract__chart__uuids__from__archive.html": 3048505118835977338, + "venv/lib/python3.13/site-packages/PIL/Jpeg2KImagePlugin.py": 16905402423248975204, + "docs/api/html/group__remove__empty__directories.html": 14528085660669051293, + "docs/api/html/group__build__rows.html": 5075247591388659502, + "docs/api/html/group__listFiles__Function.html": 10223277943043127993, + "venv/lib/python3.13/site-packages/httpx/_urls.py": 4219389176352582046, + "venv/lib/python3.13/site-packages/numpy/_core/defchararray.py": 15550230459945996915, + "venv/lib/python3.13/site-packages/numpy/ctypeslib/__init__.py": 2401931196871484449, + "venv/lib/python3.13/site-packages/pydantic/plugin/_loader.py": 792663962985957671, + "docs/api/html/group__StoragePlugin.html": 1518633266255703440, + "venv/lib/python3.13/site-packages/numpy/_pytesttester.pyi": 5750506937526308405, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/tornado.py": 6491136785917169991, + "docs/api/html/group__DocumentationPlugin.html": 4602413971047524450, + "backend/tests/test_resource_hubs.py": 1620639151885021568, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/providers.py": 7267821734584612032, + "frontend/src/components/backups/BackupManager.svelte": 15318298322895797591, + "venv/lib/python3.13/site-packages/authlib/oidc/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/tablegen.py": 2917626373516779857, + "docs/api/html/group__frontend__src__lib__api__translate__target__schema__js____checkTargetTableSchema.html": 12580964374623879461, + "docs/api/html/group__test__approve__rejects__duplicate__approve.html": 11531613578978927773, + "docs/api/html/group__TranslateHistoryTests.html": 16053454222263447135, + "docs/api/html/group__delete__repository.html": 16831781850407059770, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc64_aix.h": 8706347224105630468, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ndarray_misc.py": 8706265665356094801, + "venv/lib/python3.13/site-packages/pandas/io/json/__init__.py": 12333505155070172626, + "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/METADATA": 10707390829735099042, + "frontend/src/lib/components/MaintenanceEventsTable.svelte": 1697386217337210174, + "backend/src/api/routes/health.py": 13097980848666987664, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/strategies.py": 15673926142454922581, + "docs/api/html/group__test__map__columns__invalid__source__type.html": 8185525188861927511, + "venv/lib/python3.13/site-packages/keyring/devpi_client.py": 3445890176686211982, + "docs/api/html/group__id.html": 4811327565109647473, + "venv/lib/python3.13/site-packages/authlib/integrations/requests_client/__init__.py": 16416360448593978041, + "docs/api/html/group____is__conversation__archived.html": 601991753846203755, + "docs/api/html/group__get__password__hash.html": 1918521256255854564, + "docs/api/html/group____build__validation__export.html": 10674121092394091734, + "docs/api/html/group__frontend__src__services__adminService__js____createUser.html": 12401425458929275331, + "docs/api/html/group__StoragePluginPackage.html": 6430288179557924153, + "venv/lib/python3.13/site-packages/greenlet/PyGreenlet.hpp": 6366432579621298231, + "venv/lib/python3.13/site-packages/passlib/handlers/pbkdf2.py": 16686685453577026643, + "backend/src/api/routes/dashboards/_projection.py": 9178951020532547334, + "venv/lib/python3.13/site-packages/numpy/_globals.pyi": 12839879732484756979, + "docs/api/html/group____serialize__clarification__state.html": 16624968641905184426, + "docs/api/html/group__SupersetContextExtractorBase______init____.html": 1177619611547833454, + "docs/api/html/group__handleCancel__Function.html": 3411761753976161711, + "venv/lib/python3.13/site-packages/pydantic/deprecated/config.py": 12280996227531856230, + "venv/lib/python3.13/site-packages/PIL/JpegImagePlugin.py": 10621639599916796689, + "docs/api/html/group__NativeFilterExtractionTests.html": 14602614888501976510, + "docs/api/html/group__DashboardSchemas.html": 17302805929430757920, + "docs/api/html/group__ValidationRunResponse.html": 17135497457065164402, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_quantile.py": 11966156706220948315, + "venv/lib/python3.13/site-packages/pygments/styles/murphy.py": 8177992406082781615, + "venv/lib/python3.13/site-packages/git/refs/remote.py": 4391983355222612205, + "docs/api/html/group__DatasetReviewSessionModels.html": 15486238525446211823, + "docs/api/html/group__DashboardHub__formatDate__Function.html": 6545488449073827576, + "docs/api/html/group__test__list__tasks__service__error.html": 1075541340524463072, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/specifiers.py": 12284901056355482991, + "venv/lib/python3.13/site-packages/pygments/lexers/futhark.py": 10102535873433759899, + "backend/src/api/routes/dataset_review_pkg/_dependencies.py": 5445855387226126427, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7662/introspection.py": 14645217065508644154, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/base.py": 6509914623926583629, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/__init__.py": 12793458753561114666, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/rule.py": 5318344538761246105, + "venv/lib/python3.13/site-packages/yaml/emitter.py": 6036657460416912844, + "docs/api/html/group__TranslateSchemas.html": 17296673720360831542, + "docs/api/html/search/all_14.js": 8771148315983143295, + "venv/lib/python3.13/site-packages/pandas/core/interchange/utils.py": 11401792151107207834, + "venv/lib/python3.13/site-packages/git/exc.py": 14278238357119816365, + "frontend/src/lib/stores/__tests__/setupTests.js": 16228706107748081093, + "backend/src/services/__tests__/test_health_service.py": 16470443406586362974, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_datetimelike.py": 10294379314868108649, + "venv/lib/python3.13/site-packages/pygments/lexers/asm.py": 13861952972248758785, + "docs/api/html/group____map__candidate__provenance.html": 2905607334694773753, + "docs/api/html/group__PluginConfig.html": 11629742848862930687, + "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/RECORD": 17341460504914308184, + "docs/api/html/group__SemanticCandidateDto.html": 8345714029489637620, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_api.py": 1910541672533352625, + "venv/lib/python3.13/site-packages/pygments/style.py": 17393199235575070210, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/errors.py": 6538052228921426956, + "backend/src/plugins/translate/orchestrator_lang_stats.py": 5713612003349083382, + "docs/api/html/group__test__code__to__lang__mapping.html": 11085633812653398836, + "backend/src/services/git/_gitea.py": 12239341366900580663, + "docs/api/html/group__test__end__returns__202.html": 3291889015034069048, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/bitwise_ops.py": 14350609278188982939, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_timedelta.py": 7742506012012398830, + "venv/lib/python3.13/site-packages/PIL/XVThumbImagePlugin.py": 7472134175570205454, + "docs/api/html/group__ApprovalRequest.html": 11273616744771079528, + "venv/lib/python3.13/site-packages/pygments/lexers/dax.py": 10868881057512002309, + "backend/src/services/clean_release/__tests__/test_preparation_service.py": 1135205964675811608, + "docs/api/html/group__normalizeApiError__Function.html": 11798259322678734628, + "venv/lib/python3.13/site-packages/numpy/_core/_dtype.py": 7796703383405149774, + "backend/alembic/versions/a5b6c7d8e9f0_set_null_ondelete_for_task_records_env_fk.py": 17528129825127496932, + "docs/api/html/group__get__roles__by__ad__groups.html": 5091343705498361491, + "docs/api/html/group__RevokeRequest.html": 3725473471343488816, + "docs/api/html/group__RecommendedAction.html": 7305257791588353178, + "docs/api/html/group__oauth.html": 12697823183291455723, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_dtypes.py": 481191723198819568, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_python_parser_only.py": 12231449578582108346, + "venv/lib/python3.13/site-packages/pyasn1/error.py": 11036037300994516747, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_formats.py": 1265319125235346745, + "venv/lib/python3.13/site-packages/jeepney/bus_messages.py": 5871341372541525842, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_kind.py": 18178830861475480607, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_is_monotonic.py": 4626065848596214108, + "venv/lib/python3.13/site-packages/attr/setters.py": 12467854389745942025, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_formats.py": 2601044064677727807, + "docs/api/html/group__TranslateJobRoutesModule.html": 6272089785836240720, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_array.py": 11271807719833350332, + "venv/lib/python3.13/site-packages/sqlalchemy/event/__init__.py": 16182540084654095394, + "backend/src/api/routes/dashboards/_router.py": 8641007051243802224, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_ssl_constants.py": 14834514243239777933, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_shift.py": 9952689832827833247, + "backend/src/services/clean_release/candidate_service.py": 12771065368619689666, + "venv/lib/python3.13/site-packages/git/objects/submodule/__init__.py": 12958523219496107878, + "backend/src/api/routes/git/_environment_routes.py": 5687847761729712859, + "docs/api/html/group__TaskCleanupModule.html": 3445725949613041336, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/__init__.py": 15130871412783076140, + "frontend/src/routes/settings/MigrationSettings.svelte": 12844990967512238268, + "docs/api/html/group__test__dataset__review__scoped__message__uses__masked__filter__context.html": 17334328430934635110, + "docs/api/html/folderclosedd.svg": 17609606181638232885, + "venv/lib/python3.13/site-packages/starlette/requests.py": 4582424111350387010, + "venv/lib/python3.13/site-packages/numpy/_core/lib/pkgconfig/numpy.pc": 14713682399742251335, + "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_timedelta.py": 364160935264757405, + "frontend/build/_app/immutable/nodes/24.D-5xQGNl.js": 16241003221424569420, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_timestamp.py": 10308799534491190078, + "docs/api/html/group__request.html": 4526564378065461172, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/_toml_compat.py": 10196543528439925412, + "docs/api/html/group__frontend__e2e__helpers__api__helper__js____apiDelete.html": 3340000838366593929, + "docs/api/html/group__list__users.html": 952281442614367040, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____updateSettings.html": 4714555805820334963, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/endpoint.py": 8519226897299461194, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/status.py": 2214590120238144582, + "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/datasource.pyi": 16752667877866430577, + "docs/api/html/group__test__resolve__trusted__policy__snapshots__missing__registry.html": 7913805907359428046, + "docs/api/html/search/all_8.js": 12526514117629582170, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_getitem.py": 18202683049446557047, + "docs/api/html/group__test__get__datasets__search.html": 7665831581777860619, + "docs/api/html/group__get__job.html": 11838854381760893535, + "docs/api/html/group__calculate__schedule.html": 15388949849298396012, + "venv/lib/python3.13/site-packages/numpy/ma/testutils.py": 9355402483340137461, + "docs/api/html/group__GlobalSettings.html": 10632007378548267404, + "venv/lib/python3.13/site-packages/cryptography/hazmat/__init__.py": 6534110674636458866, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_nditer.py": 8341339612899904236, + "venv/lib/python3.13/site-packages/pandas/tests/apply/conftest.py": 13798335354961261346, + "backend/src/api/routes/dataset_review_pkg/_routes.py": 11040245149296528009, + "docs/api/html/group__save__and__unpack__dashboard.html": 8946899899744210343, + "docs/api/html/group__test__sidebar__initial__state__Function.html": 1960834257863152813, + "docs/api/html/group__AssistantAdminRoutes.html": 8552062072731347537, + "docs/api/html/group__StorageModels.html": 7704378084745051491, + "venv/lib/python3.13/site-packages/pip/_internal/commands/inspect.py": 1401259241736437656, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_symbolic.py": 8093576026032854125, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/conftest.py": 4124267277224879990, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/row.py": 9763935103055608874, + "venv/lib/python3.13/site-packages/passlib/handlers/sha2_crypt.py": 8171587560325812664, + "docs/api/html/group__EncryptionManager.html": 5675366914155455618, + "docs/api/html/group__TraceContextMiddleware__dispatch.html": 11355825183050222114, + "docs/api/html/group__test__init__repository__initializes__and__saves__binding.html": 17804439037629994394, + "venv/lib/python3.13/site-packages/PIL/PcxImagePlugin.py": 1691405132377495336, + "docs/api/html/group__test__belief__scope__logs__reason__reflect__at__debug.html": 16218626126830450612, + "backend/src/core/logger/__tests__/test_logger.py": 392344140757115787, + "docs/api/html/group__resolveEnvUrl__Function.html": 15828348202368551114, + "docs/api/html/group__get__dashboards.html": 12911221475273233338, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_numeric.py": 17391095502314929042, + "venv/lib/python3.13/site-packages/numpy/random/mtrand.cpython-313-x86_64-linux-gnu.so": 16146459667121787202, + "docs/api/html/group__commit__changes.html": 12893499093937665878, + "docs/api/html/group__GitServiceGiteaMixin.html": 16505751774814321714, + "docs/api/html/group__MaintenancePackage.html": 10072412896629514555, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/repr.py": 839417422880281122, + "docs/api/html/group__call__llm__for__batch.html": 16443633855674435189, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_return_integer.py": 16102640589300356639, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_str.py": 149688376805129532, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_explode.py": 16195468192763502449, + "docs/api/html/group__APIKeyUtilities.html": 5445365654414296643, + "docs/api/html/group__error.html": 3228457887146363212, + "venv/lib/python3.13/site-packages/referencing/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__get__run__detail.html": 4564623491331898259, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8693/__init__.py": 11065844267208884531, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arrayprint.pyi": 2053388407376896377, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_value_counts.py": 12340872812120847127, + "docs/api/html/group__derive__recommended__action.html": 17143048057272072667, + "venv/lib/python3.13/site-packages/pandas/_libs/parsers.cpython-313-x86_64-linux-gnu.so": 14134106903573638108, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_function.py": 13492077564015386528, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE.APACHE": 11041304845352917971, + "docs/api/html/group__getTask__Function.html": 11413172980831416188, + "docs/api/html/group__openGit__Function.html": 5275859006159727877, + "venv/lib/python3.13/site-packages/websockets/extensions/__init__.py": 13067201313921664210, + "venv/lib/python3.13/site-packages/git/index/typ.py": 11661540784850363024, + "venv/lib/python3.13/site-packages/numpy/matrixlib/defmatrix.py": 4940170059946018356, + "venv/bin/activate": 14735074000123383125, + "venv/lib/python3.13/site-packages/pygments/styles/xcode.py": 14124729477757765388, + "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft_umath.cpython-313-x86_64-linux-gnu.so": 16443444849116065961, + "venv/lib/python3.13/site-packages/pydantic/v1/error_wrappers.py": 5701679786078971939, + "venv/lib/python3.13/site-packages/packaging/_elffile.py": 9546225990833172494, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/index/test_intervalindex.py": 5053113227747333759, + "docs/api/html/group____FakeDb.html": 6191058217277272469, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_astype.py": 15275720655739710249, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/async_app.py": 4329794049222609894, + "venv/lib/python3.13/site-packages/numpy/_distributor_init.pyi": 1308368231471324581, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_swaplevel.py": 3584770792383216626, + "docs/api/html/group__fetchEnvironments__Function.html": 11012013762197915559, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_ewm.py": 13789842684407148830, + "docs/api/html/group__SupersetContextParsingMixin____recover__dataset__binding__from__dashboard.html": 11941775473254198398, + "venv/lib/python3.13/site-packages/cryptography/__init__.py": 641702726372647770, + "docs/api/html/group__JobLifecycle.html": 18086772682144526037, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalar_ctors.py": 631744056514965940, + "venv/lib/python3.13/site-packages/anyio/_core/_subprocesses.py": 7271614043537119143, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_missing.py": 6224750552277937853, + "docs/api/html/group__PluginLoader.html": 7483612115422215733, + "dist/docker/frontend.0.1.2.tar.xz": 14426231572762407076, + "docs/api/html/search/search.js": 11014809740432474012, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____loadDashboardBanners.html": 5809931002821855635, + "venv/lib/python3.13/site-packages/ecdsa/der.py": 9374566189581725372, + "venv/lib/python3.13/site-packages/pygments/styles/vim.py": 2621036947954523349, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/resource_owner_password_credentials.py": 9559295461619813890, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_function.py": 14142346897145169685, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____updateResourceTask.html": 10319226416860236365, + "docs/api/html/group__handleSubmit__Function.html": 2642372217347398484, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi": 1626154870044880426, + "docs/api/html/group__ParsedNativeFilters.html": 9224788944366782259, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/random.pyi": 1808392097712315455, + "venv/lib/python3.13/site-packages/pandas/core/indexes/multi.py": 9115751979327393200, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_equals.py": 18261810467289276844, + "venv/lib/python3.13/site-packages/pandas/core/indexes/extension.py": 7193879749426425951, + "docs/api/html/group__LanguageSwitcher.html": 18011055558279343478, + "docs/api/html/group__FeedbackResponse.html": 9253665785027046545, + "venv/lib/python3.13/site-packages/requests/packages.py": 7733041271118298220, + "frontend/src/lib/components/layout/Breadcrumbs.svelte": 8720668241659707399, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/util.py": 10640907133050862176, + "docs/api/html/group__test__authenticate__user.html": 9321693170809204808, + "docs/api/html/group____get__profile__service.html": 16201432222171400696, + "docs/api/html/group__test__very__long__content.html": 5572816377205062437, + "docs/api/html/group__push__span.html": 6501660690027552485, + "docs/api/html/group__docker__frontend__entrypoint.html": 16625957317311694585, + "docs/api/html/group__test__list__runs__empty.html": 2217625981885883059, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_datetime.py": 1678885152993000592, + "venv/lib/python3.13/site-packages/gitdb/typ.py": 16374739906244805047, + "venv/lib/python3.13/site-packages/httpcore/__init__.py": 5897259569277532401, + "frontend/playwright-report/trace/index.html": 6654608714409350530, + "venv/lib/python3.13/site-packages/referencing/jsonschema.py": 14596871117484757502, + "backend/tests/services/clean_release/test_policy_resolution_service.py": 684362936473488668, + "docs/api/html/group__handleDeleteRole__Function.html": 12113537236786108342, + "backend/src/plugins/translate/orchestrator_query.py": 4760681990145471312, + "docs/api/html/group__UtilsModule.html": 2939005577247546143, + "frontend/src/routes/datasets/review/ReviewWorkspaceHeader.svelte": 15302107925819930527, + "docs/api/html/group__run__candidate__register.html": 2561393854945297828, + "docs/api/html/group__update__preview__row.html": 12779817647568588582, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/LCSseq.py": 13853220736499979380, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_unique.py": 16285418015531891530, + "venv/lib/python3.13/site-packages/PIL/ImageFile.py": 15765130658900167517, + "docs/api/html/group__extract__objects__from__zip.html": 4781757022927901861, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/test_pyinstaller.py": 9430762168079129025, + "venv/lib/python3.13/site-packages/starlette/middleware/__init__.py": 9524277524025372856, + "docs/api/html/group__MaintenanceDashboardState.html": 12984094897536307625, + "docs/api/html/group__normalize__task__report.html": 17645268155877338532, + "docs/api/html/group__connect__Function.html": 12882031631631590225, + "docs/api/html/group__test__event__not__found.html": 3590102006915597365, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/authorization_server.py": 4427151727224472650, + "docs/api/html/group__test__get__dialect__from__database__unsupported.html": 1556786983214372955, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_array_ops.py": 6709502157317299163, + "venv/lib/python3.13/site-packages/websockets/legacy/client.py": 4032878587330592478, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/RECORD": 7914594107698271488, + "docs/api/html/group__TestLogger.html": 17549525508288890457, + "venv/lib/python3.13/site-packages/passlib/tests/sample1.cfg": 9597283806285213340, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_diff.py": 2216748778018882333, + "docs/api/html/group__test__manifest__count__mismatch.html": 16626531910432296321, + "docs/api/html/group__batch__detect.html": 7272748616355423819, + "venv/lib/python3.13/site-packages/git/remote.py": 1694919255653049944, + "venv/lib/python3.13/site-packages/pygments/styles/monokai.py": 12381683616720952636, + "venv/lib/python3.13/site-packages/pandas/tests/api/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/_pytest/_io/pprint.py": 11202117031437223527, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pop.py": 14885271225856187795, + "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_real/foo90.f90": 58572216018544419, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/WHEEL": 691462085217888236, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_aix.h": 13316272821279308986, + "venv/lib/python3.13/site-packages/pytest/__init__.py": 6137272437722350673, + "venv/lib/python3.13/site-packages/pandas/tests/window/moments/test_moments_consistency_ewm.py": 12153690217678546798, + "venv/lib/python3.13/site-packages/pandas/compat/__init__.py": 6077099417711209303, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/util.cpython-313-x86_64-linux-gnu.so": 12473903676666680134, + "venv/lib/python3.13/site-packages/PIL/ImageMorph.py": 13861961228125789866, + "venv/lib/python3.13/site-packages/iniconfig/exceptions.py": 16501270224069836264, + "docs/api/html/group__approve__execution__mapping.html": 11553995581837214740, + "docs/api/html/group__test__get__database__mappings__success.html": 6411080375632795387, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/resources.py": 11533706401259147051, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_indexing.py": 6539365174681852769, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/__init__.py": 15130871412783076140, + "docs/api/html/group__get__config.html": 8145620257276901599, + "docs/api/html/group__TranslateRouterModule.html": 17322360463251819230, + "venv/lib/python3.13/site-packages/pygments/lexers/maxima.py": 11824576541091274641, + "docs/api/html/group__test__delete__job.html": 2874894259644027669, + "venv/lib/python3.13/site-packages/fastapi/_compat/__init__.py": 12380131786677943349, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh25286.pyf": 14358606965464506398, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/typing/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__SupersetClientGetDashboardPermalinkState.html": 14465481522755672093, + "venv/lib/python3.13/site-packages/pandas/tests/io/conftest.py": 5864037534050136837, + "venv/lib/python3.13/site-packages/fastapi/_compat/v1.py": 9776181748061371513, + "docs/api/html/group__test__get__report__detail__not__found.html": 11700510579759808202, + "docs/api/html/group____seed__with__candidate__policy__registry.html": 2918236783591851190, + "venv/lib/python3.13/site-packages/smmap/__init__.py": 4557520096828426601, + "venv/lib/python3.13/site-packages/uvicorn/config.py": 17317823506849880916, + "backend/src/plugins/translate/dictionary_validation.py": 16674754716565921261, + "venv/lib/python3.13/site-packages/pandas/io/formats/format.py": 3364941338174434661, + "docs/api/html/group__ComplianceStages.html": 10094047934285993702, + "docs/api/html/group__TopNavbarStoreTest__Module.html": 11592246663822811031, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_re.py": 1296579393600719224, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/licenses/LICENSE": 8364608327598414179, + "docs/api/html/group__isItemAllowed__Function.html": 1849064607972812978, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_histograms.py": 47631283818191049, + "venv/lib/python3.13/site-packages/numpy/_core/arrayprint.pyi": 84606125837677197, + "venv/lib/python3.13/site-packages/PIL/GifImagePlugin.py": 16073125611077200693, + "venv/lib/python3.13/site-packages/sqlalchemy/pool/events.py": 13473858896579666058, + "docs/api/html/group__CorrectionConflictResult.html": 16510702604708035567, + "venv/lib/python3.13/site-packages/passlib/crypto/__init__.py": 16409196868630049365, + "venv/lib/python3.13/site-packages/numpy/polynomial/polyutils.py": 12355826783958402233, + "venv/lib/python3.13/site-packages/passlib/tests/test_context.py": 15195609282700801214, + "docs/api/html/group__test__multimodal__model__returns__true.html": 4867921283780529014, + "docs/api/html/group__test__us3__preview__endpoint__returns__failed__preview__without__false__dashboard__not__found__contract__drift.html": 951503115224623642, + "docs/api/html/group__handleUpdateSchedule__Function.html": 3932290098337453365, + "docs/api/html/group__test__extract__native__filters__from__key.html": 3900857029224500253, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_setops.py": 13440916133402971190, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cython.py": 14695721638531081573, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/base.py": 16891437410462671317, + "backend/src/models/api_key.py": 4327024700622965951, + "backend/git_repos/remote/test-repo.git/objects/aa/ea042a37c6f7bd010d91db93951328da7f01cc": 11936716919619613939, + "venv/lib/python3.13/site-packages/pydantic/_internal/_import_utils.py": 4029157986210295967, + "venv/lib/python3.13/site-packages/pandas/io/xml.py": 326466573926392764, + "backend/src/api/routes/reports.py": 11259252279199691691, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/pg8000.py": 6580512354643849828, + "docs/api/html/group__api__include__routers.html": 15917122012230549418, + "docs/api/html/group__RepositoryRelations.html": 8149399210221155946, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/REQUESTED": 15130871412783076140, + "backend/src/models/dataset_review_pkg/_finding_models.py": 13502025287982574359, + "backend/src/core/scheduler.py": 8479779689131957613, + "venv/lib/python3.13/site-packages/idna-3.11.dist-info/METADATA": 14036738037171597049, + "docs/api/html/group__test__compliance__run__executes__as__task__manager__task.html": 3028064195691881216, + "frontend/src/lib/components/translate/__tests__/TargetSchemaHint.test.js": 8659643137288661057, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/WHEEL": 18203500019759199992, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_convert_dtypes.py": 5005259275646154894, + "docs/api/html/group__DEFAULT__LLM__ASSISTANT__SETTINGS.html": 18119385185452388205, + "backend/src/core/auth/oauth.py": 2441694487419087464, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py": 14946223589457772924, + "backend/src/plugins/translate/metrics.py": 11628699537333742678, + "frontend/src/services/toolsService.js": 1568142461283466080, + "venv/lib/python3.13/site-packages/referencing/py.typed": 15130871412783076140, + "docs/api/html/group__TranslateTargetSchemaApi.html": 13948109670112640865, + "docs/api/html/group__handleBulkSync__Function.html": 8500634733610681572, + "venv/lib/python3.13/site-packages/smmap/test/test_mman.py": 8977119225749253844, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/__init__.py": 697601512486720554, + "venv/lib/python3.13/site-packages/urllib3/http2/probe.py": 4069929463671970243, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/tags.py": 254599446317461188, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_array_from_pyobj.py": 9596224861290975079, + "venv/lib/python3.13/site-packages/jsonschema/tests/typing/test_all_concrete_validators_match_protocol.py": 14824388798676578409, + "backend/src/plugins/translate/_run_source.py": 11569137727611732019, + "docs/api/html/group__test__get__run__detail__success.html": 7842784758779741648, + "venv/lib/python3.13/site-packages/pydantic/functional_serializers.py": 15285359935059345032, + "docs/api/html/group__MigrationDryRunOrchestratorModule.html": 996754244754452705, + "venv/lib/python3.13/site-packages/pandas/core/arrays/categorical.py": 15993211255162930859, + "docs/api/html/group__test__create__gitea__pull__request__retries__with__remote__host__on__404.html": 16699153216493033230, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timezones.pyi": 17528421279543420867, + "docs/api/html/group__seed__permissions.html": 4126130443403331361, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7515/jws.py": 7505219131537941130, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/__init__.py": 15130871412783076140, + "venv/bin/pyrsa-keygen": 8222542582170363672, + "docs/api/html/group__HealthStore.html": 7646703134391863590, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_common.py": 2223069451949206319, + "docs/api/html/group__DictionaryEntryCreate.html": 6174105871099793072, + "venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py": 10265081145401348863, + "venv/lib/python3.13/site-packages/websockets/extensions/permessage_deflate.py": 12957105912018691390, + "venv/lib/python3.13/site-packages/numpy/core/shape_base.py": 17925759824894973734, + "docs/api/html/group__test__creates__new__banner.html": 4106644046947123822, + "venv/lib/python3.13/site-packages/certifi/__main__.py": 13417658012431779061, + "venv/lib/python3.13/site-packages/starlette/middleware/cors.py": 11384893784314197864, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/binding.py": 17078280153372356796, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/azure.py": 13529763490186254462, + "docs/api/html/group__TestConstantsAuditFixes.html": 1281986242324537213, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/chararray.pyi": 17340224970247832290, + "venv/lib/python3.13/site-packages/pygments/styles/bw.py": 869630132791421268, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/__init__.py": 2246704695838251846, + "venv/lib/python3.13/site-packages/pygments/lexers/srcinfo.py": 16466766917840327610, + "venv/lib/python3.13/site-packages/numpy/matlib.py": 112839038090033740, + "frontend/src/components/storage/FileList.svelte": 6226735853135032532, + "docs/api/html/group__HealthService.html": 2595257407223931546, + "venv/lib/python3.13/site-packages/PIL/_imagingmorph.pyi": 18222325750818585549, + "docs/api/html/group__DatasetMapper.html": 8174296786664861741, + "frontend/build/_app/immutable/chunks/uoY2-oxA.js": 17505982193573114818, + "venv/lib/python3.13/site-packages/websockets/extensions/base.py": 2457233337788783873, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_size.py": 16658280641516916790, + "docs/api/html/group__test__resolve__merge__conflicts__passes__resolution__items__to__service.html": 3503298276532245309, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_semicolon_split.py": 8153770165829451525, + "docs/api/html/group__frontend__src__services__toolsService__js____getTaskStatus.html": 2867392422291554776, + "docs/api/html/group__WebSocketLogHandler__get__recent__logs.html": 5454880085918399099, + "venv/lib/python3.13/site-packages/pydantic/v1/typing.py": 13467331592583800299, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_spss.py": 4865360315909532603, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/containers.py": 5969831151685016772, + "docs/api/html/group__get__repository__status.html": 2242859351176196482, + "docs/api/html/group__test__all__keys__existing__returns__empty.html": 2310303904698481345, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_stata.py": 3030675968330529905, + "docs/api/html/group__test__trigger__run__no__dashboards.html": 16608562786085903819, + "docs/api/html/group__add__task.html": 557592669952894708, + "docs/api/html/group__create__role.html": 7308394036777191380, + "docs/api/html/group____config__manager.html": 8330722751801305600, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_array_coercion.py": 3551994404797560483, + "venv/lib/python3.13/site-packages/pandas/core/computation/common.py": 5369352684655954608, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_transform.py": 6759417099641034692, + "docs/api/html/group__test__root__path__default.html": 3749097591798015561, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/models.py": 5656065513234782067, + "backend/src/plugins/translate/__tests__/test_inline_correction.py": 9293076489563685553, + "docs/api/html/group__test__backup__dashboards__success.html": 15648044281266776906, + "venv/lib/python3.13/site-packages/jsonschema/tests/fuzz_validate.py": 2328585939822059352, + "venv/lib/python3.13/site-packages/attrs/validators.py": 10346563361083429998, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/jwk.py": 6458001384702613165, + "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/urllib3/util/request.py": 9432067988603015849, + "frontend/build/_app/immutable/chunks/DgWyDTCI.js": 11883702220404619897, + "venv/lib/python3.13/site-packages/rapidfuzz/fuzz.py": 1094797446508902066, + "docs/api/html/group____dataset__review__conflict__http__exception.html": 2685921445603174181, + "docs/api/html/group__parse__dataset__selection.html": 6178748760718774225, + "venv/lib/python3.13/site-packages/websockets/frames.py": 4901850477414613953, + "frontend/e2e/tests/git.e2e.js": 10018194126657448104, + "frontend/src/routes/datasets/review/[id]/__tests__/dataset_review_workspace.ux.test.js": 14106200953934418963, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_records.py": 18167578114159312327, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_constructors.py": 6440526981746306640, + "docs/api/html/group__missing__mandatory__stages.html": 7547931486255029352, + "docs/api/html/group__setToken__Function.html": 17680187825961724392, + "docs/api/html/group__MigrateRequest.html": 12258712854787042018, + "frontend/src/lib/api/translate/jobs.js": 9613844538417291513, + "docs/api/html/group__test__async__network__404__mapping__keeps__non__dashboard__endpoints__generic.html": 15980107135135079303, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/strptime.pyi": 5973671421648618563, + "docs/api/html/group__mock__deps.html": 1002676967209626799, + "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling_skew_kurt.py": 15225601437354712351, + "docs/api/html/group____apply__git__identity__from__profile.html": 14258939660260091015, + "docs/api/html/group__rbac__permission__catalog.html": 4836642153723426530, + "docs/api/html/group__test__extract__objects__from__zip__collects__all__types.html": 627526279226989787, + "venv/lib/python3.13/site-packages/apscheduler/triggers/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/websockets/imports.py": 1995356703044158461, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/_neighborhood_iterator_imp.h": 10634781863364525895, + "venv/lib/python3.13/site-packages/pandas/_libs/internals.pyi": 11662356720550765508, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_envs.py": 5657151394155576509, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/unistring.py": 18037463865539157041, + "venv/lib/python3.13/site-packages/pandas/_config/__init__.py": 3577026529387563519, + "docs/api/html/group__ReviewWorkspaceLeftSidebar.html": 17632781333650288823, + "docs/api/html/group____seed__candidate__with__passed__report.html": 16678234707349492648, + "docs/api/html/group__plugins__Data.html": 14082713869477656555, + "docs/api/html/group__test__get__task__logs__not__found.html": 3813624608832592211, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/licenses/LICENSE": 17675192170670564526, + "docs/api/html/group__auth__service.html": 15607649240314134855, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/types.py": 12298292195929126306, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_initialstub_already_started.py": 5562030563802006923, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pipe.py": 7400355977900310233, + "docs/api/html/group__SupersetCompilationAdapter__compile__preview.html": 14843229639835525197, + "docs/api/html/group____to__preference__payload.html": 10972305312357222563, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_numerictypes.py": 8836108334624807647, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_value_counts.py": 5534713464063604301, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_series_apply.py": 12349190935180702377, + "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/RECORD": 6518517239543344179, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/WHEEL": 8600534672961461758, + "docs/api/html/group__GitWorkspacePanel.html": 15537793348093112183, + "frontend/build/_app/immutable/chunks/BjGbKstH.js": 14925544056622079547, + "venv/lib/python3.13/site-packages/numpy/_core/overrides.py": 252940520997718714, + "backend/src/api/routes/translate/_preview_routes.py": 12316180738640292691, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_normalize.py": 3203921571999101793, + "docs/api/html/group__test__list__runs__with__data.html": 12537031394595357439, + "docs/api/html/group____get__or__init__publications__store.html": 8202901534868859807, + "docs/api/html/group__MarkerLogger__explore.html": 6168160399723675032, + "venv/lib/python3.13/site-packages/pydantic/v1/errors.py": 11245135449608452720, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_os.h": 7883047506449405400, + "docs/api/html/group__test__case__insensitive__matching.html": 9410338803903481371, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_arithmetic.py": 16045758521544316139, + "venv/lib/python3.13/site-packages/pandas/io/common.py": 12088195203620154171, + "docs/api/html/group__ValidationPolicyResponse.html": 1043672337453196849, + "venv/lib/python3.13/site-packages/pandas/tests/base/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/METADATA": 14543822270526146783, + "venv/lib/python3.13/site-packages/pygments/styles/perldoc.py": 4857683935715743356, + "frontend/src/lib/components/ui/DatasetSearchCombobox.svelte": 14283363077342392531, + "venv/lib/python3.13/site-packages/sqlalchemy/util/topological.py": 11586868018611359415, + "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/WHEEL": 7454950858448014158, + "backend/tests/scripts/test_clean_release_cli.py": 14028295526033195944, + "docs/api/html/group__test__api__correction__missing__dict.html": 16638106162967496087, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_nunique.py": 8450574751331186943, + "venv/lib/python3.13/site-packages/pyasn1/__init__.py": 8089201217593738032, + "venv/lib/python3.13/site-packages/certifi/__init__.py": 9045580998764948967, + "docs/api/html/group__SupersetClientGetDatasetDetail.html": 13570997899949707169, + "venv/lib/python3.13/site-packages/pyasn1/type/namedval.py": 8273171503516887681, + "docs/api/html/group____get__clarification__engine.html": 14952466145960727021, + "docs/api/html/group__MetricItem.html": 9045572594838566942, + "docs/api/html/group__test__cors__parsing__single__value.html": 5377998052395946901, + "venv/lib/python3.13/site-packages/rsa/py.typed": 11041940105507257053, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_masm.asm": 15349921092257597740, + "venv/lib/python3.13/site-packages/pip/_internal/index/__init__.py": 14829074315307489628, + "venv/lib/python3.13/site-packages/PIL/DdsImagePlugin.py": 10646832373516499548, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/dml.py": 17308908394336670576, + "frontend/build/_app/immutable/nodes/0.BIS2DzEe.js": 11017570122564463306, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_writers.py": 103545128256076790, + "backend/src/api/routes/__tests__/test_clean_release_source_policy.py": 15459112324357199814, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/__init__.py": 260774374497653876, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/dh.py": 5728866271812501558, + "docs/api/html/group__test__mutation__endpoints__surface__session__version__conflict__payload.html": 6432996424114233697, + "docs/api/html/group__add__dictionary__entry.html": 15530172718575929284, + "docs/api/html/group__read__users__me.html": 12849277501505045646, + "docs/api/html/group__TranslateRunRoutesModule.html": 10815514676447136360, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/nested_secrets.py": 15691917061715429369, + "venv/lib/python3.13/site-packages/passlib/tests/test_utils_handlers.py": 556092537518149789, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/__init__.py": 16123561007855424016, + "venv/lib/python3.13/site-packages/pygments/lexers/jvm.py": 897669925284011089, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/greenlet/TGreenlet.hpp": 6993553444981671786, + "docs/api/html/group____detect__delimiter.html": 10132233034331217270, + "venv/lib/python3.13/site-packages/pandas/core/sparse/__init__.py": 15130871412783076140, + "docs/api/html/group__SupersetChartsMixin.html": 10694368076693575185, + "backend/src/plugins/llm_analysis/__init__.py": 9254812131558249924, + "docs/api/html/group__test__remove__nonexistent__validation__job.html": 7059450961386170424, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arcsin.csv": 1665171675551692225, + "venv/lib/python3.13/site-packages/yaml/_yaml.cpython-313-x86_64-linux-gnu.so": 16990140871649227895, + "backend/alembic/script.py.mako": 7041141123739810216, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_npfuncs.py": 13987318550267921389, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_filters.py": 17271344092069736999, + "docs/api/html/group__getStatusColor__Function.html": 5211543247156991189, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pyasn1/codec/der/decoder.py": 11876648884087997745, + "docs/api/html/group__test__validate__path__read__only__parent.html": 984350365930917404, + "venv/lib/python3.13/site-packages/numpy/ctypeslib/_ctypeslib.py": 12636954896699095212, + "frontend/src/routes/dashboards/+page.svelte": 5522148689707175338, + "docs/api/html/group__TranslateSchedulerTests.html": 5785296020890210045, + "venv/lib/python3.13/site-packages/pygments/lexers/rust.py": 8605690716125176329, + "backend/src/services/clean_release/manifest_service.py": 7248530010607024664, + "frontend/src/lib/api/assistant.js": 12514226537527897950, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/reporter.py": 6510864297510700136, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_setops.py": 10550603120090683350, + "backend/src/services/clean_release/compliance_execution_service.py": 11572933296960110695, + "venv/lib/python3.13/site-packages/numpy/f2py/__version__.pyi": 9759534743796867731, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/client_credentials.py": 256154392957334831, + "venv/lib/python3.13/site-packages/pygments/lexers/solidity.py": 5071425960622305629, + "backend/src/plugins/translate/__tests__/test_clickhouse_insert_integration.py": 990102078989024575, + "docs/api/html/group__teardown__class.html": 7748593185053531837, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/__init__.py": 15130871412783076140, + "frontend/src/components/git/GitReleasePanel.svelte": 11177244258160406730, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arrayprint.py": 13335063050941743734, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/contains.py": 3098087827310439993, + "docs/api/html/index.html": 6265284219880825892, + "docs/api/html/group__CommitCreate.html": 3838920800459063824, + "venv/lib/python3.13/site-packages/sqlalchemy/util/preloaded.py": 3719702436309355562, + "docs/api/html/group__AuthConfigModule.html": 14846201783459708048, + "docs/api/html/group__get__batches.html": 597462312194719420, + "venv/lib/python3.13/site-packages/certifi/cacert.pem": 14727832973577663826, + "docs/api/html/group__profile__route__deps__fixture.html": 16691986014866091416, + "frontend/src/lib/api/datasetReview.js": 11780670121350173465, + "venv/lib/python3.13/site-packages/rsa/key.py": 4783269051050521475, + "docs/api/html/group__QuestionState.html": 7538640298895031118, + "docs/api/html/group__tasks__engine.html": 7169537698069676064, + "docs/api/html/group__ProfileApiModule.html": 1705516616452689774, + "docs/api/html/group__test__case__insensitive.html": 15150512929501431253, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_utils.py": 15197339054699289627, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/misc.py": 6571241778569465264, + "frontend/src/routes/settings/+page.svelte": 13008569925433466788, + "docs/api/html/group____extract__dataset__review__target.html": 3215287800092748207, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/types.py": 13384984564922916167, + "venv/lib/python3.13/site-packages/_cffi_backend.cpython-313-x86_64-linux-gnu.so": 829323374625147265, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/scoping.py": 17216492046645992674, + "backend/src/plugins/translate/orchestrator_sql.py": 15420456250044832567, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_constructors.py": 5627819885594450614, + "venv/lib/python3.13/site-packages/numpy/lib/_histograms_impl.pyi": 6534825471013879522, + "venv/lib/python3.13/site-packages/tzlocal/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/RECORD": 8201759541483070364, + "venv/lib/python3.13/site-packages/passlib/handlers/ldap_digests.py": 8658529184965699766, + "venv/lib/python3.13/site-packages/pydantic/_internal/_validators.py": 2939255306814626438, + "docs/api/html/group__SupersetUserProjectionMixin.html": 8962253689270385612, + "docs/api/html/group__getSuggestion__Function.html": 1195438535838483497, + "venv/lib/python3.13/site-packages/urllib3/exceptions.py": 9687187566231423953, + "docs/api/html/group__revoke__publication.html": 13242569991906257496, + "docs/api/html/group__test__revoke__already__revoked.html": 5813717002399486452, + "frontend/src/app.html": 10207534912546549080, + "venv/lib/python3.13/site-packages/pyasn1/compat/integer.py": 7365270971777550573, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_iloc.py": 16160558158155038350, + "docs/api/html/group__frontend__src__lib__stores__health__js____refresh.html": 8625269529469601783, + "docs/api/html/group__test__no__matching__dashboards.html": 4286276093696893337, + "venv/lib/python3.13/site-packages/greenlet/tests/test_gc.py": 6383305344377882524, + "venv/lib/python3.13/site-packages/_pytest/_io/__init__.py": 1510478951261938348, + "docs/api/html/group__list__events.html": 1944931140844300363, + "backend/src/models/__init__.py": 13280325675752905975, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/METADATA": 8985010079096958084, + "docs/api/html/group__frontend__src__services__storageService__js____deleteFile.html": 7628993621903207351, + "venv/lib/python3.13/site-packages/charset_normalizer/cli/__main__.py": 2148876100501691980, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_finfo.py": 17174674209412768422, + "docs/api/html/group____resolve__environment.html": 16547133577275735340, + "venv/lib/python3.13/site-packages/passlib/ifc.py": 14479133654556657428, + "venv/lib/python3.13/site-packages/smmap/buf.py": 18231775424238352734, + "docs/api/html/group__submit__correction.html": 14575546737554094961, + "docs/api/html/group__AsyncSupersetClient.html": 8532694979035205515, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/passlib/handlers/cisco.py": 15004707325761459775, + "frontend/public/vite.svg": 13568221685541582385, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/mapper.py": 16715864918034312591, + "venv/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py": 14034239842770171660, + "docs/api/html/group__test__git__default__repos__path__constant.html": 5012382907811240841, + "docs/api/html/group____discover__route__permissions__cached.html": 18354861251821323391, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/fixed_string.f90": 8654788371538544793, + "venv/lib/python3.13/site-packages/pandas/_libs/sas.cpython-313-x86_64-linux-gnu.so": 16309838137741124637, + "venv/lib/python3.13/site-packages/fastapi/_compat/main.py": 13016492818231995760, + "venv/bin/pyrsa-encrypt": 5858278204727417482, + "docs/api/html/group__CheckStageResult.html": 1868186322282636304, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_shift.py": 8547819448301023303, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/mypy.ini": 4763385838822685881, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_nlargest_nsmallest.py": 11049656379959696695, + "venv/lib/python3.13/site-packages/_pytest/timing.py": 14080119171718125986, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_almost_equal.py": 9333355453468475330, + "docs/api/html/group____serialize__empty__clarification__state.html": 4887954579013674680, + "venv/lib/python3.13/site-packages/numpy-2.4.2.dist-info/licenses/numpy/_core/src/highway/LICENSE": 15636145745140922094, + "docs/api/html/group__test__load__schedules__loads__validation__policies.html": 9504795440748068750, + "docs/api/html/group__LaunchDatasetCommand.html": 9231022036284145569, + "docs/api/html/group__MappingsPageTemplate.html": 11838633745376383178, + "docs/api/html/group__StartSessionCommand.html": 15495582448553758086, + "venv/lib/python3.13/site-packages/pygments/formatters/pangomarkup.py": 17135620955205945255, + "docs/api/html/group__EnvironmentContextStore.html": 3222220561881374991, + "frontend/src/routes/tools/backups/+page.svelte": 2765328366215862593, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_round.py": 8336918400205461173, + "venv/lib/python3.13/site-packages/git/refs/reference.py": 2038789918710608481, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/x963kdf.py": 14995426099932276090, + "venv/lib/python3.13/site-packages/pip/_internal/commands/completion.py": 4435231315212798769, + "venv/lib/python3.13/site-packages/pygments/lexers/blueprint.py": 6370363226580199085, + "backend/src/plugins/translate/preview_response_parser.py": 15690759478655959205, + "docs/api/html/group__run__compliance__report.html": 4432157291692948554, + "docs/api/html/group__AsyncAPIClient____handle__network__error.html": 14286771511204835103, + "docs/api/html/group____load__confirmation__from__db.html": 8275222931299853306, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/py.typed": 15130871412783076140, + "docs/api/html/group__MigrationEngineModule.html": 4559630898828635226, + "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pygments/lexers/gcodelexer.py": 13712494327007684318, + "venv/lib/python3.13/site-packages/pandas/core/tools/__init__.py": 15130871412783076140, + "docs/api/html/group__ConnectionContracts.html": 3059252696925019088, + "docs/api/html/search/all_a.js": 3849984850211567813, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_comparisons.py": 2764694394636775220, + "backend/src/services/clean_release/__tests__/test_manifest_builder.py": 4923613189073397440, + "venv/lib/python3.13/site-packages/pip/_internal/utils/wheel.py": 450504439085405418, + "docs/api/html/group__test__list__runs__filters.html": 15556674326842168757, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_insert.py": 11635164392966270621, + "backend/src/api/routes/admin_api_keys.py": 6647178786430565995, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_switch_three_greenlets.py": 10923534235697247269, + "venv/lib/python3.13/site-packages/httpcore/_async/http_proxy.py": 13364803556177997526, + "venv/lib/python3.13/site-packages/pygments/lexers/smv.py": 8253688483040957894, + "venv/lib/python3.13/site-packages/jeepney/io/tests/test_threading.py": 6656552495241857519, + "docs/api/html/group__SupersetAuthCache__set.html": 15942031270979749240, + "docs/api/html/group____limited__user.html": 7899041144502275903, + "venv/lib/python3.13/site-packages/secretstorage/dhcrypto.py": 8860116996905452758, + "docs/api/html/group__continue__merge.html": 1077939235555109294, + "frontend/src/lib/stores/__tests__/test_sidebar.js": 2607679830387722396, + "frontend/build/_app/immutable/nodes/13.D2EVQSML.js": 6256355574695772630, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_autocorr.py": 1092316868398391792, + "venv/lib/python3.13/site-packages/PIL/__init__.py": 10393984345353752724, + "venv/lib/python3.13/site-packages/pandas/core/internals/managers.py": 13547912653290063698, + "docs/api/html/group__policy__repository.html": 8836991613608383932, + "docs/api/html/group__toasts__module__Module.html": 5241674397829197436, + "venv/lib/python3.13/site-packages/h11/_headers.py": 7592730288271984585, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py": 9888795404090331319, + "venv/lib/python3.13/site-packages/_pytest/warning_types.py": 10695097290648045427, + "docs/api/html/group__DatasetsResponse.html": 4984654878449311988, + "venv/lib/python3.13/site-packages/referencing/_core.py": 14744795336121513230, + "docs/api/html/group__import__candidate__artifacts__v2__endpoint.html": 11794097000012858321, + "venv/lib/python3.13/site-packages/pyasn1/codec/der/__init__.py": 15728752901274520502, + "venv/lib/python3.13/site-packages/_pytest/__init__.py": 3769333500910148571, + "docs/api/html/group__imports.html": 8979637474882093794, + "venv/lib/python3.13/site-packages/gitdb/base.py": 7927279446353696534, + "venv/lib/python3.13/site-packages/numpy/lib/_scimath_impl.pyi": 8879196542984811747, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/shared.py": 1162754506656505196, + "frontend/src/services/storageService.js": 9489915460172592752, + "venv/lib/python3.13/site-packages/PIL/XbmImagePlugin.py": 12256750478268246137, + "docs/api/html/group__DatasetReviewApiTests.html": 17203814141092898592, + "backend/src/services/clean_release/__tests__/test_audit_service.py": 10901982516436251314, + "docs/api/html/group__ValidationTaskListResponse.html": 14158939387498447501, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_duplicate_labels.py": 10663105616336167414, + "docs/api/html/group__generate__insert__sql.html": 10581163190354294492, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/dependency.py": 7300594038182867460, + "venv/lib/python3.13/site-packages/pillow.libs/liblcms2-cc10e42f.so.2.0.17": 4221600618602131476, + "docs/api/html/group____serialize__semantic__field.html": 12631098605309415203, + "docs/api/html/group__FeaturesConfig.html": 10248250923166873006, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_timestamp.py": 12253372102602993034, + "docs/api/html/group__PLUGIN__TO__TASK__TYPE.html": 17348671743390700348, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_hist_box_by.py": 16197297231683144299, + "docs/api/html/group__run__init.html": 4726084133334129935, + "venv/lib/python3.13/site-packages/pygments/lexers/verifpal.py": 9190813166686923928, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/signature.py": 3614545297259098566, + "venv/lib/python3.13/site-packages/pip/_internal/index/collector.py": 7454652626329467900, + "docs/api/html/group__TestComplianceExecutionService.html": 5266217464530796767, + "docs/api/html/group__get__consolidated__settings.html": 18360600092435915493, + "docs/api/html/group__accept__preview__session.html": 5962878640752637722, + "venv/bin/normalizer": 10972303485259566838, + "frontend/src/lib/components/assistant/__tests__/assistant_chat.integration.test.js": 18193433457755419816, + "backend/src/plugins/translate/_run_service.py": 1705461175389858266, + "backend/src/services/dataset_review/__init__.py": 3695054675894579272, + "docs/api/html/group__test__task__matches__dashboard__logic.html": 12048228571630804289, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_groupby_shift_diff.py": 1210657479716368827, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/RECORD": 18294169019244826301, + "backend/src/plugins/translate/_utils.py": 7134223868160185578, + "venv/lib/python3.13/site-packages/PIL/_imagingmath.pyi": 18222325750818585549, + "docs/api/html/group__generate__docs.html": 13997260304920699682, + "docs/api/html/group__TranslateScheduleRoutesModule.html": 6135158019690701715, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/licenses/LICENSE.BSD": 16833702494864671773, + "venv/lib/python3.13/site-packages/pandas/core/window/ewm.py": 12143982379243011357, + "venv/lib/python3.13/site-packages/pandas/tests/extension/json/test_json.py": 12422315190455428620, + "docs/api/html/group__LogStats.html": 908679196460419136, + "docs/api/html/group__build__launch__blockers.html": 7838341297599392615, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/requirements.py": 13215932786801020434, + "venv/lib/python3.13/site-packages/pillow.libs/libavif-01e67780.so.16.3.0": 13947441788826399574, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/hist.py": 10928173425078493095, + "venv/lib/python3.13/site-packages/rapidfuzz-3.14.3.dist-info/WHEEL": 2823347510103459191, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler.pyi": 9003794318682878317, + "venv/lib/python3.13/site-packages/git/objects/tree.py": 10239027037919781330, + "docs/api/html/group__test__tui__non__tty__refuses__startup.html": 11290435043577300064, + "venv/bin/pyrsa-verify": 6762739642629904442, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi": 9405122752084210696, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timestamps.pyi": 51728851886466199, + "venv/lib/python3.13/site-packages/pandas/_libs/hashing.cpython-313-x86_64-linux-gnu.so": 16124435225170610034, + "venv/lib/python3.13/site-packages/multipart/multipart.py": 26386459953377432, + "docs/api/html/group____serialize__session__detail.html": 616460683247422819, + "docs/api/html/group____load__from__legacy__file.html": 14273299865611176783, + "venv/lib/python3.13/site-packages/pydantic/deprecated/copy_internals.py": 1245428320513062166, + "backend/src/plugins/translate/service_inline_correction.py": 11066393548140180037, + "docs/api/html/group__test__build__dataset__preview__query__context__places__recovered__filters__in__chart__style__form__data.html": 18337321725983567020, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_interpolate.py": 6154072863387383113, + "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/METADATA": 4975169119201255384, + "venv/lib/python3.13/site-packages/pip/_internal/commands/install.py": 17631777189475433503, + "venv/lib/python3.13/site-packages/bcrypt/py.typed": 15130871412783076140, + "docs/api/html/group__test__start__idempotency.html": 11136159718052819459, + "docs/api/html/group__clean__release__facade.html": 6575150253388246217, + "backend/src/models/report.py": 12105030884508258995, + "docs/api/html/group__RootLayout.html": 12934665320478366323, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_array_utils.py": 14682148205379122638, + "docs/api/html/group__test__list__tasks__pagination.html": 5445789220112902473, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/hi77.f": 10617763407280454334, + "docs/api/html/group__SessionCollectionResponse.html": 6802234872096434048, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_pct_change.py": 18056235438452125034, + "docs/api/html/group__ApiRoutesModule.html": 7565963372446460595, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_setops.py": 16240008859650640717, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_align.py": 6050248183327934780, + "venv/lib/python3.13/site-packages/PIL/ImageStat.py": 18442709639217312689, + "docs/api/html/group__DatasetReviewSessionTests.html": 5186852478551374970, + "venv/lib/python3.13/site-packages/pandas/core/indexes/interval.py": 17965911911189276907, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/ext.py": 8361831054662096695, + "venv/lib/python3.13/site-packages/_pytest/hookspec.py": 387790426108810884, + "venv/bin/fastapi": 12400009726251862770, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/loading.py": 3460142472461437916, + "venv/lib/python3.13/site-packages/annotated_types/__init__.py": 7367790549779882749, + "venv/lib/python3.13/site-packages/numpy/version.pyi": 5075382895829889457, + "docs/api/html/group__frontend__src__lib__utils__debounce__js____debounce.html": 6554406133377600091, + "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/RECORD": 6488682447051657004, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_pickle.py": 6232650893735715362, + "venv/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.pyi": 12566839271245057531, + "docs/api/html/search/functions_12.js": 2064688989625290905, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/exceptions.py": 7518613450390473990, + "docs/api/html/group____FakeSessionDel.html": 7361382465314395458, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_clip.py": 13498704233745189154, + "frontend/src/routes/datasets/MetricsTable.svelte": 4644516916752609053, + "venv/lib/python3.13/site-packages/gitdb/pack.py": 7828244200815444166, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____setError.html": 16852758973526195279, + "venv/lib/python3.13/site-packages/keyring/testing/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/websockets/legacy/handshake.py": 376095144657994920, + "frontend/src/lib/components/dataset-review/__tests__/us2_semantic_workspace.ux.test.js": 7475597145566385341, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_astype.py": 16700461036658228009, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_common.py": 9446944526144164255, + "docs/api/html/group____load__dataset__review__context.html": 2812784457432782300, + "venv/lib/python3.13/site-packages/fastapi/_compat/v2.py": 15078491685917047095, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_raises.py": 9678418010293693275, + "venv/lib/python3.13/site-packages/cffi/parse_c_type.h": 9889309594462820068, + "docs/api/html/group__DatasetReviewSessionVersionConflictError.html": 6831719684562983772, + "venv/lib/python3.13/site-packages/numpy/lib/_arraysetops_impl.pyi": 3111521453255595221, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_array.py": 12514884344165043136, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/__init__.py": 15130871412783076140, + "docs/api/html/group__test__submit__correction__creates__entry.html": 16912801094355529454, + "venv/lib/python3.13/site-packages/anyio/streams/text.py": 12507591237176920223, + "venv/lib/python3.13/site-packages/pygments/lexers/_vim_builtins.py": 6842381248727719900, + "backend/tests/conftest.py": 1710415643410199769, + "docs/api/html/group__setAssistantSeedMessage__Function.html": 13104263220941185944, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/background.py": 2105814165112049750, + "venv/lib/python3.13/site-packages/numpy/tests/test_warnings.py": 3154249157134620649, + "docs/api/html/group__delete__schedule.html": 109693276017801304, + "venv/lib/python3.13/site-packages/pygments/styles/stata_light.py": 16319330015324455277, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/LICENSE": 8177430849046795595, + "venv/lib/python3.13/site-packages/git/refs/head.py": 16271128287606894569, + "docs/api/html/group__list__dashboard__banners.html": 14482370673488154596, + "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/__init__.py": 18019562641348687547, + "docs/api/html/group__TranslateModels.html": 12305275874224350979, + "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/WHEEL": 7454950858448014158, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/var_.py": 12699521091170347311, + "dist/docker/frontend.0.1.1.tar.xz": 14558310887004056908, + "venv/lib/python3.13/site-packages/httpx/_transports/default.py": 8391302827983907910, + "venv/lib/python3.13/site-packages/numpy/_core/_umath_tests.pyi": 4587511199710546030, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__test__assistant__message__request__accepts__dataset__review__session__binding.html": 17773310738913307655, + "docs/api/html/group__build__execution__snapshot.html": 11905153660120769510, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_eng_formatting.py": 14768815444701392013, + "venv/lib/python3.13/site-packages/_pytest/_io/terminalwriter.py": 16852767249156780980, + "docs/api/html/group____wait__for__terminal__task.html": 10847232788702296305, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/util.py": 4890614159013873000, + "docs/api/html/group__handleCheckout__Function.html": 13677007543937370261, + "docs/api/html/group__DebugPlugin.html": 16864972402244728207, + "venv/lib/python3.13/site-packages/annotated_types/test_cases.py": 5123395674810472016, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_grouping.py": 5994909693214299971, + "venv/lib/python3.13/site-packages/urllib3-2.6.2.dist-info/RECORD": 15194367076254806710, + "docs/api/html/group__DashboardHeader.html": 15889628844920899233, + "docs/api/html/group__test__persist__tasks__batch.html": 10046649763450222486, + "docs/api/html/group____compute__source__hash.html": 7685714365612338715, + "docs/api/html/group__save__run__context.html": 10013203780160130788, + "venv/lib/python3.13/site-packages/jeepney/tests/test_bus_messages.py": 4323093138307306385, + "venv/lib/python3.13/site-packages/passlib/hash.py": 5238710192614935875, + "docs/api/html/group__frontend__src__services__adminService__js____getADGroupMappings.html": 9312026240413982380, + "docker/backend.entrypoint.sh": 1034669340368151691, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/live_render.py": 14619617939683800204, + "venv/lib/python3.13/site-packages/pyasn1/debug.py": 6305633719847955310, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_xs.py": 1897144171324167738, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_readlines.py": 15928258358116399067, + "frontend/src/lib/api.js": 13896344878456869253, + "docs/api/html/group__MigrationApi.html": 16067246055200738118, + "docs/api/html/search/all_18.js": 11356236066410231589, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_block_internals.py": 17935662848672401507, + "venv/lib/python3.13/site-packages/pygments/lexers/ruby.py": 6898093948224302592, + "docs/api/html/group__AssistantApiTests.html": 15253113969203355593, + "venv/lib/python3.13/site-packages/passlib/hosts.py": 11171402820797380938, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/result.py": 8306497889916212025, + "docs/api/html/group__test__props__definition.html": 1900076617459161710, + "backend/src/plugins/translate/dictionary_entries.py": 11394786590056973146, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/METADATA": 7788873460115135563, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/persistence.py": 17908437937265384125, + "docs/api/html/group__delete__dictionary.html": 8818744411907449226, + "docs/api/html/group__SupersetClientGetDatabasesSummary.html": 15095847088724585809, + "venv/lib/python3.13/site-packages/pygments/styles/vs.py": 4188729978573652106, + "backend/src/api/routes/__init__.py": 4671856475376690434, + "backend/logs/app.log.1": 1282701464293071456, + "docs/api/html/jquery.js": 16180958684071666265, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/hmac.py": 18132740541139891824, + "venv/lib/python3.13/site-packages/jeepney/io/asyncio.py": 13239992245695516007, + "frontend/src/routes/git/+page.svelte": 3351712750068549963, + "docs/api/html/group____persist__message.html": 7636295246273294885, + "venv/lib/python3.13/site-packages/fastapi/__init__.py": 11054203163075417954, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein_py.py": 11350239659973489646, + "docs/api/html/group__test__table__based__match.html": 4423679603659278105, + "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/METADATA": 7214286447912789067, + "docs/api/html/group__test__persist__task__with__logs.html": 3561488143169471878, + "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/scipy_sparse.py": 2091608752719976909, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_windows.py": 13341168721223961872, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/conftest.py": 12368472226536104037, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64-testset-1.csv": 5708101386018266998, + "venv/lib/python3.13/site-packages/PIL/FliImagePlugin.py": 13364963053197422923, + "docs/api/html/group__test__approve__rejects__blocked__report.html": 4677486143136601773, + "docs/api/html/group__HAS__PERMISSION__PATTERN.html": 3740860741409953841, + "docs/api/html/globals_m.html": 5857181081783132873, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/six.py": 1161259802604920635, + "docs/api/html/group__get__tasks__db.html": 282055494774309931, + "docs/api/html/group__FindingArea.html": 416719964302786471, + "venv/lib/python3.13/site-packages/anyio/_core/_resources.py": 8463932838064724564, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_join.py": 1364886077926604427, + "venv/lib/python3.13/site-packages/tzlocal/windows_tz.py": 11696765495002954868, + "venv/lib/python3.13/site-packages/pandas/core/arrays/timedeltas.py": 7318851108932357510, + "docs/api/html/group__deleteRole__Function.html": 10988783686438944545, + "venv/lib/python3.13/site-packages/gitdb/utils/__init__.py": 15130871412783076140, + "docs/api/html/group__GitServiceBase.html": 3176284003306222212, + "backend/src/services/maintenance/__init__.py": 3167476255502727608, + "venv/lib/python3.13/site-packages/pygments/lexers/zig.py": 470431199354307668, + "docs/api/html/group____build__object__diff.html": 13370696190761975058, + "docs/api/html/group__test__reports__detail__openapi__required__keys.html": 16165604713274880229, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/licenses/LICENSE": 1641332741515411734, + "venv/lib/python3.13/site-packages/numpy/random/_examples/cffi/parse.py": 2427019397934437210, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____stopPolling.html": 7926062796723513466, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_formats.py": 17821648708413143557, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_unary.py": 7128845965976836334, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_interp_fillna.py": 5530041283991655415, + "venv/lib/python3.13/site-packages/h11/_readers.py": 832030916375670301, + "docs/api/html/group__ProfileType.html": 7571730309739466085, + "venv/lib/python3.13/site-packages/passlib/handlers/argon2.py": 835074952952017434, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_repr.py": 5577699046802107144, + "venv/lib/python3.13/site-packages/pycparser/c_parser.py": 3954138286651284327, + "venv/lib/python3.13/site-packages/pygments/styles/tango.py": 12389250878249075539, + "venv/lib/python3.13/site-packages/pygments/lexers/_csound_builtins.py": 14530739818491398298, + "docs/api/html/group__AsyncAPIClient____build__api__url.html": 2646689845586170671, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/__init__.py": 5895297076117159245, + "venv/lib/python3.13/site-packages/numpy/core/umath.py": 4476812261188108155, + "docs/api/html/group____get__environment__name__by__id.html": 16940554573354196856, + "docs/api/html/globals_func_d.html": 802653481815391766, + "venv/lib/python3.13/site-packages/_pytest/_py/path.py": 8464061867075119556, + "venv/lib/python3.13/site-packages/pandas/tests/test_nanops.py": 8709105600366913011, + "docs/api/html/group__test__get__remote__id__returns__none__for__missing.html": 14781894002344872627, + "venv/lib/python3.13/site-packages/numpy/_core/strings.py": 3623885046208831106, + "docs/api/html/group__router.html": 4047834241221489998, + "venv/lib/python3.13/site-packages/smmap/util.py": 13276170835044840023, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_errstate.py": 10788459171326750780, + "venv/lib/python3.13/site-packages/numpy/fft/__init__.py": 9343449448737026658, + "docs/api/html/group__test__metrics__empty__job.html": 2409072479669749995, + "docs/api/html/group____resolve__dashboard__id__from__ref__async.html": 5782530713734199781, + "venv/lib/python3.13/site-packages/python_dateutil-2.9.0.post0.dist-info/WHEEL": 5990830714395966792, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ufuncs.pyi": 1808147181379894521, + "docs/api/html/group__get__file__by__path.html": 8633346116618658558, + "docs/api/html/globals_c.html": 11969223700440566246, + "venv/lib/python3.13/site-packages/idna/__init__.py": 6489437464172324468, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/__init__.py": 14571251344510763303, + "docs/api/html/minusd.svg": 1684399045313528301, + "venv/lib/python3.13/site-packages/pandas/tests/window/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_arithmetic.py": 4858019700859362660, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_logical_ops.py": 4438104524064299182, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_index.py": 12015738970771703312, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_comparison.py": 4611207880323503098, + "docs/api/html/group__SemanticSourceStatus.html": 14169028665990248848, + "venv/lib/python3.13/site-packages/numpy/testing/overrides.py": 11819432487830192978, + "docs/api/html/group__test__get__dashboards__page__context__other__disables__profile__default.html": 1375161324945488509, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_index.py": 4908727359687606870, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x86_msvc.h": 2465089365642299646, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/sfc64_np126.pkl.gz": 1630203486813146863, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_console.py": 11657469008721907972, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_append.py": 9644955836191900614, + "docs/api/html/group__SessionStatus.html": 3808958363584408274, + "venv/lib/python3.13/site-packages/ecdsa/ellipticcurve.py": 15624510849346629163, + "venv/lib/python3.13/site-packages/numpy/f2py/crackfortran.pyi": 9206355685192026844, + "docs/api/html/group__StatsBar.html": 10845858962596045632, + "docs/api/html/group__test__validation__policy__create__rejects__legacy__string__custom__channels.html": 14661357931736830458, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_encs.py": 9703572751543253904, + "docs/api/html/group__test__tui__initial__render.html": 3293664978123216509, + "docs/api/html/group__test__get__report__success.html": 13133681146386093411, + "frontend/build/_app/immutable/chunks/DuB9BfAK.js": 5895744160798083799, + "venv/lib/python3.13/site-packages/numpy/f2py/__init__.py": 7470157159992827389, + "docs/api/html/group__loadConfigs__Function.html": 6456332498353022877, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_repeat.py": 11360772447747837958, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__test__transform__yaml__replaces__database__uuid.html": 906181308081154952, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_loongarch64_linux.h": 6566098590441297326, + "venv/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py": 1246582552828542841, + "docs/api/html/group__GitService.html": 5644147165416014917, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_concat.py": 4472503149811617440, + "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_py.py": 6428078990080243608, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/functions.py": 16567226076808693246, + "venv/lib/python3.13/site-packages/pygments/lexers/hexdump.py": 10665271113239513484, + "venv/lib/python3.13/site-packages/greenlet/tests/test_version.py": 6317733744899804292, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_series.py": 10922287546912569276, + "docs/api/html/group__ReportsApi.html": 8927820650969319266, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_formats.py": 5259100336852479395, + "venv/lib/python3.13/site-packages/yaml/serializer.py": 1783761365703703558, + "backend/src/api/routes/clean_release_v2.py": 7430240321470425220, + "venv/lib/python3.13/site-packages/starlette/formparsers.py": 9019779181100355515, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/REQUESTED": 15130871412783076140, + "backend/src/models/dataset_review.py": 18282368342351080120, + "venv/lib/python3.13/site-packages/pandas/tests/internals/test_api.py": 11217428888457119601, + "frontend/src/components/PasswordPrompt.svelte": 2098675312823151283, + "venv/lib/python3.13/site-packages/numpy/_utils/__init__.py": 7731065084036767848, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_indexerrors.py": 4434868847540549873, + "venv/lib/python3.13/site-packages/numpy/_core/printoptions.py": 3897105663572772838, + "docs/api/html/group__create__task.html": 5627761289813856584, + "venv/lib/python3.13/site-packages/httpcore/_backends/trio.py": 8394426709857317737, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/core": 10616484054735611337, + "docs/api/html/group__migrate__dashboards.html": 825298586869034371, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_set_axis.py": 4097534573847151853, + "docs/api/html/group__test__update__schedule.html": 10218439875766465243, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/__init__.py": 3969805865048730851, + "venv/lib/python3.13/site-packages/packaging/specifiers.py": 2800449842990194437, + "docs/api/html/group__TranslationPreview.html": 2562373106089262703, + "venv/lib/python3.13/site-packages/greenlet/platform/__init__.py": 15130871412783076140, + "docs/api/html/group__build__idempotency__key.html": 210393855646189124, + "docs/api/html/group__User.html": 7890454832671400915, + "venv/lib/python3.13/site-packages/requests/hooks.py": 9888227370911151341, + "venv/lib/python3.13/site-packages/apscheduler/events.py": 10748346950729364899, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_freq_attr.py": 17290447066681837965, + "docs/api/html/group__test__cot__json__formatter__output.html": 8496099755020894677, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_hermite.py": 3628609433179387988, + "docs/api/html/group__test__filter__state__model.html": 17888526114492502641, + "venv/lib/python3.13/site-packages/fastapi/exceptions.py": 12665775976182239091, + "venv/lib/python3.13/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py": 63497920264089252, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_freq_attr.py": 1720704043778272895, + "venv/lib/python3.13/site-packages/ecdsa/ecdsa.py": 9770689913380927623, + "docs/api/html/group__AsyncAPIClient____get__auth__lock.html": 17454231653564423743, + "docs/api/html/group__replacer.html": 8138915867492512587, + "docs/api/html/group__ComplianceStage.html": 17814341327770468741, + "docs/api/html/group__GitRouter.html": 4366531192868731265, + "docs/api/html/group__RunDetailResponse.html": 6291679337051583792, + "venv/lib/python3.13/site-packages/starlette/types.py": 6372850128669191435, + "venv/lib/python3.13/site-packages/greenlet/greenlet_cpython_compat.hpp": 8396413256279803400, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_setitem.py": 10389770446834773837, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_unsupported.py": 9115440166074553860, + "venv/lib/python3.13/site-packages/pycparser/ply/__init__.py": 5040371336745852622, + "venv/lib/python3.13/site-packages/pygments/lexers/actionscript.py": 8829560731160428621, + "docs/api/html/group__test__recover__imported__filters__preserves__unmatched__raw__native__filter__ids.html": 1109218303971466328, + "venv/lib/python3.13/site-packages/pygments/lexers/arrow.py": 6699009974224818979, + "venv/lib/python3.13/site-packages/packaging/licenses/_spdx.py": 16440031845441362300, + "venv/lib/python3.13/site-packages/packaging/__init__.py": 5479277484104486860, + "frontend/playwright-report/data/040cf2c6ccc49a09121675d4b65dd4533d488fe1.webm": 10645096005049255831, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/limited_api_latest.c": 5472633890472031814, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/subrout.pyf": 4660465266594480405, + "docs/api/html/group__frontend__src__services__git__utils__js____normalizeEnvStage.html": 13961356311527011805, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_mixins.py": 12351373879926460719, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_multiindex.py": 13723677252432338937, + "frontend/build/_app/immutable/nodes/18.C7dEsSDZ.js": 17145928165446665640, + "venv/lib/python3.13/site-packages/pygments/lexers/c_like.py": 13004061780700827047, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/emath.pyi": 3718540478840842664, + "docs/api/html/group__TestStorageConfigDefaults.html": 2706421657000125549, + "venv/lib/python3.13/site-packages/pandas/core/ops/docstrings.py": 3721650738518391256, + "venv/lib/python3.13/site-packages/pandas/core/util/__init__.py": 15130871412783076140, + "frontend/src/routes/datasets/review/+page.svelte": 8512810578824138490, + "docs/api/html/group____format__permission__key.html": 15264515637376777742, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64dxsm-testset-1.csv": 9129730764673472086, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/__init__.py": 13331622784664204066, + "docs/api/html/group__frontend__src__services__git__utils__js____resolvePushProviderLabel.html": 7839804684458326617, + "venv/lib/python3.13/site-packages/pandas/api/__init__.py": 1145864207387918302, + "backend/src/core/logger.py": 11870126816969695787, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/key_set.py": 8485970749081951741, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_first_valid_index.py": 15763400665851423183, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/licenses/AUTHORS": 17022185907188244883, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_pop.py": 5700439923973346681, + "venv/lib/python3.13/site-packages/pygments/lexers/sophia.py": 15971500155124949058, + "frontend/src/lib/stores/assistantChat.js": 16716458796178537885, + "venv/lib/python3.13/site-packages/pandas/_libs/sparse.pyi": 12526865400413362140, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/scalars.pyi": 3130685119595923378, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_numba.py": 18148155441554555618, + "docs/api/html/group__ReportModels.html": 12439114738308381242, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/shape.pyi": 17197248408326188931, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/common.py": 16314033415206173235, + "docs/api/html/group__SessionEventPayload.html": 17617366798998251944, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_meson.py": 5735043585893007971, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_insert.py": 15536994417338770457, + "venv/lib/python3.13/site-packages/websockets/connection.py": 5168795926684067030, + "venv/lib/python3.13/site-packages/pip/_internal/utils/direct_url_helpers.py": 6075890513530296650, + "venv/lib/python3.13/site-packages/pygments/styles/gruvbox.py": 9489017112545247388, + "docs/api/html/group__estimate__row__tokens.html": 6396881984546758852, + "frontend/src/lib/stores/__tests__/assistantChat.test.js": 11108218971449015168, + "frontend/src/lib/Counter.svelte": 3616557554460116236, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/modules.pyi": 131293606732000587, + "venv/lib/python3.13/site-packages/numpy/f2py/cfuncs.pyi": 8232620851756907417, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_sorting.py": 10523740688498427929, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_api.py": 10514120091521589282, + "venv/lib/python3.13/site-packages/pygments/lexers/tal.py": 447505725492547461, + "venv/lib/python3.13/site-packages/PIL/_imagingft.pyi": 1385456134120145584, + "docs/api/html/group__loadLoggingConfig__Function.html": 747812477749540392, + "venv/lib/python3.13/site-packages/pygments/lexers/openscad.py": 13045825115225232396, + "backend/src/plugins/translate/__tests__/test_sql_generator.py": 7990788832878981127, + "venv/lib/python3.13/site-packages/starlette/middleware/base.py": 16850428285382256618, + "docs/api/html/group__TaskLogger.html": 15092573139764984795, + "docs/api/html/group__test__orchestrator__start__session__preserves__partial__recovery.html": 7578527106229875658, + "docs/api/html/group__test__remove__validation__job.html": 9367627137821838796, + "venv/lib/python3.13/site-packages/pandas/core/flags.py": 4690844374637430013, + "docs/api/html/group____run__to__response.html": 4944388567764979533, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_truncate.py": 9623613657871046837, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/timedeltas.pyi": 3783371827926657291, + "docs/api/html/group__test__calculate__schedule__zero__window.html": 14555909111709212057, + "venv/lib/python3.13/site-packages/websockets/auth.py": 499195617702591757, + "docs/api/html/nav_f.png": 2704451415722649096, + "venv/lib/python3.13/site-packages/anyio/abc/_streams.py": 8089057973257658396, + "docs/api/html/group__ProviderConfig.html": 14874415699044736742, + "backend/src/plugins/translate/_batch_sizer.py": 13074277127276828485, + "venv/lib/python3.13/site-packages/attr/converters.py": 5179615793507170642, + "venv/lib/python3.13/site-packages/pandas/core/methods/to_dict.py": 4653628436393663485, + "docs/api/html/group__oauth2__scheme.html": 13377767828964490913, + "venv/lib/python3.13/site-packages/pydantic/deprecated/json.py": 17692639396786690144, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_equivalence.py": 17843623343419137458, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_internals.py": 10472508540875131797, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_unicode_ddl.py": 2569618488804767890, + "venv/lib/python3.13/site-packages/pygments/lexers/resource.py": 8057351545636349791, + "venv/lib/python3.13/site-packages/PIL/_imagingmorph.cpython-313-x86_64-linux-gnu.so": 11171810899664471137, + "venv/lib/python3.13/site-packages/pandas/_libs/missing.cpython-313-x86_64-linux-gnu.so": 1990755879067132155, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_randomstate_regression.py": 17425202198134409689, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/WHEEL": 9131187629260560775, + "docs/api/html/search/all_15.js": 13325339458310079443, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/validation": 5398883285871046811, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/errors.py": 14634768861119075506, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-tan.csv": 6233924374281534211, + "docs/api/html/group__TaskContext.html": 16944274604472450502, + "backend/src/app.py": 5498748389520927188, + "docs/api/html/group__DashboardProfileOverrideIntegrationTest__Module.html": 4086296085552401797, + "venv/lib/python3.13/site-packages/pyasn1/type/useful.py": 10313387611927801339, + "docs/api/html/group__SettingsPageUxTest__Module.html": 2448306819139198817, + "venv/lib/python3.13/site-packages/numpy/matrixlib/tests/test_matrix_linalg.py": 2858987911347541177, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_box_unbox.py": 7579587620530953711, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_combine_concat.py": 3201068805128232483, + "frontend/src/lib/components/reports/__tests__/report_detail.integration.test.js": 13812015120538720344, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____normalizeTab.html": 15048396624822097099, + "docs/api/html/group__SupersetClientDoImport.html": 8043177973453792978, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.BSD": 3858254215169937333, + "venv/lib/python3.13/site-packages/sqlalchemy/util/_collections.py": 7772437080414835462, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/vectorized.pyi": 15498895254516573071, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/assertions.py": 5556667947376168765, + "venv/lib/python3.13/site-packages/passlib/utils/__init__.py": 11704122205941631503, + "venv/lib/python3.13/site-packages/pandas/core/reshape/tile.py": 17137524194129840833, + "docs/api/html/group__TestDryRunOrchestrator.html": 11981206571409362239, + "venv/lib/python3.13/site-packages/_pytest/setuponly.py": 10959102379908419762, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_value_counts.py": 15633881149834196174, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____getProviderById.html": 6376806405547386425, + "docs/api/html/group__WsLogHandlerModule.html": 1965949101963733420, + "docs/api/html/graph_legend.html": 11133044628946024695, + "docs/api/html/group__CommitSchema.html": 8902723025854017338, + "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.pyi": 14150710436003340771, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_combine_first.py": 3100691245280812910, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_object_arr.py": 4725156416161661681, + "docs/api/html/search/all_9.js": 16141436105417826748, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/default.py": 7906029092844029127, + "docs/api/html/group__CoreContracts.html": 17692523189416853827, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_converters.py": 8869440774594127419, + "venv/lib/python3.13/site-packages/numpy/ma/mrecords.py": 687170905107114309, + "docs/api/html/group__test__remove__nonexistent__translation__job__no__error.html": 5929457228764208486, + "docs/api/html/group__test__persist__task__with__datetime__in__params.html": 11036090690820046897, + "venv/lib/python3.13/site-packages/packaging/_musllinux.py": 2568338440457080365, + "frontend/src/lib/components/reports/__tests__/report_type_profiles.test.js": 8052627851850386760, + "venv/lib/python3.13/site-packages/itsdangerous/__init__.py": 6969210114978365656, + "venv/lib/python3.13/site-packages/httpx/_utils.py": 4836536051177895209, + "frontend/src/routes/dashboards/health/+page.svelte": 11635018493969113169, + "backend/src/core/auth/api_key.py": 15898549010462339946, + "venv/lib/python3.13/site-packages/multipart/__init__.py": 6496114190873890851, + "venv/lib/python3.13/site-packages/pygments/lexers/cplint.py": 13990118342267278047, + "venv/lib/python3.13/site-packages/pandas/_testing/asserters.py": 272063856832951430, + "docs/api/html/group__UiState__Store.html": 9990000106969800534, + "docs/api/html/group__test__unknown__command__returns__needs__clarification.html": 12607016898030176212, + "backend/src/api/routes/git/_router.py": 14821560101452369211, + "venv/lib/python3.13/site-packages/_pytest/mark/expression.py": 1821437025841201912, + "venv/lib/python3.13/site-packages/pip/_internal/distributions/wheel.py": 13979536782410081712, + "docs/api/html/group__frontend__src__services__taskService__js____getTask.html": 17745233273406842327, + "venv/lib/python3.13/site-packages/pydantic/v1/_hypothesis_plugin.py": 6383299780629629080, + "docs/api/html/group__AssistantMessageResponse.html": 16366901716381602745, + "venv/lib/python3.13/site-packages/pandas/compat/pickle_compat.py": 11073483984394766474, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/WHEEL": 8600534672961461758, + "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/websockets_impl.py": 15673691977157706075, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/casting.py": 12226803454582253097, + "venv/lib/python3.13/site-packages/pygments/lexers/promql.py": 8929925488296216854, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/METADATA": 11557342107649194148, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_json_table_schema.py": 14454690938977069049, + "venv/lib/python3.13/site-packages/authlib/oidc/registration/claims.py": 4161520263207458028, + "docs/api/html/group__handleResumeMigration__Function.html": 578618105352867634, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_iterator.py": 13869355993837330406, + "venv/lib/python3.13/site-packages/pygments/lexers/floscript.py": 944042220740663491, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/fields.cpython-313-x86_64-linux-gnu.so": 16927263232848238698, + "frontend/build/_app/immutable/chunks/C8K-NfB8.js": 522730246953022577, + "venv/lib/python3.13/site-packages/pygments/lexers/crystal.py": 3579547906957125755, + "venv/lib/python3.13/site-packages/pandas/_libs/tslib.cpython-313-x86_64-linux-gnu.so": 10742615805788605480, + "venv/lib/python3.13/site-packages/pydantic/_internal/_validate_call.py": 4078236486720616395, + "venv/lib/python3.13/site-packages/pandas/tests/test_algos.py": 11860014896449369497, + "docs/api/html/group__test__api__key__auth__invalid.html": 11539496437643571562, + "docs/api/html/group__update__consolidated__settings.html": 10739551165144622798, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_style.py": 6849613206971398029, + "venv/lib/python3.13/site-packages/pandas/core/internals/api.py": 14632030170441237968, + "docs/api/html/group__DatasetReviewRoutes.html": 6463487666472915050, + "docs/api/html/group__TaskDrawerTests.html": 15575873839723255766, + "docs/api/html/group__SupersetClientGetDatabases.html": 14956619577295357507, + "backend/src/services/clean_release/audit_service.py": 13892224612412540989, + "venv/lib/python3.13/site-packages/attr/_cmp.py": 3297594878548179300, + "venv/lib/python3.13/site-packages/passlib/utils/des.py": 2650106381178222229, + "backend/src/api/routes/dashboards/__init__.py": 14480706693953038818, + "venv/lib/python3.13/site-packages/annotated_doc-0.0.4.dist-info/licenses/LICENSE": 14610443802372107702, + "docs/api/html/menudata.js": 1163638699645288191, + "venv/lib/python3.13/site-packages/passlib-1.7.4.dist-info/RECORD": 3617343778671172258, + "venv/lib/python3.13/site-packages/numpy/lib/_datasource.pyi": 5894423389796456573, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/datetimelike_accumulations.py": 14719894187829729175, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_skew.py": 5276102682005383261, + "venv/lib/python3.13/site-packages/pygments/lexers/rita.py": 8105458520706587972, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_common.py": 10797243274520625867, + "docs/api/html/group__test__get__dashboards__search.html": 3310167705185192506, + "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/WHEEL": 2357997949040430835, + "docs/api/html/group__test__add__logs__single.html": 2862947647775846235, + "docs/api/html/globals_s.html": 14802100612037968134, + "venv/lib/python3.13/site-packages/numpy/testing/__init__.py": 2831275254313750978, + "venv/lib/python3.13/site-packages/pygments/formatters/svg.py": 11686316844190214147, + "backend/git_repos/remote/test-repo.git/objects/cf/d2dcbd55735b8cedf21e04e64ac627c6f9a458": 10982669277486885525, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/__init__.py": 14571251344510763303, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_freq_attr.py": 7685756734926749093, + "docs/api/html/group__test__get__task__success.html": 10530613508507125281, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/__init__.py": 2397613800206300456, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/asyncpg.py": 6152202474302791232, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_asof.py": 17616601748321325187, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_reduction.py": 2671872764983553906, + "venv/lib/python3.13/site-packages/pandas/api/internals.py": 5188134630996087511, + "venv/lib/python3.13/site-packages/pandas/_libs/hashtable.pyi": 15034917167424979097, + "venv/lib/python3.13/site-packages/pygments/lexers/dotnet.py": 17970884907837213099, + "venv/lib/python3.13/site-packages/pandas/tests/extension/conftest.py": 16886862391161243448, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/logging.py": 2426447364230673649, + "venv/lib/python3.13/site-packages/pandas/core/arrays/base.py": 664515424699746697, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/metadata_editable.py": 12494407279914732338, + "docs/api/html/group__frontend__src__lib__stores__sidebar__js____closeMobile.html": 6283987850786715384, + "venv/lib/python3.13/site-packages/numpy/_pyinstaller/tests/pyinstaller-smoke.py": 13570990531070630950, + "backend/src/services/dataset_review/clarification_pkg/_helpers.py": 16131390986170241319, + "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_sorting.py": 8944017570338511677, + "docs/api/html/group__test__get__payload__preserves__legacy__sections.html": 10719382727830491309, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatter.py": 16499277113779414101, + "docs/api/html/group__list__tasks.html": 2630490387896738201, + "docs/api/html/group__SupersetClientGetDatasetsSummary.html": 13566132585635326488, + "docs/api/html/group____ensure__auth__users__columns.html": 3871758539262511602, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/blocking.py": 3483388533957772681, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_cpu_features.py": 955759654189150497, + "backend/src/core/task_manager/event_bus.py": 1436794780600195410, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_formats.py": 9738552308554950419, + "venv/lib/python3.13/site-packages/uvicorn/loops/uvloop.py": 5385425357504191161, + "docs/api/html/group__removeToast__Function.html": 7201312866448785982, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rank.py": 5817408252050193538, + "venv/lib/python3.13/site-packages/greenlet/TUserGreenlet.cpp": 16258622236210473101, + "venv/lib/python3.13/site-packages/jose/backends/__init__.py": 16581763658239070112, + "docs/api/html/group__TestMigrationRoutes.html": 12902236514120491768, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/aead.py": 8740476942925346444, + "frontend/src/routes/datasets/__tests__/DatasetPreview.test.js": 12281160027416292128, + "docs/api/html/group__ConfidenceState.html": 10944304052724522934, + "backend/src/core/__tests__/test_config_manager_compat.py": 16202699597948342431, + "venv/lib/python3.13/site-packages/keyring/backend_complete.bash": 16589214602970214174, + "venv/lib/python3.13/site-packages/ecdsa/numbertheory.py": 13538480862642502330, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_decimal.py": 3515468590005709183, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/publicmod.f90": 2174121054736811903, + "docs/api/html/group__test__ensure__encryption__key__prefers__process__environment.html": 9430354217520222764, + "backend/src/plugins/maintenance_banner.py": 13137032570032257498, + "docs/api/html/group__SessionCollaborator.html": 5083895824126893676, + "venv/lib/python3.13/site-packages/pydantic/utils.py": 1533455264689378477, + "backend/src/services/clean_release/repository.py": 2475446738311184132, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_fillna.py": 7244491410004453166, + "venv/lib/python3.13/site-packages/pip/_internal/utils/filetypes.py": 4415340223268174913, + "frontend/build/_app/immutable/chunks/rrOTveCl.js": 6718040498448531057, + "docs/api/html/group__consolidate__archive__folders.html": 775395364374267476, + "docs/api/html/group__test__mapping__service__alignment__with__test__data.html": 6791951592601504164, + "docs/api/html/group__test__compliant__run__validation.html": 7010442946526003143, + "venv/lib/python3.13/site-packages/numpy/exceptions.py": 10981418339663118022, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/METADATA": 3390257212824996989, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_replace.py": 15992095120302643273, + "docs/api/html/group__test__combined__metrics__live__and__snapshot.html": 3514785552121043708, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____resetTranslationRun.html": 7263960980597630853, + "docs/api/html/group__ValidationReport.html": 2160384060642848740, + "docs/api/html/group__test__get__datasets__superset__failure.html": 14758789957406942338, + "venv/lib/python3.13/site-packages/more_itertools/recipes.pyi": 16788810745659802820, + "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/array.py": 3517673819082574078, + "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py": 9627328185578406121, + "venv/lib/python3.13/site-packages/rpds_py-0.30.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/segment.py": 2555584120510872966, + "venv/lib/python3.13/site-packages/numpy/typing/tests/test_typing.py": 10311989961588249147, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/setup.py": 17086801293303202021, + "docs/api/html/group__MarkerLogger______init____.html": 16103251887807394758, + "venv/lib/python3.13/site-packages/pydantic/_internal/_typing_extra.py": 14843908493613991959, + "docs/api/html/search/groups_a.js": 10318961203603531169, + "docs/api/html/group____latest__approval__for__candidate.html": 8034806470992140564, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/sum_.py": 7062070517544958546, + "venv/lib/python3.13/site-packages/git/index/__init__.py": 7874728461616959441, + "docs/api/html/group__resolve__bound__provider__id.html": 6473196790874356733, + "docs/api/html/group__get__preview__session.html": 12746493050692153788, + "docs/api/html/navtreeindex22.js": 6671112876915377349, + "docs/api/html/group__test__trigger__validation__skips__no__dashboards.html": 14447781900606710025, + "venv/lib/python3.13/site-packages/fastapi/middleware/asyncexitstack.py": 7733356903092860495, + "venv/lib/python3.13/site-packages/jeepney/io/trio.py": 11859775321483330469, + "scripts/scan_secrets.sh": 10827095619853567115, + "docs/api/html/group__selectedPlugin__Data.html": 6186646738464235130, + "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/lib/_stride_tricks_impl.py": 5260748170237305627, + "docs/api/html/group__subscribe__dataset__events.html": 12095461130299345778, + "docs/api/html/group__ApiKeyListItem.html": 5748587586873326651, + "venv/lib/python3.13/site-packages/pyasn1/type/namedtype.py": 1859990775875190116, + "docs/api/html/group__get__dashboard__detail__async.html": 13075524156311537422, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py": 3369246520501764730, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/offsets.cpython-313-x86_64-linux-gnu.so": 6726636942028566415, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_align.py": 10284128457194204574, + "venv/lib/python3.13/site-packages/PIL/ImagePath.py": 18323293175183057101, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_index_equal.py": 10617870815989304510, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_arithmetic.py": 15071337112968886738, + "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/tokens_mixins.py": 9923721909178724437, + "venv/lib/python3.13/site-packages/pip/_internal/distributions/base.py": 16714704323747942110, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_old_base.py": 191359377446257900, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh25211.pyf": 10179237442840865225, + "docs/api/html/group__test__derive__server__url__from__remote__strips__credentials.html": 11245056897250870095, + "docs/api/html/group____extract__columns__from__rows.html": 6576741443241931816, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/sync.py": 6189260178302531376, + "docs/api/html/group____build__no__repo__status__payload.html": 15081425468629205529, + "venv/lib/python3.13/site-packages/yaml/events.py": 745772917931702910, + "venv/lib/python3.13/site-packages/pygments/lexers/elpi.py": 5736689911777977822, + "docs/api/html/group__Permissions__Module.html": 12197326930694600842, + "docs/api/html/group__handleBulkPull__Function.html": 10391716980706820447, + "frontend/src/lib/auth/__tests__/permissions.test.js": 14871965971459735540, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/_typing.py": 17598638528781632158, + "venv/lib/python3.13/site-packages/numpy/f2py/_isocbind.pyi": 5786150108623563787, + "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/licenses/LICENSE": 12684353321716745791, + "venv/lib/python3.13/site-packages/pydantic/_internal/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pydantic/dataclasses.py": 12384956801113860889, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/html_style.tpl": 3352086677417301397, + "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/functions.py": 14107377669163193871, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test__iotools.py": 6260912730310453037, + "venv/lib/python3.13/site-packages/pandas/tests/construction/test_extract_array.py": 3100523370314150013, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_custom_business_month.py": 1613806538807726074, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ma.pyi": 8186102816080813799, + "backend/src/services/clean_release/exceptions.py": 16765031947674227117, + "venv/lib/python3.13/site-packages/pydantic/_internal/_decorators_v1.py": 16723743964226526155, + "docs/api/html/group__test__resolve__from__dictionary__prefers__exact__match.html": 11830592332306970257, + "venv/lib/python3.13/site-packages/_pytest/monkeypatch.py": 2635774457434545573, + "docs/api/html/group__handleDeploy__Function.html": 16324615477613900974, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__DictionaryManagerModule.html": 13851818928225468760, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/resource_protector.py": 3563910821279222695, + "docs/api/html/group__TestGitApi.html": 384988964900518925, + "docs/api/html/group__save.html": 1333375505490554916, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/signals.py": 10390443713463805090, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/__version__.py": 14138134075118474134, + "backend/src/plugins/translate/__tests__/test_lang_detect.py": 2328877106785068272, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/stride_tricks.pyi": 5844806555773292985, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_clip.py": 8087139801274517318, + "docs/api/html/navtreeindex0.js": 1729443049000642083, + "venv/lib/python3.13/site-packages/pygments/modeline.py": 6194365452131561478, + "frontend/src/routes/reports/llm/[taskId]/report_page.contract.test.js": 4485532466755188385, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/secretstorage/item.py": 15486045386471912693, + "venv/lib/python3.13/site-packages/psycopg2/_range.py": 7184417109068014771, + "venv/lib/python3.13/site-packages/pandas/core/groupby/grouper.py": 18110568057754450953, + "docs/api/html/group__invalidate__timezone__cache.html": 10993258758120512207, + "venv/lib/python3.13/site-packages/pygments/lexers/procfile.py": 3860651022061090738, + "venv/lib/python3.13/site-packages/pygments/lexers/special.py": 4972294202790455038, + "venv/lib/python3.13/site-packages/jsonschema/tests/__init__.py": 15130871412783076140, + "docs/api/html/group__test__ad__group__mapping.html": 3525500635803023761, + "venv/lib/python3.13/site-packages/_pytest/warnings.py": 8633394774569709013, + "venv/lib/python3.13/site-packages/passlib/handlers/sha1_crypt.py": 5752556581809938954, + "venv/lib/python3.13/site-packages/keyring/http.py": 1408024724330078009, + "docs/api/html/group__with__source.html": 10190434660091889570, + "docs/api/html/group____get__latest__clarification__session__or__404.html": 13364115311427816838, + "docs/api/html/group__TestCleanReleaseSourcePolicy.html": 16395844908630771518, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/json.py": 6429651405841289922, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_api.py": 5813060676255093777, + "venv/lib/python3.13/site-packages/pandas/io/formats/console.py": 10370334487585281127, + "backend/src/models/llm.py": 4879429354068794925, + "backend/src/services/dataset_review/clarification_engine.py": 16343602687904467259, + "docs/api/html/group__DatasourceColumnResponse.html": 13651374436200605439, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/array_like.py": 2778905818573625118, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/provision.py": 7362363963464621570, + "docs/api/html/group____resolve__environment__id.html": 18224093667095318191, + "docs/api/html/group__build__manifest__snapshot.html": 4326848185717081568, + "docs/api/html/group__state__mock__Module.html": 17946734577134518363, + "venv/lib/python3.13/site-packages/pydantic/tools.py": 8931184638883701008, + "venv/lib/python3.13/site-packages/numpy/testing/_private/utils.pyi": 17639497083041129225, + "docs/api/html/group__handleSaveRole__Function.html": 5310344647439892257, + "docs/api/html/group__PermissionsModule.html": 6386249265249672269, + "venv/lib/python3.13/site-packages/numpy/_core/_add_newdocs_scalars.py": 652332294655046106, + "backend/src/api/routes/__tests__/test_datasets.py": 5175841745704208723, + "docs/api/html/group__derive__final__status.html": 4319149296078719364, + "venv/lib/python3.13/site-packages/fastapi/applications.py": 4975013401500183420, + "venv/lib/python3.13/site-packages/referencing/_attrs.pyi": 10030665705880994025, + "venv/lib/python3.13/site-packages/numpy/testing/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/passlib/tests/test_utils.py": 10362977406431569031, + "venv/lib/python3.13/site-packages/pygments/lexers/text.py": 10572727755736597715, + "docs/api/html/group__SupersetContextExtractorPackage.html": 16163237109197150819, + "frontend/src/routes/reports/llm/[taskId]/+page.svelte": 809594987288256163, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_casting_floatingpoint_errors.py": 4301355720042319835, + "docs/api/html/group__estimate__token__budget__for__rows.html": 9229322075799591152, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge.py": 11366935134260232329, + "docs/api/html/group__StoresModule.html": 154732489318359356, + "venv/lib/python3.13/site-packages/pandas/io/feather_format.py": 13242733585787888812, + "docs/api/html/group__unlock__field__semantic.html": 6237915006750814401, + "docs/api/html/group__test__api__key__auth__expired.html": 4953714735118238766, + "venv/lib/python3.13/site-packages/numpy/_array_api_info.pyi": 13283968924732680159, + "venv/lib/python3.13/site-packages/numpy/ctypeslib/_ctypeslib.pyi": 10360538024015064036, + "docs/api/html/group__MaintenanceEndResponse.html": 11532173656825010057, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/engine.py": 2652248727360250985, + "docs/api/html/group__buildSidebarSections__Function.html": 528946104052993964, + "venv/lib/python3.13/site-packages/pygments/lexers/_scheme_builtins.py": 5722444920479775453, + "frontend/src/components/StartupEnvironmentWizard.svelte": 17705330033482916904, + "docs/api/html/group__stores__module__Module.html": 5582348367108541718, + "docs/api/html/group__build__parser.html": 9963847217279686225, + "frontend/build/_app/immutable/chunks/CJiE3ZVI.js": 17365948425366590616, + "docs/api/html/group__docker__frontend__Dockerfile.html": 17852951405421150533, + "docs/api/html/group__test__missing__auth__db__url__crashes.html": 1426005486065410823, + "venv/lib/python3.13/site-packages/cryptography/x509/ocsp.py": 17973800752927680404, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/unicode_comment.f90": 11326797716215117266, + "docs/api/html/group__test__generate__docs__success.html": 8836757246703621262, + "docs/api/html/group__score__risks.html": 16643542131846980434, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_records.py": 6252761812228230408, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_map.py": 10769974470610467636, + "docs/api/html/group__test__api__key__auth__environment__scope.html": 5049990905458759758, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/structs.py": 4479429145468072604, + "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_impl.py": 12056958946481531279, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/WHEEL": 16097436423493754389, + "docs/api/html/search/groups_0.js": 14023012673265007156, + "venv/lib/python3.13/site-packages/pandas/tests/extension/json/__init__.py": 7877061921210840955, + "docs/api/html/group__test__create__admin__is__idempotent__for__existing__user.html": 11387718106316703006, + "venv/lib/python3.13/site-packages/PIL/TiffImagePlugin.py": 6845043550424565106, + "frontend/src/components/MissingMappingModal.svelte": 14222261650100098814, + "venv/lib/python3.13/site-packages/passlib/utils/pbkdf2.py": 15802959653228956404, + "venv/lib/python3.13/site-packages/numpy/tests/test_numpy_version.py": 849232015288488204, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_common_basic.py": 1945891789924713537, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/jwe_zips.py": 5184894018177148648, + "docs/api/html/group__test__trigger__run__success.html": 2545532746329268480, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/polynomial_series.pyi": 7112486730197067087, + "docs/api/html/group__test__recover__imported__filters__reconciles__raw__native__filter__ids__to__metadata__names.html": 9441026336344613856, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/metadata.py": 7204343250279221076, + "venv/lib/python3.13/site-packages/pydantic/experimental/pipeline.py": 9493054841465227788, + "docs/api/html/globals_r.html": 7591223539833121046, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_groupby.py": 2738671407653333726, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_coercion.py": 3339075591248270762, + "docs/api/html/group__ComplianceViolation.html": 2732715043898056869, + "docs/api/html/group__test__base__dir__constant__replaces__parents.html": 16003639855862888658, + "docs/api/html/search/all_11.js": 4961152569590003385, + "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/WHEEL": 12146818530001975731, + "venv/lib/python3.13/site-packages/dateutil/parser/__init__.py": 11377431154251655738, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/cli.py": 6382193953727339271, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/index_tricks.pyi": 6035507586990711471, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/serialize.py": 11139432164346742421, + "backend/git_repos/remote/test-repo.git/objects/52/ec4a78c629329b8b572ec9d5205271c111baac": 18054296544295201561, + "frontend/src/lib/components/translate/TranslationRunResult.svelte": 4434171203266080686, + "venv/lib/python3.13/site-packages/pygments/lexers/hdl.py": 6772823608124143123, + "docs/api/html/group__SupersetContextExtractorBase____extract__numeric__identifier.html": 8466073084601965618, + "docs/api/html/group__test__missing__variables.html": 14137199728172789432, + "docs/api/html/group__deleteFile__Function.html": 12741403507383620880, + "backend/src/services/clean_release/repositories/approval_repository.py": 11060626515832882475, + "venv/lib/python3.13/site-packages/numpy/_core/strings.pyi": 1981676808027146409, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/cython/meson.build": 9642189398934130247, + "docs/api/html/group__LlmRoutes.html": 16633447644830159048, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_chunksize.py": 7107619871245389835, + "docs/api/html/group__ArtifactType.html": 5232079852731603995, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/char.f90": 12203871998988759364, + "frontend/src/routes/admin/settings/+page.svelte": 9726389419291634649, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/misc/extended_precision.pyi": 6541258584648209609, + "docs/api/html/group__test__build__detector.html": 11732087775356139179, + "docs/api/html/search/all_0.js": 14023012673265007156, + "venv/lib/python3.13/site-packages/greenlet/tests/test_throw.py": 4119265751381210399, + "backend/alembic.ini": 8897071018956157084, + "venv/lib/python3.13/site-packages/python_multipart/decoders.py": 14252672585219598429, + "venv/lib/python3.13/site-packages/pygments/lexers/urbi.py": 1611762607688882372, + "frontend/playwright-report/trace/snapshot.v8KI4P3m.js": 7854911091722310751, + "docs/api/html/group__AuthenticationError.html": 1954448943641493275, + "venv/lib/python3.13/site-packages/PIL/FpxImagePlugin.py": 18245056799205041866, + "docs/api/html/group__PolicyResolutionService.html": 794248469337141330, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Jaro.pyi": 3145980717589050713, + "venv/lib/python3.13/site-packages/numpy/_core/_type_aliases.pyi": 15848834171197104301, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/conftest.py": 3691712173202219606, + "venv/lib/python3.13/site-packages/pygments/lexers/json5.py": 9736695186548899403, + "venv/lib/python3.13/site-packages/pygments/cmdline.py": 15628499088643246809, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_values.py": 430620320423334461, + "venv/lib/python3.13/site-packages/sqlalchemy/connectors/pyodbc.py": 4146960201984489604, + "venv/lib/python3.13/site-packages/rpds/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/licenses/LICENSE": 4123064337800029995, + "docs/api/html/group__test__repo__path__default__fixed.html": 5743804779893858892, + "docs/api/html/group__bulk__find__replace.html": 7341744188539176239, + "frontend/e2e/tests/login.e2e.js": 9217667783118672119, + "venv/lib/python3.13/site-packages/websockets/streams.py": 15786581670248099415, + "venv/lib/python3.13/site-packages/httpcore/_async/__init__.py": 491192949420297153, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/warnings_and_errors.py": 11172336980866895356, + "backend/src/services/clean_release/stages/no_external_endpoints.py": 5083253025896929417, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/yaml.py": 17801117405950663611, + "docs/api/html/globals_func_h.html": 17098238941487002581, + "venv/lib/python3.13/site-packages/pandas/_libs/window/indexers.pyi": 9911899303567570646, + "backend/test_pat_api.py": 4206656943734821967, + "docs/api/html/group__submit__bulk__corrections.html": 17842098461150569742, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/RECORD": 2024211292009381421, + "venv/lib/python3.13/site-packages/httpcore/_backends/sync.py": 576247220834179928, + "docs/api/html/group__enable__schedule.html": 10104484743481845781, + "docs/api/html/group__test__trigger__validation__skips__inactive__policy.html": 10751741691328808103, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py": 7019253290755243568, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__multiarray_api.c": 9134176670140958459, + "docs/api/html/folderclosed.svg": 9648391834591542818, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/emoji.py": 9166774203918731896, + "docs/api/html/group__PreviewSessionManager.html": 4001497686990395756, + "venv/lib/python3.13/site-packages/numpy/_core/_string_helpers.pyi": 12043292763005874815, + "docs/api/html/group__APIKey.html": 15496875141447468476, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_missing.py": 2976310411820303374, + "docs/api/html/group__InitAuthDbScript.html": 8842607924154924200, + "venv/lib/python3.13/site-packages/pandas/core/ops/mask_ops.py": 16152832446926420035, + "venv/bin/numpy-config": 17104619511899110252, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/generator_pcg64_np126.pkl.gz": 9677994062701347206, + "docs/api/html/group__BeliefFormatter.html": 1872767394370220168, + "docs/api/html/group__frontend__src__services__git__utils__js____extractUnfinishedMergeContext.html": 6678834570303525459, + "docs/api/html/group__docker__backend__entrypoint__bootstrap__admin.html": 4653794695033998401, + "docs/api/html/group__generate__api__key.html": 2424917664725615867, + "venv/lib/python3.13/site-packages/numpy/core/_dtype.pyi": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_odswriter.py": 5134385709728943904, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_to_numpy.py": 9663734591667845940, + "venv/lib/python3.13/site-packages/authlib/integrations/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/lexers/__init__.py": 7316739139609490520, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/scanner.py": 5640381644804445932, + "docs/api/html/globals_n.html": 4026120167261781447, + "venv/lib/python3.13/site-packages/jose/jwk.py": 2781217726458801910, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_datetimelike.py": 5317270578347271174, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/dtypes.pyi": 15114028503984522176, + "docs/api/html/group__get__maintenance__settings.html": 68073512936304627, + "venv/lib/python3.13/site-packages/apscheduler/executors/pool.py": 10344126569001032241, + "docs/api/html/group__PageContracts.html": 8602909438030144707, + "venv/lib/python3.13/site-packages/PIL/TiffTags.py": 8688883943071546469, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/replace.py": 1708865864686705833, + "frontend/src/routes/tools/debug/+page.svelte": 15220194081518936566, + "docs/api/html/group__SemanticSourceResolver.html": 9852035711802845664, + "docs/api/html/group__test__test__git__config__validates__connection__successfully.html": 7885701889149733525, + "venv/lib/python3.13/site-packages/pandas/errors/cow.py": 14381282473643980776, + "venv/lib/python3.13/site-packages/numpy/random/_philox.pyi": 7503018432880404291, + "venv/lib/python3.13/site-packages/numpy/f2py/crackfortran.py": 12796890117561096360, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/exc.py": 1448374203226983757, + "docs/api/html/group__test__backup__dashboards__with__schedule.html": 11599542107970767027, + "venv/lib/python3.13/site-packages/websockets/asyncio/compatibility.py": 9716993942839407921, + "venv/lib/python3.13/site-packages/cffi/lock.py": 13507686939203117974, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_pickle.py": 16196792378104396231, + "venv/lib/python3.13/site-packages/pygments/lexers/typst.py": 8883289726601667104, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/licenses/AUTHORS": 2987771679926243782, + "venv/lib/python3.13/site-packages/keyring/cli.py": 10996746519742056101, + "docs/api/html/group__DatasetReviewOrchestrator.html": 7010827725071537587, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/__init__.py": 14481526616887213120, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_pickle.py": 388513670243918273, + "docs/api/html/group__test__load__tasks__with__limit.html": 16300281296351269896, + "frontend/build/_app/immutable/chunks/CrLU7zQO.js": 14265962769345069959, + "venv/lib/python3.13/site-packages/numpy/_core/_simd.cpython-313-x86_64-linux-gnu.so": 12609666221355091416, + "docs/api/html/group____ensure__dictionary__entries__columns.html": 2292525621373712406, + "docs/api/html/group__params.html": 10578394165537584451, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_inference.py": 16402427186697071465, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/__init__.py": 12975130533860125272, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_latex.py": 15077617224435782028, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_structures.py": 16375837477294135345, + "venv/lib/python3.13/site-packages/fastapi/security/oauth2.py": 1925394177931547776, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/api.py": 13134394673408254097, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/test_constructors.py": 9478848417896027917, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/__init__.pyi": 16164841755339571545, + "venv/lib/python3.13/site-packages/pandas/tests/io/sas/test_sas.py": 9446226619493404132, + "frontend/src/lib/stores/__tests__/mocks/stores.js": 12764819706469057535, + "docs/api/html/group__calculate__crc32.html": 15503083199679692336, + "docs/api/html/group__insert__batch__to__target.html": 389711692439722572, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_misc.py": 9190561773853901527, + "docs/api/html/group__GitSettingsPageUxTest__Module.html": 7822522085605911446, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/_spdx.py": 17182188548503720124, + "backend/src/schemas/settings.py": 18238532620797946210, + "venv/lib/python3.13/site-packages/anyio/to_interpreter.py": 8369454842687342401, + "docs/api/html/group____seed__candidate__and__passed__report.html": 14818107129922209880, + "backend/src/plugins/translate/__tests__/test_scheduler.py": 5715885061128238668, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_join.py": 13115782559805895662, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/dim2.py": 5767600151459095125, + "backend/git_repos/remote/test-repo.git/info/exclude": 6403833611826357791, + "docs/api/html/group__get__logging__config.html": 13172275413110444262, + "venv/lib/python3.13/site-packages/pip/_internal/cli/autocompletion.py": 7651919329635563739, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_conversion.py": 7507083194555424923, + "docs/api/html/group____async__confirmation__summary.html": 4513234989932474240, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/__init__.py": 15130871412783076140, + "backend/src/plugins/translate/service_utils.py": 15103456860964805370, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/__init__.py": 15130871412783076140, + "backend/tests/scripts/test_clean_release_tui_v2.py": 5872535102885848729, + "docs/api/html/group__ArtifactFormat.html": 11975137496264852869, + "docs/api/html/group__test__create__session.html": 9252520681669959841, + "venv/lib/python3.13/site-packages/numpy/_core/umath.pyi": 11775804030935134661, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/__init__.py": 2345997696115514124, + "docs/api/html/group__frontend__src__types__backup__ts____Backup.html": 5424115272360107965, + "venv/lib/python3.13/site-packages/jose/backends/ecdsa_backend.py": 2684176977865283060, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_strings.py": 7168544888340296373, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/mapped_collection.py": 11377280960650304531, + "backend/src/api/routes/translate/__init__.py": 6357999798616465776, + "docs/api/html/group__TranslationRunRetryManager.html": 16122389205545947641, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/fixtures/orm.py": 7554417559838785150, + "docs/api/html/group__ErrorPage.html": 8821459762904826623, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____getRecommendedActionLabel.html": 4071530290797057104, + "venv/lib/python3.13/site-packages/click/shell_completion.py": 5858110451169927373, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_loc.py": 2127584756555503873, + "frontend/build/_app/immutable/chunks/DA0oX2nF.js": 4762485859359244720, + "docs/api/html/search/functions_a.js": 12926479784540505760, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_series.py": 16418555817529711079, + "venv/lib/python3.13/site-packages/click-8.3.1.dist-info/RECORD": 3649834117451110628, + "docs/api/html/group__test__bulk__corrections__atomic.html": 16703462863207899908, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/jwt.py": 9642615960197748105, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_loc.py": 17839380711970027363, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_f2cmap.py": 5863341586534531594, + "venv/lib/python3.13/site-packages/sqlalchemy/events.py": 9329355486544822483, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_liboffsets.py": 14705822637347212540, + "backend/src/plugins/translate/dictionary_correction.py": 18051915404774774954, + "run.sh": 16549488891429944178, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/models.py": 9513172366009392193, + "docs/api/html/group__resetEnvForm__Function.html": 11629856738911116007, + "backend/src/api/routes/assistant/_llm_planner_intent.py": 1835887541250815399, + "venv/lib/python3.13/site-packages/PIL/MpoImagePlugin.py": 644327650732339301, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/client.py": 18443944554871937480, + "docs/api/html/group__SupersetClientBuildDatasetPreviewLegacyFormData.html": 16410404940636182538, + "venv/lib/python3.13/site-packages/fastapi/responses.py": 6092572095549573593, + "venv/lib/python3.13/site-packages/pandas/util/__init__.py": 4070574585004336241, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_interval.py": 2613503970235591726, + "venv/lib/python3.13/site-packages/PIL/GdImageFile.py": 16875784236394545058, + "docs/api/html/group__setupTests__Module.html": 4447681325358958988, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/routines/funcfortranname.f": 9330535808093475892, + "frontend/e2e/helpers/api.helper.js": 12740720187461301874, + "docs/api/html/group__test__patch__profile__preferences__validation__error.html": 8272861585949821764, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_timeseries_window.py": 1973365560758236222, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____resolveEnvStage.html": 14282337486295968298, + "docs/api/html/group____plan__dataset__review__intent.html": 16025749447796355247, + "docs/api/html/group__test__report__validation.html": 17827285092454190901, + "docs/api/html/group__test__cli__manifest__build__scaffold.html": 12976660891449415796, + "docs/api/html/group____normalize__owner__display__token.html": 12722166268029895042, + "docs/api/html/group__orchestrator__sql__rows.html": 11564020210274340689, + "venv/lib/python3.13/site-packages/starlette/staticfiles.py": 11256974306202558529, + "venv/lib/python3.13/site-packages/pandas/core/ops/missing.py": 9493665944764255854, + "docs/api/html/group__SupersetDatasetsPreviewFiltersMixin.html": 6453705945278224985, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/METADATA": 5628172948035858892, + "venv/lib/python3.13/site-packages/pygments/lexers/mips.py": 2078929831513352031, + "docs/api/html/group__ResourceService.html": 11914817317990021619, + "venv/lib/python3.13/site-packages/ecdsa/_sha3.py": 10353612776869489378, + "docs/api/html/group____handle__unexpected__git__route__error.html": 4213682782631891407, + "venv/lib/python3.13/site-packages/numpy/lib/_ufunclike_impl.py": 12251264586530536622, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_reductions.py": 3227705565578016389, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_infer_objects.py": 16868563755487479303, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/__init__.py": 15130871412783076140, + "docs/api/html/group__UseReviewSession.html": 15548286754237500808, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_isoc.py": 4923640657296076239, + "frontend/src/routes/migration/mappings/+page.svelte": 13415361018394803129, + "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__TranslationUtils.html": 10386648824429307238, + "docs/api/html/group__TestDictionaryFilter.html": 24770183405155834, + "docs/api/html/group__test__calculate__schedule__even__distribution.html": 7169536723006571370, + "docs/api/html/group__TestPublicationService.html": 8868260289891747694, + "docs/api/html/group__get__current__user.html": 13871827060442489554, + "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/RECORD": 17594742868855466393, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_range.py": 3544406211185340973, + "venv/lib/python3.13/site-packages/pygments/lexers/_cl_builtins.py": 16540712925368297957, + "venv/lib/python3.13/site-packages/websockets/sync/connection.py": 2791040669094103200, + "venv/lib/python3.13/site-packages/yaml/tokens.py": 2279161238859232338, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_bin_groupby.py": 14831211659124136806, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm32_gcc.h": 3561524604274567339, + "venv/lib/python3.13/site-packages/yaml/resolver.py": 6669674521776449098, + "docs/api/html/group____is__valid__runtime__api__key.html": 911899575469202802, + "docs/api/html/search/all_7.js": 449094548201224648, + "venv/lib/python3.13/site-packages/pandas/tests/window/moments/__init__.py": 15130871412783076140, + "backend/src/plugins/translate/__tests__/test_token_budget.py": 2275341408164077909, + "venv/lib/python3.13/site-packages/jeepney/io/tests/utils.py": 10346859893683522113, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/constructors.py": 7587476800569414769, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/printing.py": 8681519649669408795, + "venv/lib/python3.13/site-packages/pandas/io/pytables.py": 17482934215513855928, + "docs/api/html/group__TranslateJobsApi.html": 7339024353697591080, + "docs/api/html/group__PreparePreviewResult.html": 13180386632469700647, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/markup.py": 5413800947725916538, + "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.pxd": 9126772093305708921, + "venv/lib/python3.13/site-packages/ecdsa/test_ellipticcurve.py": 11125783981574901613, + "venv/lib/python3.13/site-packages/pandas/core/interchange/from_dataframe.py": 8278998381856028462, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_can_hold_element.py": 5406431247116557833, + "venv/lib/python3.13/site-packages/greenlet/greenlet_msvc_compat.hpp": 12504008513945919250, + "docs/api/html/group__test__get__datasets__not__found.html": 12470922355054560217, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/gh_22819.pyf": 14717748358749934995, + "venv/lib/python3.13/site-packages/_pytest/logging.py": 10972553724755511468, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_bar.py": 7791068963246005463, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__StatsCounts.html": 11606389860887165837, + "docs/api/html/group__test__get__run__detail.html": 4912801148491147951, + "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/oauth1_client.py": 3129955464287331242, + "docs/api/html/group__test__json__load__if__needed__list.html": 793875230537315255, + "docs/api/html/group__ColumnsTable.html": 8262379607630613277, + "docs/api/html/group__startMigration__Function.html": 2057002933686227334, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/test_indexing.py": 1947969642791009285, + "venv/lib/python3.13/site-packages/greenlet/tests/test_leaks.py": 1219835696230215605, + "venv/lib/python3.13/site-packages/urllib3/util/retry.py": 17988032431204662756, + "frontend/playwright-report/trace/snapshot.html": 11716473056415565262, + "backend/git_repos/remote/test-repo.git/objects/93/9cc583a18267406014c57617ccb557569f6aaf": 5474754694741999746, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/setitem.py": 9552868454186447925, + "frontend/playwright-report/trace/uiMode.html": 2646979321132705707, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA.py": 17817123894903120316, + "venv/lib/python3.13/site-packages/pandas/tests/series/accessors/test_dt_accessor.py": 2229616362327032253, + "docs/api/html/group__test__get__logs__by__task__id.html": 3774988735198312173, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/io.py": 11072022722163954973, + "docs/api/html/group__ReportsApiTest__Module.html": 14793467354050182333, + "venv/lib/python3.13/site-packages/pandas/_libs/_cyutility.cpython-313-x86_64-linux-gnu.so": 3372660143512868174, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_ints.py": 5616705208267050659, + "frontend/src/components/auth/ProtectedRoute.svelte": 9152870722988000278, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_duplicated.py": 6659959750254523427, + "venv/lib/python3.13/site-packages/numpy/_typing/_ufunc.pyi": 6286629088867436848, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_extract.py": 14547819021277949280, + "venv/lib/python3.13/site-packages/pygments/lexers/sas.py": 6128008194712914874, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_nlargest.py": 14518132768753249360, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/heuristics.py": 1422768761337195135, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_index_col.py": 17604191644943383567, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft201909/vocabularies/content": 16257335642847993866, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/_version.py": 15336513445621042105, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/interfaces.py": 4890958419958257958, + "docs/api/html/group__test__end__active__event__single__banner.html": 329198841271298860, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/nested_sequence.pyi": 10985533017688918283, + "venv/lib/python3.13/site-packages/pydantic/_internal/_config.py": 12760390602912369447, + "venv/lib/python3.13/site-packages/pygments/lexers/php.py": 17636450950688953288, + "venv/lib/python3.13/site-packages/attr/exceptions.py": 11532465891810816417, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____buildAssistantSeedPrompt.html": 4030604807548245084, + "docs/api/html/group__validate__update__payload.html": 17271010803443567335, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/pkg_resources.py": 14271077832999370068, + "venv/lib/python3.13/site-packages/numpy/__init__.py": 2331213407497901634, + "docs/api/html/group__test__trigger__validation__creates__tasks.html": 10655556421929325211, + "venv/lib/python3.13/site-packages/attr/_cmp.pyi": 14443711863388606665, + "venv/lib/python3.13/site-packages/pip/_internal/models/candidate.py": 3099785363867247334, + "docs/api/html/resize.js": 16477870345255205251, + "venv/lib/python3.13/site-packages/pydantic/types.py": 785880062468926292, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_stack_unstack.py": 3737891757817696405, + "venv/lib/python3.13/site-packages/python_multipart/multipart.py": 5677735019292537174, + "venv/lib/python3.13/site-packages/passlib/handlers/postgres.py": 14162382430051693313, + "venv/lib/python3.13/site-packages/passlib/handlers/oracle.py": 12959175637015399815, + "venv/lib/python3.13/site-packages/pip/_internal/models/selection_prefs.py": 14700113736620314923, + "venv/lib/python3.13/site-packages/pydantic_settings/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pyasn1/type/constraint.py": 16776615503418773283, + "frontend/build/_app/immutable/chunks/KxePT7Ip.js": 8106111085962356816, + "docs/api/html/group__test__list__events.html": 8621900407061858699, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_compression.py": 3167245427092658522, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/visitors.py": 5190923415390076080, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_add_prefix_suffix.py": 4815518357936092237, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_combine_first.py": 11425059090050867171, + "docs/api/html/group__test__reject__persists__decision__without__promoting__candidate__state.html": 7671132833499886533, + "docs/api/html/group__remove__banner__from__position.html": 10490485317940098773, + "docs/api/html/group__test__default__config__root__path.html": 13958925806070579987, + "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/REQUESTED": 15130871412783076140, + "frontend/src/lib/components/reports/ReportCard.svelte": 7009840605870276729, + "backend/src/plugins/translate/preview_resolve_provider.py": 7349483761713339246, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/METADATA": 3618776395694990076, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_overlaps.py": 2328652590379935311, + "docs/api/html/group__SupersetContextExtractorBase.html": 14341165499851987732, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/auth.py": 13542332344403032059, + "docs/api/html/group__ReportPageContractTest__Module.html": 10375296767582246595, + "venv/lib/python3.13/site-packages/ecdsa/rfc6979.py": 11564966030899162026, + "venv/lib/python3.13/site-packages/numpy/testing/print_coercion_tables.py": 11758491058846790938, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/__init__.py": 15130871412783076140, + "docs/api/html/group__test__parse__superset__link__dashboard__slug__recovery.html": 11791096107070839073, + "venv/lib/python3.13/site-packages/authlib/oidc/core/models.py": 1370998944213578392, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/plugin/bootstrap.py": 3865947239497500815, + "venv/lib/python3.13/site-packages/gitdb/db/mem.py": 15823812455996199993, + "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__SupersetClientGetDashboards.html": 13070946675530774203, + "venv/lib/python3.13/site-packages/numpy/lib/_user_array_impl.py": 13115032674230220791, + "docs/api/html/group__prepare__candidate__endpoint.html": 8691475225668238751, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/pcg64dxsm-testset-2.csv": 16611724551361692999, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/mod_derived_types.f90": 2556756676983488922, + "docs/api/html/group____EXT__frontend__AssistantChatTest__s.html": 10743878313235782900, + "venv/lib/python3.13/site-packages/pygments/lexers/factor.py": 15788613154609197002, + "venv/lib/python3.13/site-packages/pandas/core/indexes/frozen.py": 1419685664276640120, + "docs/api/html/group__NetworkError.html": 8895892229568746717, + "docs/api/html/group__clearTasks__Function.html": 13599249766000880879, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/syntax.py": 18070449217682341495, + "docs/api/html/group__DatasetReviewModels.html": 11351633006564729227, + "venv/lib/python3.13/site-packages/pandas/tseries/__init__.py": 2648641118117738895, + "docs/api/html/group__CreateComplianceRunRequest.html": 8446298024144622339, + "docs/api/html/group__job__to__response.html": 14491060891738225447, + "venv/lib/python3.13/site-packages/smmap/test/test_tutorial.py": 16309370344201290582, + "docs/api/html/group__serve__spa.html": 411901662117406287, + "venv/lib/python3.13/site-packages/numpy/_core/records.py": 11414828908088050950, + "docs/api/html/group__CHARS__PER__TOKEN__MIXED.html": 1704290881184281632, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_algos.py": 5356470832688354593, + "venv/lib/python3.13/site-packages/keyring/compat/py312.py": 17581691618899404491, + "docs/api/html/group__resolveStorageQueryFromPath__Function.html": 13600414603292373532, + "venv/lib/python3.13/site-packages/pygments/styles/rainbow_dash.py": 12236746494379891602, + "venv/lib/python3.13/site-packages/pandas/util/version/__init__.py": 3844072588696074141, + "venv/lib/python3.13/site-packages/numpy/random/bit_generator.cpython-313-x86_64-linux-gnu.so": 2574035311375507054, + "docs/api/html/group__test__get__reports__handles__mixed__naive__and__aware__datetimes.html": 10017276203058438772, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_casting_unittests.py": 18157503533859249155, + "docs/api/html/group__logger.html": 15165757884259946522, + "backend/src/services/__tests__/test_rbac_permission_catalog.py": 2963458864311994307, + "venv/lib/python3.13/site-packages/ecdsa/test_keys.py": 17117188373419689467, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_timedelta.py": 17052461094717926538, + "backend/tests/test_translate_scheduler.py": 9870953183282058719, + "docs/api/html/group__test__parsed__native__filters__model.html": 11879713945172896956, + "docs/api/html/group__load__tasks.html": 13194384238466330387, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/base_key.py": 10402800587070352851, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/themes.py": 6451091097727599550, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-expm1.csv": 8710594949902856122, + "backend/src/models/dataset_review_pkg/_mapping_models.py": 1407462125644004056, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/parsing.cpython-313-x86_64-linux-gnu.so": 13104135217735363438, + "docs/api/html/group__saveLoggingConfig__Function.html": 14654115441279458415, + "docs/api/html/group__test__limited__user__cannot__launch__restricted__operation.html": 3773775103018800523, + "venv/lib/python3.13/site-packages/rapidfuzz/fuzz_cpp.cpython-313-x86_64-linux-gnu.so": 14187094676876471848, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/__init__.pyi": 10548370574281981402, + "docs/api/html/group____resolve__insert__backend.html": 4179734399226191849, + "frontend/test-results/live-project-check.e2e.js--abfe5-project-with-admin-admin123-chromium/test-failed-1.png": 4602930255871194331, + "venv/lib/python3.13/site-packages/PIL/ImageWin.py": 13635870584232081323, + "docs/api/html/group__generate__commit__message.html": 252727964148470828, + "venv/lib/python3.13/site-packages/jsonschema_specifications/__init__.py": 5732822354953774657, + "venv/lib/python3.13/site-packages/six-1.17.0.dist-info/METADATA": 6502714564886871819, + "docs/api/html/group__deleteUser__Function.html": 7949308553108288142, + "frontend/src/routes/translate/dictionaries/[id]/+page.svelte": 17719561272401762626, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/compat.py": 5871636909854554063, + "venv/lib/python3.13/site-packages/PIL/PalmImagePlugin.py": 13008868719182630239, + "docs/api/html/group____get__record.html": 13908384265392820163, + "docs/api/html/group____FakeTaskManager.html": 3818898705831684798, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/nditer.py": 10038360623032425884, + "venv/lib/python3.13/site-packages/PIL/ImageOps.py": 3884310863548175682, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/dtype.pyi": 12178008080078679769, + "venv/lib/python3.13/site-packages/pandas/core/window/numba_.py": 1444123360986509769, + "venv/lib/python3.13/site-packages/pygments/filter.py": 16846063190466267618, + "venv/lib/python3.13/site-packages/httpcore/_async/interfaces.py": 18250473733460571816, + "frontend/e2e/tests/translation.e2e.js": 9863246540495731784, + "docs/api/html/group__backup__dashboards.html": 13922001482280219867, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arcsinh.csv": 13695545125848146013, + "docs/api/html/group__get__dashboard__tasks__history.html": 3745020964787224389, + "docs/api/html/group__start__maintenance.html": 4069649424458753421, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_base_indexer.py": 3129123098288498633, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/instrumentation.py": 13198832283145198959, + "docs/api/html/navtreeindex1.js": 11503108132424855366, + "venv/lib/python3.13/site-packages/sqlalchemy/types.py": 15819795572817819102, + "docs/api/html/group__test__release__approve__and__publish__revoke__contract.html": 18374074269031186609, + "docs/api/html/group__test__fetchPreview__Function.html": 9834489208067196451, + "docs/api/html/group__DashboardHub__updateColumnFilterSearch__Function.html": 10268710448771778339, + "docs/api/html/group__SupersetClientValidateExportResponse.html": 2041159810613362188, + "venv/lib/python3.13/site-packages/idna/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexer.py": 3658450949169647228, + "docs/api/html/group__SessionEventLoggerImports.html": 4770216863181248837, + "docs/api/html/group____compute__key__hash.html": 364627491871046759, + "venv/lib/python3.13/site-packages/ecdsa/test_ecdh.py": 3338834550392548171, + "docs/api/html/group__GitServiceGitlabMixin.html": 362918173698022720, + "venv/lib/python3.13/site-packages/numpy/fft/tests/test_pocketfft.py": 18025182347224285050, + "backend/tests/test_maintenance_api.py": 2012388734813578069, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/base.cpython-313-x86_64-linux-gnu.so": 8335798324308957127, + "docs/api/html/group__init__db.html": 2707796602248353390, + "docs/api/html/group__run.html": 11476921346246444221, + "docs/api/html/group__auth__callback__adfs.html": 14958207000323215557, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_type_check.py": 3935091606923106753, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/information_schema.py": 8551227132710897346, + "docs/api/html/group__TestClickHouseJoinVerification.html": 7084861590804136181, + "docs/api/html/group____quote__identifier.html": 856007842378984713, + "frontend/src/lib/stores/__tests__/test_datasetReviewSession.js": 8646274524484627210, + "docs/api/html/group__llm__prompt__templates.html": 11148828659101585687, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers_django.py": 8455054295577203929, + "docs/api/html/group__test__parse__datetime__none.html": 16098810779566927434, + "docs/api/html/group__delete__conversation.html": 12285162829273366992, + "venv/lib/python3.13/site-packages/anyio/_core/_typedattr.py": 17584691045493791349, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/string/test_astype.py": 10171766562093740708, + "venv/lib/python3.13/site-packages/charset_normalizer/cd.py": 8687667152597941021, + "venv/lib/python3.13/site-packages/numpy/_configtool.py": 2946953194004101078, + "docs/api/html/group__hasPermission__Function.html": 14331056000616172836, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arctanh.csv": 8620268345075425735, + "docs/api/html/group__test__get__logs__with__search.html": 18243052795631026287, + "venv/lib/python3.13/site-packages/rapidfuzz/utils_py.py": 12341806772632276946, + "docs/api/html/group__SupersetClientParseDashboardUrlForFilters.html": 2985094846647626250, + "docs/api/html/group__GitGiteaRoutes.html": 17891704073558062610, + "docs/api/html/group__SupersetContextRecoveryMixin__recover__imported__filters.html": 12238037289621138113, + "docs/api/html/group__CleanComplianceOrchestrator.html": 1417516327802744207, + "venv/lib/python3.13/site-packages/passlib/tests/test_context_deprecated.py": 7876919198015151018, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/formatters/__init__.py": 3247870839323520754, + "venv/lib/python3.13/site-packages/sqlalchemy/util/tool_support.py": 4926732415520779988, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/base.py": 5294446834530589760, + "venv/lib/python3.13/site-packages/numpy/random/_examples/numba/extending_distributions.py": 209769687436320665, + "venv/lib/python3.13/site-packages/PIL/ImageGrab.py": 11114379915762058868, + "docs/api/html/group__formatTime__Function.html": 12061565145373670587, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/ma.pyi": 6467636381637286867, + "venv/lib/python3.13/site-packages/yaml/__init__.py": 11044333164208875121, + "docs/api/html/group__test__component__file__exists__Function.html": 7176164496911079412, + "venv/lib/python3.13/site-packages/httpcore/_api.py": 16499985295426060327, + "venv/lib/python3.13/site-packages/httpcore/_async/connection.py": 2155744160496556069, + "docs/api/html/globals_f.html": 11451612662943857082, + "docs/api/html/group__test__get__datasets__invalid__pagination.html": 12210772890706448571, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_tokenizer.py": 7994281991455916540, + "frontend/src/services/git-utils.js": 12982149055119314642, + "venv/lib/python3.13/site-packages/pip/_vendor/certifi/__main__.py": 8412594868333244844, + "backend/src/api/routes/translate/_router.py": 18140665710457768874, + "docs/api/html/group__TranslateCorrectionTests.html": 1332351481274602438, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_indexing.py": 6039808271042864401, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_reset_index.py": 5946666595195952693, + "backend/test_auth.db": 18214842050920965999, + "docs/api/html/group__TaskResponse.html": 12180333889349074765, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_abstract_interface.py": 17625870734108222276, + "docs/api/html/group__NotificationConfig.html": 15289328478261723384, + "backend/src/api/routes/maintenance/_schemas.py": 16377052636841886346, + "venv/lib/python3.13/site-packages/pydantic/datetime_parse.py": 196119761382305574, + "docs/api/html/group__frontend__src__services__storageService__js____downloadFileUrl.html": 12590721399669422477, + "docs/api/html/group__SupersetCompilationAdapter____dump__json.html": 4226532825538873433, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/strptime.cpython-313-x86_64-linux-gnu.so": 12654188486128938170, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/console.py": 3540660073442483692, + "venv/lib/python3.13/site-packages/pygments/lexers/sieve.py": 15757825442941567629, + "venv/lib/python3.13/site-packages/PIL/ImageMath.py": 7395449734007598797, + "docs/api/html/group____make__sync__config__manager.html": 3168926697873935308, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/test_nat.py": 7400568652984772972, + "venv/lib/python3.13/site-packages/bcrypt/__init__.py": 11415155211917181362, + "backend/src/schemas/__init__.py": 8700952869915187087, + "venv/lib/python3.13/site-packages/pip/_internal/operations/check.py": 16650663913976953800, + "docs/api/html/group__test__migration__dry__run__service__builds__diff__and__risk.html": 8110338995092448857, + "venv/lib/python3.13/site-packages/pandas/core/indexes/range.py": 3838277376774246164, + "docs/api/html/group__build__risks.html": 288765426449485384, + "venv/lib/python3.13/site-packages/numpy/_core/multiarray.pyi": 3494871767602648807, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/mean_.py": 3641008929910474457, + "docs/api/html/group__get__dataset__ids.html": 11409176167791061487, + "docs/api/html/group__GitE2E.html": 5144675262585131661, + "venv/lib/python3.13/site-packages/ecdsa/_compat.py": 13034064768731879065, + "venv/lib/python3.13/site-packages/pydantic/_internal/_utils.py": 10936299012115637790, + "docs/api/html/group__test__log__persistence.html": 9322876502081854485, + "venv/lib/python3.13/site-packages/numpy/lib/stride_tricks.pyi": 5879290708972838025, + "venv/lib/python3.13/site-packages/fastapi/__main__.py": 10755252341326986079, + "docs/api/html/group__SupersetPreviewPipelineTests.html": 7525293242596376133, + "docs/api/html/group__isFeatureEnabled__Function.html": 11649420265376793257, + "docs/api/html/group__get__role__by__name.html": 15153180444289216375, + "docs/api/html/group__APIClient.html": 1707825928665932322, + "docs/api/html/group__HealthMatrix.html": 10134874641663847032, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cosh.csv": 9287774220881887502, + "venv/lib/python3.13/site-packages/pygments/unistring.py": 18037463865539157041, + "docs/api/html/group__ApprovalState.html": 16834628662566561513, + "docs/api/html/group__test__list__runs__success.html": 10465705390005371941, + "venv/lib/python3.13/site-packages/pandas/io/parsers/arrow_parser_wrapper.py": 11745253171984606573, + "docs/api/html/group__compute__dict__snapshot__hash.html": 15191419945274873380, + "venv/lib/python3.13/site-packages/numpy/testing/_private/__init__.pyi": 15130871412783076140, + "venv/lib/python3.13/site-packages/cffi/model.py": 13544803366359102016, + "docs/api/html/group__mock__env__public__Module.html": 11925751473549536485, + "docs/api/html/group__frontend__src__lib__auth__store__ts____AuthState.html": 725779176116101299, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_ufunclike.py": 13752381070039804384, + "venv/lib/python3.13/site-packages/pillow.libs/libjpeg-32d42e18.so.62.4.0": 11717944412021329207, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_isin.py": 11330491145602008796, + "docs/api/html/group__add__translation__job.html": 715901058035169272, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_sh_gcc.h": 3574353221233465215, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_searchsorted.py": 12074107109575676897, + "docs/api/html/group__LLMClient.html": 17661474179652909834, + "venv/lib/python3.13/site-packages/pandas/io/json/_normalize.py": 15938855324762935595, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/interfaces.py": 5371646629319169153, + "venv/lib/python3.13/site-packages/_pytest/_io/saferepr.py": 8025234471485188730, + "frontend/tests/maintenance-api.test.ts": 10196278218740408254, + "backend/src/services/dataset_review/orchestrator_pkg/_helpers.py": 14441258905942300095, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/WHEEL": 2357997949040430835, + "backend/git_repos/remote/test-repo.git/objects/e9/1109abe29d5228675fecd6fc38a097147c090d": 15716642455993350072, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_values.py": 8372572954663628844, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/einsumfunc.py": 9944042006439149561, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/openssl/_conditional.py": 14190849361275154667, + "venv/lib/python3.13/site-packages/pydantic/warnings.py": 5142352784799639092, + "docs/api/html/group__create__remote__repository.html": 1939587202210625796, + "venv/lib/python3.13/site-packages/ecdsa/test_malformed_sigs.py": 2606295770491528880, + "venv/lib/python3.13/site-packages/greenlet/greenlet_allocator.hpp": 11041111583319491309, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_backend.py": 17793139799410518847, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/uts46data.py": 1867240043777383728, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/zip-safe": 15240312484046875203, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth1/authorization_server.py": 6858244712625056421, + "venv/lib/python3.13/site-packages/pandas/plotting/_misc.py": 10202078355301731720, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_ticks.py": 11649965080303468085, + "venv/lib/python3.13/site-packages/pytest/__main__.py": 8747175113746141224, + "docs/api/html/group__test__revoked__key__raises__401.html": 10905401151898512037, + "docs/api/html/group__frontend__src__lib__api__validation__js____fetchTasks.html": 2813676835730064546, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_tolist.py": 8343058000369672317, + "venv/lib/python3.13/site-packages/jose/constants.py": 10880650415673457194, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_base.py": 15292769510056833117, + "venv/lib/python3.13/site-packages/jsonschema/_keywords.py": 949562792260528762, + "docs/api/html/globals_p.html": 5091452083134997558, + "backend/src/core/superset_client/_base.py": 8704044125468217140, + "docs/api/html/group__Select.html": 13106318215518617964, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/errors.py": 12935154705443176852, + "docs/api/html/group__ScheduleSchema.html": 6081468916671081411, + "docs/api/html/group__load__bootstrap__artifacts.html": 12225841342507628272, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Postfix_py.py": 6653895521961110080, + "venv/lib/python3.13/site-packages/numpy/lib/recfunctions.pyi": 10487441680587530350, + "docs/api/html/group__pull__changes.html": 14394506441825881379, + "venv/lib/python3.13/site-packages/numpy/lib/_arrayterator_impl.py": 4037074830103951000, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_hashing.py": 11119284926039008503, + "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/__init__.py": 14268033439436797364, + "venv/lib/python3.13/site-packages/greenlet/greenlet_thread_support.hpp": 7773996382104849037, + "venv/lib/python3.13/site-packages/pydantic/v1/color.py": 14545509649623975912, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_like.pyi": 1968570015765106620, + "venv/lib/python3.13/site-packages/numpy/polynomial/hermite_e.py": 3654583356259850174, + "docs/api/html/group__get__dashboard__detail.html": 10495893496001819056, + "docs/api/html/globals_a.html": 15978428091419449896, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_category.py": 3944898528119364040, + "venv/lib/python3.13/site-packages/numpy/f2py/cfuncs.py": 10803011906582324302, + "venv/lib/python3.13/site-packages/pygments/lexers/bibtex.py": 14652372822443154388, + "venv/lib/python3.13/site-packages/pandas/compat/_constants.py": 3909166275649444824, + "docs/api/html/group__oauth2__scheme__optional.html": 10907588018100611451, + "docs/api/html/group__handleSelectionChange__Function.html": 3955497001431142366, + "docs/api/html/group____pii__imports.html": 1295891648143980104, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_join.py": 1131792466825856990, + "docs/api/html/group__INITIAL__PERMISSIONS.html": 5081007697300821170, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/utils.py": 7707707044867513457, + "docs/api/html/search/functions_3.js": 415719142770932975, + "docs/api/html/navtreeindex20.js": 6185764429877814972, + "venv/lib/python3.13/site-packages/numpy/lib/npyio.pyi": 3212440968296555560, + "docs/api/html/search/all_4.js": 1005255247300836207, + "venv/lib/python3.13/site-packages/sqlalchemy/connectors/aioodbc.py": 2018840826888846321, + "docs/api/html/group__resolve__trusted__policy__snapshots.html": 1966325452563273431, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/array_constructors.pyi": 164538008396001632, + "venv/lib/python3.13/site-packages/pandas/core/indexes/accessors.py": 14394872772838047912, + "frontend/build/_app/immutable/nodes/29.B0pLSJVu.js": 10616222217908613536, + "frontend/build/_app/immutable/chunks/CyXSNadK.js": 14938368543846038343, + "venv/lib/python3.13/site-packages/jose/backends/base.py": 12795468809472351388, + "docs/api/html/group____repo__with__seed__data.html": 17628026577432977931, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/compat.py": 17520043776344667309, + "docs/api/html/group______tests______test__task__logger.html": 3022509304089562027, + "docs/api/html/group__StartCheckRequest.html": 3154093382504996764, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_index_tricks.py": 4676293127859087991, + "venv/lib/python3.13/site-packages/cffi/vengine_cpy.py": 10684192171370688079, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_feather.py": 13613400750755530364, + "venv/lib/python3.13/site-packages/pandas/core/arraylike.py": 11439602957100017713, + "venv/lib/python3.13/site-packages/pip/_internal/models/direct_url.py": 4619204214785230341, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/conftest.py": 16571782049241458769, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_integer.f90": 8308927438994838783, + "docs/api/html/group____build__api__url.html": 12259647430202722901, + "docs/api/html/group__RoleSchema.html": 3555001744310629858, + "venv/lib/python3.13/site-packages/_pytest/config/argparsing.py": 11156052029258891503, + "venv/lib/python3.13/site-packages/pydantic/_internal/_docs_extraction.py": 5210114991139191634, + "venv/lib/python3.13/site-packages/rpds/__init__.pyi": 12037474523494903587, + "venv/lib/python3.13/site-packages/pydantic/v1/version.py": 2758971830527526972, + "venv/lib/python3.13/site-packages/pydantic_core/__init__.py": 10563134104783445328, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_ufunc.py": 669019702416198889, + "docs/api/html/group__test__no__active__events.html": 18077367180380066108, + "venv/lib/python3.13/site-packages/keyring/backends/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/starlette/routing.py": 16063812008141874150, + "docs/api/html/group__test__update__task__success.html": 12948386744398037759, + "venv/lib/python3.13/site-packages/numpy/_core/_multiarray_tests.cpython-313-x86_64-linux-gnu.so": 442168371609469538, + "docs/api/html/group__resolveDashboardRef__Function.html": 11580641610445169138, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_resample_api.py": 3278209206670699265, + "venv/lib/python3.13/site-packages/pycparser/ply/yacc.py": 4218889705926129841, + "frontend/src/routes/settings/git/__tests__/git_settings_page.ux.test.js": 3774268544046391936, + "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/INSTALLER": 17282701611721059870, + "backend/src/plugins/llm_analysis/plugin.py": 11133953577515642529, + "frontend/src/lib/components/dataset-review/__tests__/validation_findings_panel.ux.test.js": 16008187945694980240, + "venv/lib/python3.13/site-packages/pip/_internal/req/req_set.py": 534498057184394558, + "docs/api/html/group__SupersetClientExtractUserDisplay.html": 5365697524336802629, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/__init__.py": 3673322722277252961, + "docs/api/html/group__TranslationRun.html": 13758493070000589779, + "frontend/src/components/MappingTable.svelte": 16339628752309005366, + "venv/lib/python3.13/site-packages/git/repo/base.py": 13975465345838683533, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/METADATA": 10220680536734745103, + "docs/api/html/group__SidebarNavigation__Module.html": 15358237226164093988, + "venv/lib/python3.13/site-packages/pillow.libs/libxcb-64009ff3.so.1.1.0": 7322566017497612912, + "venv/pyvenv.cfg": 2513607356761047446, + "docs/api/html/group__RoutesTestsConftest.html": 1558041571936568459, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/tools.py": 6437315459200419827, + "venv/lib/python3.13/site-packages/pandas/core/computation/parsing.py": 3084943521520476999, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_matmul.py": 9323220618335072725, + "docs/api/html/group__AppModule.html": 7571679846299956443, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_fillna.py": 9297637486401098611, + "docs/api/html/globals_j.html": 16316103223566935047, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/licenses/LICENSE": 13322127602069971876, + "frontend/src/lib/components/layout/__tests__/sidebarNavigation.test.js": 1278883813018181993, + "docs/api/html/group__reflect.html": 5691625797786994210, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/modules/gh25337/data.f90": 13833561828029901615, + "venv/lib/python3.13/site-packages/pygments/lexers/soong.py": 10273453675034306814, + "frontend/src/lib/components/translate/__tests__/test_translation_preview.svelte.js": 2673586123384011532, + "docs/api/html/group__is__adfs__configured.html": 6773671149149811294, + "frontend/src/components/llm/DocPreview.svelte": 14349224708133169902, + "docs/api/html/group__normalize__llm__settings.html": 8684454067738894675, + "docs/api/html/group__src__api.html": 13647182032403294242, + "docs/api/html/search/groups_18.js": 13110703267329058335, + "backend/tests/test_models.py": 14571471179954305607, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/__init__.py": 8558541715982163200, + "venv/lib/python3.13/site-packages/pygments/lexers/shell.py": 3842338968014057744, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/progress.py": 5951745251426856398, + "frontend/src/lib/components/ui/SearchableMultiSelect.svelte": 1872229619122554196, + "docs/api/html/group__websocket__endpoint.html": 5701303797721389053, + "venv/lib/python3.13/site-packages/greenlet-3.3.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/WHEEL": 9788895026336324100, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/__init__.py": 4265012785873472600, + "docs/api/html/group__background__tasks.html": 7187534320763437047, + "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/WHEEL": 16097436423493754389, + "docs/api/html/group__DashboardTypes__Module.html": 17788793500352327911, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_drop_duplicates.py": 5874427993953991216, + "backend/src/plugins/translate/service.py": 12396293729608729912, + "venv/lib/python3.13/site-packages/PIL/ImageMode.py": 2361901066832921091, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_functions.py": 16376319335326812580, + "venv/lib/python3.13/site-packages/psycopg2/errors.py": 10441360078612452560, + "docs/api/html/group__CleanReleaseContracts.html": 13165007053860558990, + "venv/lib/python3.13/site-packages/uvicorn/protocols/http/auto.py": 15947958974558543657, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi": 1846673463183660140, + "docs/api/html/group__DatasetReviewSessionRepository.html": 6205499016168304119, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_string.py": 3834067244989779682, + "venv/lib/python3.13/site-packages/numpy/_core/shape_base.py": 3996519099530770308, + "frontend/build/_app/immutable/chunks/aniH9ONl.js": 11297774342683903539, + "docs/api/html/group__frontend__src__lib__api__validation__js____fetchTask.html": 7928201447544956738, + "docs/api/html/group__uploadFile__Function.html": 2179256576386234524, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_datetime.py": 7456744745424297814, + "docs/api/html/group__test__commit__changes__applies__profile__identity__before__commit.html": 7275902928560381122, + "venv/lib/python3.13/site-packages/pygments-2.19.2.dist-info/WHEEL": 2357997949040430835, + "venv/lib/python3.13/site-packages/pip/_internal/models/pylock.py": 16697828625021519459, + "venv/lib/python3.13/site-packages/pandas/io/formats/__init__.py": 18140261896107421679, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_asof.py": 18383318159051131669, + "backend/src/api/routes/git/_deps.py": 11478430655620147674, + "venv/lib/python3.13/site-packages/numpy/_core/_methods.pyi": 9155045948490225716, + "docs/api/html/group____await__none.html": 14771125371408463258, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/mock.py": 14010776046610111182, + "venv/lib/python3.13/site-packages/_pytest/tmpdir.py": 10834220332037364219, + "venv/lib/python3.13/site-packages/PIL/_typing.py": 17407980360703360848, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/_initialize.py": 15511055314565873928, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_constructors.py": 2786493777737472376, + "docs/api/html/group__AssistantMessageRecord.html": 3626244854239183247, + "docs/api/html/group__ContextAwarePromptBuilder.html": 7714816079153271995, + "frontend/src/components/TaskList.svelte": 17511781335293490363, + "docs/api/html/group__add__log.html": 5531300137956566412, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_cumulative.py": 8178093067175155877, + "docs/api/html/group__get__user__by__id.html": 7396712021803572982, + "docs/api/html/group__AuthRepositoryModule.html": 8460217615305414048, + "models": 14346352665111990852, + "docs/api/html/group____mask__sensitive__text.html": 10707233070284578212, + "docs/api/html/group____get__git__config__or__404.html": 9100308666057061844, + "docs/api/html/group__test__end__not__found.html": 15644048943441130439, + "venv/lib/python3.13/site-packages/dotenv/cli.py": 7952654621986067973, + "docs/api/html/group__test__sync__environment__updates__existing__mapping.html": 5151396558537904785, + "docs/api/html/group__app__middleware.html": 1146307130445661, + "docs/api/html/group__IdMappingService.html": 128548327933737637, + "venv/lib/python3.13/site-packages/fastapi/middleware/__init__.py": 5289703478893407762, + "venv/lib/python3.13/site-packages/numpy/ma/README.rst": 13203411621071845216, + "venv/lib/python3.13/site-packages/fastapi/concurrency.py": 17937688838625807004, + "frontend/src/routes/profile/__tests__/profile-preferences.integration.test.js": 10120412205695269578, + "docs/api/html/group__ComplianceStageBase.html": 5577816396402425153, + "venv/lib/python3.13/site-packages/pydantic/_internal/_schema_generation_shared.py": 23345689300073549, + "docs/api/html/group__GitServiceUrlMixin.html": 4060641084492531477, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ndarrayobject.h": 7320510589635636690, + "docs/api/html/group__handleMappingUpdate__Function.html": 7438288773532136469, + "docs/api/html/group__ConflictResolution.html": 8175611913139451582, + "venv/lib/python3.13/site-packages/numpy/f2py/_backends/_backend.py": 1472021608501071055, + "docs/api/html/group__update__dashboard__layout.html": 2290775089034614539, + "venv/lib/python3.13/site-packages/passlib/tests/backports.py": 17098448557554464521, + "venv/lib/python3.13/site-packages/pygments/lexers/_usd_builtins.py": 8671446144574174964, + "venv/lib/python3.13/site-packages/pydantic/generics.py": 15019381413806459410, + "docs/api/html/group__reject__candidate__endpoint.html": 15716705953047471464, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__ufunc_api.c": 11535375410441493281, + "venv/lib/python3.13/site-packages/authlib/common/errors.py": 16082974228565515177, + "docs/api/html/group__detect__virtual__columns.html": 7311963466156624138, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/numpyconfig.h": 13339221870252345205, + "backend/src/services/dataset_review/orchestrator_pkg/_commands.py": 2554792474786179775, + "venv/lib/python3.13/site-packages/_pytest/_code/code.py": 5248836309618416369, + "docs/api/html/group__get__session__detail.html": 2777345426267776065, + "venv/lib/python3.13/site-packages/authlib/integrations/django_oauth2/requests.py": 6703055041957748929, + "docs/api/html/group____build__chart__template__pool.html": 18077972997939014879, + "docs/api/html/group__DictionaryEntry.html": 16163430495584463690, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py": 8539232219382152238, + "venv/lib/python3.13/site-packages/numpy/exceptions.pyi": 13942486291715303235, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/base_server.py": 9643197259080504542, + "venv/lib/python3.13/site-packages/passlib/tests/test_hosts.py": 8284535274820610802, + "docs/api/html/group__extract__native__filters__from__key__async.html": 5896768597674544567, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/test_is_full.py": 9577318758326279694, + "venv/lib/python3.13/site-packages/pygments/styles/friendly.py": 13799024964803741891, + "docs/api/html/group__SupersetClientExtractNativeFiltersFromKey.html": 15741298745054631643, + "docs/api/html/group____normalize__dashboard__owner__values.html": 5450496100604102874, + "venv/lib/python3.13/site-packages/bcrypt-4.0.1.dist-info/LICENSE": 11167201188673981085, + "docs/api/html/group____sanitize__optional__identity__value.html": 6453024202123093607, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_common.py": 3559416690270529904, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/__main__.py": 6480933938145689964, + "docs/api/html/group__TranslationRunResult.html": 15863382174730965712, + "venv/lib/python3.13/site-packages/pycparser/c_generator.py": 14922277346364091122, + "docs/api/html/group__buildParams__Function.html": 18347180877148300889, + "docs/api/html/group__loadEnvironments__Function.html": 5584041378316217605, + "docs/api/html/group__test__task__manager.html": 16353988531673977488, + "docs/api/html/group__update__global__settings.html": 14939400432665122240, + "docs/api/html/group__ValidationTaskUpdate.html": 5117191705439943824, + "venv/bin/pytest": 2593802493707545818, + "frontend/src/lib/components/health/HealthMatrix.svelte": 18141816318382901531, + "docs/api/html/group____ensure__dataset__review__session__columns.html": 16968513755674644702, + "venv/lib/python3.13/site-packages/authlib/oauth1/__init__.py": 3692257288065292607, + "docs/api/html/group__test__enterprise__policy__missing__prohibited.html": 9934851722239315434, + "docs/api/html/group__MaintenanceApi.html": 10684759386844628447, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/compiler.py": 11662494978292401568, + "venv/lib/python3.13/site-packages/_pytest/reports.py": 13930709338396699351, + "docs/api/html/group__test__repository__rejects__report__overwrite__for__same__report__id.html": 12621310059402333179, + "docs/api/html/group__cancelAssistantOperation__Function.html": 1438697842894474195, + "docs/api/html/group__duplicate__job.html": 4139685743055526761, + "docs/api/html/group__test__create__user.html": 11963320393863284451, + "venv/lib/python3.13/site-packages/psycopg2/_psycopg.cpython-313-x86_64-linux-gnu.so": 13471342289207537479, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_endian.h": 2761502363895204652, + "docs/api/html/group__Counter.html": 5547720716432013609, + "backend/src/core/superset_client/_dashboards_list.py": 18014687561732553425, + "docs/api/html/group__SupersetCompilationAdapter__mark__preview__stale.html": 7887865650371630867, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____setTaskDrawerAutoOpenPreference.html": 8925927322956055906, + "docs/api/html/group____mock__env.html": 6811360979523770361, + "docs/api/html/group__delete__environment.html": 14176437049644341788, + "docs/api/html/group__handleRunDebug__Function.html": 17645482735921964594, + "docs/api/html/group__handleSelectAll__Function.html": 14242974889351038882, + "docs/api/html/group__test__submit__correction__overwrite.html": 5210632411258869706, + "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/__init__.py": 18036348770966744795, + "venv/lib/python3.13/site-packages/pandas/_config/config.py": 1494288055210911451, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval_tree.py": 15789443159423302291, + "docs/api/html/group__Debounce__Module.html": 15506061807938542793, + "docs/api/html/group__test__pull__changes__applies__profile__identity__before__pull.html": 16120757619270766931, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/__init__.py": 14571251344510763303, + "frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js": 10735454478982675155, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/__init__.py": 15130871412783076140, + "backend/src/services/notifications/providers.py": 12802217818475476969, + "backend/git_repos/remote/test-repo.git/hooks/sendemail-validate.sample": 8058833260784074657, + "venv/lib/python3.13/site-packages/numpy/testing/_private/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/bulk_persistence.py": 2307818727114646866, + "docs/api/html/group__ProfileSchemas.html": 17384165309593912417, + "docs/api/html/group__DashboardHub__selectAllColumnFilterValues__Function.html": 12068777279564411579, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__ufunc_api.h": 4516275133897904047, + "venv/lib/python3.13/site-packages/numpy/testing/_private/extbuild.pyi": 18253950285509265097, + "venv/lib/python3.13/site-packages/_pytest/config/__init__.py": 12787579251203510616, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_indexing.py": 4334578480714520407, + "docs/api/html/group__test__happy__path.html": 16218633066560416160, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/_typing.py": 10524021526716767489, + "docs/api/html/group__TestSecurityAuditFixes.html": 9553894818504109298, + "venv/lib/python3.13/site-packages/greenlet/TPythonState.cpp": 12828594265749606443, + "venv/lib/python3.13/site-packages/numpy/linalg/_umath_linalg.pyi": 7674087576653964854, + "venv/lib/python3.13/site-packages/pandas/_libs/json.pyi": 10989301892466547548, + "backend/src/core/utils/superset_context_extractor/_filters.py": 14230663187221307078, + "docs/api/html/group____templates__imports.html": 12808569599321695443, + "venv/lib/python3.13/site-packages/rapidfuzz/_utils.py": 14374663810542207121, + "docs/api/html/group____flush__logs.html": 17794969687461313535, + "docs/api/html/group____json__load__if__needed.html": 17553294735423274387, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/conftest.py": 8406022190801970256, + "docs/api/html/group__test__test__git__config__fails__validation.html": 14329115310381033327, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/style.py": 15214295655795348821, + "venv/lib/python3.13/site-packages/gitpython-3.1.46.dist-info/RECORD": 6187512110158566509, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_function_base.py": 16624804022675533740, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_interval_pyarrow.py": 3849382723890414899, + "backend/src/services/maintenance/_banner_renderer.py": 17250656767428031478, + "docs/api/html/search/functions_f.js": 17213773482888625604, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/timedeltas/test_constructors.py": 17219764538851313252, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/filewrapper.py": 17786759398959482432, + "venv/lib/python3.13/site-packages/numpy/random/bit_generator.pyi": 15790738442952696034, + "docs/api/html/group____get__run__service.html": 2727986697505048178, + "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/array.py": 13040461386712513615, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/utils.py": 8633356372647820801, + "venv/lib/python3.13/site-packages/fastapi/encoders.py": 1914192268055730299, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/__init__.py": 1197579313959289096, + "venv/lib/python3.13/site-packages/pygments/styles/material.py": 14325514369696961874, + "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/RECORD": 4857922668040624663, + "docs/api/html/group__test__candidate__manifest__services.html": 2472733304553637078, + "docs/api/html/navtree.js": 13579380893835360126, + "frontend/src/components/tools/DebugTool.svelte": 8095371084479333656, + "frontend/build/_app/immutable/nodes/16.91GU_ND0.js": 13359394192978348680, + "backend/src/api/routes/assistant/__init__.py": 16856916031113491888, + "venv/lib/python3.13/site-packages/pandas/io/formats/html.py": 11849941990375030601, + "docs/api/html/group__localize.html": 16532518584734972010, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_masm.obj": 11967637259540485652, + "frontend/src/lib/components/assistant/__tests__/assistant_confirmation.integration.test.js": 12582020574293031526, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_dst.py": 12243642467695371088, + "venv/lib/python3.13/site-packages/pygments/lexers/javascript.py": 16869490851285457857, + "venv/lib/python3.13/site-packages/uvicorn/supervisors/__init__.py": 15971002342788501945, + "docs/api/html/group__frontend__e2e__helpers__api__helper__js____apiPut.html": 539702435765100928, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/python3.npy": 4957143805477405905, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/array_from_pyobj/wrapmodule.c": 17333399794446198412, + "docs/api/html/group__TaskRecord.html": 17484476379866416581, + "venv/lib/python3.13/site-packages/cffi-2.0.0.dist-info/WHEEL": 13232065379159720345, + "backend/src/api/routes/__tests__/test_clean_release_v2_release_api.py": 7304392396276280230, + "docs/api/html/group__DictionaryResponse.html": 17051408790475508683, + "venv/lib/python3.13/site-packages/pandas/core/indexes/api.py": 13750417165301467381, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_tz_localize.py": 4937713043686953098, + "docs/api/html/group__run__reject.html": 17845346756984073576, + "docs/api/html/group__TranslationPreviewRecord.html": 12396412092000079349, + "docs/api/html/group__DatasetColumn.html": 6676823301052927790, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/events.py": 10224214051422678828, + "venv/lib/python3.13/site-packages/pygments/lexers/clean.py": 17772169928835025327, + "venv/lib/python3.13/site-packages/numpy/matrixlib/__init__.py": 18402126171936308228, + "docs/api/html/group__SupersetAccountLookupRequest.html": 11189418222429477505, + "docs/api/html/group__ManifestItem.html": 17134684545331977423, + "venv/lib/python3.13/site-packages/numpy/_core/tests/examples/limited_api/meson.build": 8784756284679859367, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_sort_values.py": 834951665649981397, + "venv/lib/python3.13/site-packages/pygments/styles/stata_dark.py": 324072437809944751, + "frontend/src/lib/stores/__tests__/mocks/navigation.js": 16028014574825445651, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/__multiarray_api.h": 16138871162713175599, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_reductions.py": 2816859231048302619, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arraysetops.pyi": 1782641795267171928, + "docs/api/html/group__DashboardProjection.html": 9806475663684458617, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/requests.py": 1102963893193914979, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_fillna.py": 16297834601116528166, + "venv/lib/python3.13/site-packages/pygments/lexers/jsx.py": 13855228003748707341, + "backend/src/schemas/validation.py": 10970778481296603249, + "venv/lib/python3.13/site-packages/pluggy/_callers.py": 1042673447718196223, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/test_as_unit.py": 4283520188709399244, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_polynomial.py": 3049262771098624825, + "docs/api/html/group__APIKeyPrincipal.html": 17508654367012660787, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-sinh.csv": 12358602501260667480, + "venv/lib/python3.13/site-packages/starlette/__init__.py": 3252794766897205870, + "docs/api/html/group__create__branch.html": 8681906529509434557, + "docs/api/html/group____RecordingNetworkClient.html": 10311785607548179860, + "venv/lib/python3.13/site-packages/cffi/cparser.py": 5246372077864988755, + "venv/lib/python3.13/site-packages/pluggy/_warnings.py": 2664977718908223842, + "venv/lib/python3.13/site-packages/passlib/tests/test_handlers.py": 4940305787631493030, + "venv/lib/python3.13/site-packages/gitdb/stream.py": 3035738824550231197, + "docs/api/html/group__main.html": 12159712531135979472, + "venv/lib/python3.13/site-packages/pandas/core/common.py": 14578909424716153057, + "venv/lib/python3.13/site-packages/pydantic/_internal/_schema_gather.py": 3634138701088855517, + "docs/api/html/group____EXT__frontend__AssistantChatTest____Module.html": 3650932694801681064, + "venv/lib/python3.13/site-packages/pandas-3.0.1.dist-info/METADATA": 15658158392301945427, + "docs/api/html/group____extract__dialect.html": 17170247248753677907, + "venv/lib/python3.13/site-packages/pip/_internal/req/req_dependency_group.py": 10505346210114745037, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rename_axis.py": 13193478481758930128, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_json_table_schema_ext_dtype.py": 13021437050542691118, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arrayterator.pyi": 15722265241660279277, + "backend/src/plugins/llm_analysis/scheduler.py": 16461360386665667203, + "backend/src/core/migration_engine.py": 4215834818829537236, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/dtypes/test_empty.py": 6845813091876023610, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/methods/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/secretstorage/collection.py": 17903258621904912493, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_sparc_sun_gcc.h": 2915128971664712180, + "venv/lib/python3.13/site-packages/numpy/core/_multiarray_umath.py": 10973016138581934035, + "docs/api/html/group____latest__publication__for__candidate.html": 3876828569531437570, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__serialize__preview__record.html": 17364001740956652340, + "venv/lib/python3.13/site-packages/starlette/background.py": 10232175205397808417, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_series.py": 2980850649986213051, + "docs/api/html/group__build__distribution__manifest.html": 9519354018984408473, + "venv/lib/python3.13/site-packages/cryptography/x509/extensions.py": 10197248868682803019, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_style.py": 10405592363651914796, + "docs/api/html/group__handleTaskClick__Function.html": 11752031450688903634, + "docs/api/html/search/functions_b.js": 1263949438112498611, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/methods/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pycparser/ast_transforms.py": 9032453625977464506, + "docs/api/html/nav_g.png": 6882746348872232672, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/apps.py": 10758062668702044519, + "docs/api/html/group__MaintenanceStartRequest.html": 13433532661036125704, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/etcd.py": 4078354986605069279, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_m68k_gcc.h": 6580173800099450404, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/block_docstring/foo.f": 2489756567993745076, + "venv/lib/python3.13/site-packages/secretstorage/exceptions.py": 16701299261122689924, + "venv/lib/python3.13/site-packages/authlib/common/urls.py": 13627272625165922482, + "frontend/build/_app/immutable/chunks/Ci0knLe8.js": 727608219162115036, + "docs/api/html/group__get__preview__records.html": 2916851160069655824, + "venv/lib/python3.13/site-packages/charset_normalizer-3.4.4.dist-info/licenses/LICENSE": 13479831069780783137, + "docs/api/html/group__handleViewLogs__Function.html": 3848593199895136202, + "venv/lib/python3.13/site-packages/pandas/core/window/rolling.py": 6316477981414191778, + "venv/lib/python3.13/site-packages/numpy/random/_bounded_integers.cpython-313-x86_64-linux-gnu.so": 16604252871044637047, + "docs/api/html/group__TaskManager.html": 14062251301224084851, + "docs/api/html/search/groups_e.js": 12304992592735263012, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/arrayprint.pyi": 2424868797160722318, + "frontend/playwright-report/trace/codeMirrorModule.DYBRYzYX.css": 14866915564324637173, + "docs/api/html/group__openEditModal__Function.html": 6284886960680022829, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/flatiter.py": 3066469329738423021, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/random/libdivide.h": 5314232500579481313, + "docs/api/html/group__assistantChatStore__tests__Function.html": 434816894896782034, + "venv/lib/python3.13/site-packages/sqlalchemy/inspection.py": 8563914460959280101, + "venv/lib/python3.13/site-packages/pygments/lexers/julia.py": 13516407944275342328, + "venv/lib/python3.13/site-packages/pygments/lexers/graph.py": 10445044822847205061, + "docs/api/html/group__DictionaryImport.html": 17459309263375084602, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/__init__.py": 11121941644106061453, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_replace.py": 8784361132920473760, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____setDirty.html": 6652561854785184600, + "venv/lib/python3.13/site-packages/pip/_internal/commands/list.py": 13035925292530461722, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/revocation.py": 16178499278312777474, + "docs/api/html/group__SupersetClientFetchTotalObjectCount.html": 6342114507024365275, + "venv/lib/python3.13/site-packages/pandas/tests/extension/array_with_attr/__init__.py": 15991623390785635773, + "venv/lib/python3.13/site-packages/websockets-15.0.1.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/__init__.py": 13584649922093198724, + "docs/api/html/group__extract__native__filters__from__permalink__async.html": 7707192445251368687, + "venv/lib/python3.13/site-packages/pillow-12.1.1.dist-info/RECORD": 17545477863793260029, + "venv/lib/python3.13/site-packages/yaml/nodes.py": 3463622922914760653, + "backend/src/models/clean_release.py": 4198911944577810567, + "backend/src/services/clean_release/__tests__/test_report_builder.py": 11856874434357958029, + "backend/src/plugins/mapper.py": 12075913231649127940, + "docs/api/html/docd.svg": 5892816938133793015, + "frontend/test-results/live-project-check.e2e.js--abfe5-project-with-admin-admin123-chromium/video.webm": 10645096005049255831, + "docs/api/html/group__mapping__service.html": 1146234231481143720, + "docs/api/html/group__ExtraFormDataMerge.html": 4791611138331694386, + "docs/api/html/group__DatasetReviewProfileModels.html": 9977462433342924108, + "backend/src/services/profile_preference_service.py": 15980302453836921814, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_iteration.py": 2118501258411211851, + "docs/api/html/group__suggest__mappings.html": 12832332337511809353, + "docs/api/html/search/groups_3.js": 13945080001959834321, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_day.py": 6371851881186970754, + "docs/api/html/group__DashboardItem.html": 6170980058100567138, + "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_builtin_md4.py": 16840174243259839994, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_nep50_promotions.py": 6318578947214302182, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/tree.py": 4991806303236874829, + "docs/api/html/group__VariableKind.html": 14364200722064448242, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_antijoin.py": 14435396877404907826, + "docker/backend.Dockerfile": 3370913626880503214, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/nbit_base_example.pyi": 8571452382806614924, + "docs/api/html/group__ClarificationQuestion.html": 5390726230912714507, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_timedeltas.py": 4118671843063545221, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/totp.py": 11888568940387752607, + "docs/api/html/group__test__get__dashboards__not__found.html": 6573102849582362504, + "docs/api/html/group__test__get__users__page__uses__fallback__endpoint__when__primary__fails.html": 476657279500282456, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_latex.py": 2628895559914914693, + "docs/api/html/group____normalize__term.html": 2393952213994759345, + "venv/lib/python3.13/site-packages/pandas/core/indexers/utils.py": 5861072573716897447, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_indexing.py": 81180636019259296, + "venv/lib/python3.13/site-packages/pandas/core/reshape/melt.py": 14109947554124551986, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_count.py": 16947194157984708529, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_expanding.py": 9047466276603454007, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/period.cpython-313-x86_64-linux-gnu.so": 14468234464367691795, + "venv/lib/python3.13/site-packages/pandas/tests/tools/test_to_numeric.py": 18037815278545274402, + "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pygments/styles/lilypond.py": 12486578704132023691, + "backend/src/services/__tests__/test_llm_provider.py": 14345242680566878510, + "docs/api/html/group__ValidationSchemas.html": 15986503582536227156, + "venv/lib/python3.13/site-packages/pip/_internal/main.py": 13711402795965346761, + "docker/all-in-one.Dockerfile": 10896793266219904099, + "venv/lib/python3.13/site-packages/pycparser/ply/ctokens.py": 1599952198962458730, + "venv/lib/python3.13/site-packages/ecdsa/test_rw_lock.py": 1572802971060634697, + "docs/api/html/group__test__create__git__config__persists__config.html": 1075563316969273922, + "venv/lib/python3.13/site-packages/websockets/http11.py": 11022534176398053082, + "venv/lib/python3.13/site-packages/pip/_internal/__init__.py": 7060345458485901709, + "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/METADATA": 732041908491732594, + "venv/lib/python3.13/site-packages/pip/py.typed": 10243553515949422671, + "venv/lib/python3.13/site-packages/python_multipart/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_arrayobject.py": 13337664596833150958, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/cells.py": 8299309127027168194, + "backend/src/api/routes/git/_gitea_routes.py": 3966408809424419232, + "docs/api/html/group____authorize__intent.html": 14955083261995312080, + "docs/api/html/group__get__mappings.html": 9283879926950218053, + "frontend/src/lib/components/layout/__tests__/test_sidebar.svelte.js": 15166117912533507471, + "venv/lib/python3.13/site-packages/pygments/lexers/foxpro.py": 14032656072384708293, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_update.py": 9098258267671647783, + "docs/api/html/group__Sidebar.html": 9352378737121268807, + "venv/lib/python3.13/site-packages/requests/sessions.py": 6936640856092320928, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Levenshtein.py": 15426828792217499138, + "docs/api/html/group__test__expired__confirmation__cannot__be__confirmed.html": 1867999819644325388, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_scalarinherit.py": 15240535501243623986, + "venv/lib/python3.13/site-packages/passlib/tests/__init__.py": 16543763165305017760, + "venv/lib/python3.13/site-packages/pygments/formatters/_mapping.py": 13335227913146542481, + "backend/git_repos/remote/test-repo.git/config": 14478893374498894766, + "venv/lib/python3.13/site-packages/greenlet/CObjects.cpp": 3454797518210223926, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/cast.py": 342228968652072052, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_datetime.py": 4179112383995346046, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_musllinux.py": 2423350951094915747, + "venv/lib/python3.13/site-packages/jsonschema/cli.py": 9813914882090789748, + "docs/api/html/group__DashboardHub__normalizeOwners__Function.html": 11075995940263529029, + "docs/api/html/group__TestClickHouseEndToEnd.html": 10329259316133049765, + "backend/src/plugins/translate/__tests__/__init__.py": 2490542523242946173, + "venv/lib/python3.13/site-packages/pandas/core/_numba/extensions.py": 4132402557064663751, + "docs/api/html/group__MetricSnapshot.html": 18425939041842608851, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_errors.py": 3301889847545579393, + "docs/api/html/group__TranslateDatasourcesApi.html": 16762087010624520764, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/integration.py": 12670848015915724967, + "venv/lib/python3.13/site-packages/websockets/utils.py": 17624459810483092475, + "docs/api/html/group__SupersetClientSanitizeUserText.html": 6776437542055180978, + "venv/lib/python3.13/site-packages/pydantic/v1/fields.py": 3948219773415054006, + "backend/src/api/routes/assistant/_schemas.py": 17540735345133623114, + "docs/api/html/group__frontend__src__lib__i18n__index__ts______.html": 15852621729962062852, + "venv/lib/python3.13/site-packages/pydantic/root_model.py": 20625057828723317, + "docs/api/html/group__shutdown__event.html": 11840402120515204160, + "venv/lib/python3.13/site-packages/pygments/styles/lovelace.py": 15082819162722685616, + "docs/api/html/group__get__schema.html": 13895060400411219452, + "venv/lib/python3.13/site-packages/PIL/_imagingtk.cpython-313-x86_64-linux-gnu.so": 1708198947135304326, + "backend/src/services/dataset_review/repositories/repository_pkg/_mutations.py": 968076476163114767, + "venv/lib/python3.13/site-packages/pip/_internal/utils/egg_link.py": 18211947508793805393, + "docs/api/html/group__test__parse__dashboard__url__for__filters__native__key__slug__resolution__fails.html": 5436713915568993137, + "venv/lib/python3.13/site-packages/gitdb/util.py": 645937410168583692, + "docs/api/html/group__get__dashboard__thumbnail.html": 4640268631621939949, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/usecols/test_parse_dates.py": 5344929031479212951, + "backend/alembic/versions/8dd0a93af539_drop_deprecated_source_language_column_.py": 3574830605384611294, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/METADATA": 10241403930811743893, + "docs/api/html/group__SupersetDashboardsListMixin.html": 17489314668228618185, + "docs/api/html/group__frontend__src__lib__stores__sidebar__js____toggleMobileSidebar.html": 2764792336812485289, + "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/LICENSE": 16174281248426886206, + "backend/src/api/routes/__tests__/test_tasks_logs.py": 13245318244727271907, + "docs/api/html/group__preview__session__serializer.html": 5685665567268715831, + "docs/api/html/group__get__dictionary.html": 6783587429209921357, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_cli.py": 3173259257428855556, + "venv/lib/python3.13/site-packages/numpy.libs/libscipy_openblas64_-096271d3.so": 14338208504131470036, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/adapter.py": 5908944827805063108, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/WHEEL": 7454950858448014158, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_map.py": 1115471561925426082, + "venv/lib/python3.13/site-packages/pip/_internal/commands/help.py": 4175797322922912326, + "docs/api/html/group__is__multimodal__model.html": 3951793497188229823, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/nattype.pyi": 1830368009811266890, + "venv/lib/python3.13/site-packages/pandas/io/formats/templates/string.tpl": 15796203549130590784, + "docs/api/html/group__OverrideLanguageRequest.html": 1786154171429944136, + "docs/api/html/group__PromoteResponse.html": 6455148757266042889, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_elffile.py": 5728213398707817049, + "docs/api/html/group__updateUploadCategory__Function.html": 17493381273334242237, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_indexing.py": 17106010337164216722, + "venv/lib/python3.13/site-packages/pandas/tests/extension/decimal/__init__.py": 4761936067832638585, + "venv/lib/python3.13/site-packages/pandas/compat/numpy/function.py": 18405870240333383757, + "venv/lib/python3.13/site-packages/pandas/core/indexes/base.py": 496956059910401121, + "venv/lib/python3.13/site-packages/httpx/py.typed": 15130871412783076140, + "docs/api/html/group__test__no__end__time__skipped.html": 6670304755300596026, + "docs/api/html/group__run__enterprise__clean__e2e.html": 6563961649768557058, + "docs/api/html/group__build__stage__run__record.html": 374732547729464177, + "docs/api/html/group__test__already__processed__event.html": 11093851268510393622, + "venv/lib/python3.13/site-packages/pip/_internal/req/__init__.py": 12266077985828139928, + "docs/api/html/group__DatasetReviewEntryUxPageTests.html": 12544802803136468314, + "docs/api/html/graph_legend.dot": 5298420021651416491, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ndarray_misc.pyi": 16219573290116396099, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_timezones.py": 1962830142478494009, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/__init__.py": 6532094538918910232, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/annotation.py": 15855576199737688124, + "docs/api/html/group__DashboardHub__normalizeValidationStatus__Function.html": 6303647604098249484, + "backend/src/services/clean_release/report_builder.py": 14118825155100404762, + "venv/lib/python3.13/site-packages/pygments/lexers/varnish.py": 3608370156692616959, + "docs/api/html/group__TasksSessionLocal.html": 16634222622624891127, + "docs/api/html/globals_func_j.html": 9168488517116821616, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/ccalendar.cpython-313-x86_64-linux-gnu.so": 11019871270094058038, + "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/licenses/LICENSE": 14230156892574098522, + "docs/api/html/group__ValidationPolicy.html": 17809048165198520903, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_constructors.py": 1697610790604400105, + "venv/lib/python3.13/site-packages/pandas/tests/extension/uuid/__init__.py": 15130871412783076140, + "backend/src/plugins/translate/scheduler.py": 13650497976959209825, + "docs/api/html/group____dict__to__response.html": 16049941736309608274, + "venv/lib/python3.13/site-packages/pygments/lexers/functional.py": 15896849233007178031, + "venv/lib/python3.13/site-packages/uvicorn/importer.py": 5449629250971153435, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/websockets/server.py": 16599051743322571790, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/sessions.py": 5400174351499383072, + "docs/api/html/group__ensure__initial__admin__user.html": 9396064717758252856, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/filter.py": 16846063190466267618, + "venv/lib/python3.13/site-packages/referencing/tests/test_retrieval.py": 10782087416909177703, + "venv/lib/python3.13/site-packages/_pytest/recwarn.py": 15312759837838083596, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/markers.py": 8297667990263004097, + "venv/lib/python3.13/site-packages/smmap/mman.py": 9091562788592406032, + "docs/api/html/group__test__get__dashboards__profile__filter__matches__owner__object__payload__contract.html": 13048004686797783316, + "venv/lib/python3.13/site-packages/fastapi/openapi/constants.py": 1111838716953068285, + "docs/api/html/group__test__extract__native__filters__from__key__dict__value.html": 1412362209295645370, + "venv/lib/python3.13/site-packages/numpy/_utils/_pep440.py": 15854257948148516490, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reindex_like.py": 1407890639206728014, + "docs/api/html/group____build__expected__columns.html": 382226139122586930, + "docs/api/html/group__TemplateVariableDto.html": 25487742519419104, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/precision.f90": 5518911932373565642, + "venv/lib/python3.13/site-packages/pyasn1/codec/cer/__init__.py": 15728752901274520502, + "docs/api/html/group__ResourceType.html": 6653107601280859808, + "docs/api/html/group__frontend__e2e__helpers__api__helper__js____getToken.html": 2202102914736726657, + "venv/lib/python3.13/site-packages/pydantic/v1/parse.py": 5875950480538559709, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/numeric.py": 14451517189908259173, + "backend/src/plugins/translate/__tests__/test_dictionary_crud.py": 2458404726842277862, + "docs/api/html/group__isDatasetReviewConflictError__Function.html": 9798021926177492027, + "docs/api/html/group__test__sync__environment__deletes__stale__mappings.html": 11101146135939187286, + "venv/lib/python3.13/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE": 8359973023624924624, + "docs/api/html/group__TaskContextModule.html": 16641711360891107456, + "frontend/src/lib/ui/Icon.svelte": 18238812161544525261, + "venv/lib/python3.13/site-packages/requests/__version__.py": 6677532709758546816, + "venv/lib/python3.13/site-packages/numpy.libs/libquadmath-96973f99-934c22de.so.0.0.0": 5098713761946118139, + "docs/api/html/group__test__get__settings.html": 228135717549408768, + "backend/git_repos/remote/test-repo.git/objects/5d/9eb555c4cac2d3ffdba84c07682b154fe4180d": 10756202165146702691, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7009/__init__.py": 1923528231486706442, + "frontend/build/_app/immutable/nodes/19.Bja4SzOq.js": 6377685339228217285, + "backend/git_repos/remote/test-repo.git/objects/79/b070ad8af7bbc12169f7660d2a7a72ec7a889a": 8153595714065675791, + "docs/api/html/group__CleanReleaseRepository.html": 12202309648342354068, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__DictionaryBatchFilter.html": 14716813921994661678, + "venv/lib/python3.13/site-packages/rapidfuzz/utils.pyi": 7400725037332728015, + "venv/lib/python3.13/site-packages/h11/_abnf.py": 10456996134895429201, + "docs/api/html/group__AppConfig.html": 11574004031912899139, + "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/LICENSE": 6581019367004699816, + "docs/api/html/group__MaintenanceSettings.html": 7078307981035215602, + "docs/api/html/group__docker__backend__entrypoint__install__certificates.html": 18122978905545820697, + "backend/src/api/routes/translate/_correction_routes.py": 9348235443422223333, + "docs/api/html/group__test__get__all__metrics.html": 16314403640662640562, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7516/jwe.py": 10478268710546063196, + "docs/api/html/group__ComplianceExecutionResult.html": 11417659871930501440, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7636/challenge.py": 6388445104761482746, + "docs/api/html/navtreeindex16.js": 883027576628231514, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/linalg.pyi": 7217817172953767893, + "venv/lib/python3.13/site-packages/websockets/legacy/protocol.py": 762692033188392424, + "docs/api/html/group__ReportsRouter.html": 16841333188170208308, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/oracle/vector.py": 9941185556118343263, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-np0-objarr.npy": 1615546603475261360, + "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/METADATA": 3786116428839780263, + "frontend/playwright-report/data/288dba8d36913a1ca2ebbe6ef75a4997ea72bb65.png": 4602930255871194331, + "docs/api/html/group__RemoteRepoSchema.html": 11973800120981189119, + "venv/lib/python3.13/site-packages/numpy/polynomial/tests/test_polynomial.py": 777287409151500309, + "docs/api/html/group__GenerateDocsRequest.html": 10436232842092071054, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_cumulative.py": 15644124412739892167, + "frontend/playwright-report/trace/index.BCnMPevh.js": 8625484717968740943, + "docs/api/html/group__resume__task__with__password.html": 16159660988139123334, + "docs/api/html/group__get__datasource__columns.html": 14552107166235009597, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_insert.py": 6970975909565157982, + "docs/api/html/group__AssistantDatasetReview.html": 12183015005739052037, + "venv/lib/python3.13/site-packages/uvicorn/middleware/asgi2.py": 5355343704425405009, + "docs/api/html/group__toasts__Data.html": 4779111389094535460, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/terminal_theme.py": 13727399800263579809, + "venv/lib/python3.13/site-packages/pandas/_libs/arrays.pyi": 12629806207276576877, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/_compat.py": 4677414058216516380, + "backend/src/api/routes/assistant/_llm_planner.py": 7325833916307204752, + "venv/lib/python3.13/site-packages/PIL/McIdasImagePlugin.py": 14137545069906812251, + "venv/lib/python3.13/site-packages/passlib/tests/_test_bad_register.py": 5446848310854472376, + "docs/api/html/group____make__user.html": 10705276908709984170, + "docs/api/html/group__OrchestratorHelpers.html": 15580278811762324793, + "venv/lib/python3.13/site-packages/referencing/exceptions.py": 2535322334430110414, + "backend/src/scripts/seed_permissions.py": 2299443594185631497, + "venv/lib/python3.13/site-packages/urllib3/util/__init__.py": 2848870790459558599, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/__init__.py": 8924316361489544973, + "venv/lib/python3.13/site-packages/numpy/matlib.pyi": 8017902013455539981, + "docs/api/html/group__test__create__task__missing__fields.html": 14663889192866601882, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/exceptions.py": 2873060848310644552, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_masked.py": 5380551301916549925, + "venv/lib/python3.13/site-packages/PIL/JpegPresets.py": 12342262642420923471, + "venv/lib/python3.13/site-packages/pip/_internal/network/lazy_wheel.py": 12936988990566680659, + "docs/api/html/group__test__update__session__surfaces__commit__time__session__version__conflict__payload.html": 11776750589639859419, + "venv/lib/python3.13/site-packages/greenlet/tests/fail_slp_switch.py": 16490710972475154509, + "docs/api/html/group__t__Store.html": 5003719811547922783, + "docs/api/html/group__EventBus.html": 1131138632704451045, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/errors.py": 12777931960088171310, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reorder_levels.py": 10996225584998355824, + "backend/src/services/profile_service.py": 7050751066987031905, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/__init__.py": 1856412417337875350, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_astype.py": 8505605634958454768, + "docs/api/html/group__AssistantAuditRecord.html": 15859560198913853671, + "venv/lib/python3.13/site-packages/pygments/styles/coffee.py": 17584414468786822371, + "docs/api/html/group__test__tui__f5__dispatches__run__action.html": 799267684182155396, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/asyncio/session.py": 5126234270435358377, + "docs/api/html/group__docker__frontend__entrypoint__install__ca__certificates.html": 8734321705788517662, + "backend/git_repos/remote/test-repo.git/objects/d8/3fe0db1279ef07c4c4f3de4156a629373b4057": 7507193819578792576, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_npy_units.py": 8966226962799105383, + "docs/api/html/group____build__session__version__conflict__http__exception.html": 16116500469408421341, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_concatenate_chunks.py": 9693420220003544490, + "frontend/src/components/EnvSelector.svelte": 6483243153689240649, + "docs/api/html/group__getPermissions__Function.html": 4129456418206064840, + "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_regression.py": 5652583095949741238, + "venv/lib/python3.13/site-packages/requests/models.py": 9104898985870652256, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/errors.py": 4817746830102488448, + "venv/lib/python3.13/site-packages/websockets/asyncio/async_timeout.py": 7267209982032642028, + "venv/lib/python3.13/site-packages/jaraco/classes/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/anyio/pytest_plugin.py": 4165280709813718099, + "docs/api/html/group__DictionaryImportResult.html": 10670594679605704236, + "docs/api/html/group__DistributionManifest.html": 4125661865258730357, + "venv/lib/python3.13/site-packages/pyasn1/codec/streaming.py": 13202773554072937140, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/__init__.py": 5933622200264572885, + "docs/api/html/group__test__get__repository__status__batch__marks__item__as__error__on__service__failure.html": 15089064352958594879, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_tz_localize.py": 14495969595744172955, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/type_api.py": 10299750173867399533, + "venv/lib/python3.13/site-packages/uvicorn/middleware/wsgi.py": 9179913252056394958, + "venv/lib/python3.13/site-packages/gitdb/test/test_pack.py": 7518388297247535189, + "venv/lib/python3.13/site-packages/pygments/lexers/fortran.py": 6859638690245583968, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/fromnumeric.py": 3792079757208879362, + "venv/lib/python3.13/site-packages/numpy/f2py/f90mod_rules.pyi": 18290764713161282980, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_delitem.py": 14336697139511118920, + "venv/lib/python3.13/site-packages/passlib/utils/md4.py": 4521366665754877351, + "venv/lib/python3.13/site-packages/numpy/_core/_struct_ufunc_tests.cpython-313-x86_64-linux-gnu.so": 13269324887178340397, + "venv/lib/python3.13/site-packages/pandas/core/computation/ops.py": 18250656489649699560, + "docs/api/html/group__GitServiceSyncMixin.html": 5716850320253869040, + "docs/api/html/group__create__job.html": 8027737551110382669, + "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/RECORD": 12575893084587070195, + "frontend/src/routes/+layout.ts": 8392799000856778740, + "docs/api/html/group__test__async__network__404__mapping__translates__dashboard__endpoints.html": 11153828192989017659, + "docs/api/html/group__DEFAULT__MAX__OUTPUT__TOKENS.html": 7465573242087549666, + "venv/lib/python3.13/site-packages/pip/_internal/cli/parser.py": 1064209424435927674, + "venv/lib/python3.13/site-packages/pandas/core/strings/__init__.py": 13025387151657797130, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_unicode.py": 1103608932321322989, + "docs/api/html/group__DictionaryManager.html": 10525609506852001360, + "venv/lib/python3.13/site-packages/uvicorn/loops/auto.py": 13086005977087619545, + "docs/api/html/group__test__get__repository__diff__propagates__http__exception.html": 8311817278452456051, + "docs/api/html/group__promote__dashboard.html": 8826303047033817087, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/floating/test_to_numpy.py": 14845850776625255794, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_boxplot_method.py": 7635131059308651529, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_string.py": 15542851215119662814, + "docs/api/html/group__currentPage__Data.html": 5033996641622029546, + "frontend/build/_app/immutable/entry/start.PcCZoI2W.js": 2074623351869032930, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____endAllEvents.html": 3018938932417409550, + "docs/api/html/group____build__preference__response.html": 9896456427595935858, + "frontend/src/lib/stores/datasetReviewSession.js": 12759266804307584180, + "frontend/build/_app/immutable/chunks/D2LDFDH5.js": 1513005501777757570, + "venv/lib/python3.13/site-packages/_pytest/fixtures.py": 1442767529726551116, + "docs/api/html/group__test__extract__native__filters__from__key__single__filter.html": 17303628301397310552, + "docs/api/html/group__TestDictionaryUtils.html": 2864150937588414580, + "venv/lib/python3.13/site-packages/pandas/core/methods/describe.py": 17006836623161521092, + "backend/src/core/migration/archive_parser.py": 16510017196974398795, + "docs/api/html/group__LlmSettings.html": 17767977673670132111, + "docs/api/html/group__test__new__key__only__mode.html": 7530821276868419489, + "venv/lib/python3.13/site-packages/attrs/converters.py": 13109003765349201809, + "docs/api/html/group__RiskAssessorModule.html": 17900668792000979877, + "venv/lib/python3.13/site-packages/referencing/tests/test_jsonschema.py": 9815500901482570619, + "docs/api/html/group__LoggerModule.html": 7322757663720393423, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py3-objarr.npy": 17303060773267383537, + "docs/api/html/group__GitDeps.html": 16624578576304918458, + "docs/api/html/group__DatasetHub.html": 15956774378542048676, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/__init__.py": 371829636800613137, + "venv/lib/python3.13/site-packages/httpx/_transports/__init__.py": 5931944625631942279, + "docs/api/html/group__NetworkModule.html": 8343794053715962544, + "venv/lib/python3.13/site-packages/pip/_internal/commands/wheel.py": 16397273591245583356, + "docs/api/html/group__ApiKeyCreateRequest.html": 14624348983729327471, + "docs/api/html/group__PreviewStatus.html": 7092182377354477188, + "venv/lib/python3.13/site-packages/numpy/linalg/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/diff.py": 5930189593946259160, + "backend/src/core/config_manager.py": 9235726125641848917, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_reshape.py": 5572426834735088916, + "docs/api/html/group__description.html": 1734080948702838188, + "docs/api/html/group__call__openai__compatible.html": 5568369277413456833, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_orm_types.py": 5508682532707462217, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/manifest.py": 16998683210177680416, + "backend/src/core/auth/logger.py": 14366097284329186897, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/__init__.py": 15130871412783076140, + "docs/api/html/group__setAssistantConversationId__Function.html": 7465015029614231837, + "docs/api/html/group__TestSupersetProfileLookup.html": 8558198565478717735, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated": 11193150813314469394, + "venv/lib/python3.13/site-packages/numpy/strings/__init__.pyi": 6213864891045042045, + "backend/src/plugins/llm_analysis/models.py": 7637744212927477541, + "docs/api/html/group__DashboardHub__getSortIndicator__Function.html": 2447268847448159799, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_misc.py": 16393451200513733144, + "docs/api/html/group__test__sync__network__404__mapping__translates__dashboard__endpoints.html": 1260303454387268885, + "venv/lib/python3.13/site-packages/pandas/core/internals/__init__.py": 1377108808392195313, + "venv/lib/python3.13/site-packages/idna-3.11.dist-info/RECORD": 11541505360973709787, + "docs/api/html/group__TestDictionaryLegacyHub.html": 9545067935919622524, + "venv/lib/python3.13/site-packages/pandas/core/ops/common.py": 17314999825118928100, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/bazaar.py": 5630511062945201327, + "venv/lib/python3.13/site-packages/numpy/_core/function_base.py": 5676611841071163854, + "venv/lib/python3.13/site-packages/pandas/tseries/offsets.py": 13750652921710295115, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/generic.py": 17755579497690180620, + "venv/lib/python3.13/site-packages/sqlalchemy/event/base.py": 18238453132776154057, + "venv/lib/python3.13/site-packages/pygments/lexers/_googlesql_builtins.py": 12251289884604745945, + "docs/api/html/group__StaticFiles.html": 11218723552719220007, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/resultproxy.cpython-313-x86_64-linux-gnu.so": 6011605826065363427, + "frontend/src/routes/storage/repos/+page.svelte": 2273592022555593164, + "backend/src/api/routes/assistant/_resolvers.py": 5636628127798453486, + "backend/src/plugins/translate/_token_budget.py": 13508548690925198562, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_ujson.py": 12184194085993665945, + "docs/api/html/group__BuildManifestRequest.html": 4763470685395243475, + "docs/api/html/group__test__cli__release__gate__commands__scaffold.html": 4903992815060946212, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/padding.py": 7470483648602195268, + "venv/lib/python3.13/site-packages/numpy/rec/__init__.py": 7467092880535460658, + "backend/src/schemas/dataset_review_pkg/_dtos.py": 10114042767789130927, + "docs/api/html/group____make__config__manager.html": 7005648573888953729, + "venv/lib/python3.13/site-packages/numpy/linalg/__init__.py": 15647756307608142577, + "venv/lib/python3.13/site-packages/pandas/io/excel/_odswriter.py": 17220892094904423676, + "venv/lib/python3.13/site-packages/authlib/deprecate.py": 3563885283090710443, + "backend/src/core/task_manager/lifecycle.py": 1696300129247014205, + "docs/api/html/group__FindingSeverity.html": 10603170265602472688, + "docs/api/html/group__MaintenanceOrchestrators.html": 18097597528748465937, + "venv/lib/python3.13/site-packages/numpy/linalg/tests/test_linalg.py": 2939739913218718132, + "docs/api/html/globals_q.html": 11227781208567450336, + "venv/lib/python3.13/site-packages/pydantic_settings-2.13.0.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/random/__init__.pxd": 7355772669172093814, + "venv/lib/python3.13/site-packages/requests-2.32.5.dist-info/RECORD": 9678861487447993169, + "docs/api/html/group__LogEntry.html": 3138617379009952451, + "docs/api/html/group__TaskManagerPackage.html": 14112772634468690362, + "venv/lib/python3.13/site-packages/numpy/random/_examples/cffi/extending.py": 9859383893070793914, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timedelta/test_formats.py": 18080627205081311773, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/plugin.py": 16042078006552521613, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_highlight.py": 7573043358244876807, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/dml.py": 5340326603935367534, + "docs/api/html/group__DATABASE__URL.html": 863413084908346717, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/pkcs7.pyi": 2777456956260371820, + "venv/lib/python3.13/site-packages/pydantic/mypy.py": 10034028441785588819, + "venv/lib/python3.13/site-packages/pydantic/_internal/_model_construction.py": 694471028676746110, + "frontend/src/components/git/GitManager.svelte": 13371816170978247457, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/frequencies/test_freq_code.py": 13758353172962109140, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming.pyi": 4432290176776357346, + "docs/api/html/topics.js": 6653823426024009041, + "backend/src/api/routes/datasets.py": 3167720733470487965, + "docs/api/html/group__DashboardHub__getGitSummaryLabel__Function.html": 2221712068669890122, + "docs/api/html/group__get__llm__status.html": 4661440239824290304, + "venv/lib/python3.13/site-packages/pygments/lexers/berry.py": 4540479522141160472, + "docs/api/html/search/groups_17.js": 7938088704885798457, + "docs/api/html/group__LLMAnalysisScheduler.html": 3957615184107530467, + "venv/lib/python3.13/site-packages/pycparser/c_ast.py": 5942107079119742, + "backend/git_repos/remote/test-repo.git/objects/00/fcf77cecdf261aef91eda792ab3384a3339922": 1527330822006618217, + "backend/src/services/git_service.py": 12429116089116885657, + "docs/api/html/group__fetch__datasource__metadata.html": 12758308588265556383, + "docs/api/html/group__test__git__service__init__repo__reclones__when__path__is__not__a__git__repo.html": 3825554148900324930, + "docs/api/html/group__test__lookup__superset__accounts__env__not__found.html": 13190978675041730982, + "venv/lib/python3.13/site-packages/numpy/_typing/_scalars.py": 17701938912160369190, + "docs/api/html/group____resolve__provider__id.html": 8297130391733338866, + "venv/lib/python3.13/site-packages/pygments/lexers/capnproto.py": 15713281507099411738, + "venv/lib/python3.13/site-packages/authlib/consts.py": 14226604841596736870, + "venv/lib/python3.13/site-packages/smmap/test/test_buf.py": 6910367739329016619, + "venv/lib/python3.13/site-packages/httpcore/_sync/__init__.py": 7676937747094511752, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_accessor.py": 10074496835594855786, + "venv/lib/python3.13/site-packages/pandas/core/arrays/period.py": 11560984428402318984, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/core/reshape/api.py": 16364136812252343076, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_partial.py": 15129217814262096441, + "docs/api/html/group__getAssistantConversations__Function.html": 7365056083389809503, + "docs/api/html/group__get__all__plugin__configs.html": 14923346516628235508, + "frontend/build/_app/immutable/nodes/36.CGo72rZZ.js": 9214701916561283615, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py": 8530403239168529668, + "frontend/build/_app/immutable/chunks/Bz99hFgy.js": 2788010001753617987, + "backend/src/plugins/translate/preview_executor.py": 11680052270975606699, + "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/licenses/LICENSE": 1126906383149772681, + "docs/api/html/group__TaskLoggerModule.html": 11856387495799127523, + "docs/api/html/group__test__belief__scope__error__handling.html": 17275160222893974318, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/arraypad.pyi": 12178766981280242620, + "docs/api/html/group__DEFAULT__LLM__PROMPTS.html": 7412466426050075586, + "docs/api/html/group__cot__log__function.html": 609040572561257151, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_polynomial.pyi": 9134949577567498894, + "venv/lib/python3.13/site-packages/pandas/_libs/lib.pyi": 3049004444338566197, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/test_to_markdown.py": 9964642152916165317, + "venv/lib/python3.13/site-packages/pygments/formatters/groff.py": 6480830447984073574, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/asyncio.py": 11442130378027628520, + "docs/api/html/group__update__git__config.html": 5484250484604366906, + "venv/lib/python3.13/site-packages/keyring/core.py": 2764269590123131634, + "venv/lib/python3.13/site-packages/numpy/_core/tests/_natype.py": 12013743717306900860, + "docs/api/html/group__get__datasets.html": 5086430945264562862, + "backend/src/services/git/_base.py": 18009686862342149948, + "backend/src/services/clean_release/facade.py": 4588791439430238149, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/assignOnlyModule.f90": 15967199601254912096, + "docs/api/html/group__get__app__timezone.html": 1707039123202823020, + "backend/src/core/database.py": 13971080974850727511, + "docs/api/html/globals_func_r.html": 4828713620959168383, + "venv/lib/python3.13/site-packages/pydantic-2.12.5.dist-info/RECORD": 4487477737768669516, + "venv/lib/python3.13/site-packages/pygments/lexers/typoscript.py": 6706632522710582762, + "venv/lib/python3.13/site-packages/dateutil/tz/tz.py": 5258008267965780817, + "docs/api/html/search/groups_5.js": 8198735349335934773, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_matmul.py": 16169282225324014901, + "venv/lib/python3.13/site-packages/pip/_internal/pyproject.py": 6155748929233245415, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/certs.py": 13366788049827102313, + "docs/api/html/group__test__storage__settings__endpoint__shape.html": 7615304938869259368, + "venv/lib/python3.13/site-packages/pygments/lexers/ml.py": 7510453371068494792, + "docs/api/html/dir_bff1a75f97c7ace650ee0c8d57d0aaa5.js": 14348227999396735008, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_utils.pyi": 12312677132342982866, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_utils.pyi": 3708905060001289515, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_common.f": 5913807803369559749, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/__init__.py": 15130871412783076140, + "docs/api/html/group____project__dashboard__response__items.html": 4840220165425219906, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_selectable_constructors.py": 84919308502240880, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/data_multiplier.f": 13432803601367981068, + "venv/lib/python3.13/site-packages/pandas/tests/generic/__init__.py": 15130871412783076140, + "docs/api/html/group__SupersetContextTemplatesMixin____extract__primary__jinja__identifier.html": 13395638216145831396, + "docs/api/html/group__TestDictionaryCRUD.html": 909187372871752623, + "backend/src/models/git.py": 9387561498910534118, + "venv/lib/python3.13/site-packages/authlib/common/security.py": 2291133227104016684, + "backend/src/models/maintenance.py": 7247376865754977732, + "docs/api/html/group__sync__permission__catalog.html": 4976963130726233994, + "docs/api/html/group__test__delete__task__with__runs__flag.html": 3543661419042224408, + "docs/api/html/group____record__session__event.html": 3602405687107437058, + "venv/lib/python3.13/site-packages/pip/_internal/utils/misc.py": 17461379236189029253, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/datasource.pyi": 80441145804744162, + "frontend/build/_app/immutable/assets/9.tn0RQdqM.css": 15130871412783076140, + "backend/src/services/clean_release/repositories/artifact_repository.py": 7507938934134519998, + "venv/lib/python3.13/site-packages/pandas/core/reshape/merge.py": 300205528811693975, + "docs/api/html/group__TaskReport.html": 7520791941174149444, + "venv/lib/python3.13/site-packages/pluggy-1.6.0.dist-info/METADATA": 13695483537390128881, + "venv/lib/python3.13/site-packages/rsa/pem.py": 3118524021576082054, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/token.py": 4161760290367932793, + "venv/lib/python3.13/site-packages/numpy/lib/_ufunclike_impl.pyi": 9854069702366900663, + "venv/lib/python3.13/site-packages/uvicorn/lifespan/on.py": 2866195356090164296, + "docs/api/html/group__sidebar__Store.html": 2096791117586109991, + "docs/api/html/group__frontend__src__services__git__utils__js____stageBadgeClass.html": 563611682311771515, + "docs/api/html/group__ExecutionMappingReview.html": 13336104515329815272, + "venv/lib/python3.13/site-packages/pandas/tests/io/test_html.py": 12040484325988635032, + "docs/api/html/group____update__confirmation__state.html": 4308473508764835316, + "venv/lib/python3.13/site-packages/pandas/tests/generic/test_generic.py": 1297407268239966429, + "docs/api/html/group__navigateUp__Function.html": 14835818415678519228, + "backend/git_repos/remote/test-repo.git/refs/heads/feature/test": 7714224145564125988, + "docs/api/html/group__authStore__Store.html": 7614884214374261421, + "docs/api/html/group__BatchApproveSemanticRequest.html": 5571958815851650821, + "docs/api/html/group__SidebarNavigationTest__Module.html": 17269318974786788900, + "venv/lib/python3.13/site-packages/numpy/lib/_twodim_base_impl.pyi": 15509415708991012734, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_pairwise.py": 2673370322448160842, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/roles.py": 5448455900674232810, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_client/__init__.py": 9997757256282720103, + "venv/lib/python3.13/site-packages/packaging/py.typed": 15130871412783076140, + "docs/api/html/group__test__reject__then__publish__is__blocked.html": 6737257066366586136, + "venv/lib/python3.13/site-packages/PIL/_imagingcms.cpython-313-x86_64-linux-gnu.so": 15198265718775753589, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/sphinxext.py": 2403717774564798878, + "docs/api/html/group__SupersetClientAuthenticate.html": 14826114222268403337, + "venv/lib/python3.13/site-packages/cryptography/fernet.py": 10137792148038140630, + "docs/api/html/group__test__patch__dashboard__metadata__replaces__dataset__ids.html": 1839137190249919532, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/util/compat.py": 16148553252010089561, + "venv/lib/python3.13/site-packages/passlib/crypto/des.py": 14699826058580193499, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test__datasource.py": 1747755531265478106, + "venv/lib/python3.13/site-packages/keyring/backends/Windows.py": 4103830951042463184, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_drop.py": 15751236355035730554, + "venv/lib/python3.13/site-packages/keyring/util/__init__.py": 9635016046220094473, + "frontend/build/favicon.svg": 6451919037497541980, + "docs/api/html/group__get__users__page.html": 9763104845120484996, + "docs/api/html/group__TranslationEventLog.html": 8646269919159445552, + "docs/api/html/group__ViolationCategory.html": 7515224565172006703, + "venv/lib/python3.13/site-packages/apscheduler/triggers/cron/expressions.py": 8015786996064244656, + "venv/lib/python3.13/site-packages/ecdsa/util.py": 10543788809724099209, + "docs/api/html/group__ensure__banner__chart.html": 16144864453932921383, + "frontend/src/lib/ui/PageHeader.svelte": 16740944781208407079, + "docs/api/html/group____find__dashboard__id__by__slug.html": 4034569905177392135, + "venv/lib/python3.13/site-packages/gitdb/db/__init__.py": 2615504918450276693, + "docs/api/html/group__test__start__end__time__before__start.html": 18093529765348516001, + "docs/api/html/group__DashboardHub__getFilterOptions__Function.html": 17463321849622099527, + "backend/src/api/__init__.py": 5287505122015708040, + "docs/api/html/group__push__changes.html": 8985338630049484293, + "docs/api/html/group__DebugToolPage.html": 15312548458590735605, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6750/validator.py": 11486125578281617670, + "venv/lib/python3.13/site-packages/pydantic/v1/generics.py": 1150594223414883339, + "docs/api/html/group__DeploymentEnvironmentSchema.html": 3378454771345026670, + "backend/src/core/auth/config.py": 205969007784846720, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/__init__.py": 15735839022111230173, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/util.py": 4815334059917765852, + "docs/api/html/group__TestMigrationEngine.html": 2873879812846856614, + "venv/lib/python3.13/site-packages/pygments/lexers/dylan.py": 16246299896150112270, + "venv/lib/python3.13/site-packages/authlib/integrations/sqla_oauth2/client_mixin.py": 17980753662107479779, + "docs/api/html/group__SupersetCompatibilityMatrixTests.html": 12258937098540314692, + "docs/api/html/group__editEnv__Function.html": 10218410065986469503, + "docs/api/html/group__test__get__dashboard__thumbnail__success.html": 9479616945914668390, + "docs/api/html/group__DEFAULT__EXECUTION__PROMPT__TEMPLATE.html": 4059085208364710234, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/memmap.pyi": 15629663272474054909, + "venv/lib/python3.13/site-packages/pandas/core/generic.py": 10174952306641057447, + "venv/lib/python3.13/site-packages/pandas/util/_exceptions.py": 14426860079366867683, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_getitem.py": 8414677531950073373, + "docs/api/html/group__TestPolicyResolutionService.html": 11614920422741434476, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_tz_convert.py": 13349243029437881949, + "docs/api/html/group__test__mixed__active__and__completed.html": 13263869066783777040, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/licenses/COPYING": 15270149301471737292, + "backend/git_repos/remote/test-repo.git/HEAD": 12394318939628232491, + "docs/api/html/group__profile__preference__service.html": 11536607414856501254, + "venv/lib/python3.13/site-packages/sqlalchemy/pool/__init__.py": 4337679908168515343, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/version.py": 14723293207188512766, + "docs/api/html/group__merge__spec.html": 1755088978549667893, + "venv/lib/python3.13/site-packages/authlib/oidc/registration/__init__.py": 9448552677419908109, + "venv/lib/python3.13/site-packages/pandas/io/json/_table_schema.py": 3103776773020058805, + "venv/lib/python3.13/site-packages/pandas/tseries/api.py": 14785127136180503704, + "venv/lib/python3.13/site-packages/PIL/ImageTransform.py": 7825940907094338808, + "venv/lib/python3.13/site-packages/uvicorn/_compat.py": 2593000889619875759, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/redis.py": 11313520438600819390, + "venv/lib/python3.13/site-packages/greenlet/tests/leakcheck.py": 10179165748538820557, + "venv/lib/python3.13/site-packages/numpy/matrixlib/__init__.pyi": 1942236362568669510, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/tzconversion.pyi": 10947021928755741366, + "frontend/e2e/run-e2e.sh": 8106714116467101372, + "docs/api/html/group__TestTranslateSchedulerExecution.html": 685214232569505268, + "docs/api/html/group__handleBulkDelete__Function.html": 2943774690774667491, + "backend/tests/test_smoke_plugins.py": 8608573120580623257, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/highlighter.py": 10615901258492570740, + "venv/lib/python3.13/site-packages/numpy/lib/_version.pyi": 10804755840730584157, + "docs/api/html/group__ReleaseCandidate.html": 17443285489751037523, + "venv/lib/python3.13/site-packages/fastapi/staticfiles.py": 4094330072433302614, + "venv/lib/python3.13/site-packages/psycopg2/pool.py": 8855184580138330938, + "venv/lib/python3.13/site-packages/pandas/_config/dates.py": 3863381688916127265, + "docs/api/html/group__MaintenanceFailedDashboard.html": 17647303195778429767, + "docs/api/html/group__MappingModels.html": 5347446187914937942, + "venv/lib/python3.13/site-packages/starlette/concurrency.py": 9835859079437525910, + "venv/lib/python3.13/site-packages/pygments/lexers/ezhil.py": 10294520768762308887, + "backend/tests/test_storage_config.py": 14773544217703363468, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/filters/__init__.py": 835924536855006596, + "docs/api/html/group__loadRepositoryStatuses__Function.html": 16252993742945396544, + "docs/api/html/group__DEFAULT__CONTEXT__WINDOW.html": 14468316197072801713, + "docs/api/html/group____serialize__run__context.html": 12922073506719689996, + "docs/api/html/group__MappedFields.html": 12079507314876337159, + "venv/lib/python3.13/site-packages/sqlalchemy-2.0.45.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__RoleUpdate.html": 5923007426428235445, + "docs/api/html/group____FakeSession.html": 16348083183205532802, + "docs/api/html/group__ROUTES__DIR.html": 11229403533330790472, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-objarr.npz": 9481735723557962988, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_protocols.py": 5019018645804313814, + "venv/lib/python3.13/site-packages/dateutil/tz/__init__.py": 9617254832690762236, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/scrypt.py": 15294662527620994511, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_equals.py": 9903250467264848187, + "docs/api/html/group__test__capabilities__question__returns__successful__help.html": 13279217848598726597, + "venv/lib/python3.13/site-packages/pyasn1/type/univ.py": 7163437624197683039, + "docs/api/html/group__test__get__dialect__from__database.html": 18388157090569434819, + "docs/api/html/group__TermCorrectionSubmit.html": 15931221897139852522, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/test_xlsxwriter.py": 8445547874832015203, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/testing.pyi": 9317922890783549326, + "docs/api/html/group__ViolationSeverity.html": 6547432338145120005, + "frontend/src/lib/components/dataset-review/ExecutionMappingReview.svelte": 17593699210431624897, + "venv/lib/python3.13/site-packages/anyio/_backends/__init__.py": 15130871412783076140, + "docs/api/html/group__get__assistant__audit.html": 12289421674798192339, + "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/__init__.py": 17630019785411546070, + "venv/lib/python3.13/site-packages/_pytest/compat.py": 10046464101087327473, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/box.py": 14303526978791498662, + "docs/api/html/group__test__root__path__is__string.html": 16492802671590347100, + "backend/src/plugins/translate/orchestrator.py": 6762154654706349158, + "docs/api/html/group____get__profile__filter__binding.html": 4542513203441105089, + "venv/lib/python3.13/site-packages/numpy/_core/getlimits.pyi": 15746478550640231553, + "docs/api/html/group__MigrationStatus.html": 182423064358330923, + "venv/lib/python3.13/site-packages/PIL/_imagingtk.pyi": 18222325750818585549, + "docs/api/html/group__MapperPlugin.html": 5002883678765248833, + "docs/api/html/group__CleanReleaseCliScript.html": 9859420981765754979, + "docs/api/html/group__TranslatePlugin.html": 3645253746992049971, + "docs/api/html/group__test__connection.html": 1381382283167612811, + "venv/lib/python3.13/site-packages/pandas/_libs/byteswap.pyi": 6723628093359375823, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/hybrid.py": 5793056975404534989, + "venv/lib/python3.13/site-packages/charset_normalizer/legacy.py": 1706599349563920562, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_alpha_unix.h": 2759424570606117942, + "docs/api/html/group__ActivityTestModule.html": 550457699042373901, + "venv/lib/python3.13/site-packages/pandas/tests/reductions/__init__.py": 16150188643076000414, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/plugin.py": 18006138132596504101, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_tz_convert.py": 77283525137564255, + "venv/lib/python3.13/site-packages/pygments/lexers/_sourcemod_builtins.py": 11809503654078535014, + "docs/api/html/group__ApprovalService.html": 5375853220886231078, + "docs/api/html/group__list__files.html": 13944554477611206786, + "docs/api/html/group__frontend__src__lib__stores__datasetReviewSession__js____getSessionUiPhase.html": 8539042222924950819, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/dtype.pyi": 465999539608816848, + "venv/lib/python3.13/site-packages/pandas/tests/libs/test_hashtable.py": 7762405492052106717, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py": 6067836157632573182, + "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/METADATA": 15987199384245264478, + "venv/lib/python3.13/site-packages/greenlet/tests/test_generator.py": 14156412320760444199, + "venv/lib/python3.13/site-packages/jsonschema-4.25.1.dist-info/METADATA": 4954909612926293404, + "docs/api/html/group__UserDashboardPreference.html": 6859297743426015504, + "docs/api/html/group__create__markdown__chart.html": 4622906128741204576, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/parameter/constant_compound.f90": 15012692484070385863, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_indexing.py": 5910217172351020811, + "docs/api/html/group__runTask__Function.html": 7728857557116934185, + "venv/lib/python3.13/site-packages/PIL/BmpImagePlugin.py": 16682567630621529903, + "docs/api/html/group__build__security__summary.html": 9447535612374879505, + "frontend/src/lib/stores/__tests__/mocks/environment.js": 3065694655373335793, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_invalid.py": 2762344062554575805, + "venv/lib/python3.13/site-packages/ecdsa/_rwlock.py": 7971972922423146201, + "venv/lib/python3.13/site-packages/uvicorn/workers.py": 7213290478118197047, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval_range.py": 9900908262700749861, + "docs/api/html/group__WebSocketLogHandler______init____.html": 6496043986001513744, + "venv/lib/python3.13/site-packages/attr/_make.py": 2348458829123990579, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/cli/hiworld.f90": 6321872653169140461, + "venv/lib/python3.13/site-packages/pandas/core/arrays/arrow/extension_types.py": 1856757457657310231, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/conftest.py": 13388202260795998613, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/hooks.py": 8580161128344266243, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/mod.pyi": 10591120373577657317, + "venv/lib/python3.13/site-packages/numpy/core/_dtype.py": 2806449741844148191, + "venv/lib/python3.13/site-packages/pydantic/color.py": 1007422551673129827, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/base_class/test_where.py": 16584772339591698754, + "venv/lib/python3.13/site-packages/ecdsa/test_curves.py": 6577762025900435885, + "examples/maintenance-api-bash.sh": 674396824183793987, + "docs/api/html/group__build__partial__recovery__findings.html": 14829932052677515671, + "docs/api/html/group__BranchCreate.html": 4283325077168876664, + "backend/src/core/__tests__/test_throttled_scheduler.py": 3526995607557121417, + "venv/lib/python3.13/site-packages/pygments/lexers/pascal.py": 5992422120590352714, + "docs/api/html/group__AuthSecurityModule.html": 3598351476195431872, + "docs/api/html/group__ClarificationStateResponse.html": 8085920956673403769, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/parameters.py": 247312908510013930, + "venv/lib/python3.13/site-packages/dotenv/main.py": 7408889670575271484, + "venv/lib/python3.13/site-packages/pydantic/v1/annotated_types.py": 12925825196690299531, + "docs/api/html/group__build__default__stages.html": 1764973272728108457, + "backend/src/api/routes/translate/_run_list_routes.py": 11620203305409913352, + "venv/include/site/python3.13/greenlet/greenlet.h": 16216120538647882082, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_arrow_interface.py": 5231449831607036031, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_groupby.py": 12709199432838648700, + "venv/lib/python3.13/site-packages/pygments/formatters/latex.py": 7514533384468139434, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/common_with_division.f": 13517753924061311074, + "docs/api/html/group__test__get__merge__status__returns__service__payload.html": 5423320726769507497, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/immutabledict.pxd": 13413785818999584986, + "docs/api/html/group__ApprovalDecision.html": 2897407194180760694, + "docs/api/html/group____validate__environment.html": 5948694607401903979, + "docs/api/html/group__ImportArtifactsRequest.html": 9466947930245217230, + "venv/lib/python3.13/site-packages/pip/_internal/vcs/versioncontrol.py": 13742159245132241245, + "docs/api/html/group__test__transform__zip__invalid__path.html": 6265988318849736978, + "venv/lib/python3.13/site-packages/numpy/_core/numeric.py": 12261531924304979741, + "venv/lib/python3.13/site-packages/numpy/_typing/_nested_sequence.py": 7827259347937485408, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_color.py": 3700828402084646308, + "frontend/src/assets/svelte.svg": 13872699371039797074, + "docs/api/html/group__frontend__src__services__adminService__js____createRole.html": 8909533477901199154, + "docs/api/html/group__reload__validation__policy.html": 6168739793611833472, + "docs/api/html/group__AdaptiveBatchSizer.html": 3807050557665810980, + "venv/lib/python3.13/site-packages/keyring/backends/libsecret.py": 11621088556661567306, + "docs/api/html/group__test__is__multimodal__model__emits__warning.html": 11946987825238879999, + "backend/src/api/routes/assistant/_dataset_review_dispatch.py": 555136946286235411, + "docs/api/html/group__test__persist__task__new.html": 15843661225530940640, + "backend/src/services/dataset_review/event_logger.py": 8944052747593678117, + "dist/docker/backend.0.1.0.tar.xz": 3591917885965226179, + "docs/api/html/group__delete__session.html": 5324305490692827144, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/util.py": 387985965709546512, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/test_formats.py": 2743326139283991615, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_argsort.py": 7320661835159648143, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi": 14119032813912827271, + "backend/src/plugins/translate/__tests__/test_preview.py": 13201708414970983394, + "docs/api/html/group__TestAPIKeyModel.html": 8065083023674038153, + "venv/lib/python3.13/site-packages/pygments/formatters/irc.py": 2133711525226123259, + "backend/src/api/routes/assistant/_command_parser.py": 4551109710541212154, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/conftest.py": 9673372914396625461, + "docs/api/html/group__API__Routes.html": 3741949103355825147, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/generate_umath_validation_data.cpp": 10880681943327843928, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_isocalendar.py": 5704842983090753914, + "frontend/src/lib/utils/debounce.js": 11611676161433422398, + "docs/api/html/group__SupersetUserProjection.html": 4661710962417506510, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_month.py": 14597470286884431085, + "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/licenses/COPYING": 14459782230785388765, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_combine.py": 16193618152415684421, + "venv/lib/python3.13/site-packages/cffi/ffiplatform.py": 6782148110863549472, + "docs/api/html/group__GitHelpers.html": 3500975807832633271, + "venv/lib/python3.13/site-packages/numpy/lib/scimath.py": 7616377937400918724, + "venv/lib/python3.13/site-packages/pandas/core/ops/invalid.py": 10186546927135277579, + "docs/api/html/group__ExecutionMappingDto.html": 13993327359271368811, + "docs/api/html/group__run__checks.html": 17159795815287064770, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_tzconversion.py": 7205566353454584259, + "venv/lib/python3.13/site-packages/pygments/lexers/numbair.py": 17382646010399794697, + "docs/api/html/group__test__filters__existing__keys.html": 12141627945650887732, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_astype.py": 4854809596041987380, + "docs/api/html/group__ReportBuilder.html": 16300601000239313366, + "venv/lib/python3.13/site-packages/pandas/io/parquet.py": 14415622950469421518, + "docs/api/html/group__test__get__dashboard__tasks__history__sorting.html": 2186049035541654238, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_assert_attr_equal.py": 5612259834202470413, + "docs/api/html/group____validate__provider.html": 10145375276233333598, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/filepost.py": 16698380375728063923, + "docs/api/html/group__MaintenanceBannerRenderer.html": 6099946816052023316, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/test_common.py": 9097104320321411408, + "docs/api/html/group__EffectiveProfileFilter.html": 17635576406887586988, + "venv/lib/python3.13/site-packages/pydantic_settings/sources/providers/dotenv.py": 5872848911499749500, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/scalar_string.f90": 15018631706178918578, + "docs/api/html/search/mag_sel.svg": 3857167165871619873, + "docs/api/html/group__Imports__Block.html": 3093618662848079957, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_setitem.py": 15731267129055947469, + "backend/src/plugins/translate/preview_session_serializer.py": 8901687711861433007, + "backend/git_repos/remote/test-repo.git/refs/heads/main": 7667767390913789840, + "docs/api/html/group__test__invalid__key__raises__401.html": 17548308712736303847, + "venv/lib/python3.13/site-packages/fastapi/logger.py": 11590581556317053213, + "docs/api/html/group__test__prior__run__no__records__returns__all.html": 18180477270004399232, + "venv/lib/python3.13/site-packages/numpy/linalg/lapack_lite.pyi": 14069586330277925998, + "docs/api/html/group__AnswerKind.html": 4721759660402979766, + "docs/api/html/group__test__migrate__dashboards__success.html": 13646594525073241233, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/modules.py": 9023244176010175562, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/mod.py": 2054876501774773382, + "docs/api/html/search/functions_d.js": 5419224988785173409, + "venv/lib/python3.13/site-packages/authlib/__init__.py": 8957417237987377675, + "docs/api/html/group__MappingStatus.html": 18314626760542529454, + "docs/api/html/group____resolve__repo__key__from__ref.html": 12707845054172015148, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9101/discovery.py": 12479996594187326798, + "venv/lib/python3.13/site-packages/dateutil/zoneinfo/__init__.py": 10261654903106416888, + "docs/api/html/group__UserBase.html": 6482510430149113904, + "venv/lib/python3.13/site-packages/_pytest/helpconfig.py": 3033477806668470951, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_dlpack.py": 7908102652282922952, + "docs/api/html/group__test__load__schedules__reloads__translation__schedules.html": 16059484179450134258, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9207/__init__.py": 8434616194114282088, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/sqlite/provision.py": 13156893203444936309, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/strings.pyi": 402863478592154500, + "venv/lib/python3.13/site-packages/gitdb/db/base.py": 3375449584942578385, + "docs/api/html/group__RunSourceFetcher.html": 14682302550003967669, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_monotonic.py": 14648437502004398715, + "venv/lib/python3.13/site-packages/httpx/_transports/mock.py": 13564349939188292363, + "venv/lib/python3.13/site-packages/cffi/vengine_gen.py": 6582900613549620556, + "venv/lib/python3.13/site-packages/pydantic/_internal/_mock_val_ser.py": 12265320534388472158, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_ops.py": 3875181889032080505, + "docs/api/html/tab_s.png": 9983007352471920092, + "venv/lib/python3.13/site-packages/pyasn1/type/char.py": 16518487114777185541, + "venv/lib/python3.13/site-packages/pygments/lexers/roboconf.py": 1335271183806115470, + "docs/api/html/group__FilterStateModels.html": 10931585648189564325, + "docs/api/html/group__DictionaryCRUD.html": 6797497851497770225, + "docs/api/html/group__SupersetClientGetDatasets.html": 9914093133934169605, + "docs/api/html/group__test__parse__datetime__datetime__object.html": 6514218695236425243, + "venv/lib/python3.13/site-packages/pandas/core/resample.py": 13814298871925341617, + "docs/api/html/group__SupersetCompilationAdapter__imports.html": 7332800023400610712, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_complex/foo77.f": 7353666717928699883, + "docs/api/html/group__CoreUtils.html": 3246108816835089471, + "docs/api/html/group__updateMapping__Function.html": 16524716365093515524, + "docs/api/html/group__ExportArtifact.html": 1743575886963594890, + "docs/api/html/globals_e.html": 5635107513608756533, + "docs/api/html/group__MappingMethod.html": 7292386745422091497, + "venv/lib/python3.13/site-packages/fastapi/security/http.py": 8465565118555441408, + "venv/lib/python3.13/site-packages/authlib/oauth2/auth.py": 8455258275234626534, + "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/apps.py": 4219758952914498116, + "docs/api/html/group__export__validation.html": 13641774792475599780, + "venv/lib/python3.13/site-packages/numpy/f2py/src/fortranobject.c": 2519219289444051739, + "venv/lib/python3.13/site-packages/pandas/tests/io/xml/conftest.py": 17514079438846557943, + "venv/lib/python3.13/site-packages/pygments/lexers/wren.py": 6259586056260713984, + "frontend/e2e/tests/live-project-check.e2e.js": 4657915737640702974, + "backend/src/services/clean_release/stages/manifest_consistency.py": 5890428472425990952, + "docs/api/html/group____index__by__uuid.html": 12082993556480921250, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/oct_key.py": 11504245602045724, + "docs/api/html/group__CleanReleaseModels.html": 12685389086616523632, + "venv/lib/python3.13/site-packages/pip/_internal/cli/main_parser.py": 7942770969280622910, + "venv/lib/python3.13/site-packages/PIL/BdfFontFile.py": 10811640174253687845, + "backend/alembic/versions/a7b1c2d3e4f5_add_provider_id_to_validation_policies.py": 7446022200459040057, + "venv/lib/python3.13/site-packages/pluggy/_result.py": 16790448391766505769, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/__init__.py": 5118993772178969104, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____getPrimaryActionCtaLabel.html": 14241540356676774140, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli/py.typed": 9796674040111366709, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/fft.pyi": 14454280827038327842, + "docs/api/html/group__DocPreview.html": 10374942202918391563, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_file_buffer_url.py": 15377043158761455858, + "backend/src/services/maintenance/_dashboard_scanner.py": 1401108008906511280, + "backend/alembic_test.db": 14995253579408279707, + "venv/lib/python3.13/site-packages/pygments/styles/gh_dark.py": 7717523746712391809, + "docs/api/html/group__TranslationExecutionEngine.html": 6997454185504177526, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/ocsp.pyi": 8666343427862784832, + "docs/api/html/group__test__get__task__log__stats__success.html": 17411659170669298649, + "docs/api/html/group__test__add__logs__empty.html": 5564646933686414085, + "docs/api/html/group__SupersetClientModule.html": 204765713104060593, + "docs/api/html/group__MaintenanceDashboardBannerStatus.html": 4467400780797905740, + "venv/lib/python3.13/site-packages/pandas/io/parsers/readers.py": 7899068668225389287, + "venv/lib/python3.13/site-packages/pycparser/_c_ast.cfg": 2649342580905806389, + "venv/lib/python3.13/site-packages/keyring/__init__.py": 991260689223167957, + "venv/lib/python3.13/site-packages/keyring/backends/fail.py": 5792496235026678021, + "venv/lib/python3.13/site-packages/authlib/integrations/starlette_client/integration.py": 3085827906490477329, + "docs/api/html/group__frontend__src__lib__api__validation__js____deleteTask.html": 15128947433545338265, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_exceptions.py": 15290185665769490169, + "venv/lib/python3.13/site-packages/numpy/_core/function_base.pyi": 8343632640078378312, + "docs/api/html/group__BackupPlugin.html": 16158251941328976430, + "venv/lib/python3.13/site-packages/pandas/core/tools/timedeltas.py": 7221393731712061943, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/merge/test_merge_cross.py": 17742712348672218852, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/LICENSE": 2032205056284080825, + "docs/api/html/group__test__create__valid.html": 7128826085418675137, + "docs/api/html/group__MetricDescriptionUpdate.html": 7274378175344562378, + "docs/api/html/group__normalize__user__payload.html": 7049600760546559055, + "venv/lib/python3.13/site-packages/numpy/lib/_arraypad_impl.pyi": 2186875333484796630, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/py2-objarr.npy": 9694707264403109829, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_partial_indexing.py": 4132091154215910029, + "venv/lib/python3.13/site-packages/pydantic/plugin/_schema_validator.py": 857640644840976862, + "docs/api/html/group__FieldProvenance.html": 13226719866506423057, + "docs/api/html/globals_func_i.html": 8474102779220933859, + "venv/lib/python3.13/site-packages/numpy/_core/einsumfunc.py": 11393954913234866059, + "docs/api/html/group____run__task.html": 10393447256976591681, + "docs/api/html/group__name.html": 9476374294755334273, + "venv/lib/python3.13/site-packages/numpy/linalg/lapack_lite.cpython-313-x86_64-linux-gnu.so": 11074560904305737689, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_nonunique_indexes.py": 15468078561381939405, + "docs/api/html/search/files_0.js": 1537156212390677004, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_stride_tricks.py": 1064774375151677743, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/lib_version.pyi": 18093228021414910594, + "backend/tests/test_datasets.py": 9766141609165223604, + "docs/api/html/group__test__get__dashboards__pagination__zero__page.html": 9231270374996443556, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/writeonly.py": 14213960431308620600, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/expression.py": 1248029135284283479, + "venv/lib/python3.13/site-packages/anyio-4.12.0.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/PIL/_imaging.cpython-313-x86_64-linux-gnu.so": 1425926264271197601, + "docs/api/html/group__fetchDashboards__Function.html": 15265666455140275558, + "docs/api/html/group__loadHistory__Function.html": 688973918186380673, + "venv/lib/python3.13/site-packages/tzlocal-5.3.1.dist-info/RECORD": 15574202654585730126, + "docs/api/html/group____audit.html": 6003328311178572551, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_get_dummies.py": 14871264482622327003, + "docs/api/html/group__TranslationJobConfig.html": 15629227135566862060, + "backend/src/services/clean_release/repositories/compliance_repository.py": 2888085832526178946, + "venv/lib/python3.13/site-packages/PIL/ContainerIO.py": 7551929914241379005, + "docs/api/html/group__loadStatus__Function.html": 424560253324877602, + "docs/api/html/group__StorageIndexPage.html": 3670377713830788417, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/flatiter.pyi": 9598576095384661517, + "venv/lib/python3.13/site-packages/passlib/exc.py": 15559705487889657091, + "frontend/src/lib/components/reports/__tests__/reports_page.integration.test.js": 966219842574639412, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_numeric.py": 9417128508433693658, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_indexing.py": 4063662953863959087, + "frontend/playwright-report/trace/assets/codeMirrorModule-Ds_H_9Yq.js": 1369559823166915102, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____updateTranslationRunState.html": 9070808497640938645, + "docs/api/html/group__Environment.html": 9167040397257623124, + "docs/api/html/group__SupersetClientCompileDatasetPreview.html": 15872086106011031941, + "docs/api/html/group____log.html": 10162958821169656028, + "venv/lib/python3.13/site-packages/pandas/conftest.py": 747626550806435763, + "docs/api/html/group__DatasetsApi.html": 7357837522405925673, + "docs/api/html/group__i18n__Module.html": 10632521022228083958, + "venv/lib/python3.13/site-packages/PIL/ImageChops.py": 16368812693381154921, + "frontend/src/lib/components/reports/ReportsList.svelte": 17367781544989044334, + "frontend/build/_app/immutable/assets/AssistantChatPanel.D4L5jlt0.css": 10724144138366384732, + "docs/api/html/group__launch__dataset.html": 8280088988730100751, + "docs/api/html/group____sync__raw__payload__from__config.html": 1731463979685810569, + "docs/api/html/group__BackupTypes__Module.html": 6128924600139653510, + "venv/lib/python3.13/site-packages/authlib/common/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_reindex.py": 16348619731902304844, + "docs/api/html/group__test__delete__run__not__found.html": 14187887394068528264, + "docs/api/html/group__get__clarification__state.html": 5572805696675612675, + "docs/api/html/group__LLMReportPage.html": 1528192812986476498, + "docs/api/html/group__SingleConfigDbMock.html": 1705315936176408905, + "docs/api/html/group__test__fetchPreviewRecords__Function.html": 3636775598407887299, + "venv/lib/python3.13/site-packages/_pytest/config/compat.py": 13175516717549204627, + "venv/lib/python3.13/site-packages/psycopg2/errorcodes.py": 6711830404954314463, + "venv/lib/python3.13/site-packages/pandas/core/config_init.py": 16537122488227845090, + "frontend/src/routes/tools/storage/+page.svelte": 8817697925409987305, + "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group____transform__yaml.html": 11756968780316598035, + "docs/api/html/group__SupersetAccountLookupResponse.html": 3758644365858317477, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_floats.py": 3064615530495290792, + "docs/api/html/group__belief__scope__Function.html": 12952448433922544231, + "docs/api/html/group__MaintenanceRoutesModule.html": 17831095570734372209, + "frontend/src/routes/maintenance/+page.svelte": 5467232163447861441, + "docs/api/html/group____require__execution__flag.html": 5795997050372262927, + "docs/api/html/group__test__empty__events.html": 13036218116544520363, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py": 16768579082462294745, + "docs/api/html/group__GitRepoRoutes.html": 10793486578721949471, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/ranges/test_join.py": 11910166566689889389, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_holiday.py": 8541197358003711845, + "venv/lib/python3.13/site-packages/uvicorn/lifespan/off.py": 16254524872582859561, + "venv/lib/python3.13/site-packages/attr/filters.py": 14156141488477438777, + "docs/api/html/group__get__migration__settings.html": 13897329278259758640, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_map.py": 32086858815359344, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/style.py": 12654125988995362593, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_ops.py": 16346030307660048773, + "backend/src/services/clean_release/__tests__/test_source_isolation.py": 462142504664192849, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/resultproxy.pyx": 5760108632332714287, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/gh23533.f": 12558972205518833024, + "docs/api/html/group__LiveProjectCheckE2E.html": 17814476116211572824, + "docs/api/html/group__BackupRequest.html": 9361740148201115669, + "docs/api/html/group____load__fixture.html": 803262356442504240, + "venv/lib/python3.13/site-packages/passlib/utils/handlers.py": 10182859005870689026, + "venv/lib/python3.13/site-packages/pandas/core/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pydantic/v1/mypy.py": 17076910404409672245, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/npy_2_complexcompat.h": 5001035774408914877, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/timestamp/methods/test_as_unit.py": 8492383355919959393, + "docs/api/html/group__process__batch.html": 15294657492230512680, + "backend/git_repos/remote/test-repo.git/objects/6a/f2b28e314c04fb4e03476c12d6491213591512": 4526311953587849385, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_matplotlib.py": 12775850858284584296, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_rolling.py": 18221459425751198218, + "venv/lib/python3.13/site-packages/idna-3.11.dist-info/INSTALLER": 17282701611721059870, + "venv/bin/f2py": 11006035631504708368, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/take.py": 3170415198452493008, + "docs/api/html/group__test__publish__without__approval__rejected.html": 3363942287403935607, + "docs/api/html/group__test__init__falls__to__defaults.html": 6035220370511717887, + "backend/src/services/dataset_review/repositories/session_repository.py": 4897386456198762089, + "docs/api/html/search/groups_15.js": 2849271939807724756, + "venv/lib/python3.13/site-packages/numpy/random/_pickle.pyi": 16081120364372391381, + "venv/lib/python3.13/site-packages/pygments/lexers/installers.py": 5083244110640899732, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libpcre-9513aab5.so.1.2.0": 12298861477332583668, + "docs/api/html/group__ProfileValidationError.html": 8590349442789923081, + "docs/api/html/group__assistantChat__Store.html": 18317790308537053696, + "docs/api/html/group__DatasetReviewSessionStore.html": 16665757289211685601, + "venv/lib/python3.13/site-packages/pygments/lexers/matlab.py": 1880915927722177654, + "venv/lib/python3.13/site-packages/httpx/_transports/base.py": 6498990531443644896, + "docs/api/html/group__test__repository__typo__fixed.html": 4874005037242233206, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_string.py": 13234624995755549329, + "venv/lib/python3.13/site-packages/pydantic/v1/tools.py": 1995883197897112278, + "venv/lib/python3.13/site-packages/httpx/_types.py": 12461152436147308761, + "venv/lib/python3.13/site-packages/pandas/core/indexes/timedeltas.py": 13653393430363556843, + "venv/lib/python3.13/site-packages/rsa/pkcs1_v2.py": 3533398238491175229, + "venv/lib/python3.13/site-packages/numpy/_utils/_convertions.py": 12886275429547303345, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/dtypes.py": 9839461501970023861, + "backend/src/core/utils/superset_context_extractor/_templates.py": 13945363390780279343, + "docs/api/html/group__TaskLogPersistenceService.html": 767164108519071447, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/queue.py": 7820997545569991670, + "venv/lib/python3.13/site-packages/pygments/lexers/igor.py": 6506221273085723501, + "frontend/src/components/Navbar.svelte": 2640465687592983765, + "backend/src/models/dataset_review_pkg/_clarification_models.py": 10650387708191883580, + "frontend/build/_app/immutable/nodes/30.BRycvjeE.js": 10674967404181978072, + "venv/lib/python3.13/site-packages/_pytest/assertion/__init__.py": 16392348866405910618, + "venv/lib/python3.13/site-packages/gitdb-4.0.12.dist-info/AUTHORS": 10073225185964928425, + "venv/lib/python3.13/site-packages/jose/backends/cryptography_backend.py": 2875270748627611635, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/resource_protector.py": 9147671710440653567, + "docs/api/html/group__test__create__gitea__pull__request__returns__branch__error__when__target__missing.html": 12846340033666855401, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/categorical/test_astype.py": 8633811117672837999, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/_openssl.pyi": 4376871621615688626, + "frontend/src/types/dashboard.ts": 9718666955722367566, + "docs/api/html/group__send__message.html": 13998342804671032700, + "venv/lib/python3.13/site-packages/pygments/lexers/webassembly.py": 17811970490091406867, + "docs/api/html/group__test__single__event.html": 10966926393815748610, + "venv/lib/python3.13/site-packages/pyasn1/compat/__init__.py": 5902203086150636670, + "backend/src/scripts/__init__.py": 5400372851656282343, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/ndarraytypes.h": 6765088137325865789, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_callback.py": 1689177048527329209, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/test_timedelta_range.py": 15081095442418142820, + "docs/api/html/globals_func_e.html": 5853577764297783560, + "venv/lib/python3.13/site-packages/pydantic/decorator.py": 6984214881365537811, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_array.py": 16867692337986161626, + "docs/api/html/group__TranslationScheduleItem.html": 12108491525286964033, + "docs/api/html/group__setLoading__Function.html": 3715890994479237152, + "venv/lib/python3.13/site-packages/pandas/io/formats/info.py": 215303194287834907, + "docs/api/html/group__test__null__source__data__handled.html": 9321216567493581904, + "venv/lib/python3.13/site-packages/pygments/lexers/other.py": 6893672181003034910, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/array_constructors.pyi": 4993066609272697419, + "venv/lib/python3.13/site-packages/numpy/_core/_type_aliases.py": 1644743742545329282, + "docs/api/html/group__hash__api__key.html": 11201468271890098251, + "venv/lib/python3.13/site-packages/urllib3/util/ssl_match_hostname.py": 7411350247004265632, + "docs/api/html/group__initializeForm__Function.html": 9614464266538572602, + "venv/lib/python3.13/site-packages/_pytest/freeze_support.py": 494952714451267295, + "docs/api/html/group__create__user.html": 3710853753512075388, + "docs/api/html/search/functions_8.js": 3321647565030130819, + "backend/src/plugins/translate/orchestrator_exec.py": 965301343860940811, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_categorical.py": 1329115818264527103, + "docs/api/html/group__test__trigger__validation__skips__missing__policy.html": 5602615003618981152, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/query.py": 3867868366067025348, + "venv/lib/python3.13/site-packages/apscheduler/triggers/calendarinterval.py": 12481650996882675949, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_drop_duplicates.py": 2397396876872403048, + "venv/lib/python3.13/site-packages/pygments/lexers/gleam.py": 5161116162065925222, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/response.py": 15004896908941411698, + "venv/lib/python3.13/site-packages/pygments/styles/paraiso_light.py": 15941591873059208999, + "backend/src/api/routes/__tests__/test_profile_api.py": 10215800611882169470, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/reduce.py": 14976712507854054776, + "venv/lib/python3.13/site-packages/pygments/lexers/modula2.py": 6575895980250662093, + "venv/lib/python3.13/site-packages/pygments/lexers/_luau_builtins.py": 13690910306072616818, + "backend/src/core/task_manager/persistence.py": 9599258324212845325, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_transpose.py": 1686867045869336370, + "docs/api/html/group__test__get__dashboards__empty.html": 10251761497684394331, + "venv/lib/python3.13/site-packages/pandas/core/internals/concat.py": 12151675567885981464, + "venv/lib/python3.13/site-packages/anyio/abc/_tasks.py": 16839170934610571514, + "venv/lib/python3.13/site-packages/anyio/abc/_resources.py": 8330687082933028623, + "venv/lib/python3.13/site-packages/jeepney/tests/test_wrappers.py": 4813328996575597980, + "venv/lib/python3.13/site-packages/pandas/core/arrays/datetimes.py": 10585034798097337148, + "frontend/src/lib/stores/environmentContext.js": 9960741825828562980, + "backend/src/models/assistant.py": 13943482616669949278, + "docs/api/html/navtreedata.js": 10541563969521895995, + "venv/lib/python3.13/site-packages/ecdsa/eddsa.py": 15966858338456571506, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_recfunctions.py": 16014503284544747867, + "venv/lib/python3.13/site-packages/numpy/lib/tests/data/win64python2.npy": 11005857803794805939, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/issue232.py": 6498198296113395367, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/attrs/filters.py": 6844006230924162452, + "venv/lib/python3.13/site-packages/numpy/dtypes.py": 14128421398870718692, + "frontend/src/lib/ui/Button.svelte": 14815370250842191735, + "docs/api/html/group____normalize__object__payload.html": 14403994834116059510, + "venv/lib/python3.13/site-packages/websockets/asyncio/client.py": 5694225754072131767, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi": 13016654355866474644, + "backend/src/services/sql_table_extractor.py": 11429348671339263380, + "docs/api/html/group__GitDashboardPage.html": 4862973845020805849, + "docs/api/html/group__test__storage__config__fields__have__correct__types.html": 13803318122009828230, + "docs/api/html/group__SettingsE2E.html": 1243339859806566484, + "venv/lib/python3.13/site-packages/numpy/polynomial/__init__.py": 15558318749939680074, + "docs/api/html/group____resolve__target__envs.html": 326825327677354212, + "docs/api/html/group__GitOperationsPanel.html": 14155571809658908034, + "docs/api/html/group__NetworkError______init____.html": 13550401008734324366, + "frontend/src/lib/components/translate/TranslationPreview.svelte": 9514416214545061268, + "backend/src/plugins/translate/_batch_insert.py": 12482635271028646257, + "docs/api/html/group__HomePage.html": 10705890495789315886, + "docs/api/html/group__RootLayoutConfig__Module.html": 11134316622827325111, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/licenses/LICENSE": 6808958893921859106, + "docs/api/html/search/searchdata.js": 12335622014985822676, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/pymssql.py": 6650008663791598065, + "docs/api/html/group__network__error__handler.html": 11593637847095297203, + "venv/lib/python3.13/site-packages/numpy/lib/_format_impl.py": 1809069379864985298, + "docs/api/html/group____build__risks.html": 10011809177370998034, + "backend/src/core/auth/__tests__/test_auth.py": 6524647391979341734, + "backend/tests/services/clean_release/test_report_audit_immutability.py": 4795829940402801626, + "venv/lib/python3.13/site-packages/pandas/core/window/online.py": 13551140636252302201, + "frontend/src/lib/components/translate/__tests__/test_bulk_replace_modal.svelte.js": 16164320505605430516, + "venv/lib/python3.13/site-packages/pygments/lexers/bqn.py": 11823648528816858738, + "venv/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_impl.py": 16610770935842519289, + "docs/api/html/group__test__list__active__schedules.html": 11816123497638243525, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_numba.py": 203614377324678234, + "frontend/e2e/e2e-nohealth.mjs": 5921562935931064381, + "docs/api/html/nav_hd.png": 5189739344381957223, + "docs/api/html/group__PreparationService.html": 8547646096904159114, + "venv/lib/python3.13/site-packages/greenlet/tests/test_cpp.py": 10982107081267457286, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/token_validator.py": 2932866595454490527, + "docs/api/html/menu.js": 10605519113858156037, + "docs/api/html/group____parse__datetime.html": 16073684679023407314, + "venv/lib/python3.13/site-packages/pip/_internal/models/scheme.py": 4101322315594430874, + "venv/lib/python3.13/site-packages/_pytest/_code/__init__.py": 6211607282116942091, + "venv/lib/python3.13/site-packages/numpy/polynomial/chebyshev.py": 1590647503660777156, + "docs/api/html/group__test__delete__logs__for__tasks__empty.html": 11042736857003485976, + "venv/lib/python3.13/site-packages/numpy/_expired_attrs_2_0.py": 8786558894094307341, + "backend/src/plugins/translate/preview_prompt_builder.py": 15837150631111510351, + "venv/lib/python3.13/site-packages/rapidfuzz/_feature_detector_cpp.cpython-313-x86_64-linux-gnu.so": 16337157355618216738, + "venv/lib/python3.13/site-packages/websockets/asyncio/router.py": 15039562376314233669, + "venv/lib/python3.13/site-packages/pip/_vendor/cachecontrol/py.typed": 15130871412783076140, + "docs/api/html/group__info.html": 3684644634418690403, + "venv/lib/python3.13/site-packages/numpy/lib/_user_array_impl.pyi": 7171810177801103765, + "venv/lib/python3.13/site-packages/jeepney/auth.py": 10565040329507087892, + "docs/api/html/group__AssistantApi.html": 466508613702940100, + "docs/api/html/group__NotificationChannel.html": 13421940193975834527, + "docs/api/html/group__ManifestService.html": 17042827860507544398, + "venv/lib/python3.13/site-packages/pip/_vendor/dependency_groups/__main__.py": 11917862648584782420, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/algorithms.py": 17106903014205241774, + "docs/api/html/group__getDatasetReviewConflictMessage__Function.html": 969336450247771573, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libsasl2-883649fd.so.3.0.0": 13306917506408577991, + "frontend/playwright-report/trace/defaultSettingsView.BDKsFU3c.css": 12935551588108679759, + "docs/api/html/group__SetupTestsModule.html": 5544696171487564620, + "venv/lib/python3.13/site-packages/ecdsa/test_der.py": 7117444285097824495, + "venv/lib/python3.13/site-packages/pandas/api/types/__init__.py": 3995030354191071797, + "venv/lib/python3.13/site-packages/git/objects/commit.py": 12317865358846331802, + "venv/lib/python3.13/site-packages/numpy/linalg/_linalg.py": 9654828595008925976, + "docs/api/html/group__AdminApiKeyRoutes.html": 1930874666734065642, + "docs/api/html/group__TestCleanReleaseLegacyCompat.html": 15482783963436488047, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9207/parameter.py": 2793853093222900337, + "docs/api/html/group__updateUser__Function.html": 14752881444899728084, + "venv/lib/python3.13/site-packages/anyio/_core/_asyncio_selector_thread.py": 1760597191437520000, + "docs/api/html/group__JSON__OVERHEAD__PER__ROW.html": 5671854497093663857, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_exceptions.py": 12145393002202744314, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/compat.py": 9758194415584776667, + "docs/api/html/group__handleFilterChange__Function.html": 12314374793481426477, + "frontend/src/lib/components/layout/sidebarNavigation.js": 14306348671588504207, + "docs/api/html/group__TranslationRunProgress.html": 17186985638749776681, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-arccos.csv": 3026156288992132911, + "docs/api/html/group__AuthState__Interface.html": 8632817980324199273, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_reflection.py": 10520778598547003532, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/evaluator.py": 6348022789899831255, + "venv/lib/python3.13/site-packages/pandas/_libs/sas.pyi": 873957906443703977, + "docs/api/html/group__start__check.html": 10263972923109456955, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/kind/foo.f90": 1367964042730902899, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_util.py": 6573034224727513309, + "venv/lib/python3.13/site-packages/pandas/core/sorting.py": 689057022713741051, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_arithmetic.py": 14858832264660410908, + "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/licenses/LICENSE": 3868190977070717994, + "venv/lib/python3.13/site-packages/keyring/util/platform_.py": 16978095707950463638, + "docs/api/html/group__get__health__summary.html": 12658858476431678972, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_transpose.py": 17983160984979323393, + "venv/lib/python3.13/site-packages/urllib3/connection.py": 12761371748350595804, + "venv/bin/py.test": 2593802493707545818, + "frontend/playwright.config.js": 802586619504012017, + "venv/lib/python3.13/site-packages/ecdsa-0.19.1.dist-info/WHEEL": 17410883677306885019, + "venv/lib/python3.13/site-packages/sqlalchemy/connectors/asyncio.py": 4200928269459447593, + "docs/api/html/group__delete__tasks.html": 2265288733173423107, + "venv/lib/python3.13/site-packages/typing_inspection-0.4.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_rename.py": 16148017223289654683, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/__init__.py": 11009955319062089477, + "docs/api/html/group__DeploymentEnvironment.html": 16685176550591536655, + "venv/lib/python3.13/site-packages/sqlalchemy/future/__init__.py": 17688444679736059779, + "docs/api/html/group__setup__method.html": 17742160113140228512, + "venv/lib/python3.13/site-packages/_pytest/legacypath.py": 7512065138259788426, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_einsum.py": 17286384318722237180, + "venv/lib/python3.13/site-packages/numpy/polynomial/legendre.py": 1731362089136926666, + "venv/lib/python3.13/site-packages/pip/__main__.py": 574438877257676911, + "docs/api/html/group__test__validate__path__nonexistent__root.html": 15516438199424145609, + "venv/lib/python3.13/site-packages/pandas/core/nanops.py": 18291534943985310005, + "docs/api/html/group__get__remote__id.html": 4917003252379423579, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_function_base.py": 15241999259666702619, + "docs/api/html/group__AssistantLlmPlanner.html": 3353552519708970803, + "venv/lib/python3.13/site-packages/pillow.libs/libharfbuzz-0692f733.so.0.61230.0": 23110287346167671, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufunclike.pyi": 14623308681600207918, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/stride_tricks.pyi": 8257977532799807847, + "venv/lib/python3.13/site-packages/numpy/f2py/f90mod_rules.py": 2953876934840155920, + "venv/lib/python3.13/site-packages/pygments/lexers/mojo.py": 8616283481592061285, + "docs/api/html/group__edit__dictionary__entry.html": 12444753978279908445, + "docs/api/html/group__NavigationMock__Module.html": 931761641099207828, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/test_astype.py": 11995587502880659624, + "docs/api/html/group__ui__route.html": 955048899493840648, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_subclass.py": 11096337912872573314, + "backend/src/api/routes/git/_helpers.py": 17217408354237437064, + "backend/tests/core/test_mapping_service.py": 8795874006773064566, + "docs/api/html/group__list__gitea__repositories.html": 5900420781022521601, + "venv/lib/python3.13/site-packages/jsonschema/tests/test_types.py": 651959450717569029, + "frontend/build/_app/immutable/nodes/3.CiFNdR4r.js": 6604637647308878596, "backend/src/services/clean_release/demo_data_service.py": 14506634271910590558, - "venv/lib/python3.13/site-packages/pydantic/v1/json.py": 16596969681914729251 + "venv/lib/python3.13/site-packages/numpy/lib/__init__.pyi": 1537495515469182226, + "docs/api/html/group__test__button__check__disabled__logic.html": 3976064615352650231, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/object/test_astype.py": 563689238486630866, + "docs/api/html/group____do__http__request.html": 5541890670779429458, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/errors.py": 17581857895562494222, + "venv/lib/python3.13/site-packages/authlib/oidc/core/claims.py": 2035724920423374302, + "venv/lib/python3.13/site-packages/httpx-0.28.1.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__get__payload.html": 3413926737425743336, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/licenses/LICENSE": 1424673738228762254, + "venv/lib/python3.13/site-packages/PIL/ImageEnhance.py": 3218405223202808764, + "venv/lib/python3.13/site-packages/pygments/styles/manni.py": 11853576691280294949, + "venv/lib/python3.13/site-packages/ecdsa/keys.py": 10281170640484982154, + "docs/api/html/group__TranslateJobUpdate.html": 3630855679853267875, + "venv/lib/python3.13/site-packages/more_itertools/recipes.py": 5254043689078173976, + "venv/lib/python3.13/site-packages/pyasn1-0.6.2.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__LLMAnalysisService.html": 4482613675136608683, + "venv/lib/python3.13/site-packages/pandas/tests/util/conftest.py": 11143177766735481660, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_rowcount.py": 6682800584070485197, + "venv/lib/python3.13/site-packages/pygments/lexers/c_cpp.py": 1211842877043321095, + "docs/api/html/group__test__tui__f5__run__smoke__reports__blocked__state.html": 5494023614389428629, + "venv/lib/python3.13/site-packages/websockets/sync/utils.py": 15135020989207191168, + "docs/api/html/group__DatasetList.html": 15827060935687053250, + "venv/lib/python3.13/site-packages/rapidfuzz/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/typing_extensions-4.15.0.dist-info/METADATA": 317417773265681256, + "venv/lib/python3.13/site-packages/authlib/oauth1/rfc5849/rsa.py": 5392922995791487437, + "docs/api/html/group__test__transform__zip__end__to__end.html": 11478692460747852800, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_unique.py": 3148372351781648868, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/windows.py": 16452996247375488034, + "docs/api/html/search/functions_11.js": 18073114919847941486, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_setops.py": 15196593522537569500, + "docs/api/html/group__AsyncSupersetClientClose.html": 17574786361007292921, + "venv/lib/python3.13/site-packages/ecdsa/curves.py": 812969717084691115, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/ufuncs.py": 12732599294816239111, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/enumerated.py": 16623643153933348755, + "docs/api/html/group__MappingCreate.html": 12518001484805787826, + "docs/api/html/group__ReportsService.html": 2032865134635125460, + "docs/api/html/group__setAssistantFocusTarget__Function.html": 13485754571727078546, + "docs/api/html/group__DatasetReviewSchemaComposites.html": 187782560876687868, + "venv/lib/python3.13/site-packages/numpy/core/overrides.pyi": 1968648615494204783, + "docs/api/html/group__getReportDetail__Function.html": 15901398277426320441, + "docs/api/html/navtreeindex9.js": 16489008554418984705, + "docs/api/html/group__ADGroupMappingCreate.html": 332191690038373330, + "venv/lib/python3.13/site-packages/gitdb/test/test_example.py": 3039934065817753241, + "docs/api/html/group__test__features__from__env__still__applied.html": 5745023344665096858, + "docs/api/html/group__test__inactive__schedule__skips.html": 17459537030862916433, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/memmap.pyi": 2834143910417841603, + "docs/api/html/group__AssistantDatasetReviewDispatch.html": 15266638409291242280, + "docs/api/html/group____write__dashboard__yaml.html": 9223157474938909024, + "venv/lib/python3.13/site-packages/pydantic/error_wrappers.py": 11273827025986230629, + "venv/lib/python3.13/site-packages/pandas/_libs/window/aggregations.pyi": 6072607880689125113, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_offsets_properties.py": 2340780879864207500, + "venv/lib/python3.13/site-packages/httpcore/_backends/auto.py": 10488908050307887802, + "venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py": 13206297306768491360, + "venv/lib/python3.13/site-packages/cffi/_embedding.h": 9441285871823018603, + "docker/frontend.Dockerfile": 11291701046055590331, + "docs/api/html/group__get__features.html": 12928666550710504587, + "docs/api/html/group__DatasetRunContextDto.html": 17960720894742072910, + "venv/lib/python3.13/site-packages/passlib/tests/test_apache.py": 12515001998770565375, + "venv/lib/python3.13/site-packages/greenlet/platform/setup_switch_x64_masm.cmd": 8473866644286785815, + "docs/api/html/group__insert__banner__markdown__at__top.html": 2314550343350178265, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/twofactor/__init__.py": 18069619555394133945, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_defchararray.py": 15135904718007443306, + "venv/lib/python3.13/site-packages/pandas/core/arrays/boolean.py": 8821671562937866269, + "venv/lib/python3.13/site-packages/pygments/formatters/terminal.py": 14380579279194052030, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_chaining_and_caching.py": 15814259766479305290, + "venv/lib/python3.13/site-packages/pygments/lexers/_vbscript_builtins.py": 9882134558469491349, + "frontend/build/_app/immutable/nodes/26.sxWJsmff.js": 14493423158006980228, + "docs/api/html/globals_dup.js": 12007683462695373588, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/fromnumeric.pyi": 6708743411405679061, + "venv/lib/python3.13/site-packages/_pytest/terminal.py": 885450969703476729, + "venv/lib/python3.13/site-packages/pip/_internal/utils/appdirs.py": 539688259643447487, + "venv/lib/python3.13/site-packages/pip/_vendor/certifi/__init__.py": 2833016678144975576, + "docs/api/html/group__explore.html": 2270854509477383382, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/ec.py": 8864112842559211971, + "venv/lib/python3.13/site-packages/pydantic/json_schema.py": 15678278224696353978, + "docs/api/html/group__TranslateRunsApi.html": 11590382264152453045, + "venv/lib/python3.13/site-packages/pydantic/v1/decorator.py": 6124748023704700724, + "venv/lib/python3.13/site-packages/pip/_internal/models/format_control.py": 12916176880659590456, + "docs/api/html/group__SqlLabLaunchPayload.html": 7835290887584234240, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_split_partition.py": 2715491071550545667, + "docs/api/html/group__get__environment__databases.html": 8137104331651503447, + "docs/api/html/group__SemanticSourceType.html": 8482820622466037543, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/_manylinux.py": 12272275001961360101, + "venv/lib/python3.13/site-packages/referencing/__init__.py": 10093824711214801917, + "docs/api/html/group__test__list__jobs__with__status__filter.html": 5736540040640427487, + "venv/lib/python3.13/site-packages/pandas/core/groupby/indexing.py": 18009437216172136227, + "venv/lib/python3.13/site-packages/pillow.libs/libpng16-4a38ea05.so.16.53.0": 13136089038268964667, + "docs/api/html/group__PermissionDeniedError.html": 13284579335142541515, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/constants.pyi": 15633065380510755171, + "docs/api/html/search/all_5.js": 15854593946678342554, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/inout.f90": 1521999519583206538, + "docs/api/html/group__BatchInsertService.html": 3576868243265659369, + "docs/api/html/group__resume__clarification.html": 15214230648786619854, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/string/gh24662.f90": 4241310200087270990, + "docs/api/html/group__Input.html": 4271267002431901392, + "backend/git_repos/remote/test-repo.git/hooks/applypatch-msg.sample": 12627299623252391515, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_assumed_shape.py": 18361009188431483164, + "docs/api/html/group__SMTPProvider.html": 4088022190794089412, + "venv/lib/python3.13/site-packages/pip/_internal/utils/temp_dir.py": 8657533190026387896, + "venv/lib/python3.13/site-packages/apscheduler/executors/tornado.py": 6635576580306890718, + "venv/lib/python3.13/site-packages/pandas/tests/test_flags.py": 411845322592830527, + "backend/src/core/task_manager/cleanup.py": 13007785075566443785, + "docs/api/html/group__PermissionSchema.html": 6474689152156131373, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_pandas.py": 10894229569442891394, + "docs/api/html/group__TestAPIKeyAuth.html": 9836588749523231088, + "venv/lib/python3.13/site-packages/pycparser/c_lexer.py": 10964496587169353564, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_methods.py": 12694335778731418517, + "docs/api/html/search/all_b.js": 1386014000926361523, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_free.f90": 10939657740734987454, + "venv/lib/python3.13/site-packages/pytest-9.0.2.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/numpy/polynomial/hermite.pyi": 3573629536236108391, + "venv/lib/python3.13/site-packages/rpds/__init__.py": 5862197328247012275, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_wrap.py": 17083394123203662880, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/requirements.py": 11478648568700804705, + "venv/lib/python3.13/site-packages/passlib/ext/django/utils.py": 8118896525895185626, + "venv/lib/python3.13/site-packages/python_dotenv-1.2.1.dist-info/METADATA": 2604612822968175379, + "frontend/src/lib/api/translate/schedules.js": 8616345664085016472, + "docs/api/html/group__list__dictionaries.html": 17979156195580437161, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_spinners.py": 15873416546130487469, + "venv/lib/python3.13/site-packages/authlib/jose/jwk.py": 13560749074922587626, + "docs/api/html/group__test__approve__rejects__foreign__report.html": 3963674165080312460, + "venv/lib/python3.13/site-packages/PIL/IcoImagePlugin.py": 14483964191652228364, + "docs/api/html/group__CotJsonFormatter__format.html": 824540483579618600, + "docs/api/html/group__InvalidZipFormatError.html": 13344492549849220399, + "venv/lib/python3.13/site-packages/websockets/asyncio/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_x64_msvc.h": 17581467060937454503, + "docs/api/html/group__frontend__src__lib__api__maintenance__js____startMaintenance.html": 15248104502781351783, + "frontend/build/_app/immutable/nodes/7.DtyspEKO.js": 1441856430291863908, + "frontend/build/_app/immutable/chunks/BtMNxLZr.js": 5550630982455761657, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/jaraco/classes/ancestry.py": 11742194518360056470, + "docs/api/html/group__test__superset__client__module__loads.html": 18034638000182478147, + "docs/api/html/group__delete__validation__policy.html": 7423748920813803796, + "venv/lib/python3.13/site-packages/itsdangerous/exc.py": 11181421963755661477, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_to_period.py": 7727606662611927293, + "docs/api/html/group__get__validation__policies.html": 18157978184513887167, + "venv/lib/python3.13/site-packages/secretstorage-3.5.0.dist-info/licenses/LICENSE": 6965457853328313914, + "docs/api/html/group__handleUpdate__Function.html": 5587686760218191810, + "venv/lib/python3.13/site-packages/git/util.py": 7424113599506269603, + "venv/lib/python3.13/site-packages/pygments/lexers/parsers.py": 12372594608244797844, + "venv/lib/python3.13/site-packages/pygments/lexers/apdlexer.py": 14222752852221009085, + "backend/src/services/dataset_review/repositories/__tests__/test_session_repository.py": 16488635694638612020, + "venv/lib/python3.13/site-packages/pygments/lexers/whiley.py": 218468511185731869, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/util.pyx": 649821942746469002, + "venv/lib/python3.13/site-packages/numpy/__init__.cython-30.pxd": 1476688171642957054, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/f2cmap/isoFortranEnvMap.f90": 15768643271492041853, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/index.py": 2763962019423787504, + "docs/api/html/group__NotificationService.html": 14374014839364668482, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/__init__.py": 14571251344510763303, + "venv/lib/python3.13/site-packages/click/testing.py": 15973659312284678327, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_resolution.py": 18198858926948468112, + "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/charset_normalizer/constant.py": 3070316197495651997, + "docs/api/html/group____build__tool__catalog.html": 15194959807685697743, + "docs/api/html/group__StageExecutionResult.html": 7320596610838714730, + "docs/api/html/group__SupersetClientExtractNativeFiltersFromPermalink.html": 11300039242994090403, + "venv/lib/python3.13/site-packages/greenlet/PyModule.cpp": 3464405102256525511, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/base.py": 11386927749822539057, + "docs/api/html/group__test__artifact__import__contract.html": 17628340742855449745, + "docs/api/html/group__get__translation__schedules.html": 13478548102530293059, + "docs/api/html/group__SupersetContextTemplatesMixin____collect__query__bearing__expressions.html": 17879749034024990070, + "docs/api/html/group__UpdateExecutionMappingRequest.html": 12143869237726717989, + "venv/lib/python3.13/site-packages/pandas/util/_tester.py": 1033951890304257539, + "venv/lib/python3.13/site-packages/pygments/lexers/__init__.py": 4627540245914849670, + "venv/lib/python3.13/site-packages/websockets/headers.py": 13587146967490088657, + "docs/api/html/group__download__skipped__csv.html": 13671264474809862196, + "docs/api/html/group____make__task__manager.html": 5653521975879492956, + "docs/api/html/group__update__banner__markdown__content.html": 5764762595078036751, + "dist/docker/frontend.e2e-test-20260526-112457.tar.xz": 9007148704121026255, + "docs/api/html/group__TranslationPlanner.html": 11482656897357674989, + "venv/lib/python3.13/site-packages/passlib/handlers/windows.py": 8969739861295277439, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/transforms.py": 3773159138960141434, + "venv/lib/python3.13/site-packages/pandas/tests/io/excel/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/libs/test_libalgos.py": 13934861984871432400, + "venv/lib/python3.13/site-packages/urllib3/__init__.py": 1854778274753799815, + "docs/api/html/group__ThrottledSchedulerConfigurator.html": 4428654146760584758, + "venv/lib/python3.13/site-packages/click/_termui_impl.py": 3296085065310341855, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_select_dtypes.py": 3530442956913622572, + "docs/api/html/group__test__git__service__ensure__gitflow__branches__creates__and__pushes__missing__defaults.html": 831567849032163336, + "docs/api/html/group__GlobalSetup.html": 2598937001273501380, + "docs/api/html/group__test__get__database__mappings__env__not__found.html": 5367128710946773652, + "docs/api/html/group__HealthSummaryResponse.html": 15269424363939168020, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_openssl.py": 10446441599800965961, + "docs/api/html/group__decode__token.html": 4126673060024098894, + "venv/lib/python3.13/site-packages/_pytest/tracemalloc.py": 5530234062530858720, + "venv/lib/python3.13/site-packages/numpy/core/defchararray.py": 11371045148957547088, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/array_api_info.pyi": 7887489694871300469, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_dtypes.py": 4985057130807802395, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_format.py": 16150524965028369071, + "venv/bin/pygmentize": 2166491742035772877, + "frontend/src/components/git/useGitManager.js": 2963542080215648548, + "venv/lib/python3.13/site-packages/PIL/PcdImagePlugin.py": 922809545463280224, + "venv/lib/python3.13/site-packages/sqlalchemy/event/api.py": 987321343916500337, + "docs/api/html/group__test__get__reports__filter__and__pagination.html": 15756423594624112678, + "docs/api/html/group____find__dashboard__id__by__slug__async.html": 17708878383316867946, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/_serialization.py": 2011519400081029270, + "docs/api/html/group__test__json__load__if__needed__integer.html": 16897843606184491072, + "frontend/src/lib/components/layout/TaskDrawer.svelte": 1108434227611806299, + "docs/api/html/group____resolve__env__id.html": 6378272965191199149, + "venv/lib/python3.13/site-packages/pydantic/v1/dataclasses.py": 7833468513057242440, + "venv/lib/python3.13/site-packages/iniconfig-2.3.0.dist-info/METADATA": 16498441272591167134, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_dtypes.py": 7550022036887594386, + "venv/lib/python3.13/site-packages/pip-25.1.1.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__retry__insert.html": 11772440759533263654, + "venv/lib/python3.13/site-packages/six.py": 948867418687428421, + "venv/lib/python3.13/site-packages/jsonschema/exceptions.py": 15651767069704734674, + "frontend/build/_app/immutable/assets/0.DK5emaTL.css": 4565146476878643834, + "venv/lib/python3.13/site-packages/PIL/IcnsImagePlugin.py": 1870235606309784691, + "backend/tests/test_task_manager.py": 4305202721942095979, + "docs/api/html/group__create__future.html": 6308958188691584151, + "docs/api/html/group__delete__health__report.html": 7248475607320545469, + "frontend/build/_app/immutable/chunks/Dn-Kr3zV.js": 11981784044886973393, + "docs/api/html/group__get__storage__settings.html": 15563164066742946450, + "docs/api/html/group____ensure__translation__schedules__columns.html": 7448712454629073660, + "venv/lib/python3.13/site-packages/httpcore/_synchronization.py": 10997080307461682786, + "venv/lib/python3.13/site-packages/passlib/handlers/md5_crypt.py": 7669328623914474137, + "venv/lib/python3.13/site-packages/numpy/_core/umath.py": 6132761780113682667, + "docs/api/html/group__list__dictionary__entries.html": 12208362720304738846, + "docs/api/html/group__DICT__TOKENS__MAX.html": 5949599154091293863, + "venv/lib/python3.13/site-packages/pandas/tests/test_multilevel.py": 10500316376521962061, + "venv/lib/python3.13/site-packages/h11/_events.py": 13800479928851716538, + "venv/lib/python3.13/site-packages/pip/_internal/operations/build/build_tracker.py": 9389444024234384408, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7521/client.py": 17305914656270781911, + "venv/lib/python3.13/site-packages/pip/_internal/cache.py": 210214424535803946, + "docs/api/html/navtreeindex19.js": 1947581984165981900, + "docs/api/html/group__FilterSource.html": 17708105643619200082, + "venv/lib/python3.13/site-packages/pydantic/v1/validators.py": 1060954771151908883, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/quoted_character/foo.f": 15318083678609435813, + "venv/lib/python3.13/site-packages/pygments/styles/_mapping.py": 11752660241391232497, + "venv/lib/python3.13/site-packages/pygments/lexers/carbon.py": 6753624244809529841, + "frontend/src/types/backup.ts": 1741234034896689348, + "docs/api/html/group__NotificationProvider.html": 9879076556154479190, + "venv/lib/python3.13/site-packages/numpy/lib/_nanfunctions_impl.py": 11621577915097515056, + "frontend/src/lib/stores/__tests__/test_activity.js": 13851679930048900037, + "docs/api/html/group____default__config.html": 6364950080332281281, + "venv/lib/python3.13/site-packages/requests/_internal_utils.py": 4091305333167213279, + "docs/api/html/group__ManifestRepository.html": 9159461313767192573, + "docs/api/html/group__frontend__src__routes__settings__settings__utils__js____readTabFromUrl.html": 15117558677865436806, + "venv/lib/python3.13/site-packages/git/objects/submodule/base.py": 10140490301897269395, + "scripts/build_offline_docker_bundle.sh": 1393881756263325163, + "venv/lib/python3.13/site-packages/pygments/lexers/fift.py": 7537570342576781911, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/entities.py": 8001287806688585081, + "venv/lib/python3.13/site-packages/starlette/schemas.py": 697416731579555195, + "docs/api/html/group__handleDeleteEnv__Function.html": 14510731287987560462, + "venv/lib/python3.13/site-packages/pandas/_libs/join.cpython-313-x86_64-linux-gnu.so": 2947947484481830203, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/liblber-1c9097e2.so.2.0.200": 2651879839738900594, + "docs/api/html/group__MaintenanceDashboardStateStatus.html": 16864192271527139550, + "venv/lib/python3.13/site-packages/anyio/abc/_sockets.py": 15042495744291042062, + "venv/lib/python3.13/site-packages/attrs-25.4.0.dist-info/licenses/LICENSE": 8438117004702803716, + "venv/lib/python3.13/site-packages/charset_normalizer/__init__.py": 12412600648990392633, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/x448.py": 3960540415600165213, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/mysqldb.py": 2138006249556140141, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_cython.py": 2933400021016349431, + "venv/lib/python3.13/site-packages/jsonschema/benchmarks/json_schema_test_suite.py": 6152158310190822762, + "venv/lib/python3.13/site-packages/numpy/random/_pickle.py": 7774620933480975313, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_isetitem.py": 14895552405828068177, + "venv/lib/python3.13/site-packages/numpy/typing/__init__.pyi": 10058149460938883683, + "backend/src/api/routes/dataset_review.py": 6955521302681155464, + "docs/api/html/group__count__remaining__questions.html": 777004046773548975, + "frontend/src/lib/components/dataset-review/SemanticLayerReview.svelte": 2835359394064716026, + "venv/lib/python3.13/site-packages/pandas/tests/test_sorting.py": 10751098438703044961, + "docs/api/html/group__CleanProfilePolicy.html": 16264819993053610464, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_where.py": 14167991754625133668, + "docs/api/html/plusd.svg": 5924202389722020174, + "docs/api/html/globals_func_a.html": 13712688806462460438, + "venv/lib/python3.13/site-packages/idna/codec.py": 4260241549062101779, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_loadtxt.py": 17562784940619942447, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_bool.py": 433342705586552936, + "frontend/svelte.config.js": 8473636210766821560, + "venv/lib/python3.13/site-packages/sqlalchemy/util/_py_collections.py": 16825222625411635946, + "docs/api/html/group__Button.html": 10473089147190690338, + "docs/api/html/group__get__run__history.html": 15431464627723325766, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/theme.py": 14225878259183479398, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_arithmetic.py": 976970179757115407, + "docs/api/html/group__service.html": 13599013976618262143, + "venv/lib/python3.13/site-packages/fastapi/security/open_id_connect_url.py": 3502444317759870079, + "docs/api/html/group__ValidationPolicyCreate.html": 15832204788479864944, + "venv/lib/python3.13/site-packages/pandas/core/computation/check.py": 16048939716341154196, + "docs/api/html/group__SupersetClientNormalizeEffectiveFiltersForQueryContext.html": 14678121546228653746, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/base.py": 10514193453447954780, + "docs/api/html/group__ProfileSettingsStateIntegrationTest.html": 16949360457251592220, + "venv/lib/python3.13/site-packages/jaraco_context-6.0.2.dist-info/RECORD": 9974324769263969827, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/WHEEL": 16784970174376303810, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_qcut.py": 8972418112914954758, + "docs/api/html/group__test__backup__dashboards__env__not__found.html": 8478433620760041140, + "docs/api/html/group__DashboardHub__toggleFilterDropdown__Function.html": 2486046615713604253, + "venv/lib/python3.13/site-packages/pandas/tests/base/test_constructors.py": 2439700578107653984, + "venv/lib/python3.13/site-packages/numpy/lib/mixins.pyi": 15597536290223628777, + "venv/lib/python3.13/site-packages/greenlet/TGreenletGlobals.cpp": 17400526028982558937, + "docs/api/html/doxygen__docs_8h_source.html": 6115156353195135130, + "docs/api/html/group__test__get__dashboards__profile__filter__matches__display__alias__without__detail__fanout.html": 15114828617044175570, + "venv/lib/python3.13/site-packages/anyio/streams/tls.py": 4191898645554875562, + "docs/api/html/group__BulkReplaceResponse.html": 9373003844931059590, + "venv/lib/python3.13/site-packages/numpy/tests/test_numpy_config.py": 3636377988901907424, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/regression/lower_f2py_fortran.f90": 13315882216322269383, + "venv/lib/python3.13/site-packages/pandas/core/groupby/categorical.py": 16588862198627920420, + "docs/api/html/group__frontend__src__lib__stores__maintenance__svelte__js____init.html": 6160087973904348720, + "docs/api/html/group__TestDictionaryCorrection.html": 17994177904345038747, + "docs/api/html/group__test__with__source.html": 12054958327519265597, + "venv/lib/python3.13/site-packages/itsdangerous-2.2.0.dist-info/RECORD": 11111103193315065053, + "docs/api/html/group____validate__superset__connection__fast.html": 1767320346178459487, + "docs/api/html/group__ManifestConsistencyStage.html": 12225398414320906138, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/intranges.py": 12536174834761591006, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_astype.py": 4975959187621745360, + "docs/api/html/group__SupersetClientExtractCompiledSqlFromPreviewResponse.html": 699068057352781572, + "docs/api/html/group__DEFAULT__PREVIEW__PROMPT__TEMPLATE.html": 4498507870595225234, + "backend/src/api/routes/git/_merge_routes.py": 12751818588668193353, + "docs/api/html/search/functions_9.js": 6423268791923178074, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_ddl.py": 3690189094298044728, + "venv/lib/python3.13/site-packages/pandas/_typing.py": 17795648994662434211, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_ppc_linux.h": 15772978805500070727, + "venv/lib/python3.13/site-packages/authlib/oidc/discovery/models.py": 6924198551176217533, + "venv/lib/python3.13/site-packages/pygments/lexers/stata.py": 7249891970174867363, + "backend/src/core/superset_client/_layout_utils.py": 1180616937544609564, + "docs/api/html/group__test__role__permission__association.html": 3634921328837162404, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/clsregistry.py": 1589692649837935355, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_cumulative.py": 16283954014170928273, + "venv/lib/python3.13/site-packages/PIL/PSDraw.py": 1927169421822446045, + "venv/lib/python3.13/site-packages/python_multipart-0.0.21.dist-info/RECORD": 7266315886702289726, + "venv/lib/python3.13/site-packages/pandas/tests/io/xml/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/_dml_constructors.py": 4497038002189188311, + "venv/lib/python3.13/site-packages/idna/uts46data.py": 5698404064763638591, + "venv/lib/python3.13/site-packages/passlib/handlers/mssql.py": 2800599582708170195, + "docs/api/html/group__test__full__mode__default.html": 3915571983694234061, + "docs/api/html/group__test__api__bulk__corrections.html": 13663959216271829060, + "venv/lib/python3.13/site-packages/pip/_internal/resolution/legacy/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/lib/npy-pkg-config/mlib.ini": 16151597765994697599, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/ufuncs.pyi": 14995898537484305307, + "venv/lib/python3.13/site-packages/pip/_internal/utils/glibc.py": 12335359492756627313, + "docs/api/html/group__test__empty__input.html": 17644334770081506611, + "venv/lib/python3.13/site-packages/pygments/lexers/_julia_builtins.py": 8846111188795315103, + "venv/lib/python3.13/site-packages/pandas/core/ops/dispatch.py": 7041711677358147534, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/__init__.py": 15130871412783076140, + "backend/tests/services/clean_release/test_compliance_execution_service.py": 9658943217379916757, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/licenses/LICENSE": 2345070715845618109, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/methods/test_sample.py": 4641567828238191927, + "docs/api/html/group__SupersetContextParsingMixin.html": 6860207674910724587, + "docs/api/html/group__DashboardHub__getVisibleFilterOptions__Function.html": 17131127528619784346, + "venv/lib/python3.13/site-packages/greenlet/TThreadStateDestroy.cpp": 13749797532421836328, + "docs/api/html/group____ensure__user__dashboard__preferences__columns.html": 12772575671333756881, + "venv/lib/python3.13/site-packages/cryptography/hazmat/asn1/asn1.py": 8801155055979135092, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/base.py": 14908084548919567658, + "venv/lib/python3.13/site-packages/_pytest/cacheprovider.py": 5114545353355728201, + "venv/lib/python3.13/site-packages/pandas/core/arrays/_ranges.py": 2572903460327860111, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test__version.py": 9037916251087760255, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_construct_from_scalar.py": 16520136036631155842, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/mt19937-testset-1.csv": 16349400027062875699, + "backend/src/services/clean_release/compliance_orchestrator.py": 6747364300631405520, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_s390_unix.h": 5161826643658505126, + "docs/api/html/group__TestDeprecationAuditFixes.html": 9254534639082865942, + "docs/api/html/group__extractDatasetReviewVersion__Function.html": 18233279301174300230, + "venv/lib/python3.13/site-packages/pandas/core/ops/__init__.py": 4049432353810047365, + "docs/api/html/group__GitPackage.html": 8185926952400552290, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi": 7801211423226951223, + "docs/api/html/group____extract__quoted__segment.html": 14177192301285608602, + "docs/api/html/group__list__plugins.html": 1922104558299502422, + "venv/lib/python3.13/site-packages/fastapi/security/__init__.py": 1345944646061334046, + "venv/lib/python3.13/site-packages/_pytest/pytester.py": 5423287282155948827, + "docs/api/html/search/functions_7.js": 7432376903275069025, + "docs/api/html/group__SupersetContextExtractor.html": 13588033302010707545, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/holiday/test_observance.py": 18178414966262524534, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/index_tricks.py": 10051261976498916957, + "docs/api/doxygen_stripped.c": 14291099198142844291, + "venv/lib/python3.13/site-packages/pandas/tests/extension/__init__.py": 15130871412783076140, + "frontend/src/routes/settings/LoggingSettings.svelte": 5172094246995863925, + "docs/api/html/group__TestCleanReleaseTui.html": 12992766318749624082, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_multithreading.py": 12547048606098186681, + "docs/api/html/group__TaskPersistenceService.html": 12977647248776427832, + "docs/api/html/group__ClarificationStatus.html": 10157970874585041006, + "venv/lib/python3.13/site-packages/rapidfuzz/process_cpp_impl.cpython-313-x86_64-linux-gnu.so": 11767771662042404251, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/offsets.pyi": 13173581775000480811, + "venv/lib/python3.13/site-packages/pip/_vendor/pygments/token.py": 6987328478153445584, + "backend/src/plugins/translate/service_datasource.py": 10240814407336170041, + "docs/api/html/group__get__resource__mappings.html": 3377084676438392153, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_sample.py": 16877779557071324115, + "docs/api/html/group__MergeResolveRequest.html": 17150347272995916362, + "docs/api/html/group__onMount__Function.html": 15261809730593069613, + "venv/lib/python3.13/site-packages/greenlet/__init__.py": 3447613556981242475, + "docs/api/html/group__test__end__all__active__events.html": 15618808237650024096, + "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/oauth2_client.py": 6742098857947604729, + "venv/lib/python3.13/site-packages/httpx/_api.py": 6697370469329778523, + "venv/lib/python3.13/site-packages/starlette/middleware/authentication.py": 15211131264936212938, + "docs/api/html/globals_func.js": 13107479563907806427, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/packages/__init__.py": 15130871412783076140, + "docs/api/html/group__handleCreateBackup__Function.html": 6719288563421799770, + "docs/api/html/group__test__resolve__namespace__separates__demo__and__real.html": 7744970425001491248, + "venv/lib/python3.13/site-packages/pydantic/_internal/_known_annotated_metadata.py": 9308620143218174987, + "docs/api/html/group__get__schedule.html": 11620587396014813935, + "venv/lib/python3.13/site-packages/pandas/core/col.py": 4221271461723119525, + "venv/lib/python3.13/site-packages/PIL/SunImagePlugin.py": 7661622930404688367, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/__init__.py": 11850945878149145990, + "venv/lib/python3.13/site-packages/h11/_writers.py": 8585823094975171480, + "venv/lib/python3.13/site-packages/pygments/lexers/apl.py": 16767474673619335683, + "venv/lib/python3.13/site-packages/fastapi/datastructures.py": 727178955746650271, + "docs/api/html/group__get__environments.html": 1082546386773301101, + "docs/api/html/group__build__summary.html": 14095423152800582584, + "venv/lib/python3.13/site-packages/jeepney/io/__init__.py": 2568357146184259175, + "docs/api/html/group__publish__candidate.html": 1676322270799999151, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/test_scalar_compat.py": 10068989979144965125, + "venv/lib/python3.13/site-packages/pyasn1/type/opentype.py": 340146737126677655, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli/_parser.py": 3540203683732744499, + "docs/api/html/group__test__load__tasks.html": 16906154469503701361, + "venv/lib/python3.13/site-packages/uvicorn/protocols/websockets/__init__.py": 15130871412783076140, + "docs/api/html/group__test__list__gitea__repositories__rejects__non__gitea.html": 8527146536000949913, + "venv/lib/python3.13/site-packages/numpy/f2py/cb_rules.pyi": 12275242654430570028, + "venv/lib/python3.13/site-packages/pygments/lexers/objective.py": 10966124906622044512, + "docs/api/html/group__test__backup__dashboards__pre__checks.html": 9786713373502698624, + "docs/api/html/group__ClarificationStateResult.html": 2917799947820497100, + "docs/api/html/doxygen__docs_8h.js": 3095005433054142131, + "venv/lib/python3.13/site-packages/jeepney/tests/test_low_level.py": 3579024079580951234, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/OSA_py.py": 2494967094400350388, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/_json.py": 6718137926109998531, + "venv/lib/python3.13/site-packages/pygments/lexers/felix.py": 2334148799642808111, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_asfreq.py": 6162659555626011770, + "venv/lib/python3.13/site-packages/numpy/typing/tests/test_runtime.py": 12534621594420844770, + "docs/api/html/group__SupersetLookupService.html": 18424905745600548459, + "venv/lib/python3.13/site-packages/attr/converters.pyi": 17675091788614033166, + "docs/api/html/group__handleCreateGiteaRepo__Function.html": 15118530305807816244, + "docs/api/html/group__DatasetReviewMappingModels.html": 18079997751810017590, + "venv/lib/python3.13/site-packages/pluggy/_manager.py": 18202550145040079612, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_interval.py": 1228451182688768814, + "frontend/playwright-report/trace/playwright-logo.svg": 4728037962520658573, + "venv/lib/python3.13/site-packages/numpy/ma/tests/test_core.py": 12712110303898046818, + "docs/api/html/group__ValidationApiTests.html": 11399974010057798721, + "docs/api/html/group____extract__created__id.html": 16195882368814063060, + "docs/api/html/group__get__check__status.html": 4939629494472656154, + "docs/api/html/group____resolve__task__name.html": 2876621474958502481, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/qt.py": 12828696264909048448, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_loop.py": 6502725909989655118, + "venv/lib/python3.13/site-packages/passlib/tests/test_totp.py": 9150389741890748343, + "docs/api/html/group____encode__sql__value.html": 14512027224697252876, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/selectable.py": 14646717349365560549, + "docs/api/html/group__TestStorageAuditFixes.html": 9774243051070118436, + "venv/lib/python3.13/site-packages/rsa/common.py": 10921682819204792805, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/conftest.py": 25473177671450048, + "docs/api/html/group__test__put__settings.html": 6582837714267844402, + "docs/api/html/group__parse__dashboard__url__for__filters__async.html": 8302124891449146063, + "venv/lib/python3.13/site-packages/pandas/tests/arithmetic/test_period.py": 6255181868181182780, + "docs/api/html/group__TestBuildReportQueryString__Class.html": 12539253061507680489, + "venv/lib/python3.13/site-packages/pygments/lexers/savi.py": 95400050302239274, + "docs/api/html/group__ProfileUtils.html": 7099024507188160608, + "docs/api/html/tab_bd.png": 7964491274183929560, + "docs/api/html/group__SemanticSourceDto.html": 10276129549826437552, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/collections.pyx": 17138729833735744777, + "venv/lib/python3.13/site-packages/secretstorage/defines.py": 9590959702075554048, + "venv/lib/python3.13/site-packages/numpy/__config__.py": 15794735729525094396, + "venv/lib/python3.13/site-packages/pandas/core/indexers/__init__.py": 1756397319068017890, + "docs/api/html/group__DashboardsApiTests.html": 1833223301110054529, + "venv/lib/python3.13/site-packages/websockets/legacy/auth.py": 16685128086396181286, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_np_datetime.py": 18363183516409621205, + "docs/api/html/group__test__global__settings__propagates__storage.html": 7088086585393016607, + "venv/lib/python3.13/site-packages/pandas/core/ops/array_ops.py": 10061020479033421596, + "docs/api/html/group__disable__schedule.html": 12452994962801576996, + "venv/lib/python3.13/site-packages/certifi-2025.11.12.dist-info/RECORD": 12733654377842895588, + "backend/src/services/validation_service.py": 4040391162969506763, + "docs/api/html/group__update__user.html": 16743247671966182710, + "docs/api/html/group__start.html": 18303777950604936330, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_iterrows.py": 3791886201566670087, + "venv/lib/python3.13/site-packages/numpy/ma/__init__.py": 214772578978182427, + "docs/api/html/group__test__datasets__api.html": 13468016019586118937, + "venv/lib/python3.13/site-packages/uvicorn/_subprocess.py": 13965754246493254447, + "backend/src/plugins/translate/__tests__/test_orthogonal_fixes.py": 12993935170413202399, + "frontend/src/lib/components/ui/DatabaseSearchCombobox.svelte": 13085059317395294999, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/token.py": 4747545058753492487, + "docs/api/html/group__ModelsPackage.html": 13346504466563987278, + "docs/api/html/deprecated.html": 7802050220531259948, + "docs/api/html/search/groups_f.js": 14632289900069259892, + "docs/api/html/group__update__field__semantic.html": 3989002979285594854, + "venv/lib/python3.13/site-packages/apscheduler/executors/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/test_period.py": 3419297908709788013, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-exp.csv": 601782991752922510, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/protocol.py": 932296179250981622, + "backend/src/services/reports/normalizer.py": 13510015789619559475, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_reduction.py": 1049551473665255648, + "venv/lib/python3.13/site-packages/numpy/_core/fromnumeric.py": 9409852116555866847, + "docs/api/html/group__GitEnvironmentRoutes.html": 2128130501766405947, + "venv/lib/python3.13/site-packages/jeepney/tests/test_bindgen.py": 8637878018232418583, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/literal.py": 5641382379370828704, + "docs/api/html/group__apply__preview.html": 12571622568156907711, + "docs/api/html/group__ClarificationAnswerRequest.html": 11605609458195798499, + "venv/lib/python3.13/site-packages/pandas/_libs/reshape.pyi": 88721900806893992, + "backend/src/api/routes/translate/_schedule_routes.py": 18139325016758974063, + "docs/api/html/group__CleanReleaseTUI.html": 9540635457913551614, + "docs/api/html/group__SupersetClientFetchAllPages.html": 16697015167259947602, + "docs/api/html/group__ProfileModels.html": 9971230327622812343, + "docs/api/html/group__generate__upsert__sql.html": 1809776775004922247, + "venv/lib/python3.13/site-packages/anyio/abc/__init__.py": 11428476337116642278, + "venv/lib/python3.13/site-packages/pip/_internal/operations/prepare.py": 13514839972066861359, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/multiindex/test_indexing_slow.py": 12558235638488427077, + "venv/lib/python3.13/site-packages/PIL/Hdf5StubImagePlugin.py": 15654153796225833950, + "venv/lib/python3.13/site-packages/pip/_internal/metadata/importlib/__init__.py": 10834852742917144496, + "venv/lib/python3.13/site-packages/pygments/lexers/nix.py": 15050086330545600356, + "docs/api/html/group__TranslateDictionariesApi.html": 3796476465563433653, + "venv/lib/python3.13/site-packages/pygments/lexers/data.py": 9365024327689738663, + "venv/lib/python3.13/site-packages/pygments/__main__.py": 13200500591994479045, + "backend/src/services/clean_release/__tests__/test_compliance_orchestrator.py": 15537957042757255513, + "docs/api/html/group__security__badge__service.html": 15450560198932649899, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/cymysql.py": 5570881524647789741, + "docs/api/html/group__MigrationArchiveParser.html": 5158138547033150024, + "venv/lib/python3.13/site-packages/urllib3/py.typed": 12220177918227495093, + "venv/lib/python3.13/site-packages/smmap/test/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/jsonschema_specifications/schemas/draft202012/vocabularies/content": 12465123883296161860, + "venv/lib/python3.13/site-packages/pandas/tests/libs/test_join.py": 5982692266872978444, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/cursor.py": 8074527784886981710, + "backend/src/plugins/translate/dictionary_filter.py": 18047895364995512274, + "docs/api/html/group__handleBulkCommit__Function.html": 13824296665546126425, + "docs/api/html/group__test__detect__virtual__columns.html": 7581525979923931052, + "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/RECORD": 173225030102092319, + "venv/lib/python3.13/site-packages/pandas/tests/io/generate_legacy_storage_files.py": 11015954144633661960, + "venv/lib/python3.13/site-packages/python_jose-3.5.0.dist-info/RECORD": 16342326945648353387, + "frontend/build/_app/immutable/chunks/B2x1wvBz.js": 18181710553832181445, + "docs/api/html/group__TermCorrectionPopup.html": 7641550414720902162, + "docs/api/html/group__docker__backend__Dockerfile.html": 9397362251378611899, + "docs/api/html/group__handleGenerateMessage__Function.html": 11846603189188412357, + "venv/lib/python3.13/site-packages/fastapi/dependencies/__init__.py": 15130871412783076140, + "docs/api/html/group__test__parse__datetime__iso__string.html": 8814123590453372630, + "venv/lib/python3.13/site-packages/pip/_vendor/packaging/licenses/__init__.py": 2635182244050911910, + "docs/api/html/group__Logger.html": 11994362780557213627, + "docs/api/html/group__ApproveMappingRequest.html": 3410582796828079029, + "venv/lib/python3.13/site-packages/pydantic/parse.py": 13750341403702794392, + "venv/lib/python3.13/site-packages/pygments/lexers/_mapping.py": 12987629396101138833, + "venv/lib/python3.13/site-packages/greenlet/TExceptionState.cpp": 17617354576371846109, + "venv/lib/python3.13/site-packages/pygments/lexers/markup.py": 10311057264960923433, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc8628/device_code.py": 6712610002227849281, + "docs/api/html/group____is__masked__or__invalid__api__key.html": 15965724501625265254, + "venv/lib/python3.13/site-packages/websockets/uri.py": 264376168984862773, + "docs/api/html/group__RetentionPolicy.html": 12974101386887046578, + "docs/api/html/group__map__columns.html": 11522895411125783141, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_indexing.py": 11572911419313573163, + "docs/api/html/group__test__single__line__text.html": 2397299118737677285, + "venv/lib/python3.13/site-packages/numpy/char/__init__.py": 4428218097234308768, + "venv/lib/python3.13/site-packages/requests/adapters.py": 17161109043243436200, + "venv/lib/python3.13/site-packages/gitdb/test/test_util.py": 541144638852210407, + "venv/lib/python3.13/site-packages/numpy/fft/_pocketfft.py": 6142062990691556076, + "venv/lib/python3.13/site-packages/yaml/parser.py": 18021832376874455801, + "docs/api/html/group__handleSaveUser__Function.html": 4104256279914165704, + "docs/api/html/group__SuggestRequest.html": 4340073923627780117, + "frontend/src/services/taskService.js": 11368052191249479533, + "venv/lib/python3.13/site-packages/pip/_internal/utils/urls.py": 8698341051522816167, + "venv/lib/python3.13/site-packages/pandas/io/parsers/__init__.py": 11752833703934347122, + "venv/lib/python3.13/site-packages/pip/_internal/cli/progress_bars.py": 7584699216537478969, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_direct.py": 12680113511641199070, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/JaroWinkler_py.py": 16189204441438239231, + "venv/lib/python3.13/site-packages/numpy/random/_examples/numba/extending.py": 16515485226251040454, + "docs/api/html/group__normalize__density.html": 4520562612418312413, + "docs/api/html/group__frontend__src__routes__datasets__review__review__workspace__helpers__js____getWorkspaceStateLabel.html": 3907642846891320094, + "docs/api/html/group__test__run__detail__not__found.html": 5832122095347665056, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7591/__init__.py": 348469143777130970, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/masked_reductions.py": 633644255158859565, + "backend/tests/core/migration/test_archive_parser.py": 8027202509785909637, + "docs/api/html/group__TranslationLanguage.html": 10040359770577893237, + "docs/api/html/group____get__preference__row.html": 10336167497316255170, + "docs/api/html/group__load__excel__mappings.html": 1764004230841108037, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_deprecations.py": 6015734648984591027, + "venv/lib/python3.13/site-packages/attr/_typing_compat.pyi": 2823472697859409877, + "docs/api/html/group__compute__build__token__metadata.html": 12931039213712686625, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7518/util.py": 5252158959761945519, + "docs/api/html/group____resolve__markdown__datasource.html": 15564490152308108829, + "venv/lib/python3.13/site-packages/pip/_vendor/distro/__main__.py": 2688850704829116818, + "venv/lib/python3.13/site-packages/numpy/f2py/auxfuncs.py": 2234931733687557433, + "venv/lib/python3.13/site-packages/starlette/responses.py": 14081178833432955042, + "docs/api/html/group__test__git__plugin__fallback__creates__new.html": 3612866020087373120, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/masked/test_arrow_compat.py": 12986187285988432338, + "venv/lib/python3.13/site-packages/_pytest/assertion/rewrite.py": 2425990712758915831, + "docs/api/html/group__MaintenanceTaskResult.html": 15638476531187491715, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_warnings.py": 13071210233876253749, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/test_get_dummies.py": 16112674981222844375, + "venv/lib/python3.13/site-packages/numpy/ma/__init__.pyi": 1855615156913010107, + "frontend/build/_app/immutable/nodes/10.BMcx7HQ6.js": 17292795487925211032, + "docs/api/html/group__test__dataset__review__scoped__command__routes__field__semantics__update.html": 453203095227910539, + "venv/lib/python3.13/site-packages/websockets/speedups.c": 11800200877763464246, + "venv/lib/python3.13/site-packages/PIL/ImageFilter.py": 10974179993355630141, + "docs/api/html/group____patch__dashboard__metadata.html": 4454475099365896302, + "docs/api/html/group__CleanReleaseAuditLog.html": 13803004817531190907, + "backend/src/core/__tests__/test_superset_profile_lookup.py": 12374214375171590188, + "frontend/src/components/git/BranchSelector.svelte": 3899942492629852811, + "venv/lib/python3.13/site-packages/pandas/plotting/_matplotlib/timeseries.py": 17641722582848932332, + "venv/lib/python3.13/site-packages/pip/_vendor/idna/codec.py": 14814999235499530522, + "docs/api/html/group__test__create__empty__permissions.html": 2212767387589401498, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/_writer.py": 15053365792216907149, + "venv/lib/python3.13/site-packages/pygments/lexers/_sql_builtins.py": 5906655440517434734, + "docs/api/html/group____dataset__review__session.html": 17789442203180064219, + "venv/lib/python3.13/site-packages/pip/_internal/commands/uninstall.py": 11003472265011262515, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_api.py": 13739775047493489785, + "venv/lib/python3.13/site-packages/charset_normalizer/models.py": 9917300217816275821, + "frontend/src/lib/ui/Input.svelte": 1114920008107220678, + "backend/src/services/superset_lookup_service.py": 131886522963644068, + "docs/api/html/group__get__dataset__detail.html": 14957609761194222972, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_iat.py": 3570464615146398178, + "venv/lib/python3.13/site-packages/pygments/lexers/phix.py": 16775285097768256238, + "venv/lib/python3.13/site-packages/greenlet/TThreadStateCreator.hpp": 9887867766190459665, + "venv/lib/python3.13/site-packages/pygments/formatters/img.py": 18230180171537565208, + "frontend/build/_app/immutable/chunks/BGXtRGj2.js": 17304982641954297474, + "docs/api/html/group__DashboardHub__handleSort__Function.html": 13034575267790584101, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_integrity.py": 12010564145080323987, + "docs/api/html/group__loadBranches__Function.html": 2222762227047931041, + "backend/src/api/routes/git/_repo_lifecycle_routes.py": 410621371876058173, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm32_ios.h": 6751259472945638998, + "backend/src/services/clean_release/policy_resolution_service.py": 1025435122296379201, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_strings.py": 17398806130402098912, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/metrics_cpp_avx2.cpython-313-x86_64-linux-gnu.so": 2991745295485163924, + "docs/api/html/group__clean__release__exceptions.html": 16008981423566577546, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/util/url.py": 9692934100602135106, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/associationproxy.py": 7421910137064160936, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/groupby.py": 12749730954888633240, + "venv/lib/python3.13/site-packages/pandas/tests/util/__init__.py": 15130871412783076140, + "docs/api/html/group__trigger__sync__now.html": 3396264963221246266, + "docs/api/html/group__handleGenerateDocs__Function.html": 10904959743671367375, + "venv/lib/python3.13/site-packages/pygments/lexers/parasail.py": 7758704230750989282, + "venv/lib/python3.13/site-packages/passlib/tests/__main__.py": 16477180140297957650, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_parsing.py": 2228959015420278458, + "venv/lib/python3.13/site-packages/PIL/SgiImagePlugin.py": 6916200065790425497, + "venv/lib/python3.13/site-packages/pandas/tests/interchange/test_spec_conformance.py": 16448324304809345527, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/chararray.pyi": 9683985931409244216, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/string_/test_string_arrow.py": 10008395772220468318, + "venv/lib/python3.13/site-packages/pygments/lexers/_scilab_builtins.py": 17453812809700086888, + "backend/src/services/notifications/__init__.py": 16179868089470006686, + "venv/lib/python3.13/site-packages/pandas/tests/internals/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/__init__.py": 15130871412783076140, + "backend/src/api/routes/dashboards/_detail_routes.py": 3246373568851818130, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/style/test_to_typst.py": 14619529283550788275, + "docs/api/html/group__remove__future.html": 11104884545239660137, + "venv/lib/python3.13/site-packages/pip/_vendor/platformdirs/__init__.py": 8880435562116660648, + "venv/lib/python3.13/site-packages/pandas/plotting/_core.py": 6766059152026241747, + "venv/lib/python3.13/site-packages/ecdsa/errors.py": 11755424742691057760, + "backend/tests/services/clean_release/test_compliance_task_integration.py": 1554378264976811661, + "docs/api/html/group__frontend__src__services__git__utils__js____resolveDefaultConfig.html": 13108374365819353481, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/cast/test_infer_dtype.py": 1647214604678171565, + "docs/api/html/group__test__get__clarification__state__returns__empty__payload__when__session__has__no__record.html": 13354220940558115259, + "venv/lib/python3.13/site-packages/pandas/tests/io/formats/__init__.py": 15130871412783076140, + "backend/tests/core/migration/test_dry_run_orchestrator.py": 5618205549212894117, + "docs/api/html/group__logout.html": 16684691150600527260, + "docs/api/html/group__dataset__review__api__dependencies.html": 4669339577033010960, + "venv/lib/python3.13/site-packages/pandas/core/arrays/floating.py": 1215586266958421991, + "backend/src/core/task_manager/task_logger.py": 6134165406387688582, + "venv/lib/python3.13/site-packages/pydantic/experimental/__init__.py": 492399139963056461, + "docs/api/html/group__DashboardListingRoutes.html": 4195282586959114740, + "venv/lib/python3.13/site-packages/passlib/tests/test_utils_md4.py": 15270721044910698449, + "docs/api/html/group__test__git__plugin__uses__shared__config__manager.html": 7129798876556226875, + "venv/lib/python3.13/site-packages/keyring-25.7.0.dist-info/RECORD": 10264342250058307301, + "docs/api/html/group__test__compliance__run__missing__manifest__marks__task__failed.html": 11141720046946032723, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_numeric.py": 9383693732009547935, + "docs/api/html/group____character__block__fallback.html": 12363981885413560924, + "docs/api/html/group__ClarificationQuestionDto.html": 4864141145333401395, + "venv/lib/python3.13/site-packages/urllib3/_version.py": 839747992523118887, + "backend/git_repos/remote/test-repo.git/objects/c5/b992984fe856bd81206304a881faa3087937cf": 2441623644664166468, + "backend/src/__init__.py": 11250920420388310655, + "docs/api/html/group__GitManagerUnfinishedMergeIntegrationTest__Module.html": 5158591590774869996, + "docs/api/html/group__SupersetContextExtractorBase____extract__dashboard__permalink__key.html": 12241603215085833674, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_memmap.py": 8709963808115492688, + "docs/api/html/group__BatchApproveMappingRequest.html": 2370830240828093817, + "venv/lib/python3.13/site-packages/numpy/lib/_array_utils_impl.py": 14446508217220482719, + "frontend/src/lib/components/dataset-review/SourceIntakePanel.svelte": 2392958189014264590, + "backend/src/api/auth.py": 14692769082165694028, + "docs/api/html/group__DashboardModels.html": 15051964313793389785, + "backend/test.db": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/resample/test_resampler_grouper.py": 8388490036390951341, + "backend/src/api/routes/dashboards/_action_routes.py": 10305887713397749487, + "venv/lib/python3.13/site-packages/anyio/abc/_eventloop.py": 2023190981288767991, + "venv/lib/python3.13/site-packages/starlette-0.50.0.dist-info/WHEEL": 2357997949040430835, + "docs/api/html/group__PreviewAcceptResponse.html": 2553928199035482431, + "docs/api/html/group__LoginPage.html": 5394223316995061464, + "docs/api/html/group__GitRepoLifecycleRoutes.html": 8015073860128542249, + "docs/api/html/group__test__dataset__dashboard__relations__script.html": 682612274542588295, + "docs/api/html/nav_fd.png": 7284442651853922987, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/_internal_utils.py": 4091305333167213279, + "frontend/build/_app/immutable/nodes/22.DEzvIFDT.js": 9396511863397825066, + "docs/api/html/group__DashboardHub__handleRestoreProfileFilter__Function.html": 13810703798808089221, + "docs/api/html/group__SupersetContextExtractorPII.html": 8059785191565221125, + "docs/api/html/group__GitServiceContractTests.html": 220168520751414086, + "docs/api/html/navtreeindex7.js": 3618174960812941697, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/numerictypes.pyi": 15565573472138344755, + "docs/api/html/group____ensure__conversation.html": 4799209468607073839, + "venv/lib/python3.13/site-packages/ecdsa/__init__.py": 6237633580090653788, + "backend/alembic/versions/b1c2d3e4f5a6_add_source_hash_to_translation_records.py": 4775534557742900399, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_pyf_src.py": 12351476647369971852, + "docs/api/html/group__TestTaskPersistenceHelpers.html": 8081661106396480485, + "docs/api/html/group__read__root.html": 3120255621105556309, + "venv/lib/python3.13/site-packages/pandas/_libs/index.cpython-313-x86_64-linux-gnu.so": 18409579812171549318, + "docs/api/html/group__TestGetReportsAsync__Class.html": 7630216116279114545, + "venv/lib/python3.13/site-packages/referencing/tests/test_referencing_suite.py": 8875120876162738440, + "docs/api/html/group__test__log__methods__delegation.html": 9316206776804683442, + "venv/lib/python3.13/site-packages/numpy/core/__init__.pyi": 15130871412783076140, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth1/cache.py": 15037055977924167732, + "docs/api/html/group__ErrorContext.html": 3882007036049607733, + "docs/api/html/group__MappingResponse.html": 14098548275925135132, + "venv/lib/python3.13/site-packages/pandas/io/parsers/c_parser_wrapper.py": 5841064965672872661, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libselinux-0922c95c.so.1": 16516617710645376769, + "frontend/build/_app/immutable/chunks/UPZEHqRP.js": 5650828200456623395, + "venv/lib/python3.13/site-packages/pygments/lexers/prql.py": 1159462562014166646, + "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/RECORD": 11904769847385571600, + "venv/lib/python3.13/site-packages/_pytest/python_api.py": 12953851690889336092, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_droplevel.py": 2071197388394658690, + "venv/lib/python3.13/site-packages/fastapi-0.127.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/datetimes/test_reductions.py": 1713831062142840146, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_regression.py": 16293647824734937323, + "venv/lib/python3.13/site-packages/_pytest/threadexception.py": 10464996327276961035, + "docs/api/html/group__sync__dashboard.html": 8986119955907540350, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/path_registry.py": 8410829659513707067, + "docs/api/html/group__CompiledSQLPreview.html": 3548673488714120828, + "docs/api/html/group__test__tasks__logs__module.html": 17382599826426935479, + "venv/lib/python3.13/site-packages/pydantic/type_adapter.py": 10162988530225478692, + "docs/api/html/group__create__git__config.html": 3230144786855183113, + "backend/src/models/dataset_review_pkg/_execution_models.py": 13278357366267031549, + "docs/api/html/group__delete__user.html": 17189025779640639203, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/crackfortran/foo_deps.f90": 14350239197565389508, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/test_indexing.py": 1926721846569184112, + "docs/api/html/group__Utils__Module.html": 1214868907405242018, + "venv/lib/python3.13/site-packages/urllib3/response.py": 1987354357306756790, + "venv/lib/python3.13/site-packages/dateutil/utils.py": 7067026915090881998, + "venv/lib/python3.13/site-packages/pandas/_libs/byteswap.cpython-313-x86_64-linux-gnu.so": 17856848989827220388, + "venv/lib/python3.13/site-packages/pygments/lexers/lilypond.py": 1088755646568511197, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_formats.py": 10263085276270778330, + "venv/lib/python3.13/site-packages/pandas/tests/dtypes/test_dtypes.py": 13065857166166716628, + "docs/api/html/group__TASK__TYPE__PROFILES.html": 4360269911551960850, + "venv/lib/python3.13/site-packages/attr/_funcs.py": 5302917072419624193, + "venv/lib/python3.13/site-packages/numpy/random/mtrand.pyi": 17144590106028661128, + "docs/api/html/group__update__migration__settings.html": 16961141318650899544, + "docs/api/html/group____match__dataset__review__field.html": 2398745550798139744, + "venv/lib/python3.13/site-packages/numpy/f2py/use_rules.pyi": 18395688193449688360, + "frontend/src/routes/admin/settings/llm/+page.svelte": 17653948269643098768, + "venv/lib/python3.13/site-packages/pandas/compat/pyarrow.py": 13693379998785127538, + "docs/api/html/group__MaintenanceEventListResponse.html": 11340834971136314876, + "frontend/src/lib/stores/__tests__/taskDrawer.test.js": 9115135514077743547, + "docs/api/html/group__test__save__config__syncs__environment__records__for__fk__backed__flows.html": 13497171163902546222, + "venv/lib/python3.13/site-packages/gitdb/utils/encoding.py": 1668793658272579497, + "venv/lib/python3.13/site-packages/pygments/lexers/math.py": 1647133236144311250, + "venv/lib/python3.13/site-packages/pandas/tests/io/json/test_compression.py": 8577756801858495168, + "venv/lib/python3.13/site-packages/numpy/lib/_array_utils_impl.pyi": 11535882608355652318, + "venv/lib/python3.13/site-packages/pandas/_libs/tslibs/parsing.pyi": 11967691665766452312, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-tanh.csv": 6674536825156196036, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi": 9835891299056543360, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_operators.py": 12686786829906210592, + "docs/api/html/group__AutomationPage.html": 6103305575315188006, + "docs/api/html/group__delete__logs__for__tasks.html": 8497322347744097527, + "frontend/build/_app/immutable/chunks/C9YJaesY.js": 17698859127816820470, + "docs/api/html/group__test__headless__fallback.html": 12179006034022319490, + "docs/api/html/group__REASONING__OVERHEAD.html": 6648865310859009739, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/gevent.py": 4811840397266785551, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/constants.pyi": 4415188581374004936, + "docs/api/html/group____get__owned__session__or__404.html": 394393571117594920, + "docs/api/html/group__test__models.html": 5352406217241507006, + "venv/lib/python3.13/site-packages/attr/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/psycopg2_binary.libs/libkrb5-fcafa220.so.3.3": 5620628698712971642, + "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/WHEEL": 5160964596297665692, + "venv/lib/python3.13/site-packages/pip/_internal/cli/req_command.py": 2887890799766730546, + "venv/lib/python3.13/site-packages/numpy/random/tests/test_generator_mt19937_regressions.py": 8981142329261965538, + "venv/lib/python3.13/site-packages/httpcore/_backends/base.py": 5491727479625093183, + "docs/api/html/group__TaskGraph.html": 14527954946833016645, + "venv/lib/python3.13/site-packages/pandas/tests/frame/__init__.py": 15130871412783076140, + "backend/src/plugins/translate/__tests__/test_target_schema.py": 2950009660172053425, + "docs/api/html/group____execute__insert__sql.html": 14665396960311782890, + "venv/lib/python3.13/site-packages/pandas/core/util/hashing.py": 13106575357604888913, + "docs/api/html/group__orchestrator__config.html": 16901111520740994959, + "venv/lib/python3.13/site-packages/fastapi/middleware/wsgi.py": 3706578020491442104, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimelike_/__init__.py": 15130871412783076140, + "docs/api/html/group__ProfilePreferenceUpdateRequest.html": 4083205289293169459, + "docs/api/html/group__test__get__remote__id__returns__integer.html": 10764704660366053638, + "docs/api/html/group__run__manifest__build.html": 9207320813511287781, + "docs/api/html/group__test__get__repository__status__batch__deduplicates__and__truncates__ids.html": 17068511664214583355, + "docs/api/html/group__DashboardURLFilterExtraction.html": 4077034173336465746, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/asymmetric_key.py": 14948661854506285135, + "docs/api/html/group__DictionaryEntryResponse.html": 14840442294467132189, + "venv/lib/python3.13/site-packages/pip/_internal/distributions/sdist.py": 9490366272695301385, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/lib_polynomial.pyi": 4266795948450921502, + "venv/lib/python3.13/site-packages/pandas/io/sas/__init__.py": 8095743504390517992, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/__init__.py": 15487893533770969571, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/__init__.py": 12290228927283601067, + "venv/lib/python3.13/site-packages/httpcore/_sync/http2.py": 11167798787131917524, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/callback/gh25211.f": 1486878017876900890, + "frontend/build/_app/immutable/nodes/39.Dv1h6Fxq.js": 11914548040937603474, + "backend/src/models/profile.py": 12524181549230399253, + "venv/lib/python3.13/site-packages/pygments/lexers/gdscript.py": 12775803139854052838, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_base.py": 16710163879060522196, + "docs/api/html/group__bundle__build__mode.html": 16344595277983678406, + "venv/lib/python3.13/site-packages/uvicorn/lifespan/__init__.py": 15130871412783076140, + "backend/git_repos/remote/test-repo.git/hooks/fsmonitor-watchman.sample": 14381968406977928721, + "venv/lib/python3.13/site-packages/authlib/integrations/base_client/sync_openid.py": 5670082466989878756, + "venv/lib/python3.13/site-packages/pandas/core/interchange/dataframe_protocol.py": 12857147443873820285, + "venv/lib/python3.13/site-packages/pip/_internal/models/link.py": 7172346414535657925, + "docs/api/html/search/functions_15.js": 3151355335604935323, + "venv/lib/python3.13/site-packages/pandas/tests/series/indexing/test_indexing.py": 14461606056665485421, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/period/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/bcrypt/_bcrypt.abi3.so": 8691731321358529264, + "venv/lib/python3.13/site-packages/PIL/ImageText.py": 15322496455608242001, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/processors.py": 4817637175145012571, + "venv/lib/python3.13/site-packages/sqlalchemy/event/legacy.py": 13465911776953636949, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/base.py": 14734745827490220667, + "backend/src/api/routes/assistant/_dispatch.py": 9318875739506706096, + "venv/lib/python3.13/site-packages/jsonschema_specifications/tests/test_jsonschema_specifications.py": 12693210357718751894, + "venv/lib/python3.13/site-packages/pip/_internal/operations/__init__.py": 15130871412783076140, + "docs/api/html/group__checkout__branch.html": 2135218692165280454, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/common/gh19161.f90": 7691871466158049079, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_nlargest.py": 1423106021399469694, + "venv/lib/python3.13/site-packages/pip/_internal/commands/debug.py": 13528633965821062950, + "docs/api/html/group__CleanReleaseV2ApiTests.html": 17398513879675376238, + "docs/api/html/group____parsing__imports.html": 14931596898828785688, + "venv/lib/python3.13/site-packages/numpy/_core/include/numpy/utils.h": 3920393832993063886, + "docs/api/html/search/mag_seld.svg": 5172700322779250184, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/scripts.py": 8759605303886441976, + "docs/api/html/group____resolve__profile__actor__aliases.html": 11823740193965915284, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_indexing.py": 8943385096811168079, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/traversals.py": 1188980668212022868, + "frontend/src/routes/datasets/review/__tests__/dataset_review_entry.test.js": 18445680453131807754, + "venv/lib/python3.13/site-packages/httpx/_content.py": 1301854837767395687, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-cos.csv": 12896264205153363031, + "venv/lib/python3.13/site-packages/pandas/tests/copy_view/test_astype.py": 4023134352880775277, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/test_mixed.py": 3476101699679108025, + "docs/api/html/group__TestArchiveParser.html": 15611159576834520636, + "docs/api/html/group__ValidationFinding.html": 10426135687421865521, + "docs/api/html/group__test__start__check__and__get__status__contract.html": 11086148140670150623, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/validator.py": 14200019408839159476, + "venv/lib/python3.13/site-packages/numpy/lib/_type_check_impl.pyi": 2667658052734929089, + "venv/lib/python3.13/site-packages/numpy/core/function_base.py": 12696640832638144604, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_dataframe.py": 14945138617962156057, + "venv/lib/python3.13/site-packages/bcrypt/__about__.py": 11196369962175692786, + "docs/api/html/group____generate__unique__name.html": 17753267115013703674, + "venv/lib/python3.13/site-packages/pandas/io/formats/style_render.py": 13586834368514801953, + "venv/lib/python3.13/site-packages/PIL/SpiderImagePlugin.py": 12234762087257163606, + "venv/lib/python3.13/site-packages/cffi/_shimmed_dist_utils.py": 4824806157907607487, + "docs/api/html/group__DashboardTaskHistoryItem.html": 1713647374003736687, + "venv/lib/python3.13/site-packages/pyyaml-6.0.3.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pycparser/lextab.py": 16045770806700381661, + "frontend/src/app.css": 3020720639702954139, + "venv/lib/python3.13/site-packages/git/refs/symbolic.py": 14996822770181935589, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/timedeltas/methods/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/context.py": 1041624619197012753, + "docs/api/html/group__openCreateModal__Function.html": 8404560973305150574, + "docs/api/html/group__SupersetClientGetDatasetLinkedDashboardCount.html": 4679132333842497993, + "venv/lib/python3.13/site-packages/pytest_asyncio-1.3.0.dist-info/METADATA": 12747626683405487434, + "venv/lib/python3.13/site-packages/numpy/polynomial/_polybase.pyi": 15864712173815045309, + "frontend/src/lib/components/dataset-review/__tests__/source_intake_panel.ux.test.js": 17228280298558782730, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/constrain.py": 6513876973118703677, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/__init__.py": 15130871412783076140, + "docs/api/html/group__auto__size__batches.html": 1896970568485171466, + "docs/api/html/group__test__ux__state__contracts.html": 17383839779640281908, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_multi_thread.py": 5660352470978621226, + "venv/lib/python3.13/site-packages/apscheduler/util.py": 11440701924954413440, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/asymmetric/rsa.py": 7852235015155694076, + "venv/lib/python3.13/site-packages/charset_normalizer/api.py": 9172704759115759638, + "venv/lib/python3.13/site-packages/pip/_vendor/tomli_w/py.typed": 9796674040111366709, + "venv/lib/python3.13/site-packages/numpy/linalg/_umath_linalg.cpython-313-x86_64-linux-gnu.so": 17652852308919396403, + "venv/lib/python3.13/site-packages/pip/_vendor/msgpack/__init__.py": 5896924546560667519, + "docs/api/html/group__get__next__executions.html": 11223768021455297815, + "docs/api/html/group____get__linked__dashboards.html": 4945121824645468559, + "docs/api/html/group__clear__tasks.html": 2396216755945302765, + "venv/lib/python3.13/site-packages/rapidfuzz/process_cpp.py": 16797760903996739079, + "backend/src/services/health_service.py": 7707107506464919176, + "venv/lib/python3.13/site-packages/pip/_vendor/__init__.py": 11734104142988812647, + "docs/api/html/group____normalize__lookup__payload.html": 11273830722028075585, + "docs/api/html/group__test__update__task__not__found.html": 14144153955621354369, + "docs/api/html/group__frontend__src__lib__stores__translationRun__js____startTranslationRun.html": 11102301560013944310, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_partial_slicing.py": 16219611534574666182, + "venv/lib/python3.13/site-packages/sqlalchemy/engine/__init__.py": 6327819603201859020, + "docs/api/html/group__AuthStore.html": 6433208268652425169, + "docs/api/html/group__SeedSupersetLoadTestScript.html": 2748544528766669921, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/test_subclass.py": 12453252499544981915, + "venv/lib/python3.13/site-packages/apscheduler/schedulers/twisted.py": 16059862619165885730, + "venv/lib/python3.13/site-packages/pygments/lexers/_cocoa_builtins.py": 15468347167912293394, + "venv/lib/python3.13/site-packages/ecdsa/test_pyecdsa.py": 14542286382742044648, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_subclass.py": 16342917051908786497, + "venv/lib/python3.13/site-packages/numpy/testing/__init__.pyi": 8126257788928282891, + "venv/lib/python3.13/site-packages/pandas/_libs/missing.pyi": 13543139288840944411, + "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/METADATA": 3044554568188160018, + "venv/lib/python3.13/site-packages/numpy/ctypeslib/__init__.pyi": 13208953770241664384, + "docs/api/html/group____resolve__dashboard__id__by__ref.html": 16216818858438055057, + "venv/lib/python3.13/site-packages/pyasn1/type/base.py": 6801504886392649787, + "backend/src/plugins/translate/dictionary.py": 4150581558765697237, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_alter_axes.py": 11338712836362534969, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_setops.py": 5208912445718807372, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/dml.py": 6567627855667533645, + "venv/lib/python3.13/site-packages/cryptography/hazmat/backends/openssl/__init__.py": 4870269250323682576, + "docs/api/html/group__SupersetDashboardsCrudMixin.html": 9711358306599693626, + "docs/api/html/group__test__get__remote__ids__batch__returns__dict.html": 9840452755032662260, + "venv/lib/python3.13/site-packages/pandas/tests/frame/test_ufunc.py": 5025605639221470838, + "venv/lib/python3.13/site-packages/annotated_types-0.7.0.dist-info/licenses/LICENSE": 16499431172938528491, + "docs/api/html/group__test__empty__model__returns__false.html": 15426733626551187888, + "docs/api/html/group__FeaturesSettings.html": 5116404687015486795, + "docs/api/html/group__SessionCollaboratorDto.html": 13064735570529712848, + "venv/lib/python3.13/site-packages/pandas/core/util/numba_.py": 3535857372998653863, + "venv/lib/python3.13/site-packages/uvicorn-0.40.0.dist-info/REQUESTED": 15130871412783076140, + "docs/api/html/group__fetchRunDetail__Function.html": 6020648800343509598, + "docs/api/html/group__test__list__jobs.html": 3648457057716850116, + "venv/lib/python3.13/site-packages/idna-3.11.dist-info/WHEEL": 8600534672961461758, + "docs/api/html/group__override__detected__language.html": 18199671765025303070, + "docs/api/html/group__AUTH__DATABASE__URL.html": 7086189906630592132, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi": 16042272072158438261, + "docs/api/html/group____build__task__observability__summary.html": 8840583376339929930, + "docs/api/html/group__CleanPolicySnapshot.html": 4218818132714115677, + "docs/api/html/group__test__get__dashboards__env__not__found.html": 430793696501404989, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_export_format.py": 17862222951776199694, + "venv/lib/python3.13/site-packages/numpy/f2py/__init__.pyi": 3566887042414273892, + "docs/api/html/group__MaintenanceStore.html": 3766820613250188744, + "backend/tests/test_core_scheduler.py": 2305397851769292578, + "backend/src/core/__init__.py": 8673978627093182792, + "backend/tests/test_translate_corrections.py": 6483644195889451514, + "docs/api/html/group__TestDemoModeIsolation.html": 16048106037006305955, + "venv/lib/python3.13/site-packages/pygments/lexers/oberon.py": 15220143799603451830, + "backend/src/plugins/translate/prompt_builder.py": 11939931262286362350, + "venv/lib/python3.13/site-packages/pandas/core/series.py": 11618272682977710696, + "venv/lib/python3.13/site-packages/websockets/asyncio/messages.py": 6848925149930551457, + "docs/api/html/group__test__git__service__repositorys__typo__regression.html": 12032073559759337916, + "docs/api/html/group____FakeQuery.html": 2190196221479025836, + "docs/api/html/search/pages_1.js": 3711959322811078222, + "backend/src/core/superset_client/_datasets_preview.py": 15457586484984946621, + "backend/tests/services/clean_release/test_candidate_manifest_services.py": 4252479336748536986, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/revocation.py": 5718403706971163960, + "docs/api/html/group__onDestroy__Function.html": 1351684727316654046, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/boolean/test_astype.py": 15384141282611151560, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi": 7385072545198817771, + "venv/lib/python3.13/site-packages/numpy/lib/_arraysetops_impl.py": 5583478355093966990, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/common/test_inf.py": 8659210689723088321, + "docs/api/html/plus.svg": 9293766439275217251, + "venv/lib/python3.13/site-packages/pygments/lexers/scdoc.py": 8481749542463754279, + "frontend/src/components/tools/MapperTool.svelte": 3019722694056442354, + "venv/lib/python3.13/site-packages/pandas/tests/test_errors.py": 10116716310156374885, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_business_quarter.py": 11099677280196239755, + "docs/api/html/group__locale__Store.html": 3681806005291514520, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/assumed_shape/foo_mod.f90": 5765181406654284736, + "docs/api/html/group__DictionariesPage.html": 10830021443332069379, + "docs/api/html/group__GitLLMExtensionModule.html": 5836066463515389762, + "venv/lib/python3.13/site-packages/pygments/lexers/yang.py": 7409365668425173823, + "docs/api/html/group__SidebarTest.html": 12608676498908713689, + "venv/lib/python3.13/site-packages/pygments/lexers/idl.py": 11454152060351801696, + "docs/api/html/group__DashboardHub__getColumnCellValue__Function.html": 10318545865816410175, + "docs/api/html/group__MaintenanceChartManager.html": 457454489502690100, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/ciphers/modes.py": 6832635056228445650, + "backend/src/models/mapping.py": 17370626239851802183, + "backend/src/plugins/translate/__tests__/test_dictionary_correction.py": 17508858180216288123, + "venv/lib/python3.13/site-packages/numpy/__config__.pyi": 1422114139050700402, + "docs/api/html/group____has__any__permission.html": 3803466462586983731, + "docs/api/html/group__update__validation__policy.html": 13352530740640222844, + "docs/api/html/group____matches__actor__case__insensitive.html": 218018109702683196, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/period/test_arithmetic.py": 13320788210970132239, + "venv/lib/python3.13/site-packages/httpx/__init__.py": 6383055693166097719, + "venv/lib/python3.13/site-packages/jose/backends/native.py": 50023158618000658, + "venv/lib/python3.13/site-packages/pandas/util/_validators.py": 10201915528715968165, + "venv/lib/python3.13/site-packages/pandas/_config/localization.py": 11197430792343731762, + "docs/api/html/group__test__register__candidate__rejects__empty__artifact__set.html": 16268783415250759980, + "frontend/src/routes/datasets/DatasetList.svelte": 12931773180198281284, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____closeDrawer.html": 8754263409785426495, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_print.py": 598821365691498702, + "venv/lib/python3.13/site-packages/pandas/arrays/__init__.py": 10005095663840461954, + "venv/lib/python3.13/site-packages/pydantic/deprecated/parse.py": 819235411736647763, + "docs/api/html/group__delete__gitea__repository.html": 15330998186210577395, + "docs/api/html/group__DatasetReviewUs3UxTests__Module.html": 4798151615875850408, + "venv/lib/python3.13/site-packages/more_itertools-10.8.0.dist-info/WHEEL": 8600534672961461758, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/token.py": 11655733747403312358, + "docs/api/html/group__TranslateSchedulesApi.html": 2216535141847218372, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/hashes.py": 8545380307201732345, + "docs/api/html/search/all_10.js": 7221993751774974193, + "venv/lib/python3.13/site-packages/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi": 10784666243744187693, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_stringdtype.py": 8381476847196129074, + "venv/lib/python3.13/site-packages/PIL/IptcImagePlugin.py": 14329453455296600824, + "venv/lib/python3.13/site-packages/PIL/ImageFont.py": 15621336334706847865, + "venv/lib/python3.13/site-packages/git/objects/submodule/root.py": 5322248117564025370, + "backend/src/services/clean_release/artifact_catalog_loader.py": 16917420865314497219, + "venv/lib/python3.13/site-packages/passlib/handlers/django.py": 66638338316838351, + "venv/lib/python3.13/site-packages/pandas/io/_util.py": 13608922148814398500, + "venv/lib/python3.13/site-packages/pandas/core/array_algos/masked_accumulations.py": 11428556645065711062, + "docs/api/html/group__unsubscribe__logs.html": 14174454111096175560, + "venv/lib/python3.13/site-packages/pip/_internal/commands/search.py": 8292218231992728142, + "docs/api/html/group____collect__user__permission__pairs.html": 10134810142124377145, + "backend/src/services/dataset_review/orchestrator.py": 15350066045014880242, + "venv/lib/python3.13/site-packages/more_itertools/more.pyi": 4844596605492825806, + "venv/lib/python3.13/site-packages/numpy/core/overrides.py": 11228841530565061867, + "venv/lib/python3.13/site-packages/pygments/styles/friendly_grayscale.py": 16840106759769837649, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_common.py": 12064185052519470358, + "venv/lib/python3.13/site-packages/authlib/oidc/discovery/__init__.py": 308178910015974550, + "docs/api/html/group__StartSessionRequest.html": 4207823078857319758, + "docs/api/html/group__SidebarStoreTest__Module.html": 10062386876351645240, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_counting.py": 5628494712451120258, + "backend/src/scripts/delete_running_tasks.py": 4209804708500252012, + "docs/api/html/group__Navbar.html": 3616287054974977311, + "docs/api/html/group__test__get__datasets__pagination__zero__page.html": 13580035186306666421, + "docs/api/html/group__RepoStatusBatchResponse.html": 16247460233048160196, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/serialization/pkcs7.py": 9623344347519683527, + "venv/lib/python3.13/site-packages/rsa-4.9.1.dist-info/INSTALLER": 17282701611721059870, + "venv/lib/python3.13/site-packages/pydantic/networks.py": 15767095796055034509, + "venv/lib/python3.13/site-packages/numpy/lib/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc9068/__init__.py": 9884041726796476720, + "venv/lib/python3.13/site-packages/pandas/core/base.py": 10262717073058743378, + "docs/api/html/group__SupersetClientExtractOwnerLabels.html": 12596315108945733263, + "venv/lib/python3.13/site-packages/pygments/lexers/pawn.py": 18127303119414402594, + "docs/api/html/group__DashboardsRouter.html": 16823726392565419686, + "venv/lib/python3.13/site-packages/numpy/_core/_internal.py": 13056946834347643109, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mysql/pyodbc.py": 11271266527234292020, + "docs/api/html/group__test__list__empty.html": 7117128937256101280, + "docs/api/html/group__build__candidate__manifest__v2__endpoint.html": 1880625190919477701, + "venv/lib/python3.13/site-packages/apscheduler/executors/asyncio.py": 2230610508870117058, + "venv/lib/python3.13/site-packages/pluggy/_hooks.py": 6941854999025808196, + "docs/api/html/group__fetch__paginated__count.html": 8726813622685250751, + "venv/lib/python3.13/site-packages/pydantic_settings/version.py": 17263591404988984480, + "docs/api/html/group__test__ensure__encryption__key__reuses__existing__env__file__value.html": 11987119925878454851, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/recfunctions.py": 18330899924171767482, + "venv/lib/python3.13/site-packages/pandas/api/interchange/__init__.py": 181911269762882069, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_repeat.py": 16971624301893342868, + "docs/api/html/group__AuthJwtModule.html": 11179759053901968829, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_constructors.py": 6515602441449955627, + "venv/lib/python3.13/site-packages/fastapi/_compat/shared.py": 5249003014594464718, + "venv/lib/python3.13/site-packages/sqlalchemy/orm/session.py": 15060063324909302240, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/resolvers/abstract.py": 14216912708889351810, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_other.py": 783701524491896337, + "docs/api/html/group__test__register__candidate__rejects__malformed__artifact__input.html": 7952314594070523566, + "venv/lib/python3.13/site-packages/git/objects/fun.py": 15014209679156260865, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/integer/test_construction.py": 13953424340346625390, + "venv/lib/python3.13/site-packages/numpy/matrixlib/defmatrix.pyi": 17903213294220335051, + "docs/api/html/group__CleanReleaseV2ReleaseApiTests.html": 394913399748993155, + "venv/lib/python3.13/site-packages/numpy/random/tests/data/generator_pcg64_np121.pkl.gz": 4708588000144933291, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____getTaskDrawerAutoOpenPreference.html": 5828119756126492160, + "docs/api/html/group____serialize__execution__mapping.html": 14633172635644173618, + "venv/lib/python3.13/site-packages/pandas/tests/reductions/test_stat_reductions.py": 11569525436540769152, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/__init__.py": 15130871412783076140, + "frontend/src/routes/datasets/__tests__/bulk_actions.test.js": 8445672988319354987, + "venv/lib/python3.13/site-packages/click/core.py": 16793133181718891193, + "venv/lib/python3.13/site-packages/numpy/f2py/rules.py": 9322914583460630877, + "docs/api/html/group____parse__csv__enum__list.html": 13696325195084668398, + "docs/api/html/group__check__target__schema.html": 16422257862833670253, + "docs/api/html/sync_off.png": 12901520360373226022, + "docs/api/html/group____get__owned__field__or__404.html": 7076759849479749348, + "docs/api/html/group__test__map__columns__success.html": 9453179995162588276, + "venv/lib/python3.13/site-packages/numpy/_core/tests/data/umath-validation-set-log2.csv": 13979868713429167140, + "venv/lib/python3.13/site-packages/numpy/_core/memmap.pyi": 14124415711399771715, + "docs/api/html/group__buildReportQueryString__Function.html": 10840805796711813208, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7519/claims.py": 12645788445743898136, + "venv/lib/python3.13/site-packages/numpy/fft/tests/test_helper.py": 5362180645056413158, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/numeric/test_indexing.py": 546024765756472196, + "docs/api/html/group____ensure__filter__source__enum__values.html": 15520428780478561060, + "venv/lib/python3.13/site-packages/_pytest/capture.py": 17850967053989495422, + "venv/lib/python3.13/site-packages/numpy/_utils/_convertions.pyi": 362674842164060822, + "venv/lib/python3.13/site-packages/uvicorn/protocols/__init__.py": 15130871412783076140, + "backend/alembic/versions/ed310b33f02c_multi_language_translation_tables.py": 1424919631205944664, + "docs/api/html/group__TestApprovalService.html": 4110308134003984759, + "venv/lib/python3.13/site-packages/pydantic_core-2.41.5.dist-info/licenses/LICENSE": 5669644120528099197, + "venv/lib/python3.13/site-packages/attrs/__init__.py": 9502968706258875910, + "venv/lib/python3.13/site-packages/httpx/_config.py": 8800538050293498928, + "venv/lib/python3.13/site-packages/authlib/integrations/flask_oauth2/signals.py": 13677199634497673845, + "venv/lib/python3.13/site-packages/ecdsa/test_jacobi.py": 1249543655136186433, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/aggregate/test_aggregate.py": 15038915958422670700, + "docs/api/html/group__TaskPersistenceModule.html": 669406050270516144, + "docs/api/html/group__GitMergeRoutes.html": 7022556547485727423, + "venv/lib/python3.13/site-packages/pydantic/config.py": 1450073446492183677, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_shares_memory.py": 2911029123657970431, + "docs/api/html/group__test__string__literal__false__positive.html": 7083542074508752106, + "venv/lib/python3.13/site-packages/pandas/tests/window/test_dtypes.py": 2313400030798822026, + "frontend/src/services/adminService.js": 5974657342670197690, + "docs/api/html/group____build__values__clause.html": 14938421019054450990, + "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/__init__.py": 11283047029180207588, + "docs/api/html/group__PreviewRequest.html": 269103665065334891, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/screen.py": 6933591906297023845, + "venv/lib/python3.13/site-packages/_pytest/stepwise.py": 3527630676691417317, + "venv/lib/python3.13/site-packages/pydantic/json.py": 4109352930301629308, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_timedeltas.py": 1175883320586860493, + "venv/lib/python3.13/site-packages/apscheduler/jobstores/mongodb.py": 5310116401542377882, + "backend/src/schemas/profile.py": 3926676368643549433, + "venv/lib/python3.13/site-packages/httpcore-1.0.9.dist-info/METADATA": 14158024963562115116, + "backend/src/api/routes/__tests__/conftest.py": 3768471623650776808, + "backend/src/services/git/_sync.py": 18140332203522670777, + "venv/lib/python3.13/site-packages/pandas/tests/frame/indexing/test_set_value.py": 17480833128128893268, + "venv/lib/python3.13/site-packages/pygments/lexers/lisp.py": 11872331622183590758, + "docs/api/html/group__buildDatasetReviewRequestOptions__Function.html": 3581409884229047567, + "venv/lib/python3.13/site-packages/numpy/_core/_ufunc_config.pyi": 9291444594181042963, + "docs/api/html/group__getStatusLabel__Function.html": 4868893043616825247, + "venv/lib/python3.13/site-packages/pandas/core/_numba/kernels/__init__.py": 10920760520224795596, + "venv/lib/python3.13/site-packages/psycopg2/__init__.py": 15798412693009721199, + "docs/api/html/group__test__get__reports__default__pagination__contract.html": 2422991810127559996, + "venv/lib/python3.13/site-packages/pandas/tests/io/parser/test_skiprows.py": 8764515842253490735, + "venv/lib/python3.13/site-packages/PIL/_imagingmath.cpython-313-x86_64-linux-gnu.so": 77725273398858074, + "venv/lib/python3.13/site-packages/pip/_internal/locations/__init__.py": 8147012724727395488, + "venv/lib/python3.13/site-packages/pygments/lexers/freefem.py": 9851243865301700231, + "venv/lib/python3.13/site-packages/pygments/formatters/other.py": 13124903290103898118, + "docs/api/html/group__export__documentation.html": 6283874611178772428, + "venv/lib/python3.13/site-packages/numpy/_core/numerictypes.pyi": 12144531601504755948, + "docs/api/html/group__report__repository.html": 57313121527708932, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/interval/test_constructors.py": 979131987837682435, + "docs/api/html/group__get__candidate__overview__v2__endpoint.html": 3653749146753267302, + "docs/api/html/group__ExportArtifactResponse.html": 9908246940869758823, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/fail/twodim_base.pyi": 10156504423258357540, + "venv/lib/python3.13/site-packages/pygments/lexers/email.py": 4355246279485460399, + "venv/lib/python3.13/site-packages/pydantic/aliases.py": 14481980467204711659, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/tests/strings/test_find_replace.py": 262184394614748386, + "backend/src/services/security_badge_service.py": 18061005101062867126, + "venv/lib/python3.13/site-packages/pygments/lexers/qlik.py": 3881663935630350152, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/mssql/base.py": 7855217087916771270, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/frame/test_frame_legend.py": 13094583566764796297, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/jwt_bearer.py": 6973859422068490274, + "venv/lib/python3.13/site-packages/pandas/core/arrays/sparse/accessor.py": 8373575175447947401, + "venv/lib/python3.13/site-packages/h11-0.16.0.dist-info/WHEEL": 5179340427739743287, + "venv/lib/python3.13/site-packages/pip/_vendor/urllib3/connection.py": 8190661510572400096, + "venv/lib/python3.13/site-packages/authlib/jose/rfc7517/_cryptography_key.py": 388489172928969873, + "venv/lib/python3.13/site-packages/authlib/integrations/httpx_client/utils.py": 617314300548081590, + "docs/api/html/group__TranslationEvent.html": 10898166554501315310, + "venv/lib/python3.13/site-packages/numpy/ma/core.pyi": 4829891173366130328, + "docs/api/html/group__SupersetContextExtractorBase____extract__dashboard__id__from__state.html": 2544335115240783642, + "docs/api/html/group__reports.html": 6554651341588172263, + "venv/lib/python3.13/site-packages/pandas/core/groupby/groupby.py": 5536922766239875007, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_indexers.py": 6773751569163287047, + "docs/api/html/search/all_13.js": 14323409538596817569, + "venv/lib/python3.13/site-packages/pluggy/_version.py": 7195758686717994475, + "docs/api/html/group__test__future__end__time__skipped.html": 4190142045276084379, + "venv/lib/python3.13/site-packages/numpy/tests/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pandas/core/computation/scope.py": 16859504937881548797, + "frontend/build/_app/immutable/chunks/DgoIDw4h.js": 10605176285482573925, + "docs/api/html/group__RunExecutionService.html": 14883816129062720567, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/interval/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/smmap-5.0.2.dist-info/zip-safe": 15240312484046875203, + "docs/api/html/group__getLoggingConfig__Function.html": 3509641423397753733, + "docs/api/html/group__GitServerConfig.html": 770018572005176165, + "docs/api/html/group__get__history.html": 18146329279871398582, + "venv/lib/python3.13/site-packages/jose/exceptions.py": 8562012933958941039, + "venv/lib/python3.13/site-packages/greenlet/greenlet.h": 16216120538647882082, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/declarative/extensions.py": 217122171232375592, + "backend/src/api/routes/translate/_helpers.py": 6946167155296110158, + "venv/lib/python3.13/site-packages/anyio/from_thread.py": 7973678341601453474, + "venv/lib/python3.13/site-packages/pandas/tests/scalar/interval/test_contains.py": 17630310725250553247, + "backend/src/models/dataset_review_pkg/_filter_models.py": 11282786315414885098, + "docs/api/html/group__ArtifactCatalogLoader.html": 15778534404992178161, + "venv/lib/python3.13/site-packages/pandas/tests/indexing/test_iloc.py": 7586049606891014270, + "venv/lib/python3.13/site-packages/pip/_internal/cli/main.py": 9304034369762028739, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/exclusions.py": 15852672500377116297, + "docs/api/html/group__test__allowed__origins__parsing.html": 12390096577494505113, + "venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/padding.py": 11244071766694094554, + "venv/lib/python3.13/site-packages/sqlalchemy/dialects/postgresql/json.py": 15085143436056608404, + "docs/api/html/group__get__sqllab__mappings.html": 10230808286410535014, + "venv/lib/python3.13/site-packages/pygments/lexers/pddl.py": 9256112535059995841, + "venv/lib/python3.13/site-packages/dotenv/py.typed": 9796674040111366709, + "docs/api/html/group____make__task.html": 17252776482294162924, + "docs/api/html/group__ApiKeyCreateResponse.html": 9522527415314064226, + "docs/api/html/group__test__candidate__lifecycle__transitions.html": 12801528720010351292, + "docs/api/html/group__ReportDetailView.html": 2581277258940002250, + "docs/api/html/group__test__configure__logger__task__log__level.html": 523141612683121323, + "venv/lib/python3.13/site-packages/numpy/lib/_utils_impl.py": 13012775703413938576, + "venv/lib/python3.13/site-packages/pandas/tests/plotting/__init__.py": 15130871412783076140, + "venv/lib/python3.13/site-packages/pygments/lexers/_asy_builtins.py": 1665617945818958781, + "docs/api/html/group__MaintenanceSchemasModule.html": 9161032253446542473, + "venv/lib/python3.13/site-packages/pip/_vendor/resolvelib/__init__.py": 5027355874704300832, + "venv/lib/python3.13/site-packages/jaraco_functools-4.4.0.dist-info/WHEEL": 16097436423493754389, + "venv/lib/python3.13/site-packages/numpy/_core/tests/test_umath.py": 13010939919217862164, + "docs/api/html/group__DatasetReviewSchemas.html": 5120136138050590201, + "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/RECORD": 18314788057673509075, + "docs/api/html/group__retry__run.html": 9488774948219266966, + "venv/lib/python3.13/site-packages/charset_normalizer/md__mypyc.cpython-313-x86_64-linux-gnu.so": 12629680116730190225, + "docs/api/html/group__test__list__banners.html": 725331980400835161, + "venv/lib/python3.13/site-packages/numpy/lib/user_array.py": 14003456655595459585, + "venv/lib/python3.13/site-packages/fastapi/cli.py": 13972351579061154035, + "venv/lib/python3.13/site-packages/gitdb/db/git.py": 13552203494737962026, + "venv/lib/python3.13/site-packages/cryptography/x509/name.py": 15338066443257445241, + "venv/lib/python3.13/site-packages/numpy/f2py/setup.cfg": 17974180080760231128, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/categorical/test_take.py": 3281943380342853080, + "venv/lib/python3.13/site-packages/pandas/tests/reshape/concat/test_append_common.py": 2377351120083195530, + "venv/lib/python3.13/site-packages/passlib/context.py": 10362592407593745107, + "venv/lib/python3.13/site-packages/pandas/tests/series/test_validate.py": 2133732492454460539, + "docs/api/html/group__test__no__header__returns__none.html": 15501842573100321816, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_between_time.py": 14266333058913745751, + "venv/lib/python3.13/site-packages/pip/_vendor/distlib/metadata.py": 1362166613223529108, + "docs/api/html/group__DashboardTypes.html": 9536763043691441999, + "venv/lib/python3.13/site-packages/sqlalchemy/sql/lambdas.py": 13377298868598623228, + "venv/lib/python3.13/site-packages/pandas/tests/apply/test_frame_apply.py": 8103417303073393969, + "frontend/build/_app/immutable/chunks/Ds3VwoRu.js": 15219158071418187569, + "venv/lib/python3.13/site-packages/jaraco/classes/py.typed": 15130871412783076140, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/spinner.py": 5564789578696016201, + "venv/lib/python3.13/site-packages/pandas/tests/test_aggregation.py": 16863055892192070549, + "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/METADATA": 15225661995655327539, + "docs/api/html/group__AssistantCommandParser.html": 5740092626323461301, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/sparse/test_reductions.py": 17810094294132819208, + "docs/api/html/globals_func_q.html": 11705790463608300649, + "docs/api/html/group__test__json__load__if__needed__dict.html": 1232447365145854146, + "docs/api/html/group__test__detect__language__basic.html": 13601975669344229958, + "venv/lib/python3.13/site-packages/greenlet/tests/test_greenlet_trash.py": 6191655521667576604, + "venv/lib/python3.13/site-packages/pandas/core/apply.py": 17080038932032802984, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/dtype.py": 5553691086633215767, + "docs/api/html/group__MaintenanceDashboardBannerState.html": 9967895785618239725, + "venv/lib/python3.13/site-packages/authlib/oidc/core/errors.py": 18154419146257747681, + "venv/lib/python3.13/site-packages/pandas/core/shared_docs.py": 2173578869755325502, + "venv/lib/python3.13/site-packages/authlib/oidc/core/grants/hybrid.py": 14287665090144592501, + "docs/api/html/group__TrustLevel.html": 10252007574843682167, + "venv/lib/python3.13/site-packages/pydantic/_internal/_serializers.py": 12077180322353709930, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_quantile.py": 11273403743157110261, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/_pick.py": 15760492005471315814, + "venv/lib/python3.13/site-packages/passlib/tests/test_crypto_digest.py": 7988469818593853943, + "venv/lib/python3.13/site-packages/pycparser/ply/ygen.py": 5520340773074632724, + "backend/src/services/clean_release/repositories/manifest_repository.py": 12161285893423159929, + "docs/api/html/group__AssistantLlmPlannerIntent.html": 17231865817068748918, + "venv/lib/python3.13/site-packages/pandas/tests/series/methods/test_fillna.py": 4610666845291315333, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/filesize.py": 13234856188049714485, + "docs/api/html/group__test__get__job__not__found.html": 486301214235859142, + "docs/api/html/group__TestReportsApi.html": 6588129911944894739, + "venv/lib/python3.13/site-packages/jsonschema_specifications-2025.9.1.dist-info/INSTALLER": 17282701611721059870, + "frontend/build/_app/immutable/nodes/40.BLbAdNlB.js": 14899574486455796001, + "docs/api/html/search/functions_4.js": 10455355681176457663, + "venv/lib/python3.13/site-packages/greenlet/greenlet_slp_switch.hpp": 1694714764745718414, + "venv/lib/python3.13/site-packages/PIL/_util.py": 17116054813914373606, + "venv/lib/python3.13/site-packages/sqlalchemy/cyextension/collections.cpython-313-x86_64-linux-gnu.so": 6157288238855118017, + "docs/api/html/group__frontend__src__lib__stores__taskDrawer__js____getTaskForResource.html": 14513402972391639964, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/__init__.pyi": 17469792319379909312, + "venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/names.py": 705261158040926128, + "docs/api/html/group__TelegramProvider.html": 2082762596768250446, + "venv/lib/python3.13/site-packages/git/db.py": 6680123567509774609, + "frontend/src/components/git/DeploymentModal.svelte": 3761818357348583741, + "frontend/vite.config.js": 3769019895915732131, + "venv/lib/python3.13/site-packages/numpy/lib/format.pyi": 11752225430594536662, + "venv/lib/python3.13/site-packages/fastapi/middleware/httpsredirect.py": 5775982317459922443, + "backend/tests/test_smoke_app.py": 15091189356064171349, + "venv/lib/python3.13/site-packages/rsa/core.py": 13203947234024924497, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_period_range.py": 9598872514187524706, + "venv/lib/python3.13/site-packages/jeepney-0.9.0.dist-info/RECORD": 7810411361439269754, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/multi/test_get_set.py": 14375107704596905983, + "venv/lib/python3.13/site-packages/pandas/tests/base/common.py": 13335865314907577354, + "venv/lib/python3.13/site-packages/pygments/lexers/teal.py": 10004159499175716139, + "docs/api/html/group__MIN__MAX__TOKENS.html": 3548157067782585566, + "venv/lib/python3.13/site-packages/apscheduler-3.11.2.dist-info/REQUESTED": 15130871412783076140, + "venv/lib/python3.13/site-packages/numpy/_core/_exceptions.py": 5570375156851166818, + "venv/lib/python3.13/site-packages/authlib-1.6.6.dist-info/WHEEL": 16784970174376303810, + "venv/lib/python3.13/site-packages/pandas/tests/extension/test_sparse.py": 14343335524508450058, + "docs/api/html/group__update__session.html": 14739091990972920218, + "venv/lib/python3.13/site-packages/pip/_internal/locations/_distutils.py": 13559457590971821771, + "venv/lib/python3.13/site-packages/yaml/dumper.py": 11376022992370902766, + "docs/api/html/group__SessionLocal.html": 7893226225561483539, + "docs/api/html/group__providers.html": 16950412038675555694, + "docs/api/html/group__GitModels.html": 8608208250530048906, + "venv/lib/python3.13/site-packages/apscheduler/triggers/base.py": 1170652622104554892, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/strings.pyi": 15361498560917514616, + "docs/api/html/group__UserCreate.html": 5250366849739606333, + "docs/api/html/group__persist__tasks.html": 11196063061437802602, + "venv/lib/python3.13/site-packages/pycparser-2.23.dist-info/INSTALLER": 17282701611721059870, + "docs/api/html/group__ValidationFindingDto.html": 9426027159119514734, + "docs/api/html/group__TranslationExecutor.html": 4954564748951736491, + "venv/lib/python3.13/site-packages/greenlet/platform/switch_arm64_masm.asm": 16630507336149184509, + "docs/api/html/group__LoginE2E.html": 7883569100009245167, + "docs/api/html/group__test__calculate__schedule__very__small__window.html": 11155677236354096772, + "venv/lib/python3.13/site-packages/pandas/tests/tslibs/test_libfrequencies.py": 16302676625743291594, + "docs/api/html/group__GitServiceGithubMixin.html": 6075588890758025132, + "scripts/generate_financial_arrears_data.py": 15989529185799374517, + "docs/api/html/group__TaskCleanupService.html": 1939137499434761984, + "venv/lib/python3.13/site-packages/psycopg2/_json.py": 9729420372294281405, + "docs/api/html/group__APIClient______init____.html": 16760764157004706288, + "venv/lib/python3.13/site-packages/rapidfuzz/distance/Hamming.py": 3762934316884129514, + "venv/lib/python3.13/site-packages/pandas/tests/io/pytables/test_file_handling.py": 732772718210067599, + "docs/api/html/dir_49e56c817e5e54854c35e136979f97ca.js": 3785536190143816087, + "venv/lib/python3.13/site-packages/pygments/sphinxext.py": 2768161754523156130, + "venv/lib/python3.13/site-packages/numpy/ma/core.py": 338350463523585845, + "docs/api/html/group__LanguageDetectServiceTests.html": 7434991135670181721, + "venv/lib/python3.13/site-packages/pandas/tests/frame/methods/test_infer_objects.py": 6769980076977692890, + "docs/api/html/group__publication__repository.html": 13260610346382951650, + "docs/api/html/group__Schedule.html": 13333689163022748798, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/datetimes/methods/test_to_period.py": 10309599277099605395, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_easter.py": 3397863170068576196, + "venv/lib/python3.13/site-packages/pandas/tests/arrays/interval/test_interval.py": 8549680643865283913, + "docs/api/html/dir_49e56c817e5e54854c35e136979f97ca.html": 1429166617003811202, + "venv/lib/python3.13/site-packages/pydantic/_internal/_dataclasses.py": 15256193972947054890, + "venv/lib/python3.13/site-packages/pygments/__init__.py": 14493583771211110135, + "docs/api/html/group__DbMock.html": 17152034194564155607, + "venv/lib/python3.13/site-packages/pandas/tests/api/test_types.py": 8889829773923216769, + "venv/lib/python3.13/site-packages/pandas/tests/extension/base/ops.py": 13451323660386712332, + "venv/lib/python3.13/site-packages/uvicorn/_types.py": 3339389597716220585, + "venv/lib/python3.13/site-packages/pygments/lexers/elm.py": 14683437310498104916, + "venv/lib/python3.13/site-packages/httpx/_models.py": 6516278895118988231, + "venv/lib/python3.13/site-packages/pydantic/_internal/_signature.py": 17075003201648027250, + "backend/alembic/versions/2a7b8c9d0e1f_add_target_languages_to_translation_jobs.py": 7201017059554918882, + "docs/api/html/group__get__param.html": 2682553762034055515, + "docs/api/html/group__AssistantConfirmationRecord.html": 3562498999897451626, + "venv/lib/python3.13/site-packages/passlib/tests/sample_config_1s.cfg": 1809713544666311828, + "docs/api/html/group____validate__bcp47.html": 12782097460405837198, + "backend/src/services/clean_release/stages/__init__.py": 2966227562547886302, + "venv/lib/python3.13/site-packages/numpy/testing/_private/utils.py": 3646474165295296669, + "venv/lib/python3.13/site-packages/pandas/tests/indexes/period/test_scalar_compat.py": 10534925655070162459, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/test_apply.py": 11248068903302454630, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc7523/__init__.py": 8093984834068317399, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/reveal/matrix.pyi": 15667024840812783911, + "venv/lib/python3.13/site-packages/pygments/lexers/ecl.py": 12886695201994337568, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/panel.py": 17832701246248000383, + "venv/lib/python3.13/site-packages/pydantic/alias_generators.py": 5991580234179623842, + "docs/api/html/group__test__calculate__schedule__midnight__crossing.html": 6782803328672454391, + "venv/lib/python3.13/site-packages/numpy/__init__.pxd": 13527602429695748857, + "venv/lib/python3.13/site-packages/pandas/tests/tseries/offsets/test_fiscal.py": 14652343698825214870, + "venv/lib/python3.13/site-packages/tzlocal/win32.py": 1949985224569608978, + "docs/api/html/group____policy__to__response.html": 1559230310925853956, + "venv/lib/python3.13/site-packages/referencing-0.37.0.dist-info/WHEEL": 2357997949040430835, + "venv/lib/python3.13/site-packages/pydantic/_internal/_core_utils.py": 13248004771466837645, + "venv/lib/python3.13/site-packages/pandas/core/dtypes/api.py": 9829629144629841277, + "docs/api/html/group__getADGroupMappings__Function.html": 940667681674860937, + "venv/lib/python3.13/site-packages/authlib/oauth2/rfc6749/grants/refresh_token.py": 17927903035152872556, + "venv/lib/python3.13/site-packages/PIL/__main__.py": 827665918723937817, + "venv/lib/python3.13/site-packages/git/objects/util.py": 691018806932355307, + "venv/lib/python3.13/site-packages/pygments/lexers/ride.py": 14096748896451437594, + "venv/lib/python3.13/site-packages/pandas/_libs/ops.cpython-313-x86_64-linux-gnu.so": 10490009128553397250, + "docs/api/html/globals_func_n.html": 12757886206585188105, + "venv/lib/python3.13/site-packages/attr/__init__.py": 14436902698244718082, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_windows.py": 9171347078900057357, + "docs/api/html/group__test__cot__json__formatter__plain__message.html": 6324270239309032244, + "venv/lib/python3.13/site-packages/numpy/lib/tests/test_packbits.py": 7592956764084658562, + "venv/lib/python3.13/site-packages/pandas/tests/groupby/transform/test_numba.py": 8250377774229977284, + "backend/src/services/git/_remote_providers.py": 7497094824437995253, + "backend/git_repos/remote/test-repo.git/objects/5a/82ef700fef88b69cd480e4025283809496ee20": 7003383965314354150, + "venv/lib/python3.13/site-packages/packaging-26.0.dist-info/RECORD": 7844752443022514265, + "venv/lib/python3.13/site-packages/numpy/lib/_version.py": 15294708923334674060, + "venv/lib/python3.13/site-packages/numpy/typing/tests/data/pass/lib_user_array.py": 8711697474193296376, + "venv/lib/python3.13/site-packages/pip/_vendor/requests/auth.py": 912521029864094489, + "venv/lib/python3.13/site-packages/rsa/asn1.py": 3861968161559322784, + "venv/lib/python3.13/site-packages/pip/_vendor/rich/live.py": 8586058300967410643, + "docs/api/html/group____get__orchestrator.html": 13890254604779025703, + "docs/api/html/group__StorageService.html": 4742624646378331494, + "venv/lib/python3.13/site-packages/pandas/_libs/properties.cpython-313-x86_64-linux-gnu.so": 7092136701092358552, + "venv/lib/python3.13/site-packages/pandas/tests/util/test_validate_inclusive.py": 1389676378885557519, + "backend/alembic/env.py": 7020161137665650592, + "venv/lib/python3.13/site-packages/pygments/lexers/bare.py": 18266858932333619451, + "docs/api/html/group__compliance__repository.html": 5329437978880410491, + "venv/lib/python3.13/site-packages/numpy/typing/mypy_plugin.py": 1306129775649200113, + "venv/lib/python3.13/site-packages/sqlalchemy/testing/suite/test_results.py": 18145930285449734975, + "venv/lib/python3.13/site-packages/pygments/lexers/eiffel.py": 8964563077187051946, + "docs/api/html/group__DatasetReviewApi__Module.html": 3012825213898058146, + "venv/lib/python3.13/site-packages/gitdb/exc.py": 13975852664048821278, + "frontend/src/lib/components/health/PolicyForm.svelte": 17995152707951193436, + "venv/lib/python3.13/site-packages/numpy/_utils/_inspect.pyi": 17825266810219495672, + "docs/api/html/group__test__map__columns__missing__database__id.html": 13354166006915808905, + "venv/lib/python3.13/site-packages/jsonschema/_format.py": 8987698648383779883, + "venv/lib/python3.13/site-packages/pip/_vendor/truststore/_macos.py": 7028037591427052891, + "venv/lib/python3.13/site-packages/numpy/_core/records.pyi": 14194354215405544730, + "docs/api/html/group__test__delete__tasks__empty__list.html": 17672043131209530159, + "venv/lib/python3.13/site-packages/pydantic/v1/types.py": 10761779263335288559, + "venv/lib/python3.13/site-packages/numpy/f2py/tests/src/return_logical/foo90.f90": 12508663906609241323, + "docs/api/html/group__frontend__src__lib__auth__store__ts____createAuthStore.html": 4553975624933631744 } } \ No newline at end of file diff --git a/backend/src/api/routes/git/_repo_operations_routes.py b/backend/src/api/routes/git/_repo_operations_routes.py index bf262950..7ae56f1c 100644 --- a/backend/src/api/routes/git/_repo_operations_routes.py +++ b/backend/src/api/routes/git/_repo_operations_routes.py @@ -158,10 +158,10 @@ async def get_repository_status( _=Depends(has_permission("plugin:git", "EXECUTE")), ): with belief_scope("get_repository_status"): - from . import _resolve_dashboard_id_from_ref_async + from . import _resolve_dashboard_id_from_ref try: - dashboard_id = await _resolve_dashboard_id_from_ref_async( + dashboard_id = _resolve_dashboard_id_from_ref( dashboard_ref, config_manager, env_id ) return _resolve_repository_status(dashboard_id) diff --git a/backend/src/plugins/git_plugin.py b/backend/src/plugins/git_plugin.py index 380d70ab..9963a36a 100644 --- a/backend/src/plugins/git_plugin.py +++ b/backend/src/plugins/git_plugin.py @@ -232,8 +232,8 @@ class GitPlugin(PluginBase): shutil.rmtree(backup_dir, ignore_errors=True) try: - repo.git.add(A=True) - app_logger.reason("Changes staged in git", extra={"src": "_handle_sync"}) + repo.git.add(A=True, force=True) + app_logger.reason("Changes staged in git (force)", extra={"src": "_handle_sync"}) except Exception as ge: app_logger.explore(f"Failed to stage changes: {ge}", extra={"src": "_handle_sync"}) diff --git a/backend/src/services/git/_gitea.py b/backend/src/services/git/_gitea.py index 2af28db5..24c7ea1f 100644 --- a/backend/src/services/git/_gitea.py +++ b/backend/src/services/git/_gitea.py @@ -130,9 +130,9 @@ class GitServiceGiteaMixin: # endregion list_gitea_repositories # region create_gitea_repository [TYPE Function] - # @PURPOSE: Create repository in Gitea for authenticated user. + # @PURPOSE: Create repository in Gitea for authenticated user. Idempotent — returns existing repo if name already taken. # @PRE name is non-empty and PAT has repo creation permission. - # @POST Returns created repository payload. + # @POST Returns created or existing repository payload. # @RETURN dict async def create_gitea_repository( self, server_url: str, pat: str, name: str, private: bool = True, @@ -143,7 +143,19 @@ class GitServiceGiteaMixin: payload["description"] = description if default_branch: payload["default_branch"] = default_branch - created = await self._gitea_request("POST", server_url, pat, "/user/repos", payload=payload) + try: + created = await self._gitea_request("POST", server_url, pat, "/user/repos", payload=payload) + except HTTPException as exc: + if exc.status_code == 409: + logger.reason( + f"Repository '{name}' already exists on Gitea, fetching existing repo", + extra={"src": "create_gitea_repository"}, + ) + username = await self.get_gitea_current_user(server_url, pat) + existing = await self._gitea_request("GET", server_url, pat, f"/repos/{username}/{name}") + if isinstance(existing, dict): + return existing + raise if not isinstance(created, dict): raise HTTPException(status_code=500, detail="Unexpected Gitea response while creating repository") return created diff --git a/frontend/package.json b/frontend/package.json index c5a403e2..77643df6 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -35,6 +35,7 @@ "vitest": "^4.0.18" }, "dependencies": { - "date-fns": "^4.1.0" + "date-fns": "^4.1.0", + "diff2html": "^3.4.56" } } diff --git a/frontend/src/components/DashboardGrid.svelte b/frontend/src/components/DashboardGrid.svelte index 4c411ff6..43f035ad 100644 --- a/frontend/src/components/DashboardGrid.svelte +++ b/frontend/src/components/DashboardGrid.svelte @@ -343,6 +343,7 @@ {#if showGitManager && gitDashboardId} diff --git a/frontend/src/components/git/BranchSelector.svelte b/frontend/src/components/git/BranchSelector.svelte index d78634bd..b609fcc5 100644 --- a/frontend/src/components/git/BranchSelector.svelte +++ b/frontend/src/components/git/BranchSelector.svelte @@ -1,58 +1,44 @@ - + - + + + + + + + + diff --git a/frontend/src/components/git/GitManager.svelte b/frontend/src/components/git/GitManager.svelte index dcd7509a..fd6dedc8 100644 --- a/frontend/src/components/git/GitManager.svelte +++ b/frontend/src/components/git/GitManager.svelte @@ -92,10 +92,13 @@ const configHost = $derived(extractHttpHost(repositoryConfigUrl)); const hasOriginConfigMismatch = $derived(originHost && configHost && originHost !== configHost); + // ── Resolve envId with localStorage fallback ────────────── + let resolvedEnvId = $derived(resolveCurrentEnvironmentId(envId)); + // ── State proxy for composable ──────────────────────────── function getState() { return { - dashboardId, envId, dashboardTitle, toast, t, + dashboardId, envId: resolvedEnvId, dashboardTitle, toast, t, currentBranch, showDeployModal, loading, initialized, checkingStatus, configs, selectedConfigId, remoteUrl, creatingRemoteRepo, activeTab, showAdvancedPromote, promoting, promoteFromBranch, promoteToBranch, promoteMode, promoteReason, @@ -170,7 +173,7 @@ await Promise.all([h.checkStatus(), h.loadCurrentEnvironmentStage()]); if (initialized) { try { - const binding = await gitService.getRepositoryBinding(dashboardId, envId); + const binding = await gitService.getRepositoryBinding(dashboardId, resolvedEnvId); repositoryProvider = binding?.provider || ''; repositoryBindingRemoteUrl = binding?.remote_url || ''; if (binding?.config_id) selectedConfigId = String(binding.config_id); @@ -203,7 +206,7 @@ {currentEnvStage || 'DEV'} Текущая ветка: {currentBranch} -
+
@@ -211,7 +214,7 @@
{#if activeTab === 'workspace'} - + {:else if activeTab === 'release'} {:else} @@ -224,5 +227,5 @@ {/if} - + diff --git a/frontend/src/components/git/GitWorkspacePanel.svelte b/frontend/src/components/git/GitWorkspacePanel.svelte index 22939eeb..0d9f2c6d 100644 --- a/frontend/src/components/git/GitWorkspacePanel.svelte +++ b/frontend/src/components/git/GitWorkspacePanel.svelte @@ -3,17 +3,22 @@ - + + +
@@ -85,6 +100,10 @@
{/each}
+ {:else if hasWorkspaceChanges && diffHtml} +
{@html diffHtml}
+ {:else if hasWorkspaceChanges} +
Загрузка diff... (повторите синхронизацию)
{:else}
Нет изменений для коммита diff --git a/frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js b/frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js index 16938c1e..3d123dba 100644 --- a/frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js +++ b/frontend/src/components/git/__tests__/git_manager.unfinished_merge.integration.test.js @@ -20,8 +20,8 @@ describe('GitManager unfinished merge dialog contract', () => { expect(utils).toContain("error_code !== 'GIT_UNFINISHED_MERGE'"); expect(handlers).toContain('showUnfinishedMergeDialog: true'); - expect(handlers).toContain('this.openUnfinishedMergeDialogFromError(e)'); - expect(handlers).toContain('await this.loadMergeRecoveryState();'); + expect(handlers).toContain('handlers.openUnfinishedMergeDialogFromError(e)'); + expect(handlers).toContain('await handlers.loadMergeRecoveryState();'); expect(manager).toContain('h.handlePull'); expect(manager).toContain('h.loadMergeRecoveryState'); }); diff --git a/frontend/src/components/git/useGitManager.js b/frontend/src/components/git/useGitManager.js index a44ead81..613bcd83 100644 --- a/frontend/src/components/git/useGitManager.js +++ b/frontend/src/components/git/useGitManager.js @@ -11,7 +11,14 @@ export function createGitHandlers(getState, setState) { const s = () => getState(); const u = (patch) => setState(patch); - return { + // ── Use const reference instead of `this` to avoid context loss in callbacks ── + const handlers = { + + // #region loadCurrentEnvironmentStage [C:2] [TYPE Function] + // @BRIEF Resolve current environment stage (DEV/PREPROD/PROD) and apply GitFlow defaults. + // @PRE resolveEnvId() returns a valid environment ID, or handler exits silently. + // @POST currentEnvStage and GitFlow defaults (promoteFromBranch, promoteToBranch) are set. + // @SIDE_EFFECT Fetches /environments from API. async loadCurrentEnvironmentStage() { const currentEnvId = s().resolveEnvId(); if (!currentEnvId) return; @@ -27,7 +34,13 @@ export function createGitHandlers(getState, setState) { console.error(`[GitManager][Coherence:Failed] Failed to resolve environment stage: ${e.message}`); } }, + // #endregion loadCurrentEnvironmentStage + // #region checkStatus [C:3] [TYPE Function] + // @BRIEF Check if Git repository is initialized for the dashboard. + // @PRE dashboardId is a non-numeric slug; envId is required (resolved with localStorage fallback). + // @POST initialized=true if repository found and workspace loaded; initialized=false if not found or envId missing. + // @SIDE_EFFECT Fetches /git/repositories/{ref}/branches; may fetch /git/repositories/{ref}/status and /diff on success. async checkStatus() { if (isNumericDashboardRef(s().dashboardId)) { u({ checkingStatus: false, initialized: false }); @@ -35,18 +48,25 @@ export function createGitHandlers(getState, setState) { return; } u({ checkingStatus: true }); + if (!s().envId) { + u({ initialized: false, checkingStatus: false }); + return; + } try { await gitService.getBranches(s().dashboardId, s().envId); u({ initialized: true }); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (_e) { u({ initialized: false }); - try { const configs = await gitService.getConfigs(); u({ configs }); } catch (_e2) { u({ configs: [] }); } - const defaultConfig = resolveDefaultConfig(s().configs, s().selectedConfigId); - if (defaultConfig?.id) u({ selectedConfigId: defaultConfig.id }); } finally { u({ checkingStatus: false }); } }, + // #endregion checkStatus + // #region loadWorkspace [C:2] [TYPE Function] + // @BRIEF Load Git workspace status and diff for initialized repository. + // @PRE initialized is true; envId is required when ref is slug. + // @POST workspaceStatus and workspaceDiff are updated; currentBranch synced from server. + // @SIDE_EFFECT Fetches /status and /diff for the dashboard repository. async loadWorkspace() { if (!s().initialized) return; u({ workspaceLoading: true }); @@ -59,18 +79,29 @@ export function createGitHandlers(getState, setState) { s().toast(e.message || 'Не удалось загрузить изменения', 'error'); } finally { u({ workspaceLoading: false }); } }, + // #endregion loadWorkspace + // #region handleSync [C:2] [TYPE Function] + // @BRIEF Synchronize local dashboard state with Git repository. + // @PRE dashboardId is a non-numeric slug; envId required when ref is slug. + // @POST Dashboard state synced to Git workspace; workspace reloaded. + // @SIDE_EFFECT POSTs to /git/repositories/{ref}/sync; reloads workspace on success. async handleSync() { if (isNumericDashboardRef(s().dashboardId)) { s().toast('GitManager requires dashboard slug. Numeric ID is forbidden.', 'error'); return; } u({ loading: true }); try { - const sourceEnvId = localStorage.getItem('selected_env_id'); + const sourceEnvId = s().envId || localStorage.getItem('selected_env_id'); await gitService.sync(s().dashboardId, sourceEnvId, s().envId); s().toast(s().t?.git?.sync_success || 'Состояние дашборда синхронизировано с Git', 'success'); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); } }, + // #endregion handleSync + // #region handleGenerateMessage [C:2] [TYPE Function] + // @BRIEF Generate AI commit message from dashboard diff. + // @SIDE_EFFECT POSTs to /git/repositories/{ref}/generate-message. + // @POST commitMessage state updated with generated text. async handleGenerateMessage() { u({ generatingMessage: true }); try { @@ -79,7 +110,13 @@ export function createGitHandlers(getState, setState) { s().toast(s().t?.git?.commit_message_generated || 'Сообщение для коммита сгенерировано', 'success'); } catch (e) { s().toast(e.message || s().t?.git?.commit_message_failed || 'Не удалось сгенерировать сообщение', 'error'); } finally { u({ generatingMessage: false }); } }, + // #endregion handleGenerateMessage + // #region handleCommit [C:2] [TYPE Function] + // @BRIEF Stage and commit workspace changes, optionally push. + // @PRE commitMessage is non-empty; hasWorkspaceChanges is true; envId required when ref is slug. + // @POST Changes committed (and pushed if autoPushAfterCommit); workspace reloaded. + // @SIDE_EFFECT POSTs to /commit and optionally /push. async handleCommit() { if (!s().commitMessage || !s().hasWorkspaceChanges) return; u({ committing: true }); @@ -90,22 +127,33 @@ export function createGitHandlers(getState, setState) { s().toast(s().t?.git?.commit_and_push_success || 'Коммит создан и отправлен в remote', 'success'); } else { s().toast(s().t?.git?.commit_success || 'Коммит успешно создан', 'success'); } u({ commitMessage: '' }); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message, 'error'); } finally { u({ committing: false }); } }, + // #endregion handleCommit + // #region openUnfinishedMergeDialogFromError [C:2] [TYPE Function] + // @BRIEF Parse error for unfinished merge context and open dialog. + // @PRE error contains GIT_UNFINISHED_MERGE error_code or related detail. + // @POST Returns true and opens dialog if merge context found; false otherwise. openUnfinishedMergeDialogFromError(error) { const context = extractUnfinishedMergeContext(error); if (!context) return false; u({ unfinishedMergeContext: context, showUnfinishedMergeDialog: true }); return true; }, + // #endregion openUnfinishedMergeDialogFromError + // #region loadMergeRecoveryState [C:2] [TYPE Function] + // @BRIEF Load merge recovery state from backend for unfinished merge. + // @PRE Repository exists; envId required when ref is slug. + // @POST unfinishedMergeContext is populated; dialog closed if no merge in progress. + // @SIDE_EFFECT GETs /merge/status from backend. async loadMergeRecoveryState() { u({ mergeRecoveryLoading: true }); try { const status = await gitService.getMergeStatus(s().dashboardId, s().envId); - if (!status?.has_unfinished_merge) { this.closeUnfinishedMergeDialog(); return; } + if (!status?.has_unfinished_merge) { handlers.closeUnfinishedMergeDialog(); return; } u({ unfinishedMergeContext: { ...(s().unfinishedMergeContext || {}), @@ -122,11 +170,21 @@ export function createGitHandlers(getState, setState) { }); } catch (e) { s().toast(e.message || 'Failed to load merge status', 'error'); } finally { u({ mergeRecoveryLoading: false }); } }, + // #endregion loadMergeRecoveryState + // #region closeUnfinishedMergeDialog [C:1] [TYPE Function] + // @BRIEF Close unfinished merge dialog and reset merge state. + // @POST Dialog hidden; mergeConflicts, showConflictResolver reset. closeUnfinishedMergeDialog() { u({ showUnfinishedMergeDialog: false, unfinishedMergeContext: null, mergeConflicts: [], showConflictResolver: false }); }, + // #endregion closeUnfinishedMergeDialog + // #region handleOpenConflictResolver [C:2] [TYPE Function] + // @BRIEF Load merge conflicts and open conflict resolver UI. + // @PRE Unfinished merge is in progress; envId required when ref is slug. + // @POST mergeConflicts populated; showConflictResolver set to true if conflicts found. + // @SIDE_EFFECT GETs /merge/conflicts from backend. async handleOpenConflictResolver() { u({ mergeRecoveryLoading: true }); try { @@ -135,7 +193,12 @@ export function createGitHandlers(getState, setState) { u({ mergeConflicts: mc, showConflictResolver: true }); } catch (e) { s().toast(e.message || 'Failed to load merge conflicts', 'error'); } finally { u({ mergeRecoveryLoading: false }); } }, + // #endregion handleOpenConflictResolver + // #region handleResolveConflicts [C:2] [TYPE Function] + // @BRIEF Apply conflict resolutions and stage resolved files. + // @PRE event.detail maps file paths to resolution strategies; envId required when ref is slug. + // @POST Conflicts resolved and staged; resolver closed; workspace reloaded. async handleResolveConflicts(event) { const detail = event?.detail || {}; const resolutions = Object.entries(detail).map(([fp, r]) => ({ file_path: fp, resolution: r })); @@ -145,41 +208,60 @@ export function createGitHandlers(getState, setState) { await gitService.resolveMergeConflicts(s().dashboardId, resolutions, s().envId); s().toast(s().t?.git?.unfinished_merge?.resolve_success || 'Conflicts were resolved and staged', 'success'); u({ showConflictResolver: false }); - await this.loadMergeRecoveryState(); - await this.loadWorkspace(); + await handlers.loadMergeRecoveryState(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message || 'Failed to resolve conflicts', 'error'); } finally { u({ mergeResolveInProgress: false }); } }, + // #endregion handleResolveConflicts + // #region handleAbortUnfinishedMerge [C:2] [TYPE Function] + // @BRIEF Abort current unfinished merge. + // @PRE envId required when ref is slug. + // @POST Merge aborted; dialog closed; workspace reloaded. async handleAbortUnfinishedMerge() { u({ mergeAbortInProgress: true }); try { await gitService.abortMerge(s().dashboardId, s().envId); s().toast(s().t?.git?.unfinished_merge?.abort_success || 'Merge was aborted', 'success'); - this.closeUnfinishedMergeDialog(); - await this.loadWorkspace(); + handlers.closeUnfinishedMergeDialog(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message || 'Failed to abort merge', 'error'); } finally { u({ mergeAbortInProgress: false }); } }, + // #endregion handleAbortUnfinishedMerge + // #region handleContinueUnfinishedMerge [C:2] [TYPE Function] + // @BRIEF Finalize unfinished merge by creating merge commit. + // @PRE All conflicts resolved; envId required when ref is slug. + // @POST Merge commit created; dialog closed; workspace reloaded. async handleContinueUnfinishedMerge() { u({ mergeContinueInProgress: true }); try { await gitService.continueMerge(s().dashboardId, '', s().envId); s().toast(s().t?.git?.unfinished_merge?.continue_success || 'Merge commit created successfully', 'success'); - this.closeUnfinishedMergeDialog(); - await this.loadWorkspace(); + handlers.closeUnfinishedMergeDialog(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message || 'Failed to continue merge', 'error'); - await this.loadMergeRecoveryState(); + await handlers.loadMergeRecoveryState(); } finally { u({ mergeContinueInProgress: false }); } }, + // #endregion handleContinueUnfinishedMerge + // #region getUnfinishedMergeCommandsText [C:1] [TYPE Function] + // @BRIEF Get shell commands for manual merge recovery. + // @POST Returns concatenated command string or empty string. getUnfinishedMergeCommandsText() { if (!s().unfinishedMergeContext?.commands?.length) return ''; return s().unfinishedMergeContext.commands.join('\n'); }, + // #endregion getUnfinishedMergeCommandsText + // #region handleCopyUnfinishedMergeCommands [C:1] [TYPE Function] + // @BRIEF Copy merge recovery commands to clipboard. + // @PRE commands exist in unfinishedMergeContext. + // @POST Commands copied to clipboard; toast shown. async handleCopyUnfinishedMergeCommands() { - const text = this.getUnfinishedMergeCommandsText(); + const text = handlers.getUnfinishedMergeCommandsText(); if (!text) { s().toast(s().t?.git?.unfinished_merge?.copy_empty || 'Команды для копирования отсутствуют', 'warning'); return; } u({ copyingUnfinishedMergeCommands: true }); try { @@ -187,29 +269,46 @@ export function createGitHandlers(getState, setState) { s().toast(s().t?.git?.unfinished_merge?.copy_success || 'Команды скопированы в буфер обмена', 'success'); } catch (_e) { s().toast(s().t?.git?.unfinished_merge?.copy_failed || 'Не удалось скопировать команды', 'error'); } finally { u({ copyingUnfinishedMergeCommands: false }); } }, + // #endregion handleCopyUnfinishedMergeCommands + // #region handlePull [C:2] [TYPE Function] + // @BRIEF Pull changes from remote repository. + // @PRE Remote 'origin' configured; envId required when ref is slug. + // @POST Local repository updated with remote changes; workspace reloaded. + // @SIDE_EFFECT POSTs to /pull; may open merge dialog on GIT_UNFINISHED_MERGE. async handlePull() { u({ isPulling: true }); try { await gitService.pull(s().dashboardId, s().envId); s().toast(s().t?.git?.pull_success || 'Изменения получены из Git', 'success'); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (e) { - const handled = this.openUnfinishedMergeDialogFromError(e); - if (handled) await this.loadMergeRecoveryState(); + const handled = handlers.openUnfinishedMergeDialogFromError(e); + if (handled) await handlers.loadMergeRecoveryState(); else s().toast(e.message, 'error'); } finally { u({ isPulling: false }); } }, + // #endregion handlePull + // #region handlePush [C:2] [TYPE Function] + // @BRIEF Push local commits to remote repository. + // @PRE Remote 'origin' configured; envId required when ref is slug. + // @POST Remote updated with local commits; workspace reloaded. async handlePush() { u({ isPushing: true }); try { await gitService.push(s().dashboardId, s().envId); s().toast(s().t?.git?.push_success || 'Изменения отправлены в Git', 'success'); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message, 'error'); } finally { u({ isPushing: false }); } }, + // #endregion handlePush + // #region handlePromote [C:3] [TYPE Function] + // @BRIEF Promote changes between branches via MR or direct merge. + // @PRE promoteFromBranch and promoteToBranch differ; direct mode requires reason; envId required when ref is slug. + // @POST MR created on Git server (MR mode) or direct merge executed (direct mode). + // @SIDE_EFFECT Opens MR URL in new tab (MR mode); writes policy violation to logs (direct mode). async handlePromote() { const st = s(); if (!st.promoteFromBranch || !st.promoteToBranch || st.promoteFromBranch === st.promoteToBranch) { st.toast('Выберите разные исходную и целевую ветки', 'error'); return; } @@ -226,7 +325,12 @@ export function createGitHandlers(getState, setState) { else { if (response?.url) window.open(response.url, '_blank', 'noopener,noreferrer'); st.toast('Merge Request создан на Git сервере', 'success'); } } catch (e) { st.toast(e.message, 'error'); } finally { u({ promoting: false }); } }, + // #endregion handlePromote + // #region openDeployModal [C:2] [TYPE Function] + // @BRIEF Open deployment target modal with PROD confirmation. + // @PRE dashboardId is a valid slug. + // @POST showDeployModal set to true if PROD confirmation passes. openDeployModal() { const st = s(); if (st.currentEnvStage === 'PROD') { @@ -236,7 +340,13 @@ export function createGitHandlers(getState, setState) { } u({ showDeployModal: true }); }, + // #endregion openDeployModal + // #region handleCreateRemoteRepo [C:2] [TYPE Function] + // @BRIEF Create a remote repository on the selected Git provider. + // @PRE A Git config is selected; user provides a repo name via prompt. + // @POST remoteUrl set to created (or existing) repository clone URL. + // @SIDE_EFFECT POSTs to /git/config/{id}/repositories; prompts user for repo name. async handleCreateRemoteRepo() { const config = resolveDefaultConfig(s().configs, s().selectedConfigId); if (!config) { s().toast(s().t?.git?.init_validation_error || 'Сначала выберите Git сервер', 'error'); return; } @@ -256,20 +366,37 @@ export function createGitHandlers(getState, setState) { if (!url) throw new Error('Remote repository created, but URL is empty'); u({ remoteUrl: url }); s().toast(`Repository created on ${config.provider}`, 'success'); - } catch (e) { s().toast(e.message, 'error'); } finally { u({ creatingRemoteRepo: false }); } + } catch (e) { + if (e?.status === 409 && /already exists/i.test(String(e?.message || ''))) { + s().toast(s().t?.git?.repo_already_exists || 'Repository already exists. Enter its URL below and click Init.', 'warning'); + } else { s().toast(e.message, 'error'); } + } finally { u({ creatingRemoteRepo: false }); } }, + // #endregion handleCreateRemoteRepo + // #region handleInit [C:3] [TYPE Function] + // @BRIEF Initialize local Git repository for the dashboard: clone remote. + // @PRE selectedConfigId is set; remoteUrl is set; envId required when ref is slug. + // @POST Repository initialized; initialized=true; workspace loaded. + // @SIDE_EFFECT POSTs to /git/repositories/{ref}/init; loads workspace on success. async handleInit() { if (!s().selectedConfigId || !s().remoteUrl) { s().toast(s().t?.git?.init_validation_error || 'Заполните все поля', 'error'); return; } + // ── Guard: slug-based init requires envId ── + if (!s().envId && !isNumericDashboardRef(s().dashboardId)) { + s().toast('Environment must be selected to initialize Git for this dashboard.', 'error'); + return; + } u({ loading: true }); try { await gitService.initRepository(s().dashboardId, s().selectedConfigId, s().remoteUrl, s().envId); s().toast(s().t?.git?.init_success || 'Репозиторий инициализирован', 'success'); const provider = resolveDefaultConfig(s().configs, s().selectedConfigId)?.provider || ''; u({ initialized: true, repositoryProvider: provider }); - await this.loadWorkspace(); + await handlers.loadWorkspace(); } catch (e) { s().toast(e.message, 'error'); } finally { u({ loading: false }); } }, + // #endregion handleInit }; + return handlers; } // #endregion UseGitManager diff --git a/frontend/src/lib/api.js b/frontend/src/lib/api.js index 2ff6bedb..0029bfb0 100755 --- a/frontend/src/lib/api.js +++ b/frontend/src/lib/api.js @@ -34,7 +34,11 @@ function shouldSuppressApiErrorToast(endpoint, error) { const isUnfinishedMergeError = error?.status === 409 && (String(error?.error_code || '') === 'GIT_UNFINISHED_MERGE' || String(error?.detail?.error_code || '') === 'GIT_UNFINISHED_MERGE'); const isDatasetClarificationEndpoint = typeof endpoint === 'string' && /\/dataset-orchestration\/sessions\/[^/]+\/clarification$/.test(endpoint); const isMissingClarificationSession = error?.status === 404 && /Clarification session not found/i.test(String(error?.message || '')); - return (isGitStatusEndpoint && isNoRepoError) || (isGitPullEndpoint && isUnfinishedMergeError) || (isDatasetClarificationEndpoint && isMissingClarificationSession); + const isGitRepoEndpoint = typeof endpoint === 'string' && endpoint.startsWith('/git/repositories/'); + const isMissingEnvIdError = error?.status === 400 && /env_id is required/i.test(String(error?.message || '')); + const isGitConfigReposEndpoint = typeof endpoint === 'string' && /^\/git\/config\/[^/]+\/repositories$/.test(endpoint); + const isRepoAlreadyExistsError = error?.status === 409 && /already exists/i.test(String(error?.message || '')); + return (isGitStatusEndpoint && isNoRepoError) || (isGitPullEndpoint && isUnfinishedMergeError) || (isDatasetClarificationEndpoint && isMissingClarificationSession) || (isGitRepoEndpoint && isMissingEnvIdError) || (isGitConfigReposEndpoint && isRepoAlreadyExistsError); } export const getWsUrl = (taskId) => { diff --git a/frontend/src/lib/components/ui/DatabaseSearchCombobox.svelte b/frontend/src/lib/components/ui/DatabaseSearchCombobox.svelte new file mode 100644 index 00000000..bb760676 --- /dev/null +++ b/frontend/src/lib/components/ui/DatabaseSearchCombobox.svelte @@ -0,0 +1,214 @@ + + + + + + + + + + + + + +
+ {#if label} + + {/if} + + +
+ + {#if isLoading} +
+ {:else if value && !isOpen} + + {:else if !isOpen} +
+ + + +
+ {/if} +
+ + + {#if isOpen} +
+
+ {#if isLoading && databases.length === 0} +
+
+

Loading...

+
+ {:else if filteredDatabases.length === 0} +
+ {searchQuery ? 'No databases match your search' : 'No databases available'} +
+ {:else} + {#each filteredDatabases as db (db.id)} + + {/each} + {/if} +
+
+ {/if} +
+ diff --git a/frontend/src/lib/components/ui/DatasetSearchCombobox.svelte b/frontend/src/lib/components/ui/DatasetSearchCombobox.svelte new file mode 100644 index 00000000..dc546845 --- /dev/null +++ b/frontend/src/lib/components/ui/DatasetSearchCombobox.svelte @@ -0,0 +1,204 @@ + + + + + + + + + + + + + +
+ {#if label} + + {/if} + + +
+ + {#if isLoading} +
+ {:else if value && !isOpen} + + {:else if !isOpen} +
+ + + +
+ {/if} +
+ + + {#if isOpen} +
+
+ {#if isLoading && datasets.length === 0} +
+
+

Loading...

+
+ {:else if datasets.length === 0} +
+ {searchQuery ? 'No datasets match your search' : 'No datasets available'} +
+ {:else} + {#each datasets as ds (ds.id)} + + {/each} + {/if} +
+
+ {/if} +
+ diff --git a/frontend/src/services/gitService.js b/frontend/src/services/gitService.js index da9bfdc7..5b52c30d 100644 --- a/frontend/src/services/gitService.js +++ b/frontend/src/services/gitService.js @@ -1,20 +1,17 @@ // #region GitServiceClient [C:3] [TYPE Service] [SEMANTICS git, service, api, repository, branch] -// @BRIEF API client for Git operations including repository management, branch operations, commits, merges, and deployments. +// @BRIEF API client for Git operations — repository management, branches, commits, merges, deployments. // @LAYER Service // @RELATION DEPENDS_ON -> [ApiModule] -// #region GitServiceClient:Module [TYPE Function] -/** - * @SEMANTICS: git, service, api, client - * @PURPOSE: API client for Git operations, managing the communication between frontend and backend. - * @LAYER Service - * @RELATION DEPENDS_ON -> specs/011-git-integration-dashboard/contracts/api.md - */ - import { requestApi } from '../lib/api'; const API_BASE = '/git'; +// #region buildDashboardRepoEndpoint [C:2] [TYPE Function] +// @BRIEF Build /git/repositories/{ref}{suffix} endpoint with optional env_id query param. +// @PRE dashboardRef is non-empty string. +// @POST Returns absolute API endpoint path with env_id appended when envId is provided. +// @DATA_CONTRACT Input(dashboardRef, suffix, envId?) -> Output(string) function buildDashboardRepoEndpoint(dashboardRef, suffix, envId = null) { const encodedRef = encodeURIComponent(String(dashboardRef)); const endpoint = `${API_BASE}/repositories/${encodedRef}${suffix}`; @@ -22,140 +19,113 @@ function buildDashboardRepoEndpoint(dashboardRef, suffix, envId = null) { const sep = endpoint.includes('?') ? '&' : '?'; return `${endpoint}${sep}env_id=${encodeURIComponent(String(envId))}`; } +// #endregion buildDashboardRepoEndpoint -// #region gitService:Action [TYPE Function] +// #region gitService [C:3] [TYPE Object] +// @BRIEF Exported Git API client with methods for all repository and config operations. +// @RELATION CALLS -> [ApiModule.requestApi] export const gitService = { - /** - * #region getConfigs:Function [TYPE Function] - * @purpose Fetches all Git server configurations. - * @pre User must be authenticated. - * @post Returns a list of Git server configurations. - * @returns {Promise} List of configs. - */ + + // #region getConfigs [C:2] [TYPE Function] + // @BRIEF Fetch all Git server configurations. + // @PRE User is authenticated (handled by ApiModule auth headers). + // @POST Returns list of GitServerConfig objects. + // @DATA_CONTRACT None -> Array async getConfigs() { console.log('[getConfigs][Action] Fetching Git configs'); return requestApi(`${API_BASE}/config`); }, + // #endregion getConfigs - /** - * #region createConfig:Function [TYPE Function] - * @purpose Creates a new Git server configuration. - * @pre Config object must be valid. - * @post New config is created and returned. - * @param {Object} config - Configuration details. - * @returns {Promise} Created config. - */ + // #region createConfig [C:2] [TYPE Function] + // @BRIEF Create a new Git server configuration. + // @PRE config object is valid with required fields. + // @POST New config is persisted and returned. + // @DATA_CONTRACT Input(GitServerConfig) -> Output(GitServerConfig) async createConfig(config) { console.log('[createConfig][Action] Creating Git config'); return requestApi(`${API_BASE}/config`, 'POST', config); }, + // #endregion createConfig - /** - * #region deleteConfig:Function [TYPE Function] - * @purpose Deletes an existing Git server configuration. - * @pre configId must exist. - * @post Config is deleted from the backend. - * @param {string} configId - ID of the config to delete. - * @returns {Promise} Result of deletion. - */ + // #region deleteConfig [C:2] [TYPE Function] + // @BRIEF Delete an existing Git server configuration. + // @PRE configId exists in the backend. + // @POST Config is removed from the backend. async deleteConfig(configId) { console.log(`[deleteConfig][Action] Deleting Git config ${configId}`); return requestApi(`${API_BASE}/config/${configId}`, 'DELETE'); }, + // #endregion deleteConfig - /** - * #region updateConfig:Function [TYPE Function] - * @purpose Updates an existing Git server configuration. - * @pre configId must exist and configData must be valid. - * @post Config is updated and returned. - * @param {string} configId - ID of the config to update. - * @param {Object} config - Updated configuration details. - * @returns {Promise} Updated config. - */ + // #region updateConfig [C:2] [TYPE Function] + // @BRIEF Update an existing Git server configuration. + // @PRE configId exists and configData contains valid fields. + // @POST Config is updated and returned. async updateConfig(configId, config) { console.log(`[updateConfig][Action] Updating Git config ${configId}`); return requestApi(`${API_BASE}/config/${configId}`, 'PUT', config); }, + // #endregion updateConfig - /** - * #region testConnection:Function [TYPE Function] - * @purpose Tests the connection to a Git server with provided credentials. - * @pre Config must contain valid URL and PAT. - * @post Returns connection status (success/failure). - * @param {Object} config - Configuration to test. - * @returns {Promise} Connection test result. - */ + // #region testConnection [C:2] [TYPE Function] + // @BRIEF Test connection to a Git server with provided credentials. + // @PRE config contains valid URL and PAT. + // @POST Returns connection status (success/failure). + // @DATA_CONTRACT Input(GitServerConfig) -> Output({status: string}) async testConnection(config) { console.log('[testConnection][Action] Testing Git connection'); return requestApi(`${API_BASE}/config/test`, 'POST', config); }, + // #endregion testConnection - /** - * #region listGiteaRepositories:Function [TYPE Function] - * @purpose Lists repositories on Gitea for a saved Git configuration. - * @pre configId must reference a GITEA config. - * @post Returns repository metadata. - * @param {string} configId - Git configuration ID. - * @returns {Promise} List of Gitea repositories. - */ + // #region listGiteaRepositories [C:2] [TYPE Function] + // @BRIEF List repositories on Gitea for a saved Git configuration. + // @PRE configId references a GITEA provider config. + // @POST Returns array of Gitea repository metadata. async listGiteaRepositories(configId) { console.log(`[listGiteaRepositories][Action] Listing Gitea repositories for config ${configId}`); return requestApi(`${API_BASE}/config/${configId}/gitea/repos`); }, + // #endregion listGiteaRepositories - /** - * #region createGiteaRepository:Function [TYPE Function] - * @purpose Creates a new repository on Gitea for a saved Git configuration. - * @pre configId must reference a GITEA config. - * @post Repository is created on Gitea. - * @param {string} configId - Git configuration ID. - * @param {Object} payload - {name, private, description, auto_init, default_branch} - * @returns {Promise} Created repository payload. - */ + // #region createGiteaRepository [C:2] [TYPE Function] + // @BRIEF Create a repository on Gitea for a saved Git configuration. + // @PRE configId references a GITEA config; payload has non-empty name. + // @POST Repository created on Gitea; returns created repo metadata. async createGiteaRepository(configId, payload) { console.log(`[createGiteaRepository][Action] Creating Gitea repository ${payload?.name} for config ${configId}`); return requestApi(`${API_BASE}/config/${configId}/gitea/repos`, 'POST', payload); }, + // #endregion createGiteaRepository - /** - * #region createRemoteRepository:Function [TYPE Function] - * @purpose Creates repository on remote provider selected by Git config. - * @pre configId exists and points to supported provider config. - * @post Remote repository created and normalized payload returned. - * @param {string} configId - Git configuration ID. - * @param {Object} payload - {name, private, description, auto_init, default_branch} - * @returns {Promise} Created remote repository payload. - */ + // #region createRemoteRepository [C:2] [TYPE Function] + // @BRIEF Create repository on remote provider selected by Git config (idempotent: returns existing on 409). + // @PRE configId exists and points to supported provider; payload has non-empty name. + // @POST Remote repository created (or existing returned); normalized payload returned. + // @DATA_CONTRACT Input(configId, RemoteRepoCreatePayload) -> Output(RemoteRepoSchema) async createRemoteRepository(configId, payload) { console.log(`[createRemoteRepository][Action] Creating remote repository ${payload?.name} for config ${configId}`); return requestApi(`${API_BASE}/config/${configId}/repositories`, 'POST', payload); }, + // #endregion createRemoteRepository - /** - * #region deleteGiteaRepository:Function [TYPE Function] - * @purpose Deletes a repository on Gitea for a saved Git configuration. - * @pre configId must reference a GITEA config. - * @post Repository is deleted on Gitea. - * @param {string} configId - Git configuration ID. - * @param {string} owner - Repository owner. - * @param {string} repoName - Repository name. - * @returns {Promise} Deletion result. - */ + // #region deleteGiteaRepository [C:2] [TYPE Function] + // @BRIEF Delete a repository on Gitea for a saved Git configuration. + // @PRE configId references a GITEA config; owner and repoName are non-empty. + // @POST Repository deleted on Gitea server. async deleteGiteaRepository(configId, owner, repoName) { console.log(`[deleteGiteaRepository][Action] Deleting Gitea repository ${owner}/${repoName} for config ${configId}`); return requestApi(`${API_BASE}/config/${configId}/gitea/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repoName)}`, 'DELETE'); }, + // #endregion deleteGiteaRepository - /** - * #region initRepository:Function [TYPE Function] - * @purpose Initializes or clones a Git repository for a dashboard. - * @pre Dashboard must exist and config_id must be valid. - * @post Repository is initialized on the backend. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @param {string} configId - ID of the Git config. - * @param {string} remoteUrl - URL of the remote repository. - * @returns {Promise} Initialization result. - */ + // #region initRepository [C:3] [TYPE Function] + // @BRIEF Initialize or clone a Git repository for a dashboard. + // @PRE dashboardRef is non-empty; configId and remoteUrl are valid; envId required when ref is slug. + // @POST Repository initialized on the backend; GitRepository record created. + // @DATA_CONTRACT Input(dashboardRef, configId, remoteUrl, envId?) -> Output({status: string, message: string}) + // @RELATION CALLS -> [ApiModule.requestApi] async initRepository(dashboardRef, configId, remoteUrl, envId = null) { console.log(`[initRepository][Action] Initializing repo for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/init', envId), 'POST', { @@ -163,43 +133,32 @@ export const gitService = { remote_url: remoteUrl }); }, + // #endregion initRepository - /** - * #region getRepositoryBinding:Function [TYPE Function] - * @purpose Fetches repository binding metadata (config/provider) for dashboard. - * @pre Repository should be initialized for dashboard. - * @post Returns provider and config details for current repository. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} Repository binding payload. - */ + // #region getRepositoryBinding [C:2] [TYPE Function] + // @BRIEF Fetch repository binding metadata (config/provider) for a dashboard. + // @PRE Repository should be initialized for the dashboard. + // @POST Returns provider, config_id, remote_url, local_path. async getRepositoryBinding(dashboardRef, envId = null) { console.log(`[getRepositoryBinding][Action] Fetching repository binding for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId)); }, + // #endregion getRepositoryBinding - /** - * #region getBranches:Function [TYPE Function] - * @purpose Retrieves the list of branches for a dashboard's repository. - * @pre Repository must be initialized. - * @post Returns a list of branches. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} List of branches. - */ + // #region getBranches [C:2] [TYPE Function] + // @BRIEF List all branches for a dashboard's repository. + // @PRE Repository must be initialized; envId required when dashboardRef is a slug. + // @POST Returns array of BranchSchema objects. async getBranches(dashboardRef, envId = null) { console.log(`[getBranches][Action] Fetching branches for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId)); }, + // #endregion getBranches - /** - * #region createBranch:Function [TYPE Function] - * @purpose Creates a new branch in the dashboard's repository. - * @pre Source branch must exist. - * @post New branch is created. - * @param {number} dashboardId - ID of the dashboard. - * @param {string} name - New branch name. - * @param {string} fromBranch - Source branch name. - * @returns {Promise} Creation result. - */ + // #region createBranch [C:2] [TYPE Function] + // @BRIEF Create a new branch in the dashboard's repository. + // @PRE Source branch exists; name is non-empty; envId required when ref is slug. + // @POST New branch is created on the backend. async createBranch(dashboardRef, name, fromBranch, envId = null) { console.log(`[createBranch][Action] Creating branch ${name} for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/branches', envId), 'POST', { @@ -207,192 +166,145 @@ export const gitService = { from_branch: fromBranch }); }, + // #endregion createBranch - /** - * #region checkoutBranch:Function [TYPE Function] - * @purpose Switches the repository to a different branch. - * @pre Target branch must exist. - * @post Repository head is moved to the target branch. - * @param {number} dashboardId - ID of the dashboard. - * @param {string} name - Branch name to checkout. - * @returns {Promise} Checkout result. - */ + // #region checkoutBranch [C:2] [TYPE Function] + // @BRIEF Switch the repository to a different branch. + // @PRE Target branch exists; envId required when ref is slug. + // @POST Repository HEAD is moved to the target branch. async checkoutBranch(dashboardRef, name, envId = null) { console.log(`[checkoutBranch][Action] Checking out branch ${name} for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/checkout', envId), 'POST', { name }); }, + // #endregion checkoutBranch - /** - * #region commit:Function [TYPE Function] - * @purpose Stages and commits changes to the repository. - * @pre Message must not be empty. - * @post Changes are committed to the current branch. - * @param {number} dashboardId - ID of the dashboard. - * @param {string} message - Commit message. - * @param {Array} files - Optional list of files to commit. - * @returns {Promise} Commit result. - */ + // #region commit [C:2] [TYPE Function] + // @BRIEF Stage and commit changes to the repository. + // @PRE message is non-empty; envId required when ref is slug. + // @POST Changes are committed to the current branch. async commit(dashboardRef, message, files, envId = null) { console.log(`[commit][Action] Committing changes for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/commit', envId), 'POST', { message, files }); }, + // #endregion commit - /** - * #region push:Function [TYPE Function] - * @purpose Pushes local commits to the remote repository. - * @pre Remote must be configured and accessible. - * @post Remote is updated with local commits. - * @param {number} dashboardId - ID of the dashboard. - * @returns {Promise} Push result. - */ + // #region push [C:2] [TYPE Function] + // @BRIEF Push local commits to the remote repository. + // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug. + // @POST Remote is updated with local commits. async push(dashboardRef, envId = null) { console.log(`[push][Action] Pushing changes for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/push', envId), 'POST'); }, + // #endregion push - /** - * #region deleteRepository:Function [TYPE Function] - * @purpose Deletes local repository binding and workspace for dashboard. - * @pre Dashboard reference must resolve on backend. - * @post Repository record and local folder are removed. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} Deletion result. - */ + // #region deleteRepository [C:2] [TYPE Function] + // @BRIEF Delete local repository binding and workspace for a dashboard. + // @PRE dashboardRef resolves on backend; envId required when ref is slug. + // @POST Repository record and local folder are removed. async deleteRepository(dashboardRef, envId = null) { console.log(`[deleteRepository][Action] Deleting repository for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '', envId), 'DELETE'); }, + // #endregion deleteRepository - /** - * #region pull:Function [TYPE Function] - * @purpose Pulls changes from the remote repository. - * @pre Remote must be configured and accessible. - * @post Local repository is updated with remote changes. - * @param {number} dashboardId - ID of the dashboard. - * @returns {Promise} Pull result. - */ + // #region pull [C:2] [TYPE Function] + // @BRIEF Pull changes from the remote repository. + // @PRE Remote 'origin' is configured and accessible; envId required when ref is slug. + // @POST Local repository is updated with remote changes. async pull(dashboardRef, envId = null) { console.log(`[pull][Action] Pulling changes for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/pull', envId), 'POST'); }, + // #endregion pull - /** - * #region getMergeStatus:Function [TYPE Function] - * @purpose Retrieves unfinished-merge status for repository. - * @pre Repository must exist. - * @post Returns merge status payload. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} Merge status details. - */ + // #region getMergeStatus [C:2] [TYPE Function] + // @BRIEF Fetch unfinished-merge status for a repository. + // @PRE Repository must exist; envId required when ref is slug. + // @POST Returns merge status payload with has_unfinished_merge flag. async getMergeStatus(dashboardRef, envId = null) { console.log(`[getMergeStatus][Action] Fetching merge status for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/status', envId)); }, + // #endregion getMergeStatus - /** - * #region getMergeConflicts:Function [TYPE Function] - * @purpose Retrieves merge conflicts list for repository. - * @pre Unfinished merge should be in progress. - * @post Returns conflict files with mine/theirs previews. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} List of conflict files. - */ + // #region getMergeConflicts [C:2] [TYPE Function] + // @BRIEF List merge conflicts for a repository with unresolved merge. + // @PRE Unfinished merge is in progress; envId required when ref is slug. + // @POST Returns array of conflict file entries with mine/theirs previews. async getMergeConflicts(dashboardRef, envId = null) { console.log(`[getMergeConflicts][Action] Fetching merge conflicts for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/conflicts', envId)); }, + // #endregion getMergeConflicts - /** - * #region resolveMergeConflicts:Function [TYPE Function] - * @purpose Applies conflict resolution strategies and stages resolved files. - * @pre resolutions contains file_path/resolution entries. - * @post Conflicts are resolved and staged. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @param {Array} resolutions - Resolution entries. - * @returns {Promise} Resolve result. - */ + // #region resolveMergeConflicts [C:2] [TYPE Function] + // @BRIEF Apply conflict resolution strategies and stage resolved files. + // @PRE resolutions array contains file_path and resolution entries; envId required when ref is slug. + // @POST Conflicts are resolved and staged. async resolveMergeConflicts(dashboardRef, resolutions, envId = null) { console.log(`[resolveMergeConflicts][Action] Resolving ${Array.isArray(resolutions) ? resolutions.length : 0} conflicts for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/resolve', envId), 'POST', { resolutions: Array.isArray(resolutions) ? resolutions : [] }); }, + // #endregion resolveMergeConflicts - /** - * #region abortMerge:Function [TYPE Function] - * @purpose Aborts current unfinished merge. - * @pre Repository exists. - * @post Merge state is aborted or reported as absent. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @returns {Promise} Abort operation result. - */ + // #region abortMerge [C:2] [TYPE Function] + // @BRIEF Abort current unfinished merge. + // @PRE Repository exists; envId required when ref is slug. + // @POST Merge state is aborted or reported as absent. async abortMerge(dashboardRef, envId = null) { console.log(`[abortMerge][Action] Aborting merge for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/abort', envId), 'POST'); }, + // #endregion abortMerge - /** - * #region continueMerge:Function [TYPE Function] - * @purpose Finalizes unfinished merge by creating merge commit. - * @pre All conflicts are resolved. - * @post Merge commit is created. - * @param {string|number} dashboardRef - Dashboard slug or id. - * @param {string} message - Optional commit message. - * @returns {Promise} Continue result. - */ + // #region continueMerge [C:2] [TYPE Function] + // @BRIEF Finalize unfinished merge by creating a merge commit. + // @PRE All conflicts are resolved; envId required when ref is slug. + // @POST Merge commit is created. async continueMerge(dashboardRef, message = '', envId = null) { console.log(`[continueMerge][Action] Continuing merge for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/merge/continue', envId), 'POST', { message: String(message || '').trim() || null }); }, + // #endregion continueMerge - /** - * #region getEnvironments:Function [TYPE Function] - * @purpose Retrieves available deployment environments. - * @post Returns a list of environments. - * @returns {Promise} List of environments. - */ + // #region getEnvironments [C:2] [TYPE Function] + // @BRIEF Fetch available deployment environments from Git config. + // @POST Returns list of environment objects. async getEnvironments() { console.log('[getEnvironments][Action] Fetching environments'); return requestApi(`${API_BASE}/environments`); }, + // #endregion getEnvironments - /** - * #region deploy:Function [TYPE Function] - * @purpose Deploys a dashboard to a target environment. - * @pre Environment must be active and accessible. - * @post Dashboard is imported into the target Superset instance. - * @param {number} dashboardId - ID of the dashboard. - * @param {string} environmentId - ID of the target environment. - * @returns {Promise} Deployment result. - */ + // #region deploy [C:2] [TYPE Function] + // @BRIEF Deploy a dashboard to a target environment. + // @PRE Environment must be active and accessible; envId required when ref is slug. + // @POST Dashboard is imported into target Superset instance. async deploy(dashboardRef, environmentId, envId = null) { console.log(`[deploy][Action] Deploying dashboard ${dashboardRef} to environment ${environmentId}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/deploy', envId), 'POST', { environment_id: environmentId }); }, + // #endregion deploy - /** - * #region getHistory:Function [TYPE Function] - * @purpose Retrieves the commit history for a dashboard. - * @param {number} dashboardId - ID of the dashboard. - * @param {number} limit - Maximum number of commits to return. - * @returns {Promise} List of commits. - */ + // #region getHistory [C:2] [TYPE Function] + // @BRIEF Fetch commit history for a dashboard repository. + // @POST Returns list of commits with author, date, message. async getHistory(dashboardRef, limit = 50, envId = null) { console.log(`[getHistory][Action] Fetching history for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, `/history?limit=${limit}`, envId)); }, + // #endregion getHistory - /** - * #region sync:Function [TYPE Function] - * @purpose Synchronizes the local dashboard state with the Git repository. - * @param {number} dashboardId - ID of the dashboard. - * @param {string|null} sourceEnvId - Optional source environment ID. - * @returns {Promise} Sync result. - */ + // #region sync [C:2] [TYPE Function] + // @BRIEF Synchronize local dashboard state with Git repository. + // @POST Dashboard state is synced to Git workspace. async sync(dashboardRef, sourceEnvId = null, envId = null) { console.log(`[sync][Action] Syncing dashboard ${dashboardRef}`); const params = new URLSearchParams(); @@ -402,45 +314,34 @@ export const gitService = { const endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/sync${query ? `?${query}` : ''}`; return requestApi(endpoint, 'POST'); }, + // #endregion sync - /** - * #region getStatus:Function [TYPE Function] - * @purpose Fetches the current Git status for a dashboard repository. - * @pre dashboardId must be a valid integer. - * @post Returns a status object with dirty files and branch info. - * @param {number} dashboardId - The ID of the dashboard. - * @returns {Promise} Status details. - */ + // #region getStatus [C:2] [TYPE Function] + // @BRIEF Fetch current Git status for a dashboard repository (dirty files, branch info). + // @PRE Repository path exists on disk; envId required when ref is slug. + // @POST Returns status payload with is_dirty, staged_files, modified_files, current_branch. async getStatus(dashboardRef, envId = null) { console.log(`[getStatus][Action] Fetching status for dashboard ${dashboardRef}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/status', envId)); }, + // #endregion getStatus - /** - * #region getStatusesBatch:Function [TYPE Function] - * @purpose Fetches Git statuses for multiple dashboards in a single request. - * @pre dashboardIds must be an array of dashboard IDs. - * @post Returns a map of dashboard_id -> status payload. - * @param {Array} dashboardIds - Dashboard IDs. - * @returns {Promise} Batch status response. - */ + // #region getStatusesBatch [C:2] [TYPE Function] + // @BRIEF Fetch Git statuses for multiple dashboards in one batch request. + // @PRE dashboardIds is a non-empty array of numeric IDs. + // @POST Returns a map of dashboard_id -> status payload (with NO_REPO for uninitialized). async getStatusesBatch(dashboardIds) { console.log(`[getStatusesBatch][Action] Fetching statuses for ${dashboardIds.length} dashboards`); return requestApi(`${API_BASE}/repositories/status/batch`, 'POST', { dashboard_ids: dashboardIds }); }, + // #endregion getStatusesBatch - /** - * #region getDiff:Function [TYPE Function] - * @purpose Retrieves the diff for specific files or the whole repository. - * @pre dashboardId must be a valid integer. - * @post Returns the Git diff string. - * @param {number} dashboardId - The ID of the dashboard. - * @param {string|null} filePath - Optional specific file path. - * @param {boolean} staged - Whether to show staged changes. - * @returns {Promise} The diff content. - */ + // #region getDiff [C:2] [TYPE Function] + // @BRIEF Fetch Git diff for a dashboard repository (staged or unstaged). + // @PRE Repository path exists; envId required when ref is slug. + // @POST Returns unified diff string. async getDiff(dashboardRef, filePath = null, staged = false, envId = null) { console.log(`[getDiff][Action] Fetching diff for dashboard ${dashboardRef} (file: ${filePath}, staged: ${staged})`); let endpoint = `${API_BASE}/repositories/${encodeURIComponent(String(dashboardRef))}/diff`; @@ -451,23 +352,17 @@ export const gitService = { if (params.toString()) endpoint += `?${params.toString()}`; return requestApi(endpoint); }, + // #endregion getDiff - /** - * #region promote:Function [TYPE Function] - * @purpose Promotes changes between branches via MR or direct merge. - * @pre Dashboard repository must be initialized. - * @post Returns promotion metadata (MR URL or direct merge status). - * @param {string|number} dashboardRef - Dashboard slug or id. - * @param {Object} payload - {from_branch,to_branch,mode,title,description,reason,draft,remove_source_branch} - * @param {string|null} envId - Environment id for slug resolution. - * @returns {Promise} Promotion result. - */ + // #region promote [C:2] [TYPE Function] + // @BRIEF Promote changes between branches via MR or direct merge. + // @PRE Dashboard repository initialized; from_branch and to_branch differ; envId required when ref is slug. + // @POST Returns MR URL (MR mode) or merge status (direct mode). async promote(dashboardRef, payload, envId = null) { console.log(`[promote][Action] Promoting ${payload?.from_branch} -> ${payload?.to_branch} for dashboard ${dashboardRef} mode=${payload?.mode}`); return requestApi(buildDashboardRepoEndpoint(dashboardRef, '/promote', envId), 'POST', payload); } + // #endregion promote }; -// #endregion gitService:Action - -// #endregion GitServiceClient:Module +// #endregion gitService // #endregion GitServiceClient