Contents
See also: ROADMAP.md
v1.6.0 — TUI Self-Monitoring Integration
Status: Planned. See plans/ui/PLAN_TUI_PART_3.md for the full design.
Release Theme This release wires the v0.20.0 self-monitoring stream tables (
df_*) into the TUI, giving operators live visibility into anomaly signals, CDC buffer trends, scheduling interference, and efficiency metrics — all driven by the same incremental refresh engine. Alongside the new views, the TUI architecture is refactored:AppStateis split into 8 domain-scoped sub-structs, polling becomes subscription-based (only active-view data is fetched), and CLI/TUI command logic is unified into a shared domain layer. Four backend enhancements (DF-21–DF-24) and two new CLI subcommands complete the milestone.See plans/ui/PLAN_TUI_PART_3.md for the full architecture, feature specifications, and phased implementation plan.
Phase 1 — Architecture Foundation (T15–T16)
| Item | Description | Effort | Ref |
|---|---|---|---|
| T15 | AppState domain decomposition. Split AppState into 8 domain structs: StreamTableDomain, CdcDomain, DiagnosticsDomain, MonitoringDomain, SchedulingDomain, WatermarkDomain, ConfigDomain, DogFeedingDomain. |
1d | PLAN_TUI_PART_3.md §T15 |
| T15 | Selective polling. DataSubscriptions::for_view() gates Phase 2 queries behind the active view; reduces wasted queries on average. |
0.5d | PLAN_TUI_PART_3.md §T15 |
| T15 | Poller logic extraction. Extract poller/fetchers.rs (21 fetch_*() functions) and poller/updaters.rs (21 apply_*() functions) for testability. |
1d | PLAN_TUI_PART_3.md §T15 |
| T15 | CLI/TUI command unification. Introduce commands/domain.rs with shared logic for refresh, pause, resume, fuse reset, repair, and gate/ungate. |
0.5d | PLAN_TUI_PART_3.md §T15 |
| T16 | Dog-feeding data layer. Add DogFeedingDomain state types, polling queries for all 5 df_* stream tables, fixture builders, and contract stubs. |
1d | PLAN_TUI_PART_3.md §T16 |
Phase 2 — Self-Monitoring TUI Views (T17)
| Item | Description | Effort | Ref |
|---|---|---|---|
| TUI-1 | Anomaly Detection view (a key). New view showing df_anomaly_signals with severity colors, anomaly type, count, and first/last-seen timestamps. |
4h | PLAN_TUI_PART_3.md §TUI-1 |
| TUI-2 | Dashboard anomaly badge. Status ribbon shows active anomaly count in red when df_anomaly_signals is non-empty. |
1h | PLAN_TUI_PART_3.md §TUI-2 |
| TUI-3 | CDC Health sparkline column. Braille sparkline in CDC Health view showing buffer row-count trend from df_cdc_buffer_trends. |
3h | PLAN_TUI_PART_3.md §TUI-3 |
| TUI-4 | CDC Health spill-risk badge. ⚠ spill badge when df_cdc_buffer_trends growth rate extrapolates to a breach within 2 cycles. |
1h | PLAN_TUI_PART_3.md §TUI-4 |
| TUI-5 | Workers Interference sub-tab. Second tab in Workers view showing df_scheduling_interference overlap pairs. |
3h | PLAN_TUI_PART_3.md §TUI-5 |
| TUI-6 | Workers scheduler overhead bar. Busy-time ratio bar from scheduler_overhead() in the Workers view. |
1h | PLAN_TUI_PART_3.md §TUI-6 |
| TUI-7 | Dependencies Mermaid/DOT export (x key). Scrollable overlay showing explain_dag() Mermaid output; Ctrl+E writes to file. |
2h | PLAN_TUI_PART_3.md §TUI-7 |
| TUI-8 | Header self-monitoring status badge. df:N/M pill in the TUI header bar; turns amber on retention warning. |
1h | PLAN_TUI_PART_3.md §TUI-8 |
| TUI-9 | Command palette self-monitoring commands. self-monitoring enable / disable / status in palette with confirmation dialogs. |
2h | PLAN_TUI_PART_3.md §TUI-9 |
| TUI-10 | Detail view anomaly summary. Active anomaly count row in the Properties section of the detail overlay. | 1h | PLAN_TUI_PART_3.md §TUI-10 |
| TUI-11 | Refresh Log [auto] tag. Annotate rows with initiated_by = 'SELF_MONITOR' in the Refresh Log view. |
1h | PLAN_TUI_PART_3.md §TUI-11 |
| TUI-12 | First-launch self-monitoring toast. 10-second hint toast on first launch when self-monitoring is not set up. | 1h | PLAN_TUI_PART_3.md §TUI-12 |
| TUI-13 | Anomaly signals as Issues. detect_issues() maps active anomaly signals to the Issues view with category “Anomaly”. |
1h | PLAN_TUI_PART_3.md §TUI-13 |
| TUI-14 | self_monitor_anomaly alert styling. Cyan 🔍 icon for anomaly alert type in the Alerts view. |
0.5h | PLAN_TUI_PART_3.md §TUI-14 |
| TUI-15 | Dashboard snapshot tests. 5 snapshot branches: standard, wide, empty, anomalies-present, narrow. | 2h | PLAN_TUI_PART_3.md §TUI-15 |
| TUI-16 | Diagnostics df_efficiency_rolling panel. Aggregate speedup ratio and DIFF/FULL counts from df_efficiency_rolling. |
2h | PLAN_TUI_PART_3.md §TUI-16 |
| TUI-D1 | docs/TUI.md documentation update. Document Anomaly view, CDC sparklines, Workers interference tab, Mermaid export, header badge, and command palette additions. |
2h | PLAN_TUI_PART_3.md §T20 |
Phase 3 — Backend Enhancements (T18)
| Item | Description | Effort | Ref |
|---|---|---|---|
| DF-21 | sla_breach_risk column in df_threshold_advice. Boolean: true when avg_diff_ms > freshness_deadline_ms. |
2h | PLAN_TUI_PART_3.md §DF-21 |
| DF-22 | self_monitoring_auto_apply = 'full' mode. Widen dispatch interval when df_scheduling_interference detects high overlap. |
4h | PLAN_TUI_PART_3.md §DF-22 |
| DF-23 | self_monitoring_status() retention warning. retention_warning column when history_retention_days is below the minimum window. |
2h | PLAN_TUI_PART_3.md §DF-23 |
| DF-24 | recommend_refresh_mode() reads from df_threshold_advice. Returns consistent results with the incremental view when self-monitoring is active. |
3h | PLAN_TUI_PART_3.md §DF-24 |
| TEST-21 | Proptest for df_threshold_advice bounds. 10,000 cases verifying [0.01, 0.80] clamping invariant. |
2h | PLAN_TUI_PART_3.md §TEST-21 |
Phase 4 — CLI Integration (T19)
| Item | Description | Effort | Ref |
|---|---|---|---|
| CLI-1 | pgtrickle self-monitoring subcommand group. enable / disable / status subcommands with --format json|table|csv for status. |
4h | PLAN_TUI_PART_3.md §CLI-1 |
| CLI-2 | pgtrickle graph --format flag. ascii (existing) / mermaid / dot format options for the graph subcommand. |
2h | PLAN_TUI_PART_3.md §CLI-2 |
Phase 5 — Documentation & Polish (T20)
| Item | Description | Effort | Ref |
|---|---|---|---|
| DOC-21 | docs/GETTING_STARTED.md Day 2 update. Document self-monitoring CLI and TUI integration for new users. |
1h | PLAN_TUI_PART_3.md §T20 |
| DOC-22 | docs/SQL_REFERENCE.md update. Document df_threshold_advice.sla_breach_risk column. |
0.5h | PLAN_TUI_PART_3.md §T20 |
Phase 6 — TUI/CLI Visualization Polish
TUI/CLI visualization enhancement for the self-monitoring views. Recommended from PLAN_OVERALL_ASSESSMENT.md §9.11.
| Item | Description | Effort | Ref |
|---|---|---|---|
| OP-1 | DAG runtime overlay in explain_dag(). Colour nodes by p95 latency, width by rows/refresh using pgt_refresh_history. Enhances explain_dag() visualization for TUI/CLI. |
XS (2d) | PLAN_OVERALL_ASSESSMENT.md §9.11 |
Implementation Phases
| Phase | Description | Duration |
|---|---|---|
| T15 | Architecture Foundation — AppState decomp, selective polling, poller extraction, CLI unification | Days 1–3 |
| T16 | Self-Monitoring Data Layer — types, polling queries, fixtures, contract stubs | Days 3–5 |
| T17 | Self-Monitoring TUI Views — all 16 TUI items, snapshot + unit tests | Days 5–9 |
| T18 | Backend Enhancements — DF-21 through DF-24, proptest, upgrade SQL | Days 9–12 |
| T19 | CLI Integration — pgtrickle self-monitoring, pgtrickle graph --format |
Days 12–13 |
| T20 | Documentation, Polish & Final Testing — docs, cross-cutting tests, coverage audit | Days 13–15 |
| T21 (OP) | TUI/CLI Polish — DAG runtime overlay in explain_dag() |
Days 15–16 (parallel or interleaved) |
v1.6.0 total: ~3–4 weeks (TUI self-monitoring integration + DAG visualization polish: architecture + 16 views + 4 backend items + 2 CLI commands + tests + docs)
Exit criteria:
- [ ] T15: AppState uses 8 domain structs; all existing tests pass; just lint clean
- [ ] T15: Selective polling reduces Phase 2 query count for non-subscribed views
- [ ] TUI-1: Anomaly Detection view renders; severity colors correct; empty-state hint shown
- [ ] TUI-2: Dashboard ribbon shows anomaly count; turns red when anomalies present
- [ ] TUI-3: CDC Health sparkline column renders for all sources with trend data
- [ ] TUI-4: Spill-risk badge appears when df_cdc_buffer_trends growth rate extrapolates to breach
- [ ] TUI-5: Workers view has Interference sub-tab; overlap pairs render
- [ ] TUI-6: Scheduler overhead bar visible in Workers view after ≥ 5 refresh cycles
- [ ] TUI-7: x key on Dependencies view opens Mermaid overlay; Ctrl+E exports to file
- [ ] TUI-8: Header df:N/M badge reflects active self-monitoring stream tables
- [ ] TUI-9: Command palette self-monitoring enable/disable completes with confirmation
- [ ] TUI-15/TUI-T1: All new snapshot tests pass; dashboard snapshots cover 5 branches
- [ ] DF-21: sla_breach_risk = true when avg_diff_ms > freshness_deadline_ms
- [ ] DF-22: Dispatch interval widens after synthetic interference insertion
- [ ] DF-23: retention_warning column non-null when retention below minimum
- [ ] DF-24: recommend_refresh_mode() consistent with df_threshold_advice when self-monitoring active
- [ ] TEST-21: Proptest passes 10,000 iterations
- [ ] CLI-1: pgtrickle self-monitoring enable/disable/status functional
- [ ] CLI-2: pgtrickle graph --format mermaid outputs valid Mermaid
- [ ] TUI-D1/DOC-21/DOC-22: Documentation updated
- [ ] Extension upgrade path tested (1.5.0 → 1.6.0)
- [ ] just check-version-sync passes