KB-6CC1
P9 Gate B Directus Collection Registration Log 2026-04-28 RUN2
5 min read Revision 1
dieu38p9gate-bdirectuscollectionsexecution-logpasss186
P9 Gate B Directus Collection Registration Log - 2026-04-28 RUN2
Scope: Gate B only - register 14
tac_*public tables as Directus collections, meta-only. Executor: Claude Code via SSHcontabo. Excluded: no DDL, no TAC data mutation, no seed, no roles/policies/permissions/tokens, no trigger guard changes, no Gate C/G8B/G11.
Verdict
PASS.
14 target tac_* Directus collections are registered meta-only, API-readable, and fields are introspectable. All backing public.tac_* tables remain at 0 rows. Gate A object counts remain unchanged: tables=14, functions=7, triggers=6.
3 cau Tuyen ngon
- Vinh vien: PG remains SSOT; Directus registration is metadata-only over existing public tables.
- Nham duoc khong: exact target-set validation rejects unknown
tac_*; every collection was verified by GET + fields + PG row count. - 100% tu dong: prechecks, pilot/registration, post-checks, and secret scan ran on VPS with captured output.
Secret Hygiene
SECRET_SCAN_CLEAN
Raw Evidence
# Gate B run2 precheck 2026-04-28T16:16:43+02:00
host=vmi3080463
## Gate A counts
tables | functions | triggers
--------+-----------+----------
14 | 7 | 6
(1 row)
## Health token
HEALTH={"status":"ok"}
TOKEN=****d495
## Existing Directus tac collections
Existing API-visible tac_* collections before metadata PATCH: 14, exact target set, no unknown tac_*.
Initial directus_collections metadata rows: 0
Initial directus_fields rows for tac_*: 0
## Register/PATCH 14 collections meta-only
PATCH tac_lu_lifecycle_vocab HTTP=200
VERIFY tac_lu_lifecycle_vocab GET=200 DATA=tac_lu_lifecycle_vocab FIELDS=6
PATCH tac_uv_lifecycle_vocab HTTP=200
VERIFY tac_uv_lifecycle_vocab GET=200 DATA=tac_uv_lifecycle_vocab FIELDS=6
PATCH tac_review_state_vocab HTTP=200
VERIFY tac_review_state_vocab GET=200 DATA=tac_review_state_vocab FIELDS=6
PATCH tac_pub_lifecycle_vocab HTTP=200
VERIFY tac_pub_lifecycle_vocab GET=200 DATA=tac_pub_lifecycle_vocab FIELDS=6
PATCH tac_cs_lifecycle_vocab HTTP=200
VERIFY tac_cs_lifecycle_vocab GET=200 DATA=tac_cs_lifecycle_vocab FIELDS=6
PATCH tac_section_type_vocab HTTP=200
VERIFY tac_section_type_vocab GET=200 DATA=tac_section_type_vocab FIELDS=11
PATCH tac_publication_type_vocab HTTP=200
VERIFY tac_publication_type_vocab GET=200 DATA=tac_publication_type_vocab FIELDS=7
PATCH tac_birth_gate_config HTTP=200
VERIFY tac_birth_gate_config GET=200 DATA=tac_birth_gate_config FIELDS=6
PATCH tac_logical_unit HTTP=200
VERIFY tac_logical_unit GET=200 DATA=tac_logical_unit FIELDS=13
PATCH tac_unit_version HTTP=200
VERIFY tac_unit_version GET=200 DATA=tac_unit_version FIELDS=20
PATCH tac_publication HTTP=200
VERIFY tac_publication GET=200 DATA=tac_publication FIELDS=15
PATCH tac_change_set HTTP=200
VERIFY tac_change_set GET=200 DATA=tac_change_set FIELDS=10
PATCH tac_publication_member HTTP=200
VERIFY tac_publication_member GET=200 DATA=tac_publication_member FIELDS=6
PATCH tac_change_set_member HTTP=200
VERIFY tac_change_set_member GET=200 DATA=tac_change_set_member FIELDS=8
## Post exact target set
REGISTERED target set exactly 14:
- tac_birth_gate_config
- tac_change_set
- tac_change_set_member
- tac_cs_lifecycle_vocab
- tac_logical_unit
- tac_lu_lifecycle_vocab
- tac_pub_lifecycle_vocab
- tac_publication
- tac_publication_member
- tac_publication_type_vocab
- tac_review_state_vocab
- tac_section_type_vocab
- tac_unit_version
- tac_uv_lifecycle_vocab
TARGET_SET_OK
## Directus metadata after
14 directus_collections rows exist with expected icons/notes.
directus_fields_tac_count=0 (fields are introspected via API, not materialized rows)
## Spot fields
tac_logical_unit fields=13
tac_birth_gate_config fields=6
## Gate A counts post
tables=14 functions=7 triggers=6
## Zero rows post rerun
- tac_birth_gate_config: 0
- tac_change_set: 0
- tac_change_set_member: 0
- tac_cs_lifecycle_vocab: 0
- tac_logical_unit: 0
- tac_lu_lifecycle_vocab: 0
- tac_pub_lifecycle_vocab: 0
- tac_publication: 0
- tac_publication_member: 0
- tac_publication_type_vocab: 0
- tac_review_state_vocab: 0
- tac_section_type_vocab: 0
- tac_unit_version: 0
- tac_uv_lifecycle_vocab: 0
OVERALL_PASS
Per-Collection Status
All 14 collections PATCHed/registered via Directus API with meta only and verified by API GET + field introspection:
- tac_lu_lifecycle_vocab
- tac_uv_lifecycle_vocab
- tac_review_state_vocab
- tac_pub_lifecycle_vocab
- tac_cs_lifecycle_vocab
- tac_section_type_vocab
- tac_publication_type_vocab
- tac_birth_gate_config
- tac_logical_unit
- tac_unit_version
- tac_publication
- tac_change_set
- tac_publication_member
- tac_change_set_member
Stop Point
STOP after Gate B. No Gate C/G8B/G11 executed.