Skip to content

Commit f2c7663

Browse files
fix(#125): wire export alias cache and log corrupt cache rejects
1 parent ab8a3fa commit f2c7663

4 files changed

Lines changed: 30 additions & 11 deletions

File tree

services/export_engine.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from services.workspace_context import (
1717
WorkspaceContext,
1818
enrich_workspace_context_from_global_db,
19+
resolve_invalid_workspace_aliases_cached,
1920
resolve_workspace_context_cached,
2021
)
2122
from services.workspace_db import (
@@ -28,7 +29,6 @@
2829
)
2930
from services.workspace_resolver import (
3031
determine_project_for_conversation,
31-
infer_invalid_workspace_aliases,
3232
lookup_workspace_display_name,
3333
)
3434
from utils.cli_chat_reader import (
@@ -169,6 +169,9 @@ def prepare_workspace_orchestration(
169169

170170
def load_global_db_export_data(
171171
orch: WorkspaceOrchestration,
172+
rules: list[Any],
173+
*,
174+
nocache: bool = False,
172175
) -> GlobalDbExportData | None:
173176
"""Load global DB maps needed for IDE composer export."""
174177
ctx = orch.ctx
@@ -197,15 +200,13 @@ def load_global_db_export_data(
197200
code_block_diff_map = load_code_block_diff_map(global_db)
198201
ide_composer_rows = safe_fetchall(global_db, COMPOSER_ROWS_WITH_HEADERS_SQL)
199202

200-
invalid_workspace_aliases = infer_invalid_workspace_aliases(
201-
composer_rows=ide_composer_rows,
203+
invalid_workspace_aliases = resolve_invalid_workspace_aliases_cached(
204+
ctx,
205+
global_db,
206+
orch.workspace_path,
207+
rules,
208+
nocache=nocache,
202209
project_layouts_map=project_layouts_map,
203-
project_name_map=ctx.project_name_to_workspace_id,
204-
workspace_path_map=ctx.workspace_path_to_id,
205-
workspace_entries=orch.workspace_entries,
206-
bubble_map=bubble_map,
207-
composer_id_to_ws=ctx.composer_id_to_workspace_id,
208-
invalid_workspace_ids=ctx.invalid_workspace_ids,
209210
)
210211

211212
return GlobalDbExportData(
@@ -503,7 +504,9 @@ def collect_export_entries(
503504
exported: list[CollectedExportEntry] = []
504505

505506
if include_composer:
506-
db_data = load_global_db_export_data(orch)
507+
db_data = load_global_db_export_data(
508+
orch, exclusion_rules, nocache=effective_nocache,
509+
)
507510
if db_data is not None:
508511
exported.extend(
509512
_collect_ide_export_entries(

services/search.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,9 @@ def _load_search_workspace_assigner(
382382
)
383383
invalid_workspace_aliases: dict[str, str] = {}
384384
if ctx.invalid_workspace_ids:
385+
# Issue #116 follow-up: search assigner still cold-scans composerData:*
386+
# rows here; sharing resolve_invalid_workspace_aliases_cached is
387+
# intentionally deferred (operator scope — see issue Out of scope).
385388
composer_rows = safe_fetchall(global_db, COMPOSER_ROWS_WITH_HEADERS_SQL)
386389
invalid_workspace_aliases = infer_invalid_workspace_aliases(
387390
composer_rows=composer_rows,

services/summary_cache.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,10 +257,18 @@ def get_cached_invalid_workspace_aliases(
257257
return None
258258
aliases = data.get("invalid_workspace_aliases")
259259
if not isinstance(aliases, dict):
260+
_logger.debug(
261+
"Invalid workspace aliases cache rejected: invalid_workspace_aliases is not a dict",
262+
)
260263
return None
261264
validated: dict[str, str] = {}
262265
for key, value in aliases.items():
263266
if not isinstance(key, str) or not isinstance(value, str):
267+
_logger.debug(
268+
"Invalid workspace aliases cache rejected: non-string entry (%r -> %r)",
269+
key,
270+
value,
271+
)
264272
return None
265273
validated[key] = value
266274
return validated

tests/test_summary_cache.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,12 @@ def test_invalid_workspace_aliases_rejects_non_string_entries(self):
111111
"invalid_workspace_aliases": {"broken-ws": 123},
112112
},
113113
)
114-
self.assertIsNone(get_cached_invalid_workspace_aliases(fp))
114+
with self.assertLogs(summary_cache._logger, level="DEBUG") as logs:
115+
self.assertIsNone(get_cached_invalid_workspace_aliases(fp))
116+
self.assertTrue(
117+
any("non-string entry" in msg for msg in logs.output),
118+
msg=f"expected debug log for corrupt cache entry, got: {logs.output}",
119+
)
115120

116121

117122
if __name__ == "__main__":

0 commit comments

Comments
 (0)