Plan viewer: ExplainService and the Query plan record action. Plain EXPLAIN, or EXPLAIN (GENERIC_PLAN) for parameterized statements (PG 16+). EXPLAIN (ANALYZE, BUFFERS) only for a single SELECT/WITH without data-modifying CTEs, in a READ ONLY transaction with SET LOCAL statement_timeout, always rolled back, behind db_performance.explain_analyze. Every request audited in db_perf_explain; ANALYZE plans and parameter values never stored. Results carry the SQL Workbench link and an assistant prompt (normalized SQL + plan only).
UI API extension db-performance 1.0.0 at /qqq/v1/qbit/db-performance: GET overview, GET activity (live; raw SQL only with view_live_text), POST explain, GET statements/lookup (SQL Workbench -> query history). Committed OpenAPI fragment + contract test.
App home: Setup, Database time, Top queries, Findings, Live activity, Connections, QQQ attribution, Tables; typed widget data, full width, guided empty states.
Help bundle help/qbit-db-performance.yaml with HelpBundleAssertions coverage; README, CHANGELOG, UPGRADE.
Tests: 86 incl. PostgreSQL 17 (explain safety: writes via ANALYZE rejected or fail read-only, timeout, permissions). Implementation by Codex, reviewed and merged with develop by Claude.
Phase C of docs/SPEC.md (sections 7, 8, 10).
- Plan viewer: `ExplainService` and the **Query plan** record action. Plain EXPLAIN, or `EXPLAIN (GENERIC_PLAN)` for parameterized statements (PG 16+). `EXPLAIN (ANALYZE, BUFFERS)` only for a single SELECT/WITH without data-modifying CTEs, in a READ ONLY transaction with `SET LOCAL statement_timeout`, always rolled back, behind `db_performance.explain_analyze`. Every request audited in `db_perf_explain`; ANALYZE plans and parameter values never stored. Results carry the SQL Workbench link and an assistant prompt (normalized SQL + plan only).
- UI API extension `db-performance` 1.0.0 at `/qqq/v1/qbit/db-performance`: `GET overview`, `GET activity` (live; raw SQL only with `view_live_text`), `POST explain`, `GET statements/lookup` (SQL Workbench -> query history). Committed OpenAPI fragment + contract test.
- App home: Setup, Database time, Top queries, Findings, Live activity, Connections, QQQ attribution, Tables; typed widget data, full width, guided empty states.
- Help bundle `help/qbit-db-performance.yaml` with HelpBundleAssertions coverage; README, CHANGELOG, UPGRADE.
Tests: 86 incl. PostgreSQL 17 (explain safety: writes via ANALYZE rejected or fail read-only, timeout, permissions). Implementation by Codex, reviewed and merged with develop by Claude.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Phase C of docs/SPEC.md (sections 7, 8, 10).
ExplainServiceand the Query plan record action. Plain EXPLAIN, orEXPLAIN (GENERIC_PLAN)for parameterized statements (PG 16+).EXPLAIN (ANALYZE, BUFFERS)only for a single SELECT/WITH without data-modifying CTEs, in a READ ONLY transaction withSET LOCAL statement_timeout, always rolled back, behinddb_performance.explain_analyze. Every request audited indb_perf_explain; ANALYZE plans and parameter values never stored. Results carry the SQL Workbench link and an assistant prompt (normalized SQL + plan only).db-performance1.0.0 at/qqq/v1/qbit/db-performance:GET overview,GET activity(live; raw SQL only withview_live_text),POST explain,GET statements/lookup(SQL Workbench -> query history). Committed OpenAPI fragment + contract test.help/qbit-db-performance.yamlwith HelpBundleAssertions coverage; README, CHANGELOG, UPGRADE.Tests: 86 incl. PostgreSQL 17 (explain safety: writes via ANALYZE rejected or fail read-only, timeout, permissions). Implementation by Codex, reviewed and merged with develop by Claude.
🤖 Generated with Claude Code