Skip to content

Releases: pondpilot/flowscope

v0.7.0

23 Apr 23:17

Choose a tag to compare

Added

Core Engine (flowscope-core)

  • Oracle dialect lineage — full Oracle dialect support in the analyzer and lineage extractors, surfacing Oracle-specific pseudocolumns (ROWID, ROWNUM, LEVEL, SYSDATE, etc.) and DML write targets for UPDATE, DELETE, and MERGE
  • SQL COMMENT descriptions on nodes — inline and trailing SQL comments on table/column definitions are surfaced as node descriptions for display in downstream UIs
  • name_spans and body_span on Node (#30) — each node now carries the source spans of every occurrence of its name plus the span of its defining body, enabling graph↔text navigation in editors
  • Flattened AnalyzeResult (#19, #33) — nodes and edges are now top-level fields on AnalyzeResult instead of nested under graph, simplifying consumer code. Breaking change for consumers that accessed result.graph.nodes / result.graph.edges.

Export (flowscope-export)

  • Dali-compatible output layer — new --format dali export target for Dali lineage interop, with ownership-only DML target detection, source-expression-preserving column refs, and defensive backward-traversal caps on large graphs

CLI (flowscope-cli)

  • --format dali export support; requires SQL input and returns contextual export errors instead of silently emitting empty packages or panicking on JSON serialization failures

Web App (app/) & VS Code extension

  • SQL IntelliSense in the editor (#26) — context-aware completions (tables, columns, keywords, functions) in SqlView backed by the flowscope engine, with Tab-accept behavior that beats CodeMirror's indentWithTab binding
  • VS Code CompletionItemProvider (#26) — the VS Code extension now delivers the same flowscope-backed SQL completions inside VS Code
  • Text→graph navigation (#24) — clicking in the SQL editor reveals the corresponding lineage node in the graph
  • Graph→text navigation (#31) — clicking a graph node cycles through its occurrences in the SQL editor
  • Stale-graph banner + Run-button rename (#21, #22) — the graph surfaces a banner when its data has drifted from the editor, and the Run button is renamed for clarity

Fixed

Core Engine (flowscope-core)

  • dbt multi-model chains now render as connected lineage (#32) — a dbt model's bare SELECT is materialized as the canonical Table node for the model name instead of a per-statement Output node, so when a downstream file references it via {{ ref(...) }} the producer and consumer collapse into a single graph node and multi-hop A → B → C pipelines show end-to-end
  • Ephemeral dbt models preserved through CTE hiding — dbt model sinks are marked with a dbtModelSink flag so hide_ctes retains ephemeral models in the global graph, and definition occurrences are tracked separately so statement-scoped views surface the producer span before any consumer refs
  • Ambiguous dbt model materialization surfaced — duplicate model names across files now emit SCHEMA_CONFLICT with an unambiguous warning about definition vs. producer semantics
  • dbt CTE and output-node collisions fixed (#15) — explicit output nodes are included in script-level dependencies and edge IDs are now collision-safe via statement-scope metadata
  • Column-lineage pruning refined — tighter pruning rules eliminate spurious column edges without dropping legitimate lineage
  • Stale analysis cache invalidated — the web app's analysis cache sentinel is bumped to v5 so pre-flatten AnalyzeResult entries no longer rehydrate into a slot where result.nodes is undefined

Web App (app/)

  • Reveal targeting scoped to the active editor — reveal lookups no longer cross editors in multi-file controlled setups, and reveal clears no longer trigger spurious navigation

Changed

Core Engine (flowscope-core)

  • Graph builders share output-node and edge helpers, reducing duplication between the script-level and statement-level paths
  • Span helpers are hardened against UTF-8 panics and relation span lookup is unified

CLI (flowscope-cli)

  • serve is no longer a default feature. cargo install flowscope-cli now installs the core CLI (analysis, linting, fixing, exports) without the bundled local web server. Install with cargo install flowscope-cli --features serve for serve mode. This matches the behavior already documented in the README.

Tests

  • Alias-shadowing coverage added for nested completion scopes

v0.5.0

16 Mar 19:07

Choose a tag to compare

What's New

Oracle Dialect Support

  • Full Oracle dialect support across CLI (-d oracle), core engine, and web app UI
  • Uppercase identifier normalization, Oracle pseudocolumns (LEVEL, ROWID, ROWNUM, etc.), null ordering rules, and scoping rules

sqlparser Upgrade (0.59 → 0.61)

  • Migrated to sqlparser 0.61's tuple-variant API across ~30 files
  • Picks up Oracle dialect support, improved PostgreSQL parsing, hierarchical query support (CONNECT BY / START WITH), and performance optimizations

Other

  • Autofix metadata types, applyEdits utility, and lint provenance fields
  • Rebuilt WASM artifacts from current source

v0.4.0

03 Mar 00:41

Choose a tag to compare

SQL Linter Engine

FlowScope v0.4.0 adds a full SQL linting engine with 60+ rules targeting SQLFluff parity, an autofix engine, and CLI integration.

Highlights

  • 60+ lint rules across 8 categories: aliasing (AL), ambiguity (AM), capitalisation (CP), convention (CV), Jinja (JJ), layout (LT), references (RF), and structure (ST)
  • Autofix engine with iterative convergence, overlap recovery, and safe/unsafe fix classification
  • SQLFluff config compatibility — reads .sqlfluff config files with per-rule options
  • Dialect-aware detection for PostgreSQL, BigQuery, Snowflake, Redshift, SparkSQL, MSSQL, and more
  • AST/tokenizer-driven — all rules operate on parsed AST and token streams, not regex
  • CLI integration--lint, --fix, --fix-only, --exclude-rules, --jobs for parallel processing
  • Web app integration — lint is now enabled by default in the analysis worker with an Issues panel toggle

Rule Categories

Category Rules Description
AL001–AL009 Aliasing Alias style, quoting, unused aliases, duplicates
AM001–AM009 Ambiguity DISTINCT/GROUP BY, UNION types, bare JOINs
CP001–CP005 Capitalisation Keywords, identifiers, functions, literals, types
CV001–CV012 Convention Operator style, COALESCE, trailing commas, IS NULL
JJ001 Jinja Template tag detection
LT001–LT015 Layout Whitespace, indentation, line position, commas
RF001–RF006 References Keyword refs, wildcards, quoting policies
ST001–ST012 Structure CASE style, unused CTEs, column order, USING
TQ001–TQ003 T-SQL SP_ prefix, SET NOCOUNT, batch separators

Other Changes

  • Updated mascot to purple-headed Polly duck with favicon
  • Removed beta badge from web app
  • Added GitHub Actions CI workflow

v0.3.1

23 Jan 14:17

Choose a tag to compare

Fixed

CLI (flowscope-cli)

  • Enable serve feature by default so cargo install flowscope-cli includes the web UI server
  • Fix rust-embed asset path for embedded web UI (was incorrectly pointing to workspace root)

Full Changelog: v0.3.0...v0.3.1

v0.3.0

23 Jan 14:17

Choose a tag to compare

Highlights

  • dbt/Jinja templating: Analyze dbt models with ref(), source(), config(), var() macros
  • CLI serve mode: Run FlowScope as a local HTTP server with embedded web UI (--serve)
  • Type inference: Detect type mismatches in SQL expressions with dialect-aware rules
  • Extended lineage: COPY, ALTER TABLE RENAME, and UNLOAD statement support

Added

Core Engine (flowscope-core)

  • Jinja/dbt templating support: MiniJinja-based preprocessing for dbt projects
    • Built-in dbt macros: ref(), source(), config(), var(), is_incremental()
    • RelationEmulator for dbt Relation object attribute access (.schema, .identifier)
    • this global variable and execute flag for templates
    • Custom macro passthrough stubs for graceful handling
  • COPY statement lineage: Track source/target tables in COPY/COPY INTO (PostgreSQL, Snowflake)
  • ALTER TABLE RENAME lineage: Track table renames as dataflow edges
  • UNLOAD statement lineage: Track source tables from Redshift UNLOAD statements
  • Lateral column alias support: Resolve aliases in same SELECT list (BigQuery, Snowflake, DuckDB, etc.)
  • Backward column inference: Infer columns for SELECT * without schema from downstream usage
  • Type inference for SQL expressions with comprehensive type checking
  • New TYPE_MISMATCH warning code for detecting incompatible type comparisons and operations
  • Schema-aware column type lookup - column references now resolve types from provided schema metadata
  • CTE column type propagation to outer queries
  • Dialect-aware type compatibility rules (e.g., Boolean/Integer comparison allowed in MySQL but not PostgreSQL)
  • NULL comparison anti-pattern detection (= NULL warns to use IS NULL instead)

Completion API

  • Smart function completions with signature metadata (params, return types, categories)
  • Context-aware scoring: boost aggregates in GROUP BY, window functions in OVER clauses
  • Lateral column alias extraction with proper scope isolation
  • Type-aware column scoring in comparison contexts
  • Dialect-aware keyword parsing using sqlparser tokenizer
  • CASE expression type inference from THEN/ELSE branches

CLI (flowscope-cli)

  • --template jinja|dbt flag for templated SQL preprocessing
  • --template-var KEY=VALUE for template variable injection
  • --metadata-url for live database schema introspection (PostgreSQL, MySQL, SQLite)
  • --metadata-schema for schema filtering during introspection
  • Serve mode: Run FlowScope as a local HTTP server with embedded web UI
    • --serve flag to start HTTP server with embedded React app
    • --port <PORT> to specify server port (default: 3000)
    • --watch <DIR> for directories to watch for SQL files (repeatable)
    • --open to auto-open browser on startup
    • REST API endpoints: /api/analyze, /api/completion, /api/files, /api/export/:format
    • File watcher with 100ms debounce for automatic reload on changes
    • Assets embedded at compile time via rust-embed for single-binary deployment

React Package (@pondpilot/flowscope-react)

  • Web workers for graph/matrix/layout computations (improved UI responsiveness)
  • LayoutProgressIndicator component for visual layout feedback
  • Debug flags (GRAPH_DEBUG, LAYOUT_DEBUG) for performance diagnostics

Web App

  • Template mode selector for dbt/Jinja SQL preprocessing in the toolbar
  • Issue-to-editor navigation: click issues to jump to source location
  • Issues tab filtering: filter by severity, error code, and file
  • Stats popover: complexity dots trigger dropdown with table/column/join counts
  • Clear analysis cache option in project menu
  • Bundled "dbt Jaffle Shop" demo project showcasing ref/source/config/var
  • Backend adapter pattern for REST/WASM detection (supports serve mode)
  • Read-only mode for files loaded from CLI serve backend
  • Schema display from database introspection in serve mode

Changed

Core Engine (flowscope-core)

  • Unified type system: CanonicalType replaces internal SqlType enum with broader coverage (Time, Binary, Json, Array)
  • OutputColumn.data_type now populated with inferred types for SELECT expressions
  • Type checking now accepts dialect parameter for dialect-specific rules

Fixed

Core Engine (flowscope-core)

  • dbt model cross-statement linking with proper case normalization for Snowflake
  • DDL-seeded schema preservation (schemas no longer overwritten by later queries)
  • UTF-8 safety in should_show_for_cursor when cursor offset is mid-character

Full Changelog: v0.2.0...v0.3.0

v0.2.0

19 Jan 00:05

Choose a tag to compare

Highlights

  • First public release of the FlowScope Rust + WASM + TypeScript stack.
  • Multi-dialect SQL parsing with table/column lineage, schema validation, and editor-friendly spans.
  • Export tooling for Mermaid, JSON, HTML, CSV bundles, and XLSX across Rust and WASM.
  • React components + CLI for lineage visualization and data export workflows.
  • CTE and derived table definitions now include spans for editor navigation.
  • Export downloads in React normalize byte buffers for reliable Blob creation.

Changed

  • Breaking: Changed error code from REQUEST_PARSE_ERROR to INVALID_REQUEST for JSON parse/validation errors in analyze_sql_json().

Fixed

  • Fixed potential panic in extract_qualifier when cursor offset lands on invalid UTF-8 boundary.
  • Fixed completion logic that suppressed completions when schema metadata lacked columns but query context had valid columns.
  • Fixed potential integer overflow in completion item scoring by using saturating arithmetic.
  • Added spans for CTE and derived table definition nodes to support editor navigation.
  • Bundle reserved keyword list inside the exporter crate for publish-time builds.
  • Fixed ZIP/XLSX downloads by normalizing export byte buffers for Blob creation.

Improved

  • Added named constants for completion scoring values to improve code maintainability.
  • Added Debug derive to QualifierResolution for easier debugging.
  • Added comprehensive unit tests for string helper functions and qualifier resolution logic.