KB-4D51

dot-iu-cutter v0.2 — P0-5 decision_backlog_sweep_log Design (2026-05-16)

6 min read Revision 1
dot-iu-cutterdieu44v0.2p0-5-remainderdecision-backlog-sweep-logdesignno-ddl

dot-iu-cutter v0.2 — P0-5 decision_backlog_sweep_log Design

document_path: knowledge/dev/laws/dieu44-trien-khai/v0.2-design/dot-iu-cutter-v0.2-p0-5-decision-backlog-sweep-log-design-2026-05-16.md
revision: r1
date: 2026-05-16
author: Agent (Claude Code CLI, Opus 4.7 1M)
verifier: GPT (PENDING)
phase: v0.2 — P0-5-remainder decision_backlog_sweep_log DESIGN (LOGICAL ONLY; no DDL)
master: dot-iu-cutter-v0.2-p0-6-p0-5-remainder-batch-design-master-2026-05-16.md
v0.1_predecessor: migration-design/dot-iu-cutter-v0.1-p0-5-decision-backlog-entry-migration-design-2026-05-15.md §4.4
mutation_performed: false
ddl_written: false

§1 — Purpose

decision_backlog_sweep_log is the sweep audit trail (G-2 §5.7) for the anti-forgetting cadence: each backlog sweep (scheduled / governance-review / health-report / self-review / ad-hoc) writes one row recording what it evaluated, how many entries it re-surfaced/escalated, and when/where the KB mirror was regenerated. It is a standalone log — no entity FK.

§2 — Source Design References

  • v0.1 P0-5 migration design §4.4 (fields baseline) — schema-placement OPEN item now resolved to cutter_governance (batch master §6).
  • D5 §4.4 (sweep cadence), §4.8 (markdown mirror); G-2 closure §5.1/§5.2/§5.7.

§3 — Logical Object / Table Intent

primary_table: cutter_governance.decision_backlog_sweep_log
becomes: cutter_governance table #12 (post-create, gated; design only now)
target_schema: cutter_governance   # resolved (batch master §6)
target_layer: Lớp KHO (sweep audit; co-located with the registry family)
authority_pattern: PG = SSOT; KB mirror only

§4 — Proposed Fields (conceptual — NO DDL)

Field Type-class Nullable Notes
sweep_id uuid NO per-sweep identifier
swept_at timestamptz NO sweep start time
swept_by text actor NO Registry Custodian (or deputy)
trigger_kind enum-ref NO scheduled / governance_review / health_report / self_review / ad_hoc
entries_evaluated_count integer NO entries evaluated this sweep
entries_re_surfaced_count integer NO past-due entries re-surfaced
escalations_routed_count integer NO entries routed for escalation this sweep
mirror_regenerated_at timestamptz YES when KB markdown mirror was regenerated
mirror_path text (soft) YES path to mirror artifact (soft text; NOT an entity FK)
findings JSONB (intent) YES sweep-level structured findings; app-layer shape

§5 — Field Ownership / Vocabulary Dependency

Field Owner v0.2 note
trigger_kind enum cutter-local DBS-1 — per G-2 §5.2 triggers; Đ24 confirm path
findings JSONB cutter-local intent app-layer only in v0.2

§6 — Lifecycle

Append-only audit. One row per sweep; rows are never updated/deleted. Sweep cadence (G-2 §5.1): default every 7 calendar days; additionally on Đ37 governance review, D3 Segmentation Health Report, D4 Cutter Self-Review; ad-hoc on user/council request. Mirror-drift is observable via mirror_regenerated_at vs sweep time.

§7 — Relationship to Live v0.1 / Phase α / P0-2 Objects

v0.1 decision_backlog_entry: counts/metrics ABOUT it, but NO FK (sweep log is standalone)
v0.1 decision_backlog_history / dependency (this batch): logically read by a sweep,
  but NO FK declared (decoupled audit; counts are denormalized integers)
Phase α / P0-2 / public.* : NONE
mirror_path: soft text only — points at a KB artifact path, NOT a DB row → no FK
no_existing_live_table_modified: TRUE

§8 — FK Policy (this table)

in_schema_FK: NONE
soft_uuid: NONE (no entity reference at all; mirror_path is plain soft text)
no_cross_schema_FK: TRUE
rationale: a sweep is a point-in-time audit fact with denormalized counters; binding it
  with FKs to the entries it counted would couple the audit to entry lifecycle and
  complicate retention. Standalone log = cleanest audit posture (G-2 §5.7).

§9 — Empty-at-Create & Rollback Posture

empty_at_create: TRUE — 0 rows; first row written by the first real sweep (P1/operational)
rollback: DROP TABLE decision_backlog_sweep_log (empty) → schema to pre-state
data_loss_on_rollback: NONE at create-time

§10 — Đ32 Risk Class (estimate)

STANDARD (estimate). Additive empty standalone log; no FK; no live-table touch; append-only; no data mutation. Lowest-risk table of the batch. Full surface: File 6.

§11 — Open Decisions (registration only; Agent does NOT self-close)

  • DBS-1 trigger_kind enum ownership: cutter-local v0.2 (lean) vs Đ24. Owner Đ24 + GPT.
  • BATCH-1 enum implementation strategy (shared). Owner Đ24 + GPT.

All block DDL freeze; NONE block this design review.

§12 — Dependencies

upstream (SATISFIED — LIVE): decision_backlog_entry (v0.1 LIVE) — no FK, counts only
downstream: KB mirror regenerator (P1) reads sweep log; G-2 report generation
no_new_parent_table_required: TRUE
mirror_generator_implementation: FUTURE/P1 — NOT required at table-create time

§13 — Explicit Confirmation

no_ddl_written: true
no_sql_written: true
no_create_or_alter_table: true
no_column_or_index_or_constraint_ddl: true
no_trigger_or_function_or_rls_policy: true
no_migration_executed: true
no_pg_mutation: true
no_data_writes: true
no_backfill: true
no_existing_file_or_table_modified: true
open_decision_self_closed: false
output_form: logical_design_only

End of P0-5 decision_backlog_sweep_log design.

Back to Knowledge Hub knowledge/dev/laws/dieu44-trien-khai/v0.2-design/dot-iu-cutter-v0.2-p0-5-decision-backlog-sweep-log-design-2026-05-16.md