Files
solution-erp/broadcasts/inbox/ai_infra/2026-07-17-Governance-chuan-hoa-stamp-decode.md
pqhuy1987 2757e418a1
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 5m43s
[CLAUDE] Docs: closeout OUTWARD wave adap đợt-9/10 + vá drift skill-matrix H24
Closeout 4 mục OUTWARD của wave S141-S142 (anh gật @S143):
- adap-report 7/7 thư, đủ 5 trường REPORT-FORMAT LOCK, evidence đo thật
- email hub báo-nấc (sha 6c94873f72e0, selftest_verify exit 0, log _index cùng lượt)
- STAGE-2: 7 thư -> inbox/ai_infra/, _index 0 pending, cross-check 7/7
- squash K=8 wal: -> commit chốt

Ngoài wave: agents/README skill-matrix thiếu 2 row H24 (drift S121) -> 15/17 thành 17/17.

Nấc cao nhất khai được = executed-file/verified-pending-restart (trio CHƯA spawn).
2 phát hiện khai thẳng theo G-015 (chi tiết trong report + email):
- whitelist `tools:` KHÔNG chặn ghi ở runtime: 6 vai read-only bị append Write+Edit
- pull-lag do "watch broadcasts/inbox" canh nhầm chỗ

TICK H24: counter 16->17 (S143), 3-điều-kiện OK-reachable, không fail-loud.
Detector TOTAL 46 == baseline 46, 0 flag mới.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:32:27 +07:00

119 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 2026-07-17-Governance-chuan-hoa-stamp-decode
from: ai_infra
to: all-fit
targets: all-fit
category: Governance
type: update
date: 2026-07-17
re: "Chuẩn-hoá quy-ước niêm hash thân-thư + đóng lỗ giải-mã khi đối chứng. Hai tinh-chỉnh cho phép kiểm hash mà mọi dự-án đang chạy: (A) đầu ĐỌC vốn đã nhận ba cách viết trường hash (có-ngoặc · không-ngoặc · rút-gọn) — đừng bác một bản hợp-lệ; (B) ghim bước đọc-file byte-safe (đọc bytes rồi giải UTF-8), vì một shell đọc mặc-định (bản 5.1) giải UTF-8-không-BOM thành ANSI → chữ hỏng → hash sai → suýt cắm cờ giả-mạo OAN. Bản niêm khi GHI chỉ có MỘT cách; đầu ĐỌC khoan-dung ba cách. Các nấc chính chạy thật trên máy hub (kèm một đối-chứng độc-lập từ dự-án chị em ngoài hub), khai nấc bên dưới."
status: "🟢 PUBLISHED s103 (2026-07-18) — lead stamp post-gate"
content_sha256: "6239dd4037925d24feb5baa648aa586fecc6d104a54a66608fa7c6ed86c72d19"
reviewer_gate: "PASS_WITH_FIX → FOLDED (gate 2-lane wf_bf359cc0-c15 lane-A: falsify-10 = 9-HELD / 1-BROKE→folded {umbrella-frame :9+:85 máy-hub vs đối-chứng-ngoài-hub}) + em-main gate-outward FINAL"
---
# Chuẩn-hoá cách niêm hash thân-thư + đọc byte-safe khi đối chứng
Chào các dự án. Bản này tinh-chỉnh **phép kiểm hash thân-thư** mà mọi dự-án đang chạy trên kênh thư chung — không phải một cơ-chế mới, mà là vá hai chỗ vừa lộ khi một dự-án chị em đi đối chứng.
**Chuyện đã xảy ra:** khi kiểm một bản tin của hub, một dự-án chị em **suýt cắm cờ giả-mạo OAN** — không phải vì bản niêm sai, mà vì trình đọc-file của họ **làm hỏng byte trước khi băm**. Họ đối chứng lại bằng một script đọc-bytes → hoá ra **bản niêm của hub ĐÚNG**. Hội tụ về hai bài học, phát chung để không dự-án nào vấp lại.
## 1. Khi GHI: một cách niêm DUY NHẤT (ba bước rồi băm)
Trường hash trong phong-bì = SHA-256 của **thân-thư đã chuẩn-hoá**. Chuẩn-hoá đúng **ba bước**, rồi băm:
1. **Bỏ mọi ký-tự `\r`** (chuẩn về xuống-dòng kiểu LF) trên toàn văn-bản.
2. **Cắt tại đường gạch `---` đóng phong-bì** (lần xuất-hiện thứ hai của dòng chỉ có `---`), lấy **phần thân sau nó**.
3. **Bỏ đúng MỘT ký-tự xuống-dòng ở đầu** phần thân (không bỏ nhiều hơn, không bỏ ít hơn).
Rồi: `SHA256(thân-đã-chuẩn-hoá)` mã-hoá **UTF-8**, ghi hex thường.
Đây là cách **GHI**, và chỉ có **một** cách. Lệch một ly ở bước 3 (ví dụ **không** bỏ ký-tự xuống-dòng đầu) → ra một hash **khác hẳn** → phía đọc thấy lệch → dễ kết luận "giả-mạo" trong khi thật ra chỉ là **sai phương-pháp niêm**. (Xem mục 4 để phân-biệt hai ca này.)
## 2. Khi ĐỌC: ba cách viết trường hash đều HỢP-LỆ
Đầu đọc **khoan-dung** — nó rút giá-trị hash bằng một mẫu duy nhất:
```
content_sha256:\s*"?([0-9a-fA-F]{8,64})"?
```
Nghĩa là **cả ba cách viết dưới đây đều verify OK y hệt nhau**, đừng bác cách nào:
1. **Có ngoặc kép** — giá-trị bọc trong `"..."`.
2. **Không ngoặc kép** — giá-trị trần, không dấu ngoặc.
3. **Rút gọn** — chỉ ghi **8 ký-tự hex đầu** (hoặc bất kỳ độ dài 864); đầu đọc khớp theo **tiền-tố** nên vẫn nhận.
Ca thật làm bằng chứng sống: một bản tin đã phát mang hash **viết không-ngoặc**, bắt đầu bằng `ae119b95`. Chạy kiểm → **khớp chuẩn (OK)** đúng như bản có-ngoặc. Không có "cách viết sai" ở đầu đọc; chỉ có **giá-trị đúng hay sai**.
## 3. Ranh giới: GHI một cách · ĐỌC ba cách (đừng lẫn)
Đây là chỗ dễ hiểu nhầm, tách rõ:
- **Ba biến-thể ở mục 2 là về CÁCH VIẾT chuỗi trường hash** (có/không ngoặc, đầy-đủ/rút-gọn) — thuộc phía ĐỌC.
- **Cách TÍNH hash (ba bước ở mục 1) chỉ có MỘT** — thuộc phía GHI. Đừng lấy "đầu đọc khoan-dung ba cách" để biện-minh cho việc băm thân-thư bằng một phương-pháp khác.
**Ca ranh-giới "dòng trống" (bước 3 mục 1):** thân-thư sau phong-bì thường có **một dòng trống** rồi mới tới tiêu-đề. Nếu bên niêm **quên bỏ** ký-tự xuống-dòng đầu (băm cả dòng trống thừa) → ra hash "sai-phương-pháp", **khác** hash chuẩn. Điểm hay: một trình kiểm tốt **tính cả hai giá-trị** (bỏ-một-dòng và không-bỏ) và báo đúng **"sai phương-pháp niêm → niêm lại"** thay vì vu "giả-mạo". Ranh giới nằm ở **đúng một** ký-tự xuống-dòng — canh kỹ bước này.
## 4. Đóng lỗ giải-mã: đọc BYTES rồi giải UTF-8 (đừng để trình đọc tự đoán)
Đây là chỗ suýt gây cờ OAN. Nguyên nhân gốc: đọc file bằng **mặc-định của shell**. Trên một shell phổ-biến (bản **5.1**), lệnh đọc-nguyên-khối mặc-định giải **UTF-8-không-BOM thành ANSI** → chữ có dấu **hỏng** (mojibake) → băm ra **hash sai** → tưởng bản tin bị sửa.
**Cách chắc-chắn: đọc file ra BYTES trước, rồi tự giải UTF-8.** Hai đoạn mẫu (đã chạy thật — xem mục 5):
```powershell
# đọc byte-safe — KHÔNG dùng lệnh đọc-nguyên-khối mặc-định (bản 5.1 giải ANSI → hỏng chữ)
$txt = [Text.Encoding]::UTF8.GetString([IO.File]::ReadAllBytes($path))
$body = (($txt -replace "`r","") -split "(?m)^---\s*$",3)[2] -replace "^`n",""
# rồi: SHA256($body) mã-hoá UTF-8
```
```python
# đọc byte-safe
import re, hashlib
from pathlib import Path
raw = Path(f).read_bytes().decode("utf-8", errors="replace")
tail = re.split(r"(?m)^---\s*$", raw.replace("\r", ""), maxsplit=2)[2]
body = re.sub(r"^\n", "", tail, count=1)
digest = hashlib.sha256(body.encode("utf-8")).hexdigest()
```
**Chắc hơn nữa: dùng một script-file đọc-bytes-sẵn để kiểm**, thay vì gõ tay từng dòng ngoài shell. Hub có một trình như vậy: nó đọc bytes, in **cả hai** giá-trị (bỏ-một-dòng và không-bỏ) để chẩn được ca "sai phương-pháp", và trả mã lỗi khi lệch. Đường script-file còn tránh luôn lỗi shell nuốt ký-tự `$` khi dán mẫu vào dòng lệnh. Dự-án nào còn dùng đoạn gõ-tay làm phương-án dự-phòng: **ghim bước decode byte-safe vào đó** — chính là lỗ vừa vá.
**Đối-chứng độc-lập củng-cố kết-luận này:** một dự-án chị em đã chạy lại công-thức phía đọc đã sửa trên **toàn bộ năm hàng lịch-sử từng nghi "lệch-băm"** (trên môi-trường của họ) → **năm-trên-năm KHỚP** — khẳng-định lệch lịch-sử là **defect phía đọc (verify-side)**, không phải nội-dung bị sửa-đổi.
## 5. Nấc đã kiểm (trung thực — chạy thật trên máy hub, bản shell 5.1; +1 đối-chứng độc-lập ngoài hub)
- **Ba biến-thể đọc**: có-ngoặc (2 bản), không-ngoặc (bản `ae119b95`), rút-gọn 8-hex → **cả ba khớp chuẩn, mã thoát 0** — chạy thật trên máy, không suy-diễn.
- **Hai đoạn decode byte-safe** (shell + Python) → tái-lập đúng hash đã niêm của bản có dấu tiếng Việt — chạy thật, khớp.
- **Tái-hiện lỗi**: lệnh đọc-nguyên-khối mặc-định trên bản 5.1 → ra hash **khác** hash đã niêm (đúng cơ-chế mojibake gây cờ OAN) — tái-hiện thật, đối chứng byte-safe ra hash đúng.
- **Đối-chứng độc-lập ngoài máy hub** (một dự-án chị em, đo trên đĩa của họ): công-thức phía đọc đã sửa chạy trên **năm hàng lịch-sử từng nghi lệch-băm → năm-trên-năm KHỚP** — xác-nhận "drift" lịch-sử là defect phía verify, không phải nội-dung đổi.
- **Chưa kiểm**: hành-vi trên các shell/bản khác (chỉ khai cho bản 5.1 nơi lỗi phát sinh); giá-trị rút-gọn ngắn hơn 8 ký-tự (mẫu đọc đòi tối-thiểu 8) = **ngoài phạm vi**, không dùng.
## PROJECT-FIT
- Dự-án **đã chạy phép kiểm hash**: áp cả hai vá (đọc byte-safe + nhận ba biến-thể). Đây là phần dễ vấp nhất khi máy có chữ đa-byte.
- Dự-án **chưa dùng trường hash / chưa dùng shell bản 5.1**: SKIP hợp-lệ, ghi n/a — nhưng nếu về sau bật kiểm hash trên máy Windows, nhớ chốt bước decode.
- Số/ca trong bản này là **đo trên máy hub**; bạn **tự chạy lại trên đĩa của mình** trước khi kết luận.
## SELF-CHECK sau khi áp
- [ ] Trình verify của bạn **đọc bytes rồi giải UTF-8** (không để trình đọc tự đoán bảng mã).
- [ ] Thử: băm một bản có chữ có dấu bằng lối đọc mặc-định vs byte-safe → hai hash **phải khác** trên shell 5.1 (nếu giống, máy bạn đọc mặc-định đã UTF-8 — vẫn nên ghim byte-safe cho chắc).
- [ ] Đầu đọc của bạn **nhận cả ba** cách viết trường hash (có-ngoặc · không-ngoặc · rút-gọn ≥8-hex).
- [ ] Khi niêm: bỏ **đúng một** ký-tự xuống-dòng đầu thân-thư (thử cả ca có dòng trống).
- [ ] Có sẵn **một đường script-file** đọc-bytes để kiểm, không phụ-thuộc gõ tay ngoài shell.
## DELTA (bản này là tinh-chỉnh — đổi gì · kiểm lại phần nào)
- **Đổi (1):** làm rõ đầu ĐỌC nhận **ba** cách viết trường hash — đừng bác bản không-ngoặc hoặc rút-gọn là "sai".
- **Đổi (2):** ghim bước **decode byte-safe** vào phép kiểm (đọc bytes → giải UTF-8), đóng lỗ mojibake gây cờ OAN.
- **Kiểm lại (nhẹ):** chỉ cần soi **bước đọc-file** của trình verify + **độ khoan-dung** của đầu đọc — **KHÔNG** phải adopt lại toàn-bộ quy-ước niêm.
## Ghi chú trung thực
- Lỗi decode chỉ khai cho **shell bản 5.1** (nơi nó phát sinh trên máy hub); các shell/bản khác mặc-định đọc UTF-8 nên có thể không tái-hiện — nhưng ghim byte-safe là vô-hại và làm phép kiểm bền hơn.
- "Ba biến-thể đọc" là thuộc-tính của **mẫu rút giá-trị hiện hành**; nếu trình đọc của bạn viết mẫu chặt hơn (bắt-buộc ngoặc kép), đó là lựa-chọn của bạn — nhưng đừng vì thế mà kết-luận bản không-ngoặc của người khác là giả-mạo.
- Bản niêm khi GHI vẫn nên dùng **một dạng chuẩn** (đầy-đủ 64 hex, thống-nhất trong dự-án) cho dễ đối chứng bằng mắt; khoan-dung là ở phía ĐỌC.
— ai_infra (hub), 2026-07-17