Skip to content

Commit 0839727

Browse files
committed
fix: resolve issue 1 findings not resolved fully
1 parent aa9cb7c commit 0839727

2 files changed

Lines changed: 50 additions & 7 deletions

File tree

services/workspace_tabs.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -689,12 +689,15 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
689689
cd = composer.raw
690690

691691
# Verify the conversation belongs to the requested workspace.
692-
# Scoped MRC load for this composer only; full map + alias scan only
693-
# when invalid workspace folders need majority-vote reassignment.
692+
# Always scoped: only load messageRequestContext rows for this composer.
694693
project_layouts_map: dict[str, list] = {}
695694
invalid_workspace_aliases: dict[str, str] = {}
695+
project_layouts_map[composer_id] = load_project_layouts_for_composer(
696+
global_db, composer_id,
697+
)
696698
if invalid_workspace_ids:
697-
project_layouts_map = load_project_layouts_map(global_db)
699+
# Alias resolution still needs the composer roster, but project layouts
700+
# are intentionally limited to this composer (single-tab scope).
698701
composer_rows_for_aliases = _safe_fetchall(COMPOSER_ROWS_WITH_HEADERS_SQL)
699702
invalid_workspace_aliases = infer_invalid_workspace_aliases(
700703
composer_rows=composer_rows_for_aliases,
@@ -706,10 +709,6 @@ def _safe_fetchall(query: str, params: tuple = ()) -> list:
706709
composer_id_to_ws=composer_id_to_ws,
707710
invalid_workspace_ids=invalid_workspace_ids,
708711
)
709-
else:
710-
project_layouts_map[composer_id] = load_project_layouts_for_composer(
711-
global_db, composer_id,
712-
)
713712

714713
pid = determine_project_for_conversation(
715714
cd, composer_id, project_layouts_map,

tests/test_workspace_tabs_summary.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,31 @@ def _make_fixture(base: str) -> str:
108108
return ws_path
109109

110110

111+
def _add_invalid_workspace_and_mrc_rows(ws_path: str) -> None:
112+
"""Add an invalid workspace entry and MRC rows for two composers (alias-path trigger)."""
113+
invalid_dir = os.path.join(ws_path, "invalid-ws")
114+
os.makedirs(invalid_dir, exist_ok=True)
115+
wj = os.path.join(invalid_dir, "workspace.json")
116+
with open(wj, "w", encoding="utf-8") as f:
117+
json.dump({}, f)
118+
119+
global_db = os.path.join(os.path.dirname(ws_path), "globalStorage", "state.vscdb")
120+
conn = sqlite3.connect(global_db)
121+
for cid, ctx_id in (
122+
(COMPOSER_ID, "ctx-summary"),
123+
(OTHER_COMPOSER_ID, "ctx-other"),
124+
):
125+
conn.execute(
126+
"INSERT INTO cursorDiskKV ([key], value) VALUES (?, ?)",
127+
(
128+
f"messageRequestContext:{cid}:{ctx_id}",
129+
json.dumps({"projectLayouts": [f"/roots/{cid}"]}),
130+
),
131+
)
132+
conn.commit()
133+
conn.close()
134+
135+
111136
def _collect_queries(ws_path, fn):
112137
"""Call fn(ws_path) while recording every SQL query; return (result, queries)."""
113138
import services.workspace_tabs as _ws_tabs_mod
@@ -203,6 +228,25 @@ def test_scoped_bubble_query_only(self):
203228
msg=f"assemble_single_tab ran a non-scoped bubble scan:\n{global_bubble_scans}",
204229
)
205230

231+
def test_scoped_mrc_load_with_invalid_workspaces(self):
232+
"""With invalid workspace folders, alias scan runs but MRC stays per-composer."""
233+
_add_invalid_workspace_and_mrc_rows(self.ws_path)
234+
(_, _), queries = _collect_queries(
235+
self.ws_path,
236+
lambda p: assemble_single_tab("global", COMPOSER_ID, p, rules=[]),
237+
)
238+
self.assertTrue(queries, msg="expected SQL queries to be recorded")
239+
mrc_scans = [
240+
q for q in queries
241+
if "messageRequestContext:%" in q
242+
and f"messageRequestContext:{COMPOSER_ID}:%" not in q
243+
]
244+
self.assertEqual(
245+
mrc_scans,
246+
[],
247+
msg=f"assemble_single_tab ran a global MRC scan:\n{mrc_scans}",
248+
)
249+
206250
def test_scoped_mrc_load_no_invalid_workspaces(self):
207251
"""Without invalid workspace folders, per-tab load must not full-scan MRC or composers."""
208252
(_, _), queries = _collect_queries(

0 commit comments

Comments
 (0)