Skip to content

Changelog

[0.3.1] - 2026-10-25

Fixed

  • mzML files with a stale index now open. A file whose <indexList> no longer matches the file (for example because it was edited or truncated after conversion) was reported as "File contains no spectra or chromatograms". When the stored index yields no spectra, the spectrum index is now rebuilt by scanning the file.

[0.3.0] - 2026-10-21

The first release since v0.2.0 (2026-03-01). Chromascope grows from an mzML viewer into a quantification workbench with a command-line interface and two MCP servers.

Added

  • Update check. The desktop windows look for a newer release once a day, in the background, and show "Chromascope X.Y.Z is available — Download · Dismiss" on the status bar. It reads the redirect of releases/latest (no GitHub API), never shows an error when offline, downloads and installs nothing, and is switched off by View → Check for updates or CHROMASCOPE_NO_UPDATE_CHECK=1. get_settings / set_settings carry check_for_updates, and get_settings reports update_available. The command-line tool and the headless MCP server never contact the network.
  • Quantification and QC workspace. Batch quantification with per-analyte integration settings (classic, valley/drop-line, Savitzky-Golay + SNR, fixed window), weighted linear and quadratic calibration, internal standards, qualifiers, dilution, extrapolation of end standards, rule-based peak confidence (0-100 with named reasons), explicit peak review, and batch QC and method validation with reasoned acknowledgements that can never turn a failing rule into a pass.
  • Shared analytical engine (engine::execute) behind the desktop app, the JSON command-line interface (chromascope-cli) and the headless MCP server (chromascope-engine-mcp), so a number from the GUI is the number from the CLI.
  • Projects and the audit package. Append-only project revisions with source hashes, relink and restore; readable HTML report, JSON, CSV, TSV and SVG exports; portable, checksummed bundles that can be verified and re-processed without replacing the original results.
  • Desktop MCP server (chromascope-mcp): an AI client does over MCP everything a person does in the window, with the same result and the same audit trail. 74 tools in the default build: 60 that drive the window and the 14 engine tools (calibration, QC, review proposals, projects); --tool-profile core lists only the 40 tools of the main workflows for clients that cap the number of tools. tools/list stays under 40 KB: engine requests are described briefly and analysis_capabilities returns the complete schema. A calibration or QC computed by an AI appears in the Quantification tab without reopening anything. Launch flags --allow-root, --allow-changes, --allow-exports and --allow-project-writes decide what it may touch; every call is recorded in the AI call log of the window (see "AI oversight in the window" below). Every tool has its own description that says what it does, when to use it and which flag it needs, and carries read-only/destructive annotations. chromascope-engine-mcp is a subset of this server, kept for scripts and machines without a desktop. New window tools: vendor files through msconvert in open_files, stored SRM/MRM chromatograms (native_chromatogram), set_layout, retain_trace, remove_trace, set_trace_visibility, save_session / load_session, list_presets / get_preset / save_preset, save_method / open_method, save_batch / load_batch, create_project / open_project / save_project / refresh_project, build_bundle / verify_bundle / reprocess_result, get_settings / set_settings, export_results / import_results, show_workspace, remove_measurement, clear_integration, clear_display, export_measurements and set_view with reset.
  • AI oversight in the window. In the chromascope-mcp window the status bar shows "AI connected · N requests · View log" (and "AI is working…" while a request runs); View log opens a floating AI call log with the launch permissions, the folders and the latest 100 requests, which stays open whatever workspace the assistant shows. The log lasts only while the window is open; session_audit and prepare_analysis_report give a permanent record. The plain chromascope.exe has no assistant and shows none of this.
  • Review AI proposals. The Audit package has a section Review AI proposals: original and proposed values side by side with the assistant's reason and evidence, and Approve or Reject with the person's own reason. prepare_review_proposal and queue_review_proposal deliver the proposal to the window by themselves (status bar: "The AI proposed a change · Review"), without switching workspace and without --allow-changes; a proposal stored in a project with --allow-project-writes is found when that project is opened later, also in chromascope.exe. review_quantification with propose proposes new peak boundaries for a batch result; approving applies them exactly like a manual boundary edit, keeps the automatic peak, records both reasons on the result and refuses a proposal whose result changed since. The assistant cannot approve its own proposal. The server instructions, the tool descriptions and the review_integration prompt tell an assistant to propose when you ask it to. An empty list explains what a proposal is and how to ask for one. There is no separate "AI activity" workspace; show_workspace accepts data_explorer, quantification, method_editor and audit_package.
  • Stable dataset IDs. list_datasets shows a stable_id (the SHA-256 of the source file) next to the number; every tool accepts either, or a project dataset's UUID, so an AI cannot point at the wrong file after a restart.
  • MCP prompts and resources. The six workflow recipes (investigate_chromatographic_anomalies, review_integration, construct_calibration, troubleshoot_qc, compare_processing_methods, prepare_report) are offered as prompts by both servers. The desktop server publishes the open datasets, retained traces, quantification results, QC reports and project revisions as chromascope:// resources.
  • No window control without an MCP tool. src/gui/actions.rs maps every button, menu item and input to its tool, and tests/mcp_parity.rs fails when one is missing, when a listed tool is not offered, or when no test calls a tool over the protocol. Two actions are withheld on purpose: choosing the msconvert program, and approving or rejecting an AI proposal in the window.
  • Experimental workflows are hidden. Identification, Untargeted analysis and Statistics are compiled but only exposed when built with --features experimental. The engine itself rejects their operations with experimental_unavailable, so project re-processing and AI review proposals cannot run them either, and none of their tools, prompts or workspaces is listed over MCP.
  • Saves are atomic. Sessions, methods, batches, presets, settings and CSV/SVG exports are written to a temporary file in the same folder and renamed into place, so a crash or a full disk cannot destroy your only copy. Exports that create a new file never replace an existing one.
  • Numerical behaviour is written down. Precursor filtering matches scans within 0.01 Da (a miss is an error that names the window, not an empty trace), trace points are summed in double precision and rounded once to the stored 32-bit value, and settings are read field by field so one unreadable value does not reset the others. See the user guide.
  • Vendor file import through a separately installed ProteoWizard msconvert.
  • m/z tolerance in ppm or mDa for XIC extraction and methods, and a user-set number of m/z decimals (View menu); exports keep full precision.
  • Appearance. Light, dark or system theme, interface size, Inter and JetBrains Mono fonts; theme, size and m/z decimals live in one settings.json.
  • Installers for every platform: Windows MSI (x64, arm64, x86) and portable zip, macOS universal dmg and zip, Linux deb, rpm, AppImage and tar.gz (x86_64, aarch64), with SHA256SUMS.txt. Every package ships LICENSE and THIRD_PARTY_LICENSES.txt.
  • Hosted CI now also runs the tests on Windows and macOS and compiles on the minimum supported Rust (1.88); the release workflow runs the tests before it builds any installer.

Changed

  • Branding copy: the slogan "Analyze more. Click less." and the line "AI-assisted LC-MS analysis, across instrument vendors, with traceable results" on the README, the website home page (with OpenGraph tags), the About window and the chromascope-cli help; the package descriptions and the citation abstract say the same in one factual line.
  • The README and the website home page open with a centred introduction (logo, name, slogan, badges, links) and describe Chromascope as a free, lightweight, vendor-agnostic LC-MS workbench for targeted analysis; the browser tab of the home page reads "Chromascope: Analyze more. Click less."
  • The Reports tab is now Audit package; its workflow step, window title and documentation use that single name.
  • Window titles use sentence case ("Plot properties", "m/z range filter").
  • Release assets are named chromascope-<version>-<os>-<arch>.<ext>. v0.2.0 published only the GUI binary under target-triple names.

Fixed

  • Data explorer integration. "Integrate visible RT range" and a right-drag that starts outside the trace used to extend the edge intensity flat, so the area changed with the zoom and the recorded start/end fell outside the data. Windows are now clamped to the data, and a window that misses the trace is rejected.
  • CSV export and stale concentrations. Export CSV and the MCP export no longer write the latest calculated concentrations next to peak areas that changed after the calculation: when peaks or settings changed, the concentration columns stay empty and the message says to recalculate.
  • Report replay after relocating sources into a bundle; NaN scan windows; stale reference output in CI.

Security and licensing

  • The embedded JetBrains Mono font's SIL Open Font License text ships with the font and is shown in File > About Chromascope… > Credits & licenses, next to Inter's.
  • appimagetool is pinned to a tagged release and verified against a SHA-256 before it runs.
  • CSV exports prefix a text cell that starts with =, +, -, @, a tab or a carriage return with an apostrophe so a spreadsheet cannot run it as a formula; numbers are untouched.
  • Test data and reference files no longer contain an account name or local folder paths. The git history still does.
  • Every path an AI names goes through the same authorisation (--allow-root), exports and new saves never overwrite an existing file, and an AI can neither mark a peak as human-reviewed nor choose the msconvert program.

[0.2.0] - 2026-03-01

Multi-file support, per-precursor MS2 scan filters, peak integration, spectrum CSV export, newer egui/eframe, GPL-3.0 licence. Published as GUI binaries only.

[0.1.0] - 2024-08-17

First public release: lightweight mzML viewer with TIC, BPC and XIC extraction.