Skip to content

Chữ ký không tự làm bằng chứng hoá cũ; làn trước chữ ký bỏ qua khi cây bằng pin (ADR 0019) - #176

Merged
phanlemanh merged 20 commits into
mainfrom
claude/chu-ky-khong-tu-lam-hoa-cu
Sep 15, 2026
Merged

phanlemanh merged 20 commits into
mainfrom
claude/chu-ky-khong-tu-lam-hoa-cu

Conversation

@phanlemanh

Copy link
Copy Markdown
Owner

Vòng meta của cửa sổ 2.12 → 2.13 (owner gọi tên 15/09). Cắt chi phí nằm sau khoảnh khắc «quyết-được» — phần mà năm dòng số của luật (c) chưa đếm.

Vấn đề — đo, không ước

Chữ ký khoi-tim-loi-tra-phi-theo-vat (14/09): từ lúc owner gõ «Ký» tới READY TO MERGE mất 54 phút · 87 lượt model · ≈ 42 M token, trong đó ≈ 6 M là việc thật. 7/7 chữ ký từ 08/09 đều đi qua ba lượt repin-lane.mjs (≈ 13 phút/làn).

Nguyên nhân tất định: ca LM20 chỉ ghim hồ sơ có human_signoff, nên chính hành động ký đưa hồ sơ vào diện quét và buộc routing-baseline.txt thêm một dòng — mà tệp đó là code, nên stale_files() gọi bằng chứng hoá cũ và bắt ghim lại. Đúng vòng lặp mà ADR 0007 đã giải một lần cho PRODUCT-MAP.md.

Hai nhát

(d) Bản ghi mốc định tuyến là vật T1 máy sinh — vào t1_skip_globs, và dòng của nó do tests/scripts/routing-baseline.mjs --write sinh ở bước 7a-bis của /signoff (sau 7a, vì nó đọc human_signoff làm tiền điều kiện), kèm ca LM20 chạy ngay sau làm đối chứng dương. Lệnh sinh xuất routingLine + settled, LM20 nhập từ đó — writer/reader một nguồn. ADR 0019.

(c′) repin-lane.mjs --skip-unchanged — cây bằng pin (0 tệp git-theo-dõi ngoài _acceptance/ tính theo phân đoạn đường dẫn, và ngoài t1_skip_globs, đổi so verified_commit) → in một dòng rồi bỏ qua, exit 0. Vị từ ngữ nghĩa stale_files, tái dùng chứ không dựng phép đo mới. Fail-closed ba chỗ: đi cùng --write → usage exit 3; pin vắng hoặc SHA ma → không bỏ qua; cây đổi sau verify → chạy trọn, luật đỏ y nguyên (vụ sinh ra bước 7b vẫn bị bắt).

Hai nhát khoá vào nhau: thiếu (d) thì tệp baseline (là code) bẩn ở mọi lượt ký và (c′) không bao giờ bỏ qua được.

Bằng chứng

verdict: PASS · 8/8 eval máy · 5 suite exit 0 (tests/scripts 873/873, plugins, hooks, workflows, product-map) · 7 mutant chạy thật, 7 lần đỏ đúng ca của nó.

Chứng trong luồng ký thật: bước 7a-bis chạy ở chính lượt ký này — sinh dòng rồi LM20 xanh ngay tại chỗ. Trước vòng này, đúng khoảnh khắc đó LM20 sẽ đỏ và phải sửa fixture sau chữ ký.

Đường đi — 6 lượt chấm, và vì sao

Bốn lượt đầu đều đỏ vì thước của chính vòng, không vì hai nhát cắt (vật xanh 7/7 eval từ lượt 1). Lớp đó nay có hai răng canh:

  • RB4 — ba chỗ hai nhát tự phản lại mình: khối clause còn bắt chạy --write vô điều kiện sau commit (trả lại đúng 13 phút vừa cắt) · mọi văn bản trỏ «bước 6b» không tồn tại · LMCMS_ONLY khớp 0 ca vẫn exit 0 (đối chứng dương hoá rỗng).
  • RB5 — mọi neo grep của hồ sơ phải khớp đúng một tên ca khai trong nguồn, đóng cả họ «đổi tên ca, quên neo» thay vì vá chỗ vừa cắn.

Chi phí thật: 6 lượt chấm · ≈ 11,7 M token · 3 lượt gọi người ngoài thiết kế (DỪNG-VÁ · vượt trần 3 vòng · nâng phạm vi tại Cổng Bằng chứng). Cao hơn mục tiêu ≤3 lượt/vòng, và cả ba đều đến từ máy tự sửa thước của chính nó — dữ liệu cho dòng 3 và 4 của mốc kế.

Giới hạn đã khai — 11 mục Known limits

Phần lớn cùng lớp «thước không sống» trong bộ răng của vòng (RB2c là đột biến no-op · E7 khai chiều đỏ không tồn tại · RB2e/RB3-IM tautology · SK6 grep chuỗi có sẵn). Hai nhát cắt không tựa vào các assert đó — chúng tựa vào 7 mutant và 8/8 eval.

Owner định đoạt tại Cổng Bằng chứng: mục ① (AC-3) sửa ngay; mục ③ mở hợp đồng mới_acceptance/bo-qua-phai-thay-dinh-nghia-phep-do/ (draft, chờ 2.14): vị từ bỏ qua loại trừ trọn _acceptance/** trong khi config.yamlevals.yaml **là nguồn định nghĩa lệnh làn sẽ chạy`.

Va chạm khi gộp

main ship release-2-13-0 + do-tin-tram-phan-loai trong lúc vòng chạy. Ba xung đột: config.yamlrouting-baseline.txt đều thuần CỘNG (giữ cả hai khối), PRODUCT-MAP.md dựng lại bằng script. Số ADR trùngmain đã dùng 0017/0018, nên ADR của vòng đổi thành 0019 cùng 14 tệp tham chiếu. Làn sau gộp: XANH.

Trước khi merge

pre-merge-check --slug chu-ky-khong-tu-lam-hoa-cu --base origin/main: clean, 4/4 luật chạy. Chạy trọn cây còn 1 vi phạm — ra-co-ten-lam-va-trao stale từ ea26fdfe trên main, nhánh này không chạm tệp nào của nó; đó là nợ re-pin theo release (41/68 hồ sơ, hạt giống 2.13).

Chữ ký hưởng lợi đầu tiên là chữ ký kế tiếp, sau khi nhánh lên mainclaude plugin update — bản trong plugin cache còn 2.11.0.

🤖 Generated with Claude Code

phanlemanh and others added 18 commits September 15, 2026 07:45
…au chữ ký, làn V qua Cổng Phạm vi

Vòng meta duy nhất cửa sổ 2.13 (owner gọi tên 15/09). Đo: chữ ký khoi-tim 14/09
mất 54 phút · 87 lượt · 42M token, ≈6M là việc thật; 7/7 chữ ký từ 08/09 đều qua
ba làn repin-lane. Nguyên nhân tất định: LM20 chỉ ghim hồ sơ có human_signoff →
chính chữ ký buộc routing-baseline.txt thêm dòng → fixture là code → stale.

(d) baseline là vật T1 máy sinh (cùng lớp ADR 0007) + lệnh sinh dòng ở bước 6.
(c′) làn --skip-unchanged theo đúng vị từ stale_files.

6 AC · 7 eval · gap-probe 5 finding (4 P1, 1 P2) đều fixed trong artifact trước
cổng. Làn V: approved_by rỗng, veto_state: mo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ốc là vật T1 máy sinh, làn bỏ qua khi cây bằng pin

(d) tests/scripts/fixtures/routing-baseline.txt vào t1_skip_globs (ADR 0017,
cùng điều kiện ADR 0007: máy sinh toàn phần + LM20 canh drift độc lập). Dòng của
nó do tests/scripts/routing-baseline.mjs sinh ở bước 6b của /signoff, cùng lượt
với bản đồ, kèm ca LM20 chạy ngay sau làm đối chứng dương. Lệnh sinh XUẤT
routingLine + settled; LM20 NHẬP từ đó — writer/reader một nguồn.

(c′) repin-lane.mjs --skip-unchanged: cây bằng pin (0 tệp git-theo-dõi ngoài
_acceptance/ tính theo PHÂN ĐOẠN đường dẫn, và ngoài t1_skip_globs, đổi so
verified_commit) → in một dòng rồi bỏ qua, exit 0. Vị từ là đúng ngữ nghĩa
stale_files của pre-merge, không dựng phép đo mới. Fail-closed: đi cùng --write
→ usage exit 3; pin vắng hoặc SHA ma → không bỏ qua.

Răng hai chiều, 22 ca mới (12 RB + 10 SK), fixture code-sinh, pin do writer thật
ghi. Nghi thức kiểm 5/5 mutant bị bắt: tiền tố thay phân đoạn · bỏ vế T1 ·
fail-open khi pin hỏng · gỡ glob · lệnh sinh ghi đè trọn tệp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ipts 873/873

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
TRONG hợp đồng (AC-3): bước 6b khai «vài giây» trong khi đo thật ≈1ph45
(LMCMS_ONLY=LM20) / ≈2ph40 (trọn tệp). Nay 6b chạy đúng MỘT ca và khai số đo
thật ngay trong lời dặn; AC-3 đòi điều đó; RB3 thêm hai assert ghim.

Ba ca hạ tầng, mỗi cái đi đúng đường khai luật đã dựng sẵn:
- P30 LOP-PHUT: comment repin-lane ghi «13 phút/làn» → khai MIEN_TRU, lý do
  giờ-MÁY (dòng 5 luật (c)) không phải phút-NGƯỜI ở cổng.
- LB2: GUIDE viết `/signoff` trần → `/acceptance-gate:signoff`.
- RT13: hai tệp ca mới chứa chuỗi `signed-off` → hai dòng gạch có lý do trong
  BO-DOC-KHAI-GACH.

product-map dựng lại. Suite plugins xanh trọn, tests/scripts 873/873.
Năm mục ngoài hợp đồng KHÔNG sửa ở lượt này — người quyết ở Cổng Bằng chứng.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…— 7/7 eval exit 0, REJECT do hai suite hồi quy

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…2 trong hợp đồng), DỪNG-VÁ

Vật xanh cả hai lượt: 7/7 eval máy + 5 suite exit 0, 0 failedEvals, 0 failedCommands.
REJECT đến từ finding, không từ lệnh nào đỏ.

TRONG hợp đồng:
- AC-3 (medium): bước 6b đứng TRƯỚC 7a nhưng routing-baseline.mjs đòi human_signoff
  có sẵn → một agent đi đúng thứ tự số sẽ luôn exit 2 ở 6b và DỪNG; chữ ký không
  bao giờ commit được. Gap-probe lượt 1 đã cảnh báo, lúc đó triage xếp ngoài hợp đồng.
- AC-6 (high): SK5 gõ tay dòng bản ghi mốc trong khi E6 hứa writer thật sinh —
  đúng seam writer/reader mà vòng này tồn tại để đóng.

NGOÀI hợp đồng: 13 mục, phần lớn cùng lớp «thước không sống».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…SK5 dùng writer thật

Owner chọn lối 2 tại cổng DỪNG-VÁ (thu phạm vi).

AC-3 — lượt ký tự chặn chính nó: bước sinh bản ghi mốc đứng trước 7a nhưng
routing-baseline.mjs đòi human_signoff có sẵn → exit 2 → DỪNG, chữ ký không bao
giờ commit. Sửa bằng VẬT không bằng lời dặn: dời khối xuống thành 7a-bis (sau
7a, trước 7b) để thứ tự SỐ = thứ tự CHẠY; RB3 thêm assert đo QUAN HỆ vị trí
(7a < lệnh sinh < 7b), đặt lại khối lên trước 7a là ca đỏ.

AC-6 — SK5 gõ tay dòng bản ghi mốc đúng khuôn bên đọc trong khi E6 hứa writer
thật sinh. Nay chạy routing-baseline.mjs --write thật trong ca; writer đổi khuôn
là SK5 đỏ.

Kèm theo: assert «không khai vài giây» nay kiểm neo văn bản trước khi slice
(neo trôi → assert hoá rỗng im lặng — một trong 13 mục ngoài hợp đồng).

13 mục ngoài hợp đồng ghi Known limits, kèm đánh đổi owner nhận khi ký.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… ngoài hợp đồng (P179)

Luật P179: mỗi mục «Đề xuất: known-limits» trong corpus phải có dòng truy được
trong docs/research/known-limits-ledger.tsv. Ghi Known limits vào hồ sơ làm
corpus vượt sổ 1 dòng — nay sổ có đủ 11 dòng, class đặt theo lớp lỗi thật
(dong-goi · tap-so-rong · mut-khong-qua-chan-that · do-thuoc · chuoi-thay-quan-he …).

Bốn suite xanh: tests/scripts 873/873, plugins all passed, hooks, workflows,
product-map khớp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…7 eval + 5 suite xanh

Hai finding TRONG hợp đồng của lượt 2 đã đóng (AC-3 thứ tự bước sinh, AC-6 SK5
dùng writer thật). Lượt này 0 finding trong hợp đồng.

Triage phạm vi hỏng: args.diffFiles bị bỏ khi truyền args inline → không phân
biệt được miền, refute chạy cả 19 finding theo đường cũ, verdict hạ xuống
PENDING-JUDGMENT theo luật. Máy KHÔNG tự sửa finding nào; 17 mục chờ người.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…phạm vi)

A1 — khối SIGNOFF-LANE-CLAUSE vẫn khẳng định vô điều kiện «commit chữ ký chạm
file ngoài T1» rồi bắt chạy --write. Sau ADR 0017 tiền đề đó SAI ở đúng ca vòng
này nhắm: commit chữ ký chỉ chạm vật hồ sơ + tệp T1 → lưới im. Để nguyên thì một
lượt ký vừa bỏ qua được làn 7b lại trả lại 13 phút ngay sau commit. Nay: ghim lại
CHỈ KHI lưới thật sự báo stale, đọc từ kết quả lưới không từ lời dặn.

A2 — mọi văn bản trỏ «bước 6b», bước đó không còn tồn tại (tên thật 7a-bis).
Bên thi hành đi tìm 6b, thấy bước 6 là product-map → kết luận điều kiện không
thoả → bỏ sót routing-baseline.txt khỏi git add → commit-sau-verify quay lại.
Đổi tên ở signoff.md, ADR 0017, GUIDE và tệp ca.

A3 — LMCMS_ONLY khớp 0 ca vẫn exit 0, mà bước 7a-bis dùng chính lệnh này làm
ĐỐI CHỨNG DƯƠNG. Nay exit 2 kèm thông điệp gọi tên giá trị đã truyền.

AC-7 + eval E8 + ca RB4 ghim cả ba. Ba mutant chạy thật, ba lần đỏ đúng RB4.
Suite: tests/scripts 873/873, plugins all passed, product-map khớp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Lượt chấm 4 bắt: chính hai tệp ca vẫn gọi «bước 6»/«6b» trong tiêu đề ca và
thông điệp assert, trong khi RB4 cấm đúng chuỗi đó ở ba văn bản khác. Luật loại
trừ chỗ đang vi phạm thì nó tự mâu thuẫn — và thông điệp assert mang tên cũ dẫn
người sửa tới bước 6 (tái sinh bản đồ), sai chỗ y như trong văn bản lệnh.

Đổi tên trong cả hai tệp ca; A2 nay quét 5 văn bản kể cả chính chúng. Chuỗi cấm
dựng bằng GHÉP MẢNH nên tệp ca không chứa nó nguyên văn — bỏ được vùng
tự-loại-trừ, vốn đã bị chính chuỗi literal trong mã làm nhiễu.

Mutant: trả tên cũ vào tệp ca → RB4 đỏ. Suite: tests/scripts 873/873,
plugins all passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…a, quên neo»

Finding TRONG hợp đồng (AC-3, high): commit trước đổi tên ca RB3 thành «buoc
7a-bis» để thoả chính luật A2, nhưng executors.script.ckh_rb_signoff_van_ban
vẫn grep «PASS: RB3 signoff.md buoc 6» → E3 đỏ ở HEAD dù tệp ca xanh 14/14.
Làn 7b của lượt ký sẽ đỏ vì HẠ TẦNG chứ không vì vật — đúng lớp luật (c) đếm.

Sửa theo LỚP, không vá một chỗ: RB5 quét mọi executor ckh_* của hồ sơ và đòi
chuỗi grep khớp ĐÚNG MỘT tên ca khai trong nguồn tệp ca. Mutant (trả neo về tên
cũ) → RB5 đỏ.

RB5 đọc NGUỒN chứ không chạy lại tệp ca: bản đầu chạy lại chính tệp chứa nó nên
đệ quy — vấp thật khi viết, đã sửa.

Sổ known-limits #10 chuyển sang «chet», closed_by RB5: khẳng định cũ «executor
chỉ grep tiền tố nên eval vẫn xanh» đã bị lượt chấm 4 chứng là sai.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…uite xanh

0 failedEvals, 0 failedCommands, 0 blocked, triage lành. 12 finding: 1 trong
hợp đồng (AC-3, low — RB3 assert «1 ph 45 s» bỏ neo, quét trọn tệp thay vì đoạn
7a-bis), 11 ngoài hợp đồng.

Bốn lượt trước đều đỏ vì thước của chính vòng; lớp đó nay có RB4 (ba chỗ tự
phản) và RB5 (mọi neo grep khớp đúng một tên ca) canh.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Ngoài-① (AC-3, trong hợp đồng): nâng phạm vi SỬA NGAY — RB3 assert «1 ph 45 s»
dùng lại neo của assert ngay trên nó thay vì grep trọn tệp; mutant (dời con số
sang cuối tệp) → RB3 đỏ.

Ngoài-③: mở hợp đồng mới cho 2.14 — --skip-unchanged loại trừ trọn _acceptance/**
trong khi config.yaml và evals.yaml LÀ nguồn định nghĩa lệnh làn sẽ chạy.

9 mục còn lại: ghi Known limits. cắt/hoãn: đồng ý phạm vi đã khai ở Cổng Phạm vi.

Bước 7a-bis chạy thật trong lượt ký này: sinh dòng bản ghi mốc rồi LM20 xanh —
trước vòng này đúng chỗ đó sẽ đỏ và phải sửa fixture SAU chữ ký.
Làn 7b: LÀN XANH, 5 suite + 8/8 eval máy exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sửa mục ① tại Cổng Bằng chứng chạm tệp vật (tests/scripts/routing-baseline-t1.test.mjs)
sau verified_commit → stale THẬT, đúng ca luật đòi ghim lại. Làn xanh: 5 suite +
8/8 eval máy exit 0; verified_commit nay trỏ chính commit chữ ký 76879ac.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…aft, chờ cửa sổ 2.14

Thi hành định đoạt «Ngoài-③: mở hợp đồng mới» ở Cổng Bằng chứng 15/09.

Lỗ: vị từ --skip-unchanged loại trừ MỌI đường dẫn có phân đoạn _acceptance, nhưng
_acceptance/config.yaml (suite_keys + executors) và _acceptance/<slug>/evals.yaml LÀ
nguồn định nghĩa thứ làn sẽ chạy. Sửa một executor sau verify → cây «bằng pin» → làn
bỏ qua → lệnh MỚI không bao giờ chạy trước chữ ký.

Gốc: stale_files hỏi «bằng chứng có hoá cũ không» — với câu đó vật hồ sơ đúng là nên
loại trừ. Vòng trước tái dùng nguyên vị từ ấy cho câu KHÁC: «có cần chạy lại phép đo
không». Với câu thứ hai, config.yaml và evals.yaml là ĐẦU VÀO.

3 AC · 5 eval khai sẵn chiều đỏ và chiều im. status: draft — suất vòng meta của cửa
sổ 2.12→2.13 đã dùng cho chính vòng vừa ký (luật chiều rộng (b)), nên hồ sơ chờ 2.14.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…u-lam-hoa-cu

# Conflicts:
#	PRODUCT-MAP.md
#	_acceptance/config.yaml
#	tests/scripts/fixtures/routing-baseline.txt
main đã ship release-2-13-0 và do-tin-tram-phan-loai trong lúc vòng này chạy.
Gộp vào nhánh, xử ba xung đột (config.yaml và routing-baseline.txt đều thuần
CỘNG — giữ cả hai khối; PRODUCT-MAP.md dựng lại bằng script).

Va chạm số ADR: main đã dùng 0017 (nới-giữ-nguyên) và 0018 (CỘNG cần phê duyệt),
nên ADR của vòng này đổi 0017 → 0019 cùng 14 tệp tham chiếu.

Làn sau gộp: XANH, 5 suite + 8/8 eval máy exit 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@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 and others added 2 commits September 15, 2026 15:03
… hình»

Luật status-chua-arm-cong: PR đổi code chịu cổng mà hồ sơ trong PR ở draft thì
cổng không chấm nó. Hồ sơ bo-qua-phai-thay-dinh-nghia-phep-do CHƯA chạy vòng
(chờ cửa sổ 2.14) nên nó không thuộc PR này — đi riêng sau khi mốc này vào main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…chặn thật

CLAUDE.md §re-pin: giữa hai release hồ sơ cũ hoá stale là chấp nhận được, đừng
đuổi theo; nhưng «vòng đang chạy bị chặn thật = vấp thật: ghi sổ, ghim lại RIÊNG
làn đó». PR này chạm commands/signoff.md và tests/plugins/run-tests.sh — cả hai
nằm trong paths của hồ sơ ấy, nên cổng chặn thật chứ không phải nhiễu.

Làn: XANH. Phần còn lại của nợ (69 hồ sơ) để chiến dịch ghim lại của mốc.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@phanlemanh
phanlemanh merged commit 155e096 into main Sep 15, 2026
2 checks passed
phanlemanh added a commit that referenced this pull request Sep 15, 2026
Duyệt ở 87355094 rồi hạ lại cùng ngày: một phiên KHÁC («Tiêu thụ token và
hiệu suất ký») đang giữ PR #176 với hai hồ sơ nữa của cùng cửa sổ — một đã
ký (chu-ky-khong-tu-lam-hoa-cu, ADR 0019) và một draft.

Bốn khối sự thật của hồ sơ dựng trên cây CHƯA có #176 nên sẽ sai khi nó vào:
Context khai «đúng MỘT tệp engine» (#176 chạm cả hai gói) · bảng năm dòng
đếm MỘT vòng (cửa sổ có ít nhất HAI vòng đã ký) · §4 xếp routing-baseline
đầu bảng cho cửa sổ sau (#176 làm nó rồi) · ô so_stale ghim 43 (mục đích

Bài học ghi thẳng vào sổ: phiên này khai «cửa sổ đổi đúng MỘT tệp engine»
mà chỉ nhìn main, không soi PR đang mở của phiên khác trong cùng kho.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
phanlemanh added a commit that referenced this pull request Sep 15, 2026
…agram-design giữ 2.7.0

Năm vế P200 khớp: hai gói cùng số hợp semver · GUIDE dẫn xuất câu khớp phiên bản
từ manifest · mô tả mỗi gói có mục v2.14.0 nói người dùng nhận gì · mục v2.14.0
của feature-loop tự khai cặp acceptance-gate >= 2.14.0. rang-so-tang: 2.13.0 tại
4c4d58f → 2.14.0. rang-moc: diagram-design không đổi kể từ 06331ab.

CHANGELOG: mục «Chưa phát hành — hướng tới 2.13» đổi tên thành 2.13.0 (đã cắt ở
ea26fdf nhưng tệp chưa đổi theo); gạch chữ-ký-không-tự-làm-hoá-cũ (#176, sau lần
cắt) dời sang mục 2.14.0 mới cùng gạch trạm phân loại. GUIDE §7.1: nhãn (2.13)
của --skip-unchanged sửa thành (2.14).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
phanlemanh added a commit that referenced this pull request Sep 15, 2026
T2 · gap-probe 0 P0 · Coverage không ô GIẢ ĐỊNH. Owner đã duyệt hồ sơ này một
lần bằng lệnh rồi hạ draft chờ #176; trình lại sau merge không tốn lượt người.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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