KB-10F8

dot-iu-cutter v0.5 — Constitution Nuxt parser_profile "nuxt-incomex-portal-constitution-v1" + B6 Ruling Request (recommend PARTIAL→Option B)

8 min read Revision 1
dot-iu-cutterv0.5constitution-fixturenuxt-parser-checksumparser-profileruling-requestb6-partialroute-gpt-userdieu442026-05-18

dot-iu-cutter v0.5 — Constitution Nuxt parser_profile + B6 Ruling Request

Phase: v0_5_constitution_nuxt_parser_checksum_ratification · Nature: ruling_request__no_execution · Date: 2026-05-18 · doc 4 of 5

decision_authority: GPT / User ONLY. Agent recommends; decides nothing silently.
dml: none ; source_seed: none ; parser_profile_registered: false ; dry_run: none
self_advance: PROHIBITED

1. Proposed parser / normalization profile

parser_profile_ref: "nuxt-incomex-portal-constitution-v1"
applies_to_source_family: internal_incomex_constitution
source_type: html / nuxt_ssr  (server: nginx/1.29.5 ; x-powered-by: Nuxt ; cache-control: no-cache)
extraction_rule:
  outer: first <article> (≡ <main>) on route /knowledge/dev/laws/constitution
  authoritative_span: H1 "HIẾN PHÁP KIẾN TRÚC HỆ THỐNG INCOMEX — v4.6.3 BAN HÀNH"
    .. end of CHANGELOG ; EXCLUDE trailing "Back to Knowledge Hub …" backlink
excluded_selectors_rules:
  - <head> <script> <style>
  - window.__NUXT__ , <script type="application/json" id="__NUXT_DATA__"> hydration JSON
  - top breadcrumb (Knowledge / Phát triển / Laws / …)
  - trailing "Back to Knowledge Hub  knowledge/dev/laws/constitution.md"
  - portal header/footer/nav/aside shell, asset/build-hash URLs, renderer-injected clock
normalization_steps: N1..N9 (doc 3 §3) — UTF-8 / isolate-span / detag+unescape /
  NFC+stripBOM / CRLF->LF / collapse-hspace / trim-lines / collapse-vspace /
  preserve diacritics + status markers codepoint-exact (doc 3 §4)
checksum_algorithm: sha256(UTF-8 of normalized authoritative span) -> content_checksum
  ; sha256(raw bytes) -> raw_checksum (provenance only)
failure_conditions: FAIL_NO_SPAN | FAIL_MARKER_LOSS | FAIL_HTTP | FAIL_NONDETERMINISM
  -> all fail-closed BLOCKED (doc 3 §6) ; DRIFT -> new version + review (not failure)
operator_error_messages:
  BLOCKED_NONDETERMINISTIC: "cannot pin Hiến pháp version deterministically — parser/checksum profile not ratified. No cut performed."
  FAIL_DRIFT: "Hiến pháp content changed since registered version v<old>; new version proposed, cut withheld pending review."
  FAIL_NO_SPAN: "Hiến pháp authoritative content span not found at source — no cut, escalate."
evidence_of_soundness (doc 2): under candidate span, normalized sha256
  f9d22d0571fa296cbc8e308c46acde93804ffcfb4a19a2e7f55dabd8657d1689 was identical
  across 3 same-session fetches while raw sha256 changed -> mechanism proven.

2. How to store / reference the profile later

problem: LIVE WS-Q5 schema has NO parser_profile table and NO parser_profile_ref column
  on source_document_registry / source_document_version_registry (MISMATCH-5, confirmed).
options:
  PP-1a (recommended, low-friction): record parser_profile_ref +
    normalize_profile string inside source_document_version_registry.provenance jsonb
    (forensic + reproducibility metadata; identity stays content_checksum). No schema change.
  PP-1b: author a separate parser_profile_registry table first (schema change ->
    its own design/dry-run/command-review gate) before any source seed. Higher cost,
    cleaner long-term governance.
agent_recommendation: PP-1a now (provenance jsonb), PP-1b as a later optional hardening
  item — do NOT block B5/B6 on a new table; no schema change is authorized here anyway.

3. How this supports the future one-command workflow

"Cắt Hiến pháp" -> resolve source_document (ICX-CONST) -> controlled GET ->
  apply nuxt-incomex-portal-constitution-v1 -> content_checksum ->
  compare to registered version:
    == : proceed gated enacted_only cut -> concise PASS report
    !=  : new version row + review (FAIL_DRIFT) -> concise BLOCKED report
  raw_checksum logged to provenance (audit), never compared for drift
=> deterministic, exception-only, no human checksum guesswork (doc 1 G1–G5).

4. B6 status recommendation

B6_Nuxt_parser_checksum_determinism: PARTIAL  (was BLOCKED)
why_not_BLOCKED_anymore:
  - determinism mechanism empirically PROVEN: normalized content checksum stable
    across 3 re-renders despite raw volatility (doc 2 §5)
  - authoritative span identified; full parser_profile + failure model specified
  - status markers preserved codepoint-exact under normalization (grounded)
why_not_CLOSED_yet:
  - stability shown only over ~20s same-session window; not across days / Nuxt
    deploy / version bump (no source-side raw/export endpoint to anchor against)
  - exact authoritative span (breadcrumb/backlink exclusion + SSR-vs-hydration
    completeness) is a PROPOSAL needing GPT/User ratification (OD-SR2)
  - PP-1a vs PP-1b storage decision open

5. Ruling request to GPT / User

REQUESTED_RULINGS:
  R-OD-SR2: ratify authoritative-span = SSR <article> H1 .. CHANGELOG, excluding
    breadcrumb + "Back to Knowledge Hub" backlink + Nuxt chrome/hydration (doc 3 §1–§2). Y/N.
  R-CL1: confirm CHANGELOG is INCLUDED in content identity (recommended INCLUDE; it is
    the document's own change ledger). Y / exclude.
  R-PP1: choose profile storage — PP-1a provenance-jsonb (recommended) or PP-1b new
    parser_profile_registry table first.
  R-B6: choose ONE —
    A. B6 CLOSED: profile/checksum stable enough; return to source_document seed authoring
       (fill NO-DML-DRAFT placeholders under the ratified profile; still gated separately).
    B. B6 PARTIAL (Agent recommendation): ratify OD-SR2/CL1/PP1 now AND require ONE more
       cross-interval evidence run (e.g. re-fetch hours/days later, or after next deploy)
       confirming the same normalized content_checksum, THEN B6 CLOSED -> return to seed.
    C. B6 BLOCKED: require a source-side stable export / raw / canonical content API
       before any checksum is trusted.
agent_recommendation: R-B6 = Option B (PARTIAL). Mechanism is proven; the only gap is
  cross-time confirmation + span ratification — both cheap, neither requires faking a
  checksum. Option A is defensible if GPT accepts same-session x3 stability as sufficient;
  Option C is unnecessary (no source change required — normalization already absorbs Nuxt noise).
none_self_resolved: all rulings are FLAGGED requests; Agent took no decision.

6. Impact on source_document seed (B5)

on_R-B6 = A or B:
  - the NO-DML-DRAFT version-row placeholders (content_checksum, document_version_id,
    retrieval_timestamp, raw_checksum) become mechanically fillable from ONE controlled
    GET under the ratified profile -> source_document + source_document_version seed
    becomes command-review-ready (still atomic, still separately gated, enacted_only,
    Điều 44 deferred — unchanged by this phase)
on_R-B6 = C:
  - B5 remains blocked pending a source-side stable endpoint
no source seed is authorized by this document under any option.

7. Statement

  • Parser profile nuxt-incomex-portal-constitution-v1 proposed with extraction/exclusion/normalization/checksum/failure/operator-message fully specified; grounded soundness evidence cited. Clear B6 recommendation: PARTIAL, recommend Option B (QG8).
  • Nothing executed; no source seed authorized (QG7). doc 4 of 5; STOP after package → route GPT/User. Self-advance PROHIBITED.

Companion: parser-operational-framing, source-grounding-and-repeatability, authoritative-extraction-and-normalization-design, ratification-report.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.5-constitution-nuxt-parser-checksum-ratification/dot-iu-cutter-v0.5-constitution-nuxt-parser-profile-and-ruling-request-2026-05-18.md