Repository navigation
v2.7.0 — Maintainability pass
A code-health release: no new user-facing features, but a stronger codebase
underneath the same UI. The analysis core is now a clean one-way dependency
chain, duplication is removed, dead code is gone, linting exists, and
contributors can run every browser suite with one command.
Highlights
- No dependency cycles in the analysis core. Shared token/AST helpers moved
tosrc/token-utils.tsand the PL/pgSQL + T-SQL transaction rules to
src/dialects-state.ts.token-utils←lineage←columns←
columnflowis one-way, andexportersno longer reaches back into
ir.ts. Each module can now be read and tested on its own. ir.tsshrinks from 1966 to 1466 lines. The graph builder keeps its
responsibilities, but the pure helpers and dialect state live where a reader
can find them.- One CTE splitter.
splitCTEsnow carries the explicit column list
(WITH r(n) AS …) and body spans that previously lived in a near-duplicate
splitCtesColumn; lineage and column flow share one parser. - One filter kernel. The dependency and report graph filters shared a
copy-pasted neighbour/clone block; both now callgraphNarrowByFocusand
graphFilteredClone, so the no-mutation and one-hop rules cannot drift. - Exports never mutate the analysis.
toMermaidworks on shallow node
copies, so a cached graph is safe to reuse; a regression test locks this in. npm testruns the whole browser suite.scripts/test-all.mjsstarts a
local static server and drives golden, fuzz, ui, erd-ui, and security
through headless Chromium. The suites also publish named result globals so
the runner does not scrape DOM state.- Linting and CI tightening. Biome (
npm run lint) gates correctness and
suspicious rules; CI runs lint before typecheck.noUnusedVariablesis
intentionally off because the global-script architecture makes top-level
declarations look unused to a per-file linter. - Tests are no longer order-dependent. The UI suites previously raced the
off-screen iframe: on a fast machine the iframe could load before the test
attached its listener, leaving the suite stuck at "Running…". They now run
either way. - Windows-friendly metrics.
npm run metricsnormalises line endings, so
the snapshot check no longer reports a false staleness on CRLF checkouts. - UI polish. Tablists follow the ARIA tabs keyboard pattern (arrows,
Home/End), and the app supportsprefers-color-scheme: lightwith a
legible light palette. Command-menu panels carryrole="group"so their
labels are exposed to assistive technology. - Docs that point forward, not backward. 33 superseded
RELEASE_NOTE_*,
PR_NOTE_*, and historical planning documents moved todocs/archive/
with an archive README;ROADMAP.md,tasks/, andBENCHMARKS.mdare
clearly marked historical.docs/RELEASES.mdnow indexes every canonical
release note. The stale trust-model version and the port mismatch in
docs/DEVELOPMENT.mdare corrected.
Accuracy and limits
- No analysis, export, or query-builder semantics changed. Every golden,
fuzz, adversarial, and security fixture passes unchanged; the metrics
snapshot is byte-identical to v2.6.0's numbers. - The
metrics-v1.6.0…v1.12.0snapshots referenced by archived v1.x notes
do not exist in the repository; the notes stay archived as historical
records and their broken references are left as-is. - Browser automation depends on a locally installed Chromium/Edge/Chrome;
npm testhonoursCHROME_PATHand fails with a clear message otherwise.
Verification
The final local verification recorded for this release includes:
npm run lint(Biome) passing with 0 errors;npm run typecheckandnpm run buildpassing;npm test(scripts/test-all.mjs) passing all five browser suites over a
local static server: golden 221/221, fuzz 400 deterministic mutation cases,
ui 32/32, erd-ui 68/68, security 6/6 — including the new export
non-mutation and Mermaid strict-security regression tests;npm run test:file(local-file startup smoke) passing;npm run metricsconfirming the fixture-corpus snapshot is current;npm run package:smokepassing archive structure and local-file startup;- CI runs the same gate plus Firefox smoke and release-consistency checks.
Upgrade and distribution
Download procflow-v2.7.0.zip from the GitHub release or clone the
repository. Nothing changes in the runtime footprint beyond the new
token-utils.js, dialects-state.js, and samples.js modules; the
package allowlist and index.html load order are updated accordingly.
Open index.html (or erd.html) in a current Chromium, Firefox, or Edge
browser.