KB-6708
S144 Phase 3A Report — Layer 5 Edges + DOT Lifecycle
3 min read Revision 1
reports144phase3alayer5universal-edgeslifecycle
S144: Phase 3A — Layer 5 Reads Edges + DOT Lifecycle
Date: 2026-03-19 Status: COMPLETE PR: #549 (merged)
Assembly Gate
| # | Answer |
|---|---|
| Q0 | PG: universal_edges (450 edges), fn_transition_lifecycle, 6 AFTER triggers — all exist |
| Q1 | Directus: universal_edges registered, 3 read permissions, public accessible |
| Q2 | Layer 5 was reading from entity_dependencies — now switched to universal_edges |
| Q3 | Existing: [id].vue + DiscoveryView.vue already had 6 headings structure |
| Q4 | Modified existing views + created shared composable |
| Q5 | Searched: PG tables, Directus API, Nuxt pages/components/composables |
Part A: Layer 5 reads from universal_edges
Changes
| File | Change |
|---|---|
web/composables/useUniversalEdges.ts |
NEW — shared composable, fetches outgoing+incoming edges from Directus API |
web/config/detail-sections.ts |
Added reverseCollectionMap, missing prefix mappings (CPI, TBL, TRG, CMT, ISS, TAX) |
web/pages/knowledge/registries/[entityType]/[id].vue |
Layer 5 now uses useUniversalEdges composable |
web/components/registries/DiscoveryView.vue |
Layer 5 now uses useUniversalEdges composable |
Data Flow
PG universal_edges (450 edges, auto-maintained by 6 AFTER triggers)
→ Directus API /items/universal_edges (public read)
→ useUniversalEdges composable (outgoing + incoming queries)
→ 6 headings: Thuộc ai, Chứa gì, Dùng ai, Ai dùng tôi, Cùng nhóm, Tương tự
6 Headings (always visible, fixed order)
| # | Heading | Edge Type | Current Data |
|---|---|---|---|
| 1 | Thuộc ai | BELONGS_TO (outgoing) | 222 edges |
| 2 | Chứa gì | CONTAINS (outgoing) | 201 edges |
| 3 | Dùng ai | USES (outgoing) | 27 edges |
| 4 | Ai dùng tôi | USES (incoming) | reverse of #3 |
| 5 | Cùng nhóm | GROUP_WITH + taxonomy scoring | 0 edges + taxonomy |
| 6 | Tương tự | SIMILAR_TO | 0 edges |
Part B: DOT Lifecycle Tools
Changes
| Tool | Version | Change |
|---|---|---|
| dot-entity-deprecate | 1.0 → 2.0 | Now calls fn_transition_lifecycle() instead of deprecate_entity() |
| dot-entity-retire | 1.0 → 2.0 | Now calls fn_transition_lifecycle() instead of retire_entity() |
Both tools:
- Resolve entity code to collection + id via multi-table UNION query
- Call fn_transition_lifecycle(collection, id, new_status, reason, performed_by)
- Log to lifecycle_log automatically
- Retire checks fn_retire_gate_check for active dependents
Verification
| # | Condition | Result |
|---|---|---|
| 1 | Layer 5 shows 6 headings | PASS — all 6 visible in SSR |
| 2 | Data from universal_edges | PASS — API /items/universal_edges accessible |
| 3 | Empty headings display | PASS — headings always render |
| 4 | verify_counts 0 MISMATCH | PASS — 19/19 OK |
| 5 | CI GREEN | PASS — all checks passed |
| 6 | Health check | 3/4 PASS (auth FAIL pre-existing) |
| 7 | Production deployed | PASS — site HTTP 200 |