Changelog

March 5, 2026 · View on GitHub

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[3.4.0] - 2026-03-05

Added

  • Catalog & Schema Fields: New dedicated Catalog and Schema fields in the Table Metadata modal, stored as reserved customProperties keys
    • Catalog/schema displayed as subtitle on canvas nodes and system view cards
    • Table name uniqueness validation scoped by catalog + schema (allows same name in different locations)
  • Resource Type Dropdown: New Resource Type selector in Table Metadata modal (Table / View / Materialized View)
    • Stored as resource_type customProperty; default (Table) stores nothing
    • "View" (blue) and "MV" (purple) badges on canvas nodes and system view table cards
  • Metric View Import UI: Dedicated amber action button in Analytical view for creating/importing DBMV metric views
    • Create mode: name, source table, view type, description
    • Import mode: paste YAML or upload .yaml/.yml file
  • Compound Key Badges: Columns in compound keys now show 'CK' badge instead of 'PK' in physical view
    • Primary compound key members use yellow 'CK', non-primary use purple 'CK'
    • 'PK' reserved for standalone primary keys only — each table shows at most one 'PK'

New Files

  • frontend/src/components/views/MetricViewActions.tsx — Analytical view action button for metric views
  • frontend/src/components/views/CreateMetricViewDialog.tsx — Create/Import dialog for DBMV metric views

[3.3.0] - 2026-03-05

Added

  • Databricks Metric Views (DBMV): Full support for Databricks Metric Views as a new entity type
    • New MetricView entity with standard and materialized view types
    • Dimensions, measures, filters, joins, and materialization configuration
    • Gold-to-purple gradient canvas nodes (visually distinct from tables and compute assets)
    • Metric views displayed exclusively in the Analytical view tab
    • System-bound via system.metric_view_ids (same pattern as tables and compute assets)
    • Import: accepts both full DBMV document (multi-view) and single view YAML
    • Export from card: single view YAML format
    • Save: all views grouped by system into .dbmv.yaml files
    • Compact cards in System View showing name, type badge, dimension/measure counts
  • SDK 2.4.0: Updated WASM SDK with parse_dbmv_yaml and export_to_dbmv_yaml bindings
  • Quality Rules: Added mustBeBetween and mustNotBeBetween quality rules with range min/max fields in Column Details modal

New Files

  • frontend/src/types/metricView.ts — MetricView type definitions (dimensions, measures, joins, materialization)
  • frontend/src/services/sdk/dbmvService.ts — DBMV parse/export service with SDK, API, and js-yaml fallbacks
  • frontend/src/components/canvas/MetricViewNode.tsx — ReactFlow canvas node with gold-purple gradient
  • frontend/src/components/views/MetricViewCard.tsx — Compact card for System View

[3.2.1] - 2026-02-26

Fixed

  • Nested column duplicate display: Nested fields inside array/object columns (e.g. timeOfScore, participantName inside participantAScores) were appearing as duplicate top-level fields in the canvas card view, read-only table editor, and logical table card
    • Canvas node (physical view) now only shows root-level columns
    • Canvas node (logical view) filters nested columns from key display
    • Read-only table editor now renders columns hierarchically with indentation and tree connectors
    • Logical table card excludes nested columns from key column list
    • Aria label column count reflects root-level columns only

[3.2.0] - 2026-02-25

Added

  • Source Topic Label on Canvas: Tables with a source_topic custom property now display it as a subtitle below the table name on the canvas, visible in all views (Systems, Operational, Analytical)
  • Source Topic Label on System View: Table cards in the Systems View now show the source topic in brackets after the table name
  • Source Topic Field in Table Metadata: New editable "Source Topic" field in the Table Metadata modal, allowing users to group tables from the same schema or topic
  • Auto-populate Source Topic on Import: When importing from a file, URL, or pasted JSON Schema, the source name is automatically set as the source_topic on imported tables
  • Custom Properties Helper Utility: New shared customProperties.ts utility with getSourceTopic() and setSourceTopic() helpers
  • Failed ODCS Load Alerting: Toast warnings and ValidationWarnings panel entries when ODCS files fail to parse, so users are aware of issues without silent data loss

Fixed

  • Critical: Data Loss from ODCS Parse Failures: Fixed a bug where tables would be permanently deleted if their ODCS file failed to parse on load. The saver's stale file cleanup would delete the unparsed file, and workspace.yaml would be overwritten with empty table_ids. Now: failed files are tracked, protected from deletion, and table_ids are preserved in workspace.yaml across save/load cycles
  • ODCS Duplicate Key Self-Corruption: Fixed the serializer (odcsService.toYAMLv2) writing duplicate YAML keys (e.g. description) when a field existed both as a top-level property and in customProperties. The customProperties filter now excludes all standard ODCS fields at both table and column level
  • ODCS Duplicate Key Auto-Repair: When the SDK rejects a YAML file due to duplicate keys, the parser now automatically deduplicates by round-tripping through js-yaml (which silently resolves duplicates) and retries. Already-corrupted files self-heal on next load
  • Data Contract Name Bug: Fixed ODCS data contract root-level name being set to the first table name instead of the system/file name. Now correctly passes contractMetadata.name from all export call sites (WorkspaceV2Saver, SystemExportDialog, TableEditor, DomainCanvas, LocalFileService, ElectronFileService)
  • ODCL Import CustomProperties Lost: Fixed normalizeTable() in odcsService not returning customProperties, causing them to be silently dropped during ODCL imports

New Files

  • frontend/src/utils/customProperties.ts — Shared helpers for reserved customProperties keys (source_topic)
  • frontend/tests/unit/utils/customProperties.test.ts — Unit tests for customProperties helpers

[3.1.1] - 2026-02-25

Fixed

  • GitHub Session State Corruption: Fixed React error #185 (Maximum update depth exceeded) that occurred on browser refresh/restart when using GitHub as the backend
    • Root cause: persisted Zustand stores rehydrated with stale data while non-persisted stores started empty, causing infinite re-renders in DomainCanvas
    • Clear all content stores on initial mount for GitHub workspaces, not just on workspace switch
    • Remove stale workspace data from workspaceStore before loading fresh GitHub data
    • Clear stores before branch-switch reload to prevent stale state carry-over
    • Replace async dynamic imports with synchronous getState().reset() calls for knowledge/decision stores

Added

  • Reset Application State Utility: New resetApplicationState() shared utility that clears all workspace data, filters, and cached content while preserving GitHub connection settings and authentication
  • ErrorBoundary Reset Button: Added "Reset & Retry" button to the error boundary fallback UI, allowing users to recover from errors without losing GitHub connection settings
  • Workspace Settings Troubleshooting: Added "Troubleshooting" section in Workspace Settings with a "Reset Application State" button and confirmation dialog

New Files

  • frontend/src/utils/resetApplicationState.ts — Shared utility for resetting application state while preserving connection settings

[3.1.0] - 2026-02-24

Added

  • Read-Only Viewer Mode: Separate Cloudflare Pages deployment for sharing private data models as read-only views
    • Build-time feature flags (VITE_VIEWER_*) lock the app to a specific private GitHub repo
    • Cloudflare Pages Function proxy (/api/github/*) authenticates via GitHub App installation tokens — no credentials exposed to the browser
    • Server-side proxy enforces GET-only access restricted to the configured repository
    • GitHub App JWT signing (RS256) with PKCS#1-to-PKCS#8 key conversion using Web Crypto API
    • Installation token caching with automatic refresh
    • Auto-redirect from / to the configured workspace on load
    • Conditional routing: viewer mode strips all auth, home, and edit routes
    • All editing UI hidden: save/commit, create/delete, drag-and-drop, relationship creation, inline editing
    • Canvas set to view-only: nodes not draggable or connectable, click selects without opening editor
    • Table editor forced to read-only mode, modal titles show "View:" instead of "Edit:"
    • Knowledge, Decision, and Sketch panels show content without create/edit/delete controls
    • Auto-save, beforeunload warnings, and Git panels disabled in viewer mode
    • BPMN/DMN editors render without save capability
    • Viewer build script (cloudflare-build-viewer.sh) and separate wrangler config (wrangler.viewer.toml)
    • Access controlled via Cloudflare Access IP restrictions (configured externally)

Changed

  • GitHub API Layer: githubApi.ts and githubContentsService.ts now support proxied requests through /api/github when in viewer mode, with auth bypass for server-side token injection

New Files

  • frontend/src/services/viewerMode.tsisViewerMode() utility, single source of truth for viewer conditionals
  • frontend/src/pages/ViewerRedirect.tsx — Auto-redirect to configured repo workspace
  • frontend/functions/api/github/[[path]].ts — Cloudflare Pages Function GitHub API proxy
  • frontend/cloudflare-build-viewer.sh — Viewer-specific build script
  • wrangler.viewer.toml — Viewer Cloudflare Pages project config

[3.0.1] - 2026-02-04

Fixed

  • Sketch Persistence: Fixed sketches not being saved to disk or synced to GitHub
    • Added syncSketchToGitHub() and deleteSketchFromGitHub() functions to githubRepoSync.ts
    • Updated sketchStore.ts to call sync functions on add, update, and remove operations
    • Fixed workspaceStore.ts to pass sketches to saveWorkspaceV2() in auto-save and manual save
    • Fixed DomainTabs.tsx to include sketches when saving workspace

Unreleased

Added

  • SDK 2.3.0 Support: Updated to data-modelling-sdk 2.3.0
    • Extended InfrastructureType enum with 150+ infrastructure types covering message queues, streaming platforms, orchestration tools, data processing frameworks, cloud data platforms, ETL/ELT tools, and more
    • Added ODPS DataProduct fields: tenant, management_ports, owner, roles, servers, service_levels, pricing, terms, links, team_members
    • Updated workspace schema with new SystemV2, DomainV2, RelationshipV2 fields
    • Decision create_decision now requires mandatory author parameter (SDK 2.3.0 breaking change)

Removed

  • DuckDB-WASM Integration: Removed unused DuckDB-WASM integration (~3000 lines of code)
    • Removed @duckdb/duckdb-wasm package dependency
    • Removed src/services/database/ directory (duckdbService, syncEngine, schemaManager, queryBuilder, opfsManager)
    • Removed src/hooks/useDuckDB.ts, useQuery.ts, useSyncStatus.ts
    • Removed src/contexts/DuckDBContext.tsx
    • Removed src/types/duckdb.ts and src/types/database.ts
    • Removed src/components/dev/QueryConsole.tsx and DatabaseInspector.tsx
    • Removed src/components/database/ directory (ImportDatabaseDialog, ExportDatabaseDialog)
    • Removed src/components/settings/DatabaseSettings.tsx
    • Removed DuckDB-related Electron IPC handlers
    • Simplified build scripts (removed build:duckdb, build:all-wasm)
    • All data continues to flow through REST API and YAML files as before

Changed

  • Test Infrastructure: Improved test reliability and isolation
    • Added .catch() handlers to dynamic imports in stores to prevent unhandled rejections during test teardown
    • Added global mocks for apiClient, workspaceService, and githubRepoSync in test setup
    • Configured Vitest with pool: 'forks' and isolate: true for better test isolation

Added

  • PR Review Workflow: Complete pull request review workflow with inline comments
    • PR List Panel: Sidebar panel for browsing and filtering PRs with status indicators
    • Enhanced Diff Viewer: Line numbers, click-to-comment, inline comment threads
    • Inline Comments: Threaded review comments on specific lines of code
    • Review Submission: Submit reviews with Approve, Request Changes, or Comment options
    • Pending Reviews: Collect comments before submitting for batch review
    • Branch Switching: Switch to PR branch for full code review
    • Branch Comparison: Compare branches and view merge changes with diff preview
  • PR Review Components: Six new React components for PR review workflow
    • PRListPanel.tsx: Collapsible sidebar with PR filtering and status badges
    • PRFileDiffViewer.tsx: Enhanced diff viewer with line numbers and click-to-comment
    • PRInlineComment.tsx: Inline comment thread display with reply support
    • PRReviewSubmitDialog.tsx: Modal for submitting reviews with event type selection
    • BranchSwitcher.tsx: UI for switching between branches during review
    • BranchComparePanel.tsx: Compare branches with commit list and file changes
  • PR Review Types: TypeScript types for review workflow
    • PendingReviewComment: Comment awaiting submission with line/side info
    • ReviewThread: Threaded comment structure with resolved/outdated state
    • DiffLine: Parsed diff line with type, content, and line numbers
    • ParsedFileDiff: Complete file diff with hunks and statistics
    • DiffHunk: Individual diff hunk with header and lines
  • PR Review Store State: GitHub store extensions for review workflow
    • Pending review management (start, add comment, submit, discard)
    • Branch switching with previous branch tracking
    • PR list panel visibility toggle
    • Review comment and thread management
  • PR Review Tests: 37 new component tests for PR review workflow
    • PRListPanel.test.tsx: 8 tests for list rendering, selection, filtering
    • PRFileDiffViewer.test.tsx: 5 tests for diff display and comments
    • PRInlineComment.test.tsx: 5 tests for comment threads and replies
    • PRReviewSubmitDialog.test.tsx: 8 tests for review submission
    • BranchSwitcher.test.tsx: 4 tests for branch switching UI
    • BranchComparePanel.test.tsx: 7 tests for branch comparison

Changed

  • GitHubPRDetailPanel: Integrated new PR review components for inline commenting
  • ModelEditor: Added PR List Panel toggle button in toolbar
  • GitHub Store Tests: Extended with 14 new tests for pending review and branch switching

[3.0.0] - 2026-02-02

Added

  • Full Git Integration: Complete Git version control integration for workspaces
    • Repository initialization and status monitoring
    • Staging, committing, and viewing commit history
    • Branch management (create, switch, delete, merge)
    • Remote operations (push, pull, fetch)
    • Stash management (save, apply, pop, drop)
    • Cherry-pick commits between branches
    • Interactive rebase support
    • Tag management (create, delete, push)
    • Git blame for file history tracking
    • Merge conflict detection and resolution
  • GitHub Integration: Full GitHub API integration for collaborative workflows
    • Personal Access Token (PAT) authentication
    • GitHub App OAuth authentication with easy switching
    • Repository connection and management
    • Pull request support:
      • List, view, and create pull requests
      • Add comments and review comments
      • Approve, request changes, or comment reviews
      • Merge PRs (merge, squash, rebase strategies)
      • Conflict detection before merge
    • Issue viewing and management
    • Branch protection status display
  • Git Panel UI: New Git panel in the application sidebar
    • File staging with checkbox selection
    • Commit message editor with conventional commit support
    • Branch selector with create/switch/delete actions
    • Remote operations toolbar (push, pull, fetch)
    • Commit history viewer with diff display
    • Stash list with apply/pop/drop actions
  • GitHub Panel UI: Dedicated GitHub panel for repository operations
    • Repository connection dialog with PAT/OAuth options
    • Pull request list with status indicators
    • PR detail view with files changed, comments, reviews
    • Create PR dialog with template support
    • Review submission interface
  • Help Panel System: Extensible in-app help documentation
    • Searchable help topics with scoring algorithm
    • Contextual help based on current view
    • Keyboard shortcuts (F1, Cmd+?)
    • Category-based organization
    • Comprehensive Git documentation (8 topics):
      • Git Integration Overview
      • Authentication Methods (PAT, GitHub App)
      • Basic Workflow (staging, commits, push/pull)
      • Branch Management
      • GitHub Pull Requests
      • Advanced Operations (stash, rebase, cherry-pick, tags)
      • Browser vs Electron differences
      • Troubleshooting guide
    • Getting Started guide
    • Keyboard shortcuts reference
  • Electron Release Workflow: GitHub Actions workflow for building signed Electron apps
    • Multi-platform builds (macOS, Windows, Linux)
    • macOS code signing and notarization support
    • Windows code signing support (optional)
    • Artifact upload to GitHub Releases
    • SHA256 checksums for all artifacts
  • Test Coverage: 116 new unit tests
    • helpStore.test.ts: 23 tests for help panel state
    • help.test.ts: 22 tests for search and filtering
    • githubStore.test.ts: 34 tests for GitHub state management
    • gitStore.test.ts: 37 tests for Git state management

Changed

  • SDK Upgrade: Works with @offenedatenmodellierung/data-modelling-sdk v2.1.0+
  • Test Count: Increased from 744 to 860 tests
  • React Upgrade: Using React 19.2.4 with latest features

Security

  • Fixed all npm audit vulnerabilities (0 vulnerabilities)
    • dompurify: Override to ^3.3.1 (fixes XSS GHSA-vhxf-7vqr-mrjg)
    • nanoid: Override to ^3.3.8 (fixes predictable ID GHSA-mwcw-c2x4-8c55)
    • mermaid: Override to ^10.9.4 (fixes XSS GHSA-7rqq-prvp-x9jh)

Dependencies

  • Added simple-git: ^3.30.0 for Git operations in Electron

[2.5.0] - 2026-02-01

Added

  • Excalidraw Sketches: New freeform diagramming feature with Excalidraw integration
    • Sketch types: architecture, dataflow, entity-relationship, sequence, flowchart, wireframe, concept, infrastructure, other
    • Status workflow: draft → review → published → archived
    • Per-domain organization with sequential numbering
    • Full-featured editor with toolbar and modal interface
    • Read-only viewer mode with export options
    • List view with thumbnails and filtering (by status, type, search)
    • Link sketches to tables, systems, decisions, and knowledge articles
    • Related sketches cross-referencing
    • Export to PNG, SVG, and JSON formats
  • Sketch Components:
    • ExcalidrawEditor: Modal editor following BPMNEditor pattern with deferred initialization
    • SketchPanel: Two-panel layout (list + viewer/editor) following KnowledgePanel pattern
    • SketchList: Filterable list with thumbnail previews
    • SketchViewer: Read-only view with export dropdown
  • Sketch Service: Parse, validate, and export utilities in sketchService.ts
    • Dual format parsing (SDK camelCase and frontend snake_case)
    • Full validation against SDK v2.1.0 sketch-schema.json
    • Thumbnail generation
    • PNG/SVG export via Excalidraw utilities
  • Sketch Store: Zustand store in sketchStore.ts
    • CRUD operations with auto-numbering per domain
    • Linking operations for tables, systems, articles, decisions, related sketches
    • Filtering by domain, status, type, and search term
    • Selectors: getSketchesByDomain, getSketchesByStatus, getSketchesByType, getNextNumber
  • Workspace Persistence: Sketches saved to sketches/ directory
    • File pattern: {workspace}_{domain}_{name}.sketch.json
    • Global sketches: {workspace}_global_{name}.sketch.json
    • Integrated with workspaceV2Loader and workspaceV2Saver
  • Sketch Tests: Comprehensive unit test coverage
    • sketchStore.test.ts: 50 tests for store operations
    • sketchService.test.ts: 37 tests for service utilities

Changed

  • SDK Upgrade: Upgraded @offenedatenmodellierung/data-modelling-sdk from v2.0.9 to v2.1.0
    • SDK v2.1.0 includes comprehensive sketch support with sketch-schema.json
    • New SketchType and SketchStatus enums
    • Linked assets, decisions, and knowledge fields
  • View Modes: Added 'sketch' to ViewMode type for Sketch panel navigation
  • Editor Modal: Extended EditorType union to include 'excalidraw'
  • Test Count: Increased from 657 to 744 tests

Dependencies

  • Added @excalidraw/excalidraw: ^0.18.0 for freeform diagramming
  • Upgraded react and react-dom: 18.2.0 → 19.2.4
  • Upgraded tailwindcss: 3.4.0 → 4.1.18 (CSS-based config)
  • Upgraded @duckdb/duckdb-wasm: 1.29.0 → 1.32.0
  • Upgraded electron: 39.2.7 → 40.1.0
  • Upgraded lint-staged: 15.5.2 → 16.2.7
  • Security vulnerabilities reduced from 15 to 6

[2.4.4] - 2026-02-02

Fixed

  • Quality Rules Export from Imported Contracts: Fixed quality rules not being exported for columns imported from external data contracts
    • Quality rules with type and implementation fields (but no dimension field) were being dropped during export
    • Updated constraintsToQualityArray to recognize and preserve quality rules in various formats
    • Now handles quality rules with type, implementation, engine, expectation, rule, or check fields
    • Includes catch-all to preserve any non-empty quality rule objects to prevent data loss

[2.4.3] - 2026-01-28

Changed

  • SDK Upgrade: Upgraded @offenedatenmodellierung/data-modelling-sdk from v2.0.6 to v2.0.9
    • SDK v2.0.9 includes stable YAML key ordering for ODCS, ODPS, and CADS exports
    • Adds missing description field to Workspace struct
    • Enhanced PDF/Markdown export with comprehensive column details

Fixed

  • YAML Export Determinism: Fixed high git churn from non-deterministic YAML field ordering
    • ODCS contract export now uses SDK's export_odcs_yaml_v2() for consistent field ordering
    • Workspace export now uses SDK's export_workspace_to_yaml() for consistent field ordering
    • Eliminates unnecessary git diffs when file content hasn't meaningfully changed
  • Valid Values Input Tests: Fixed failing tests for ValidValuesInput component
    • Updated tests to match tag-based UI (add via Enter/comma, values shown as removable tags)

[2.4.2] - 2026-01-19

Fixed

  • Column Details Modal Persistence: Fixed ODCS fields not being saved from Column Details Modal
    • logicalType, physicalType, businessName, classification, quality_rules, and other ODCS v3.1.0 fields were being ignored when saving
    • Changed handleColumnChange in TableEditor to use spread operator instead of field whitelist
    • All column properties from the Details modal are now correctly persisted and exported
  • Quality Rules Export: Fixed quality rules not being exported to ODCS format
    • Quality rules set in Column Details Modal (valid values, min/max, pattern, etc.) are now converted to ODCS great-expectations format during export
    • Added constraintsToQualityArray helper to convert constraint objects to ODCS quality array format
    • Fixed ODCS quality rules format to comply with v3.1.0 spec: type must be custom/text/library/sql, not the GE expectation name
    • Added required ODCS fields: dimension, name, engine, and moved expectation name to implementation.expectation
  • Comma-Separated Input Fields: Fixed inability to type commas in comma-separated value inputs
    • Valid Values (enum), Examples, and Source Objects fields now allow typing commas
    • Created CommaSeparatedInput component that parses values on blur instead of on every keystroke
  • Valid Values UX: Improved Valid Values input in Quality Rules
    • Changed from comma-separated text input to list-based tag UI for better readability
    • Values display as removable chips/tags instead of a long comma-separated string
    • Add values by pressing Enter, comma, or clicking Add button
    • Support for pasting comma-separated values to add multiple at once
    • Scrollable list for many values with max height constraint
  • Compound Keys Display: Fixed compound keys not showing in logical view on canvas
    • Compound primary keys now display with PK indicator and column names joined by +
    • Compound unique keys display with CK indicator
    • Composite foreign keys display with FK indicator (detected from relationships or is_foreign_key flags)
  • Compound Keys Export/Import: Fixed compound keys not being saved/loaded in ODCS format
    • Compound primary keys now set primaryKeyPosition on columns per ODCS v3.1.0 spec
    • All compound keys stored in table customProperties for full round-trip support
    • Import reads compound keys from customProperties or reconstructs from primaryKeyPosition
  • Data Type Quick Entry: Removed disconnected data type dropdown from column editor
    • The dropdown was separate from physicalType in the Details modal, causing confusion
    • Type is now displayed as read-only; edit via the "Details" button to set physical/logical types

Added

  • Column Details Modal Tests: Added comprehensive unit tests for ColumnDetailsModal
    • Tests for comma-separated input functionality
    • Tests for valid values, examples, and source objects fields
    • Tests for modal rendering and tab navigation
  • Compound Key Display Tests: Added unit tests for compound key rendering in CanvasNode
    • Tests for primary compound keys (PK indicator)
    • Tests for unique compound keys (CK indicator)
    • Tests for composite foreign keys (FK indicator)
  • Column Details E2E Test: Added e2e test for column details modal data persistence
    • Verifies physical/logical type changes are saved and exported correctly
    • Verifies quality rules are preserved in ODCS export
  • Compound Key Round-Trip Tests: Added unit tests for compound key export/import
    • Tests for exporting compound primary keys with primaryKeyPosition
    • Tests for exporting compound unique keys in customProperties
    • Tests for importing compound keys from customProperties
    • Tests for reconstructing compound keys from primaryKeyPosition

[2.4.1] - 2026-01-14

Fixed

  • Nested Column Import: Fixed ODCS import not processing nested array/object columns
    • Columns with items.properties (array types) and properties (object types) now recursively processed
    • Child columns correctly linked via parent_column_id for hierarchical display
    • Supports arbitrarily deep nesting (3+ levels tested)
  • Nested Column Export: Fixed ODCS export not rebuilding nested structure from flat columns
    • Columns with parent_column_id now correctly rebuilt into items.properties (array) or properties (object)
    • Child columns excluded from root level during export
    • Preserves full nested hierarchy on round-trip (import → edit → export)
  • Nested Column Hierarchy Preservation: Fixed processNestedColumns overwriting ODCS hierarchy
    • Now preserves existing parent_column_id from ODCS import instead of only using dot notation
    • Dot notation detection only used as fallback for SQL imports without existing hierarchy
    • Maps original column IDs to preserve parent_column_id references when IDs are regenerated
    • Fixes nested columns being lost when saving after ODCS import
  • Column Order Preservation: Fixed column order not being preserved on save
    • Columns are now sorted by order property before export to ODCS
    • Checks both direct order property and customProperties array for order value
  • KnowledgeStore Infinite Loop: Fixed setFilter being called hundreds of times per second
    • Updated setFilter to support functional updates: setFilter(prev => ({ ...prev, ... }))
    • Removed filter from useEffect dependency arrays in KnowledgeList and DecisionList
    • Removed verbose console logging from setFilter

Added

  • Nested Column E2E Tests: Added alerts table to ODCS test fixture with nested structures
    • rules_triggered array with nested items.properties
    • bet_metadata object with direct properties
    • Deeply nested operation object (3 levels)
    • New test suite for nested column import verification
  • Nested Column Export Tests: Added unit tests for nested column export
    • Tests for array type columns rebuilding items.properties
    • Tests for object type columns rebuilding properties
    • Tests for deeply nested columns (3 levels)
    • Tests ensuring child columns excluded from root level

2.4.0 - 2026-01-14

Added

  • Version Information Panel: Workspace Settings dialog now displays version information
    • Application version (from package.json)
    • WASM SDK version (minimum required: 2.0.6+)
    • DuckDB WASM version (from runtime)
  • Developer Documentation: Added Development section to README with:
    • Example workspace rebuild instructions (npm run rebuild:examples)
    • ODCS migration script usage (npm run migrate:odcs)
    • Step-by-step guide for adding new example workspaces

Changed

  • SDK Version: Upgraded to data-modelling-sdk 2.0.6+ (minimum requirement)
    • Removed support for SDK versions prior to 2.0.6
    • Removed fallback YAML parsing logic (~930 lines of dead code)
    • V2 methods now required for lossless ODCS round-trip

Fixed

  • Table-System Linkage: Fixed tables not being linked to systems after workspace reload
    • Tables now preserve metadata.system_id from contract.id during ODCS import
    • System loading uses smart fallback: workspace.yaml table_ids → metadata.system_id → naming convention
  • Column Order Persistence: Fixed column order field not persisting correctly across save/load cycles
  • Contract ID Preservation: Contract-level id field now preserved correctly as system ID

2.2.0 - 2026-01-12

Added

  • Cross-Domain Support: Knowledge articles and decisions can now be marked as cross-domain
    • Cross-domain items (no domain_id) are visible in all domains
    • New checkbox in ArticleEditor and DecisionEditor to toggle cross-domain status
    • Visual "CROSS-DOMAIN" label in list components for cross-domain items
    • Store filters updated to always include cross-domain items when filtering by domain
  • YAML Export: Added YAML export option to ArticleViewer and DecisionViewer
    • Export knowledge articles and decisions as portable YAML for sharing between systems
  • YAML Import: New import dialogs for knowledge articles and decisions
    • ArticleImportDialog and DecisionImportDialog components
    • Import via file upload, URL, or paste content
    • Option to keep imported items as cross-domain
    • New Article/Decision buttons converted to dropdowns with "Import from YAML" option
  • SDK Version: Upgraded to data-modelling-sdk 2.0.0

Fixed

  • Example Workspace Loading: Fixed Jaffleshop example not loading correctly on first open
    • Tables, knowledge articles, and decisions were missing due to file path filtering issue
    • Fixed filterStringFilesByDomain to correctly extract filename from paths with subdirectories (e.g., odcs/filename.odcs.yaml)

[2.1.3] - 2026-01-08

Added

  • Bundled Example Workspaces: Jaffleshop example workspace now appears in the Home page workspace list
    • Complete e-commerce data platform with medallion architecture (bronze/silver/gold)
    • 19 ODCS data contracts, 2 ODPS data products, 3 BPMN processes
    • 3 Knowledge articles, 3 Architecture decision records
    • Examples automatically refresh when a new app version is deployed
  • App Version Injection: Added __APP_VERSION__ build-time constant via Vite define

Changed

  • Workspace Loader: Added loadFromStringFiles method to WorkspaceV2Loader for loading workspaces from pre-loaded string content (used by bundled examples)
  • Project Structure: Moved Jaffleshop example from /examples/ to /frontend/public/examples/ for bundling with the app

[2.1.2] - 2026-01-08

Fixed

  • Tags Persistence: Fixed tags disappearing when canvas redraws by including tags in table data change detection hash
  • V2 Save Format: Save button now uses V2 flat file format instead of V1 folder-based format
  • SDK Field Naming: Fixed SDK export_to_odcs_yaml deserialization error by converting snake_case fields to camelCase for SDK compatibility
  • File Deletion on Save: Deleted resources now properly remove orphaned files from disk during autosave and manual save
  • Security Vulnerabilities: Updated react-router packages to fix CSRF, XSS, and open redirect vulnerabilities

Changed

  • SDK Version: Upgraded to data-modelling-sdk 1.13.6
    • Fixed ODCS id field preservation issue where contract UUIDs were lost during TableData construction
    • Added ODCS v3.1.0 contract-level field preservation: id, apiVersion, version, status, kind, domain, dataProduct, tenant, description, servers, team, support, roles, slaProperties, quality, price, tags, customProperties, authoritativeDefinitions, contractCreatedTs, odcsMetadata
    • SystemReference now includes optional table_ids and asset_ids UUID arrays for explicit system mapping
  • Canvas Zoom: Increased zoom out limit from default to 0.1 (10%) and zoom in limit to 4x on Analytical and Operational Canvas views
  • Relationship Editor: Relationship Type and Cardinality dropdowns now sync bidirectionally; changing one updates the other automatically
  • Connection Handles: Added 14 connection points per node (tables, systems, compute assets):
    • 4 corner handles (top-left, top-right, bottom-left, bottom-right)
    • 2 center handles (top-center, bottom-center)
    • 6 side handles (3 on left, 3 on right at 25%, 50%, 75% positions)

[2.1.1] - 2026-01-08

Fixed

  • SDK Version: Upgraded to data-modelling-sdk 1.13.3 for knowledge base and decision record support
  • BPMN Name Extraction: Improved XML parsing with multiple fallback methods (getElementsByTagNameNS, getElementsByTagName, regex) for reliable process name extraction
  • Knowledge Base Loading: Added fallback YAML parser for .kb.yaml files when SDK methods unavailable
  • Decision Records Loading: Added fallback YAML parser for .adr.yaml files when SDK methods unavailable
  • Workspace Loading: Fixed knowledge articles and decision records not populating their respective stores when loading workspace from folder

Added

  • Jaffleshop Example: Complete example workspace demonstrating:
    • 19 ODCS data contracts across bronze/silver/gold medallion layers
    • 2 ODPS data products
    • 3 BPMN processes (Raw Ingestion, Staging Transform, Mart Build)
    • 3 Knowledge Base articles (Architecture Overview, Data Quality Standards, MetricFlow Guide)
    • 3 Architecture Decision Records (DuckDB Lakehouse, Medallion Architecture, ODCS Contracts)
    • 15 table relationships forming star schema
    • System linking via customProperties metadata
  • Debug Logging: Added domain ID logging for troubleshooting table/domain associations

[2.1.0] - 2026-01-08

Added

  • DuckDB-WASM Integration: Complete in-browser SQL database with OPFS persistence
    • DuckDB-WASM 1.29.0 (DuckDB 1.4.3) for in-browser SQL queries
    • OPFS (Origin Private File System) for persistent storage
    • Automatic fallback to in-memory mode for unsupported browsers
    • Type-safe query builder with fluent API
    • YAML ↔ DuckDB synchronization engine with hash-based change detection
    • React hooks: useDuckDB, useQuery, useMutation, useSyncStatus
    • DuckDB context provider for application-wide database access
  • Database UI Components:
    • DatabaseSettings: OPFS status, storage quota, sync configuration
    • StorageStatusBanner: Browser compatibility warnings
    • ExportDatabaseDialog: Export to JSON, CSV, or DuckDB format
    • ImportDatabaseDialog: Import with merge/replace options
    • QueryConsole: Developer SQL query interface (dev mode)
    • DatabaseInspector: Table browser and schema viewer (dev mode)
  • Electron DuckDB Support:
    • Native file export/import via IPC handlers
    • Git hooks integration for DuckDB ↔ YAML sync (pre-commit, post-checkout, post-merge)
  • Documentation:
    • frontend/docs/DUCKDB_GUIDE.md: User guide with browser compatibility and architecture
    • frontend/docs/api/DUCKDB_SERVICE.md: DuckDB service API reference
    • frontend/docs/api/SYNC_ENGINE.md: Sync engine API reference
    • frontend/docs/DUCKDB_BINDINGS.md: DuckDB-WASM bindings documentation
    • frontend/docs/SDK_BINDINGS.md: SDK WASM bindings documentation
  • Testing: 117 new unit tests for DuckDB services
    • duckdbService.test.ts: 30 API contract tests
    • queryBuilder.test.ts: 50 query builder tests
    • opfsManager.test.ts: 18 OPFS manager tests
    • syncEngine.test.ts: 19 sync engine tests

Changed

  • SDK Version: Upgraded to data-modelling-sdk 1.13.2
  • Build Configuration: Vite configured for WASM MIME types and SharedArrayBuffer headers
  • Test Suite: Expanded from 487 to 604 tests

2.0.0 - 2026-01-07

Added

  • SDK 1.13.1 Upgrade: Major upgrade to data-modelling-sdk v1.13.1 with new features
  • Decision Logs (MADR): Architecture Decision Records management
    • MADR format support with status workflow (Draft → Proposed → Accepted/Rejected → Superseded)
    • Decision categories: Architecture, Technology, Process, Security, Data, Integration
    • Decision options with pros/cons tracking
    • Related decisions and knowledge articles linking
    • Markdown export functionality
    • Full-text search and filtering by status, category, domain
  • Knowledge Base: Documentation and knowledge management system
    • Article types: Guide, Tutorial, Reference, Concept, Troubleshooting, Runbook
    • Publishing workflow: Draft → Review → Published → Archived
    • Full-text search across articles
    • Related articles and decisions cross-referencing
    • Prerequisites and See Also linking
    • Author and reviewer tracking
    • Markdown content with rich rendering
  • DuckDB Backend: Optional embedded analytical database
    • YAML ↔ Database synchronization
    • SQL query execution for advanced analytics
    • Connection status monitoring
    • Configurable sync strategies (auto-sync, watch, sync-on-save)
    • Conflict resolution options (database-wins, yaml-wins, prompt)
  • PostgreSQL Backend: Server-based database option
    • Full PostgreSQL connection support with SSL
    • Connection pooling configuration
    • Team collaboration support
  • Database Configuration: New .data-model.toml configuration file
    • Database backend selection (none, duckdb, postgres)
    • Sync configuration options
    • Git hooks integration for version control
  • UI Components: New components for decisions and knowledge
    • DecisionList with filtering, sorting, search
    • DecisionViewer with status workflow actions
    • DecisionEditor for creating and editing decisions
    • KnowledgeList with type and status filtering
    • ArticleViewer with markdown rendering
    • ArticleEditor for content management
    • Status and category badges
  • Domain Integration: Link decisions and knowledge to domains
    • Decision counts shown in domain tabs
    • Knowledge article counts in domain tabs
    • Domain-scoped views for decisions and articles
  • Cross-Model Linking: OpenAPI/CADS asset linking
    • Link decisions to external specifications
    • Reference knowledge from API definitions

Changed

  • SDK Version: Upgraded from 1.11.0 to 1.13.1
  • README: Updated with SDK 1.13.1 features and documentation links
  • Test Coverage: Added comprehensive test suites for new features
    • Unit tests for decision and knowledge services
    • Unit tests for database service
    • Store tests for decision and knowledge state management
    • Component tests for decision and knowledge UI
    • Integration tests for database sync
    • E2E tests for decision and knowledge workflows

Documentation

  • Configuration Guide: New docs/CONFIGURATION.md for database setup
  • Decision Logs Guide: New docs/DECISION_LOGS.md user guide
  • Knowledge Base Guide: New docs/KNOWLEDGE_BASE.md user guide

1.1.2 - 2026-01-06

Added

  • Cloudflare Pages Support: Added wrangler.toml configuration for Cloudflare Pages deployment
  • Automated Releases: New consolidated CI/CD workflow that automatically creates GitHub releases on merge to main
  • Pre-built WASM SDK: Build script now downloads pre-built WASM SDK from GitHub releases instead of building from source

Changed

  • SDK Version: Upgraded to data-modelling-sdk v1.8.4 with separate ODCL parser and improved validation
  • Build Process: Removed SDK git submodule in favor of downloading pre-built WASM binaries (faster builds, no Rust required)
  • GitHub Workflows: Consolidated three separate workflows (ci.yml, build-test.yml, build-release.yml) into single main.yml
  • ESLint Configuration: Updated package.json lint scripts to use ESLINT_USE_FLAT_CONFIG=false for compatibility
  • Cloudflare Documentation: Simplified deployment guide to use Cloudflare Pages Git integration

Fixed

  • TypeScript Errors: Fixed unused variable warnings for deprecated fallback parser methods
  • Build Output: Fixed Cloudflare Pages deployment to use correct output directory (frontend/dist)
  • Lint-Staged: Removed ESLint from pre-commit hook to avoid configuration conflicts
  • Electron Build: Removed unused statSync import and unnecessary eslint-disable directives

Removed

  • Removed SDK git submodule (no longer needed with pre-built WASM downloads)
  • Removed obsolete migration documentation files (SDK_1.8.3_*)
  • Removed obsolete feature requests and GitHub issue templates
  • Removed unused test files for deprecated features

1.1.0 - 2026-01-04

Changed

  • Offline Mode Only: Application now explicitly supports offline mode only. All API-related documentation and bug reports have been removed.
  • Documentation: Comprehensive documentation updates:
    • Updated README.md to reflect offline-only mode and Electron desktop app focus
    • Rewrote Electron build guide with clear step-by-step instructions
    • Updated offline mode documentation to remove API references
    • Updated HOW_TO_RUN.md and QUICK_START.md for offline mode
  • CI/CD: New GitHub Actions workflow (.github/workflows/build-release.yml):
    • Lint and format checks
    • Test suite with coverage requirements
    • Multi-platform builds (Ubuntu, macOS, Windows)
    • Automated release creation with installers when tags are pushed
    • Security audits

Removed

  • Removed outdated API bug reports and integration documentation
  • Removed API-related setup guides (GitHub OAuth, API integration)
  • Removed references to Docker Compose and API server requirements

Fixed

  • Documentation now accurately reflects current application state (offline mode only)
  • Build instructions clarified for Electron app development

[0.5.0] - 2025-01-XX

Added - Phase 7: Personal and Shared Workspace Management

  • Workspace Management: Complete workspace CRUD operations
    • Workspace creation (personal and shared types)
    • Workspace renaming and deletion
    • Workspace type conversion (personal to shared)
    • Workspace switching with state save/load
  • Workspace UI Components: User interface for workspace management
    • WorkspaceList: Displays all available workspaces (personal and shared)
    • WorkspaceSelector: Dropdown selector for current workspace
    • WorkspaceSettings: Dialog for managing workspace settings, collaborators, and permissions
    • VersionHistory: Dialog for viewing PostgreSQL-based version history (online mode)
  • Workspace Service: API integration for workspace operations
    • Create, rename, delete workspaces
    • Add/remove collaborators
    • Update collaborator access levels (read/edit)
    • Convert workspace type (personal to shared)
  • Versioning Service: PostgreSQL-based version history
    • Get workspace version history
    • View specific version details
    • Restore workspace to previous version
  • Home Page Integration: Enhanced home page with workspace management
    • Workspace list display with personal/shared indicators
    • Workspace creation dialog (online and offline modes)
    • Workspace selection and navigation
  • ModelEditor Integration: Workspace management in editor
    • Workspace settings button in header
    • Version history button (online mode only)
    • Workspace settings and version history dialogs
  • Tests: Comprehensive test coverage
    • Unit tests for workspace service and versioning service
    • Unit tests for workspace store
    • Component tests for all workspace UI components
    • Integration tests for workspace management workflow
    • E2E tests for complete user story 5 workflow

Added - Phase 6: Offline Mode with Local File Storage

  • Offline Synchronization: Online/offline sync service
    • Sync workspace state between local and remote
    • Auto-merge on connection restoration
    • Conflict detection and resolution (remote wins strategy)
    • Manual conflict resolution support
  • Conflict Resolution: Conflict handling system
    • Conflict detection during sync
    • Remote wins strategy (configurable)
    • Export conflicts for manual resolution
    • Apply local or remote version manually
  • Auto-Save: Configurable auto-save functionality
    • WebSocket real-time save for online mode
    • Configurable interval auto-save for offline mode (default: 5 minutes)
    • User-configurable auto-save interval
    • Auto-save enable/disable toggle
  • Browser Refresh Handling: State preservation on refresh
    • Detect local and remote changes
    • User choice for handling conflicts on refresh
    • State persistence across browser sessions
  • Git Versioning: Offline version control
    • Initialize Git repository for workspace
    • Commit changes with messages
    • View version history
    • Checkout specific versions
    • Export version snapshots
  • Retry Logic: Enhanced error handling
    • Retry failed save operations (5 attempts)
    • Jitter-based exponential backoff
    • User manual retry option after max attempts
    • Data held in memory during retry failures
  • Offline File Operations: Enhanced local file handling
    • Open workspace folder (containing domain subfolders)
    • Support for workspace folder structure: workspace-folder/domain-folder/tables.yaml and relationships.yaml
    • Electron file system integration
    • Browser file picker integration
  • Tests: Comprehensive test coverage
    • Unit tests for sync service and conflict resolver
    • Unit tests for auto-save functionality
    • Unit tests for Git versioning service
    • Integration tests for offline sync workflow
    • E2E tests for complete user story 4 workflow

Changed

  • Home page now supports workspace creation and selection
  • ModelEditor includes workspace settings and version history dialogs
  • Workspace store enhanced with auto-save and browser refresh handling
  • Offline mode now supports opening workspace folders (not just single files)

[0.3.0] - 2025-01-XX

Added - Phase 5: Multi-User Collaboration with Real-Time Updates

  • WebSocket Collaboration: Real-time collaboration via WebSocket connections
    • WebSocket client service with automatic reconnection and exponential backoff
    • JWT authentication for WebSocket connections
    • Connection status monitoring (connected/disconnected/reconnecting)
  • Collaboration Service: Real-time update handling for tables and relationships
    • Table update broadcasting and receiving
    • Relationship update broadcasting and receiving
    • Presence updates (cursor position, selected elements)
    • Conflict detection and warnings
    • Last-change-wins conflict resolution strategy
  • Collaboration Store: Zustand store for collaboration state management
    • Participant management (add, update, remove)
    • Presence tracking with cursor positions and selected elements
    • Conflict management with conflict warnings
    • Access control (primary owner per canvas, edit/read permissions)
  • UI Components: Collaboration user interface components
    • PresenceIndicator: Shows who's online and what they're editing
    • CollaborationStatus: Displays connection status and warnings
    • ConflictResolver: Handles and displays conflict warnings
  • React Hooks: Custom hooks for collaboration features
    • useWebSocket: Manages WebSocket connections
    • useCollaboration: Manages collaboration features and real-time updates
  • ModelEditor Integration: Full integration of collaboration features
    • Collaboration components in header
    • Real-time updates applied to model store
    • Conflict resolver dialog integration
    • Online/offline mode awareness
  • Tests: Comprehensive test coverage
    • Unit tests for WebSocket client and collaboration service
    • Unit tests for collaboration store
    • Component tests for collaboration UI components
    • Hook tests for useWebSocket and useCollaboration
    • Integration tests for real-time collaboration workflow
    • E2E tests for complete user story 3 workflow

Changed

  • ModelEditor now includes collaboration status and presence indicators
  • Collaboration features automatically disabled in offline mode

[0.2.0] - 2025-01-XX

Added

  • Initial OpenAPI specification reverse-engineered from frontend code
  • GitHub Actions CI/CD workflow for automated testing and building
  • Comprehensive test suite with 95% coverage requirement
  • Electron desktop app support for macOS
  • Offline mode with WASM SDK integration
  • Dual-mode operation (online via API, offline via WASM SDK)
  • Import/Export support for ODCS, SQL, AVRO, JSON Schema, and Protobuf formats
  • Domain-based canvas tabs for organizing large models
  • Crow's feet notation for relationship visualization
  • Multi-user collaboration via WebSockets
  • Authentication via GitHub OAuth (web and desktop flows)
  • Platform abstraction layer for browser and Electron environments
  • Auto-save functionality (WebSocket real-time for online, configurable interval for offline)
  • Error handling with retry logic (5 attempts with jitter backoff)
  • Accessibility features (WCAG 2.1 Level AA compliance)
  • Responsive design for tablet and desktop viewports

Changed

  • Updated project constitution to require 95% test coverage and prohibit partial implementations
  • Integrated Electron as primary target from project start
  • Refactored authentication to support dynamic redirect_uri for multiple frontend instances
  • Updated OAuth flow to support desktop applications with polling mechanism

Fixed

  • Electron app blank screen issue (fixed asset paths for file:// protocol)
  • Electron CommonJS/ES Module compatibility issues
  • OAuth callback handling for web applications
  • API client blocking requests in offline mode
  • CardinalityEdge component TypeScript errors
  • WASM SDK build integration into frontend build process

Security

  • Implemented JWT token refresh mechanism
  • Added security audit step to CI/CD pipeline
  • Context isolation enabled in Electron preload scripts

0.1.0 - 2025-01-01

Added

  • Initial project setup
  • Frontend React application with TypeScript
  • Vite build configuration
  • TailwindCSS styling
  • ReactFlow infinite canvas
  • Zustand state management
  • TanStack Query for server state
  • Basic workspace and domain management
  • Table and relationship CRUD operations
  • ODCS 3.1.0 format support
  • Local file storage for offline mode
  • IndexedDB caching
  • Platform detection and abstraction
  • Electron main and preload scripts
  • Test infrastructure (Vitest, Playwright, Testing Library)
  • ESLint and Prettier configuration
  • TypeScript strict mode
  • GitHub Actions CI/CD workflow