===== What is new in stable version 8.11.0 ====== (compared to stable version [[what_is_new_8_10_0|8.10.0]]) ===== New Features ===== ==== Database & Submodel Store ==== * SQLite database support was introduced for storing submodels, replacing the previous file-based approach. This includes a full submodel database with query functions, checks for duplicate entries during installation, and JSON metadata storage. * The submodel store also gained parallel downloads, a 10-second connection timeout, and the ability to display installed submodel info without an internet connection. * URLs were also updated to use HTTPS where possible. ==== Image Support ==== * Support was added for zstd-compressed TIFF images. * A warning was introduced for loss of GeoTIFF category colors when using non-UINT8 cell types. ==== Logging Subsystems ==== * New log debug subsystems were added: ''DATABASE'' (exported to Java), ''TABLE_IO_HANDLER'' for table I/O operations, and ''MAP_HANDLING'' for map manipulation. * Existing log calls were standardized to use the appropriate subsystem variants throughout the codebase. ==== Nullable Port Grouping ==== * Nullable input port editors can now be grouped so they enable and disable together, with their checkboxes kept in sync within the same grouping. This was applied to the ''LoadMap'', ''LoadCategoricalMap'', ''TransformMap'', and ''RasterizeShape'' functors. ===== Bug Fixes ===== * OneDrive folder file-creation check incorrectly reported errors on Windows — now uses the native Windows API. A filesystem test was added to verify writing to and reading from OneDrive folders. * Linux file status was sometimes reported incorrectly. * Uninitialized ''m_string'' field in variants. * Crashes when parsing invalid tables embedded in scripts. * Nullable port editors failing to retain their empty state. * Wrong flag being passed when reading scripts in the interface. * Ctrl+C being handled by the wrong focused UI component. * Functor Explorer updating before the Issue Panel was initialized, now prevented by assigning a scheduler immediately on load. * ''ReadOnlyTables'' causing incorrect results during Map calculation. * Debug watcher not capturing exceptions on the analyzer thread. * Validation messages not properly showing the names of expression identifiers. * Two regressions caused by earlier commits: a port name misspelling and a naming conflict, both subsequently fixed. * Empty table with subtables failing to return rows. * Incorrect version of the Synthetica Look and Feel displayed in the About dialog. ===== Performance & Robustness ===== * ''DetermineTransitionMatrix'' is now more numerically robust — near-zero Eigen eigenvalues are clamped to zero to prevent invalid fractional root operations. * The resource profiler now skips registering small maps to prevent UI congestion, and the number of registered resources in the UI is capped to prevent lock-ups. * Table validation was refactored to support multiple formats via a new ''TableFormat'' alias. * A warning was added for large tables in editors due to performance impact from table copying. * Exception details are now included in native compilation error reporting. ===== UI & UX ===== * Instantiating an experimental functor now prints a warning in the message log. * Large table warnings now surface in editors via the new ''Verifiable'' interface on ''DataEditor''. ===== Testing ===== Several new test cases were added across the codebase: * Compilation of image expressions accessing tables. * ''GetTableValueFunctor'' behavior. * ''DetermineTransitionMatrix'' with near-zero eigenvalue inputs. * Editor verification for ''TableEditor'' and ''LookupTableEditor''. * Linux test execution now guarantees that required files are in place before running. ===== Documentation & Housekeeping ===== * Version bumped to **8.11.0**. * Copyright updated to **2026**. * README updated. * Fixed method documentation that incorrectly referenced ''Propertiable::createProperties()''. * Fixed a mixed parameter name in method documentation. * Fixed a typo in the method name ''addCheckBox()''.