Team Gamma · Automation, Workflows & Governance

Một nhánh chung, ba làn không đụng nhau

Toàn bộ phần việc refactor 10 ngày của Team Gamma — Nam, Hiệp, Lâm. Cả ba đẩy chung vào gamma/refactor. Nam 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. Nhánh của team dùng tiền tố gamma/; ba tài liệu refactor viết nam/workflow-governance-* theo tên lead — cùng một thứ.

Thời hạn21/08 → 31/08
NgườiNam · Hiệp · Lâm
Nhánhgamma/refactor
Code phải bóc~6.500 dòng
Cổng phải quaCASAN Check 1

Tóm tắt · thứ tự làm

  • CHUNG Nam làm trước, nửa ngày Dựng khung 5 thư mục (đang là 0 file) · interface + fake cho Config/Secrets · chốt 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.
  • N1 N1 — Nam · Cấu hình, Bí mật, Vỏ ứng dụng R02 (6 task) · settings 4 widget · bootstrap + MainWindow · policy doc. Giữ luôn app.py, config.py, theme.py, i18n.py. ~2.700 dòng.
  • N2 N2 — Hiệp · Giám sát 7 tab Monitoring · CanonicalAuditLogger · MonitoringQueryService · 2 vòng lặp import · ma trận Sandbox. ~2.650 dòng.
  • N3 N3 — Lâm · Co4E Studio Co4EWorkflowService · tách 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

  1. Không chạm file dùng chung. Cần thêm chuỗi hay màu thì nhắn nhóm trưởng, đừng tự sửa.
  2. Nộp factory, không tự lắp vào app.py. N1 lắp trong bootstrap.py ngày 28/08.
  3. Bị chặn thì dùng fake, báo ngay trong ngày. Không ngồi đợi ai.

Nghiệm thu

Trên gamma/refactor: không file nào được sửa bởi hai người khác nhau. Có là quy ước số 1 đang bị vi phạm.

Mục chung — Nam làm, xong hai người kia mới bắt đầu

Sáu việc dưới đây không thuộc làn nào — chúng là thứ cả ba người cùng đụng vào. Nam làm một lần và đẩy lên gamma/refactor, rồi hai người kia mới bắt đầu. Ước tính nửa ngày.

  1. ~30 phút Dựng khung thư mục 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.
  2. ~45 phút Viết interface + fake cho Config và Secrets 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ó.
  3. ~20 phút Chốt số phậ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.
  4. ~30 phút Viết 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 đề.
  5. ~20 phút Thêm 3 check CASAN vào CI CI hiện chỉ chạy 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.
  6. ~30 phút Quyết số phận 24 checker UI, rồi thông báo Chúng bám và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 làn

Ba làn ngang nhau, mỗi làn khoảng 2.700 dòng phải bóc tách, cùng đẩy vào một nhánh gamma/refactor. Nam nhận làn N1 vì đó là làn 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 — trên nhánh chung, đây là thứ duy nhất giữ cho ba người không giẫm chân.

Làn N1 · Nam

Cấu hình, Bí mật & Vỏ ứng dụng

Nam giữ — làn chạm nhiều file dùng chung nhất

gamma/refactor

Việc

  • R02-T01…T06 AtomicJsonFile · ConfigRepository · Typed Settings Facade · SecretStore + Keyring · chuyển API key · schema versioning
  • R08-T07 tách settings_dialog.py → 4 section widget
  • R08-T10 bootstrap.py + tách MainWindow → shell · tray · lifecycle (cuối sprint, lắp factory của hai người kia)
  • R09-T01 tài liệu Security Policy Model
  • Chủ trì CASAN Check 1 · giữ CI · duyệt PR của hai người

Sở hữu độc quyền

  • config.py
  • app.py → presentation/shell/
  • bootstrap.py
  • theme.py · i18n.py
  • infrastructure/config/ · secrets/ · persistence/
  • ui/settings_dialog.py → presentation/settings/
  • scripts/ · .gitea/workflows/

~2.700 dòng · 727 settings + 1.352 app + 616 config
+ mục chung ở trên

Làn N2 · Hiệp

Giám sát & Quan trắc

Hiệp — 7 tab, việc lặp cần kỷ luật

gamma/refactor

Việc

  • R08-T08 tách monitoring_tab.py → 7 tab độc lập
  • R09-T04 CanonicalAuditLogger
  • R09-T05 MonitoringQueryService read-only, phân trang
  • R09-T02 gỡ vòng lặp model_pricing ↔ usage_tracker
  • R09-T03 gỡ vòng lặp agent_security ↔ alert
  • R09-T06 ma trận Sandbox theo hệ điều hành

Sở hữu độc quyền

  • ui/monitoring_tab.py → presentation/monitoring/
  • application/monitoring/
  • infrastructure/telemetry/ · sandbox/
  • core/audit_log.py
  • core/model_pricing.py · usage_tracker.py
  • core/agent_security*.py

~2.650 dòng · 1.545 monitoring + ~1.100 core

Làn N3 · Lâm

Co4E Studio

Lâm — canvas và luồng chạy workflow

gamma/refactor

Việc

  • R07-T06 Co4EWorkflowService thuần Python
  • R08-T09 tách co4e_tab.py + co4e_canvas.py → canvas · node property · run control · chat view · agent list
  • Gọi tool qua ToolPolicyGateway của Team Hoa — dùng fake, không chờ

Sở hữu độc quyền

  • ui/co4e_tab.py → presentation/co4e/
  • ui/co4e_canvas.py
  • ui/co4e_config_panel.py
  • application/workflows/
  • domain/workflows/
  • core/co4e_run_manager.py

~2.880 dòng · file to nhất của cả team

Tám quy ước

Tám điều dưới đây là luật của team, Nam chốt. Bốn điều đầu là bắt buộc — trên một nhánh chung, vi phạm không chỉ hại mình mà chặn cả hai người kia.

1 · Không chạm file dùng chung

app.py, theme.py, i18n.py, config.py, bootstrap.py thuộc nhánh N1 của Nam. Cần thêm chuỗi hay token màu thì nhắn, đừng sửa — Nam 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 đó.

2 · Nộp factory, không tự lắp vào app

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. Nam gọi nó trong bootstrap.py ngày 28/08. Không ai tự sửa chỗ khởi tạo trong app.py.

3 · Bị chặn thì dùng fake, không ngồi đợi

Chưa có ConfigRepository bản thật thì dùng FakeConfigRepository. Chưa có ToolPolicyGateway của Team Hoa thì đã có fake sẵn. 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.

4 · Nhánh chung: kéo trước khi đẩy, đừng để nhánh đỏ

Cả ba đẩy vào gamma/refactor, nên không còn nhánh riêng làm vùng đệm. Ba việc bắt buộc: git pull --rebase trước mỗi lần đẩy; commit nhỏ và đẩy trong ngày, đừng ôm 500 dòng ba hôm; và không bao giờ đẩy thứ làm pytest tests -q đỏ — nhánh hỏng là hai người kia đứng hình. Lỡ đẩy nhầm thì sửa ngay hoặc git revert, đừng để qua đêm.

5 · Commit nhỏ, mỗi ngày một lần

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.

6 · Mỗi commit kèm test, và không làm đỏ 90 test cũ

Baseline hiện tại: 102 test xanh trong 3,4 giây. Chạy pytest tests -q trước mỗi lần đẩy. Đây là lưới an toàn cho phần logic — giữ nó xanh suốt 10 ngày.

7 · File mới ≤ 400 dòng, không import PySide6 vào lõi

Hai điều kiện của CASAN Check 2 và 3. Tự kiểm trước khi đẩy — CI sẽ báo, nhưng biết sớm thì đỡ phải tách lại lần hai.

8 · Checker UI thuộc phạm vi ai, người đó cập nhật

24 checker sẽ vỡ khi file bị dời. Ai dời file thì sửa checker tương ứng ngay trong commit đó — 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. Đã chốt 21/08: đường A. Nam chịu trách nhiệm nếu đổi ý.

Mỗi người nhận gì, giao gì

Cột trái là thứ phải có trong tay mới làm được, kèm nguồn. Cột phải là thứ bắt buộc giao ra, kèm người nhận. Nhãn có rồi nghĩa là mục chung đã làm xong.

N1 · Cấu hình, Bí mật & VỏNam · nhóm trưởng

Input — cần có

  • mã cũconfig.py 616 dòng
  • mã cũui/settings_dialog.py 727 dòng
  • mã cũapp.py 1.352 dòng
  • tự chốtQuyết định api_key — trước 26/08
  • từ HiệpChữ ký build_monitoring_tab() — trước 28/08
  • từ LâmChữ ký build_co4e_tab() — trước 28/08

Output — phải giao

  • có rồiSecretStore · ConfigRepository + fake → cho Hiệp và Lâm
  • có rồiscripts/audit_security.py → cho CI
  • infrastructure/persistence/json/atomic_json_file.py
  • infrastructure/config/ — cài đặt thật + settings facade
  • infrastructure/secrets/keyring_adapter.py
  • presentation/settings/ — 4 widget
  • bootstrap.py + presentation/shell/ — 3 file
  • docs/architecture/security-policy.md
N2 · Giám sátHiệp

Input — cần có

  • mã cũui/monitoring_tab.py 1.545 dòng
  • mã cũcore/usage_tracker.py 524 · sandbox_manager.py 335
  • mã cũcore/model_pricing.py 284 · agent_security.py 272 · audit_log.py 115
  • từ NamFakeConfigRepository — dùng được ngay
  • tự chốtGiữ nguyên 9 trường log, báo Duy và Hoa

Output — phải giao

  • build_monitoring_tab() → cho Nam, trước 28/08
  • FakeAuditLogger · FakeMonitoringQueryService → cho cả team
  • presentation/monitoring/ — 7 tab + shell
  • application/monitoring/monitoring_query_service.py
  • infrastructure/telemetry/audit_logger.py
  • infrastructure/sandbox/sandbox_capabilities.py
  • 0 circular import ở pricing ↔ usage và security ↔ alert
N3 · Co4E StudioLâm

Input — cần có

  • mã cũui/co4e_tab.py 2.089 dòng
  • mã cũui/co4e_canvas.py 791 · co4e_config_panel.py
  • mã cũcore/co4e_run_manager.py 331
  • có sẵncore/co4e.py — dataclass Workflow/Node/Edge đã có
  • từ NamFakeConfigRepository
  • từ Team HoaDTO ToolPolicyGateway — rủi ro liên team cao nhất, lấy trong hôm nay

Output — phải giao

  • build_co4e_tab() → cho Nam, trước 28/08
  • FakeCo4EWorkflowService → cho cả team
  • domain/workflows/ — DTO chốt ngày đầu
  • application/workflows/co4e_workflow_service.py
  • presentation/co4e/ — 5 phần

Output bắt buộc với cả ba, mỗi lần đẩy

Điều kiệnNgưỡngTự kiểm bằng
File mới sau khi tách≤ 400 dòngwc -l
domain/ và application/ import PySide60grep -r PySide6
Test hiện có102 xanhpytest tests -q
Credential lộ0python scripts/audit_security.py
Checker UI trong phạm vi mình dờiđã cập nhậtpython tools/check_<tên>.py

Lịch từng ngày

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 · Nam N2 · Hiệp N3 · Lâm
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 Hiệp và Lâm để 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   Nam chủ trì Check 1 — quét toàn bộ config/JSON, phải ra 0 secret plaintext. Hiệp và Lâm 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

Nghiệm thu: làm sao biết đã thật sự song song

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ỏiCách trả lờiKhi nào
Hiệp 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
Lâm có chạy được khi Team Hoa chưa xong gateway? Test Co4EWorkflowService xanh với FakeToolPolicyGateway 23/08
Ba người có đụng file nhau không? git log --name-only --pretty=%an trên gamma/refactor — không file nào được xuất hiện dưới hai tên khác nhau mỗi ngày