# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.0.9] - 2026-01-28
### Fixed
- **fix(export)**: Stable YAML key ordering for all exporters
- Replaced manual `serde_yaml::Mapping` construction with struct-based serialization
- ODCS, ODPS, and CADS exporters now produce consistent key ordering matching struct field definitions
- Eliminates git diff noise from alphabetical key sorting (BTreeMap behavior)
- Re-exporting the same data produces identical YAML output
### Changed
- **refactor(odcs)**: Simplified `ODCSExporter::export_table()` to use `ODCSContract::from_table()` converter
- Removed ~1500 lines of manual Mapping construction code
- All exports now use the same struct-based serialization path
- **refactor(odps)**: Migrated to struct-based serialization
- Added `#[serde(rename_all = "camelCase")]` to all ODPS structs
- Added `skip_serializing_if` for optional fields to produce clean YAML
- Removed ~764 lines of manual Mapping construction
- **refactor(cads)**: Migrated to struct-based serialization
- Added `skip_serializing_if` for optional fields
- Removed ~771 lines of manual Mapping construction
### Added
- **feat(odcs)**: Enhanced Column to Property converter
- `map_data_type_to_logical_type()` function for SQL to ODCS type mapping
- `parse_struct_fields_from_data_type()` for expanding STRUCT type definitions
- Proper handling of ARRAY<STRUCT<...>> nested types
- **feat(pdf)**: Comprehensive column details in PDF/Markdown export
- Added logical type options (min/max length, pattern, format, precision, scale)
- Added transformation metadata (source objects, logic, description)
- Added relationships and authoritative definitions
- Added column-level quality rules and tags
- Added composite/secondary key information
- Added partition key position and additional constraints
- **feat(workspace)**: Added `description` field to Workspace struct (GitHub #66)
- Optional description field for workspace metadata
- Displayed in UI and README generation
## [2.0.8] - 2026-01-14
### Fixed
- **chore**: Fix code formatting (cargo fmt)
## [2.0.7] - 2026-01-14
### Fixed
- **fix(odcl)**: Import model-level quality rules from ODCL Data Contract format (#64)
- Fixed bug where `models.<name>.quality` rules were not being captured during ODCL import
- Quality rules are now extracted from both root level and model level in Data Contract Specification format
- Ensures all quality rules defined at the model level are preserved when converting ODCL to ODCS
### Added
- **test(odcl)**: Comprehensive E2E tests for ODCL import
- 13 new tests verifying ODCL to ODCS conversion preserves all fields
- Tests based on official datacontract-specification examples
- Coverage for: model-level quality, field-level quality, metadata, servicelevels, terms, servers, tags, column descriptions, $ref resolution, and roundtrip export
## [2.0.6] - 2026-01-14
### Fixed
- **ci**: Increase crates.io indexing wait time to 60s to fix publish failures
## [2.0.5] - 2026-01-13
### Fixed
- **fix(odcs)**: Preserve customProperties at schema and column levels (#60)
- Added schema-level `customProperties` extraction in `parse_odcl_v3_all()`
- Updated `table_to_table_data()` to merge contract-level and schema-level customProperties
- Custom properties are now preserved at all three ODCS levels: contract, schema, and column
### Added
- **test(odcs)**: Comprehensive E2E round-trip tests for ODCS v3.1.0
- 51 tests covering all ODCS v3.1.0 specification fields
- Tests for contract-level, schema-level, and property-level fields
- Round-trip preservation tests via `import_contract`/`export_contract` v2 API
- Builder API tests for programmatic contract construction
## [2.0.4] - 2026-01-13
### Added
- **feat(odcs)**: Native ODCS data structures for lossless round-trip
- New `ODCSContract` struct representing full ODCS v3.1.0 contracts
- New `SchemaObject` struct for schema-level metadata (physicalName, businessName, etc.)
- New `Property` struct with nested support (`properties` for OBJECT, `items` for ARRAY)
- Supporting types: `QualityRule`, `CustomProperty`, `AuthoritativeDefinition`, `Team`, `Server`, etc.
- Converters: `From` trait implementations for Table/Column interop
- `ODCSContract::to_tables()` and `ODCSContract::from_tables()` for backwards compatibility
- `ODCSContract::to_table_data()` for UI rendering
- **feat(import)**: New `import_contract()` method for native ODCS parsing
- Returns `ODCSContract` instead of flattened `Table`/`Column` types
- Preserves all contract-level, schema-level, and property-level metadata
- Supports nested properties (OBJECT/ARRAY) hierarchically
- Multi-table contracts fully supported
- **feat(export)**: New `export_contract()` method for native ODCS serialization
- Directly serializes `ODCSContract` to YAML (no reconstruction needed)
- Zero data loss on round-trip
- `export_contract_validated()` variant with optional schema validation
- **feat(wasm)**: V2 WASM bindings for native ODCS API
- `parse_odcs_yaml_v2()` - Returns `ODCSContract` JSON
- `export_odcs_yaml_v2()` - Takes `ODCSContract` JSON, returns YAML
- `odcs_contract_to_tables()` - Convert contract to Table array
- `tables_to_odcs_contract()` - Convert Table array to contract
- `odcs_contract_to_table_data()` - Convert contract to TableData for UI
## [2.0.3] - 2026-01-12
### Fixed
- **fix(odcs)**: Full round-trip support for all column metadata fields
- **Export**: Nested STRUCT/ARRAY columns now export all metadata fields matching top-level columns
- **Import**: Parse all ODCS v3.1.0 column metadata fields during import
- Fields supported: `businessName`, `physicalName`, `logicalTypeOptions`
- Fields supported: `unique`, `primaryKey`, `primaryKeyPosition`
- Fields supported: `partitioned`, `partitionKeyPosition`, `clustered`
- Fields supported: `classification`, `criticalDataElement`, `encryptedName`
- Fields supported: `transformSourceObjects`, `transformLogic`, `transformDescription`
- Fields supported: `examples`, `authoritativeDefinitions`, `tags`, `customProperties`, `businessKey`
- Fixes data loss for column metadata on round-trip import/export
## [2.0.2] - 2026-01-12
### Fixed
- **fix(odcs)**: Export all column-level metadata fields to ODCS YAML
- Added export for: `businessName`, `physicalName`, `logicalTypeOptions`
- Added export for: `primaryKeyPosition`, `partitionKeyPosition`, `unique`, `partitioned`
- Added export for: `classification`, `criticalDataElement`, `encryptedName`
- Added export for: `transformSourceObjects`, `transformLogic`, `transformDescription`
- Added export for: `examples`, `authoritativeDefinitions`, `tags`
- Added export for: `customProperties` (fixes data loss on round-trip)
## [2.0.1] - 2026-01-12
### Fixed
- **fix(ci)**: Restructure CI/CD workflows for proper publish order
- Add `version-check.yml` as reusable workflow for version consistency
- Add `release-sdk.yml` for crates.io publishing (core before sdk)
- Update `release-cli.yml` to upload artifacts to GitHub release
- Update `release-wasm.yml` to only run manually or when called
- Update `publish.yml` as orchestrating wrapper
- Fix crates.io publish error by publishing dependencies in order
- Fix `pkg/package.json` not found error (generated during WASM build)
- Support dev releases with prerelease flag
## [2.0.0] - 2026-01-11
### Fixed
- **fix(pdf)**: Long URLs and field names now wrap correctly in PDF tables (#50)
- Text that exceeds column width is now broken with hyphen continuation markers
- Prevents text from overlapping into adjacent columns
- Works for URLs, long field names, and any text without natural break points
### Added
- **feat(staging)**: Real-time progress reporting for ingestion operations
- `IngestProgress` with multi-bar display (files, records, bytes throughput)
- `InferenceProgress` for schema inference operations
- `Spinner` for indeterminate operations
- `format_bytes()` and `format_number()` helper functions
- Uses `indicatif` crate for terminal progress bars
- **feat(s3)**: AWS S3 ingestion support (feature: `s3`)
- `S3Source` configuration with bucket, prefix, region, profile, endpoint
- `S3Ingester` with streaming file discovery and download
- Async file listing with pagination support
- Memory-efficient streaming downloads
- Integration with staging pipeline
- **feat(databricks)**: Databricks Unity Catalog Volumes ingestion (feature: `databricks`)
- `UnityVolumeSource` configuration with host, token, catalog, schema, volume
- `UnityVolumeIngester` using Databricks Files REST API
- Secure token handling with `SecureCredentials` wrapper
- File discovery and download from Unity Catalog Volumes
- **feat(security)**: Secure credential handling
- `SecureCredentials` wrapper type preventing accidental Display/Debug logging
- `redact_secret()` function showing only first N characters
- `redact_secrets_in_string()` with regex-based detection for:
- AWS access keys (AKIA...)
- AWS secret keys
- Bearer tokens
- URL-embedded passwords
- All credential types implement safe Display trait
- **feat(tests)**: Comprehensive integration and performance tests
- 10 integration tests covering full staging pipeline
- Performance benchmarks for 10K, 100K, and 1M records
- Criterion benchmarks for staging operations
- **feat(pipeline)**: Full data pipeline orchestration (Phase 6)
- `PipelineExecutor` for running multi-stage data pipelines
- `PipelineConfig` with comprehensive configuration options
- `PipelineStage` enum: Ingest, Infer, Refine, Map, Export
- Checkpointing and resume support with `Checkpoint` struct
- Dry-run mode for validation without execution
- Stage timing and success/failure tracking
- CLI command: `odm pipeline run` with 15+ options
- CLI command: `odm pipeline status` for pipeline monitoring
- 20 unit tests for pipeline functionality
- **feat(mapping)**: Schema-to-schema mapping with transformation generation (Phase 5)
- `SchemaMatcher` with multiple matching algorithms
- Match methods: Exact, CaseInsensitive, Fuzzy (Levenshtein), Semantic, LLM
- `SchemaMapping` result with direct mappings, transformations, gaps, extras
- Compatibility scoring (0.0-1.0)
- `TransformType` variants: TypeCast, Rename, Merge, Split, FormatChange, Custom, Extract, Default
- Transformation script generation: SQL, JQ, Python, PySpark
- CLI command: `odm map` with fuzzy matching and transform output
- 29 unit tests for mapping functionality
- **feat(llm-matcher)**: LLM-enhanced schema matching
- `LlmSchemaMatcher` combining algorithmic and LLM matching
- Retry logic with exponential backoff for LLM failures
- Batching for large schemas exceeding prompt limits
- Transform hint parsing to create `TransformMapping`s
- Example value inclusion in prompts for better matching
- Feature-gated under `llm` feature
- 12 unit tests for LLM matching
- **feat(iceberg)**: Apache Iceberg integration for data lakehouse staging (Phase 3)
- New `iceberg` feature flag for optional Iceberg support
- Added `arrow = "55"` and `parquet = "55"` dependencies for data writing
- Catalog abstraction supporting REST (Lakekeeper/Nessie/Polaris), S3 Tables, Unity Catalog, and Glue
- `CatalogConfig` enum with serializable configuration for all catalog types
- `IcebergCatalog` wrapper with async operations for namespace and table management
- `IcebergTable` for raw JSON staging with time travel support
- `append_records()` method converts JSON records to Arrow RecordBatch and writes Parquet files
- `write_parquet_file()` helper with SNAPPY compression
- `ingest_to_iceberg()` function for batch ingestion from local files to Iceberg tables
- `to_raw_json_records()` conversion function for file-to-record transformation
- Export module (`staging/export.rs`) with:
- `ExportTarget` enum (Unity, Glue, S3Tables, Local)
- `ExportConfig` and `ExportResult` structs
- `export_to_catalog()` function with local filesystem export support
- Snapshot listing and time travel queries by version or timestamp
- Batch metadata storage in Iceberg table properties
- New CLI commands:
- `odm staging init --catalog <type>` - Initialize with Iceberg catalog (rest, s3-tables, unity, glue)
- `odm staging history` - Show table version history
- `odm staging query --version N` - Time travel queries by snapshot version
- `odm staging query --timestamp <ISO8601>` - Time travel queries by timestamp
- `odm staging export --target <unity|glue|s3-tables>` - Export to production catalogs
- `odm staging view create` - Create typed views from inferred schemas
### Changed
- **refactor(workspace)**: Restructured monolithic crate into Cargo workspace with three sub-crates
- `data-modelling-core` - Core SDK library with all business logic
- `odm` - CLI binary (renamed from `data-modelling-cli`)
- `data-modelling-wasm` - WASM bindings for browser applications
- Root `data-modelling-sdk` crate remains for backward compatibility via re-exports
- Uses Cargo workspace with `resolver = "2"` for proper feature unification
- Added `wasm` feature to core crate for browser storage backend dependencies
- Updated all CI/CD workflows for workspace structure
## [1.14.3] - 2026-01-11
### Added
- **feat(serde)**: Dual-case JSON field name support for WASM deserialization
- All struct fields with `#[serde(rename_all = "camelCase")]` now accept both camelCase and snake_case during deserialization
- Added `#[serde(alias = "snake_case")]` attributes to all multi-word field names
- Serialization output remains camelCase for consistency
- Updated structs: `Relationship`, `ForeignKeyDetails`, `ETLJobMetadata`, `VisualMetadata`, `Column`, `ForeignKey`, `PropertyRelationship`, `LogicalTypeOptions`, `AuthoritativeDefinition`, `Workspace`, `AssetReference`, `DomainReference`, `SystemReference`, `Table`, `SlaProperty`, `ContactDetails`, `CADSAsset`, `CADSDescription`, `CADSPricing`, `CADSRisk`, `CADSValidationProfile`, `CADSValidationProfileAppliesTo`, `KnowledgeArticle`, `KnowledgeIndex`, `KnowledgeIndexEntry`, `RelatedArticle`, `Decision`, `DecisionIndex`, `AssetLink`, `ComplianceAssessment`
- Enables UI flexibility when passing JSON with either naming convention
## [1.14.3] - 2026-01-11
### Added
- **feat(serde)**: Dual-case JSON field name support for WASM deserialization
- All struct fields with `#[serde(rename_all = "camelCase")]` now accept both camelCase and snake_case during deserialization
- Added `#[serde(alias = "snake_case")]` attributes to all multi-word field names
- Serialization output remains camelCase for consistency
- Updated structs: `Relationship`, `ForeignKeyDetails`, `ETLJobMetadata`, `VisualMetadata`, `Column`, `ForeignKey`, `PropertyRelationship`, `LogicalTypeOptions`, `AuthoritativeDefinition`, `Workspace`, `AssetReference`, `DomainReference`, `SystemReference`, `Table`, `SlaProperty`, `ContactDetails`, `CADSAsset`, `CADSDescription`, `CADSPricing`, `CADSRisk`, `CADSValidationProfile`, `CADSValidationProfileAppliesTo`, `KnowledgeArticle`, `KnowledgeIndex`, `KnowledgeIndexEntry`, `RelatedArticle`, `Decision`, `DecisionIndex`, `AssetLink`, `ComplianceAssessment`
- Enables UI flexibility when passing JSON with either naming convention
## [1.14.2] - 2026-01-11
### Added
- **feat(wasm)**: Native YAML format PDF/Markdown export bindings for all document types
- `export_odcs_yaml_to_pdf` - Export ODCS YAML content directly to PDF
- `export_odcs_yaml_to_markdown` - Export ODCS YAML content directly to Markdown
- `export_odps_yaml_to_pdf` - Export ODPS YAML content directly to PDF
- `export_odps_yaml_to_markdown` - Export ODPS YAML content directly to Markdown
- `export_cads_yaml_to_pdf` - Export CADS YAML content directly to PDF
- `export_cads_yaml_to_markdown` - Export CADS YAML content directly to Markdown
- `export_decision_yaml_to_pdf` - Export Decision (ADR) YAML content directly to PDF
- `export_decision_yaml_to_markdown` - Export Decision (ADR) YAML content directly to Markdown
- `export_knowledge_yaml_to_pdf` - Export Knowledge Base YAML content directly to PDF
- `export_knowledge_yaml_to_markdown` - Export Knowledge Base YAML content directly to Markdown
- These functions accept raw YAML content (as stored in .odcs.yaml, .odps.yaml, .cads.yaml, .madr.yaml, .kb.yaml files)
- Enables direct export from UI without requiring conversion to internal SDK structs
- **feat(models)**: Added `Table::from_table_data` for converting import data to Table model
## [1.14.1] - 2026-01-11
### Added
- **feat(wasm)**: ODCS/ODPS/CADS PDF and Markdown export bindings
- `export_table_to_pdf` - Export ODCS Data Contract to PDF with optional branding
- `export_odps_to_pdf` - Export ODPS Data Product to PDF with optional branding
- `export_cads_to_pdf` - Export CADS Asset to PDF with optional branding
- `export_table_to_markdown` - Export ODCS Data Contract to Markdown
- `export_odps_to_markdown` - Export ODPS Data Product to Markdown
- `export_cads_to_markdown` - Export CADS Asset to Markdown
- **feat(models)**: Added `Table::from_table_data` for converting import data to Table model
- **feat(cli)**: Extended PDF and Markdown export to support all contract types
- `data-modelling-cli export pdf` now supports .odcs.yaml, .odps.yaml, .cads.yaml files
- `data-modelling-cli export markdown` now supports .odcs.yaml, .odps.yaml, .cads.yaml files
- Auto-detection of document type based on content
### Fixed
- **fix(npm)**: Corrected npm organization name to `@offenedatenmodellierung`
- Fixed package name in release-cli.yml and release-wasm.yml workflows
## [1.14.0] - 2026-01-11
### Added
- **feat(relationship)**: Crow's feet notation cardinality support for ERD-style relationships
- New `EndpointCardinality` enum with values: `zeroOrOne` (0..1), `exactlyOne` (1..1), `zeroOrMany` (0..*), `oneOrMany` (1..*)
- New `sourceCardinality` and `targetCardinality` fields on `Relationship` struct
- Enables precise endpoint cardinality modeling for data flow diagrams
- **feat(relationship)**: Data flow direction support
- New `FlowDirection` enum with values: `sourceToTarget`, `targetToSource`, `bidirectional`
- New `flowDirection` field on `Relationship` struct
- Enables directional data flow modeling in relationship diagrams
- **feat(workspace)**: Extended workspace schema with full relationship metadata
- Added `ForeignKeyDetails`, `ETLJobMetadata`, `SlaProperty`, `ContactDetails`, `VisualMetadata`, `ConnectionPoint` definitions
- All relationship fields now available in workspace-schema.json
### Changed
- **refactor(serialization)**: Consistent camelCase serialization across all models
- All structs now use `#[serde(rename_all = "camelCase")]` for JSON/YAML serialization
- Updated: `Workspace`, `DomainReference`, `SystemReference`, `AssetReference`, `Relationship`, `ForeignKeyDetails`, `ETLJobMetadata`, `VisualMetadata`
- Updated: `Cardinality`, `RelationshipType` enums now serialize as camelCase
- Updated: `Decision`, `DecisionIndex`, `KnowledgeArticle`, `KnowledgeIndex` structs
- Updated: `CADSAsset` and all nested CADS structs
- Aligns with ODCS format conventions for consistent API responses
- **refactor(enums)**: Updated enum serialization to camelCase
- `Cardinality`: `oneToOne`, `oneToMany`, `manyToOne`, `manyToMany`
- `RelationshipType`: `dataFlow`, `dependency`, `foreignKey`, `etl`
- `EndpointCardinality`: `zeroOrOne`, `exactlyOne`, `zeroOrMany`, `oneOrMany`
- `FlowDirection`: `sourceToTarget`, `targetToSource`, `bidirectional`
- **refactor(schema)**: Updated workspace-schema.json to camelCase field names
- All property names now use camelCase (e.g., `sourceTableId`, `targetTableId`, `createdAt`)
- Relationship definition includes new cardinality and flow direction fields
- Example updated to demonstrate crow's feet notation usage
### Fixed
- **fix(export)**: Added missing `CADSKind::DataPipeline` and `CADSKind::ETLProcess` match arms in CADS exporter
- **fix(export)**: Added missing `CADSDMNFormat::Json` match arm in CADS exporter
## [1.13.6] - 2026-01-08
### Added
- **feat(workspace)**: Add `view_positions` to DomainReference for per-view canvas node positioning (#37)
- Supports view types: `operational`, `analytical`, `process`, `systems`
- Each node (table, system, asset) stores x/y coordinates specific to its view context
- Matches existing `DomainConfig.view_positions` structure for consistency
- **feat(relationship)**: Add `source_handle` and `target_handle` for edge connection points (#37)
- New `ConnectionHandle` enum with 12 positions around node perimeter
- Positions: `top-left`, `top-center`, `top-right`, `right-top`, `right-center`, `right-bottom`, `bottom-right`, `bottom-center`, `bottom-left`, `left-bottom`, `left-center`, `left-top`
- Enables precise control over edge attachment points to prevent overlapping lines
## [1.13.5] - 2026-01-08
### Added
- **feat(import)**: Preserve all ODCS v3.1.0 contract-level fields during import (#35)
- `TableData` struct now includes: `id`, `apiVersion`, `version`, `status`, `kind`, `domain`, `dataProduct`, `tenant`, `description`, `servers`, `team`, `support`, `roles`, `slaProperties`, `quality`, `price`, `tags`, `customProperties`, `authoritativeDefinitions`, `contractCreatedTs`, `odcsMetadata`
- ODCS and ODCL importers extract all fields from source YAML
- Other importers (Avro, JSON Schema, Protobuf, SQL) use defaults for ODCS-specific fields
- **feat(workspace)**: Add `table_ids` and `asset_ids` to SystemReference (#34)
- Optional UUID arrays for explicit table-to-system and asset-to-system mapping
- Enables direct relationships without relying on `customProperties.system_id`
- Updated workspace JSON schema and Rust types
### Fixed
- **fix(import)**: ODCS `id` field now correctly preserved in import results (#35)
- Previously the contract UUID was extracted but lost during `TableData` construction
- Tables now retain their source UUIDs for proper system linkage
## [1.13.4] - 2026-01-08
### Added
- **feat(sql)**: Databricks SQL `USING` clause support for table format specifications
- `USING DELTA` - Delta Lake tables
- `USING PARQUET` - Parquet format tables
- `USING CSV`, `USING JSON`, `USING ORC`, `USING AVRO` - Other formats
- `USING ICEBERG` - Apache Iceberg tables
- These clauses are now stripped during preprocessing, allowing table imports to succeed
### Fixed
- **fix(sql)**: Databricks SQL imports now correctly handle:
- `CREATE TABLE ... USING DELTA` statements
- `CREATE VIEW` statements (already supported, now tested)
- `CREATE MATERIALIZED VIEW` statements (already supported, now tested)
- Combined clauses like `USING DELTA TBLPROPERTIES (...)`
## [1.13.3] - 2026-01-08
### Fixed
- **fix(wasm)**: Rebuild WASM package to include v1.13.2 Decision Log and Knowledge Base bindings
- NPM package was stuck at v1.13.1 and missing all DDL/KB WASM exports
- Rebuilt with `wasm-pack build --target web --out-dir pkg --features wasm,openapi,odps-validation`
- All 83 WASM functions now properly exported in the NPM package
## [1.13.2] - 2026-01-07
### Added
- **feat(wasm)**: Decision Log (DDL) WASM bindings for browser support
- `parse_decision_yaml()` - Parse decision YAML files (.madr.yaml)
- `parse_decision_index_yaml()` - Parse decisions index file (decisions.yaml)
- `export_decision_to_yaml()` - Export decision to YAML format
- `export_decision_index_to_yaml()` - Export decision index to YAML format
- `export_decision_to_markdown()` - Export decision to MADR Markdown format
- `create_decision()` - Create new decision with required fields
- `create_decision_index()` - Create empty decision index
- `add_decision_to_index()` - Add decision to index
- **feat(wasm)**: Knowledge Base (KB) WASM bindings for browser support
- `parse_knowledge_yaml()` - Parse knowledge article YAML files (.kb.yaml)
- `parse_knowledge_index_yaml()` - Parse knowledge index file (knowledge.yaml)
- `export_knowledge_to_yaml()` - Export article to YAML format
- `export_knowledge_index_to_yaml()` - Export knowledge index to YAML format
- `export_knowledge_to_markdown()` - Export article to Markdown format
- `create_knowledge_article()` - Create new knowledge article
- `create_knowledge_index()` - Create empty knowledge index
- `add_article_to_knowledge_index()` - Add article to index
- `search_knowledge_articles()` - Search articles by title, summary, content, or tags
### Changed
- WASM package now exports 83 functions (up from 66 in v1.13.1)
## [1.13.1] - 2026-01-07
### Fixed
- **fix(validation)**: Move schema validation from CLI module to core validation module
- Schema validation functions are now in `validation::schema` instead of `cli::validation`
- Fixes WASM build failure when `cli` feature is not enabled but `schema-validation` is
- Validation functions are now available to all SDK consumers (WASM, native, API)
- Removed duplicate inline validation code from import/export modules
- Removed redundant `cli/validation.rs` wrapper module
## [1.13.0] - 2026-01-07
### Added
- **feat(ddl)**: Architecture Decision Records (DDL) with MADR format support
- `Decision` model with full MADR (Markdown Any Decision Records) field support
- Decision lifecycle: draft, proposed, accepted, deprecated, superseded, rejected
- Decision categories: architecture, technology, process, security, data, integration
- `DecisionIndex` for tracking decision metadata and numbering
- `DecisionImporter` for parsing decision YAML files
- `DecisionExporter` for exporting decisions to Markdown format
- Storage integration: `load_decisions()`, `save_decision()`, `export_decision_markdown()`
- Database schema with `decisions` table and comprehensive indexes
- CLI commands: `decision new`, `decision list`, `decision show`, `decision status`, `decision export`
- **feat(kb)**: Knowledge Base (KB) for domain documentation
- `KnowledgeArticle` model for storing guides, references, tutorials, and runbooks
- Article types: guide, reference, concept, tutorial, troubleshooting, runbook
- Article lifecycle: draft, review, published, archived, deprecated
- `KnowledgeIndex` for tracking article metadata and numbering
- `KnowledgeImporter` for parsing knowledge YAML files
- `KnowledgeExporter` for exporting articles to Markdown format
- Storage integration: `load_knowledge()`, `save_knowledge()`, `export_knowledge_markdown()`
- Database schema with `knowledge_articles` table and comprehensive indexes
- CLI commands: `knowledge new`, `knowledge list`, `knowledge show`, `knowledge search`, `knowledge status`, `knowledge export`
- **feat(database)**: Extended database schema for DDL/KB (schema version 2)
- `decisions` table with all MADR fields: number, title, status, category, date, deciders, context, drivers, options, decision, consequences, linked_assets, supersedes, superseded_by, compliance, rationale, additional_context
- `knowledge_articles` table with all KB fields: number, title, article_type, status, summary, content, author, author_email, reviewers, linked_assets, linked_decisions, related_articles, skill_level, estimated_reading_time, review_frequency
- Indexes for workspace, domain, status, category, type, author, and number queries
- SQL modules: `decision_sql` and `knowledge_sql` with UPSERT, SELECT, DELETE, COUNT operations
- **feat(sync)**: Extended sync engine for DDL/KB
- `sync_decisions()` and `sync_knowledge()` methods in DatabaseBackend trait
- `export_decisions()` and `export_knowledge()` methods for database export
- `sync_workspace_full()` now includes decisions and knowledge articles
- `export_workspace_full()` returns complete workspace including DDL/KB content
- Extended `SyncResult` with `decisions_synced` and `knowledge_synced` counts
- Extended `SyncStatus` with `decision_count` and `knowledge_count`
### Documentation
- Updated README.md with Decision Records and Knowledge Base sections
- Updated CLI.md with `decision` and `knowledge` command documentation
- Updated LLM.txt with DDL/KB modules and architecture
## [1.12.0] - 2026-01-07
### Added
- **feat(workspace)**: Relationships now embedded in workspace.yaml
- Added `relationships` field to Workspace struct
- Added Relationship definition to workspace-schema.json
- WASM bindings for relationship operations: `add_relationship_to_workspace()`, `remove_relationship_from_workspace()`, `get_workspace_relationships_for_source()`, `get_workspace_relationships_for_target()`
- Relationships.yaml file is no longer required (merged into workspace schema)
- **feat(models)**: Added `color` field to Relationship model
- Supports hex color codes (#RRGGBB, #RGB) or named colors
- Used for relationship line colors in the UI
- Pattern validation in workspace-schema.json
- **feat(database)**: Database schema updated with new relationship fields
- Added `drawio_edge_id` column to relationships table for diagram integration
- Added `color` column to relationships table for UI display
- Updated DuckDB backend `sync_relationships` with new fields
- Updated PostgreSQL backend `sync_relationships` with new fields
- **feat(schemas)**: Added workspace-schema.json
- Complete JSON Schema for workspace.yaml validation
- Includes Relationship definition with all fields
### Changed
- **refactor(storage)**: Flat file naming convention
- Files now use format: `{workspace}_{domain}_{system}_{resource}.{type}.yaml`
- Removed legacy domain-based directory structure
- Updated README.md and ARCHITECTURE.md documentation
- **refactor(schemas)**: Removed domain-schema.json
- Domain functionality now merged into workspace schema
- Added dmnModels section to CADS schema
- Added openApiSpecs section to CADS schema
### Documentation
- Updated LLM.txt with flat file structure and workspace relationships
- Updated README.md with new file naming convention
- Updated docs/ARCHITECTURE.md with flat structure documentation
- Updated schemas/README.md with workspace-schema.json
## [1.11.0] - 2026-01-07
### Added
- **feat(models)**: Complete ODCS v3.1.0 property field support in Column model
- Added 25+ new fields: `id`, `businessName`, `physicalName`, `logicalTypeOptions`, `primaryKeyPosition`, `unique`, `partitioned`, `partitionKeyPosition`, `clustered`, `classification`, `criticalDataElement`, `encryptedName`, `transformSourceObjects`, `transformLogic`, `transformDescription`, `examples`, `defaultValue`, `authoritativeDefinitions`, `tags`, `customProperties`
- Ensures zero data loss during import/export round-trips
- **feat(import)**: ColumnData struct now mirrors Column exactly
- All ODCS v3.1.0 property fields preserved through WASM layer
- Added `column_to_column_data()` helper for consistent Column→ColumnData conversion
- Updated `column_data_to_column()` to preserve all fields during reconstruction
- **feat(models)**: Added new supporting types
- `LogicalTypeOptions`: minLength, maxLength, pattern, format, minimum, maximum, precision, scale
- `AuthoritativeDefinition`: type and URL for authoritative definition references
- Both types exported from models module for external use
### Changed
- **refactor(import)**: All importers now use `..Default::default()` pattern for Column/ColumnData construction
- Simplifies code and ensures new fields automatically get sensible defaults
- Applied across: avro.rs, json_schema.rs, protobuf.rs, odcs.rs, odcl.rs, odcs_shared.rs, sql.rs
## [1.10.0] - 2026-01-06
### Added
- **feat(cli)**: Added `validate` command for standalone schema validation
- Validates files against their respective schemas without importing
- Supports formats: ODCS, ODCL, ODPS, CADS, OpenAPI, Protobuf, Avro, JSON Schema, SQL
- Usage: `data-modelling-cli validate <format> [file]`
- Accepts stdin with `-` as input
- **feat(import)**: Fixed protobuf JAR import to properly create parent columns for nested messages
- Nested messages now create parent column with `OBJECT` or `ARRAY<OBJECT>` type
- Repeated message fields use `.[]` notation for nested properties
- ODCS export now correctly includes nested column structure
### Changed
- **refactor(validation)**: ODPS and OpenAPI validation now only require `schema-validation` feature
- Removed separate `odps-validation` and `openapi` feature requirements for validation
- Simplifies feature configuration for validation-only use cases
## [1.9.0] - 2025-01-06
### Added
- **feat(import)**: Added support for Google protobuf well-known wrapper types in JAR imports
- `google.protobuf.StringValue` → `STRING`
- `google.protobuf.Int32Value` → `INTEGER`
- `google.protobuf.Int64Value` → `BIGINT`
- `google.protobuf.DoubleValue` → `DOUBLE`
- `google.protobuf.FloatValue` → `FLOAT`
- `google.protobuf.BoolValue` → `BOOLEAN`
- `google.protobuf.Timestamp` → `TIMESTAMP`
- Wrapper types are correctly marked as nullable
- **feat(import)**: Added nested message extraction for protobuf JAR imports
- Now extracts nested messages (e.g., `Bet.Cashout`, `Leg.EachWay`)
- Supports deeply nested message hierarchies
- Enums are now recognized and mapped to `STRING` type
- **feat(import)**: Consistent STRUCT flattening across all import types
- All WASM import functions now return consistent flattened format
- `STRUCT<...>` types flatten to `parent.field` notation
- `ARRAY<STRUCT<...>>` types flatten to `parent.[].field` notation
- Applied to: SQL, ODCS, ODCL, Avro, JSON Schema, Protobuf imports
### Fixed
- **fix(import)**: Fixed protobuf JAR parser incorrectly parsing multi-line comments as fields
- Added proper tracking for `/* ... */` and `/** ... */` block comments
- Added validation that field names must be valid identifiers
- Added check that proto field lines must contain `=` for field number
- **fix(import)**: Fixed WASM SQL import not flattening STRUCT columns
- WASM `import_from_sql` now returns nested columns with dot notation
- Matches CLI behavior for consistent UI rendering
## [1.8.6] - 2025-01-06
### Fixed
- Fixed macOS code signing by ensuring MACOS_SIGNING_IDENTITY secret is properly configured
## [1.8.5] - 2025-01-06
### Added
- **feat(cli)**: Improved protobuf JAR import with dependency graph analysis
- Made `INPUT` argument optional when `--jar` is provided
- Added `--root-message` flag to specify root message for JAR imports
- Implemented dependency graph analysis to auto-detect root message
- Flattens all referenced messages into single unified schema with dot notation
- Outputs single combined ODCS file instead of multiple files
- Root message detection: prefers messages with no incoming refs and most outgoing refs
- Pretty mode shows JAR analysis with message list and dependencies
- **feat(ci)**: Added optional macOS code signing and notarization to release workflow
- Signing is skipped gracefully if secrets are not configured
- Supports Developer ID Application certificates
- Supports Apple notarization for Gatekeeper approval
## [1.8.4] - 2025-01-06
### Fixed
- Fixed workflow_call version detection using environment variables
- Fixed dev suffix only applying to release/* branches, not main
## [1.8.3] - 2025-01-06
### Changed
- Merged release-cli and release-wasm workflows into a single workflow
- Version is now passed from publish workflow to release workflow
- Removed blocking tag condition from create-release job
## [1.8.2] - 2025-01-05
### Added
- **feat(wasm)**: Workspace and DomainConfig WASM bindings
- `create_workspace()` - Create a new workspace with owner
- `parse_workspace_yaml()` - Parse workspace YAML to JSON
- `export_workspace_to_yaml()` - Export workspace JSON to YAML
- `add_domain_to_workspace()` - Add a domain reference to workspace
- `remove_domain_from_workspace()` - Remove a domain reference from workspace
- `create_domain_config()` - Create a new domain configuration
- `parse_domain_config_yaml()` - Parse domain config YAML to JSON
- `export_domain_config_to_yaml()` - Export domain config JSON to YAML
- `get_domain_config_id()` - Extract domain ID from config
- `update_domain_view_positions()` - Update view positions in domain config
- `add_entity_to_domain_config()` - Add entity reference (system, table, product, asset, process, decision)
- `remove_entity_from_domain_config()` - Remove entity reference from domain config
- **feat(loader)**: Workspace and DomainConfig loading/saving
- `load_workspace()` / `save_workspace()` - Load/save workspace.yaml files
- `load_domain_config()` / `save_domain_config()` - Load/save domain.yaml files
- `load_domain_config_by_name()` - Load domain config by name within a workspace
- `get_domain_id()` - Extract domain ID from domain.yaml
- `load_all_domain_configs()` - Load all domain configs in a workspace
### Fixed
- **fix(loader)**: Domain ID extraction from domain.yaml
- BPMN, DMN, and OpenAPI loaders now extract domain ID from domain.yaml instead of generating random UUIDs
- Falls back to new UUID if domain.yaml is not found
## [1.8.1] - 2026-01-05
### Fixed
- **fix(wasm)**: Fixed WASM build compatibility issues
- Upgraded jsonschema from 0.20 to 0.38.1 with `default-features = false` to avoid reqwest dependency in WASM builds
- Updated validation error handling to use new jsonschema 0.38.1 API (single ValidationError instead of iterator)
- Configured getrandom 0.3.4 with `wasm_js` feature for proper WASM support
- Added `.cargo/config.toml` with `getrandom_backend="wasm_js"` configuration
- WASM builds now work correctly with `wasm,openapi,odps-validation` features
## [1.8.0] - 2026-01-05
### Added
- **feat(odps)**: ODPS schema validation and CLI support
- ODPS import/export with JSON Schema validation (requires `odps-validation` feature)
- CLI commands: `import odps` and `export odps` for ODPS YAML files
- Manual test script (`test-odps`) for round-trip testing with field preservation verification
- WASM binding: `validateOdps()` function for JavaScript validation
- Field preservation: All ODPS fields (required and optional) preserved during import/export round-trips
- Empty array preservation: Empty optional arrays maintained in exported YAML
- Feature flag support: Validation can be enabled/disabled via `odps-validation` feature flag
- Enhanced ODPS import display: Shows tags, description, managementPorts, support, and team information
### Fixed
- **fix(cli)**: Fixed pre-commit hook issues
- Fixed formatting and clippy warnings
- Added feature declaration for `odps-validation` in Cargo.toml lints section
- Fixed collapsed if statements and unnecessary unwrap patterns
## [1.7.1] - 2026-01-05
### Fixed
- **fix(ci)**: Fixed GitHub Actions workflow for Windows builds
- Use PowerShell `Compress-Archive` instead of `zip` command for Windows artifacts
- Explicitly set `shell: bash` for all bash-based steps to avoid PowerShell parsing errors
- Added cross-platform checksum generation support
## [1.7.0] - 2026-01-05
### Added
- **feat(cli)**: Full CLI wrapper implementation (`data-modelling-cli`)
- Comprehensive import/export commands for all supported formats (SQL, AVRO, JSON Schema, Protobuf, OpenAPI, ODCS)
- Support for importing SQL files with various dialects (PostgreSQL, MySQL, SQLite, Generic, Databricks)
- Support for `CREATE VIEW` and `CREATE MATERIALIZED VIEW` statements
- Import from AVRO, JSON Schema, Protobuf, OpenAPI, and ODCS formats
- Export to ODCS, AVRO, JSON Schema, Protobuf (proto2/proto3), and Protobuf descriptor formats
- UUID override support for imported tables (`--uuid` flag)
- Automatic ODCS file generation on import (can be disabled with `--no-odcs`)
- External reference resolution for JSON Schema and OpenAPI (`$ref`, `import`)
- Schema validation before import (optional `--validate` flag)
- Protobuf descriptor export using `protoc` compiler
- Comprehensive error messages with platform-specific installation guidance
- GitHub Actions workflow for building and releasing CLI binaries (Linux, macOS, Windows)
- Full test coverage for all import/export operations
- **feat(protobuf)**: Proto2 and Proto3 format support
- `--protobuf-version` flag to select proto2 or proto3 (default: proto3)
- Correct field labeling: proto2 uses `required`/`optional`, proto3 uses optional by default
- Proper handling of `repeated` fields in both versions
- Protobuf descriptor export supports both proto2 and proto3
- **feat(cli)**: OpenAPI support enabled by default
- CLI builds now include OpenAPI feature by default in GitHub releases
- CI/CD workflows updated to build with `openapi` feature enabled
- Documentation updated with OpenAPI build instructions
### Changed
- **refactor(cli)**: Export operations now accept `.odcs.yaml` files directly as input
- Removed requirement for `workspace.json` file
- Simplified export workflow: `data-modelling-cli export <format> input.odcs.yaml output.<ext>`
### Fixed
- **fix(protobuf)**: Fixed invalid `optional repeated` syntax in proto3 exports
- `repeated` fields no longer include `optional` keyword (proto3 compliant)
- Proto2 correctly uses `required` for non-nullable fields
## [1.6.2] - 2026-01-04
### Added
- **feat(json-schema)**: Full JSON Schema validation support
- Import: Extract all JSON Schema validation keywords (pattern, minimum, maximum, minLength, maxLength, enum, const, multipleOf, minItems, maxItems, uniqueItems, minProperties, maxProperties, allOf, anyOf, oneOf, not)
- Export: Export validation conditions from Column quality rules and enum_values back to JSON Schema format
- Added enum_values field to ColumnData structure to preserve enumeration values through import pipeline
- Validation keywords stored as quality rules with source="json_schema" for proper round-trip preservation
- Comprehensive integration test for validation conditions round-trip
## [1.6.1] - 2026-01-04
### Fixed
- **fix(sql)**: Fixed Databricks SQL parser issues with COMMENT clauses
- Fixed multiline COMMENT clause parsing by converting newlines to spaces within quoted strings
- Fixed escaped quotes in COMMENT clauses (`\'` converted to SQL standard `''`)
- Added support for `MAP<...>` complex types (extracted and restored like STRUCT/ARRAY)
- Added preprocessing to remove unsupported table-level `COMMENT` clauses
- Added preprocessing to remove unsupported `CLUSTER BY AUTO` clauses
- Improved SQL normalization to preserve quoted strings correctly
### Added
- **feat(sql)**: Added SQL parser test tool (`cargo run --example test_sql`)
- Command-line tool for manually testing SQL parsing with different dialects
- Supports reading from file, stdin, or command-line argument
- Pretty-print option for detailed column information
- Convenience script (`test_sql.sh`) for quick testing
## [1.6.0] - 2026-01-03
### Added
- **feat(sql)**: Databricks SQL dialect support
- `DatabricksDialect` implementation for parsing Databricks-specific SQL syntax
- Support for `IDENTIFIER()` function calls in table/view names with variable references and string concatenation
- Support for variable references (`:variable_name`) in `STRUCT` and `ARRAY` type definitions
- Support for variable references in column definitions (`column_name :variable TYPE`)
- Support for variable references in `COMMENT` clauses
- Support for `CREATE VIEW` and `CREATE MATERIALIZED VIEW` statements
- Complex type extraction and restoration for `STRUCT<...>` and `ARRAY<...>` types
- SQL normalization for handling multiline SQL statements
- Comprehensive test coverage with unit and integration tests
- Backward compatibility maintained with existing SQL dialects (PostgreSQL, MySQL, SQLite, Generic)
### Changed
- **docs**: Updated documentation to list all supported SQL dialects (PostgreSQL, MySQL, SQLite, Generic, Databricks)
- **docs**: Enhanced `SQLImporter` documentation with Databricks dialect examples and usage
## [1.5.0] - 2026-01-03
### Added
- **feat(bpmn)**: BPMN 2.0 model support
- `BPMNImporter` for importing BPMN XML files with validation
- `BPMNExporter` for exporting BPMN models in native XML format
- `BPMNModel` struct for representing BPMN models
- WASM bindings: `importBpmnModel()`, `exportBpmnModel()`
- Storage integration: Models saved to `{domain_name}/{model_name}.bpmn.xml`
- CADS asset references: CADS assets can reference BPMN models via `bpmn_models` field
- **feat(dmn)**: DMN 1.3 model support
- `DMNImporter` for importing DMN XML files with validation
- `DMNExporter` for exporting DMN models in native XML format
- `DMNModel` struct for representing DMN models
- WASM bindings: `importDmnModel()`, `exportDmnModel()`
- Storage integration: Models saved to `{domain_name}/{model_name}.dmn.xml`
- CADS asset references: CADS assets can reference DMN models via `dmn_models` field
- **feat(openapi)**: OpenAPI 3.1.1 specification support
- `OpenAPIImporter` for importing OpenAPI YAML/JSON files with validation
- `OpenAPIExporter` for exporting OpenAPI specs with YAML ↔ JSON conversion
- `OpenAPIModel` struct for representing OpenAPI specifications
- WASM bindings: `importOpenapiSpec()`, `exportOpenapiSpec()`
- Storage integration: Specs saved to `{domain_name}/{api_name}.openapi.yaml` or `.openapi.json`
- CADS asset references: CADS assets can reference OpenAPI specs via `openapi_specs` field
- **feat(converter)**: OpenAPI to ODCS converter
- `OpenAPIToODCSConverter` for converting OpenAPI schema components to ODCS tables
- Type mapping: OpenAPI types (string, integer, number, boolean) mapped to ODCS types
- Constraint preservation: minLength, maxLength, pattern, minimum, maximum, enum converted to ODCS quality rules
- Format support: date, date-time, email, uri, uuid, password formats handled
- WASM bindings: `convertOpenapiToOdcs()`, `analyzeOpenapiConversion()`
- Conversion reports with warnings and field mappings
- **feat(cads)**: Extended CADS asset references
- `CADSDMNModel` struct for DMN model references
- `CADSOpenAPISpec` struct for OpenAPI spec references
- `CADSDMNFormat` and `CADSOpenAPIFormat` enums
- CADS importer/exporter support for `dmn_models` and `openapi_specs` fields
- **feat(schemas)**: Schema reference files
- BPMN 2.0 XSD schema placeholder in `schemas/bpmn-2.0.xsd`
- DMN 1.3 XSD schema placeholder in `schemas/dmn-1.3.xsd`
- OpenAPI 3.1.1 JSON Schema placeholder in `schemas/openapi-3.1.1.json`
### Changed
- **refactor(features)**: Feature flags for optional formats
- `bpmn` feature flag for BPMN support (requires `quick-xml`)
- `dmn` feature flag for DMN support (requires `quick-xml`)
- `openapi` feature flag for OpenAPI support (uses existing `jsonschema`)
## [1.4.0] - 2026-01-03
### Added
- **feat(storage)**: Domain-based file organization
- Domain directories with `domain.yaml` files
- ODCS tables saved as `{name}.odcs.yaml` within domain directories
- ODPS products saved as `{name}.odps.yaml` within domain directories
- CADS assets saved as `{name}.cads.yaml` within domain directories
- `ModelSaver::save_domain()` for saving complete domains with all associated files
- `ModelLoader::load_domains()` for loading domains from domain directories
- `ModelLoader::load_domains_from_list()` for loading specific domains
- Backward compatibility maintained with legacy `tables/` directory structure
- **feat(schemas)**: Schema reference directory
- `schemas/` directory with JSON Schema definitions for all supported formats
- ODCS v3.1.0, ODCL v1.2.1, ODPS, and CADS schemas maintained for validation and reference
- Comprehensive schema documentation in `schemas/README.md`
- **feat(docs)**: Architecture guide
- Comprehensive Architecture Guide (`docs/ARCHITECTURE.md`) covering project decisions, use cases, and integration patterns
- Updated README.md with domain-based file structure documentation
- Updated LLM.txt with new architecture details
### Changed
- **refactor(storage)**: File organization now uses domain-based structure
- Files organized by business domain instead of flat `tables/` directory
- Each domain contains its definition and all associated ODCS/ODPS/CADS files
- Legacy `tables/` directory still supported for backward compatibility
## [1.3.0] - 2026-01-03
### Added
- **feat(odcs)**: Complete ODCS v3.1.0 and ODCL v1.2.1 field preservation
- Preserve `description`, `quality` arrays (with nested structures), and `$ref` references during import/export
- Full schema coverage for ODCS v3.1.0 and ODCL v1.2.1 formats
- Round-trip import/export preserves all fields
- **feat(tags)**: Enhanced tag support with Simple, Pair, and List formats
- `Tag` enum supporting three formats: `Simple(String)`, `Pair(String, String)`, `List(String, Vec<String>)`
- Auto-detection parsing with graceful degradation for malformed tags
- Backward compatible with existing `Vec<String>` tags
- Tag support in ODCS, ODCL, JSON Schema, AVRO, and Protobuf importers/exporters
- **feat(cads)**: Full CADS v1.0 support
- CADS importer (`CADSImporter`) for AI/ML models, applications, pipelines
- CADS exporter (`CADSExporter`) for serializing CADS assets
- Support for all CADS asset kinds: AIModel, MLPipeline, Application, ETLPipeline, SourceSystem, DestinationSystem
- Full metadata support: runtime, SLA, pricing, team, risk, compliance, validation profiles
- **feat(odps)**: Full ODPS (Open Data Product Standard) support
- ODPS importer (`ODPSImporter`) for data products
- ODPS exporter (`ODPSExporter`) for serializing data products
- Contract ID validation against ODCS Tables
- Support for input/output ports, support, team, and custom properties
- **feat(domain)**: Business Domain schema support
- `Domain` struct for organizing systems, CADS nodes, and ODCS nodes
- `System` struct representing physical infrastructure with DataFlow metadata
- `CADSNode` and `ODCSNode` structs with shared reference support
- ERD-style `SystemConnection` for system-to-system relationships
- Crowsfeet notation `NodeConnection` for ODCS node relationships
- Domain operations in `DataModel`: `add_domain()`, `add_system_to_domain()`, `add_cads_node_to_domain()`, `add_odcs_node_to_domain()`, etc.
- Domain YAML import/export: `Domain::from_yaml()`, `Domain::to_yaml()`
- **feat(converter)**: Universal format converter
- `convert_to_odcs()` function converts any format to ODCS v3.1.0
- Auto-detection for SQL, ODCS, ODCL, JSON Schema, AVRO, Protobuf, CADS, ODPS, Domain formats
- Format-specific conversion logic with informative error messages
- **feat(migration)**: DataFlow to Domain migration utility
- `migrate_dataflow_to_domain()` converts DataFlow YAML to Domain schema
- Preserves all metadata during migration
- Maps DataFlow nodes to Systems and relationships to SystemConnections
- **feat(wasm)**: Comprehensive WASM bindings for new features
- CADS import/export: `importFromCads()`, `exportToCads()`
- ODPS import/export: `importFromOdps()`, `exportToOdps()`
- Domain operations: `createDomain()`, `importFromDomain()`, `exportToDomain()`, `migrateDataflowToDomain()`
- Domain management: `addSystemToDomain()`, `addCadsNodeToDomain()`, `addOdcsNodeToDomain()`
- Tag operations: `parseTag()`, `serializeTag()`
- Universal converter: `convertToOdcs()`
### Changed
- **refactor(dataflow)**: DataFlow format removed and replaced with Domain schema
- DataFlow import/export modules removed
- DataFlow WASM bindings removed
- Migration utility provided for existing DataFlow files
- **refactor(tags)**: Enhanced tag support across all formats
- `Table.tags` and `Relationship.tags` now use `Vec<Tag>` instead of `Vec<String>`
- All importers parse enhanced tags using `Tag::from_str()`
- All exporters serialize tags using `Tag::to_string()`
### Documentation
- Added comprehensive Schema Overview Guide (`docs/SCHEMA_OVERVIEW.md`)
- Updated README.md with Domain schema and new format support
- Updated LLM.txt with new modules and architecture details
## [1.2.0] - 2026-01-27
### Added
- **feat(metadata)**: Enhanced Data Flow node and relationship metadata support
- Add `owner`, `sla`, `contact_details`, `infrastructure_type`, and `notes` fields to `Table` struct (for Data Flow nodes)
- Add `owner`, `sla`, `contact_details`, `infrastructure_type` fields to `Relationship` struct (for Data Flow relationships)
- Add `SlaProperty` struct with ODCS-inspired structure (property, value, unit, element, driver, description, scheduler, schedule)
- Add `ContactDetails` struct with email, phone, name, role, and other fields
- Add `InfrastructureType` enum with 70+ infrastructure types covering major cloud databases, container platforms, data warehouses, message queues, and BI/analytics tools
- Add filter methods to `DataModel`: `filter_nodes_by_owner()`, `filter_relationships_by_owner()`, `filter_nodes_by_infrastructure_type()`, `filter_relationships_by_infrastructure_type()`, `filter_by_tags()`
### Changed
- **refactor(metadata)**: All new metadata fields are optional and maintain backward compatibility
- **refactor(filter)**: Updated `filter_by_tags()` to return tuple `(Vec<&Table>, Vec<&Relationship>)` for both nodes and relationships
## [1.1.0] - 2026-01-02
### Added
- **feat(wasm)**: Add comprehensive WASM bindings for validation, export, and model management
- Add WASM bindings for input validation functions (`validate_table_name`, `validate_column_name`, `validate_uuid`, `validate_data_type`, `validate_description`)
- Add WASM bindings for sanitization functions (`sanitize_sql_identifier`, `sanitize_description`)
- Add WASM bindings for table validation (`detect_naming_conflicts`, `validate_pattern_exclusivity`)
- Add WASM bindings for relationship validation (`check_circular_dependency`, `validate_no_self_reference`)
- Add WASM binding for PNG export (`export_to_png`) - feature-gated behind `png-export`
- Add async WASM bindings for model loading/saving (`load_model`, `save_model`) using browser storage backend
- Add `Serialize`/`Deserialize` to validation result types for WASM interop
- Add `Serialize`/`Deserialize` to `ModelLoadResult` and related types for WASM interop
### Changed
- **refactor(wasm)**: Extend WASM module with 14 new binding functions
- All validation functions return JSON strings with structured results
- Model loading/saving functions use `js_sys::Promise` for async operations
- Error handling converts Rust errors to JavaScript-compatible errors
## [1.0.2] - 2025-12-31
### Fixed
- **fix(publish)**: Fix publish workflow and Cargo.toml metadata
- Add required `description` field to Cargo.toml for crates.io publishing
- Update publish workflow to use `cargo login` with environment variables instead of deprecated `--token` flag
- Fix cargo publish warnings
## [1.0.1] - 2025-12-31
### Changed
- **refactor(ci)**: Update GitHub workflows
- CI workflow now only runs on PR open/update events (not on main branch)
- Removed publish job from CI workflow
- Build/test only on Linux by default (macOS/Windows optional)
- Publish workflow runs on manual trigger or merge to main
- Publish workflow creates git tag from Cargo.toml version
- Publish workflow verifies version matches CHANGELOG.md
- **fix(auth)**: Use derive Default for AuthMode enum
- Replace manual Default impl with derive macro and #[default] attribute
- Fixes clippy::derivable_impls warning
## [1.0.0] - 2024-12-19
### Added
#### Features
- **feat(models)**: Add comprehensive data model structures for tables, columns, and relationships
- Add `Table` struct with support for database types, medallion layers, SCD patterns, and Data Vault classifications
- Add `Column` struct with support for foreign keys, composite keys, constraints, and enum values
- Add `Relationship` struct with cardinality, relationship types, foreign key details, and ETL job metadata
- Add `DataModel` struct for managing collections of tables and relationships
- Add `Position` struct for 2D canvas positioning
- Add `CrossDomainConfig` for cross-domain table and relationship references
- **feat(import)**: Add comprehensive import functionality for multiple formats
- Add `ODCSImporter` for importing ODCS v3.1.0 YAML format (legacy ODCL formats supported for import)
- Add `SQLImporter` for parsing CREATE TABLE statements (PostgreSQL, MySQL, SQL Server dialects)
- Add `JSONSchemaImporter` for importing JSON Schema definitions with nested object support
- Add `AvroImporter` for importing AVRO schema files
- Add `ProtobufImporter` for runtime parsing of proto3 syntax files
- Add support for deeply nested structures and references in all importers
- Add validation for imported table and column names
- **feat(export)**: Add comprehensive export functionality for multiple formats
- Add `ODCSExporter` for exporting to ODCS v3.1.0 YAML format
- Add `SQLExporter` for generating CREATE TABLE statements (PostgreSQL, MySQL, SQL Server dialects)
- Add `JSONSchemaExporter` for exporting JSON Schema definitions
- Add `AvroExporter` for exporting AVRO schema files
- Add `ProtobufExporter` for exporting Protocol Buffer message definitions
- Add `ODCLExporter` for legacy ODCL format support (deprecated)
- Add `PNGExporter` for exporting ER diagrams as PNG images (feature-gated)
- **feat(storage)**: Add storage backend abstraction layer
- Add `StorageBackend` trait for platform-agnostic file operations
- Add `FileSystemStorageBackend` for native file system operations (feature-gated)
- Add `BrowserStorageBackend` for WASM browser storage APIs (feature-gated)
- Add `ApiStorageBackend` for HTTP API-based storage (feature-gated)
- Add path traversal protection in all storage backends
- Add domain slug validation for API backend
- **feat(model)**: Add model loading and saving functionality
- Add `ModelLoader` for loading tables and relationships from storage backends
- Add `ModelSaver` for saving tables and relationships to storage backends
- Add `ApiModelLoader` for loading models from API endpoints
- Add support for orphaned relationship detection
- Add YAML file path tracking for tables
- **feat(validation)**: Add comprehensive validation functionality
- Add `TableValidator` for detecting naming conflicts and pattern exclusivity violations
- Add `RelationshipValidator` for detecting circular dependencies and self-references
- Add input validation functions for table names, column names, data types, and UUIDs
- Add SQL identifier sanitization for multiple database dialects
- Add reserved word checking for SQL identifiers
- **feat(git)**: Add Git integration support
- Add `GitService` for Git repository operations (feature-gated)
- Add support for staging files, committing changes, and checking repository status
- Add error handling for Git operations
- **feat(workspace)**: Add workspace management types
- Add `WorkspaceInfo` for workspace metadata
- Add `ProfileInfo` for user profile management
- Add request/response types for workspace operations
- **feat(auth)**: Add authentication types
- Add `AuthMode` enum for different authentication modes (Web, Local, Online)
- Add `AuthState` for tracking authentication status
- Add `GitHubEmail` for GitHub OAuth email selection
- Add OAuth request/response types
- **feat(cross-domain)**: Add cross-domain table and relationship sharing
- Add `CrossDomainTableRef` for referencing tables from other domains
- Add `CrossDomainRelationshipRef` for referencing relationships from other domains
- Add `CrossDomainConfig` for managing imported references
#### Documentation
- **docs**: Add comprehensive documentation coverage (~85%+)
- Add module-level documentation for all public modules
- Add function-level documentation with examples for all public functions
- Add field-level documentation for all model structs
- Add usage examples in documentation comments
- Add security considerations documentation
#### Tests
- **test**: Add comprehensive test suite (~65+ tests)
- Add unit tests for all validation functions
- Add unit tests for model loading and saving
- Add unit tests for Git service operations
- Add unit tests for storage backend operations
- Add unit tests for import/export functionality
- Add unit tests for workspace and auth types
- Add integration tests for ODCS import/export roundtrips
- Add tests for deeply nested structures and references
- Add tests for edge cases and error conditions
### Changed
- **refactor(import/odcs)**: Improve ODCS importer to fully parse table structure
- Replace basic field parsing with full `ODCSImporter::parse_table()` usage
- Implement complete STRUCT expansion with recursive helper function
- Improve handling of complex union types in AVRO import
- **refactor(import/protobuf)**: Enhance Protobuf parser for complete proto3 support
- Add support for nested messages with dot notation
- Add support for repeated and optional fields
- Add support for enum definitions
- Add support for oneof and map types
- **refactor(export/odcs)**: Standardize on ODCS v3.1.0 format
- Remove support for legacy ODCS formats in export (import still supported)
- Ensure all exports conform to ODCS v3.1.0 schema
- **refactor(models)**: Improve model structure and methods
- Change table ID generation from deterministic UUIDv5 to random UUIDv4
- Add `get_unique_key()` method to `Table` for conflict detection
- Add helper methods to `DataModel` for table and relationship lookup
- **refactor(validation)**: Improve validation error messages
- Add detailed error messages with context
- Add support for multiple validation errors per operation
### Fixed
- **fix(import/odcs)**: Fix comments to clarify ODCS single-table-per-file format
- Update comments to reflect that ODCS only specifies one table per file
- Fix STRUCT expansion to handle deeply nested structures correctly
- **fix(import/avro)**: Improve union type handling
- Use first non-null type from union instead of defaulting to string
- **fix(model/loader)**: Fix table loading to use full ODCS parser
- Replace basic field parsing with complete table structure parsing
- Ensure all columns and metadata are properly loaded
- **fix(storage)**: Fix path traversal vulnerabilities
- Add comprehensive path traversal protection in all storage backends
- Add validation for domain slugs in API backend
- **fix(export)**: Fix clippy warnings and improve code quality
- Replace `or_insert_with(Vec::new)` with `or_default()`
- Fix redundant closure warnings
- Fix unused enumerate index warnings
### Security
- **security(storage)**: Add path traversal protection
- Block all path traversal attempts (../, ..\, etc.)
- Validate domain slugs to prevent injection attacks
- Sanitize SQL identifiers to prevent SQL injection
- **security(validation)**: Add input validation
- Validate all user inputs before processing
- Prevent SQL injection via malicious table/column names
- Enforce maximum length limits on identifiers
### Performance
- **perf(validation)**: Optimize relationship validation
- Use efficient graph algorithms for cycle detection
- Cache validation results where appropriate
### Build
- **build**: Add feature flags for optional functionality
- Add `api-backend` feature for HTTP API support
- Add `native-fs` feature for native file system operations
- Add `wasm` feature for WebAssembly support
- Add `png-export` feature for PNG diagram export
- Add `git` feature for Git integration
- Add `databricks-dialect` feature for Databricks SQL support
### Removed
- **remove**: Remove legacy ODCS format support from export
- ODCL exporter remains for import compatibility only
- All exports now use ODCS v3.1.0 format
### Deprecated
- **deprecate(export/odcl)**: Mark ODCL exporter as deprecated
- ODCL is End-of-Life standard
- Use ODCS v3.1.0 format for new exports
- ODCL import still supported for backward compatibility
---
## Version History
### [1.0.0] - 2024-12-19
Initial stable release with comprehensive feature set:
- Complete data modeling SDK with support for tables, columns, and relationships
- Multi-format import/export (ODCS, SQL, JSON Schema, AVRO, Protobuf)
- Storage backend abstraction for multiple platforms
- Comprehensive validation and security features
- Cross-domain sharing capabilities
- Git integration support
- Extensive test coverage (~65+ tests)
- Comprehensive documentation (~85%+ coverage)
---
## Types of Changes
- **Added** for new features
- **Changed** for changes in existing functionality
- **Deprecated** for soon-to-be removed features
- **Removed** for now removed features
- **Fixed** for any bug fixes
- **Security** for vulnerability fixes
[1.0.0]: https://github.com/your-org/data-modelling-sdk/releases/tag/v1.0.0