08 — Pin / Ghim Policy (NEW registry_pin, PG-backed, governed, propose-only)
title: 08 — Pin / Ghim Policy date: 2026-05-31
08 — Pin / Ghim Policy
Each list/layer supports pinned (ghim) rows so humans/AI can monitor key rows quickly. Pins must be PG-backed, governed, scoped, counted/auditable — never frontend local-only.
Reuse search result (verified live)
Searched public for %pin%/%favorit%/%watch% and KB for pin/favorite/watchlist/monitoring artifacts. No pin/favorite/watchlist table exists → REGISTRY_MISSING. Closest live concepts are issue monitoring (system_issues) and the audit queue (entity_audit_queue, PIV-018) — neither is a user/role pin. → Pin/ghim is genuinely NEW.
Proposed minimal registry (PROPOSE-ONLY — GATED_BY_APPROVAL; do NOT implement)
registry_pin:
| column | type | note |
|---|---|---|
id |
int PK | |
object_ref |
text | pinned object (entity_code / pivot filter-path / substrate key) |
object_kind |
text | species/composition kind so the pin survives drill-layer changes |
surface_ref |
text | which surface/list/layer (e.g. registries-pivot:PIV-007) |
pinned_by |
text | actor (user/agent id) |
scope |
text | global | user | role | team |
scope_ref |
text | role/team id when scope ≠ global/user |
reason |
text | monitoring rationale |
priority |
int | display/triage order |
created_at |
timestamptz | |
active |
bool | soft state (soft-retire, never hard delete — Đ0 Atom) |
Governance (must hold before implementation)
- Birth (Đ0-G/Đ2): created via the birth path → ID + birth record like every entity; counted by PIV-32x registry_pin (PIVOT_MISSING until born).
- Registered (Đ2/Đ23): added to
meta_catalogso it is itself visible, monitored, subject to the orphan/phantom invariant. A pin table not registered would itself be an orphan. - Governed (Đ37): owner = a governance Mother / monitoring sub-registry (likely GOV-COUNCIL); scope changes auditable; soft-retire only.
- Auditable (Đ45): every pin/unpin is an event (
event_outboxpin.created/pin.removed), not silent UI state. - Pivot-countable (Đ26):
pinned_countper surface is a pivot dimension, shown on the reflection screen.
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.
No-hardcode tests
- T-PIN-1:
pin_statederives from a PGregistry_pinquery; anylocalStorage/in-memory pin array inweb/⇒hardcode_violation. - T-PIN-2:
registry_pinappears inmeta_catalogand has a pivot (else orphan by Đ23/Đ26).
Verdict
NEW, propose-only. Minimal, governed, scoped, born+registered+counted. Not implemented — design contract only, pending approval (Đ32-class additive change).