Skip to content

chore(kit): hợp nhất cổng pre-merge lên acceptance-gate 2.14.0 + chiến dịch ghim lại - #119

Merged
phanlemanh merged 13 commits into
mainfrom
chore/kit-2-14-0-hop-nhat
Sep 16, 2026
Merged

phanlemanh merged 13 commits into
mainfrom
chore/kit-2-14-0-hop-nhat

Conversation

@phanlemanh

@phanlemanh phanlemanh commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Việc gì

oneflow là nhánh rẽ thật của cổng pre-merge (1883 dòng so 1585 của kit 2.14.0, nền là 2.9.0). PR này đưa nó về nền kit 2.14.0 mà giữ cụm phạm vi hẹp theo paths, rồi chạy chiến dịch ghim lại.

Phân loại khối lệch — kế toán khép kín

1402 (nền 2.9.0) + 328 (5 hàm scope) + 21 (stale_files) + 132 (điểm gọi) = 1883

  • kit đã có → lấy bản kit: 12/13 hàm chung khớp TỪNG BYTE bản 2.9.0. evidence-core.cjs bị unquoteScalar của kit phủ nghiêm ngặt.
  • giữ, đề xuất port ngược lên kit: cụm phạm vi hẹp theo paths.
  • riêng oneflow: RỖNG — không đường dẫn cứng, tên kho hay giả định bố cục nào.

Hợp nhất bằng ba chiều với tổ tiên thật (kit 2.9.0): 0 xung đột, 1883 → 2066 dòng.

Vì sao giữ cụm phạm vi hẹp

PR sửa đúng một file, chạy --base:

bản cổng bắt hoá-cũ thật
kit 2.14.0 thuần 1
có cụm phạm vi hẹp 4

Ba slug kit bỏ sót đều tự khai chính file vừa đổi. Bỏ cụm = hồi quy fail-open.

Đột biến: vô hiệu feature_scope → 4→1 · gỡ bộ lọc phạm vi → 4→9 · PR chỉ chạm tài liệu → 0.

Chiến dịch ghim lại

Cổng: 26 vi phạm → 3. Ghim lại 23/26 hồ sơ, mỗi dòng repin đủ ba lớp (prev_sha · evals_exit · dòng kind:"eval" từng eval). Cục bộ và CI khớp nhau.

Vá kèm theo:

  • fix(biome): miễn trừ lib/lop-nhin-thay.cjs — file vendored thứ 9; thiếu nó thì lint:check đỏ và chặn TRỌN chiến dịch
  • fix(acceptance): check-build-approvals.sh đi qua own-range.sh + neo landed_merge cho 2 hồ sơ
  • feat(repin): writer của kho nhận evals_exit — trước đó 0/117 dòng repin lịch sử có đủ cả prev_sha lẫn evals_exit

NỢ ĐÃ KHAI — gộp có chủ đích với 3 vi phạm

Owner quyết gộp với ba nợ này, mỗi cái có tên và lý do; không cái nào được nới phép đo cho qua:

hồ sơ vì sao chưa ghim được cần gì để trả
normalize-text-vi 22/25 eval xanh; 3 eval clone oneflow-api-normalize-text-vi — kho không tồn tại ở cả máy lẫn GitHub dựng lại kho plugin, hoặc quyết bỏ 3 eval
local-cpu-plugins dựng wheel oneflow-sdk hỏng cục bộ (Errno 2) sửa bộ công cụ Python
chong-doc-sai-em-ru E12ui-check — không làn máy nào chạy được luồng verify có người

Lỗ chưa có răng, ghi lại để không mất

Làn ghim lại đo trước, ghi sau, nên mọi eval soi chính những dòng vừa ghi không thể đỏ tại thời điểm đo. chong-doc-sai-em-ru chỉ bị bắt vì chạy check lại sau khi đẩy. Tin màu xanh của làn thì một dòng repin nuốt eval sẽ vào nhánh chính lặng lẽ.

🤖 Generated with Claude Code

phanlemanh and others added 13 commits September 16, 2026 08:07
…ụm phạm vi hẹp

Nền kit 2.14.0 + tái áp cụm phạm vi hẹp theo `paths` bằng hợp nhất ba chiều
(tổ tiên chung: kit 2.9.0, 0 xung đột). 1883 → 2066 dòng.

Phân loại từng khối lệch, có bằng chứng:
- kit đã có (lấy bản kit): 12/13 hàm chung khớp TỪNG BYTE bản 2.9.0 — oneflow
  chỉ đang cũ, không sửa gì. `evidence-core.cjs` cũng vậy: vá escape nội dòng
  của fork bị `unquoteScalar` của kit phủ nghiêm ngặt (thêm kiểm nháy cân,
  thêm dạng '', dùng chung 7 đường thi hành thay vì một điểm gọi).
- giữ (đề xuất port ngược lên kit): cụm phạm vi hẹp — feature_scope ·
  scope_has_any_match · scope_gaps · gated_coverage · slug_acceptance_touched
  + stale_files mở rộng, ~481 dòng.
- riêng oneflow: RỖNG. Không có đường dẫn cứng, tên kho hay giả định bố cục
  nào trong cụm.

Đo được (PR sửa đúng một file, --base):
- oneflow gốc      4 hoá-cũ /  0 làn suite-only
- kit 2.14.0 thuần 1 hoá-cũ / 25 làn suite-only
- bản hợp nhất     4 hoá-cũ / 25 làn suite-only
Bỏ cụm là hồi quy fail-open: mất 3/4 lần bắt hoá-cũ thật. Kit bỏ sót chúng vì
STALE-DIFF-SCOPE-GUARD bỏ qua slug ngoài diff PR; khi feature khai `paths` thì
máy BIẾT được và kiểm theo phạm vi hẹp — `paths` mua lại quyền kiểm ở vùng kit
buộc phải im.

Kiểm chứng (hai chiều + đột biến):
- nhạy: PR chạm mã → 4 hoá-cũ, trùng khớp hoàn toàn 4 slug của bản gốc
- đặc hiệu: PR chỉ chạm tài liệu → 0 hoá-cũ
- đột biến 1: vô hiệu feature_scope → 4→1, đúng bằng kit thuần
- đột biến 2: gỡ bộ lọc phạm vi → 4→9, báo thừa
- cú pháp sạch, 21 hàm, không trùng tên

CÒN NỢ: 26 vi phạm "re-pin lane suite-only" — nợ CÓ SẴN, không do bản hợp nhất.
kit 2.14.0 bỏ mốc ân hạn REPIN_EVALS_SINCE nên mọi làn suite-only nay là
VIOLATION. Cần một chiến dịch ghim lại theo §7.1 trước khi nhánh này xanh.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…lớp CI

Commit hợp nhất trước thêm `lib/lop-nhin-thay.cjs` (kit 2.14.0 gọi nó) nhưng
không nối vào danh sách miễn trừ của biome, nên `pnpm lint:check` đỏ và chặn
TOÀN BỘ chiến dịch ghim lại — suite của kho đỏ thì không hồ sơ nào ghim được.

Miễn trừ theo tên, KHÔNG định dạng lại file. Chiều theo biome sẽ làm bản sao
lệch khỏi kit (nháy, thụt, ngoặc arrow) — đúng lớp lệch mà vòng này vừa gỡ, và
sẽ đẻ xung đột giả ở lần nâng kit kế. 8 file vendored cũ đều đã miễn trừ theo
đúng cách này; đây là file thứ 9.

Kiểm hai chiều: lint xanh sau vá; tiêm lỗi định dạng thật vào một file do
oneflow viết (src/app/api/director/feedback/route.ts) thì lint VẪN đỏ — miễn
trừ không làm cùn răng.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…merge cho 2 hồ sơ

Làn ghim lại chạy lại eval của hồ sơ trên MỘT NHÁNH KHÁC. `check-build-approvals.sh`
chấm `git diff origin/main...HEAD`, nên ở đó nó chấm diff của người khác —
`pnpm-build-approvals/E16` đỏ và liệt kê ra chính các file của commit nâng kit.
Đúng lớp lỗi đầu `own-range.sh` ghi sử: ba feature đã ký đỏ vĩnh viễn trên
feat/compose-overlay.

Vá HAI nửa — mỗi nửa một mình đều vô dụng:

1. ĐƯỜNG DÂY: script gọi `own-range.sh` khi có ACCEPTANCE_SLUG, sao chép
   nguyên mẫu của ba script anh em (check-no-config-drift · check-workflow-drift
   · check-no-t3-drift). Sửa theo LỚP: cả BA chỗ dùng `$BASE...HEAD`
   (explicit-decisions · keys-intact · scope-confined), không chỉ case bị nêu
   tên. Không có slug thì hành vi Y NGUYÊN như trước.
2. DỮ LIỆU: `landed_merge` cho `pnpm-build-approvals` (afe3682) và
   `ci-vitest-sdk-pin` (32e55c3). Thiếu neo thì own-range rơi về đúng
   `origin/main...HEAD` — vá đường dây xong vẫn đỏ.

Cả hai sha suy từ lệnh (merge đầu tiên trên ancestry-path chứa commit hợp đồng),
không gõ tay — bài học 29 pin-ma. Truy vấn đã qua đối chứng dương: nó tái tạo
đúng hai neo đã biết (task-metering f335135, ci-actions-bump 8477f8a). Lượt đo
đầu của tôi dùng --first-parent và trả "không có merge" cho CẢ hai hồ sơ đã có
neo — đối chứng bắt được truy vấn hỏng trước khi nó thành kết luận.

Neo afe3682 xác nhận bằng hai tín hiệu độc lập: phạm vi của nó (5 commit, 4 file
của chính hồ sơ, chỉ dư config.yaml) trùng khuôn của neo đã-được-duyệt
task-metering; và với nó eval chuyển sang xanh KÈM lời đúng ("diff confined to
tooling config and this feature's gate artifacts"), không xanh rỗng.

Kiểm:
- không ACCEPTANCE_SLUG → 0/0/1, trùng khít mốc trước khi vá (bảo toàn hành vi)
- có slug, chưa neo     → vẫn đỏ (đúng thiết kế)
- có slug, có neo       → 0/0/0
- fail-closed: slug bịa → exit 2 · neo hỏng → exit 2 (không ngả nào thành xanh)
- ci-vitest-sdk-pin E4 với neo → exit 0, đọc lượt CI lịch sử thật, 5/5 job success

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn chạy suite_keys của kho VÀ mọi eval test/script của từng hồ sơ tại HEAD,
rồi tự kiểm bằng recheck-evidence.cjs. Không dòng nào do người khai.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn chạy suite_keys của kho VÀ mọi eval test/script của từng hồ sơ tại HEAD,
rồi tự kiểm bằng recheck-evidence.cjs. Không dòng nào do người khai.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… làn kit không ghi

Hai đợt ghim lại trước dùng làn của kit (`repin-lane.mjs` 2.14.0). Làn ấy ghi
`evals_exit` (chứng eval đã chạy lại) nhưng KHÔNG ghi `prev_sha`. Hợp đồng
`repin-khong-chay-lai-eval` của chính kho này đòi `prev_sha` trên mọi dòng repin
MỚI — không có nó thì không ai tính được một lần ghim đã NUỐT mất eval nào.

Guard của kho bắt đúng: E2 `check-repin-eval-coverage.sh newlines` đỏ, nêu đích
danh hai run_id vừa ghi. Làn là được-ăn-cả nên đợt C cũng không ghi gì.

Đo được: trong 117 dòng repin lịch sử trên origin/main, 78 có `prev_sha`, 13 có
`evals_exit`, **0 có cả hai**. Không công cụ đơn lẻ nào đang có sinh được dòng
hợp lệ:
- làn kit          → evals_exit ✓ · prev_sha ✗ · và nó DỜI verified_commit
- writer của kho   → prev_sha ✓ · evals_exit ✗ · và nó TỪ CHỐI nếu verified_commit đã dời

Hai đường loại trừ nhau về thứ tự, nên không ghép nối được. Cần một quyết định
về writer trước khi chiến dịch chạy tiếp; không vá bằng cách nới phép đo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…điều kiện

Đo 2026-09-16 trên origin/main: 117 dòng repin, 78 có `prev_sha`, 13 có
`evals_exit`, **0 có cả hai**. Hai đường ghi loại trừ nhau về thứ tự:

- làn kit (`repin-lane.mjs` 2.14.0) → ghi `evals_exit`, KHÔNG ghi `prev_sha`,
  và nó DỜI `verified_commit`
- writer của kho (`repin-eval-coverage.mjs write`) → ghi `prev_sha`, không ghi
  `evals_exit`, và TỪ CHỐI nếu `verified_commit` đã dời (`prev === sha`)

Nên không công cụ đơn lẻ nào sinh nổi một dòng hợp lệ theo hợp đồng hiện tại,
và chiến dịch ghim lại kẹt cứng. `modeWrite` nay nhận tham số thứ năm
`evals_json`.

TUỲ CHỌN, và cố ý KHÔNG có mặc định:
- tuỳ chọn, vì răng cưỡng chế đã ở BÊN ĐỌC — `checkRepinEvals` của kit từ chối
  dòng thiếu trường này; writer không nhân đôi luật
- không mặc định, vì một object toàn 0 tự sinh chính là "MINT bằng chứng" mà
  chú thích của `suites_exit` ngay trên cảnh báo. Vắng mặt thì trường vắng
  mặt, không bịa

Từ chối hai ngả, cùng nghi thức với `suites_exit`: eval thoát khác 0 → dừng,
không ghi; JSON không hợp lệ hoặc sai khuôn object<id,int> → dừng.

Kiểm bốn chiều:
- bộ răng 30 ca cũ: 30/30 PASS (9 đối chứng dương + 21 phép phá) — không gãy ca nào
- mọi chế độ đọc (check · newlines · paths-law · so-khop-total · readers): exit 0
- truyền evals hợp lệ → dòng mang CẢ prev_sha lẫn evals_exit
- không truyền → hành vi y nguyên, không có trường
- eval đỏ → từ chối · JSON hỏng → từ chối

Không đổi KNOWN/TOTAL nên không chạm `evals.yaml` đã ký của hồ sơ
repin-khong-chay-lai-eval. Siết thành BẮT BUỘC kèm hai ca răng riêng là việc
nối tiếp đáng làm, nhưng nó chạm hợp đồng đã ký nên để owner quyết riêng.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn kit chạy chế độ ĐO (không dời verified_commit) → writer của kho ghi dòng
repin kèm prev_sha + evals_exit → dời verified_commit + mục Re-pin theo đúng
khuôn làn kit sinh ra. Không bước nào viết tay.

Dòng repin: prev_sha 96ee9b8 → sha e300539 · 9 suite exit 0 · 17 eval máy.

Kiểm bằng công cụ của kho, không bằng mắt:
- check-repin-eval-coverage.sh newlines → "mọi dòng repin mới đều mang prev_sha"
- pre-merge-check → pnpm-build-approvals KHÔNG còn vi phạm nào (trước: stale + nợ làn)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn kit chế độ ĐO → writer của kho (prev_sha + evals_exit) → verified_commit +
mục Re-pin. Không bước nào viết tay; guard newlines xanh trước khi commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…, không đọc evals_exit

`reMeasuredSince` trong repin-eval-coverage.mjs gom theo `o.kind==="eval" &&
o.eval && o.sha`; `evals_exit` trên dòng repin KHÔNG được nó đọc. Dòng đợt B ghi
đủ 13 eval vào `evals_exit` nhưng không có dòng `kind:"eval"` nào, nên guard kết
luận đúng: re-pin nuốt 7 eval bị chạm mà không chạy lại (E1,E2,E3,E9,E10,E12,E13).

Hệ quả: đợt C đỏ ở 4 eval, cả bốn cùng MỘT gốc là dòng đợt B — không phải 4 lỗi
khác nhau. Kho có sẵn 190 dòng `kind:"eval"` làm khuôn; bộ điều phối nay ghi
thêm lớp đó.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn kit chế độ ĐO → writer của kho (prev_sha + evals_exit) → verified_commit +
mục Re-pin. Không bước nào viết tay; guard newlines xanh trước khi commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Làn kit chế độ ĐO → writer của kho (prev_sha + evals_exit) → verified_commit +
mục Re-pin. Không bước nào viết tay; guard newlines xanh trước khi commit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…không chạy được

Guard `check` bắt sau khi ghi: re-pin nuốt E12 — eval `ui-check` có
`paths: src/components/workspace/nodes/**` bị chạm giữa hai mốc. Làn kit chỉ
chạy eval `test`/`script`, nên không lượt máy nào chứng được E12.

Đây đúng tiền lệ của kho: đợt ghim lại 05/09 loại SÁU hồ sơ, trong đó có
chong-doc-sai-em-ru, với nguyên văn lý do «ô `ui-check` không chạy được ngoài
luồng verify». Tôi đã ghim nó mà không đọc tiền lệ đó trước.

Vì sao làn vẫn xanh: làn chạy `check` TRƯỚC khi ghi 22 dòng, nên lúc đo chưa có
dòng nào để nuốt. Vòng tự quy chiếu này là thật và chưa có răng — ghi vào sổ.

21 hồ sơ còn lại của đợt C giữ nguyên.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@phanlemanh
phanlemanh marked this pull request as ready for review September 16, 2026 08:10
@phanlemanh
phanlemanh merged commit 31199f4 into main Sep 16, 2026
5 of 6 checks passed
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@phanlemanh
phanlemanh deleted the chore/kit-2-14-0-hop-nhat branch September 16, 2026 08:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant