KB-7C11

08 — Pin / Ghim Policy (NEW registry_pin, PG-backed, governed, propose-only)

3 min read Revision 1
designregistries-pivotpinghimwatchlistregistry-missingnew-registrypropose-onlygoverned2026-05-31

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 existsREGISTRY_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_catalog so 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_outbox pin.created/pin.removed), not silent UI state.
  • Pivot-countable (Đ26): pinned_count per 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_state derives from a PG registry_pin query; any localStorage/in-memory pin array in web/hardcode_violation.
  • T-PIN-2: registry_pin appears in meta_catalog and 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).