KB-1EA3 rev 3

P3D — B3-F1a Soft Gate Rollback (rev3)

4 min read Revision 3
p3db3f1asoft-gaterollbackrev32026-05-13

P3D — B3-F1a Soft Gate Rollback (rev3)

Mode: COMPILE-ONLY. NOT executed. Rev: 3. Date: 2026-05-13.

Scope

Drops everything B3-F1b creates and nothing else. Specifically:

  • Drops trigger trg_collection_onboarding_soft_gate on public.collection_registry.
  • Drops function public.fn_collection_onboarding_soft_gate().
  • Drops helper public.fn_b3f1_log_collection_onboarding_gap(text, text, text, text).

Does NOT touch:

  • fn_birth_registry_auto, fn_birth_registry_auto_id, or any other birth-pipeline function.
  • Any other trigger on collection_registry.
  • dot_config['policy.birth_trigger.accepted_sibling_scope'].
  • system_issues rows (those are logged data, kept for audit).
  • B3-A artifacts.

Rollback names match the rev3 artifact set

object dropped here matches B3-F1b artifact?
trg_collection_onboarding_soft_gate yes (compiled-trigger.sql.md rev3)
fn_collection_onboarding_soft_gate() yes (compiled-function.sql.md rev3)
fn_b3f1_log_collection_onboarding_gap(text, text, text, text) yes (compiled-function.sql.md rev3, helper section)

No generic _log_onboarding_gap is dropped (it is not created by rev3). No COMMENT ON is dropped because rev3 does not install any.


Rollback DDL

-- 1. Drop trigger first (uses the function)
DROP TRIGGER IF EXISTS trg_collection_onboarding_soft_gate
  ON public.collection_registry;

-- 2. Drop the gate function
DROP FUNCTION IF EXISTS public.fn_collection_onboarding_soft_gate();

-- 3. Drop the task-specific helper (signature pinned)
DROP FUNCTION IF EXISTS public.fn_b3f1_log_collection_onboarding_gap(text, text, text, text);

Optional post-rollback verification (read-only)

SELECT
  (SELECT count(*) FROM pg_trigger t
     JOIN pg_class c ON c.oid = t.tgrelid
     JOIN pg_namespace n ON n.oid = c.relnamespace
     WHERE n.nspname='public' AND c.relname='collection_registry'
       AND t.tgname='trg_collection_onboarding_soft_gate'
       AND NOT t.tgisinternal) AS trigger_remaining,
  (SELECT count(*) FROM pg_proc p
     JOIN pg_namespace n ON n.oid = p.pronamespace
     WHERE n.nspname='public'
       AND p.proname IN ('fn_collection_onboarding_soft_gate',
                         'fn_b3f1_log_collection_onboarding_gap')
       AND p.pronargs IN (0, 4)) AS functions_remaining;
-- expected: 0, 0

Optional cleanup of logged issues (NOT part of rollback)

If reviewer decides to also clear gate-emitted issues (kept by default for audit):

-- READ-ONLY preview:
SELECT count(*) FROM public.system_issues
WHERE source = 'dot-soft-gate-collection-onboarding'
  AND issue_type = 'collection_onboarding_gap';

-- Archival (governed action; requires explicit approval):
-- UPDATE public.system_issues
--   SET status = 'archived', resolved_at = now(), resolved_by = 'b3f1a-rollback'
--   WHERE source = 'dot-soft-gate-collection-onboarding'
--     AND issue_type = 'collection_onboarding_gap'
--     AND status = 'open';

The archival statement is intentionally commented out — rollback does not mutate logged data without explicit approval.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/artifacts/p3d-birth-system-b3f1a-soft-gate-rollback.sql.md