Skip to content

v2.7.0 — Maintainability pass

Choose a tag to compare

@ikelaiah ikelaiah released this 04 Oct 10:57
· 16 commits to main since this release

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
    to src/token-utils.ts and the PL/pgSQL + T-SQL transaction rules to
    src/dialects-state.ts. token-utils ← lineage ← columns ←
    columnflow is one-way, and exporters no longer reaches back into
    ir.ts. Each module can now be read and tested on its own.
  • ir.ts shrinks 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. splitCTEs now 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 call graphNarrowByFocus and
    graphFilteredClone, so the no-mutation and one-hop rules cannot drift.
  • Exports never mutate the analysis. toMermaid works on shallow node
    copies, so a cached graph is safe to reuse; a regression test locks this in.
  • npm test runs the whole browser suite. scripts/test-all.mjs starts 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. noUnusedVariables is
    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 metrics normalises 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 supports prefers-color-scheme: light with a
    legible light palette. Command-menu panels carry role="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 to docs/archive/
    with an archive README; ROADMAP.md, tasks/, and BENCHMARKS.md are
    clearly marked historical. docs/RELEASES.md now indexes every canonical
    release note. The stale trust-model version and the port mismatch in
    docs/DEVELOPMENT.md are 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.0 snapshots 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 test honours CHROME_PATH and 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 typecheck and npm run build passing;
  • 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 metrics confirming the fixture-corpus snapshot is current;
  • npm run package:smoke passing 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.