Releases: pondpilot/flowscope
Releases · pondpilot/flowscope
v0.7.0
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 forUPDATE,DELETE, andMERGE - SQL
COMMENTdescriptions on nodes — inline and trailing SQL comments on table/column definitions are surfaced as node descriptions for display in downstream UIs name_spansandbody_spanon 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) —nodesandedgesare now top-level fields onAnalyzeResultinstead of nested undergraph, simplifying consumer code. Breaking change for consumers that accessedresult.graph.nodes/result.graph.edges.
Export (flowscope-export)
- Dali-compatible output layer — new
--format daliexport 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 daliexport 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
SqlViewbacked by the flowscope engine, with Tab-accept behavior that beats CodeMirror'sindentWithTabbinding - 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
SELECTis 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-hopA → B → Cpipelines show end-to-end - Ephemeral dbt models preserved through CTE hiding — dbt model sinks are marked with a
dbtModelSinkflag sohide_ctesretains 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_CONFLICTwith 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
v5so pre-flattenAnalyzeResultentries no longer rehydrate into a slot whereresult.nodesis 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)
serveis no longer a default feature.cargo install flowscope-clinow installs the core CLI (analysis, linting, fixing, exports) without the bundled local web server. Install withcargo install flowscope-cli --features servefor serve mode. This matches the behavior already documented in the README.
Tests
- Alias-shadowing coverage added for nested completion scopes
v0.5.0
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,
applyEditsutility, and lint provenance fields - Rebuilt WASM artifacts from current source
v0.4.0
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
.sqlfluffconfig 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,--jobsfor 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
Fixed
CLI (flowscope-cli)
- Enable
servefeature by default socargo install flowscope-cliincludes 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
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) thisglobal variable andexecuteflag for templates- Custom macro passthrough stubs for graceful handling
- Built-in dbt macros:
- 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_MISMATCHwarning 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 (
= NULLwarns to useIS NULLinstead)
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|dbtflag for templated SQL preprocessing--template-var KEY=VALUEfor template variable injection--metadata-urlfor live database schema introspection (PostgreSQL, MySQL, SQLite)--metadata-schemafor schema filtering during introspection- Serve mode: Run FlowScope as a local HTTP server with embedded web UI
--serveflag 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)--opento 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:
CanonicalTypereplaces internalSqlTypeenum with broader coverage (Time, Binary, Json, Array) OutputColumn.data_typenow 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_cursorwhen cursor offset is mid-character
Full Changelog: v0.2.0...v0.3.0
v0.2.0
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_ERRORtoINVALID_REQUESTfor JSON parse/validation errors inanalyze_sql_json().
Fixed
- Fixed potential panic in
extract_qualifierwhen 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
Debugderive toQualifierResolutionfor easier debugging. - Added comprehensive unit tests for string helper functions and qualifier resolution logic.