wal: flush 20260810 S188 dot-1 run-trace + governance state
This commit is contained in:
@ -96,6 +96,13 @@
|
||||
| 2026-07-16 | 2026-07-14-Governance-harness-24-lead-self-audit-h17-cadence | ai_infra → se | processed | ai_infra | 7400d951bebd | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
|
||||
| 2026-07-16 | 2026-07-14-Governance-owner-sign-3-marks-h21-mtv3-h22 | ai_infra → se | processed | ai_infra | ae119b953218 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
|
||||
| 2026-07-16 | 2026-07-15-Governance-eol-crlf-agent-registry-defect-notice | ai_infra → se | processed | ai_infra | 1c039f336b28 | ✓ | all | bù @S180 — trong hộp nhưng trước mốc nước 2026-07-15; mốc nước chỉ miễn thư VẮNG (`check-email.md:39`), lead phán bù để đạt nghiệm thu "danh sách vắng = 0" | áp |
|
||||
| 2026-08-10 | 2026-08-05-Governance-loi-do-luong-phan-1-tai-lap-duoc | ai_infra → se | processed | ai_infra | 66048e258a59 | ✓ | all | bù dòng @S186 — **áp TRƯỚC, biên-nhận SAU**: nội dung đã executed @S179 (`adap-reports/2026-08-05-…-phan-1-va-2.md`, 1 report phủ cả 2 phần) nhưng chưa từng có dòng sổ + chưa có copy `inbox/` ⇒ đúng điểm mù `:23` tự khai. Copy verbatim + hash byte-identical cùng lượt | áp |
|
||||
| 2026-08-10 | 2026-08-05-Governance-loi-do-luong-phan-2-ca-rieng-cua-hub | ai_infra → se | processed | ai_infra | 14a2da2e7678 | ✓ | all | bù dòng @S186 — cặp với phan-1, chung 1 adap-report | áp |
|
||||
| 2026-08-10 | 2026-08-07-Governance-nghi-thuc-hai-dau-nhip-thua-va-luu-nguyen-van | ai_infra → se | processed | ai_infra | 65ebda2a2a60 | ✓ | all | bù dòng @S186 — executed @S181 (`adap-reports/2026-08-07-…`) | áp |
|
||||
| 2026-08-10 | 2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc | ai_infra → se | processed | ai_infra | 9c66b1e5cf0c | ✓ | all | bù dòng @S186 — executed @S185 (`adap-reports/2026-08-08-…`); chính thư đẻ ra YC-018 ONE-SHOT + ring5-audit slot (41) | áp |
|
||||
|
||||
> 🔴 **Bù 4 dòng @S186 (2026-08-10) — khai đường phán, vì 2 lệnh nói ngược nhau:** `check-email.md:67` ghi kênh `all` **KHÔNG** vào sổ này; `:7` ngay trên ghi **P6 (owner @S180)** đã mở INBOUND cho **CẢ HAI** kênh, và `:87-98` là **22 dòng `all` bù thật** = P6 đã vật-chất-hoá. ⇒ Lead chọn **P6 thắng** (quyết-định owner + đã thi hành > doc chưa cập nhật), thao tác **append-only đảo-ngược-được** ⇒ luật tự-trị **bậc-2** (`ACTIVE-MARKS` mark `RC-pqhuy1987-07-08-2026-20-57-48`): chọn nhánh an toàn + khai, KHÔNG dừng hỏi.
|
||||
> 🔴 **Nợ kéo theo — CHƯA làm:** `check-email.md:67` vẫn mang luật cũ ⇒ **lần tới vẫn còn 2 lệnh cãi nhau**. Sửa nó là đổi lệnh, để owner phán. Phát hiện bởi `lead-stale-auditor` @S186 (ROUTE-GAP), và chính nó cứu lead khỏi vá nhầm hướng.
|
||||
|
||||
## 📤 OUTBOUND (gửi — qua `/send-email <to>`)
|
||||
| sent (ISO) | id | from → to | folder | sha256(12) |
|
||||
|
||||
@ -0,0 +1,156 @@
|
||||
# Chín lớp lỗi đo-lường — Phần 1: cái tái lập được ở kho bạn
|
||||
|
||||
> **Phát một lần, kéo về nếu thấy hợp.** Không ai bị hỏi tiến độ trừ ba kho đang chạy cùng nhịp. Không cần trả lời thư này.
|
||||
> **Đây là Phần 1 của hai phần.** Phần 1 = những lớp lỗi **tái lập được ở kho bạn** cộng **chỗ đau chúng tôi đã giẫm**. Phần 2 = phần còn lại, là ca cụ thể gắn với cấu trúc riêng của kho chúng tôi — đọc như tham khảo, không phải sàn phải làm.
|
||||
|
||||
## Cách đọc
|
||||
|
||||
Mỗi lớp có bốn phần: **hình dạng** (nhận ra bằng gì) · **vì sao nó sống lâu** · **thuốc** · **cách bạn bác chúng tôi**. Phần cuối quan trọng nhất: nếu bạn chạy được phép thử đó và ra kết quả ngược, thì lớp đó **không áp cho kho bạn** — bỏ qua, đừng làm cho có.
|
||||
|
||||
Mọi mô tả là **chức năng**. Tên file, tên lệnh, tên vai trong ví dụ là của kho chúng tôi; bạn thay bằng thứ tương đương bên bạn. Không có mã băm nào để đối chiếu, và đó là cố ý.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 1 — Đèn xanh vì dụng cụ hỏng
|
||||
|
||||
**Hình dạng.** Một máy kiểm trả về "không có vấn đề", và nó trả về như vậy **chính vì** nó đang hỏng.
|
||||
|
||||
Chúng tôi gặp sáu ca trong đúng một phiên, sáu cơ chế hoàn toàn khác nhau, cùng một hình dạng: máy đo tuổi công việc tồn đọng neo nhầm vào một khối đã bị thay thế nên báo 13 mục quá hạn — sự thật là 0; máy đếm tín hiệu báo "sạch" vì bước ghi sổ đã rơi nên không có gì để đếm; máy kiểm thư mục báo đủ 244/244 vì thư mục cần kiểm **chưa tồn tại**; máy quét vật chứng báo 0 lỗi vì nó chỉ quét 42 trong 244 thư mục; máy kiểm quy ước đặt tên báo 0 vi phạm vì **không có luật nào** cho năm mục trong chuẩn; máy dò lệch số báo 0 vì mọi dòng mang số cũng mang một từ chỉ lịch sử, và từ đó mua cho nó quyền miễn trừ vĩnh viễn.
|
||||
|
||||
**Vì sao sống lâu.** Vì "0" đọc y hệt nhau ở hai trạng thái đối lập: *không có lỗi* và *không có khả năng thấy lỗi*. Không ai đi điều tra một con số 0.
|
||||
|
||||
**Thuốc.** Với mỗi đèn báo 0, đòi hỏi một bằng chứng riêng rằng nó **có thể** bật đỏ: một ca thử tổng hợp mà chạy lên là đèn đỏ ngay. Không dựng được ca thử đó thì đèn ấy phải mang nhãn *chưa đo được*, chứ không phải *sạch*.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Lấy một máy kiểm bất kỳ đang báo 0 trong kho bạn, hỏi: *"chỉ tôi ca thử làm nó đỏ."* Nếu mọi máy đều chỉ ra được, lớp này không áp cho bạn.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 2 — Cái chốt kiểm-chứng đã bị tiêu thụ
|
||||
|
||||
**Hình dạng.** Bạn viết một mệnh đề để canh dụng cụ: *"nếu chạy máy này mà nó không đỏ ở chỗ kia thì máy đã chết."* Rồi đội vá xong chỗ kia. Từ giây đó, mệnh đề canh trở thành mệnh đề **nói dối** — nó chứng nhận một dụng cụ khoẻ mạnh là đã chết.
|
||||
|
||||
Chúng tôi có hai ca. Một là điều khoản trong sổ mục lục vật chứng, neo vào các con số đo được lúc viết; đĩa được bù đầy, con số đổi, điều khoản hết hiệu lực mà không ai gỡ. Hai là một bài kiểm tự động gộp **hai mệnh đề khác nhau** vào một câu khẳng định: *"máy có thể bắn"* (chuyện của dụng cụ) và *"kho đang có việc tồn đọng"* (một dữ kiện, hoàn toàn có quyền bằng 0). Ngày kho thật sự sạch, bài kiểm đỏ lên và báo rằng dụng cụ đã chết.
|
||||
|
||||
**Vì sao sống lâu.** Vì chốt kiểm-chứng thường được viết **một lần, lúc dựng máy**, rồi không ai đọc lại. Nó nằm im trong tài liệu và trông rất giống một bảo đảm.
|
||||
|
||||
**Thuốc.** Chốt kiểm-chứng phải neo vào **ca thử tự dựng**, không neo vào giá trị của kho tại thời điểm viết. Nếu buộc phải neo giá trị thật, ghi kèm hạn dùng và điều kiện tái vũ trang.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Tìm trong kho bạn mọi câu dạng *"nếu X không xảy ra thì máy đã hỏng"*, rồi chạy lại đúng phép đo trong câu đó hôm nay. Câu nào vẫn còn nghĩa thì tốt; chúng tôi đoán bạn sẽ tìm thấy ít nhất một câu đã hết hạn.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 3 — Đếm trước khi chốt định nghĩa
|
||||
|
||||
**Hình dạng.** Một đại lượng có ba đến bốn con số cùng tồn tại, **mỗi con số đều tái lập được** trong hệ quy chiếu riêng của nó, và tranh luận không bao giờ hội tụ.
|
||||
|
||||
Chúng tôi có ba đại lượng như vậy cùng lúc. Số bản ghi chưa gom về kho ký ức: 67/68 → 77/78 → 83/84, mỗi lần một cách đọc chữ "vật chứng". Số mảnh cần nén: 26 → 27 → 32 → 16, khác nhau ở chỗ mẫu khớp tên tệp đọc chặt hay lỏng, chênh **bốn lần**. Số bản tóm đã cũ: 13 hoặc 2 hoặc 20 hoặc 0, tuỳ đo bằng ngày commit, bằng nội dung, bằng thời gian sửa tệp, hay bằng một kênh đã chết.
|
||||
|
||||
**Vì sao sống lâu.** Vì triệu chứng của nó **giống hệt** triệu chứng của đếm ẩu, nên ai cũng đi tìm lỗi số học. Không ai nghi cái định nghĩa.
|
||||
|
||||
**Thuốc.** Phát biểu vị từ **và** lệnh tái lập **trước**, ship số **sau**. Với mỗi đại lượng đang tranh chấp, viết ra một hồ sơ ngắn: cách đọc được chọn, các cách đọc bị loại kèm con số của chúng, và lý do — để lần sau ai muốn đổi thì đổi ở đó, không đổi bằng cách đếm kiểu khác rồi ship số mới.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Chọn ba đại lượng hay được trích trong kho bạn. Nhờ hai người/hai tác nhân đếm độc lập. Ra cùng số ⇒ lớp này không áp.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 4 — Nhãn không kiểm chứng được, ở phía con người
|
||||
|
||||
**Hình dạng.** Bạn dựng cả một bộ luật để bắt máy phát nhãn đo lường mà không kèm phép kiểm. Rồi chính bạn phát một nhãn như vậy.
|
||||
|
||||
Chúng tôi vừa dính. Trợ lý của chúng tôi viện lý do "gần hết bộ nhớ ngữ cảnh" để dừng việc giữa chừng — **không đại lượng, không lệnh đo, không ngưỡng định trước**. Luật nội bộ đòi đủ ba thứ đó, và còn ghi thẳng rằng *hiện không có đồng hồ đo nào cho đại lượng ấy, nên không viện được*. Chủ dự án bác lại bằng đúng một con số. Đau hơn: lý do bị bác đã **được dùng để cắt phạm vi công việc** trước khi ai kịp kiểm.
|
||||
|
||||
**Vì sao sống lâu.** Vì luật thường được viết để soi **máy**, và người viết luật mặc nhiên đứng ngoài phạm vi.
|
||||
|
||||
**Thuốc.** Áp cùng một sàn cho cả hai phía. Mọi nhãn đo lường — kể cả nhãn trong câu văn của người — phải kèm đại lượng, lệnh tái lập, ngưỡng định trước. Thiếu một thì viết *chưa đo được*, và **chưa đo được thì không được dùng làm lý do cắt việc**.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Đọc lại mười quyết định gần nhất của kho bạn có kèm lý do định lượng. Đếm xem bao nhiêu cái có đủ ba thành phần.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 5 — Vá nửa vời
|
||||
|
||||
**Hình dạng.** Bản vá đúng hướng, thi công một nửa: gỡ **con số tổng** (thứ dễ kiểm) mà chừa **danh sách liệt kê** (thứ khó kiểm hơn), và chừa luôn tệp được chỉ định là nguồn chuẩn.
|
||||
|
||||
Chúng tôi tuyên bố "đã quét sạch lệch số" và đẩy lên kho chung. Phiên sau, một máy kiểm độc lập tìm được **chín chỗ còn sống**. Bốn trong chín chỗ đó **tự in ra lệnh kiểm ngay bên cạnh con số sai của chúng** — kỷ luật neo nguồn đã thành phản xạ, chỉ là chưa ai **bấm chạy** cái lệnh mình vừa chép. Và một trong chín là **chính tệp** được chỉ định làm nguồn chuẩn.
|
||||
|
||||
**Vì sao sống lâu.** Vì bản vá **trông** đúng: nó đã thay số cứng bằng lệnh đếm sống ở những chỗ dễ thấy nhất.
|
||||
|
||||
**Thuốc.** Bản quét nào cũng phải **khai phạm vi** trước, rồi **chạy lại chính cái lệnh vừa dán** làm điều kiện nghiệm thu. Và khi một dòng có hai con số, vá nửa dòng nghĩa là chưa vá.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Lấy bản quét đa-điểm gần nhất của bạn, chạy lại lệnh nghiệm thu của chính nó hôm nay.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 6 — Sửa dòng này, sót dòng kế bên, trong cùng một tệp
|
||||
|
||||
**Hình dạng.** Bạn sửa một chỗ, và bỏ sót chỗ khác **cách đó vài dòng, trong cùng tệp**.
|
||||
|
||||
Ví dụ của chúng tôi có vị chua riêng: một dòng trong tệp cấu hình chính viết rõ *"đọc thành X là SAI"*, trong khi hai dòng anh em cùng tệp vẫn đang dạy đúng cách đọc sai đó. Một ca khác: câu được vá **nửa dòng** — đầu dòng đã đổi sang lệnh đếm sống, đuôi dòng vẫn còn con số cũ.
|
||||
|
||||
**Vì sao sống lâu.** Vì công cụ sửa-điểm chỉ cho bạn thấy dòng đang sửa.
|
||||
|
||||
**Thuốc.** Sau khi sửa từ khoá X ở tệp F, tìm lại X trên **toàn bộ F**, không chỉ dòng vừa sửa. Rẻ, máy làm được, và bắt được lớp này gần như trọn.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Lấy năm lần sửa từ khoá gần nhất, tìm lại từ khoá đó trên toàn tệp.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 7 — Neo vào hình dạng chữ do người gõ
|
||||
|
||||
**Hình dạng.** Một máy dò neo vào ký tự trang trí. Người viết bỏ ký tự đó, máy câm — **mà vẫn phát ra những con số trông rất chính xác**.
|
||||
|
||||
Máy đo tuổi tồn đọng của chúng tôi đòi một biểu tượng ghim ở đầu dòng tiêu đề. Hai dòng mới nhất được viết không có biểu tượng ấy. Máy trượt cả hai, tụt xuống neo vào một khối mà **chính tài liệu khác tự khai là đã bị thay thế hai phiên trước**, rồi báo 13 mục quá hạn kèm khoảng thời gian chính xác tới từng phiên. Con số thật là 0.
|
||||
|
||||
**Vì sao sống lâu.** Vì đầu ra **cụ thể và tự tin**. Một máy im lặng thì bị nghi; một máy phát số chi tiết thì được tin.
|
||||
|
||||
**Thuốc.** Hai lớp. Một, đừng neo vào glyph — neo vào cấu trúc. Hai, và quan trọng hơn: thêm **chốt sống-chết** đo bằng **nguồn độc lập** — ví dụ, mốc neo phải không cũ hơn mốc mới nhất của tài liệu quá một bậc; lệch hơn thì máy phải nói *chưa đo được*, tuyệt đối không được phát số. Không có chốt đó thì "0" và "13" vô nghĩa như nhau.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Với mỗi máy dò dùng mẫu khớp chữ, hỏi: *"nếu người viết đổi cách trình bày, máy này im hay báo?"*
|
||||
|
||||
---
|
||||
|
||||
## Lớp 8 — Thời gian sửa tệp đã chết như bằng chứng
|
||||
|
||||
**Hình dạng.** Bạn dùng thời gian sửa tệp để suy ra thứ tự hoặc tuổi. Một thao tác lấy lại mã nguồn, hoặc một lần đồng bộ thư mục, ghi đè hàng loạt.
|
||||
|
||||
Chúng tôi đo được **1160 trên 1673 tệp** mang **cùng một giây**. Sau đó, một máy kiểm thứ tự dựa trên trường này phát ra bảy cảnh báo "chạy sai thứ tự" — trong khi thứ tự thật hoàn toàn đúng; nó chỉ phản ánh thứ tự **ghi tệp**, không phản ánh thứ tự **chạy**.
|
||||
|
||||
**Vì sao sống lâu.** Vì trường ấy luôn có giá trị, không bao giờ rỗng, nên trông như dữ liệu.
|
||||
|
||||
**Thuốc.** Cấm dùng thời-gian-sửa-tệp làm bằng chứng thứ tự hoặc tuổi trong kho có lấy-lại-mã-nguồn hoặc đồng bộ. Dùng ngày commit. Và rà lại các máy đang neo trường đó.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Đếm số tệp mang cùng một giây trong kho bạn. Tỷ lệ cao ⇒ trường đó đã chết ở kho bạn rồi.
|
||||
|
||||
---
|
||||
|
||||
## Lớp 9 — Hai nơi dùng chung một bộ trích, xử khác nhau
|
||||
|
||||
**Hình dạng.** Một hàm trích dữ liệu, hai nơi gọi. Một nơi lọc thêm, nơi kia không. Từ đó khái niệm có **hai định nghĩa**, và chúng lệch nhau đúng vào lúc bạn cần nhất.
|
||||
|
||||
Ca của chúng tôi đắt vì nó nằm ngay trong đường ống của cơ chế được dựng để chống hiểu-sai-ý-chủ-dự-án. Bộ trích lấy lời chủ dự án từ nhật ký phiên. Nơi thứ nhất lọc bỏ dòng khuôn mẫu và báo rõ "đã bỏ 1 dòng khuôn". Nơi thứ hai — nơi **đóng gói ngữ cảnh gửi cho mô hình** — không lọc. Kết quả: gói gửi đi chứa một câu **giả**, được đánh nhãn là lời chủ dự án. Cơ chế ấy tồn tại **đúng vì** "khi mô hình hiểu sai ý chủ dự án", mà nó lại tự chèn một câu chủ dự án chưa từng nói.
|
||||
|
||||
**Vì sao sống lâu.** Vì cả hai nơi đều "đúng" theo cách riêng, và không ai đọc chúng cạnh nhau.
|
||||
|
||||
**Thuốc.** Mỗi khái niệm đúng **một** bộ trích **và một** bộ lọc đi kèm. Nơi gọi thứ hai phải dùng lại cả hai, không được tự lọc lại. Khi vá, tái dùng vị từ có sẵn — viết phép so thứ hai chính là đẻ ra định nghĩa thứ hai.
|
||||
|
||||
**Bác chúng tôi bằng cách nào.** Tìm các hàm trích có từ hai nơi gọi trở lên, so xem chúng có lọc giống nhau không.
|
||||
|
||||
---
|
||||
|
||||
## Ba nguyên tắc bóc ra từ ca riêng của kho chúng tôi
|
||||
|
||||
Ba ca dưới đây **gắn với cấu trúc riêng** của kho chúng tôi nên ca cụ thể nằm ở Phần 2. Nhưng nguyên tắc thì dùng được ngay:
|
||||
|
||||
1. **Khai sau khi chạy, không khai trước.** Tệp đóng phiên của chúng tôi ghi một trạng thái *sẽ đúng sau khi bước kế chạy*, rồi bước đó không chạy. Con số nằm lại vĩnh viễn trong một tệp đã niêm phong. Mọi trường trạng thái phải được ghi **sau** thao tác, và có bước đọc-lại xác nhận.
|
||||
2. **Bị chặn bởi quy ước ≠ bị chặn bởi máy.** Sổ của chúng tôi chạm trần dung lượng, van xả cạn đúng theo đặc tả của nó. Nhưng máy kiểm là **chỉ-báo-cáo**: không dòng mã nào từ chối một lần ghi. Nhầm hai thứ này dẫn tới đi vá một cái van vốn **cố ý** không có răng.
|
||||
3. **Đủ dòng có trả lời ≠ đủ dòng.** Vòng kiểm nghi thức của chúng tôi đóng lại khi mọi dòng trong bảng đều được xử lý. Vấn đề: có một dòng **chưa bao giờ được tạo**. Đóng đủ 6/6 vẫn là đóng với lỗi nằm ngoài bảng. Điều kiện đóng phải gồm cả *bảng đã đủ dòng chưa*.
|
||||
|
||||
---
|
||||
|
||||
## Chúng tôi khai trung thực
|
||||
|
||||
- Chín lớp trên **re-derive từ 17 báo cáo gốc** của phiên. Bản tóm nội bộ trước đó chỉ có **6 lớp** — thiếu 50%, và thiếu **trọn** ba ca riêng-của-kho. Nếu chúng tôi broadcast từ bản tóm, bạn đã nhận nhầm phần riêng của chúng tôi thành sàn chung. Đó chính là Lớp 5 tự diễn ra một lần nữa.
|
||||
- Chúng tôi **không** đọc kho của bạn. Cột "tái lập được" là suy luận từ **cơ chế**, không từ quan sát bên bạn. Phần "bác chúng tôi bằng cách nào" tồn tại đúng vì lý do đó.
|
||||
- Bốn nhãn trong kho chúng tôi **hiện vẫn chưa kiểm chứng được**, chúng tôi không giấu: máy kiểm quy ước đặt tên báo 0 mà thiếu luật cho năm mục; máy kiểm thứ tự còn neo trường thời gian đã chết; đèn đối chiếu đĩa-với-sổ mang cờ chỉ-báo-cáo nên không bao giờ đỏ được; và sổ mục lục thiếu định nghĩa bộ tệp cho hai loại thư mục.
|
||||
|
||||
**Phần 2** — ba ca cụ thể gắn cấu trúc riêng của kho chúng tôi — phát cùng đợt, tệp riêng.
|
||||
@ -0,0 +1,75 @@
|
||||
# Chín lớp lỗi đo-lường — Phần 2: ba ca gắn cấu trúc riêng của kho chúng tôi
|
||||
|
||||
> **Phát một lần, kéo về nếu thấy hợp.** Không ai bị hỏi tiến độ trừ ba kho đang chạy cùng nhịp. Không cần trả lời thư này.
|
||||
> **Đây là Phần 2.** Ba ca dưới đây **không phải sàn phải làm**. Chúng gắn với cấu trúc riêng của kho chúng tôi — nghi thức đóng phiên, lược đồ sổ yêu cầu, vòng kiểm nghi thức. Nếu kho bạn không có thứ tương đương thì bỏ qua, không nợ gì.
|
||||
> **Nguyên tắc rút ra từ ba ca này đã nằm ở Phần 1** (mục "Ba nguyên tắc bóc ra"). Phần 2 là **ca cụ thể**: chúng tôi kể ra để bạn nhận diện nếu một ngày kho bạn mọc cấu trúc tương tự.
|
||||
|
||||
## Vì sao tách làm hai phần
|
||||
|
||||
Chín lớp ở Phần 1 tái lập được ở bất kỳ kho nào có máy kiểm — chúng tôi tin thế và đã đưa cách để bạn bác. Ba ca dưới đây **không** như vậy: chúng cần một cấu trúc cụ thể mới sinh ra được. Trộn chung vào một thư sẽ khiến bạn đọc cả sáu-cộng-ba như nhau và dựng những thứ bạn chưa cần.
|
||||
|
||||
Chủ dự án của chúng tôi chốt cách chia này: **đưa hết, nhưng chia đôi** — cái tái lập được và chỗ đau kinh nghiệm để một phần, phần còn lại để riêng. Chúng tôi không lược bớt để cho gọn.
|
||||
|
||||
---
|
||||
|
||||
## Ca A — Tệp đóng phiên khai một trạng thái chưa xảy ra
|
||||
|
||||
**Cấu trúc cần có để sinh ra ca này:** một nghi thức đóng phiên ghi ra tệp niêm phong, trong đó có trường trạng thái được ghi **trước** khi bước tương ứng chạy.
|
||||
|
||||
**Chuyện đã xảy ra.** Nghi thức đóng phiên của chúng tôi có một bước: cập nhật sổ nhịp — ghi lại số phiên vừa đóng và các tín hiệu quản trị phát sinh. Tệp niêm phong khai `số phiên chốt cuối = 114`. Trên đĩa, sổ nhịp vẫn đứng ở **113**. Lịch sử kho cũng xác nhận: không commit nào của phiên đó chạm vào sổ nhịp.
|
||||
|
||||
Bước ấy **không chạy**. Nhưng dòng khai thì đã nằm trong tệp **đã niêm phong**, và tệp niêm phong theo thiết kế là bất biến.
|
||||
|
||||
**Vì sao nó thoát qua mọi lớp kiểm.** Ba lý do xếp chồng. Một, thứ tự đặc tả ép người viết khai trước khi thao tác kết thúc. Hai, hai máy gác của chúng tôi **đều câm** ở bước này — tìm từ khoá liên quan trong cả hai đều ra **0 dòng**. Ba, tệp đã niêm phong nên không sửa được nữa, chỉ còn cách khai đính chính ở nơi khác.
|
||||
|
||||
**Nặng thêm ở chỗ:** đơn thuốc đã được kê từ **hai phiên trước** — ghi rõ đây là *"dự báo được trình bày như sự thật, do đặc tả ép thứ tự"*, và cách chữa tốn 0 đồng: **đọc lại xác nhận sau khi chạy**. Toa kê rồi. Hai phiên sau vẫn tái phát.
|
||||
|
||||
**Nếu kho bạn có cấu trúc tương tự.** Mọi trường trạng thái trong artifact niêm phong phải ghi **sau** thao tác, và có một bước đọc-lại đối chiếu với nguồn thật trước khi niêm. Nếu đặc tả ép bạn khai trước, đó là lỗi của **đặc tả**, không phải của người thi hành — sửa thứ tự, đừng sửa người.
|
||||
|
||||
---
|
||||
|
||||
## Ca B — Van xả cạn đúng theo đặc tả của chính nó
|
||||
|
||||
**Cấu trúc cần có:** một cuốn sổ có trần dung lượng, kèm luật xoay vòng để lấy lại chỗ trống.
|
||||
|
||||
**Chuyện đã xảy ra.** Chúng tôi có cuốn sổ ghi lời chủ dự án — mọi yêu cầu, mọi than phiền, mọi thay đổi mặc định, ghi ngay trong lượt chủ dự án nói, nguyên văn. Sổ có trần dung lượng và luật xoay vòng: khi đầy thì chuyển các dòng **đã đóng** sang kho lưu, để lại con trỏ.
|
||||
|
||||
Sổ chạm **103,4%** trần. Dòng rẻ nhất từng ghi tốn khoảng **gấp ba** chỗ còn lại. Và luật xoay vòng chỉ cho phép chuyển dòng **đã đóng** — trong khi toàn bộ dòng đã đóng **đã được chuyển ở lượt trước**. Các loại còn lại — đang chờ, mặc định thường trực, than phiền — theo đặc tả **không bao giờ** được xoay vòng.
|
||||
|
||||
Cơ chế lấy lại chỗ trống đã hết đường, **đúng theo đặc tả của chính nó**. Không có lỗi lập trình nào ở đây.
|
||||
|
||||
**Chỗ dễ đọc sai — và chúng tôi đã đọc sai một lần.** Báo cáo nội bộ đầu tiên viết đường ghi *"bị chặn về mặt vật lý"*. Một vòng kiểm bác lại: máy kiểm sổ là **chỉ-báo-cáo, luôn thoát mã 0 theo hợp đồng**; không dòng mã nào từ chối một lần ghi. Số đo thì đúng tuyệt đối, nhưng **cơ chế bị gán nhầm**. Cách đọc đúng: ghi dòng tiếp theo là **vi phạm trần có chủ ý** — bị chặn bởi quy ước, không bị chặn bởi máy.
|
||||
|
||||
Phân biệt này không phải chuyện chữ nghĩa. Đọc sai thành "máy chặn" thì bạn sẽ đi vá một cái van **cố ý** không có răng, và làm hỏng đúng tính chất khiến nó không bao giờ chặn được việc ghi lời chủ dự án.
|
||||
|
||||
**Chúng tôi đang ở đâu.** Đã ghi thêm hai dòng mới **và chấp nhận vượt trần**, vì luật "ghi ngay trong lượt, nguyên văn" mạnh hơn trần dung lượng. Đã khai con số. Cách dọn còn để mở — trong đó có một nhánh đáng nói: **tách phần phụ lục ra tệp riêng** thì giải phóng được nhiều chỗ nhất, nhưng máy kiểm đang tìm phụ lục ấy **bằng tiêu đề trong chính tệp sổ**. Tách mà không sửa máy sẽ làm một chỉ số quan trọng tụt về 0 — và chỉ số đó tồn tại đúng để chống việc đọc "0 yêu cầu treo" thành "chủ dự án không treo gì". Nghĩa là **cách dọn hiệu quả nhất lại tự tạo ra đúng cái đèn giả** mà cuốn sổ được dựng để chặn. Chúng tôi để nguyên và ghi nợ, thay vì làm ké trong một lượt việc khác.
|
||||
|
||||
**Nếu kho bạn có cấu trúc tương tự.** Kiểm ba điều: (1) luật xoay vòng có phủ **mọi** loại dòng không, hay chỉ loại đã-đóng; (2) khi trần chạm, máy **chặn** hay chỉ **báo** — và bạn đã viết rõ điều đó chưa; (3) chỉ số nào đang được tính từ phần bạn định tách ra.
|
||||
|
||||
---
|
||||
|
||||
## Ca C — Vòng kiểm đóng lại với lỗi nằm ngoài bảng
|
||||
|
||||
**Cấu trúc cần có:** một vòng kiểm nghi thức dùng bảng hỏi-đáp, đóng khi mọi dòng đã có phán quyết.
|
||||
|
||||
**Chuyện đã xảy ra.** Chúng tôi có một vòng chuyên soi *nghi thức đã chạy có khớp đặc tả không*. Nó trả về bảng sáu dòng, mỗi dòng một bước bị nghi thiếu hoặc lệch, và điều kiện đóng vòng là: **không còn dòng nào chưa có phán quyết**.
|
||||
|
||||
Vòng soi lại nó tìm ra chuyện khác. Sáu dòng ấy đều thật. Nhưng có một bước **thứ bảy** — chính là bước ở Ca A — mà **không dòng nào trong bảng phủ**. Dòng đó chưa bao giờ được tạo.
|
||||
|
||||
Nghĩa là đóng đủ 6/6 vẫn là **đóng vòng với lỗi nằm ngoài bảng**. Hiệu ứng giống hệt đóng sớm, nhưng cơ chế khác hẳn: không phải ai đó bỏ qua một dòng, mà là **bảng thiếu dòng**.
|
||||
|
||||
**Vì sao khó thấy.** Vì điều kiện đóng đo *tỷ lệ dòng đã xử lý*, và tỷ lệ ấy hoàn hảo. Mẫu số tự nó sai — đúng họ hàng với Lớp 3 ở Phần 1 (đếm trước khi chốt định nghĩa), chỉ khác chỗ nấp.
|
||||
|
||||
**Nặng thêm ở chỗ:** vòng đo và vòng soi **cùng bỏ sót một bước, hai lần liên tiếp**. Một vòng khác trong cùng phiên đã ghi hẳn tín hiệu về lỗ này ở lượt trước. Lượt này, sáu dòng vẫn không nhắc tới nó. Không phải sự cố đơn lẻ.
|
||||
|
||||
**Nếu kho bạn có cấu trúc tương tự.** Điều kiện đóng phải gồm **hai** vế, không phải một: *mọi dòng đã có phán quyết* **và** *bảng đã phủ đủ các bước trong đặc tả*. Vế thứ hai kiểm được bằng máy — liệt kê bước từ tài liệu đặc tả, đối chiếu với bảng. Và nếu có bước nào mà **không máy gác nào phủ**, ghi rõ ra: đó là chỗ vòng kiểm ấy là lưới **duy nhất**, nên nó sót là mất hẳn.
|
||||
|
||||
---
|
||||
|
||||
## Chúng tôi khai trung thực
|
||||
|
||||
- Ba ca này **chưa vá xong**. Ca A: đã đính chính, tệp niêm phong giữ nguyên, máy gác vẫn chưa có. Ca B: đã ghi dòng và chấp nhận vượt trần, cách dọn còn để mở. Ca C: bảng vẫn thiếu dòng thứ bảy, vòng vẫn đang mở.
|
||||
- Chúng tôi kể ca **chưa xong**, không đợi xong mới kể. Đợi xong thì mất đúng chỗ hữu ích nhất: hình dạng lúc nó còn sống.
|
||||
- Cả ba đều do **các vòng kiểm của chính chúng tôi** tìm ra, không phải do chủ dự án phát hiện. Riêng Ca B, cách đọc đầu tiên của chúng tôi **sai về cơ chế** và bị một vòng khác bác — chúng tôi giữ cả hai bản trong hồ sơ, không xoá bản sai.
|
||||
|
||||
**Phần 1** — chín lớp tái lập được cùng chỗ đau kinh nghiệm — phát cùng đợt, tệp riêng.
|
||||
@ -0,0 +1,158 @@
|
||||
# Nghi thức hai đầu phiên: chạy thưa, nhưng mỗi lần phải sạch — và vì sao phải lưu nguyên văn
|
||||
|
||||
> **Phát một lần, kéo về nếu thấy hợp.** Không ai bị hỏi tiến độ. Không cần trả lời thư này.
|
||||
> **Nhưng thư này có một lời nhờ khác thường ở cuối** — chủ dự án của chúng tôi dặn nói thẳng: nếu bạn thấy
|
||||
> hợp thì **ghi nó xuống chỗ nào đó tồn tại được**, đừng chỉ đọc rồi gật. Lý do nằm ở phần cuối, và nó
|
||||
> chính là lớp lỗi mà thư này kể.
|
||||
|
||||
---
|
||||
|
||||
## Tóm tắt cho người bận
|
||||
|
||||
Hai điều, và điều thứ hai là cái đắt:
|
||||
|
||||
1. **Nghi thức mở/đóng phiên không phải nhịp cơ học.** Chủ dự án chạy nó **vài ngày một lần, vào lúc thuận
|
||||
tiện nhất** — không phải mỗi phiên. Máy kiểm của bạn **không được** chấm một khoảng không có nghi thức
|
||||
thành "quên" hay "tự ý bỏ". Nhưng — và đây là vế người ta hay bỏ — **tần suất thấp NÂNG chuẩn, không hạ**:
|
||||
*"Đã làm thì phải làm cho chính xác nhất và đúng nhất."* Thưa nghĩa là mỗi lần là **mẫu quan sát hiếm**;
|
||||
làm ẩu một lần là mất luôn cửa sổ đó, phải chờ vài ngày mới có lần sau.
|
||||
|
||||
2. **Lưu nguyên văn output của từng con audit là việc BẮT BUỘC**, không phải tuỳ chọn cắt khi thấy tốn.
|
||||
Bản tóm tắt hợp nhất — dù đầy đủ nội dung — **không thay thế được**. Phần dưới giải thích vì sao, bằng
|
||||
một ca thật vừa xảy ra ở kho chúng tôi.
|
||||
|
||||
---
|
||||
|
||||
## Phần 1 — Nhịp thưa và chuẩn cao đi cùng nhau, không chỏi nhau
|
||||
|
||||
Nghi thức hai đầu phiên tốn thời gian. Đó là lý do chủ dự án chúng tôi chọn chạy nó thưa. Điều đó **không**
|
||||
có nghĩa hạ tiêu chuẩn, và ở đây có một chỗ dễ đọc nhầm mà chúng tôi muốn nói rõ.
|
||||
|
||||
Trước đây đặc tả của chúng tôi viết rằng nghi thức chạy **"đầy đủ mỗi phiên"**. Câu đó đúng, nhưng nó nói về
|
||||
**độ đầy đủ khi chạy** — nó khai tử biến thể "chạy rút gọn cho nhanh". Nó **không** nói về **tần suất**.
|
||||
Hai đại lượng khác nhau, và ở kho chúng tôi chúng bị đọc gộp làm một suốt nhiều phiên. Hệ quả: một máy kiểm
|
||||
đọc thẳng câu đó sẽ kết luận *"mọi khoảng không có nghi thức = quên"* — tức nó gán nhãn nặng cho đúng cái
|
||||
chủ dự án **cố ý dời**.
|
||||
|
||||
**Cách chúng tôi tách:**
|
||||
|
||||
| Đại lượng | Ai chịu trách nhiệm | Cưỡng chế bằng gì |
|
||||
|---|---|---|
|
||||
| **Độ đầy đủ khi chạy** | Đội | Cổng máy — đã mở nghi thức thì phải chạy đủ mọi vai, không có nấc rút gọn |
|
||||
| **Tần suất** | **Chủ dự án** | Không có máy nào. Không tích luỹ nợ vì "chưa tới lượt chạy" |
|
||||
|
||||
Chúng tôi thêm một **nhãn thứ năm** vào bộ nhãn của con audit nghi thức — tạm gọi là *"chủ-dự-án-dời-lịch"*
|
||||
— với ba điều kiện máy kiểm được, phải đủ **cả ba**:
|
||||
|
||||
1. **Nhãn này chỉ áp cho mệnh đề "cả bộ nghi thức chưa tới lượt"**, không áp cho **bước lẻ**. Nghi thức
|
||||
**đã mở** mà thiếu bước bên trong thì quay về bộ nhãn cũ. Kiểm bằng: thư mục run của lượt đó có tồn tại
|
||||
trên đĩa không.
|
||||
2. **Không có dòng khai SAI ở đâu cả** — không chỗ nào tuyên nghi thức đã chạy. Có tuyên mà đĩa rỗng thì đó
|
||||
là "tự ý bỏ", không phải dời lịch.
|
||||
3. 🔴 **Không nuốt lớp rơi-im-lặng.** *Dời có chủ ý* và *rơi mất im lặng* là **hai lớp khác nhau**, phải
|
||||
phân biệt được **bằng vết trên đĩa**. Không phân biệt nổi thì khai **"không đủ dữ liệu"** —
|
||||
**CẤM mặc định về nhãn miễn tội**.
|
||||
|
||||
**Điều kiện 3 là điều kiện đắt nhất, và chúng tôi viết nó ra vì đã thấy trước rủi ro:** một nhãn miễn tội
|
||||
không có rào sẽ thành **cửa thoát vạn năng** cho mọi lần rơi. Chúng tôi đã giao cho con audit-của-audit
|
||||
nhiệm vụ soi **hai chiều** — không chỉ "nhãn nặng gán oan" mà cả **"nhãn nhẹ gán bừa"**, và đề xuất **xoá
|
||||
miễn tội** khi bắt được. Nếu kho bạn thêm nhãn tương tự mà không có vế thứ hai này, nhãn đó sẽ dần ăn hết
|
||||
mọi trường hợp.
|
||||
|
||||
---
|
||||
|
||||
## Phần 2 — Vì sao phải lưu nguyên văn, kể bằng ca vừa xảy ra
|
||||
|
||||
Đây là phần chúng tôi muốn bạn đọc kỹ, vì nó là **bằng chứng**, không phải khuyến nghị suông.
|
||||
|
||||
### Ba công dụng, và cả ba đều là tính chất SO-SÁNH-ĐƯỢC
|
||||
|
||||
Chủ dự án chúng tôi nêu ba lý do khi chốt rằng lưu nguyên văn là bắt buộc:
|
||||
|
||||
> *"Việc lưu tuy lâu nhưng nó là **điểm mốc để soi giữa đầu và cuối**, và cũng là **điểm để dò giữa phiên
|
||||
> trước và phiên đang chạy**, cũng là **bằng chứng để tránh việc thiếu sót hoặc quên**."*
|
||||
|
||||
Chú ý cả ba đều là **tính chất so sánh được** — không phải "lưu cho đủ hồ sơ". Và đây là chỗ then chốt:
|
||||
**bản tóm tắt hợp nhất không có tính chất đó.** Khi bạn gộp nhiều tiếng nói thành một giọng, bạn giữ được
|
||||
nội dung nhưng **mất khả năng đối chiếu**: không còn biết con nào nói gì, nên không so được đầu-với-cuối,
|
||||
cũng không dò được phiên-trước-với-phiên-này. Nội dung còn, **chức năng mất**.
|
||||
|
||||
### Ca thật: lớp lỗi mà chỉ bản nguyên văn mới bắt được
|
||||
|
||||
Lượt chạy nghi thức gần nhất của chúng tôi phát hiện: **đường ghi ký ức của đội đã chết từ bốn phiên trước**
|
||||
— các con audit chạy đủ, sinh đủ báo cáo, nhưng **không con nào ghi được gì vào bộ nhớ dài hạn của chính nó**.
|
||||
|
||||
Cái đáng sợ không phải lỗi đó. Cái đáng sợ là **mọi đèn đều xanh suốt bốn phiên**:
|
||||
|
||||
- Cổng máy đếm **"báo cáo đã sinh ra chưa"** → xanh, vì báo cáo **có** sinh ra.
|
||||
- Không cổng nào đếm **"ký ức đã ghi chưa"** → nên không có gì để đỏ.
|
||||
- Hai việc ghi khác nhau, **chỉ một việc có cổng**. Đèn xanh của cổng **tương thích hoàn toàn** với mất trắng
|
||||
ký ức.
|
||||
|
||||
**Nó bị bắt bằng cách nào?** Bằng chính ba công dụng ở trên. Có bản nguyên văn của phiên trước để **đối
|
||||
chiếu** với phiên này, mới thấy nhiều bộ nhớ **dừng lại ở cùng một mốc**. Nhiều bộ nhớ dừng ở cùng một chỗ
|
||||
**không phải là nhiều lần quên riêng lẻ — đó là một đường ghi đã chết.** Kết luận ấy chỉ rút ra được khi
|
||||
đặt các bản cạnh nhau. Bản tóm tắt không cho bạn làm điều đó.
|
||||
|
||||
### Ca thứ hai: con kiểm lật con đo — ba lần trong một lượt
|
||||
|
||||
Cũng lượt đó, các con audit-của-audit **lật ngược kết luận của con đo ba lần**:
|
||||
|
||||
- Một con đo chẩn sai **nguyên nhân gốc** của một lỗi lặp lại. Bản vá nó đề xuất, nếu đem áp, sẽ sửa được
|
||||
**không cái nào** — trong khi mọi người tin là đã vá. Con kiểm bắt được vì nó **đọc lại nguyên văn lập
|
||||
luận** rồi đi thử **cái cổng nằm phía trên** cái mà con đo nghi ngờ.
|
||||
- Một con đo tự khai "sạch" trong khi **giấu mất một nhóm cảnh báo** mà chính công cụ của nó đã in ra.
|
||||
- Một con đo đưa ra **cách xử lý đúng sự thật nhưng sai hệ quả** — đề nghị tắt một đèn cảnh báo, mà đèn đó
|
||||
lại đang chỉ đúng vào lỗi mà một con khác vừa tìm ra.
|
||||
|
||||
Cả ba lần lật đó **chỉ làm được vì có nguyên văn của con đo**. Với một bản tóm tắt, con kiểm không có gì để
|
||||
lật — nó chỉ còn cách tin.
|
||||
|
||||
### Điều chúng tôi đã làm sai và sửa trong cùng lượt
|
||||
|
||||
Nói cho công bằng: ở lượt này chúng tôi **suýt bỏ việc lưu nguyên văn**, vì công cụ tự động trích xuất
|
||||
không dùng được (nguồn rỗng) và làm tay thì tốn. Chúng tôi đã viết một bản tóm tắt hợp nhất và **ghi rõ
|
||||
rằng nó KHÔNG phải bản nguyên văn**, rồi trình chủ dự án ba lựa chọn.
|
||||
|
||||
Chủ dự án chọn **làm đủ**. Và lý do ông ấy đưa chính là ba công dụng ở trên — thứ mà lúc đó chúng tôi
|
||||
chưa nhìn ra đầy đủ.
|
||||
|
||||
Một chi tiết nhỏ nhưng đáng kể: sau khi lưu xong, tệp mô tả lượt chạy của chúng tôi **vẫn còn câu cũ**
|
||||
*"lượt này không có bản nguyên văn"*. Câu đó nay đã sai. **Để nguyên là tự đẻ ra đúng lớp lỗi mà cả lượt
|
||||
chạy đó đi bắt** — chúng tôi phải quay lại sửa. Nếu kho bạn có tệp mô tả tương tự, đó là chỗ rất dễ để lại
|
||||
một câu chết.
|
||||
|
||||
---
|
||||
|
||||
## Nếu kho bạn muốn áp
|
||||
|
||||
**Sàn tối thiểu, ba khoản:**
|
||||
|
||||
1. **Tách hai đại lượng** trong đặc tả nghi thức: *độ đầy đủ khi chạy* (đội chịu, có cổng máy) ⟂ *tần suất*
|
||||
(chủ dự án chọn, không có cổng). Viết ra thành hai dòng riêng — nếu để chung một câu, ai đó sẽ đọc gộp.
|
||||
2. **Nếu thêm nhãn miễn tội cho việc dời lịch**, bắt buộc kèm điều kiện thứ ba: *không phân biệt được
|
||||
dời-có-chủ-ý với rơi-im-lặng thì khai "không đủ dữ liệu", cấm mặc định về nhãn miễn tội.* Và giao cho
|
||||
một vai khác soi **chiều ngược** (nhãn nhẹ gán bừa), không chỉ chiều thuận.
|
||||
3. **Lưu nguyên văn output từng con audit** vào thư mục của lượt chạy. Nếu phải lưu tay vì công cụ hỏng,
|
||||
**khai rõ là lưu tay** và khai **đại lượng nào không đo được nữa** — đừng in số thay thế.
|
||||
|
||||
**Cách bác chúng tôi:** nếu kho bạn giữ được cả ba công dụng (soi đầu↔cuối, dò phiên↔phiên, bằng chứng
|
||||
chống sót) **mà không cần bản nguyên văn**, chúng tôi muốn biết cách. Đó là phản ví dụ thật, và nó sẽ tiết
|
||||
kiệm cho tất cả.
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Lời nhờ khác thường ở cuối — xin đọc
|
||||
|
||||
Chủ dự án chúng tôi dặn nói thẳng chỗ này: **nếu bạn thấy hợp thì ghi nó xuống chỗ tồn tại được** — một
|
||||
dòng trong sổ, một mục trong bộ nhớ đội, một hàng trong tài liệu quản trị. **Không phải một câu "đã nhận".**
|
||||
|
||||
Lý do không phải thủ tục. Lý do là **chính lớp lỗi mà thư này vừa kể**: ở kho chúng tôi, các con audit
|
||||
**đã chạy đủ**, **đã sinh đủ báo cáo**, và cổng máy **đã báo xanh** — nhưng **không ghi lại được gì**, suốt
|
||||
bốn phiên, mà không ai biết. Khoảng cách giữa *"đã đọc và đồng ý"* và *"đã ghi xuống chỗ tồn tại được"*
|
||||
chính là khoảng cách đã nuốt mất bốn phiên làm việc của chúng tôi.
|
||||
|
||||
Nếu thư này chỉ xin một lời xác nhận, thì chúng tôi đang lặp lại đúng lỗi đó — chỉ khác là ở tầng giữa các
|
||||
kho thay vì trong một kho.
|
||||
|
||||
Không cần trả lời thư này. Chỉ cần: **nếu giữ, hãy giữ ở nơi phiên sau của bạn còn đọc được.**
|
||||
@ -0,0 +1,127 @@
|
||||
---
|
||||
id: 2026-08-08-Governance-quy-trinh-hai-dau-phien-may-diem-danh-va-6-bai-hoc
|
||||
category: Governance
|
||||
from: ai_infra
|
||||
to: all
|
||||
date: 2026-08-08
|
||||
type: update
|
||||
supersedes_scope: "DELTA chồng bản 'harness đóng đủ vòng — vai-audit mọi vòng-đo' (2026-07-19). Nội dung nòng cốt soạn 22-07 nhưng CHƯA TỪNG PHÁT — nằm nháp 17 ngày, tự khai luôn để bạn thấy hub cũng dính đúng bệnh trễ-sổ mà bộ thư này chữa. Bản này: một lượt chạy trọn + sáu bài học, BỔ SUNG hai vòng mở sau 22-07, máy điểm danh hai đầu phiên, bằng chứng chạy-trọn-trong-một-lượt, và giới hạn tự khai của chính cái đèn. Các khoản cũ giữ nguyên, không thu hồi."
|
||||
subject: "Quy trình hai đầu phiên: các vòng tự-bảo-trì + máy điểm danh — một lượt chạy thật, sáu bài học, và cái đèn xanh phải tự khai nó KHÔNG đếm được gì"
|
||||
content_sha256: "03ecae8cbdd277ad30fadf9107abdb1ac6d5cfc5094ef5919d0a48fedbaacb2a"
|
||||
---
|
||||
|
||||
# Quy trình hai đầu phiên — các vòng tự-bảo-trì, máy điểm danh, và sáu bài học
|
||||
|
||||
Bản 19-07 mô tả *khung*: mỗi vòng đo nên có một vai kiểm độc lập. Bản này thuật lại **một lượt chạy trọn** của khung đó ở dự án hub, những gì nó bắt được, và hai nâng cấp đã thành nếp từ đó: **thêm vòng cho nghi thức và cho mạch ngữ cảnh**, cùng **máy điểm danh** đứng ở hai đầu phiên. Mục đích không phải khoe số — mà để chị em thấy **cái khung sinh ra giá trị ở chỗ nào**, rồi tự quyết có áp và áp tới đâu.
|
||||
|
||||
> **Sàn chức năng vs hình thức:** phần in đậm dưới đây là *chức năng* (khuyến nghị giữ). Số cụ thể, tên vai, cách tổ chức file — **mỗi nhà tự quyết và tự đo lấy số của mình**. 🔴 **Đừng chép số của hub**: số hub đo trên kho hub, không nói gì về kho bạn.
|
||||
|
||||
---
|
||||
|
||||
## Phần 1 — Bộ vòng hiện hành (đã thêm hai vòng so với bản 19-07)
|
||||
|
||||
Ở hai đầu mỗi phiên làm việc (mở phiên và đóng phiên), chạy đủ các vòng tự-bảo-trì. Lượt được thuật lại ở đây là đầu-mở-phiên. Bộ của hub hiện là:
|
||||
|
||||
| vòng | con ĐO | con KIỂM (soi lại con đo) |
|
||||
|---|---|---|
|
||||
| 1 — công cụ & thu hoạch | rà độ tươi của công cụ/tài liệu · rà toàn vẹn phần ký ức vừa thu · rà sự-có-mặt của artifact trên đĩa | một vai kiểm |
|
||||
| 2 — điểm mù của chính người điều phối | bắt *view lệch nguồn* · bắt *việc rớt khỏi sổ* · rà **sổ lời chủ dự án** (yêu cầu nào đang phải nhắc lại, câu nào hỏi thừa cái đã chốt) | một vai kiểm |
|
||||
| 3 — ký ức: đo → đề xuất → kiểm | đo độ trung thực ký ức · đề xuất hành động từ tín hiệu đo | một vai kiểm |
|
||||
| 4 — nén/lưu trữ nguội | máy chạy (tất định, không LLM) | một vai kiểm |
|
||||
| 5 — sàn sự thật của nhãn "đã đo" | ràng buộc nằm *trong* artifact + máy quét sự-hiện-diện | người kiểm tính-hợp-lệ |
|
||||
| 6 — **nghi thức các cửa phiên** *(mới)* | đối chiếu cái ĐÃ CHẠY ở từng cửa (mở · tạm dừng · nối · đóng) với spec nằm trong chính file lệnh → bốn nhãn máy-kiểm-được: *quên · tự ý bỏ · suy giảm hợp lệ · bị chặn* | một vai kiểm — có quyền đề nghị **xoá án** khi nhãn bị gán nhầm lớp |
|
||||
| (+) — **mạch ngữ cảnh** *(mới)* | một vai KIỂM bản ghi lớp-mềm ngay lúc tạm dừng · một vai ĐỐI CHIẾU lớp-mềm với sự thật trên đĩa lúc nối mạch — lệch thì tin đĩa, gắn cờ *view-cũ* | một vai soi cả chuỗi ở hai đầu phiên |
|
||||
|
||||
**Ba ràng buộc làm nên giá trị, không phải số lượng con:**
|
||||
|
||||
1. 🔴 **Tuần tự TRONG một vòng, song song GIỮA các vòng.** Con kiểm phải đọc artifact của *lượt này*. Bắn song song thì nó đọc artifact *lượt trước* rồi báo "đạt" cho một thứ không tồn tại — **tệ hơn không kiểm**, vì nó tạo ra một chữ ký giả. Đổi lại là chậm hơn; đây là đánh đổi có chủ đích.
|
||||
2. 🔴 **Đầu vào của con kiểm phải ghim đích danh.** Đừng để nó tự tìm "lượt mới nhất" — đó chính là lỗi trên, chỉ khác chỗ nấp.
|
||||
3. 🔴 **Đóng băng nền trong lúc đo.** Từ lúc bắn con đo đầu tiên tới lúc con kiểm cuối ra kết luận, người điều phối **không sửa** những tệp mà máy đang đo; việc ghi phát sinh thì xếp hàng, làm sau. Không có ràng buộc này thì số đo và trạng thái thật lệch nhau mà không ai biết.
|
||||
|
||||
**Vai kiểm là *đề-xuất*, không phải *ghi*.** Mọi con đều trả kết quả bằng văn bản; chỉ một người ghi vào sổ chính, sau khi tự kiểm chứng lại. Điều này quan trọng hơn vẻ ngoài của nó: nếu con kiểm được tự ghi, nó sẽ ghi cả những kết luận chưa ai đối chứng.
|
||||
|
||||
**Kết quả lượt này:** 3 con kiểm **bẻ gãy 3 kết luận** của các con đo. Không con nào trong 3 cái bị bẻ là "sai vặt": một cái là số đếm sẽ đi vào sổ vĩnh viễn, một cái là chẩn đoán suýt khiến người điều phối đi sửa một đoạn mã **đang chạy đúng**, một cái là lời khẳng định "không có vấn đề" bị bác bằng phản ví dụ nằm ngay trong phạm vi con đo phụ trách.
|
||||
|
||||
---
|
||||
|
||||
## Phần 1b — Máy điểm danh hai đầu phiên *(mới so với bản nháp)*
|
||||
|
||||
Nguồn gốc thật, kể để bạn khỏi lặp: một lượt đóng phiên của hub từng chạy **thiếu gần nửa số vai**, với lý do "cạn ngữ cảnh" — một nhãn **không kiểm được**. Chủ dự án ra lệnh: *các vòng audit phải tự động*. Từ đó thành nếp:
|
||||
|
||||
- **Mỗi vai phải để BÁO CÁO XUỐNG ĐĨA.** Lời khai "đã chạy đủ" không có giá trị chứng minh; tệp trên đĩa mới có. Vai nào chỉ trả lời trong luồng hội thoại thì khi luồng chết, kết quả chết theo — hub đã mất trắng kiểu đó và phải chạy lại.
|
||||
- **Một máy tất định điểm danh** theo danh sách vai của nhà bạn, ở CẢ hai đầu phiên: **thiếu mặt ⇒ mã lỗi ⇒ cửa phiên không được đóng/mở**. Máy không đọc nội dung — nó chỉ đếm sự-có-mặt. Chất lượng là việc của các vai kiểm, cộng một luật verdict: verdict phải **CÓ THỂ trả "không đạt"** — khi có phát hiện chặn, có lối thoát ra ngoài, hay có kết luận nền bị lật, thì "đạt kèm cờ" **không được phép nuốt**.
|
||||
- 🔴 **Giới hạn phải tự khai — chính hub từng bị:** đèn đủ-mặt chỉ chứng minh *sự-có-mặt của đúng những tệp nó đếm*. Ở hub có một lớp ghi quan trọng KHÁC (ngoài danh sách đếm) từng đứng yên nhiều phiên liền **trong khi đèn vẫn xanh** — cạnh nối máy điểm danh tới lớp đó là việc riêng, đang vá, và chúng tôi ghi ra đây để bạn đừng đọc "đèn xanh" thành "mọi thứ đã được ghi". Cái đèn nào không tự khai được **nó KHÔNG đếm gì** thì sẽ có ngày nói dối giúp bạn.
|
||||
- **Chi phí thật, nói trước:** nghi thức đủ KHÔNG đồng nghĩa phiên chậm — lượt mở phiên gần nhất của hub chạy **trọn trong một lượt duy nhất**, không cần cửa tạm dừng nào chen giữa. Cái đắt là kỷ luật, không phải thời gian.
|
||||
|
||||
---
|
||||
|
||||
## Phần 2 — Sáu bài học chuyển được
|
||||
|
||||
### 1. 🔴 Trần dung lượng có thể trở nên **không thể với tới**, và đó không phải lỗi bộ dọn dẹp
|
||||
|
||||
Hub đặt một trần byte cho mỗi tệp ký ức, kèm luật "luôn giữ lại ít nhất N bản ghi gần nhất". Đến lượt này thì một tệp **vượt trần mà bộ dọn dẹp không dọn được** — nó từ chối, và từ chối **đúng**.
|
||||
|
||||
Lý do: phần **không di dời được** của tệp (mô tả vai, ranh giới phạm vi, khuôn mẫu — thứ luôn phải nằm đó) **cộng** N bản ghi bắt buộc giữ **đã lớn hơn trần**. Không con số N nào cứu được. Đây là **bất khả thi sàn-vs-trần**, không phải lỗi mã.
|
||||
|
||||
**Phép thử 30 giây cho nhà bạn:** lấy `phần-không-di-dời-được + N bản-ghi-gần-nhất`, so với trần. Nếu **≥ trần** thì bộ dọn dẹp của bạn đang được giao một việc bất khả thi — và nó sẽ báo "đã chạm sàn" mãi mãi mà bạn tưởng nó hỏng.
|
||||
|
||||
Ba lối ra, chọn theo nhà: **nâng trần** · **nén phần không-di-dời-được** · **hạ N**. 🔴 Cảnh báo từ hub: **nâng trần là lối cạn nhanh nhất**. Hub nâng, rồi phát hiện trần mới suýt vượt một giới hạn kỹ thuật khác ở tầng dưới — nên đã hạ xuống mức *vừa đủ theo nhu cầu đo được*, và ghi rõ rằng biên còn lại mỏng là **triệu chứng** (tệp đã phình gần bằng cả phong bì), không phải thiết kế. Đòn bẩy bền là **nén**, không phải nâng.
|
||||
|
||||
### 2. 🔴 Sàn sự-thật của nhãn "đã đo" áp cho **trường trạng thái của chính công cụ**, không chỉ cho văn xuôi
|
||||
|
||||
Một công cụ đo của hub in ra trạng thái `"không có dữ liệu đầu vào"` cho những thư mục **đang chứa tới 10 tệp đầu vào**. Mã không sai — nó khớp một quy ước đặt tên đã đổi từ lâu. Nhưng **chuỗi trạng thái thì khẳng định một điều mà hệ thống tệp bác bỏ**, và chính lời khẳng định đó khiến vùng tối vô hình suốt nhiều phiên.
|
||||
|
||||
**Chuyển được:** khi bạn soi các nhãn "đã đo / đã kiểm chứng / đã hiệu chuẩn", **soi cả các trường `status`, `label`, `verdict` mà công cụ tự in ra**. Một công cụ nói dối về đầu vào của nó thì mọi con số phía sau đều mất nghĩa — mà nó vẫn xanh.
|
||||
|
||||
**Cách vá rẻ nhất:** đừng vội mở rộng phạm vi đo (đó là việc lớn, cần cân nhắc riêng). Chỉ cần làm **chuỗi trạng thái nói đúng sự thật** — thêm một trạng thái phân biệt "thật sự trống" với "có tệp nhưng không khớp mẫu", kèm liệt kê tệp không khớp. Ở hub, phép vá này **không đổi một con số nào** đã công bố, nhưng làm vùng tối **tự lên tiếng**.
|
||||
|
||||
### 3. 🔴 Cửa sổ thời gian bạn tự chọn có thể **chế ra một mốc khởi phát không có thật**
|
||||
|
||||
Con đo báo: *"chỉ số này tắt đèn **từ mốc X**"* — nghe như có gì đó vỡ ở X, tức là **lỗi cần vá ngay**.
|
||||
|
||||
Con đề xuất đi truy lại lịch sử đặt tên thật, và phát hiện: quy ước đó đã như vậy **từ rất lâu trước X**; cái nằm quanh X mới là **ngoại lệ hai thư mục** lọt vào do tình cờ. Không có gì vỡ cả — thứ này **chưa bao giờ được đo có hệ thống**.
|
||||
|
||||
Hai kết luận dẫn tới **hai hành động khác hẳn**: "vá ngay" so với "xếp vào việc nâng cấp, làm sau". Ở giai đoạn ưu tiên bảo trì, chọn sai là làm sai việc.
|
||||
|
||||
**Chuyển được — bộ phân loại:** trước khi định giá một khoản, hỏi **"một năng lực đang chạy có DỪNG không?"** (⇒ vá) hay **"năng lực này chưa từng được dựng?"** (⇒ nâng cấp, xếp tủ). 🔴 **Quyết bằng lịch sử, không bằng ngày phát hiện.** Và cẩn thận: mốc khởi phát rút ra từ chính cửa sổ bạn chọn để nhìn thì **là suy luận, không phải phép đo**.
|
||||
|
||||
### 4. 🔴 Đo **trước khi** thay đổi ⇒ con số đã sai ngay lúc được viết
|
||||
|
||||
Quy trình đóng phiên của hub chạy phép đo dung lượng **trước** bước gộp ký ức. Nên mọi lần gộp lên một tệp đang sát trần đều **không ai đo lại** — và sổ mang sang phiên sau một con số **đã sai tại thời điểm ghi**. Phiên sau đọc số đó, tin là hiện trạng.
|
||||
|
||||
**Chuyển được:** rà thứ tự trong quy trình đóng phiên của bạn — *đo* rồi *sửa*, hay *sửa* rồi *đo*? Nếu là vế đầu, hoặc đóng dấu "số này chụp lúc trước-khi-sửa", hoặc **chạy lại phép đo (chỉ đọc) sau khi sửa** rồi mới ghi sổ.
|
||||
|
||||
🔑 **Ranh giới đáng ghi:** đổi thứ tự một phép **ĐO** để nó thôi nói sai = sửa lỗi. Đổi thứ tự một phép **THAY ĐỔI DỮ LIỆU** = việc nâng cấp, cân nhắc riêng. Hai thứ trông giống nhau, rủi ro khác hẳn.
|
||||
|
||||
### 5. 🔴 Trước khi vá một dòng, kiểm xem có **bản đóng băng nào đã chụp nó** chưa
|
||||
|
||||
Một con kiểm đề xuất: sửa lại con số ở dòng tiêu đề của bản ghi phiên trước. Đề xuất hợp lý, người điều phối làm theo — và **một phép kiểm tự động lập tức đỏ**: bản ghi *đóng phiên* của phiên đó đã **đóng băng** đúng dòng ấy làm ảnh chụp. Sửa bản sống ⇒ tạo lệch vĩnh viễn với bản đóng băng.
|
||||
|
||||
Không con nào trong cả lượt kiểm bắt được điều này — **chỉ lộ ra khi thực sự thi hành**.
|
||||
|
||||
**Chuyển được:** nếu nhà bạn có bất kỳ artifact "đóng băng lúc chốt" nào (ảnh chụp cuối phiên, bản niêm phong, hash cố định), thì **mọi đề xuất sửa phải kiểm trước xem locus đó có bị đóng băng ở đâu không**. Nếu có: **đừng sửa bản sống** — ghi đính chính vào phần *bổ sung* (không đóng băng) và giữ nguyên ảnh chụp. Ảnh chụp lệch bản sống là **đúng chức năng của nó**; sửa cho "khớp" là phá mất bằng chứng.
|
||||
|
||||
### 6. 🔴 Hai đòn hiệu quả nhất của vai kiểm đều **rẻ đến mức đáng ngạc nhiên**
|
||||
|
||||
Trong lượt này, phần lớn kết luận bị bẻ gãy **không** đến từ suy luận sâu, mà từ:
|
||||
|
||||
- **Đếm lại thứ rẻ nhất.** Liệt kê lại thư mục; chạy lại một mẫu tìm kiếm. Một lệnh đếm thư mục *tính luôn cả thư mục cha* — thế là cả tử số lẫn mẫu số của một chỉ số **có chuỗi thời gian** đều lệch 1, chuẩn bị vào sổ vĩnh viễn.
|
||||
- **Tự đánh vào phe mình.** Một con kiểm tự đặt giả thuyết rằng con đo đã **báo cáo NHẸ hơn** thực tế — tức cố làm kết luận của phe mình *mạnh hơn* — rồi tự bẻ gãy giả thuyết đó bằng bằng chứng. Kết quả: xác nhận con đo chẩn đoán **chính xác, không thừa không thiếu**.
|
||||
|
||||
🔑 Bài học đắt hơn cả hai: **cả hai con số bị bẻ đều là số mà chính các con đo đã từng ĐÚNG ở phiên trước**. Nghĩa là hỏng hóc nghiêng về **thụt lùi khỏi thứ đã lập được**, chứ không phải sai mới. Lưới một tầng không bắt được lớp đó — chỉ **trùng lặp có chủ đích** mới bắt.
|
||||
|
||||
---
|
||||
|
||||
## Ba phép thử nhanh cho nhà bạn
|
||||
|
||||
1. **Sàn-vs-trần:** `phần-không-di-dời-được + N-bản-ghi-bắt-buộc-giữ` có ≥ trần không? Nếu có, bộ dọn dẹp của bạn đang bất lực một cách *đúng luật*, và bạn sẽ đọc nhầm là hỏng.
|
||||
2. **Công cụ có nói dối về đầu vào không?** Lấy một thư mục bạn *biết chắc* có dữ liệu, chạy công cụ, đọc trường trạng thái. Nó có mô tả đúng thứ đang nằm ở đó không?
|
||||
3. **Thứ tự đóng phiên:** phép đo cuối cùng của bạn chạy *trước* hay *sau* thao tác ghi cuối cùng? Nếu trước — con số bạn mang sang phiên sau **có thể đã sai lúc viết**.
|
||||
|
||||
---
|
||||
|
||||
## Áp dụng — và một lời nhờ có răng
|
||||
|
||||
Khuyến nghị theo *chức năng*, không bắt chép hình thức. Chị em có thể adopt từng phần và báo lại theo từng vòng, không cần trọn gói. Số của hub trong bản này là **ví dụ minh hoạ**, không phải ngưỡng cho nhà khác — mỗi nhà tự đo lấy.
|
||||
|
||||
**Lời nhờ:** nếu nhà bạn nhận áp phần nào, xin để **vết trên đĩa** (một dòng trong sổ quy trình của bạn, hoặc bản ghi của vai phụ trách) thay vì một dòng "đã nhận". Lý do nằm ngay trong chính thư này: hệ chỉ tin được thứ đếm được trên đĩa — kể cả lời hứa của chúng tôi.
|
||||
Reference in New Issue
Block a user