Repository navigation
Releases
Releases · pgquery-narrative/pgquerynarrative
v3.0.1
What's Changed
- Replace placeholder logo with a designed brand identity by @DamilShahzad7 in #274
- feat(website): add public marketing site under website/ by @DamilShahzad7 in #277
- fix(website): restore missing space before inline links on get-started by @DamilShahzad7 in #278
- fix(mcp-server): stop requiring limit/offset/intent args that already have defaults by @DamilShahzad7 in #280
- feat(website): add real worked example, capability comparison, open-source section by @DamilShahzad7 in #279
- docs(changelog): cut v3.0.1 by @DamilShahzad7 in #284
Full Changelog: v3.0.0...v3.0.1
v3.0.0
What's Changed
- chore: stop tracking the linkedin-social binary by @DamilShahzad7 in #195
- chore(deps-dev): bump the frontend-dependencies group across 1 directory with 6 updates by @dependabot[bot] in #196
- fix: close four trust boundaries in rewrite, validator, fix lifecycle and evidence by @DamilShahzad7 in #197
- Fix a query-rewrite bug and a handful of other trust issues by @DamilShahzad7 in #206
- docs: rebuild documentation architecture and close factual drift by @DamilShahzad7 in #204
- chore(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #203
- chore(deps-dev): bump the frontend-dependencies group in /frontend with 2 updates by @dependabot[bot] in #202
- chore(deps-dev): bump @playwright/test from 1.62.1 to 1.63.0 in /test/playwright in the playwright-dependencies group by @dependabot[bot] in #201
- refactor: reorganize repository layout and internal packages by @DamilShahzad7 in #271
Full Changelog: v2.2.0...v3.0.0
v2.2.0
Evidence honesty, plus result verification that is both cheaper and stronger.
Breaking
POST /api/v1/queries/explain/comparerenames the cost row and changes its format.
Total cost … −26.9×is nowPlanner cost (estimate) … −96.3%. Planner cost is an
abstract quantity in scaled page-fetch units — not proportional to elapsed time, and not
reliably comparable across two plans — so rendering it as a fold change beside an
execution-time row implied a speedup the number cannot support. Anything parsing that
row'sevidencestring, or expecting×in itschange, needs updating.
Added
timing_runs(1–5) on compare. Above 1, each side runs that many times under ANALYZE
and the row reports the median with the observed range —28ms (5 runs, 26ms–40ms).
Median rather than mean, so a single cold or contended run cannot drag the figure to a
number no execution actually produced.- Noise detection. When the run-to-run spread is at least as large as the gap between
medians, the result is reported as inside the measurement noise rather than as a speedup. caveaton comparison metrics, rendered beside the number and carried into exported
reports.EXPLAIN (SETTINGS)on every plan. Non-default planner configuration changes both
the plan chosen and every cost shown, so a comparison is only meaningful when both sides
were produced under the same settings.
Changed
- Result verification is roughly twice as cheap and no longer capped. It previously ran
four executions and, past 1000 rows, sorted the entire result to sample it. It is now one
aggregate pass per side —count+sum+bit_xorover a per-row hash — with no sort
and three scalars on the wire. All three aggregates are commutative, so row order cannot
affect the answer.VerifiedEqualnow means every row was compared, at any result
size. - Execution time is labelled as the single sample it is when
timing_runsis 1. - The demo seeds 300k rows instead of 8000, so the before/after difference is larger
than the timing noise. Seeding takes about two seconds.
Fixed
- The "no rewrite offered" message omitted a supported pattern and overstated another; it
now lists them accurately and explains that declining is the normal outcome. - Release signature verification requires cosign v3 or newer — v2 cannot read Sigstore
v0.3 bundles and fails in a way that resembles a bad signature.
Install
docker pull ghcr.io/pgquery-narrative/pgquerynarrative:2.2.0Binaries for linux and darwin on amd64 and arm64 are attached, with checksums.txt, an
SBOM, and a .cosign.bundle for each. Upgrading from 2.0.x requires running migrations
first — the schema gate is version 56.
Full changelog: https://github.com/pgquery-narrative/pgquerynarrative/blob/main/CHANGELOG.md
v2.1.0
What's Changed
- chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates by @dependabot[bot] in #50
- chore(deps): bump Go modules to clear Dependabot high alerts by @DamilShahzad7 in #54
- fix(queryrunner): bound result slice capacity to clear CodeQL alert by @DamilShahzad7 in #56
- feat: StrictMode hardening, isolation MVP, and pilot readiness by @DamilShahzad7 in #74
- chore(deps): bump the github-actions group across 1 directory with 17 updates by @dependabot[bot] in #77
- chore(deps): bump the frontend-dependencies group across 1 directory with 12 updates by @dependabot[bot] in #76
- docs: add MkDocs Material local preview via make docs by @DamilShahzad7 in #78
- feat: query investigation workflow, plan compare, and guided demo by @DamilShahzad7 in #81
- docs: fix README workflow GIF and badge links by @DamilShahzad7 in #85
- docs: replace README GIF with live Playwright walkthrough by @DamilShahzad7 in #88
- fix: harden investigation compare for credible README demo by @DamilShahzad7 in #90
- docs: slow README GIF and burn in step captions by @DamilShahzad7 in #92
- docs: tighten README GIF with zoom/scroll by @DamilShahzad7 in #94
- docs: restructure README and investigation-first docs hub by @DamilShahzad7 in #97
- feat: suggest DATE_TRUNC rewrites and expose index advice by @DamilShahzad7 in #98
- feat: rank rewrite candidates with dry EXPLAIN by @DamilShahzad7 in #99
- feat: collapse repeated partition-level findings in reports by @DamilShahzad7 in #109
- fix: restore PostgreSQL evidence and align investigation PDF/HTML reports by @DamilShahzad7 in #112
- feat: propose rewrites, hypopg index rank, and open from regressions by @DamilShahzad7 in #105
- chore(deps-dev): bump @playwright/test from 1.61.1 to 1.62.1 in /test/playwright in the playwright-dependencies group across 1 directory by @dependabot[bot] in #82
- chore(deps): bump the github-actions group across 1 directory with 9 updates by @dependabot[bot] in #114
- chore(deps): bump the frontend-dependencies group across 1 directory with 12 updates by @dependabot[bot] in #113
- feat(investigate): verdict-first diagnosis, collapse plan-finding noise by @DamilShahzad7 in #116
- feat(rewrite): parameterized-query rewrites + GENERIC_PLAN explain by @DamilShahzad7 in #118
- feat(investigate): sample bind values for parameterized compare by @DamilShahzad7 in #120
- feat(poller): rolling baseline + self-observation filter + fix lifecycle (P1 + P2) by @DamilShahzad7 in #122
- feat(investigate): keep every tested candidate (P3 — candidate history) by @DamilShahzad7 in #127
- feat(reports): Markdown / JSON / SQL report export (P3 — report export) by @DamilShahzad7 in #126
- feat(rewrite): LEFT JOIN … IS NULL anti-join → NOT EXISTS (P3 — more rewrite patterns) by @DamilShahzad7 in #129
- build: one committed codegen tree — go build works on a clean clone (P4) by @DamilShahzad7 in #131
- test: metrics calculator + service decision-logic coverage, with CI floors (P5) by @DamilShahzad7 in #133
- feat(pdf): embedded Unicode font for report PDF export by @DamilShahzad7 in #135
- build: generate frontend API types from the OpenAPI spec by @DamilShahzad7 in #137
- build(security): bump x/crypto + CI Go toolchain to clear govulncheck (#149) by @DamilShahzad7 in #150
- fix(rewrite): misaligned DATE_TRUNC equality + NULL-safe OR→UNION (#1, #2) by @DamilShahzad7 in #138
- fix(queryrunner): harden textual bind substitution against injection (#4) by @DamilShahzad7 in #139
- feat(regression): detect on poll-to-poll interval deltas, not cumulative counters (#9) by @DamilShahzad7 in #151
- feat(compare): gate result verification on ActionQuery; 5-state equivalence (#3, #5, #6) by @DamilShahzad7 in #140
- feat(poller): per-connection polling, leader election, one-open-alert unique index (#10, #11, #12) by @DamilShahzad7 in #152
- feat(explain): honest timing fields + real "Rows scanned" metric (#7, #13) by @DamilShahzad7 in #141
- feat(db): cross-org integrity for investigation children; org-wide visibility (#15, #16) by @DamilShahzad7 in #153
- feat(investigate): estimate-only EXPLAIN by default; honest candidate ranking (#8, #14) by @DamilShahzad7 in #142
- fix(security): Security & Trust page reports real per-connection state by @DamilShahzad7 in #155
- feat(deploy): one deployment model, branch-protection and release-gate docs by @DamilShahzad7 in #157
- fix(demo): live scenario dates; guard stale/dirty migration state by @DamilShahzad7 in #159
- test: raise coverage floors, add hero-path and HypoPG boundary gates by @DamilShahzad7 in #161
- build: gate docs on mkdocs --strict, stop OpenAPI example churn by @DamilShahzad7 in #163
- release: prepare v2.1.0 by @DamilShahzad7 in #165
- fix(ci): re-pin download-artifact to a real SHA; guard every action pin by @DamilShahzad7 in #167
- chore: stop tracking frontend/node_modules and frontend/dist by @DamilShahzad7 in #169
- docs: add a security policy and publish the documentation site by @DamilShahzad7 in #171
- fix(queryrunner): collapse partition findings that carry no schema prefix by @DamilShahzad7 in #173
- fix(frontend): correct plan-finding collapse and add the missing plan-tree helper by @DamilShahzad7 in #175
- docs: give the README real install paths and fix the equivalence vocabulary by @DamilShahzad7 in #177
- fix(deploy): migrate as a role that may create extensions and alter roles by @DamilShahzad7 in #179
- fix(release): sign artifacts with a cosign bundle path by @DamilShahzad7 in #181
- fix(release): register QEMU for the arm64 image, build the SPA natively by @DamilShahzad7 in #183
New Contributors
- @dependabot[bot] made their first contribution in #50
Full Changelog: v2.0.0...v2.1.0
v2.0.0 — Postgres-native query intelligence
Highlights
- Postgres-first repositioning: secure read-only SQL, EXPLAIN plan analysis, 10M-row partitioned benchmark
- Parser-based validation (pg_query_go), pg_stat_statements dashboard, RLS demo, pgvector semantic search
- Case study: 1.1s to 145ms covering index optimization on 10M rows
See CHANGELOG.md and docs/case-studies/01-query-optimization.md on main.
v1.0.0 — Analytics narratives on PostgreSQL
First stable release: natural-language analytics narratives over a read-only PostgreSQL connection.
Highlights
- Read-only SQL execution with validation, timeouts, and row caps
- Metrics engine: aggregates, time series, period-over-period comparison, correlations, cohorts
- Anomaly detection (z-score and Isolation Forest) and trend summaries
- LLM-generated report narratives with HTML and PDF export
- Saved queries, scheduled runs, and webhook delivery
- API-key auth with role-based access and rate limiting
Full detail in CHANGELOG.md.