# 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.
