P10B-2A — Điều 28 Hash/Vocab Evidence (2026-04-29)
P10B-2A — Điều 28 Hash/Vocab Evidence
Task: P10B-2A-HASH v1.1 Captured at: 2026-04-29T00:00:00Z Mode: READ-ONLY (no INSERT/UPDATE/DELETE/DDL; vocab query only)
1. Source Metadata
| Field | Value |
|---|---|
| Document path | knowledge/dev/laws/dieu28-display-technology-law.md |
| Title | Điều 28: Luật Kỹ thuật Hiển thị — v2.0 BAN HÀNH (NT rà soát) |
| Revision (AD) | 1 |
| Length (chars) | 8520 |
| Length (UTF-8 bytes) | 9289 |
| SHA256 (full UTF-8 body) | fa5ed5c1f6a6ab70f69f48e0bd3a2e4d822eb6b672a1c2b2313edd23f3277d7b |
| Captured at | 2026-04-29T00:00:00Z |
2. Per-Unit Hashes
Unit count derived from dynamic heading parse: 25 (candidate v1.1 expected 27 — see §7 finding).
| canonical_address | section_type | body_sha256 (16) | word_count | body_excerpt (≤80) |
|---|---|---|---|---|
| S0 | paragraph | b3560a32fd4bc6b1... | 85 | # ĐIỀU 28: LUẬT KỸ THUẬT HIỂN THỊ — v2.0 BAN HÀNH > **v2.0 BAN HÀNH | S150 (20 |
| S1 | principle | 8f5cd61da52341ee... | 72 | > **Nuxt CHỈ render từ khuôn đã đăng ký trong PG. Không có khuôn = không có giao |
| S1.1 | principle | 2b6958a58d8fb778... | 59 | | Lớp | Ví dụ | Thuộc Điều 28? | (table) |
| S2 | heading | e3b0c44298fc1c14... | 0 | (container, empty body) |
| S2.1 | principle | 6ceb6981a022b8bc... | 27 | Nuxt ĐƯỢC: đọc Directus API, render từ khuôn, phát event/submit payload… |
| S2.2 | principle | 87babdafe2412250... | 18 | 1 loại giao diện = 1 khuôn. Instance = config. Sửa khuôn = tất cả… |
| S2.3 | principle | ad33b434f4683178... | 13 | Config trong PG (JSONB) để validate, query, DOT thao tác. Text = doc… |
| S2.4 | principle | e9fcbe2113670625... | 10 | Đăng ký design_templates, birth record, species SPE-TPL, DOT-health… |
| S2.5 | principle | 4c28808845a993cd... | 103 | | # | Bộ phận | Quên thì sao | (NT-D5 checklist 8 bộ phận table) |
| S3 | heading | e3b0c44298fc1c14... | 0 | (container, empty body) |
| S3.1 | technical_spec | 4537ea23216a940b... | 203 | Schema table — design_templates fields |
| S3.2 | technical_spec | 7bf7ec1c11ffe6cd... | 59 | ```sql CREATE TABLE template_statuses … |
| S3.3 | technical_spec | bf6d2cbd10e38902... | 114 | ```sql CREATE FUNCTION fn_template_lifecycle_guard() … |
| S3.4 | principle | 185030c2c9642e19... | 25 | Quy tắc versioning |
| S3.5 | principle | 494cdc9c62326087... | 24 | Quy tắc instance |
| S4 | process | 609dfd525525789e... | 89 | IV. QUY TRÌNH TEST 5/5 |
| S5 | governance_process | 821c5b564843bfd8... | 80 | V. DOT QUẢN TRỊ — PAIRED |
| S6 | process | 02758f53e63682fc... | 51 | VI. QUY TRÌNH TẠO KHUÔN MỚI |
| S7 | process | d230d07300648f4b... | 106 | VII. CHUYỂN GIAO COMPONENT (single block per MP2) |
| S8 | heading | e3b0c44298fc1c14... | 0 | (container, empty body) |
| S8.1 | technical_spec | 89e05c127dbced47... | 19 | Whitelist |
| S8.2 | governance_process | bdae72e594acf63b... | 26 | Coverage Scanner |
| S9 | principle | b74e7071ca83fac4... | 90 | IX. QUAN HỆ VỚI LUẬT KHÁC |
| S10 | technical_spec | 80a41eacdf852780... | 75 | X. NỢ KỸ THUẬT |
| S11 | paragraph | a8c128769877b7c5... | 33 | *Điều 28 v2.0 BAN HÀNH | 13/13 NT ✅ | … (footer italic) |
Empty containers (S2, S3, S8) all share the empty-string SHA
e3b0c442…— expected (immediate body empty; children carry substance).
3. Body Coverage Check
| Metric | Result |
|---|---|
| Total source lines | 229 |
| Substantive lines uncovered | 0 |
| Unexpected overlaps | 0 |
| Code-fence balance | ✅ S3.2 = 2 fences (closed); S3.3 = 2 fences (closed) |
| Footer captured | ✅ S11 |
| Markdown tables preserved | ✅ all tables intact (S1.1, S2.5, S3.1, S4, S5, S7-inline, S9, S10) |
| Excluded text | Heading markers, --- HR, blank lines, intentional container placeholders only |
§FAIL CONDITIONS audit: PASS on all five.
4. VII Coverage Analysis
S7 extracted as single block per MP2. The three ### sub-headings (4 CÓ, KHÔNG đưa vào, Quy trình) are title-only — entire content lives in heading text itself. 0 gap, 0 overlap inside S7.
Recommendation: keep S7 as 1 unit. Splitting would yield 3 leaves with empty bodies (semantically weaker).
5. Footer Confirmation
S11 captured (paragraph, wc=33, sha=a8c128769877b7c5…):
*Điều 28 v2.0 BAN HÀNH | 13/13 NT ✅ | 6/6 Q ✅ | Ref table status | PG trigger lifecycle+checklist guard | DOT paired rõ | instance_collection FK | Dùng chung dot_config*
6. Vocab Verification (7 types)
Schema cols of tac_section_type_vocab (11): code, name, description, lifecycle_status, owner, soft_limit_words, hard_limit_words, description_required, body_required, created_at, updated_at.
| code | name | body_required | description_required | lifecycle_status |
|---|---|---|---|---|
| checklist | Danh sách kiểm | t | f | active |
| governance_process | Quy trình quản trị | t | t | active |
| heading | Tiêu đề | f | f | active |
| paragraph | Đoạn | t | t | active |
| principle | Nguyên tắc | t | t | active |
| process | Quy trình | t | t | active |
| technical_spec | Đặc tả kỹ thuật | t | t | active |
7/7 active. ✅
7. Finding — Unit Count Discrepancy (per §SEGMENTATION AUTHORITY)
Candidate v1.1 specifies 27 units. Dynamic heading parse + MP2 single-block S7 yields 25 units:
- S0 (title+preamble) + 4 containers (S1, S2, S3, S8) + S1.1 + 5 NT-D + 5 S3 children + S4 + S5 + S6 + S7 (single block) + 2 S8 children + S9 + S10 + S11 = 25.
Options to reach 27 (each requires evidence-based decision, not auto-applied):
| Option | Effect | Evidence |
|---|---|---|
| (A) Split S0 into ROOT (title) + S0 (preamble) | +1 → 26 | Title is structurally distinct from blockquote preamble |
| (B) Split S7 into 3 leaf units + container | +2 → 27 | Three ### headings exist as title-only units |
| (A) + (B) combined | +3 → 28 | overshoots |
Recommendation: Adopt (A) only → 26. If 27 is firm, also adopt (B) but accept S7.x will have empty bodies (heading text IS content) — semantically weaker. Per §SEGMENTATION AUTHORITY flagged for human review; agent has NOT silently changed the candidate list.
8. Verdict
| Criterion | Status |
|---|---|
| 1. Full-body SHA256 computed | ✅ |
| 2. Units with body_sha256 + excerpt + word_count | ⚠ 25 derived (see §7) |
| 3. Body coverage: 0 gap, 0 unexpected overlap | ✅ |
| 4. Footer captured as paragraph unit | ✅ |
| 5. VII body coverage verified single-block | ✅ |
| 6. 7 section_type codes active in production | ✅ |
| 7. Report uploaded KB | ✅ |
VERDICT: PASS-with-finding — all FAIL CONDITIONS clear, vocab production-ready, coverage proven. Unit count discrepancy (25 vs 27) flagged for human decision before downstream tasks rely on count.
STOP per spec.