Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

> Trạng thái sống của repo — cập nhật cuối mỗi gói việc. Handoff giữa máy/agent đọc **file này + `_acceptance/`**, không đọc lịch sử chat.

## Hiện trạng (2026-09-09, sau khi ký B4 hai-đường-chạy-một-venv — dòng B4 của kế hoạch ✅)
## Hiện trạng (2026-09-17, sau khi ký và hạ cánh B5 skill-system-v1 — dòng B5 của kế hoạch ✅)

> Chỉ mục tính năng theo góc nhìn người dùng nằm ở [`docs/feature-index.md`](docs/feature-index.md).
> File này giữ vai *đang ở đâu*; *làm gì tiếp* nằm ở **một chỗ duy nhất**: khối kế hoạch trong
> [docs/roadmap.md](docs/roadmap.md), mục "Kế hoạch lát cắt chứng minh".

- **40 hồ sơ đã ký** (guard sổ cái xanh 40/40, 09/09); 39 đã trên `main`, `hai-duong-chay-mot-venv` (B4, ký 09/09) đang ở PR #115`director-wire-shape` hạ cánh 08/09 qua PR #111. Hai hồ sơ ký ngày 04/09 đã hạ cánh: `khong-noi-sai-ve-kho-khoa` (PR #95) và `hang-rao-doc-nham-loi-thanh-khong-co-gi` (PR #96).
- **41 hồ sơ đã ký** (sổ cái 41/41, 17/09); cả 41 đã trên `main` — `skill-system-v1` (B5, ký 17/09) hạ cánh qua PR #120, `hai-duong-chay-mot-venv` (B4) qua PR #115, `director-wire-shape` 08/09 qua PR #111. `normalize-text-vi` **nghỉ hẳn 17/09** cùng plugin đã rút: vẫn đếm là đã ký, và vẫn chặn lưới trước merge (xem Nợ). Hai hồ sơ ký ngày 04/09 đã hạ cánh: `khong-noi-sai-ve-kho-khoa` (PR #95) và `hang-rao-doc-nham-loi-thanh-khong-co-gi` (PR #96).
- **Định vị ba tầng** ghi ở [vision.md](docs/strategy/vision.md) (04/09): nền tảng đa mục đích → năm trụ cột → lát cắt. Skill #1 là lát cắt chứng minh đầu tiên, không phải định nghĩa sản phẩm.
- **Đóng băng mở hạng mục mới** từ khi `lat-cat-chung-minh` merge tới khi 16/16 ★ và ≥ 85% dòng ✅. Xem tỉ lệ: `pnpm plan:check`. Ngoại lệ chỉ ba lý do: mất-dữ-liệu · bảo-mật · chặn-★, và mỗi ngoại lệ cộng vào mẫu số.
- **Máy dev đang cài 4 plugin:** `oneflow-api-ffmpeg`, `oneflow-api-openai` (phục vụ cả hai slot transcribe — S3 de facto xong), `oneflow-api-pyscenedetect`, `oneflow-modal-compose-overlay` (mắt Modal duy nhất còn lại trên chuỗi Skill #1 → B6).
- **4 nhánh chưa về `main`** (đo lại 08/09, sau khi B2 và B3 hạ cánh): `fix/t1-escape-doi-hoi-artifact-ho-so` (2, → S1), `chore/roadmap-alias-guard` (1), `draft/bo-phan-loai-token` (1), `chore/acceptance-ci-recheck-all` (1) — cả bốn park, giữ nguyên trên ổ.
- **Kit gate, hai tầng phiên bản:** plugin cache **acceptance-gate 2.8.0 + feature-loop 2.8.0** (đo 04/09 qua `installed_plugins.json`); thước vendored trong `scripts/pre-merge-check.sh` là bản fork của repo. Hỏi "version nào" phải nêu cả hai — các con số kit cũ ở mục Lịch sử là sử liệu.
- **Kit gate, hai tầng phiên bản:** plugin cache **acceptance-gate 2.14.0 + feature-loop 2.14.0** (đo 17/09, vòng B5 chạy trên bản này); thước vendored trong `scripts/pre-merge-check.sh` hợp nhất lên nền kit 2.14.0 ở PR #119, giữ cụm phạm vi hẹp theo `paths`. Hỏi "version nào" phải nêu cả hai — các con số kit cũ ở mục Lịch sử là sử liệu.
- **Nền tảng:** fork TongFlow (AGPL-3.0). SDK `oneflow-sdk` 0.2.23 trên PyPI, import `tongflow`; B4 (09/09) sửa engine trong kho mà không bump — bản vá tới tay người `pip install` ở chuyến phát hành SDK sau.
- **Làn D — Director trường kỳ ([ADR-0013](docs/adr/0013-director-truong-ky.md), 26/08):** khảo sát 26/08 vật chất hoá "agent là giao diện" thành nền trạng thái bốn tầng + học derived-first. Bằng chứng: [research-director-truong-ky-2026-08.md](docs/strategy/research-director-truong-ky-2026-08.md), [research-mo-hoa-2026-08.md](docs/strategy/research-mo-hoa-2026-08.md). Lộ trình: mục **Làn D** trong [roadmap.md](docs/roadmap.md) (xen kẽ, không nối đuôi). **Gói D0 đã đi hết ba cổng người** — [`_acceptance/director-wire-shape/`](_acceptance/director-wire-shape/opportunity.md): Cổng Đáng 26/08, Cổng 2 08/09 (`status: signed-off`), Cổng Giá trị 08/09 (`verdict: release`, xem [uat-session.md](_acceptance/director-wire-shape/uat-session.md) — 5 prompt tiếng Việt, 5 dòng sổ, 0 mồ côi). Hai thước còn trống vì bộ đo ghim lỗi thời: tỉ lệ thành công và p95. Chi tiết bàn giao: [HANDOFF.md](_acceptance/director-wire-shape/HANDOFF.md).

Expand Down Expand Up @@ -119,13 +119,15 @@ Bài học đắt ghi lại cho máy sau: **round 2→7 churn vì sửa hành vi
- **[đã xử lý]** **2 PR dependabot cũ (#1, #2) đã đóng thủ công** — commit của chúng không nằm trong PR #17 nên GitHub không tự đóng.
- **[park — gói nợ fork]** **Gói nợ "lần fork thật đầu tiên"** (từ 8 round review của per-plugin-origin, chi tiết ở Known limits contract đó). ~~link "mở kho" trong plugins-dialog ghép từ org mặc định~~ **đã sửa 03/08** (`7ff8bd5` — `officialGitUrl(entry)` giải origin theo từng entry, dialog render `p.repoUrl`; văn bản cũ trong file này và trong contract `per-plugin-origin` đã lạc hậu 5 ngày so với code). Còn mở: bản sao luật URL thứ tư trong `sdk/tongflow/engine/plugins.py` (engine standalone ngoài app vẫn ghép từ org mặc định, có `overrides` che); di trú tự động khi đổi origin (cần AC + eval git-fixture riêng — **lưu ý S2 KHÔNG kích hoạt đường này**: nó thay hẳn `id` chứ không dời origin của cùng một id, nên cơ chế 409 không chạm tới); 3 LOW (query/fragment lọt qua `requireHttpUrl`, message CLI hardcode `plugins/`, catch trần trong `remoteIsAhead`); `assertSafeGitUrl` lỏng hơn biên manifest.
- **[B4 đã ký 09/09 — `hai-duong-chay-mot-venv`, giữ lại làm sử liệu]** **Hai đường chạy giành nhau đúng một thư mục venv — phát hiện 17/08, đóng 09/09.** S2 chỉ sửa **phía TS**. Phía Python thì `_venv_dir()` ([`sdk/tongflow/engine/plugins.py:98`](sdk/tongflow/engine/plugins.py)) vẫn trả `data_dir/.tongflow/plugin-venv` và dựng **một venv chung ngay tại đó** — đúng cái path mà TS nay coi là **root chứa nhiều venv con** ([`plugin-python-env.server.ts:36`](src/lib/plugins/plugin-python-env.server.ts)). Vòng lặp: engine chạy → tạo venv chung ở root → lần chạy TS kế tiếp thấy `pyvenv.cfg` ở root → `removeLegacySharedVenv()` `rmSync(root, recursive)` → **xoá sạch mọi venv per-plugin cùng lúc**. Kiểm chứng trên máy này: root đang có `pyvenv.cfg` + `bin/` + `lib/`, tức đang ở trạng thái venv-chung. Kèm theo, `prepare_python_env` (dòng 233-235) `except Exception → return sys.executable` — **đúng hành vi mà AC-18 vừa cố ý gỡ khỏi phía TS** vì nó biến lỗi cài đặt thành `ImportError` mù. `_acceptance/local-cpu-plugins/contract.md` §Out of scope **không nhắc đường engine**, nên đây là lỗ hổng chưa ghi ở đâu, không phải known limit đã disclose.
- **[nợ đã ghi — owner bỏ qua khi merge]** **`normalize-text-vi` chặn lưới trước merge ở MỌI PR.** Plugin của nó rút 26/08 vì kho nguồn không tồn tại công khai, nên ba ô E14b, E17a, E17b không bao giờ xanh lại và hồ sơ không ghim lại được. Owner quyết 17/09 cho hồ sơ nghỉ hẳn (contract §«Nghỉ hẳn»), không ký lại, không khai ô không-chạy. Kit 2.14.0 không có trạng thái nghỉ, nên `status` giữ `signed-off` và `Acceptance Gate` đỏ đúng một vi phạm này cho tới khi kit có trạng thái nghỉ hoặc hồ sơ được gỡ khỏi `_acceptance/` bằng quyết định riêng. PR #120 merge 17/09 với bỏ-qua-có-ghi-nhận.
- **[park — skill-system-v1]** **17 hạn chế đã biết của B5** (contract §Notes). Nặng nhất: đóng rồi mở lại ngăn Skill khi lượt đang chạy làm lượt đó chạy lại, vì luồng chờ mở lại không kèm `reconnect=true`. Kế đó: phản hồi lỗi không phải JSON làm biểu mẫu đứng im, lượt thất bại đánh dấu «đã xong» cho bước chưa chạy, màn theo dõi có thể kẹt ở «đang chạy».
- **[park — cost_usd/gpu_type]** **`cost_usd` / `gpu_type` chưa từng được ghi một lần nào.** Không phải "thiếu mặt tiền": grep toàn `src/` cho ra 0 chỗ ghi (chỉ có schema + 2 file test); comment trong `src/db/workspace.schema.ts:48-52` tự khai hai cột này "stay NULL until a backend-neutral plugin metadata channel exists". `duration_ms` thì có ghi thật. Nghĩa là **DoD "mỗi task ghi đủ 3 cột" của hạng mục 0.2 chỉ đạt 1/3 trên đường workflow**, và eval `task-metering` PASS 8/8 vẫn xanh vì nó ký **trước** khi engine thành đường chạy workflow duy nhất — bằng chứng cũ không phủ được lỗ mới.
- **[park]** **Trần 3 lượt chạy đồng thời chỉ chặn một nửa.** `checkConcurrentTaskLimit` chỉ được gọi ở `/api/workflow/execute`; `/api/task/create` không có. Chạy từng node lẻ không bị chặn, và bộ đếm đếm mọi task `pending`+`processing` bất kể loại — nên 3 task node lẻ kẹt ở `pending` sẽ **khoá vĩnh viễn** mọi lượt chạy cả sơ đồ.
- ~~**[trong kế hoạch B2]** **`docker run` một dòng trong README cho ra bản UPSTREAM, không phải bản này.** `README.md` và `docker-compose.yml:11` mặc định kéo `ghcr.io/tong-io/tongflow:latest`; ảnh của fork là `ghcr.io/${{ github.repository }}` và chỉ build khi đẩy tag `v*`. Ai self-host theo README sẽ chạy bản không có ADR-0011 và không có 3 plugin `oneflow-*`.~~ **ĐÓNG 07/09** — hồ sơ `mo-hoa-b01` ký Cổng 2 ngày 07/09/2026 (Phan Le Manh). `docker-compose.yml` nay trỏ `ghcr.io/phanlemanh/oneflow:latest` và README dùng `docker compose up -d --build`.
- ~~**CI không chạy `pnpm test`**~~ — **đã đóng 05/08** (`ci-vitest-sdk-pin`). CI nay có job `Unit Tests (vitest)`; guard `check-vitest-job.sh` canh job không bị làm mềm và tự chứng minh có răng bằng cách đọc lệnh RA TỪ `ci.yml` chứ không ghi cứng.
- **[park — overlay-canvas-reach; B6 thay plugin]** **Known limits của `compose-overlay`** (chi tiết ở contract §Known limits): ~~ghi cứng SDK pin~~ **đã gỡ 05/08** · CLAUDE.md §"Registering an official plugin" mô tả guard bản cũ (`expected_count`) · `compose-overlay-op-form.tsx` dùng `<select>` thô, nhãn enum chưa dịch (5 locale thấy `top-left`, `tiktok-portrait`… tiếng Anh) · workflow nhập ngoài/sửa tay có thể còn dây video ở ô `logo` · schema ops gộp không ràng buộc field theo loại op (Amendment 2 — revisit khi generator hỗ trợ `oneOf`).
- **[đã có bước máy 28/08]** **Agent baseline của kit làm hỏng `node_modules` của repo gốc** (gặp 28/07, round 1 của `conformance-l0`). Sau khi workflow S4 chạy xong, mọi `node_modules/<pkg>` biến thành symlink trỏ vào `/private/var/folders/.../tmp.XXXX/agk-baseline/node_modules/.pnpm/...` — thư mục tạm đó đã bị xoá, nên mọi lệnh `pnpm` chết với `MODULE_NOT_FOUND`, và `pnpm` lại đòi **xoá `node_modules`** (nguy hiểm với lockfile có importer `packages/proprietary` không tồn tại). Cách gỡ đã dùng, an toàn: `CI=true pnpm install --frozen-lockfile` rồi đối chiếu `shasum` của `pnpm-lock.yaml` để chắc lockfile không đổi. **Đừng chạy `pnpm install` không có `--frozen-lockfile`.** — **Đã có bước máy từ 28/08**: `scripts/acceptance/preflight-verify-env.sh`, khai ở `_acceptance/config.yaml` (`executors.script.preflight_env` + đầu `feature_loop.suite_keys`), nên nó là một ô máy của **mọi** vòng verify: xanh thì ô đỏ pnpm của vòng là hồi quy thật, đỏ thì mọi ô đỏ pnpm/node là **NGHI NGỜ hạ tầng** và nó tự in luôn câu lệnh gỡ. Lý do phải là máy chứ không phải mục ghi chú này: mục này đã đứng đây tròn một tháng **kèm cả cách gỡ** mà `chong-doc-sai-em-ru` vẫn **quy oan cho mã hai lần** — round 1 (`pnpm build` exit 1) và round 2 (`pytest` exit 2). Hai trục, đừng trộn: bẫy **nổ** ba lần (round 3 `pnpm build` exit 1 nữa) nhưng round 3 được **bắt đúng**, vì lúc đó đã có thứ tự "kiểm `.modules.yaml` trước khi đọc ô đỏ" — chính thứ tự mà bước máy này nay tự thi hành. Thêm bẫy kiểm-được-bằng-máy thì thêm một hàm `check_*` vào script đó, đừng thêm một gạch đầu dòng ở đây. — **ĐÍNH CHÍNH CÁCH GỠ, đo 28/08 trên cây hỏng THẬT dựng lại trong kho nháp:** một mình `CI=true pnpm install --frozen-lockfile` **KHÔNG gỡ được** — pnpm trả *"Already up to date"* rồi bỏ qua cây hỏng; thêm `--force` cũng vậy; xoá riêng `.modules.yaml` cũng vậy (pnpm không tạo lại). Chỉ **`rm -rf node_modules && CI=true pnpm install --frozen-lockfile`** mới phục hồi (`pnpm build` xanh lại, shasum `pnpm-lock.yaml` không đổi). Vẫn phải giữ `--frozen-lockfile` — nó là thứ chặn pnpm ghi lại lockfile. Lần gỡ 28/07 thành công nên coi đây là *"không phải lúc nào cũng đủ"*, không phải *"ghi sai"*. Cẩn thận: `rm -rf node_modules` phá cây dùng chung, kiểm không có phiên nào đang chạy vòng verify trước khi xoá. **Cơ chế gây hỏng cũng đã tái lập được:** worktree tạm `agk-baseline` + `node_modules` symlink về cây gốc, pnpm chặn bằng `ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY` — **và chính thông báo lỗi đó bảo đặt `CI=true`**; làm theo là ghi `virtualStoreDir` của cây gốc trỏ ra thư mục tạm. **Quyết định owner 28/08: `runBaseline` TẮT làm mặc định cho mọi vòng verify** — không còn là tuỳ chọn mỗi phiên tự cân. Đo ba lần trong một buổi (`chong-doc-sai-em-ru` vòng 1, 2, 3, chuỗi tmp khác nhau mỗi vòng): bộ đo ghi đè `.modules.yaml` của cây chính **giữa lúc đang chạy**, nên chính nó gây ô đỏ mà nó rồi báo cáo. Sau khi tắt, vòng 4, 5, 6 đều có `failedCommands` RỖNG — ba vòng sạch liên tiếp. Phép kiểm nhanh nay là `bash scripts/acceptance/preflight-verify-env.sh`.
- **[ghi chú môi trường]** **Môi trường dev macOS**: 3 executor `sdk_pytest*` nay chạy qua `uv` (PEP 668 chặn pip vào Homebrew Python — CI xanh nhưng máy dev đỏ với lệnh cũ); `uv` đã vào CONTRIBUTING prerequisites. pnpm 11 cần `pnpm-workspace.yaml` local với `allowBuilds` (trường `pnpm.onlyBuiltDependencies` trong package.json không còn được đọc) — file này untracked, lockfile committed có importer `packages/proprietary` không tồn tại trong repo public, cẩn thận đừng để pnpm prune nó.
- **[ghi chú môi trường]** **Môi trường dev macOS**: 3 executor `sdk_pytest*` nay chạy qua `uv` (PEP 668 chặn pip vào Homebrew Python — CI xanh nhưng máy dev đỏ với lệnh cũ); `uv` đã vào CONTRIBUTING prerequisites. **Từ 17/09 có `.python-version` (`>=3.10`) ở gốc repo:** `uv run --no-project` trên máy này từng chọn Python 3.9 hệ thống và làm làn eval đỏ giả (`cache-l3-tier-b/E11`, cú pháp PEP 604); `uv` tìm tệp này từ thư mục cha nên mọi khoá SDK của cấu hình chấm tự lấy ≥ 3.10. pyenv không đọc được dạng khoảng phiên bản. Thêm hay đổi tệp này làm cũ các hồ sơ không khai `paths` — ghim lại một lượt. pnpm 11 cần `pnpm-workspace.yaml` local với `allowBuilds` (trường `pnpm.onlyBuiltDependencies` trong package.json không còn được đọc) — file này untracked, lockfile committed có importer `packages/proprietary` không tồn tại trong repo public, cẩn thận đừng để pnpm prune nó.

## Kế hoạch 24 tuần (product-only)

Expand Down
Loading
Loading