Changelog

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

[2026.04.30]

Added

  • Cox Regression - Baseline Survival Curve: Breslow estimator for cumulative baseline hazard and survival function S₀(t), with an interactive covariate-adjusted survival curve plot
  • Custom Graph - Smooth Interval Band on Line Geometry: Line geometry with Smooth stat automatically draws a confidence or prediction interval band; a warning appears in the layer card when the interval cannot be computed
  • Custom Graph - Smooth Per-Group Regression: Smooth stat fits separate regression curves for each color, fill, shape, or linetype group; confidence interval warnings identify which groups have insufficient data
  • GLM / GLMM / OLS / Cox - Custom Confidence Level: Confidence level across all model tabs is now a free-entry field (50–99.99%); changing the level updates confidence intervals instantly without re-fitting
  • GLM / GLMM / OLS / Cox - Model Fit Rejection: Models that cannot produce reliable standard errors (rank-deficient design, insufficient degrees of freedom, singular covariance, perfect fit) are rejected with a specific error message instead of returning partial results
  • GLM - Nullable AIC/BIC with Structured Warnings: AIC and BIC show "N/A" when not computable (non-integer grouped Binomial, saturated models); data preparation warnings appear in the Diagnostics tab
  • Linear Regression - Coefficient Dataset df Column: Saved coefficient datasets include a degrees-of-freedom (df) column
  • Open From URL - Configurable Size Threshold: The fixed 10 MB size limit is replaced with a confirmation dialog; the threshold is configurable in Settings > Import (10 MB / 50 MB / 100 MB / No limit)
  • UI - Disabled Button Tooltips: Disabled Run, Save as Dataset, and report action buttons show a tooltip explaining why they are disabled (e.g., variable selection incomplete, model not yet saved)

Fixed

  • Agent API - Dataset Not Found Error Code: Dataset-not-found errors now consistently return DATASET_NOT_FOUND across all endpoints; addOrthogonalPolynomials supports case-insensitive column matching
  • Column Statistics - Ordinal Range Hidden: Ordinal numeric columns no longer show Range, since distance is undefined on an ordinal scale
  • Custom Graph - Color Scale Palette Consistency: Switching the scale type (e.g., diverging to categorical) resets the palette when the current selection is incompatible; applying a sequential palette to a nominal column shows a warning
  • Dependency Tracking - Multi-Step Model Chains: Deleting a dataset or model now correctly cascades through chains that pass through multiple models (e.g., Dataset → Model A → Predictions → Model B → Coefficients)
  • Enum Columns - Value Limit on Manual Creation: Manual enum creation and editing now enforce the 50-value limit; the Add Value button disables at the limit
  • GLM - Gaussian and Gamma AIC/BIC Dispersion Counting: AIC and BIC for Gaussian and Gamma families now correctly count the dispersion parameter, matching R output
  • GLMM - Gamma Dispersion Parameter: Gamma family dispersion uses the unbiased Pearson χ²/(n−p) estimator instead of deviance-based MLE, producing more accurate standard errors and ICC
  • GLMM - Log-Likelihood Label by Family: Log-Likelihood, AIC, and BIC labels now distinguish between REML (Gaussian + identity) and Laplace approximation (other families) in the analysis tab and saved reports
  • GLMM - Unavailable Negative Binomial Removed: Removed unimplemented Negative Binomial from the GLMM family dropdown; existing projects with Negative Binomial selected are migrated to Gaussian
  • Lineage View - Model-to-Report Connections: Reports containing model statistics are now connected to their source models in the lineage view; previously such reports appeared disconnected
  • SQL Editor - Subquery Alias Column Completion: Column-name completion now works for subquery aliases (e.g., columns of t in FROM (SELECT ...) t)

[2026.04.24]

Added

  • Column Statistics - Ordinal Enum Quantiles: Enum columns set to ordinal measurement scale now display min, max, median, Q1, Q3, and IQR in Column Statistics, computed from the enum definition order. Values not in the enum definition are excluded from quantile calculation and reported as Outside Enum definition
  • Column Statistics - Mode for String and Enum Columns: String and enum columns now show Mode (the single most frequent value) instead of the previous Most Common format, matching the label used for numeric columns
  • Data Table - Filter Clear Button: The filter expression input in the Data Table tab shows a clear button when text is present; clicking it clears the filter and returns focus to the input
  • Agent API - Cross-Type Overwrite Rejection: overwrite: true on datasets.query(), datasets.addColumns(), datasets.addOrthogonalPolynomials(), and datasets.setColumnSchema() now returns OPERATION_TYPE_MISMATCH when the existing dataset was created by a different operation type (e.g., overwriting an addColumns result with query())

Fixed

  • GLM / GLMM / Linear Regression - Coefficient Table Up-to-Date on Reload: Reopening a project could show stale coefficient and covariance tables that did not reflect the last model fit. These tables are now rebuilt from the trained model on reload
  • Custom Graph - Point Layer Offered Fill Mapping with No Effect: Point geometry offered a fill aesthetic mapping in the layer settings, but fill had no visible effect on points. The mapping is removed; existing projects with fill on Point layers are migrated automatically
  • GLM - Grouped Binomial Save as Dataset Did Nothing: Clicking Save as Dataset on a Grouped Binomial GLM (successes/trials response) silently did nothing. The coefficient table is now exported correctly
  • Model Deletion - Orphaned Report Elements: Deleting a model left Graph Builder, Crosstab, Cross-Dataset Comparison, and Statistics Summary report elements as orphans showing "Dataset not found". Deletion now removes the associated report elements as well
  • Linear Regression - ANOVA Type I and Type III Overwrote Each Other: Saving both ANOVA Type I and Type III tables caused the second to silently replace the first. Both tables now coexist correctly
  • Open From URL - Cancel Blocked Retry: Cancelling a URL fetch disabled the Open button, preventing retry with the same URL without reopening the dialog
  • Open From URL - Concurrent Fetch on Close: Navigating away while a URL fetch was in progress could leave stale state. The fetch is now cancelled when the dialog is closed, and reopening the dialog no longer starts a duplicate request
  • Agent API - Transitive Circular Dependency Detection: addColumns(), addOrthogonalPolynomials(), setColumnSchema(), and query() with overwrite: true only checked direct parents for self-references, so a chain A → B → C could overwrite A without error. Circular dependency detection now covers transitive ancestors
  • Agent API - Self-Referencing Overwrite Rejection: Dataset operations allowed overwrites that would make a dataset depend on itself, breaking the dependency chain. These overwrites now return SELF_REFERENCE. This check applies to SQL queries referencing multiple tables
  • Security - MDS Signature Header Boundary Validation: A crafted MDS file with a malformed metadata-length field could bypass the file size limit and potentially cause an out-of-bounds read. The field is now validated with explicit bounds checking

[2026.04.19]

Added

  • MDS Signature - Always-Visible Signature Badge: MenuBar now shows a color-coded signature badge (official / trusted / unknown) for the currently open project. Clicking the badge opens a popover with the full signer fingerprint and a one-step "Trust this signer and open" flow. By default, opening an unknown-signed MDS file no longer triggers a confirmation dialog; Settings > Security > Require confirmation for unknown signers restores the previous strict behavior
  • Enum Columns - Data Integrity Enforcement: Enum values can no longer be deleted while data in the column still references them; the Enum editor and enums.update() reject the change with ENUM_VALUE_MISMATCH. Adding or reordering values remains allowed. setColumnSchema() rejects conversion to an enum when the column contains out-of-definition values, and the error message directs users to clean the column with Convert Column Types first. Loading an older project with enum columns whose data violates the definition downgrades the column to string and shows a notification. Ordinal legend values that fall outside the definition no longer disappear from graphs
  • Agent API - Model Summary Across All Model Types: reports.addModelSummary() now supports Linear Regression (coefficient table with standardized coefficients and VIF, ANOVA Type I and Type III, prediction intervals, and OLS fit statistics: R², Adjusted R², F statistic, F p-value, RMSE, AIC, BIC) and Random Forest (Feature Importance, Model Configuration, OOB Score), matching the existing GLM and GLMM coverage. Model Fit (AIC, BIC, Deviance, convergence) and GLMM Random Effects (ICC, variance components) stay live in saved reports: re-training a model with the same id refreshes the numbers in previously saved reports automatically. AddModelSummaryResult gains an optional statsElementId. Existing Gaussian + identity-link GLM models are migrated to Linear Regression automatically
  • Model Detail - Linear Regression Formatted View: Linear Regression models now render with a formatted view (coefficients, ANOVA tables, prediction intervals, fit statistics) instead of a raw JSON view. models.describe() returns OLS-specific fit statistics for Linear Regression models

Fixed

  • Security - External I/O via Unknown-signed MDS Files: Opening an unknown-signed MDS file no longer allows the saved SQL or computed-column expressions to reach external URLs through DuckDB's read_csv('https://...'), read_parquet, read_json, csv_scan, sniff_csv, parquet_*, read_blob, read_text, set_setting, or any read_* function. DuckDB extension auto-install and auto-load are disabled at initialization. SQL Editor and Computed Column both reject these functions with an explicit blocked-function error; column names that happen to start with read_ are unaffected
  • Security - External Connections from DuckDB Worker: As a second layer of defense, the DuckDB Worker asset is served with a Content-Security-Policy header that limits outgoing connections to the DuckDB CDN and its extension repository. Even if an HTTP extension were loaded, the browser blocks connections to arbitrary external URLs
  • Import Data - Silent Data Loss from Malformed CSVs: Importing a CSV with an empty header row, an empty first data row, or mismatched column counts now fails with an explicit error instead of silently producing an empty dataset, truncating columns, or null-padding rows. Error messages reference the "First row is header" checkbox and report row numbers that skip empty lines
  • GLM - Deviance Precision Near Convergence: Poisson, Binomial, and Negative Binomial deviance calculations suffered from catastrophic cancellation when y was close to the fitted mean, occasionally producing spurious non-zero per-observation deviance contributions at convergence. Reported deviance, AIC, BIC, and convergence checks are now numerically stable
  • GLM - Negative Binomial θ Estimation Label Lost on Save: Saved Negative Binomial GLM models lost the distinction between estimated and manually specified θ. Model Detail and saved reports now show Shape Parameter (θ) (estimated) or Shape Parameter (θ) (manual). Existing projects are migrated automatically
  • Open From URL - No Timeout on Unresponsive Server: Opening a project or dataset from a URL now aborts after 30 seconds on an unresponsive server and shows Request timeout after 30 seconds, instead of staying stuck indefinitely
  • DuckDB - Stale Cache on Same-Row-Count Overwrite: Overwriting a derived dataset with different data but the same row count (e.g., changing a filter condition) could leave query results showing the previous data. Table caching now compares data identity, not just row count, so overwrites, renames, and schema changes always invalidate the cache
  • Agent API - Add to Report Coefficient Collisions: Calling reports.addModelSummary() twice for the same model no longer fails with a duplicate-name error; the existing coefficient dataset is reused. GLM and GLMM coefficient datasets include family/link in the default name so models with the same formula but different families no longer collide. Changing the confidence level on a Linear Regression model correctly recomputes the coefficient table instead of reusing the stale one. Existing projects are migrated automatically
  • Open From URL - Memory Leak After Dataset Deletion: Deleting a dataset now fully releases its backing resources, preventing memory growth during long sessions that repeatedly add and remove datasets

[2026.04.15]

Added

  • Agent API - Model Summary Confidence Intervals: reports.addModelSummary() coefficient tables now include 95% Wald confidence intervals (Lower 95%, Upper 95%) and the reference distribution's degrees of freedom (DF). GLM and GLMM share a 9-column structure (Variable, Estimate, Std. Error, Test Statistic, Distribution, DF, P-value, Lower 95%, Upper 95%). Model Detail and the report share the same underlying dataset
  • SQL Editor - Autocomplete Scope and Column Names: Dataset name suggestions are limited to positions immediately after FROM or JOIN, and column-name completion is added. alias. / "dataset". / dataset. completes only that table's columns. Explicit completion is triggered by Ctrl + Space on all platforms
  • Hypothesis Testing - Rank-biserial r Help: Added a help button next to the Rank-biserial r label in Wilcoxon / Mann-Whitney result panels, covering the definition, the -1 to +1 range, and the uncomputable case
  • Custom Graph - Sequential Palettes for Discrete Variables: Sequential palettes (Viridis, Plasma, Inferno, Magma) can be applied to discrete categorical color / fill mappings, sampled at N evenly spaced positions so lightness varies monotonically with category order. Previous *-discrete variants are removed and existing projects are migrated
  • Launcher - Documentation Link: Welcome screen and About dialog link to the documentation site, auto-routing to Japanese or English by browser language
  • Custom Graph - Smooth Interval Band: Smooth stat computes ymin / ymax as an interval band. Interval type is Prediction (individual observation, default) or Confidence (mean response). Linear uses the t-distribution interval; LOESS uses a hat-matrix approximation. Combine with Ribbon to render the band

Changed

  • Agent API - Model Summary Element Reference: reports.addModelSummary() adds GLM / GLMM coefficient tables as DataTableElement entries with a {{data_table:elementId}} reference instead of baking inline Markdown. result.data gains an optional elementId. Random Forest still emits inline Markdown
  • Two-Sample Test - Cohen's d Removed: Two-sample and paired t-test result panels no longer display Cohen's d. Effect magnitude is read from the mean difference and its 95% confidence interval. Removes label confusion between independent-samples d and paired d_z, and avoids presenting a standalone effect-size value without interpretation guidance
  • Graph Builder - Embedded Graph Selection Toggle: Ctrl+click (Cmd+click on macOS) on an element in a report-embedded graph toggles the selection state, matching the Graph Builder tab

Fixed

  • Custom Graph - Numeric Categorical Order: Categorical axes and color / fill / shape / linetype legends share ordering rules: int64 / float64 by numeric value, ordinal enum by the enum definition, otherwise locale-aware string order. scales.x.limits / scales.y.limits and sort stat output still take precedence
  • Custom Graph - Log/Square Root Scale Out-of-Domain Values: Log scale clamped the domain to 0.0001 and Square Root scale silently dropped negative values, drawing points at positions that did not match the original data. Out-of-domain values now suppress the plot and report the affected axis, column, and violation count; Multi-Panel per-panel scale overrides are covered
  • Custom Graph - LOESS Performance and Stability: LOESS neighbor selection rewritten so cost grows linearly with sample size. Symmetric inputs no longer depend on input order, near-singular local fits no longer diverge, and extreme-magnitude x values no longer produce NaN
  • Custom Graph - Reference Line on Categorical Axis: geom_hline / geom_vline with a numeric intercept is suppressed and a warning logged when the corresponding physical axis (after coord_flip) is categorical
  • SQL Editor - DuckDB Keywords Misclassified as Alias: ASOF, POSITIONAL, SEMI, ANTI, QUALIFY, SAMPLE after a table reference are now recognized as clause terminators instead of aliases, restoring column-name completion
  • Hypothesis Testing - Rank-biserial r Returned Zero When Uncomputable: Wilcoxon signed-rank test shows - and returns null from the Agent API when all paired differences are zero, instead of 0
  • Import Data - Slash-Separated Date Off-By-One: Dates like 2025/01/15 are parsed as the date the user wrote regardless of timezone; unpadded dates (2025/1/15) are also accepted
  • Import Data - Leading Zeros Stripped from ID Columns: Columns with leading zeros (e.g., postal codes 0060001) are kept as text by auto-inference instead of inferred as int64. Explicit type conversion is unchanged
  • GLM - Diagnostics Warnings Lost on Re-fit: Data preparation warnings (e.g., grouped Binomial non-integer trials / successes counts) are persisted on the model and shown in the GLM Diagnostics tab across re-fits
  • GLM - Gamma Log-Likelihood Shape Parameter: Gamma family log-likelihood (used for AIC / BIC) now uses shape α=1/ϕ^\alpha = 1/\hat\phi from the estimated dispersion instead of assuming α=1\alpha = 1, so within-family rankings are stable across models with different dispersion estimates
  • Linear Regression - Coefficient Dataset Stable Column Names: Saved OLS coefficient datasets use Test Statistic / P-value / Distribution, matching the GLM coefficient dataset schema. The Linear Regression analysis tab still displays t value / Pr(>|t|). Existing projects are migrated automatically

[2026.04.13]

Added

  • Agent API - Model Inference Distribution: models.run() and models.describe() now return an inference field alongside coefficients. inference.distribution is 't' or 'normal' and inference.df is the t-distribution degrees of freedom (null when distribution is normal), identifying the reference distribution used for testStatistic, p, ciLower, and ciUpper. GLMM fixed effects always report { distribution: 'normal', df: null }. Agents can now determine whether each test statistic is a z value or a t value without inferring it from family/link
  • Agent API - Import From Buffer: New midas.datasets.importFromBuffer() loads CSV/TSV data from an ArrayBuffer or TypedArray (Uint8Array, Node.js Buffer). Playwright tests and automation scripts can now load local CSV files without spinning up an HTTP server. Supports delimiter auto-detection and encoding auto-detection (UTF-8 / Shift_JIS / EUC-JP)
  • Graph Builder - Stat/Geom Mismatch Warning: When a geometry (ribbon, errorbar) requires position mappings that the current stat does not produce, a warning banner now appears in the layer settings with guidance on how to resolve the mismatch
  • Enum - Value Reorder Controls: Enum definition editor now has up/down arrow buttons for reordering values directly, replacing the previous workflow where reordering required deleting and re-adding values

Fixed

  • Agent API - Import Duplicate Name Bypass: datasets.importFromURL() and datasets.importFromBuffer() bypassed the dataset name-duplication guard by writing directly to the project state, allowing two datasets with the same name to coexist and breaking SQL table-name resolution. Both methods now route through the store's addDataset action and reject duplicate names with DATASET_ALREADY_EXISTS by default. A new overwrite: true option deletes the existing dataset before importing
  • Agent API - Import Error Code Granularity: datasets.importFromURL() and datasets.importFromBuffer() mapped all exceptions to EXECUTION_ERROR, making CSV parse failures (empty data, invalid URL, wrong content type) indistinguishable from network or runtime errors. User-input errors now return INVALID_INPUT, allowing agents to skip unnecessary retries
  • Agent API - Describe Column Identifiers: models.describe() previously returned column IDs for coefficients[].variable (GLM), fixedEffects[].variable and randomEffects.groupColumn (GLMM), featureImportances[].feature (Random Forest), and metadata.features / metadata.target (all model types), making the response inconsistent with models.run(). These fields now return column names resolved from the training dataset, falling back to the column ID when the training dataset has been deleted
  • Model Detail - GLMM Formatted View: Model Detail tab fell back to raw JSON display for GLMM models; it now shows a formatted view with family / link / group variable, random effects (variance and standard deviation for group and residual), ICC, fixed effects coefficient table (intercept row, estimate, standard error, z value, Pr(>|z|), 95% CI), and model fit statistics (conditional deviance, log-likelihood, AIC, BIC, convergence, observations, groups)
  • GLMM - Fit Statistic Labels by Family: The GLMM tab and Model Detail view previously labeled the log-likelihood, AIC, and BIC as REML-based regardless of family, even though non-Gaussian families use the Laplace-approximated marginal log-likelihood. Labels now adapt: REML Log-Likelihood / AIC (REML) / BIC (REML) for Gaussian with the identity link, and Log-Likelihood (Laplace) / AIC / BIC for non-Gaussian families
  • GLMM - Deviance Label Clarity: The model fit deviance was labeled simply Deviance, which did not distinguish between conditional and marginal deviance. It is now labeled Conditional Deviance in both the GLMM tab and Model Detail view to match the definition in the GLMM documentation
  • GLMM - ICC Label for Non-Gaussian Families: For non-Gaussian families the ICC is computed on the latent linear predictor scale (e.g., using π²/3 for logit), but the label did not convey this. Non-Gaussian GLMM now labels ICC as ICC (Intraclass Correlation, latent scale) in the GLMM tab and ICC (latent scale) in Model Detail
  • GLM - Coefficient Dataset Stable Column Names: Saved GLM coefficient datasets previously used t_value or z_value as the test statistic column and Pr(>|t|) or Pr(>|z|) as the p-value column name depending on the reference distribution, making downstream SQL, Graph Builder, and user scripts unstable when comparing models with different family/link combinations. Both columns are now fixed to Test Statistic and P-value, and a new Distribution column (t or normal) records the reference distribution. The GLM tab coefficient table in the UI still shows t value / z value and Pr(>|t|) / Pr(>|z|) for familiarity with statistical practice; only the saved dataset column names are fixed. Existing projects are migrated automatically
  • Agent API - Dataset Overwrite Stability: overwrite: true on datasets.query(), datasets.addColumns(), datasets.addOrthogonalPolynomials(), and datasets.setColumnSchema() previously deleted the existing dataset and created a new one, breaking any open tabs referencing the original dataset. Overwrite now updates the dataset in place, so open tabs and downstream references remain valid
  • GLM - Diagnostics on Stale Derived Dataset: Editing the source query of a derived dataset triggered diagnostics re-evaluation on the now-stale model. The diagnostics tab now detects the stale state, shows a warning, and hides diagnostics plots until the model is re-fitted
  • GLM - Help Text Reference Distribution Precision: GLM coefficient help text stated the reference distribution as if it were exact for all families. Only Gaussian with identity link produces an exact t(n-p) distribution; help text now distinguishes exact from approximate (t for other dispersion-estimating families) and asymptotic (standard normal for Poisson, Binomial, Negative Binomial with estimated theta) cases
  • GLM - Help Text NB Theta State: GLM coefficient help did not indicate whether the current Negative Binomial model uses estimated or manually specified theta. A dynamic note now shows the theta estimation method and explains which reference distribution applies to the current model
  • Crosstab - Enum Sort on Legacy Projects: Crosstab reports saved before v2026.04.06 with enum columns sorted values alphabetically instead of in the defined order. A migration now restores the enum reference so existing reports sort correctly

Changed

  • GLMM - Fixed Effects Table Significance Stars: The fixed effects coefficient table in the GLMM tab no longer appends significance stars (*, **, ***) to p-values. MIDAS emphasizes effect estimation over hypothesis testing and avoids presentations that reinforce a significant / non-significant dichotomy

[2026.04.11]

Added

  • Agent API - Enum Definitions: New midas.enums namespace with create, list, update, and remove methods for managing enum definitions; datasets.describe() now reports the enum name for enum columns
  • Agent API - Set Column Schema: New midas.datasets.setColumnSchema() for converting column types and changing enum bindings; accepts an outputName parameter for the resulting derived dataset and overwrites an existing dataset with the same name instead of accumulating duplicates
  • Agent API - Coefficient Confidence Intervals: ModelCoefficientInfo now includes ciLower and ciUpper, the 95% Wald confidence interval for each coefficient. Returned by models.run() and models.describe() for both GLM coefficients and GLMM fixed effects, using the same reference distribution (t or normal) as the coefficient's testStatistic

Changed

  • Agent API - Coefficient Test Statistic Field: Renamed ModelCoefficientInfo.z to testStatistic to reflect that GLM families with dispersion estimation (Gaussian, Gamma, Negative Binomial with fixed θ) now store t statistics rather than z statistics. Existing Agent scripts reading info.z must be updated. Saved models are migrated automatically

Fixed

  • Statistics - Geometric Mean Overflow: Geometric mean overflowed on large datasets; now computed as the exponential of the mean of logs
  • Statistics - Geometric Mean with Zero or Negative Values: Geometric mean silently dropped zero, negative, and non-finite values, computing it on a different subset than the coefficient of variation; now omitted entirely when any value is not a finite positive number
  • Import Data - Header Detection on Numeric Column Names: Header autodetection misclassified columns whose names contained digits (e.g., x1); autodetection has been replaced with an explicit "First row is header" toggle in the import preview, persisted with the dataset
  • Export - CSV/TSV Missing Values: Missing values were exported as the literal string null; now exported as empty fields so R, pandas, and Excel recognize them as missing by default
  • GLM - Gamma Dispersion Parameter: Gamma family used deviance/df for the dispersion parameter, producing standard errors, confidence intervals, and p-values that systematically diverged from R; now uses Pearson χ²/(n-p) consistent with McCullagh & Nelder (1989) and other major statistical packages
  • GLM - Gamma Deviance Precision Near the Fitted Mean: Per-observation Gamma deviance suffered catastrophic cancellation when the response was very close to the fitted mean, occasionally producing negative deviance contributions; now computed in a numerically stable form
  • GLM - Coefficient Table Reference Distribution for Dispersion-Estimating Families: Coefficient table p-values and confidence intervals for families that estimate dispersion (Gaussian on all links, Gamma, Negative Binomial with fixed θ) used standard normal quantiles instead of t(n-p); column headers now switch between "t value / Pr(>|t|)" and "z value / Pr(>|z|)" accordingly, and saved models are migrated
  • Model Detail - Intercept Row Missing from Coefficient Table: Model Detail tab showed the intercept estimate outside the coefficient table; the intercept is now displayed as an (Intercept) row inside the table with all columns (estimate, standard error, test statistic, p-value, confidence interval)
  • ANOVA - Large-Offset Numerical Stability: One-way and two-way ANOVA could lose precision for data with very large constant offsets (e.g., values around 10^15); group statistics now use compensated summation, and the two-way solver shifts the response before factoring so F statistics, sums of squares, and p-values are translation-invariant
  • Agent API - Enum Deletion of Referenced Definitions: enums.remove() deleted an enum definition while columns still referenced it, leaving orphaned references; the deletion is now rejected with an ENUM_IN_USE error until the references are removed

[2026.04.06]

Added

  • Chi-Square Test - Adjusted Standardized Residuals: Adjusted standardized residuals are now always displayed in the contingency table; color highlighting is a separate toggle
  • ANOVA - Ordinal Group Ordering: Groups in the ANOVA results follow the category order defined in the column settings instead of alphabetical sort
  • Project Lineage - Tab Node Details: Clicking a tab node in Project Lineage shows its type, workspace, and referenced datasets/reports/models in the detail panel
  • Accessibility - Disabled Button Reasons: Disabled buttons now display a tooltip explaining why they are disabled

Fixed

  • GLM - Prediction Intervals for Non-Gaussian Families: Prediction intervals were computed using a Gaussian approximation regardless of family; Poisson, Binomial, Gamma, and Negative Binomial now use each family's own distribution
  • GLM - Prediction Standard Errors Missing Dispersion: Prediction standard errors did not include the dispersion parameter, producing too-narrow confidence intervals for Gaussian and Gamma models
  • GLM - Small-Sample Confidence and Prediction Intervals: Gaussian + identity link confidence and prediction intervals used normal quantiles instead of t-distribution quantiles, underestimating interval width in small samples
  • GLM / GLMM - Coefficient Standard Errors Masking Numerical Issues: When the model had numerical issues, coefficient standard errors, z-values, p-values, and confidence intervals showed misleading values instead of "N/A"
  • Reshape - Wide to Long Type Promotion: Combining integer and decimal columns produced a text column instead of decimal; date and datetime columns now promote to datetime
  • Graph Builder - Facet Sort with Null Values: Null values in facet panels were not sorted consistently; now always placed last
  • Export - File Name Ignored in Dialog: File name entered in the Export dialog was ignored; file names with special characters were also sanitized inconsistently
  • Filtered Data - Save as Dataset Without Filter: Save as Dataset button was clickable when the filtered view was created by manual row selection, which has no reusable filter condition; the button is now disabled with an explanation

[2026.03.31]

Added

  • ANOVA - Welch's Test: Welch's ANOVA as a dedicated tab with Games-Howell post-hoc test for pairwise comparisons without assuming equal variances
  • Graph Builder - Free Scales: facet_wrap and facet_grid support free, free_x, free_y scale options for independent axis ranges per facet panel
  • Graph Builder - Title Field: Title input field for setting graph titles directly in Graph Builder
  • Graph Builder - Facet Panel Limit: Warning and rendering block when facet panel count exceeds a configurable maximum (default: 50); adjustable in Settings
  • DoE - Replications: Replication count setting in the design wizard; each row in the orthogonal array is repeated the specified number of times
  • GLM / GLMM / Cox - Iteration Count: Convergence summary always shows the number of iterations performed
  • Help - Documentation Links: All analysis help panels link to the corresponding documentation page
  • Agent API - Graph Builder Columns: getGraphBuilder() returns available column names, types, and scales; ambiguous column name references return a specific error message

Changed

  • Graph Builder - Facet Rendering Performance: Row selection changes no longer trigger full facet panel recalculation
  • Two-Sample Test - Effect Size Labels: Removed "small", "medium", "large" interpretation labels from Cohen's d and other effect size measures
  • Two-Sample Test - APA Format Copy: Removed APA format copy option from t-test results

Fixed

  • GLM - Confidence Intervals at Non-Standard Levels: Confidence intervals at non-standard levels (e.g., 92%) used the 95% z-value instead of the correct quantile for the specified level
  • GLM - Diagnostics on Derived Datasets: Diagnostics failed when the model was trained on a derived dataset (e.g., created by SQL query)
  • GLM - Diagnostics Ignored Prior Weights and Offset: Re-running diagnostics dropped prior weights (grouped binomial) and offset terms, producing incorrect diagnostic statistics
  • GLM - Saturated Model Statistics: Gaussian and Gamma models with zero residual degrees of freedom showed incorrect standard errors, t-values, and ANOVA F-statistics instead of "N/A"
  • Two-Sample Test - Cohen's d for Welch's t-test: Cohen's d used pooled standard deviation, which assumes equal variances; now uses average standard deviation consistent with the Welch t-test
  • Two-Sample Test - One-Sided Non-Rejection Text: Non-rejection conclusion for one-sided tests displayed "different from" instead of the correct direction ("greater than" or "less than")
  • Paired Test - Diagnostics: Showed individual group normality plots instead of the paired-difference normality diagnostic
  • Data Table - Descending Sort with Nulls: Null values appeared at the top instead of the bottom when sorting in descending order
  • Data Table - Column Type Conversion: Converting a column type (e.g., string to number) was overridden by schema inheritance, leaving the column unchanged
  • Data Table - Enum Sort Order: Sorting enum columns ignored the defined category order and fell back to alphabetical
  • Data Table - Sort with Mixed Types: Comparing values of incompatible types could produce unpredictable row ordering
  • Graph Builder - Facet Sort Order: Facet panels did not respect the column's scale type (e.g., ordinal categories appeared alphabetically instead of in defined order)
  • Graph Builder - hline/vline with coord_flip: Horizontal and vertical reference lines did not swap axes when coordinates were flipped
  • Pair Plot - Too Many Columns: Selecting many columns could freeze the browser; now limited to 10 columns
  • Graph Builder - Filter Failure: When a filter expression failed, data displayed unfiltered without notice; now shows a warning banner with the error message

[2026.03.27]

Added

  • Analysis - Design of Experiments (DoE): Design wizard for two-level orthogonal arrays (L4/L8/L16); ANOVA table, main effects plot with confidence intervals, interaction plot, and Pareto chart for analyzing factor effects
  • Graph Builder - Text Geom: Text labels and annotations on scatter plots and other graphs; supports size, color, and position offset aesthetics
  • Graph Builder - Categorical X for Lines: Line geom now accepts categorical X variables, enabling main effect plots and category-axis line charts
  • Graph Builder - SVG Metadata: Exported SVG files include Dublin Core metadata recording MIDAS as the creator tool and the graph title when set
  • Pair Plot - Always-On Selection: Brush selection is always active; zoom and pan disabled for unobstructed correlation overview
  • Agent API - Graph Height in Reports: reports.addGraph() accepts a height parameter to control graph dimensions
  • Agent API - Graph Title: configureGraph() accepts a title parameter for setting graph titles programmatically

Fixed

  • GLM - Coefficient Statistics When Covariance Unavailable: Standard errors, z-values, p-values, confidence intervals, leverage, and Cook's distance displayed as zero instead of "N/A" when the covariance matrix could not be computed; diagnostic plots now show a placeholder instead of misleading charts
  • GLM - Saturated Model Warning: No warning when observation count equaled parameter count (residual degrees of freedom = 0); now displays a model-appropriate warning explaining the impact on diagnostics
  • GLM - Grouped Binomial Non-Integer Input: Non-integer trials or successes were silently accepted; now warns that coefficient estimates remain valid as quasi-likelihood estimates but log-likelihood, AIC, and BIC are not valid for model comparison
  • GLM - Negative Binomial Theta Estimation: Initial theta estimation ignored the intercept setting; theta and dependent statistics could be inaccurate for intercept-free models
  • GLM - Negative Binomial Dispersion When Covariance Unavailable: When standard errors showed "N/A", Negative Binomial models computed dispersion from deviance instead of Pearson chi-square, and theta could be reported as undefined
  • GLM / Cox Regression - Standard Errors at Extreme Scales: Data with very large or very small values (e.g., 10^8 or 10^-11) could cause standard errors to show "N/A" even when the model was well-determined
  • Two-Sample Test - Small Sample Diagnostics: Skewness and kurtosis showed 0 instead of "N/A" when group sample size was less than 3
  • Statistics - Group Selector Scrolling: "Show stats by" dropdown scrolled out of view when the statistics table was long; now pinned to the top of the panel
  • Statistics - Empty Group Values: Groups with zero observations showed 0 for mean, variance, and other statistics; now shows "N/A"
  • CSV Import - Cancel vs Timeout: URL-based CSV import showed a timeout error message when the user manually cancelled the request
  • Agent API - Graph Layer Validation: Invalid geom, stat, or position type names passed to addGraphLayer(), updateGraphLayer(), or reports.addGraph() could crash instead of returning an error
  • Agent API - Random Forest Description: models.describe() for Random Forest could return incorrect values instead of reporting an error when data was inconsistent

[2026.03.24]

Added

  • ANOVA - Assumption Diagnostics: Levene's test (Brown-Forsythe variant) for equal variances, Shapiro-Wilk test and Q-Q plot for residual normality; significance level selector (0.10/0.05/0.01) applied to the ANOVA table and Tukey HSD; null hypothesis and rejection decision displayed in plain text
  • Survival Analysis - Proportional Hazards Diagnostics: Grambsch-Therneau test for each covariate, Schoenfeld residual plots with LOESS smooth and coefficient reference line, and log(-log(S(t))) plots for assessing the proportional hazards assumption in Cox regression
  • Report - DataTable Links: DataTable elements in reports display clickable links when the source table has link columns configured
  • Data - Persistent Storage: On first project save, requests the browser to store data permanently to prevent saved projects from being automatically deleted when storage is low

Changed

  • PCA: No longer requires downloading the Python runtime; analysis starts immediately
  • Random Forest: No longer requires downloading the Python runtime; analysis starts immediately
  • ANOVA - Condition Number Warning: A warning is now displayed when the design matrix is near-singular; solver switched to QR decomposition for improved numerical accuracy

Fixed

  • ANOVA - Two-Way Null Hypothesis Text: Type I SS hypothesis text now reflects sequential testing (e.g., Factor B is adjusted for Factor A)
  • ANOVA - Two-Way Residuals: No-interaction models computed residuals from cell means instead of the additive model fit
  • GLM - Inverse Link with Offset: Models with inverse link function and offset crashed with an internal error when the linear predictor became non-positive (e.g., Gamma + inverse link with a large negative offset); now shows a descriptive error message
  • GLM - Null Deviance without Intercept: Null deviance was incorrect for intercept-free models across all distribution families
  • GLM - Minimum Row Validation: Minimum observation check did not account for intercept-free models, rejecting valid datasets that met the actual requirement
  • Data Table - Derived Dataset Links: Link display in derived datasets only checked the immediate parent; datasets derived through multiple steps (e.g., Source -> Filtered -> Recoded) now correctly trace ancestry to the original trusted source
  • Agent API - Error Codes: All model fitting errors returned the same error code regardless of cause (e.g., missing column and numerical failure both returned INSUFFICIENT_DATA); now returns distinct codes for each error category
  • Agent API - Graph Builder: Changing graph type could crash when the previous configuration was incompatible with the new type
  • Agent API - Report Tab: Opening a report tab without specifying which report now returns an error instead of crashing

[2026.03.23]

Added

  • GLM - Offset Term: Offset variable selector for rate modeling; linear predictor becomes η = Xβ + offset with exposure variables (e.g., log(person-years) in Poisson regression)
  • Data Table - Link Display: Column context menu option to set a URL template; cell values render as clickable links with {columnName} interpolation from other columns; links enabled only for projects loaded from trusted sources
  • Data - Orthogonal Polynomials: Generate orthogonal polynomial basis from a numeric column via Data menu; using orthogonal basis improves GLM coefficient precision from 6 to 10+ digits on high-degree polynomials
  • Project Lineage - Workspace Name: Tab nodes in the lineage graph display their workspace name (e.g., "data-table · Main")
  • Analysis - Hypothesis Tests Submenu: Two-Sample Test, Paired Test, Chi-Square Test, and ANOVA grouped under a Hypothesis Tests submenu in the Analysis menu

Changed

  • Crosstab - Rendering Performance: Reduced redundant calculations when rendering large crosstabs

Fixed

  • ANOVA - Negative Sum of Squares: Floating-point rounding in sequential Type I SS could produce tiny negative values that propagated to F-statistics and p-values

[2026.03.21]

Added

  • Analysis - ANOVA: One-way and two-way analysis of variance with Tukey HSD post-hoc test; group descriptive statistics and confidence intervals
  • Crosstab - Adjusted Standardized Residuals: Adjusted standardized residuals displayed in chi-square test of independence results
  • Dummy Coding - Reference Category: Reference category selectable from dropdown; defaults to alphabetically first category
  • Data Table - Filtered Row Count: "Showing X of Y rows (filtered)" indicator when a filter is active
  • Security - Strict Connection Mode: "Block connections to untrusted domains" in Settings restricts CSP connect-src to trusted URLs only
  • Agent API - datasets.importCSV(): Import CSV files programmatically via the agent API

Changed

  • Analysis - Significance Codes: Significance stars (***, **, *, .) removed from GLM, Linear Regression, and ANOVA coefficient tables
  • Basic Statistics: Variance, standard deviation, skewness, and kurtosis now use sample-based estimators
  • GLM - QR Decomposition Solver: Solver switched from Cholesky normal equations to Householder QR decomposition, avoiding condition number squaring
  • GLM - Covariance Matrix: Computed directly from QR R factor instead of Fisher information matrix inversion

Fixed

  • GLM / Linear Regression - NaN Classification: NaN values in predictor or response columns were reported as "infinite" instead of "invalid" in incomplete observation diagnostics

[2026.03.20]

Added

  • Hypothesis Test - Nonparametric Tests: Mann-Whitney U test for independent two-sample comparisons and Wilcoxon signed-rank test for paired comparisons; Hypothesis Test tab split into Two-Sample Test and Paired Test
  • GLM - Deviance Goodness-of-Fit Chart: Chi-squared density curve with observed Deviance marker and p-value for Binomial and Poisson models; replaces threshold-based overdispersion warning
  • GLM - Variance-Covariance Matrix Export: Save as Dataset now includes the variance-covariance matrix as a separate dataset in long format
  • Survival Analysis - Censoring Marks: Kaplan-Meier curves display "+" marks at censoring times, including per-group marks for stratified analyses
  • Linear Regression - Confidence Level and Interval Export: Confidence level selector (90%, 95%, 99%) with t-distribution-based confidence intervals for coefficients; Prediction and Confidence Intervals exportable as a dataset
  • CSV Import/Export - Character Encoding: Auto-detection of file encoding on import with manual override; Shift-JIS and EUC-JP encoding options for export

Fixed

  • Coefficient Tables - p-value Color Coding: p < 0.05 color highlighting removed from regression and survival analysis coefficient tables; significance stars retained as conventional notation
  • Hypothesis Test - Significance Badges: Green/gray Significant/Not Significant badges replaced with neutral gray p < alpha / p >= alpha display
  • Pair Plot - Correlation Coefficient Readability: Semi-transparent background box added behind correlation overlay to prevent overlap with data points; dark mode support via theme variables
  • Survival Analysis - Missing Value Notification: Rows excluded due to missing values now shown in a note box for both Kaplan-Meier and Cox regression
  • GLMM - Iteration Label: "EM Iterations" labels corrected to "Iterations" to match actual algorithm
  • PWA - Offline Readiness: DuckDB and Pyodide WASM modules precached on PWA install with non-blocking progress banner
  • File Import - File Chooser Dialog: File input element attached to DOM before triggering click, fixing file chooser not opening on some browsers
  • Agent API - help() Documentation: tabs.open() help entry now documents the reportId parameter

Security

  • App - Analytics Removal: Removed Cloudflare Web Analytics from app.midas-app.org; CSP script-src restricted to 'self' only

[2026.03.18]

Added

  • Crosstab - Chi-Square Test of Independence: Pearson's chi-square test with test statistic, degrees of freedom, p-value, and Cramer's V; warns when expected frequencies are below 5

Fixed

  • Documentation Site - "Open in MIDAS" Links: CORS headers added in the previous release were bypassed when CDN served static files directly; now applied via Cloudflare _headers file
  • URL Validation - IPv6 Private Addresses: IPv6 loopback, link-local, unique-local, and IPv4-mapped addresses were not detected as private IP ranges

Security

  • EmbedView - Fetch Hardening: Added redirect blocking, cache bypass, 30-second timeout, and abort-on-unmount to external URL fetch in EmbedView

[2026.03.17]

Added

  • Graph Builder - Multi-Y Panel: Stack multiple panels vertically with a shared X axis; zoom and pan synchronize across all panels
  • Graph Builder - Scatter Plot Axis Scale: Linear / Log / Square Root scale options for scatter plot X and Y axes
  • Hypothesis Test - Paired t-test Difference Diagnostics: Shapiro-Wilk normality test, Q-Q plot, histogram, and descriptive statistics for paired differences
  • Shapiro-Wilk Test - Royston Polynomial Correction: C1/C2 polynomial corrections from Royston (1992) / AS R94 applied to a-coefficients for improved accuracy
  • GLM - Odds Ratios Section: Odds ratios with 95% confidence intervals displayed in a dedicated section below the coefficient table for Binomial + Logit models
  • Report - Markdown Content Auto-sync: Adding, removing, or duplicating report elements automatically updates {{type:id}} references in Markdown content
  • Report - Graph Element Titles: Graph elements added to reports auto-generate titles from axis column names
  • Report - Individual Diagnostic Plots: Each GLM diagnostic plot can be added to a report individually, in addition to "Add All Plots"
  • Agent API - Report Management: reports.create(), reports.getContent()/setContent() for programmatic report control; tabs.open() accepts reportId to open a specific report
  • Agent API - Model Summary in Reports: reports.addModelSummary() generates Markdown for GLMM (fixed/random effects, ICC) and Random Forest (hyperparameters, feature importances)
  • Agent API - Model Operations: models.run() returns GLM fit results directly without opening a tab; models.save() persists run results to the project; models.describe() expanded to GLMM and Random Forest
  • Agent API - Tab Configuration: tabs.configureGraph() for Graph Builder bulk setup, tabs.configureGlm() for GLM, tabs.setDataset() for switching datasets; column name resolution for all configuration APIs
  • Agent API - Project and Data: project.save(), project.exportMds(), project.downloadMds(); datasets.addColumns() for creating derived datasets via API
  • Agent API - CSV URL Loading: ?csv=URL query parameter loads a CSV file directly from a URL on app launch
  • Documentation Site - Full-text Search: Pagefind-based client-side search with language-separated indexes for Japanese and English
  • Documentation Site - Language Switcher: Dropdown menu in breadcrumb area for switching between Japanese and English documentation pages

Fixed

  • Shapiro-Wilk Test: Large samples (n > ~20) always returned p=1 due to incorrect polynomial coefficients in the Royston (1992) normal approximation
  • GLM - Duplicate Model Detection: findDuplicateModel() always treated family/link as matching because it read from the wrong property path, allowing duplicate models to be created
  • GLM - Diagnostic Plot Sizing: Diagnostic plots used fixed pixel dimensions instead of following container width
  • Report - Model Summary Column Names: Coefficient table in model summary displayed internal column UUIDs instead of human-readable column names
  • Report - GFM Table Rendering: Pipe characters in table cells (e.g., Pr(>|z|)) broke Markdown table rendering
  • Report - GLM Diagnostics Export: "Add All Plots to Report" only added a subset of diagnostic plots
  • Agent API - tabs.closeOthers(): Did not close tabs in the other split pane because it referenced a stale layout snapshot instead of re-reading store state per iteration
  • Agent API - Ambiguous Dataset Name: datasets.query() silently picked an arbitrary match when multiple datasets matched a table name case-insensitively; now returns AMBIGUOUS_TABLE_NAME error
  • Documentation Site - "Open in MIDAS" Links: Cross-origin fetch from app.midas-app.org failed due to missing CORS headers on documentation file responses

[2026.03.15]

Added

  • Data Management - Add Columns: Create a derived dataset with new columns defined by SQL expressions (e.g., ratio of two columns, arithmetic on existing values); accessible from Data > Add Columns menu

Fixed

  • Agent API - Dataset Query: datasets.query() with overwrite: false allowed duplicate datasets with the same name instead of returning an error

[2026.03.13]

Added

  • GLM - Grouped Binomial: General Binomial (n>1) support for Binomial GLM; select successes and trials columns instead of binary-only response
  • GLM - Cook's Distance Residual Switching: Cook's Distance, Q-Q Plot, Scale-Location, and Residuals vs Leverage now switch between Deviance and Pearson residuals based on the diagnostic plot residual type toggle
  • SQL Query - In-place Dataset Update: "Replace" on duplicate dataset names now updates the existing derived dataset in-place, preserving downstream dependencies
  • Documentation Site - Heading Anchors: Heading elements on documentation pages now have clickable anchor links (#) for direct linking to specific sections
  • MDS File - Version Warning: Opening a project file created by a newer version of MIDAS now shows a warning dialog instead of silently loading

Fixed

  • OLS / GLM - Variable Reset on Dataset Change: Switching datasets did not reset selected variables, leaving stale column references from the previous dataset
  • Data Table - Boolean Cell Editing: Boolean columns in Edit Mode used a free-text input, requiring exact string entry; now uses a dropdown (true / false / null)
  • Documentation Site - Content Layout: Unnecessary gap appeared between content area and right sidebar on wide screens

[2026.03.06]

Added

  • Graph Builder - Step Geometry Tooltip: Tooltip support for Step Geometry; hovering over a line displays group tooltip data
  • Graph Builder - Line/Step Selection: Click to select groups and double-click to open Filtered Data on Line and Step geometries; unselected groups fade to reduced opacity
  • Agent API - Error Handling: Unknown aes properties now return warnings instead of being silently ignored; COLUMN_NOT_FOUND errors include suggestions; window.midas API is now always available on all screens

Fixed

  • Dummy Coding - Missing Values: Dummy variable columns used NaN for missing values instead of null, inconsistent with MIDAS missing value convention

[2026.03.03]

Fixed

  • Graph Builder - Threshold Scale Clipping: Threshold scale clip paths (colorThreshold/fillThreshold) did not follow zoom/pan on Line, Area, and Step geometries; threshold regions now update correctly during interaction
  • Hypothesis Test - Variable Selection: Group and Outcome variable filtering was based on data type instead of measurement scale, incorrectly excluding numeric group variables
  • Filtered Data - Equality Comparison: Equality operators (=/!=) in filter expressions did not dispatch by value type, causing incorrect results (e.g., boolean column true did not match string value "true")

Performance

  • Graph Builder - Threshold Rendering: Threshold clip path rendering replaced full DOM removal and recreation with D3 JOIN pattern, reducing unnecessary DOM operations during zoom/pan

[2026.02.27]

Added

  • Analysis Tabs - Boolean Variable Support: Boolean columns now available as numeric variables (true→1, false→0) in OLS, GLM, GLMM, Random Forest, PCA, and Cox Regression
  • GLM - Coefficient Details: Coefficient table now shows Std. Error, z-value, p-value, and 95% confidence intervals
  • Linear Regression - Report Integration: Add regression results to reports via right-click context menu
  • Linear Regression / GLM - Save Coefficients as Dataset: "Save as Dataset" button on coefficient tables; saved data reusable in Data Table and Graph Builder
  • Filtered Data - Type-safe Filter Comparison: Filter comparisons now dispatch by value type (numeric, temporal, string), fixing incorrect results for date/datetime columns with mixed formats

Fixed

  • Data Management - Cascade Deletion: Deleting a dataset from Project Overview left dependent models and derived datasets as dangling references, causing "Training dataset not found" errors on retrain; cascade deletion now works consistently from both Project Overview and Lineage views
  • Graph Builder - Time Bin Selection Performance: Selecting time bins on datetime histograms was slow (~500ms per selection) due to Date.parse overhead; now uses ISO string comparison
  • Graph Builder - Flipped Coordinates Secondary Y Axis: Secondary Y axis section silently disappeared when flipped coordinates were enabled; now shows as grayed-out with explanation text

[2026.02.19]

Added

  • Analysis Tabs - Categorical Variable Visibility: Categorical variables are now shown as grayed-out with tooltip explanation instead of being silently hidden from variable selectors in OLS, GLM, GLMM, Random Forest, PCA, and Cox Regression tabs
  • Graph Builder - Toolbar Layout: Pan/select/clear selection buttons moved from overlay on graph area to a toolbar above the graph, preventing overlap with data points

Fixed

  • Data Management - Selection State Leak: Selection state entries for deleted datasets accumulated in memory; now cleaned up on dataset removal
  • Graph Builder - Datetime Histogram Brush Selection: Brush selection on Datetime Histogram did not select any rows
  • Graph Builder - Datetime Histogram Context Menu: "Open as Filtered Data" context menu did not appear after brush selection on Datetime Histogram

[2026.02.16]

Added

  • Linear Regression (OLS): Linear Regression (OLS) tab added to Analysis menu; includes R², Adjusted R², F-statistic, RMSE, standardized coefficients, VIF, t-distribution-based p-values, and residual diagnostics
  • Linear Regression (OLS) - Prediction Intervals & ANOVA: 95% confidence/prediction intervals for fitted values; ANOVA decomposition with Type I (sequential) / Type III toggle; corrected R² calculation for no-intercept models

Fixed

  • Report - Error Notification: Adding elements to a report or creating a new report failed silently; now shows an alert dialog on failure
  • Report - Action Type Handling: Some report action types silently did nothing instead of reporting an error; all types now handled with compile-time exhaustiveness checking
  • Agent API - Tab Validation: tabs.open() returned success for invalid tab types; now returns INVALID_TAB_TYPE error with available type list

Security

  • CSP - Script Safety: Removed unsafe-eval and unsafe-inline from Content Security Policy script-src, reducing XSS attack surface

[2026.02.08]

Added

  • GLMM - Numerical Stability: Internal scaling of fixed effects design matrix improves convergence for datasets with widely different scales (e.g., 1 vs 100,000)

[2026.02.07]

Added

  • GLMM - Gamma Distribution: Gamma distribution family added to GLMM distribution selection

Fixed

  • GLMM - Gamma Estimation Accuracy: Gamma GLMM estimated random effect variance orders of magnitude too large and BLUPs were astronomically inflated (e.g., hundreds of millions)
  • Graph Builder - Y Axis Label Clipping: Y axis tick labels overflowed beyond graph boundary during pan/zoom; labels now clipped at graph edge
  • Graph Builder - Non-negative Y Axis Constraint: Y axis minimum was not constrained to 0 for non-negative aggregate values (e.g., count, density); Y axis now respects output range declared by each stat
  • MDS File - Signature Warning Dialog: Signer name was displayed too prominently in signature warning dialog; fingerprint is now the primary identifier with signer name shown as self-reported information

Security

  • Dependencies: Fixed prototype pollution (lodash), CSRF/XSS (react-router), and decompression bomb (undici) vulnerabilities by updating affected packages

[2026.02.03]

Added

  • Custom Graph - Filtered Data from Selection: Open Filtered Data tab from right-click menu after selecting data points in graphs (Histogram, Scatter Plot, etc.)

Fixed

  • Filtered Data - Sorting: Sorting did not work in Filtered Data tab
  • Histogram - Selection Highlight: Wrong bin was highlighted when selecting histogram bars
  • Histogram - Single Value Display: Histogram did not display anything when all values in the column were identical
  • Statistics - Create New Report: Creating a new report from Statistics panel did not work

[2026.01.31]

Added

  • Scatter Plot - Correlation Coefficient: Display Pearson correlation coefficient (r = X.XX) in scatter plot top-right corner; enabled for Pair Plot (Statistics/Relationships)
  • Pair Plot - Rectangle Selection: Pan/Select mode toggle for Pair Plot; rectangle selection (brush) for data selection; double-click point opens Filtered Data tab

Fixed

  • Statistics - Relationships Scroll: Vertical scrolling did not work in Statistics/Relationships tab
  • Statistics - Category Distribution Y Axis: Y axis labels were cut off on the left edge

Security

  • Iframe Embedding: Restrict embedding from external sites via X-Frame-Options and frame-ancestors directive

[2026.01.26]

Added

  • Custom Graph - QQ Plot Reference Line: Q1-Q3 reference line added to QQ plots; toggle via showReferenceLine option (default: true)
  • Agent API - Models/Reports: Model details retrieval (models.describe) and report operations (reports.list, reports.addContent, reports.addModelSummary)

Fixed

  • DuckDB - ICU Extension: date() function on timestamp columns failed with "Unimplemented type for cast" error; ICU extension now loaded explicitly to ensure timezone-aware casts work

[2026.01.25-1]

Fixed

  • Data Table - Horizontal Scroll: Horizontal mouse wheel scrolling did not work; wheel handler only processed vertical (deltaY) and ignored horizontal (deltaX) input

[2026.01.25]

Added

  • Report - LaTeX Math Support: Inline (......) and block (......) LaTeX math expressions in Markdown reports
  • Settings - Error History: Persistent error logging with export and clear functionality in Settings > Logs

Improved

  • Report Editor - Element Preview: Hover tooltip preview for {{type:id}} patterns instead of inline blocks; reduced keystroke overhead

Fixed

  • Report - Statistics/DataTable Height: Statistics summary and data table elements were cut off at fixed height; now displays full content
  • Report - Graph Wheel Scroll: Mouse wheel scrolling did not work over embedded graphs in reports
  • Report - Auto-Select Correction: Selected report ID now auto-corrects when pointing to deleted or non-existent report
  • Report - Duplicate Confirmation: Delete confirmation dialog now only appears when element is referenced by multiple reports

[2026.01.23]

Improved

  • Filter Expression - Memory Performance: Reduced memory allocation and GC pressure when evaluating filter expressions on large datasets (e.g., 1M rows)

Fixed

  • Report Editor - Chrome Scroll: Mouse wheel scrolling did not work within Report editor on Chrome; wheel events were consumed by CodeMirror's overflow container
  • Report Editor - Cursor Navigation: Arrow key navigation near embedded graph widgets caused RangeError; line numbers were misaligned with content
  • Data Table - Chrome Scroll: Mouse wheel scrolling did not work over table cells on Chrome due to absolute positioning in virtual scroll implementation
  • Custom Graph - X Axis Label Overflow: X axis tick labels overflowed beyond graph boundary when zoomed; labels now clipped at graph edge

[2026.01.21]

Added

  • Histogram - Integer Alignment: Small-range integer columns (range < 30) automatically apply binwidth=1 and center=0, aligning tick labels with bar positions for discrete integer data (e.g., day of week 0-6, month 1-12, rating 1-5)

Fixed

  • Graph Builder - Layout Shift: Flicker during initial render eliminated; container hidden until ResizeObserver reports actual dimensions
  • Histogram - Bar Width: Bar width calculated correctly for histograms with few bins; now uses bin width (xmin/xmax) instead of data point distance
  • Histogram - Bin Boundary Precision: Floating-point errors in bin boundaries (e.g., 0.30000000000000004) caused incorrect row selection; boundaries now rounded based on bin width precision
  • Data Table - Filtered Data: "Dataset not found" error in Statistics/SelectedRows tabs after opening Filtered Data tab; dataset registration added to 4 missing locations
  • Data Table - Filtered Data Cleanup: Closing tabs with ephemeral datasets now properly removes the dataset regardless of tab type (previously only worked for filtered-data tabs)
  • Project Overview - Source URL: Datasets loaded from URL now display the source URL in Project Overview and Lineage tabs instead of showing blank

[2026.01.20]

Added

  • Custom Graph - Integer Count Axis Ticks: Count/bin/timebin statistics display integer-only tick marks on Y axis (e.g., 0, 1, 2, 3 instead of 0, 0.5, 1, 1.5); also applies to X axis with flip coordinate system
  • Custom Graph - Categorical Axis Zoom/Pan: When X axis is categorical and Y axis is continuous, Y axis zoom/pan is enabled; vice versa for continuous X with categorical Y; pan constrained to user-defined domain min/max
  • Custom Graph - Point Dodge Position: Point geometry with categorical X axis spreads points horizontally within each category when using Dodge position with color/fill grouping
  • Custom Graph - Errorbar Dodge Position: Errorbar geometry with categorical X axis aligns error bars with dodged bar/point positions
  • Custom Graph - Duplicate X Value Warning: Line/Area/Step geometry with identity stat shows warning banner when multiple data points exist for the same X value within a group, which causes ambiguous line paths

Fixed

  • Custom Graph - X Axis Label Margin: Datetime X axis labels had excessive bottom margin (~102px) due to estimated label height; margin reduced to ~37px by measuring actual rendered label dimensions
  • **Custom Graph - Tooltip labelVariable:Customtooltiptemplatelabel Variable**: Custom tooltip template `labelreturned undefined; switch statement lackedlabel` case; replaced with mapping object that includes all tooltip variables
  • Custom Graph - Geometry Position Validation: Line/Step geometry allowed Stack/Fill position selection which produced broken rendering; these options are hidden for Line/Step; Jitter option added for Errorbar
  • Custom Graph - Bar Fixed Color Selection: When fill aesthetic was set to fixed color (e.g., "#ff0000"), selection highlight bars used default color instead of the fixed color; fill value lookup unified across all bar types
  • Custom Graph - Negative Bar Selection Position: Selection highlight for negative value bars rendered upward from the bar bottom instead of downward from zero baseline; calculation changed to mirror positive bar behavior
  • Custom Graph - Bin Boundary Selection: Clicking a histogram bin selected rows from adjacent bins at boundary values due to BETWEEN (inclusive both ends); changed to >= min AND < max (left-closed right-open interval)
  • Custom Graph - Secondary Y Axis Auto-Enable: Changing Y axis zoom setting caused secondary Y axis to enable automatically due to shared zoom state; Y2 axis zoom state removed and derived from Y axis setting at render time
  • Custom Graph - Area Stack/Fill Position: Area geometry ignored stack/fill position and rendered all areas from y=0; changed to read y0/y1 from stackBase/stackTop computed by position adjustment
  • Data Table - Filter NULL Comparison: column > NULL returned true for non-null values; changed to return false for all comparison operators per SQL standard; use IS NULL / IS NOT NULL for null checks
  • Graph Builder - JavaScript API Tab State: window.midas.tabs.open('graph-builder') without options caused undefined tabViewState; default graph type ('histogram') applied when initialGraphType not specified

[2026.01.18]

Added

  • Custom Graph - Errorbar Geometry: Error bar geometry for displaying confidence intervals and standard errors
  • Custom Graph - Area Click Selection: Click selection support for Area geometry
  • Custom Graph - Datetime Scale Auto: Automatic scaleTime application for datetime/date columns
  • Graph Builder - Size Settings: Width and height configuration for graphs
  • Summary Stat - Error Bar Functions: Aggregation functions for error bars (se, ci_lower, ci_upper, sd)
  • Statistics Output - ymin/ymax: ymin/ymax output destinations for Statistics transformations
  • Histogram - Brush Selection: Brush selection with X-axis direction constraint for Histogram/DatetimeHistogram
  • Edit Mode - Datetime Validation: Validation and parsing for date/datetime types in cell editing
  • Agent API - Status: activeDatasetId and activeTabId added to status()
  • Agent API - Models/Reports: Model details retrieval and report operations added to window.midas API

Fixed

  • Custom Graph - Legend Alpha: Legend colors did not match bar colors when alpha was set (e.g., Overlay mode histograms); legend now applies layer's alpha value
  • Custom Graph - Tooltip Label: Y-axis label showed original column name instead of stat type (Count/Density) when using Y + stat bin
  • Histogram - X Axis Domain: Edge bins were clipped when bin width was large (e.g., 10 bins with 10% width each)
  • Histogram - Horizontal Stacked: Stacked bars rendered incorrectly and zoom operated on wrong axis in Horizontal orientation
  • Histogram - Faceted Scroll: Could not scroll to see all facets when facet count exceeded visible area
  • Datetime Histogram - Tooltip Count: Tooltip always showed count as 1 instead of actual bin count
  • Q-Q Plot - Brush Selection: Brush selection did not select any rows when dragging on the plot
  • Report - Edit Mode Scroll: Tab content could not scroll in edit mode
  • Agent API - models.run(): Column names (e.g., sepal_length) were treated as column IDs, causing "column not found" errors; now accepts column names
  • DuckDB - Timezone: timezone() function converted timestamps in the wrong direction (e.g., UTC 21:00 became 12:00 instead of 06:00 JST)

[2026.01.16]

Added

  • PWA - File Handling: Open .mds files directly from OS file manager when MIDAS is installed as PWA (Chrome/Edge 102+, desktop only)
  • Agent API - SQL: Extended window.midas API with SQL query capabilities
    • tabs.open() supports initialQuery/initialOutputName for sql-editor tabs
    • datasets.query() with required name parameter and overwrite option (default: true)
  • Agent API - Graph Builder: Extended window.midas API with Graph Builder configuration
  • Custom Graph - 1D Brush Selection: Horizontal brush selection for histograms and charts
  • Custom Graph - Fixed Color/Fill: Support fixed color values for Color/Fill aesthetics
  • Custom Graph - Q-Q Plot: Rewritten Q-Q Plot using Custom Graph engine
  • Crosstab - Value Field Selection: Improved value field selection with multiple aggregations on same column
  • View Menu - New Dataset/Report: Added "New Dataset" and "New Report" options to View menu submenus

Fixed

  • Data Table - Filter Expression: Comparison operators (>, <, >=, <=) failed on datetime columns; now correctly parses datetime strings
  • Custom Graph - Position Dodge: Bars were not rendered and selection expression was incorrect when using categorical X axis with Position Dodge
  • Custom Graph - hline/vline Validation: "X aesthetic is required" error incorrectly shown when selecting hline geometry
  • Histogram - X Axis Ticks: Tick labels were positioned at bin edges instead of bin centers
  • Histogram - Boundary: Data was placed in wrong bins when boundary parameter exceeded minimum data value, causing incorrect row selection on click
  • Histogram - Legend Color: Bar colors did not match legend colors due to inconsistent category ordering
  • Datetime Histogram - Selection: Clicking or double-clicking bars did not select rows due to datetime string comparison failure
  • Crosstab - Single Click Selection: Single-clicking cells did not highlight corresponding rows in other graphs
  • GLM Diagnostics - Selected Points: Table showed column IDs instead of names, and displayed "N/A" instead of actual data values
  • Reload Dataset Dialog: Loading spinner continued indefinitely when file selection dialog was cancelled

[2026.01.14]

Added

  • Custom Graph - Transform Statistics: Linear transformation statistics (offset, scale) for data normalization
  • Custom Graph - ECDF Statistics: Empirical Cumulative Distribution Function for distribution analysis
  • Custom Graph - Axis Label Rotation: Unified label rotation support for all axis types
  • Statistics - Default Tooltip: Default tooltips for all graphs in Statistics tab
  • Statistics - Filter Support: Statistics tab now reflects Data Table filter results
  • Statistics - Datetime Histogram: Improved with time interval selection, X-axis ticks, and trend display
  • Graph Builder - TimeBin Statistics: Time series binning for temporal data aggregation
  • Graph Builder - Multiple Stats Chain: UI for chaining multiple statistical transformations
  • Graph Builder - Sort Statistics: Unified xSort into sort stat for flexible sorting configuration

Fixed

  • Custom Graph - Threshold Scale Grouping: Fixed grouping being ignored when using Threshold Scale with Line/Step/Area geometries
  • Custom Graph - Scale Type Default: Changed default Scale Type to Categorical for better initial behavior
  • Custom Graph - Line/Step Aesthetics: Fixed Size/Linetype aesthetic mapping not working in Line/Step geometries
  • Custom Graph - Datetime Tooltip: Display datetime values in human-readable format instead of Unix timestamps
  • Custom Graph - Numeric Category Domain: Support for numeric category domain settings
  • Graph Builder - Filtered Data Statistics: Fixed Statistics not working in Filtered Data tab opened from Graph Builder
  • Graph Builder - Layout Overflow: Fixed buttons overflowing in Flexbox layout
  • Selected Rows - Menu Position: Fixed kebab menu position in Selected Rows tab
  • Open from URL - HTTP Error: Display clear error message when using HTTP URLs (HTTPS required)

[2026.01.12]

Added

  • Selected Rows - Ephemeral Dataset Support: Selected Rows tab now works with ephemeral datasets (SQL query results, filtered data)
  • Selected Rows - Dataset Name Display: Display target dataset name in the Selected Rows tab header
  • Custom Graph - Legend Control: Show/hide legend per layer with showLegend property
  • Custom Graph - Threshold Scale Without Variable: Threshold Scale can now be used without variable mapping for fixed conditional coloring

Fixed

  • Custom Graph - Bin Selection Color: Fixed bin selection color appearing blue instead of the configured highlight color when using Threshold Scale

[2026.01.11]

Added

  • GLMM (Generalized Linear Mixed Model): Mixed effects model implementation with Nelder-Mead optimization for variance component estimation
  • PCA (Principal Component Analysis): Dimensionality reduction with scree plot, loadings table, and score export to dataset
  • Statistics - Categorical Bar Chart: Frequency bar chart display for categorical columns
  • Statistics - Drilldown Analysis: Drill down into subsets by double-clicking graph elements (histogram bins, bar chart bars)
  • Selected Rows - Selection Display: Show selection conditions and "Open as Filtered Data" button
  • Custom Graph - Conditional Color Mapping: Apply different colors based on conditions (e.g., above/below threshold)
  • Report - Double-click Support: Double-clicking graph elements in Report View opens Filtered Data tab
  • Agent API: Exposed window.midas API for AI agent integration with Playwright MCP

Fixed

  • Custom Graph - vline/hline Color: Color aesthetic mapping in vline/hline geometries was ignored; now correctly applies color scale when using data-driven reference lines

[2026.01.07]

Added

  • Graph Builder - Double-click to Open Filtered Data: Double-clicking histogram bars, bar chart bars, scatter plot points, or other graph elements opens a Filtered Data tab showing only the selected rows
  • Statistics Tab - Double-click Support: Double-clicking histogram bins, category values, or time series points in Statistics Tab opens Filtered Data tab
  • Hypothesis Test - Double-click Support: Double-clicking diagnostic histogram bins in t-test panel opens Filtered Data tab
  • Custom Graph - Tooltip: Configurable tooltips for graph elements with Auto, Encoding, and Custom modes. Auto mode displays mapped aesthetics, Encoding mode allows variable selection, and Custom mode supports template syntax with x,x, y, color,color, fill, and stat output variables
  • Logs Tab: View application logs in Settings with IndexedDB persistence, log level filtering, and export functionality
  • Workspace - Tab Reordering: Drag and drop tabs to reorder them within a workspace
  • SQL Query - Edit: Edit existing SQL Query datasets from the context menu
  • Import Data - URL: Import CSV files directly from URLs in the Import Data modal

Fixed

  • SQL Query Result - DATE Format: DATE type columns now display as date-only (YYYY-MM-DD) instead of datetime format with time component

[2026.01.05]

Added

  • Graph Builder - ymean Stat: Mean line statistical transformation for control chart applications
  • Graph Builder - vline/hline UI: Vertical and horizontal reference line configuration in layer settings
  • Graph Builder - Axis Title Spacing: Configurable spacing between axis title and axis labels
  • Graph Builder - Graph Type Combobox: Searchable Combobox for Graph Type selection
  • Graph Builder - Low Cardinality Numeric: Low cardinality numeric columns available for Color/Shape/Fill aesthetics
  • Graph Builder - Auto Y-Axis Titles: Automatic Y-axis title generation for Survival and Cumsum statistics
  • Statistics - Datetime Histogram: Datetime/date column visualization changed from Rug Plot to temporal histogram with zoom controls
  • Model Retraining: GLM and Random Forest models can be retrained when training dataset is reloaded, eliminating Python pickle dependency
  • Settings - Delayed Rendering Threshold: User-configurable threshold for delayed rendering of large graphs
  • Analysis Tabs - Default Dataset: Analysis tabs now default to the active dataset when opened

Fixed

  • Custom Graph - ymean Without X: ymean stat produced no data points when X-axis was not specified; now correctly generates mean line for hline geometry
  • Custom Graph - Axis Title: Axis titles did not appear when added after initial render, and old titles persisted after removal; setup/render lifecycle now properly separated
  • Custom Graph - Multi-layer Validation: Only the first layer was validated; subsequent layers with missing X/Y aesthetics caused runtime errors instead of validation errors
  • Custom Graph - Legend Margin: 100px right margin was reserved even when no color/fill/stroke aesthetics were set; margin now automatically removed when legend is not needed
  • DerivedDataSet - Enum in Worker: Enum definitions were not passed to DuckDB worker during topological evaluation, causing enum columns to fail after project reload in certain scenarios

Changed

  • Graph Builder - Global Aesthetics: Simplified Global Aesthetics to X/Y only; other aesthetics moved to layer-specific settings
  • Public Key Export: Removed self-declared metadata from public key files

[2026.01.01]

Added

  • Graph Builder - Cumsum: Cumulative sum statistical transformation for trend analysis
    • Support for categorical X-axis in Summary/Cumsum statistics
  • Graph Builder - X Sort: X-axis sorting option in layer configuration
  • Statistics - Histogram Priority: Histogram now displayed first in single-column statistics
  • Statistics - Comparison Quantiles: Detailed percentiles (P1, P5, P10, P25, P50, P75, P90, P95, P99) in Comparison Table
  • Data Table - Column Width Persistence: Column widths saved and restored across sessions
  • Enum - Auto-Generate from Column: Generate enum definitions from dataset column values
  • Workspace - Submenu Selection: Changed New Workspace from dialog to submenu format
  • Analysis Tabs - Variable Selection UI: Improved variable selection interface for GLM, Random Forest, Kaplan-Meier, Cox Regression

Fixed

  • Custom Graph - Margin Calculation: Extra whitespace (~19px) appeared near Y-axis label due to inconsistency between margin calculation and drawing position
  • Custom Graph - Legend Margin: 100px right margin was reserved even when legend was not displayed, wasting graph space
  • Custom Graph - Datetime X-Axis: Datetime X-axis was not rendering correctly; datetime format now applied to Identity stat as well
  • Custom Graph - Categorical Bar: Bar geometry now correctly supports categorical X-axis columns
  • Custom Graph - Bar xSort Limit: Extra bars were drawn when xSort.limit was applied
  • Histogram - Show Density Error: Enabling "Show density" checkbox in Column Statistics caused Error Boundary to catch exception; layer groups are now dynamically managed
  • Histogram - Sizing: Fixed infinite resize loop in Graph Builder (flexbox min-height issue), missing px unit in width/height, and narrow drawing width in Pair Plot
  • DerivedDataSet - Scale Reset: User-defined scale changes were reset when reloading source dataset; now preserves scales marked as inferredAutomatically: false
  • Enum - Type Conversion: Silent fallback to VARCHAR when enumName was not specified; now shows proper UI feedback and falls back to string type when enum definitions are invalid
  • Enum - Statistics Display: Enum columns now display statistics correctly, matching string type behavior
  • Statistics - Quantiles Format: Quantiles display in Comparison Table now uses consistent numeric notation instead of mixed formats
  • Project Lineage - Theme Colors: Hardcoded color values replaced with theme variables for consistent theming
  • Sorting - Null Values: Null values now always placed last when sorting, regardless of sort direction

[2025.12.30]

Added

  • Random Forest: Machine learning prediction using Pyodide (scikit-learn)
    • Training with configurable parameters (n_estimators, max_depth, etc.)
    • OOB (Out-of-Bag) score for model evaluation
    • Prediction on new datasets with result visualization
    • Confusion matrix and classification metrics for evaluation
  • Graph Builder - Scatter Plot Integration: Scatter Plot now uses Custom Graph renderer
    • Brush selection for selecting data points by dragging
    • 2D density visualization with configurable color scales
    • Delayed rendering for large datasets
  • Custom Graph - Statistics: Added xmean and xmedian statistical transformations for vertical reference lines
  • Workspace Template: Save and restore workspace layouts as templates
  • Project Lineage - Schema: Display column schema information in the detail panel
  • PWA - CDN Caching: DuckDB and Pyodide CDN resources are now cached for offline use
  • Empty Pane Delete: Added delete button to empty panes for easier workspace management
  • DerivedDataSet Reload: Reload parent PrimaryDataSet from DerivedDataSet context menu
  • Enum Dependency Check: Warning dialog when editing enum definitions that are used by columns
  • Help Menu - English Docs: Enabled Documentation > English menu item

Fixed

  • DerivedDataSet - Enum Inheritance: Enum type and enumName were not inherited from parent schema, causing enum columns to appear as string type
  • DerivedDataSet - Ordinal Sort: Ordinal scale columns were sorted alphabetically instead of enum definition order
  • Custom Graph - Ribbon Geom: ymin/ymax aesthetics were ignored; Ribbon geometry now renders confidence bands correctly
  • GLM - isRunning State: isRunning flag was not reset when data validation failed, leaving the UI in loading state
  • GLM - Prediction: Fixed pWithIntercept and getZQuantile calculation errors
  • GLM - Performance: Factorial calculation optimized from O(n) to O(1) using lgamma function
  • Type Conversion - Enum: After converting column to enum type, DataTable showed string type because Arrow format returns enum as UTF8
  • SplitPane: Keyboard resize used fixed 10%/90% limits while mouse used dynamic limits; both now use same dynamic constraint calculation
  • Survival Analysis Tab: View > New Tab showed "Survival Analysis" option which didn't match TabRegistry entries; split into "Kaplan-Meier" and "Cox Regression"
  • Statistics Tab: Content had no right-side padding, causing asymmetric layout; added 12px right padding

[2025.12.24]

Added

  • Kaplan-Meier Tab: Dedicated tab for Kaplan-Meier survival analysis with survival curves and Log-rank tests
  • Cox Regression Tab: Dedicated tab for Cox proportional hazards regression results
  • Graph Builder - Kaplan-Meier Curve: Stat transformation for Kaplan-Meier survival curves with confidence intervals
  • Statistics - Context Help: Inline help explaining statistical measures
  • Dataset Reload: Reload PrimaryDataSet from Project Overview and Project Lineage

Fixed

  • Tab Content Scroll: Prevent scroll chaining when scrolling within tab content
  • Invalid Project URL: Show error message when accessing non-existent project ID via URL
  • Active Panel Indicator: Changed indicator style to border-top for better visibility
  • Context Menu z-index: Fixed context menu appearing behind other elements
  • DerivedDataSet Scale Inheritance: Columns now inherit scale from parent dataset
  • Edit Mode Cache: DuckDB cache now updates correctly after Edit Mode changes
  • Settings Dialog Size: Dialog size now stays fixed when switching tabs
  • Project Lineage Scroll: Fixed scroll target in detail panel

[2025.12.21]

Added

  • Graph Builder - Step Geometry: Step geometry for staircase-style line connections
  • Statistics - Detailed Quantiles: Enhanced quantiles display (P1, P5, P10, P25, P50, P75, P90, P95, P99)
  • MDS Signature Warning: Warning dialog when opening MDS files with unknown signatures

Fixed

  • About Dialog: Updated About dialog image to new blue-based design
  • View Menu - Fullscreen: Toggle Fullscreen menu item now reflects actual fullscreen state
  • Project Lineage - Context Menu: Context menu now closes when clicking outside

Security

  • Key Export: Changed key pair export to password-encrypted format

[2025.12.19]

Added

  • MDS Signature: Sign and verify MDS project files with Ed25519 keys
    • Generate and manage signing keys in Settings
    • Sign projects to ensure integrity and authenticity
    • Verify signatures when opening MDS files

Fixed

  • Data Table/Filtered Data: Preserve filter state when splitting or merging panes
  • Crosstab: Show error message when required fields are not set
  • URL Dataset: Fix cache being used when reloading datasets from URL

Breaking Changes

  • MDS Format: Signature metadata added to MDS file structure. Older versions of MIDAS cannot open signed MDS files.

[2025.12.17]

Added

  • Reshape (Wide/Long): Transform data between wide and long formats
    • Wide to Long: Unpivot multiple columns into key-value pairs
    • Long to Wide: Pivot key-value pairs into separate columns
    • Preview before saving, with row count display
  • Hypothesis Testing: Statistical hypothesis tests with diagnostic visualizations
    • Independent samples t-test with Welch's correction
    • One-sample t-test
    • Shapiro-Wilk normality test
    • Q-Q plot and histogram diagnostics
    • APA format result copy
  • Project Lineage: Redesigned lineage view with improved node layout and visual clarity
  • View Menu: Added Dataset and Report submenus for quick navigation

Fixed

  • Bin Statistics: Now supports datetime and date type columns
  • Type Conversion: Removed unnecessary checkbox from settings dialog

[2025.12.15]

Added

  • ZIP Import: Import multiple CSV files from a single ZIP archive with preview modal
  • Statistics - Relationships Section: Display relationships between multiple selected columns
    • Correlation matrix with heatmap visualization
    • Pair Plot for numeric columns (2-4 columns)
    • Categorical × Numeric bar charts showing group means
    • Categorical × Categorical cross-tabulation tables
  • Statistics - Skewness/Kurtosis: Added skewness and excess kurtosis to Moments section

Changed

  • Statistics - Compact Display: Redesigned statistics display for better readability
    • Basic info in single line (type, scale, n, missing)
    • Moments and Quantiles in horizontal groups
  • Statistics - Column Type Classification: Changed from data type to measurement scale for determining numeric vs categorical

[2025.12.10-1]

Added

  • Open from URL: Support for opening MDS project files from URL

Fixed

  • Embed Mode: Prevent editing report graph titles in embed mode

[2025.12.09]

Added

  • Landing Page: Added a new landing page at the root URL (/)
    • Hero section with app screenshot
    • Feature highlights and privacy information
    • OGP meta tags for social media sharing
  • English Documentation: Added English translation of all user documentation (12 pages)
    • Getting Started, Data Table, Statistics, Graph Builder, Custom Graph, SQL Editor, Crosstab, Reports, etc.
    • Static HTML generation for English docs
  • Create Dataset: Create new empty datasets from the File menu
  • Selected Rows to Dataset: Create a derived dataset from selected rows in the Selected Rows tab
  • Sandbox Mode: Added sandbox mode for embedding MIDAS in documentation with interactive demos
  • Bin Statistics - Boundary/Center: Added boundary and center parameters for histogram bin alignment

Changed

  • URL Change: The application URL has changed from / to /app.

Fixed

  • Statistics Tab - Kebab Menu: Added kebab menu to all graphs (histogram, scatter plot, time series, date distribution) with "Add to Report" and "Open in Graph Builder" options
  • NULL Display: Improved NULL value display with distinct styling
  • Tab Creation Modal: Fixed infinite loop error in TabCreationComboBox
  • Primary Dataset Edit: Invalidate dependent element caches when editing primary datasets
  • Stale Model Blocking: Block predictions and diagnostics for stale models instead of deleting them

[2025.12.05]

Added

  • Data Table - Edit Mode: Added editing capabilities for primary datasets
    • Inline cell editing with double-click
    • Add new rows
    • Delete rows
  • Project Diff: Compare current project state with saved MDS files
    • Detect changes in datasets, models, and reports
    • Visual diff UI with detailed change information
    • Clickable dataset ID links to open corresponding tabs
  • Report - Markdown Editor: Migrated report editor to CodeMirror with syntax highlighting, autocomplete for element references, and collapsible element preview section
  • Report - Aspect Ratio: Added aspect ratio setting for report elements
  • Report - Element Menu: Added menu button in inline preview with Duplicate and Open Source Dataset options
  • Report - Multi-Reference Warning: Show warning when modifying elements that are referenced multiple times
  • Data Table - Cell Tooltip: Show tooltip with full cell content on hover (500ms delay)
  • Graph Builder - Facet Category Limit: Added Max Facet Categories setting in Settings > Graph tab to prevent browser freezing when selecting columns with too many categories
  • AI Agent Command Interface: Added x: command system for AI agent integration
    • x:tab - Create and configure analysis tabs (SQL Editor, Statistics, GLM, Graph Builder, etc.)
    • x:dataset - Create derived datasets via SQL queries
    • x:report - Add graphs and text to reports
    • x:model - Execute GLM models
    • x:status, x:list, x:describe - Query project state
  • Console Mode: Added console mode UI for AI agents to execute commands and view results
  • Console Mode: Display only the latest command result in UI (full history available in browser console)
  • AI Agent Command - Dataset: Auto-resolve targetDatasetId from SQL query for sql_query type operations
  • Crosstab - Multi-Value Fields: Crosstab now supports multiple value fields with aggregation
  • Custom Graph - Facet Column Types: Facet now accepts all column types (Int64, Float64, datetime, etc.), not just categorical columns

Fixed

  • Custom Graph - Legend Ordinal Order: Fixed legend not respecting ordinal order when ordinal variable is assigned to Fill, Color, Stroke, Shape, or Linetype aesthetics
  • Report - Element Menu (Firefox): Fixed report element menu not clickable in Firefox
  • Report - View Settings: Fixed View Settings not working for graphs in reports
  • Report - Embed Mode: Fixed report tab disappearing when navigating back from embed mode
  • Report - Embed Mode Save: Save project to OPFS before entering embed mode to prevent data loss
  • Data Table Menu - Checkbox UI: Fixed "Save data with project" checkbox not visually updating when clicked directly on the checkbox
  • Data Table - File Selection: Fixed file selection to use input element so it can be opened from command palette
  • Custom Graph - Int64 Axis Tick: Fixed decimal tick values appearing on Int64 type axis
  • SQL Query Editor - INTERVAL Type: Display DuckDB INTERVAL type in human-readable format
  • Storage Management: Display project names instead of project IDs in the Saved Projects list
  • Dataset Rename: Automatically update SQL queries when renaming a dataset that is referenced by SQL Query operations
  • SQL Query Editor: Fixed false positive detection of multiple statements when semicolon appears inside string literals
  • Project Lineage: Fixed table references in SQL subqueries not being detected for lineage tracking
    • WHERE clause subqueries (IN, NOT IN, EXISTS, comparison)
    • Scalar subqueries in SELECT list
    • HAVING clause subqueries
    • FROM clause subqueries (derived tables)
    • Nested subqueries
  • SQL Query Editor: Fixed UNION/INTERSECT/EXCEPT queries being incorrectly rejected as unsafe operations
  • E2E Test - Quick Access: Fixed test using CSS class selector that didn't work in production builds

[2025.12.01]

Added

  • Open from URL - CSV Support: Load CSV files directly from URLs with progress display, cancellation, and Content-Type validation
  • Application Settings: Added settings dialog with trusted URL whitelist management for Open from URL
  • Report - Add Text Button: Added "Add Text" button to report header kebab menu

Fixed

  • Graph Builder - X-Axis Label Rotation: Improved label rotation logic to compare label width with band width
  • Data Table - Filter Expression: Unified filter expression syntax to DuckDB SQL standard (quotes and operators)
  • Settings - UI Separation: Separated Settings and Storage Management into distinct buttons
  • DuckDB Worker - Initialization: Fixed DuckDB being initialized twice in worker
  • Data Table - Save Filtered Dataset: Automatically opens the new tab after saving filtered dataset
  • Time Series - Resize: Fixed Time Series graph not resizing with container
  • Create New Tab - Linear Regression: Removed deprecated Linear Regression option from dialog

[2025.11.30]

Added

  • PWA Support: Added Progressive Web App support for offline access and installation
  • DuckDB Worker - SQL Cancel: DuckDB now runs in a Web Worker with SQL query cancellation support
  • Data Table - Save Filtered Data: Filter results can now be saved as derived datasets
  • Graph Builder - Tile Ordinal Axis: Tile (Heatmap) now supports ordinal axis scales

Fixed

  • Data Table - Reload Cache: Fixed transitive derived dataset cache not being cleared on primary dataset reload
  • SQL Editor - DATE Type: Fixed DATE type displaying as numbers in SQL query results
  • Graph Builder - Dataset Selection: Fixed ID duplication error in dataset selection
  • SQL Editor - Materialized View: Fixed Materialized View checkbox state not persisting correctly

[2025.11.27]

Added

  • Help Menu - Documentation: Added Documentation submenu with Japanese/English links
  • Graph Builder - Geom Tile: Added geom_tile for creating heatmaps and tile-based visualizations
    • Supports continuous color scales for numeric fill values
  • Graph Builder - Summary Statistics: Added stat_summary transformation for aggregate visualizations
    • Mean, median, min, max, sum, and custom percentile functions
    • Output selection (y, ymin, ymax) for different geometry types
    • Complete option to show all x-axis categories including those with no data
  • Graph Builder - Fixed Fill Color: Added option to set a fixed fill color independent of data
  • Dataset Metadata - Description: Added ability to edit dataset descriptions in Dataset Metadata modal

Fixed

  • Graph Builder - Facets: Fixed aesthetic scale domains to be unified across all facet panels
  • Graph Builder - Facets: Fixed "Complete missing combinations" option to apply consistently across all panels
  • Graph Builder - Alpha Aesthetic: Enabled Alpha aesthetic mapping for Bar, Line, Area, and Tile geometries

[2025.11.25]

Added

  • Project Lineage - Context Menu: Right-click context menu for lineage graph nodes
    • Open/Delete menu for datasets, models, and reports (Focus/Close for tabs)
    • Shows dependencies in warning dialog before deletion
    • Deletes all dependent objects when confirmed
  • Documentation Link: Added "Documentation (ja)" link in About dialog for quick access to Japanese documentation
  • MDS URL Duplicate Detection: Prevent duplicate projects when opening same URL multiple times
    • Shows confirmation dialog when opening an MDS URL that was previously loaded
    • Three options: Open Existing (use cached version), Open as New (create new copy), or Cancel
    • Displays project information (name, last modified, fetched time) in confirmation dialog
    • Tracks source URL and fetch timestamp for each project (sourceUrl, sourceUrlFetchedAt)
    • Helps users avoid accidentally creating duplicate projects from the same source
  • Embed Mode - Local Projects: Enter Embed mode from locally opened projects
    • "Embed Mode" menu item in report menu (⋮ button)
    • Browser back button returns to normal ProjectView
    • Auto-loads project from storage when accessing embed URL directly

Fixed

  • Embed Mode - External MDS Loading: Fixed /?mds=<URL>&embed=true not working at root path
    • Root path with mds parameter now correctly renders EmbedView
    • Shows proper error message when mds parameter is missing in embed mode

Removed

  • Report HTML Export: Removed the "Export Report as HTML" feature
    • The hacky DOM-cloning approach had reliability issues with CSS and SVG rendering
    • Use browser's print function (Cmd+P / Ctrl+P) and "Save as PDF" as an alternative

[2025.11.24]

Added

  • Embed Mode: Embed reports in external websites using iframe
    • URL format: ?mds=<URL>&embed=true&report-id=<ID> or &report-name=<NAME>
    • Clean view-only display without menus or editing UI
    • "Created with MIDAS" attribution in bottom-right corner
    • Falls back to first report if no report specified
  • Graph Builder - Responsive Height: Graphs now automatically adjust to container height changes
  • URL-based MDS Loading: Load MDS project files directly from URLs using ?mds= parameter
    • Share projects by simply sharing a URL
    • Three-tier security validation: blocks cloud metadata endpoints, URL-based whitelist, warning dialogs for untrusted sources
    • 10MB file size limit to prevent DoS attacks
    • Protects users by warning about public file hosting services (GitHub, S3, etc.) where unverified content may exist
    • SEO-friendly canonical URLs (excludes tracking parameters)

Fixed

  • Graph Builder - Pair Plot: Fixed Pair Plot to scale dynamically based on container size instead of using fixed dimensions
  • Crosstab - Bar in Cell: Fixed minimum values showing no bar in Bar in Cell visual mode
  • Statistics: Fixed date/datetime column statistics (Earliest/Latest/Time span) not displaying

Changed

  • ID Generation: Unified all ID generation to use UUID v4 format with type-specific prefixes
    • All elements (graphs, reports, datasets, tabs) now use globally unique identifiers
    • Prefixes (graph-, report-, dataset-, etc.) maintained for better debugging experience
    • Eliminates potential ID collision issues in distributed or concurrent usage scenarios

[2025.11.21]

Added

  • Custom Graph - Facets: Facet Wrap and Facet Grid functionality
    • Split data by categorical variables to create multiple sub-graphs
    • Facet Wrap: Grid layout with single variable
    • Facet Grid: 2D grid with row and column variables
    • Horizontal scrolling for viewing all panels when exceeding screen width
  • Custom Graph - Density (KDE): Kernel Density Estimation statistical transformation
    • Added as independent layer statistics option alongside Identity/Count/Bin
    • Bandwidth parameter configuration
    • Y Scale options (count/density) for both Bin and Density statistics
    • Automatic "Density" Y-axis title generation
    • Grouped density curves by categorical aesthetics (color/fill/stroke)
  • Custom Graph - Secondary Y Axis: Dual Y-axis support for overlaying different scales
    • Configure right-side Y axis independently (scale type, title, domain, ticks)
    • Per-layer Y axis selection (Primary/Secondary)
    • Synchronized zoom behavior across both axes
    • Available in Cartesian coordinate system only
  • Custom Graph - Categorical Color Palette: Discrete color palette for categorical variables
    • Optimized color selection for categorical data visualization
  • Documentation: Enhanced documentation site features
    • Left sidebar navigation for improved browsing
    • 404 error page for invalid documentation URLs
  • Graph Builder - Responsive Preview: Dynamic preview height adjustment based on content

Fixed

  • Custom Graph - Color/Fill Specification: Unified color and fill aesthetics to match ggplot2 conventions
    • Bar: fill for bar color, color for border (removed color fallback to fill)
    • Area: fill for area color, color for border, changed grouping from color to fill
    • Point/Line: No changes (already compliant)
    • Added fillScale and strokeScale support across all layers
  • Custom Graph - Layer Aesthetics: Show only supported aesthetics per geometry type
    • Point: x, y, color, fill, stroke, size, shape, alpha
    • Line: x, y, color, size, linetype, alpha
    • Bar: x, y, fill, color, alpha (stroke not supported)
    • Area: x, y, fill, color, alpha
    • Prevents configuration of unsupported aesthetics that would be ignored
  • Custom Graph - Bar Position Settings: Position (Identity/Stack/Dodge) now applies correctly
  • Custom Graph - Bar Display: Corrected bar rendering issues
  • Custom Graph - Stack Position: Fixed stacked bar/area positioning calculation
  • Custom Graph - Bar Axis Overlap: Bars no longer overlap with axis lines
  • Custom Graph - Bin Statistics Aesthetics: Aesthetics (color/fill/size) now preserved when using Bin statistics
  • Custom Graph - Legend Titles: Column names now display correctly in legend titles instead of column IDs
  • Custom Graph - Bar Layer: Disabled color aesthetic for Bar layers (fill is the correct aesthetic for bars)
  • Custom Graph - Query Result Categorical Axes: Categorical columns from Query Result datasets now recognized properly
  • Custom Graph - Axis Labels: Automatic generation of axis labels (axis titles) from column names
  • Custom Graph - X Axis Tick Overlap: Fixed overlapping tick labels on X axis
  • Custom Graph - Facet Settings Layout: Improved Columns and Rows layout in Facet configuration UI
  • Custom Graph - Facet Responsive Sizing: Facet panels now resize dynamically based on parent container dimensions
  • Custom Graph - Facet Label Clipping: X axis labels in faceted graphs no longer get clipped
  • Custom Graph - Density with Faceting: Density curves and faceting can now be used simultaneously
  • Custom Graph - Flip Coordinate Histograms: Numeric histograms now render correctly when using flip coordinate system
  • Custom Graph - Density Y Axis Requirement: Fixed Density statistics specification to correctly indicate Y axis is not required
  • Graph Builder - Preview Scroll: Fixed scroll behavior in preview container
  • Graph Builder - Dataset Dropdown: Corrected dataset dropdown display issues

[2025.11.17]

Added

  • Custom Graph: Grammar of Graphics-based graph creation feature
    • Multiple geometry types (Point/Line/Bar/Area)
    • Layer-based multi-layer support
    • Statistical transformations (Identity/Count/Bin) and position adjustments (Identity/Stack/Dodge)
    • Categorical scale and color scale configuration UI
    • Additional aesthetic channels (size, fill, stroke, alpha)
    • Coordinate system transformations (cartesian/flip) and legend rendering
    • Support for ordinal/nominal columns
    • Category order customization with Reverse button
    • Two-pane layout with collapsible configuration sections

Fixed

  • Project Lineage: Fixed issue where SQL dependencies with multiple tables were not tracked correctly
    • Added support for CROSS_PRODUCT (comma-separated tables)
    • Removed duplicate edge creation
  • Graph Builder: Fixed issue where previous rendering remained when settings changed
  • DerivedDataSet: Fixed recursive evaluation of parent datasets
  • Data Table: Fixed conflict between cell copy feature and row context menu

Performance

  • DuckDB: Improved DuckDB initialization speed for SQL evaluation

[2025.11.05-2]

Fixed

  • Column Type Conversion: Fixed issue where excluded rows were not preserved after project save and reload when using EXCLUDE mode (#174)
  • Histogram: Fixed rendering issue for datasets with 1000+ rows (#176)
  • Graph Builder - Bar Chart: Fixed D3 scale replacement issue causing incorrect bar positioning

[2025.11.05]

Added

  • Dummy Coding: Transform categorical variables into dummy variables for GLM analysis
    • Option to keep original columns alongside dummy variables
    • Scale transformation functionality for categorical variables
    • Boolean columns included as-is by default
  • Dataset Metadata: Display dataset information modal showing row count, column count, data types, and other metadata
  • GLM: Web Worker implementation for non-blocking computation
    • Real-time progress tracking with iteration details
    • Convergence history saved as dataset for analysis
    • Coefficient display organized by variable in convergence history table

Fixed

  • Convert Column Type: Fixed error when dataset names contain spaces
  • Filtered Data: Fixed issue where filtered datasets created from DerivedDataSets failed to load after saving and reopening project files
  • GLM: Fixed handling of negative predicted values (μ<0) in Gaussian GLM
  • GLM Progress Dialog: Fixed layout shift during progress updates
  • GLM Convergence History: Fixed data type issues with theta_iter column and improved log-likelihood display
  • Project View: Prevented unintended scrolling behavior
  • Dummy Coding: Fixed persistence of dummy-coded datasets in project files

Performance

  • GLM: 4.7x performance improvement using TypedArray optimization

[2025.11.01]

Added

  • Release Notes: View release history from Help menu and About dialog

[2025.10.31]

Added

  • Graph Builder: Filter functionality to subset data in visualizations
  • Graph Builder - Scatter Plot: Display count of overlapping points in tooltips
  • File Format: MDS project files are now compressed with gzip, reducing file size

Fixed

  • Project Management: Project names are now properly saved and displayed in the project list
  • Project Loading: Improved performance by loading metadata only when listing projects

[2025.10.23]

Added

  • Graph Builder - Bar Chart: Top N filtering and custom sorting options
  • SQL Editor: Overwrite existing datasets functionality
  • Project Lineage: Display dependencies in duplicate name dialog

Fixed

  • Performance: Fixed stack overflow when clicking interval scale columns with large datasets
  • Graph Builder: Fixed issue where user-selected DerivedDataSet was ignored
  • Data Table: Fixed abnormally large column headers
  • Data Table: Improved row number header z-index for better scrolling display
  • UI: Hidden scrollbar in tab header area
  • SQL Editor: Fixed initial query not displaying
  • SQL Query Viewer: Improved color scheme and spacing

[2025.10.22]

Added

  • GLM: Prediction functionality for trained models
  • Graph Builder - Histogram: Faceted mode with statistical annotations
  • Graph Builder - Pair Plot: Multi-variable scatter plot matrix visualization
  • Graph Builder - Scatter Plot: 2D density visualization with configurable color scales
  • SQL Editor: Integrated CodeMirror for improved editing experience
  • Data Management: Dataset deletion with dependency checking

Fixed

  • GLM: Store feature metadata by column ID, resolve names from training dataset during prediction
  • SQL: Allow referencing unevaluated DerivedDataSet in FROM clause
  • Pair Plot: Unified axis positions and colors between histograms and scatter plots
  • UI: Export project dialog now properly displays as single modal

[2025.10.19]

Fixed

  • Sample Data: Fixed country name formatting in Gapminder dataset

[2025.10.18]

Added

  • Initial release