fix(workspace): Cowork/GraphRAG chỉ hiện khi đã chọn project

Mở app lên là hai mục đã hiện sẵn dù người dùng chưa bấm chọn project nào.
Cổng này có hai mặt và cả hai đều hở:

1. refresh() mặc định row_to_select = 0, nên lúc mở app (_current_id rỗng)
   danh sách tự chọn hộ project đầu tiên -> _update_tab_visibility(True).
   Cùng đường đó còn làm app nhảy sang project khác ngay sau khi xoá project
   đang mở. Đổi mặc định thành -1; có keep khớp thì vẫn giữ đúng dòng cũ.

2. NavRailMixin._rebuild_nav dựng hàng bị cổng đóng ở dạng mờ kèm tooltip
   ("shown instead of hidden") nên chúng vẫn nằm trên menu trái. Nay bỏ hẳn
   hàng cho tới khi chọn project.

Mặt 1 làm selected_project_id() trả rỗng, khiến bộ chọn project trên rail rơi
về mục 0 và chỉ vào project đầu danh sách trong khi cổng vẫn đóng — hai chỗ
nói hai đằng. Thêm mục "Chọn project…" (khoá app.nav.pick_project, khác
no_project: đã có project, chỉ chưa chọn) để rail nói đúng trạng thái.

tools/check_nav.py và một bài trong test_startup_landing.py đang chốt thiết
kế cũ; cập nhật để chốt hành vi mới. Bài startup giữ nguyên từng assert, chỉ
đổi cách mở cổng từ cửa sau setTabVisible sang chọn project thật.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-11 15:32:08 +09:00
co-authored by Claude Opus 5
parent 10799dc67b
commit d0df96c726
7 changed files with 204 additions and 40 deletions
+11 -6
View File
@@ -128,19 +128,24 @@ def test_bam_project_tren_thanh_menu_an_ngay_lan_dau(window):
def test_khi_cong_project_MO_thi_ha_canh_o_cowork_va_vet_sang_theo(window):
"""Nhánh của người dùng ĐÃ có project — nhánh mà bug được báo.
"""Nhánh của người dùng ĐÃ chọn một project — nhánh mà bug được báo.
Môi trường test không có project nào (cố ý: ``core/projects.py`` ghi vào
``~/.cowork_local`` thật). Mở cổng bằng tay để đi đúng nhánh đó mà không
phải tạo project trên đĩa.
Trước đây bài này mở cổng bằng cửa sau ``setTabVisible(True)`` vì môi trường
test không có project nào (``core/projects.py`` ghi vào ``~/.cowork_local``
thật, nên test không tạo project). Cửa sau đó hết tác dụng từ khi cổng được
điều khiển bằng ``_current_id``: ``refresh()``/``goto_all_projects()`` đóng
lại ngay. Giờ mở cổng bằng đúng đường thật — chọn một project — và bỏ qua
bài này trên máy chưa có project nào.
"""
from PySide6.QtCore import Qt
ws = window.workspace
if ws._cowork_tab_idx < 0:
pytest.skip("bản dựng này không có sub-tab Cowork")
if ws.project_list.count() == 0:
pytest.skip("máy chạy test chưa có project nào — cổng không mở được")
ws.tabs.setTabVisible(ws._cowork_tab_idx, True)
ws.project_list.setCurrentRow(0)
try:
window.goto_all_projects()
@@ -154,5 +159,5 @@ def test_khi_cong_project_MO_thi_ha_canh_o_cowork_va_vet_sang_theo(window):
f"nội dung ở Cowork ({ws._cowork_tab_idx}) "
f"nhưng thanh menu sáng ở {data.get('sub')}")
finally:
ws.tabs.setTabVisible(ws._cowork_tab_idx, False)
ws.project_list.setCurrentRow(-1) # đóng cổng lại đúng đường thật
window.goto_all_projects()