diff --git a/docs/refactor/GammaTeam_TaskSplit.html b/docs/refactor/GammaTeam_TaskSplit.html new file mode 100644 index 0000000..628b674 --- /dev/null +++ b/docs/refactor/GammaTeam_TaskSplit.html @@ -0,0 +1,612 @@ + + +
+ + +Team Gamma · Automation, Workflows & Governance
++ Toàn bộ phần việc refactor 10 ngày của Team Gamma. Nhóm trưởng làm thêm một mục chung — + khung kiến trúc, hợp đồng dữ liệu, cổng kiểm duyệt — nằm ngoài ba nhánh; xong mục đó thì + ba người vào ba nhánh tính năng ngang nhau, không ai phải sửa chung file với ai. +
+
+ Ba tài liệu refactor gọi team này là “Team Nam” (theo tên lead). Cùng một team, cùng
+ phạm vi R02 · R08 · R09 · R07-T06. Tên nhánh giữ tiền tố nam/ đã thống nhất với
+ Team Duy và Team Hoa — đổi sang gamma/ sẽ lệch quy ước chung.
+
Tóm tắt · thứ tự làm
+api_key và báo Team Duy · script CASAN Check 1 · đưa 3 check vào CI ·
+ quyết số phận 24 checker UI. Merge xong mới chia nhánh.
+ app.py, config.py, theme.py,
+ i18n.py. ~2.700 dòng.
+ co4e_tab.py + co4e_canvas.py
+ thành 5 phần. ~2.880 dòng, file to nhất team.
+ Ba điều bắt buộc
+app.py. N1 lắp trong bootstrap.py ngày 28/08.Nghiệm thu
+
+ git diff --name-only giữa ba nhánh — giao của ba tập phải rỗng.
+ Còn giao nhau là quy ước 1 đang bị vi phạm.
+
+ Sáu việc dưới đây không thuộc nhánh tính năng nào — chúng là thứ cả ba người cùng đụng
+ vào. Nhóm trưởng làm một lần trên nhánh nam/workflow-governance-base, merge
+ thẳng, rồi ba người mới tách nhánh riêng. Ước tính nửa ngày.
+
domain/ application/ infrastructure/
+ presentation/ platform/ tests/fakes/ —
+ hiện tại chưa tồn tại, 0 file. Mọi task của cả ba người đều ghi vào đây; để ba
+ người tự tạo là đụng nhau ở __init__.py ngay ngày đầu.
+
+ SecretStore, ConfigRepository, kèm
+ FakeSecretStore và FakeConfigRepository. Chỉ chữ ký, chưa cần
+ thân hàm. Đây là thứ gỡ chốt cho cả hai người kia — 156 lời gọi
+ ctx.config.* trong 29 file đang chờ nó.
+
+ api_key và báo Team Duy
+
+ provider_conf() còn trả api_key bên trong, hay tách hẳn sang
+ SecretStore? Có 5 nơi đọc trực tiếp, 3 trong số đó nằm trong
+ providers/ của Team Duy. Quyết một mình rồi im lặng là làm vỡ code
+ team bạn.
+
+ scripts/audit_security.py (CASAN Check 1)
+
+ Gamma chủ trì check này ngày 30/08. Viết ngay hôm nay thì lead tự kiểm được trong suốt
+ quá trình chuyển API key, thay vì tới ngày cổng mới chạy lần đầu và phát hiện vấn đề.
+
+ pytest tests -q. Ba check (secret · ≤400 dòng · import
+ guard) không nằm trong CI, nên tới 30/08 mới biết ai vi phạm. Đưa vào CI thì mỗi PR tự
+ báo.
+
+ cowork_local.config (34 chỗ) và cowork_local.app
+ (16 chỗ) — sẽ chết ngay khi lead đụng config.py. Đây là lưới an toàn
+ duy nhất cho phần UI vừa làm xong. Xem mục quy ước bên dưới.
+
+ + Ba nhánh ngang nhau, mỗi nhánh khoảng 2.700 dòng phải bóc tách. Nhóm trưởng nhận nhánh N1 + vì đó là nhánh chạm tới file dùng chung nhiều nhất. Cột “sở hữu” là danh sách file + chỉ người đó được sửa. +
+ +Nhánh chạm nhiều file dùng chung nhất — để nhóm trưởng giữ
+settings_dialog.py → 4 section widgetbootstrap.py + tách MainWindow → shell · tray · lifecycle (cuối sprint, lắp factory của hai người kia)~2.700 dòng · 727 settings + 1.352 app + 616 config
+ mục chung ở trên
Hợp với người chịu được việc lặp, tách 7 tab có kỷ luật
+monitoring_tab.py → 7 tab độc lậpCanonicalAuditLoggerMonitoringQueryService read-only, phân trangmodel_pricing ↔ usage_trackeragent_security ↔ alert~2.650 dòng · 1.545 monitoring + ~1.100 core
+Hợp với người nắm canvas và luồng chạy workflow
+Co4EWorkflowService thuần Pythonco4e_tab.py + co4e_canvas.py → canvas · node property · run control · chat view · agent listToolPolicyGateway của Team Hoa — dùng fake, không chờ~2.880 dòng · file to nhất của cả team
++ Bảy điều dưới đây là luật của team, nhóm trưởng chốt và duyệt PR theo đó. Ba điều đầu là + bắt buộc — vi phạm thì PR bị trả về. +
+ +
+ app.py, theme.py, i18n.py, config.py,
+ bootstrap.py thuộc nhánh N1. Cần thêm chuỗi hay token màu thì
+ nhắn, đừng sửa — lead thêm trong ngày. Đây là ba file duy nhất có thể gây conflict
+ thật, và luật này xoá hẳn khả năng đó.
+
+ Mỗi nhánh expose một hàm dựng widget với chữ ký chốt từ ngày đầu, ví dụ
+ build_monitoring_tab(ctx, query_service) -> QWidget. Nhánh N1 gọi nó
+ trong bootstrap.py ngày 28/08. Không ai tự sửa chỗ khởi tạo trong
+ app.py.
+
+ Chưa có ConfigRepository bản thật thì dùng FakeConfigRepository.
+ Chưa có ToolPolicyGateway của Team Hoa thì fake. Báo ngay trong ngày
+ nếu thiếu fake nào — đó là việc của nhóm trưởng, không phải lý do dừng tay.
+
+ Một PR cho một sub-widget hoặc một service, không dồn 7 tab vào một PR cuối tuần. Nhóm + trưởng duyệt trong ngày. PR càng to thì rủi ro càng dồn về ngày 28/08. +
+
+ Baseline hiện tại: 90 test xanh trong 4,3 giây. Chạy pytest tests -q
+ trước khi mở PR. Đây là lưới an toàn cho phần logic — giữ nó xanh suốt 10 ngày.
+
+ Hai điều kiện của CASAN Check 2 và 3. Tự kiểm trước khi mở PR — CI sẽ báo, nhưng biết + sớm thì đỡ phải tách lại lần hai. +
++ 24 checker sẽ vỡ khi file bị dời. Ai dời file thì sửa checker tương ứng ngay trong PR đó + — tốn thêm khoảng 15% thời gian, đổi lại giữ được lưới an toàn cho phần UI vừa làm xong. + Nhóm trưởng quyết định phương án này và chịu trách nhiệm nếu đổi ý. +
+Ba hàng chạy độc lập. Hàng tô nền là lúc cả ba phải gặp nhau.
+ +| Ngày | +N1 · Cấu hình & Vỏ | +N2 · Giám sát | +N3 · Co4E | +
|---|---|---|---|
| 21/08 T6 |
+ Mục chung · dựng khung · interface + fake · chốt api_key · CASAN scriptMerge trước khi hai người kia bắt đầu | +Chốt schema log 9 trườngGiữ nguyên định dạng cũ để 24 chỗ gọi không phải sửa | +Chốt chữ ký Co4EWorkflowServiceNộp cho lead để lắp bootstrap sau |
+
| 22–23/08 T7–CN |
+ AtomicJsonFile · ConfigRepository · Typed Settings Facade | +CanonicalAuditLogger · gỡ vòng lặp pricing ↔ usage | +Co4EWorkflowService — CRUD & validate, test không cần Qt | +
| 23/08 17:00 |
+ Checkpoint 1 100% DTO và fake xong · pytest xanh · không ai bị chặn |
+ ||
| 24/08 T2 |
+ Tách settings: provider + connector widget | +3 tab đầu: overview · sandbox · security events | +node_property_panel · agent_list_panel | +
| 25/08 T3 |
+ Tách settings: routing + general widget | +4 tab còn lại: MCP · action logs · agent status · security settings | +co4e_canvas_widget — thao tác node | +
| 26/08 T4 |
+ Chuyển API key sang SecretStoreBáo Team Duy trước khi đụng providers/ | +Lắp shell MonitoringTab · query service bản thật | +Run control · chat view | +
| 27/08 T5 |
+ Schema versioning · recovery policy | +Ma trận Sandbox · gỡ vòng lặp agent_security | +Lắp container Co4ETab · thay fake bằng service thật | +
| 28/08 T6 |
+ bootstrap.py + tách MainWindowNhận factory của N2 và N3 để lắp | +Nộp factory · dọn file >400 dòng · cập nhật checker | +Nộp factory · dọn file >400 dòng · cập nhật checker | +
| 28/08 17:00 |
+ Checkpoint 2 Tách xong 100% god file · 0 circular import | +||
| 29/08 T7 |
+ Tài liệu Security Policy · integration test Settings | +Integration test Monitoring | +Integration test luồng Co4E đầu-cuối | +
| 30/08 CN 17:00 |
+ CASAN Gate Nhóm trưởng chủ trì Check 1 — quét toàn bộ config/JSON, phải ra 0 secret plaintext. N2 và N3 sửa ngay phần của mình nếu script bắt được. | +||
| 31/08 T2 15:00 |
+ Bàn giao Fix tồn đọng · cập nhật tài liệu kiến trúc · merge PR cuối · smoke test 5 luồng chính | +||
Không phải “đã họp xong” mà là chạy được. Ba câu hỏi, trả lời bằng lệnh.
+ +| Câu hỏi | Cách trả lời | Khi nào |
|---|---|---|
| N2 có chạy được khi chưa có config bản thật? | +Dựng một tab Monitoring, chạy test của nó, không import cowork_local.config dòng nào — chỉ dùng FakeConfigRepository |
+ 21/08 | +
| N3 có chạy được khi Team Hoa chưa xong gateway? | +Test Co4EWorkflowService xanh với FakeToolPolicyGateway |
+ 23/08 | +
| Ba nhánh có đụng file nhau không? | +git diff --name-only giữa ba nhánh — giao của ba tập phải rỗng |
+ mỗi ngày | +