dot-iu-cutter v0.5 WS-3 Sample Chain — collection_structure
dot-iu-cutter v0.5 — WS-3 Sample Chain: "cấu trúc collection" (collection_structure)
Date: 2026-05-18 Phase: v0.5 WS-3 — logical proof companion (sample chain) Nature: design_only — logical placeholder chain. No production data, no schema, no code, no mutation.
QG6 — placeholder declaration. Every
canonical_address,entity_ref,iu_id,span_id,report path,git path,PG schema nameandDirectus collection namein this file is a LOGICAL SAMPLE PLACEHOLDER invented to exercise the WS-1/WS-2 contracts. None of it is extracted from, or asserted to match, real production IU rows, real Directus collections, or the real internal Architecture Constitution. Placeholders are written in the documented canonical scheme so the shape is faithful; the content is illustrative.
QG7 — plain terms. A "chain" here is just: the same subject ("how a collection is structured") seen through seven different kinds of source, lined up in order, each tagged with what role it plays and how it connects to its neighbour. Three roles only: normative (a rule that has authority to require something), evidence (something that proves a thing was/wasn't done), implementation (the thing actually running). QG3 requires these three be visibly distinct — they are colour-coded in the
authority_semanticsfield of every node below.
1. Canonical address scheme used (WS-2 D6 / OD-A1, verbatim)
canonical_address_scheme: "<DOCPREFIX>/<L1>-<L2>-...-<Lk>"
docprefix_separator: "/" # document identity vs path-inside-document
hierarchy_level_separator: "-" # between hierarchy levels
docprefix_source: source_document registry (derived from source_document_ref; NOT hardcoded)
status_markers: never encoded into canonical_address (metadata/status policy only)
legacy_addresses: kept unchanged (e.g. D38-DIEU28-S3-P1)
Sample docprefixes (logical placeholders, scheme-faithful):
| source_family | source_document_ref (placeholder) | docprefix (placeholder) |
|---|---|---|
| internal_incomex_constitution | incomex-constitution | ICX-CONST |
| internal_incomex_law | incomex-law | ICX-LAW |
| internal_process | incomex-process | ICX-PROC |
| report | report-collstruct-2026 | RPT-COLLSTRUCT-2026 |
| lesson | lesson-collstruct-2026 | LSN-COLLSTRUCT-2026 |
sql_entity and code_artifact nodes are raw_entity → addressed by entity_ref placeholder via entity_reference_registry, not by canonical_address (they are not IUs).
2. The chain (overview)
N1 internal_incomex_constitution [normative_authority]
│ N2 --governed_by--> N1 (universal_edges; 'constrains' reused as governed_by; CANDIDATE)
▼
N2 internal_incomex_law [normative_authority] + SPAN OVERRIDE → evidence_authority (QG8)
│ N3 --implements--> N2 (universal_edges; core edge)
▼
N3 internal_process [normative_authority]
│ N3 --binding implements--> N4 (iu_entity_binding; raw side)
│ N3 --binding implements--> N5 (iu_entity_binding; raw side)
▼
N4 sql_entity / Directus / PG [implementation_authority] (raw_entity)
│ N4 <-> N5 thread adjacency (assembly-local; output-only; raw<->raw not persisted)
▼
N5 code_artifact [implementation_authority] (raw_entity)
│ N6 --evidence-of--> {N2,N3} (APR-gated evidenced_by → alternative B assembly-local; NOT approved)
▼
N6 report [evidence_authority]
│ N7 --derived_from--> N6 (universal_edges; 'lesson_from' reused as derived_from; CANDIDATE)
▼
N7 lesson [evidence_authority]
QG3 check: roles are distinct and not flattened — 3 normative (N1,N2,N3) → 2 implementation (N4,N5) → 2 evidence (N6,N7); plus one node (N2) deliberately mixed via override.
3. Node detail
N1 — internal_incomex_constitution · normative_authority
node_id: N1
source_family: internal_incomex_constitution
authority_semantics: normative_authority # default from WS-2 D2 source_family seed
authority_class_ref: source_authority_class=authoritative # ingestion axis (unchanged, reference only)
canonical_address: "ICX-CONST/NT-7-COLLECTION-ARCH" # LOGICAL PLACEHOLDER
# interpretation: docprefix ICX-CONST ; path = Nguyên tắc 7 → Kiến trúc collection
# grammar_profile_ref: incomex-architecture-constitution-v4 (WS-2 D3 Profile A)
# status_marker: "✅" => enacted (WS-2 D3 status_marker_rules) — marker NOT in address
iu_id: "iu.LOGICAL.N1" # placeholder; real = sha(document_version_id, canonical_address)
relation_to_next: "N2 --governed_by--> N1" # N2 is governed by this constitution unit
mechanism: universal_edges # IU<->IU, both OQC>=3/4
edge_status: governed_by is P44-4A §3.2 CANDIDATE (pending v1.0) — dependency-gated, NOT self-activated
provenance_note: >
creator=constitution maintainer; method=manual; source_context=internal Architecture
Constitution v4 (OD-G1: source is INTERNAL architecture constitution, NOT national HP 2013).
Placeholder content — not the real constitution text.
N2 — internal_incomex_law · normative_authority + MIXED-AUTHORITY OVERRIDE (QG8)
node_id: N2
source_family: internal_incomex_law
authority_semantics_default: normative_authority # from WS-2 D2 seed (law body)
canonical_address: "ICX-LAW/DIEU-12-COLLECTION-STRUCTURE" # LOGICAL PLACEHOLDER
# docprefix ICX-LAW ; path = Điều 12 → Collection structure
iu_id: "iu.LOGICAL.N2"
mixed_authority: true
authority_override: # WS-2 D4 — LOGICAL ONLY, no IU core field added
override_id: "ovr.LOGICAL.N2.appendix" # placeholder
scope: span # span-level (WS-2 D4: scope = unit | span)
iu_id: "iu.LOGICAL.N2"
span_ref: "src.span.LOGICAL.N2.appendix-A" # → source_span.span_id (ingestion §2) — placeholder
authority_role: evidence_authority # the appendix span plays an EVIDENCE role
reason: >
Điều 12 has a normative body (the rule that requires a collection-structure
contract) AND an attached explanatory appendix / ghi chú giải thích that does
NOT itself have power to require anything — it explains and illustrates. The
body must stay normative_authority; the appendix span must be re-labelled
evidence_authority for THIS assembly context.
set_by: "WS-3 logical proof (design-only)"
set_at: "2026-05-18 (logical)"
provenance:
who: "WS-3 logical proof author"
when: "2026-05-18 (logical)"
why: "single source carries MIXED authority roles (law body vs explanatory appendix)"
source: "WS-2 D4 authority_override contract; WS-1 §4 binding rule"
assembly_output_effect: # what the rendered thread MUST show (WS-1 §4 binding)
- unit "ICX-LAW/DIEU-12-COLLECTION-STRUCTURE" (body) -> normative_authority (default kept)
- span "src.span.LOGICAL.N2.appendix-A" (explanatory appendix) -> evidence_authority (override applied)
- override reason + provenance carried into PROVENANCE stage (P11D Q-T5)
deferral_note: >
This is a LOGICAL example of span-level override. WS-2 D4 explicitly DEFERS the
detailed span-level mechanism to a real mixed-authority pilot ("cơ chế chi tiết
defer sang khi có pilot mixed-authority thật"). WS-3 only proves the override
CONCEPT is expressible and that the assembly output can carry two different
roles for two parts of one source — it does NOT build span machinery.
relation_to_prev: "N2 --governed_by--> N1" mechanism: universal_edges (CANDIDATE edge)
relation_to_next: "N3 --implements--> N2" mechanism: universal_edges (core edge)
provenance_note: "creator=law maintainer; method=manual; source_context=internal law corpus (placeholder)"
Plain terms (QG7): a single internal law can be part rule, part explanation. You cannot give the whole document one role. The override says "treat the rule paragraph as normative, but treat the explanatory appendix as evidence". This is exactly the case WS-2 D4 was created for, and proving it here stops the system from wrongly stacking laws, appendices, reports and code as if they were all equal.
N3 — internal_process · normative_authority
node_id: N3
source_family: internal_process
authority_semantics: normative_authority # WS-2 D2 seed (process is prescriptive)
canonical_address: "ICX-PROC/QT-COLLECTION-PROVISION-S3" # LOGICAL PLACEHOLDER
# docprefix ICX-PROC ; path = Quy trình "collection provision" → Step 3
iu_id: "iu.LOGICAL.N3"
relation_to_prev: "N3 --implements--> N2" mechanism: universal_edges (core edge, IU<->IU)
relation_to_next:
- "N3 --binding(implements)--> N4 (sql_entity raw_entity)" mechanism: iu_entity_binding
- "N3 --binding(implements)--> N5 (code_artifact raw_entity)" mechanism: iu_entity_binding
provenance_note: "creator=process owner; method=manual; source_context=internal process registry (placeholder)"
N4 — sql_entity / Directus collection / PG schema · implementation_authority · raw_entity
node_id: N4
source_family: sql_entity
authority_semantics: implementation_authority # WS-2 D2 seed ("đang chạy thật")
is_iu: false # raw_entity — NOT an IU, NOT in relation graph
addressing: entity_ref (NOT canonical_address — N4 is not an IU)
entity_ref (entity_reference_registry — WS-2 D5, LOGICAL PLACEHOLDER):
entity_ref_id: "eref.LOGICAL.N4"
entity_kind: sql_entity # entity_kind_registry seed value
source_system: "PG schema (placeholder)" # e.g. logical 'public' schema / Directus instance
natural_key: "directus_collection://knowledge_documents (PLACEHOLDER)"
authority_note: "the live collection definition is the running reality for collection structure"
bound_via:
binding_id: "bind.LOGICAL.N3.N4"
iu_id: "iu.LOGICAL.N3" # bound to N3 (the process IU)
binding_kind: implements # registry value: describes|governs|implements|evidences|references_entity
provenance: { who: "WS-3 logical proof", when: "2026-05-18 (logical)", why: "process realised by live schema", source: "WS-1 G2 iu_entity_binding" }
retracted_at: null # append-only
mechanism: iu_entity_binding
rule_respected: "no SQL/business data copied into IU text; read live from SSOT at assembly time (Option D hybrid, OD-FA2)"
relation_to_next: "N4 <-> N5 thread adjacency" mechanism: assembly-local (raw<->raw NOT persisted; output-only)
provenance_note: "binding provenance + entity_reference_registry.authority_note carried into PROVENANCE stage"
N5 — code_artifact · implementation_authority · raw_entity
node_id: N5
source_family: code_artifact
authority_semantics: implementation_authority # WS-2 D2 seed
is_iu: false # raw_entity
addressing: entity_ref (NOT canonical_address)
entity_ref (entity_reference_registry — LOGICAL PLACEHOLDER):
entity_ref_id: "eref.LOGICAL.N5"
entity_kind: code_module # entity_kind_registry seed (code_module / git_file)
source_system: "git repo (placeholder)"
natural_key: "iu-cutter/path/to/collection_structure_handler.py (PLACEHOLDER — not asserted to exist)"
authority_note: "the running code is the implementation reality for the structure handler"
bound_via:
binding_id: "bind.LOGICAL.N3.N5"
iu_id: "iu.LOGICAL.N3"
binding_kind: implements
provenance: { who: "WS-3 logical proof", when: "2026-05-18 (logical)", why: "process realised by code", source: "WS-1 G2" }
retracted_at: null
mechanism: iu_entity_binding
relation_to_prev: "N4 <-> N5 thread adjacency" mechanism: assembly-local (output-only, no APR)
relation_to_next: "N6 --evidence-of--> {N2 requirement, N3 process}" mechanism: see N6 (APR-gated / alternative)
provenance_note: "binding provenance carried; raw code NOT ingested as IU"
N6 — report · evidence_authority
node_id: N6
source_family: report
authority_semantics: evidence_authority # WS-2 D2 seed ("chứng minh đã làm")
canonical_address: "RPT-COLLSTRUCT-2026/SEC-FINDINGS" # LOGICAL PLACEHOLDER
# docprefix RPT-COLLSTRUCT-2026 ; path = Section "Findings"
iu_id: "iu.LOGICAL.N6"
evidentiary_relation:
intended_meaning: "this report attests the collection_structure requirement (N2/N3) was satisfied"
natural_edge: evidenced_by
status: APR-GATED — NOT approved, NOT created (QG5/QG10)
classification: P44-4A §3.3 extension; OD-FA4 minimized set = { evidenced_by } (exactly 1)
governance_before_use: APR cấp medium (Đ32) + amend edge_type vocab framework (NT4) — reserved for GPT/User
alternative_used_here: "B — assembly-local relation (output-only 'evidenced-by' annotation, NOT persisted)"
alternatives_available:
A: iu_entity_binding binding_kind=evidences (if target is a raw evidence entity) — no APR
B: assembly-local relation in cross_source_topic_thread output — no APR [CHOSEN]
C: reuse core edge `references` (weakest; loses 'proves performed' semantics) — no APR
mechanism: assembly-local (chosen alternative B) — NOT universal_edges, NOT a new edge
relation_to_next: "N7 --derived_from--> N6" mechanism: universal_edges (CANDIDATE edge)
provenance_note: "creator=report author; method=manual; source_context=report corpus (placeholder); evidenced_by gating note attached in PROVENANCE stage"
N7 — lesson · evidence_authority
node_id: N7
source_family: lesson
authority_semantics: evidence_authority # WS-2 D2 seed ("bài học rút ra")
canonical_address: "LSN-COLLSTRUCT-2026/L-1" # LOGICAL PLACEHOLDER
iu_id: "iu.LOGICAL.N7"
relation_to_prev:
relation_kind: derived_from # 'lesson_from' resolved to reuse derived_from + source_family=lesson
mechanism: universal_edges # IU<->IU
edge_status: derived_from is P44-4A §3.2 CANDIDATE (pending v1.0) — dependency-gated, NOT self-activated
provenance_note: "creator=lesson author; method=manual; source_context=lesson corpus (placeholder)"
4. Per-relation mechanism table (QG4 — every relation states its mechanism)
| # | Relation | From → To | relation_kind | Mechanism | Edge/gating status |
|---|---|---|---|---|---|
| R1 | N2 → N1 | law → constitution | governed_by (from constrains) |
universal_edges | P44-4A §3.2 CANDIDATE — dependency-gated |
| R2 | N3 → N2 | process → law | implements | universal_edges | core edge (active) |
| R3 | N3 → N4 | process → sql_entity | binding_kind=implements | iu_entity_binding | active (raw side) |
| R4 | N3 → N5 | process → code_artifact | binding_kind=implements | iu_entity_binding | active (raw side) |
| R5 | N4 ↔ N5 | sql_entity ↔ code_artifact | thread adjacency | assembly-local | output-only, not persisted, no APR |
| R6 | N6 → {N2,N3} | report → requirement | evidence-of | assembly-local (alt B for evidenced_by) |
evidenced_by APR-gated, NOT approved |
| R7 | N7 → N6 | lesson → report | derived_from (from lesson_from) |
universal_edges | P44-4A §3.2 CANDIDATE — dependency-gated |
Mechanism coverage: universal_edges ×3 (R1,R2,R7) · iu_entity_binding ×2 (R3,R4) · assembly-local ×2 (R5,R6). Every relation has a mechanism (QG4 satisfied).
5. Mixed-authority override summary (QG8 — satisfied)
mixed_authority_node: N2 (internal_incomex_law)
override_mechanism: WS-2 D4 authority_override, scope=span (logical-only)
default_authority_semantics: normative_authority (from source_family registry, WS-2 D2)
override_effect:
- law body span -> normative_authority (default retained)
- explanatory appendix span -> evidence_authority (override applied)
override_reason: "single source carries mixed roles: a rule that requires + an appendix that only explains"
override_provenance: { who, when, why, source } recorded; carried into P11D PROVENANCE stage
span_mechanism_detail: DEFERRED to real mixed-authority pilot (WS-2 D4) — logical example only
qg8_status: PASS — sample chain contains ≥1 mixed-authority node using logical authority_override
This demonstrates WS-2 D4 is not theoretical, and proves the negative case the user flagged: a source that cannot be given a single authority role does not break the assembly — it is handled by override, preventing law/appendix/report/code from being stacked as equals.
6. Forbidden respected
production_data_used: false # all addresses/refs are declared LOGICAL PLACEHOLDERS (QG6)
schema/table/view/code: none
edge_type_created: none
evidenced_by_approved: false
candidate_edge_activated: false
directus_mutation: none
dry_run: none
git_commit: none
self_advance: PROHIBITED