dot-iu-cutter v0.2 — P0-5 decision_backlog_sweep_log Design (2026-05-16)
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_kindenum 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.