Bốn công tắc của nhóm này (xác nhận lệnh, chặn mạng, bật lớp bảo mật agent,
AI kiểm tra lệnh) dựng ra ở trạng thái setEnabled(False) và chỉ mở khi nhập
đúng mật khẩu. Theo yêu cầu, bỏ hẳn bước đó: form luôn bật/tắt được.
Gỡ ô nhập, nút Mở khoá, nhãn trạng thái khoá, _sandbox_unlock() và
_sandbox_password_matches(); dọn 10 khoá i18n thành chết và 2 field trong
tools/check_dialogs.py. Giữ nguyên agent_security.sandbox_pw ở config.py —
yêu cầu chỉ nói tới màn hình, không nói tới tầng cấu hình.
Khoá này vốn không phải rào bảo mật: docstring của _sandbox_unlock() đã tự
ghi "khoá phía giao diện để chặn bấm nhầm ... KHÔNG phải cơ chế bảo mật
thật". Rào thật nằm ở sandbox lúc chạy lệnh. Vùng này thuộc diện SECURITY.md
yêu cầu Cowork Team soát thêm.
10 bài test cũ (SEC-20260907-01) chốt các đường không được mở khoá nay mất
đối tượng kiểm, thay bằng 12 bài chốt hành vi mới: bốn công tắc sửa được
ngay, không còn widget mật khẩu, kèm guardrail quét mã nguồn chặn khoá lại.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>
block_network trước đây chỉ được run_command đọc tới, nên fetch_url,
jira_search, jira_get_issue và install_package vẫn ra internet bình thường
trong khi Monitoring báo Mạng - Bị chặn. Thêm cổng chặn ngay đầu bốn tool
đó, trước mọi lời gọi mạng, kèm test hồi quy và guardrail theo
BUILT_IN_CAPABILITIES.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
What changed and why?
Change Type
Related Work
Cowork Task:
Core Repo: http://34.143.229.138/gitea-admin/fsg-ai-core-assets
Core AI Issue:
Core Task:
Related PR:
Scope
What is intentionally included?
What is intentionally NOT included?
Validation
Commands / evidence:
Security Impact
Permission / credential / network / customer data impact:
Compatibility
Reviewer Notes
Anything Cowork reviewers should pay attention to.
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>