07 — Pin / Ghim Rehearsal (Branch G)
title: 07 — Pin / Ghim Rehearsal (Branch G) date: 2026-05-31 verdict: REGISTRY_MISSING confirmed (no pin artifact); registry_pin shape rehearsed valid in BEGIN..ROLLBACK; propose-only, NOT created
07 — Pin / Ghim Rehearsal (Branch G)
A. Reuse search (live) — confirmed ABSENT
information_schema.tables in public matching %pin% / %favorit% / %watch% / %bookmark% / %ghim% → 0 rows. Closest live concepts are issue monitoring (system_issues) and the audit queue (entity_audit_queue, PIV-018) — neither is a user/role/team pin. → Pin/ghim is genuinely NEW (REGISTRY_MISSING).
B. Rehearsed registry_pin (BEGIN..ROLLBACK, doc 04 #8) — shape VALID
CREATE TABLE registry_pin (
id serial PRIMARY KEY,
object_ref text NOT NULL, -- pinned object (entity_code / pivot filter-path / substrate key)
object_kind text, -- species/composition kind so a pin survives drill-layer changes
surface_ref text NOT NULL, -- e.g. 'registries-pivot:PIV-007'
pinned_by text NOT NULL, -- user/agent id
scope text NOT NULL DEFAULT 'user',
scope_ref text, -- role/team id when scope != global/user
reason text,
priority int DEFAULT 0,
created_at timestamptz DEFAULT now(),
active boolean DEFAULT true, -- soft-retire only (Đ0 Atom)
CONSTRAINT registry_pin_scope_ck CHECK (scope IN ('global','user','role','team'))
);
INSERT INTO registry_pin(object_ref,object_kind,surface_ref,pinned_by,scope,reason)
VALUES ('PIV-007','dot_tools','registries-pivot:PIV-007','agent:claude-rehearsal','global','rehearsal pin');
-- in-tx: 1 row, scope='global', CHECK enforced → ROLLBACK → post_tables leftover = 0
Result: CREATE TABLE + CHECK + sample INSERT all succeeded inside the transaction; after ROLLBACK the table does not exist (post_tables leftover=0), idle_tx=0. The shape compiles and the scope CHECK is valid.
C. Governance gates (must hold before any implementation — Đ0-G/Đ2/Đ23/Đ26/Đ37/Đ45)
- Birth: created via the birth path → ID +
birth_registryrecord like every entity. - Registered: added to
meta_catalog→ itself visible/monitored, subject to the orphan/phantom invariant (an unregistered pin table would itself be an orphan — T-SELF-1). - Counted: PIV-32x
registry_pinpivot (PIVOT_MISSINGuntil born);pinned_countper surface is a pivot dimension. - Auditable: every pin/unpin = an
event_outboxevent. ⚠event_type_registry(40) has nopin.created/pin.removed→ must be registered before first emit (Đ45 register-before-emit, doc 08). - Governed: owner = a governance Mother / monitoring sub-registry (likely GOV-COUNCIL, Đ37); scope changes auditable; soft-retire (
active=false) only.
D. Contract field
A node carries pin_state ∈ {pinned, unpinned, pinned-by-role, pinned-by-team}, resolved server-side from registry_pin filtered by the viewer's scope. Nuxt renders the flag; never stores pins locally (T-PIN-1: any localStorage/in-memory pin array ⇒ hardcode_violation).
E. Verdict
NEW, propose-only. Shape rehearsed and valid; not created (no COMMIT). Implementation gated behind RG5 + an Đ32 additive-change approval, with birth + registration + PIV-32x + pin.* event registration done together (macro M5, doc 11).