Added
- **Analysis:** PlotSpec rendering helpers; structural per-file `file_strides`; energetic log stride helper (`energy_stride`)
- **Tools:** trajectory PBC fixing (`trajectory_tools` / `fix_pbc_worker`) with GROMACS / cpptraj / MDAnalysis paths
- **Equilibration resources:** per-stage CPU/GPU in `equilibration_resources.json` (engine-specific defaults; Amber picks `pmemd` vs `pmemd.cuda` per stage)
- **Equilibration (NAMD):** `gpu_resident` option on `setup_namd_equilibration` — writes `GPUresident` on the production stage only; equilibration keeps `reassignFreq`/`reassignTemp`; persisted on `equilibration_job.json`
- **Cluster mid-run progress:** sync `step*.log` (and related progress files) from node-local scratch → submit directory — batch scripts rsync every 60s; API helper SSHs to the allocated node for Watching/Pull on jobs already running
- **Cluster status:** job-status records allocated CPUs, node name, and node GPU type (from `sinfo` GRES) on `execution` for Watching cards
- **Equilibration job metadata:** if `equilibration_job.json` has only an `execution` block, infer protocol/ensemble/input_dir from `protocol_summary.json` and heal the job JSON (fixes **Use in form** after cluster Watching)
- **Equilibration (remote / Slurm):** `gatewizard.utils.cluster` — module/`sinfo` parsers, workdir strategies (scratch stage-in/out), editable batch templates, Slurm adapter (+ PBS stub), SSH/rsync helpers, and `execution` metadata on `equilibration_job.json`
- **Equilibration dual run scripts:** generate/refresh write `run_equilibration.sh` (local Executable) and `run_equilibration_cluster.sh` (module-friendly `namd3`/`gmx`/`python3`/`pmemd[.cuda]`); Slurm defaults to `bash run_equilibration_cluster.sh`
- **Equilibration failure detection:** scan stage logs / Slurm outs for FATAL / CUDA stub / Error in Stage (empty `.out` no longer hides NAMD failures)
- **Cluster probe:** list compute nodes via `sinfo -N`; batch templates support `SBATCH --nodelist=` / `--constraint`
- **Equilibration (Amber):** full `AmberEquilibrationManager` — mdin templates for NVT/NPT/NPAT/NPgT, MDA GROUP positional restraints (no dihedrals), `run_equilibration.sh` with resume/resources, executable discovery (`pmemd.cuda` → `pmemd` → MPI → `sander`), and `amber_analysis` progress/energetic parsing
- **Equilibration templates:** generated inputs stamp GateWizard API version, local generation time (with timezone), and shared templates version (`testing` for now — protocols are still evolving) for traceability
Changed
- **README:** GateWizard splash lockup at the top of the repo README
Fixed
- **Cluster upload:** Paramiko SFTP recursive put fails clearly on zero/partial uploads; `verify_remote_files` ensures the launched run script / `.slurm` exist before `sbatch`
- **Cluster probe:** reject help-text tokens from broken `module avail` output; surface probe errors; prefer GPU partitions via `prefer_partitions`
- **Equilibration (NAMD):** production (and any stage that finishes after the last `TIMING` print) no longer shows `0.0 ns/day` — use `Wall:` / final `WallClock:` for performance and elapsed time instead of overwriting wall time with `0.0` when promoting the final output step
- **Analysis (bilayer thickness):** when the membrane straddles the periodic z boundary, thickness no longer reports the water gap (`L_z − d` ≈ 100 Å); center the bilayer in z before lipyphilic and fold long PBC paths back to the headgroup–headgroup distance (~35-40 Å for POPC)
- **Analysis (bilayer time axis):** APL/thickness x-axis follows the sum of `file_times` instead of falling back to a tiny default dt
- **Equilibration (Amber/GROMACS):** if official ns/day is missing from the log, estimate it from wall elapsed × simulated time (completed stages included)
- **Equilibration (NVT):** Amber, NAMD, and GROMACS `01_NVT` templates are true constant-volume NVT through production (aligned with OpenMM); CHARMM-GUI’s NVT packs incorrectly matched NPT after early heating
- **Equilibration (NAMD NPAT):** steps 6.3–6.6 now use `useConstantArea` like CHARMM-GUI (they incorrectly had NPgT `useConstantRatio` / `SurfaceTensionTarget`)
- **Equilibration (GROMACS):** GPU `mdrun` lines now include `-ntmpi` (one rank per GPU) with `-ntomp`, required by GROMACS 2026 when OpenMP threads and GPUs are combined
- **Equilibration (GROMACS):** step0 energy minimisation runs on CPU only (`-ntmpi 1 -ntomp … -nb cpu -pme cpu`) — PME GPU does not support `steep`/`cg`, and GPU-capable `gmx` still requires `-ntmpi` with `-ntomp` even without GPU offload flags; MD stages still use GPU flags when requested
- **Equilibration (GROMACS):** omit unused `POSRES_FC_*` macros from MDP `define` lines (fixes grompp warnings for WATER/OTHER when those restraints are not in the topology)
- **Equilibration (GROMACS):** parse GROMACS 2026 energy-minimisation start banner (`Started Steepest Descents` / `Conjugate Gradients`) so job cards show elapsed wall time for minimization
- **Equilibration (GROMACS):** Kill MD / SIGTERM often still writes `Performance` + `Finished mdrun` before `nsteps` is reached — no longer treat that as stage completion or force progress to 100%; keep actual steps/ns and mark the stage interrupted