--- myst: html_meta: "description": "Detailed release notes for eOn v2.14.0: structured readcon-core movie metadata, ARTn filin, batched parallel NEB forces, shared-instance threading fix, visualization tutorial." "keywords": "eOn release notes, readcon-core, trajectory metadata, ARTn filin, batched NEB forces, MyST-NB tutorial" --- # Release notes ## [v2.14.0] - 2026-XX-XX See the [CHANGELOG](project:../changelog.md) for the fragment-by-fragment list; this page picks out the user-facing highlights. ### Trajectory output #### Structured per-frame metadata in `.con` movies Minimization, saddle-search, and NEB movies now embed structured per-iteration metadata directly in each `.con` frame via [readcon-core](https://github.com/lode-org/readcon-core) (bumped to `0.8.0`). Energies, force norms, iteration indices, and method-specific scalars ride with the frame they describe, so downstream consumers can parse a single file instead of zipping the movie against an external `.dat` table. The legacy sidecar `.dat` files are kept behind `write_deprecated_outs = true` for one release so pipelines that still depend on them have a migration window. New code should read the frame metadata from the `.con` itself. See the [visualization tutorial](project:../../tutorials/visualization.md) for a MyST-NB executable walkthrough. Contributing commits: - `feat(traj): structured per-iteration .dat output for movies` - `fix(traj): embed movie metadata in .con frames` - `fix(io): harden readcon movie outputs` - `fix(io): keep multi-frame .con writers alive across appends` - `test(io): cover compatibility outputs and NEB metadata` #### Visualization tutorial A new MyST-NB executable tutorial at `docs/source/tutorials/visualization.md` walks through generating a trajectory, plotting the energy landscape, and rendering NEB profiles with `rgpycrumbs`, pinned to a validated plotting stack. Uses an HCN NEB demo keyed to the `eon_orchestrator` configuration. ### Saddle search #### ARTn `filin` input file The `[ARTn]` section gains a `filin` key that maps to pARTn's namelist filename. Empty (the default) preserves the post `artn_create` `NAN_STR` (`"BBBB"`) sentinel, so pARTn reads no file and every parameter comes from the eOn INI. Setting `filin` to a path wires that file into pARTn setup; eOn now checks the file exists up front and aborts with a clear message before `setup_artn` runs, instead of letting the failure hide inside pARTn's generic `ERR_FILE` code. See the [ARTn user guide](project:../../user_guide/artn.md). ### Parallelism #### Batched force evaluation for NEB NEB parallel image evaluation switches from one-thread-per-image to batched potential calls, cutting scheduling overhead for medium-sized bands with cheap potentials. The batched path reuses the per-image thread-safety contract established in v2.13.0 and does not change the opt-in (`parallel = true` in `[Main]`). Contributing commit: - `feat: batched force evaluation and parallel NEB fix` #### Shared-instance threading fix for legacy Fortran potentials Legacy Fortran-backed potentials (EAM_Al, FeHe, Lenosky_Si, Morse_Pt, SW_Si, Tersoff_Si, EMT, XTB when built without the reentrant flag) are now gated out of the shared-instance parallel path. The prior code assumed every `Potential` could be called from multiple threads against a single instance, which broke potentials whose Fortran backend carries module-level state. These potentials now fall back to the serial code path under `parallel = true` rather than corrupting internal buffers. Contributing commit: - `fix(parallel): gate shared-instance threading for legacy Fortran potentials` ### Parameters #### JSON round-trip for `[Debug]` options `ParametersJSON::to_json` always emitted a `Debug` section but `from_json` had no matching handler, so `write_movies`, `write_movies_interval`, and `write_deprecated_outs` were silently dropped on any JSON deserialization. The round-trip is now symmetric and the new `test_params_json` case enforces it. Contributing commit: - `fix(params): round-trip debug options through JSON` ### Build #### cbindgen provisioning `cbindgen` is now installed into the pixi env's `bin/` and wired into the `setupeon` dependency graph, so `meson setup` on the `readcon-core` subproject no longer fails with "Program 'cbindgen' not found" on fresh clones. Contributing commit: - `build(pixi): install cbindgen into env bin and wire setupeon dep` #### Metatomic runtime RPATH `eonclient` now encodes the metatomic runtime library paths at link time, so downstream tutorials and examples running against a pixi dev env no longer need to hand-massage `LD_LIBRARY_PATH`. Contributing commit: - `fix(build): encode metatomic runtime paths in eonclient` ### Deprecations and breaking changes - `write_deprecated_outs` keeps the legacy `.dat` sidecar tables for minimization and saddle-search for one release. The sidecars will be removed in v2.15.0; migrate to reading per-frame metadata from the `.con` movie output. ### Build requirements - `readcon-core >= 0.8.0` (auto-resolved by the meson wrap). - `cbindgen` on `PATH` at configure time (now provisioned by the pixi env for dev builds). - All other requirements unchanged from v2.13.0.