Instance Space Analysis Toolkit v0.9.1
Engineering-quality, architecture, and infrastructure follow-up to v0.9.0 — no changes to any pipeline algorithm's actual behaviour. Targets MATLAB R2025a or later.
New functionality
- Per-stage inspection callbacks in
build()/explore()— pass'onStage', @(stageName, model) ...to inspect intermediate results (e.g. PILOT's projection right after it's computed) without splitting a run into several staged calls. Purely additive; omitting it changes nothing. - CLOISTER's boundary is now rendered for 2D projections —
distribution_boundary.pngandInstanceSpace.plot('boundary'). (A three-year-old gap: CLOISTER always computed this bound, nothing ever drew it.) 3D projections are explicitly refused rather than shown inaccurately, since CLOISTER's own hull computation is still 2D-only (tracked separately, #50).
Better engineering
- Data ingestion given its own train/eval function (
INIT.m), closing a real drift between build-time and explore-time behaviour (see Bug fixes). - Per-stage input/output contract validation in
build()— a hand-edited or incomplete model now fails with a clear error naming the missing field, instead of an opaque crash deep in the pipeline. - CI added (GitHub Actions): runs the full test suite on every push/PR.
- Test suite migrated to
matlab.unittest, with code-coverage reporting. SECURITY.md/CONTRIBUTING.mdadded.- LIBSVM MEX-file provenance resolved — unbuildable precompiled binaries removed; a clear error now names the gap if a legacy model ever needs them.
- Minor:
FILTER's previously-discarded diagnostic outputs kept; a couple of small dead-code cleanups;CITATION.cfffixed so Zenodo archival stops silently failing.
Bug fixes
- Explore-time tie-breaking now matches build-time exactly, including the random tie-break for instances with more than one best-performing algorithm (previously silently broke ties by column order instead).
traceAlphaBoundarymulti-region export bug — a footprint with multiple disconnected regions previously only exported the first one.opts.general.seednow actually reaches PILOT and SIFTED — both previously ignored a configured seed and always used MATLAB's factory RNG state, silently defeating reproducibility/variance studies that rely on varying the seed.ISAmigrateModel's LIBSVM-retraining path used the wrong performance data, producing a visibly wrong-scale summary table for migrated models.- CLOISTER now warns when its correlation-contradiction filter runs against non-mean-centred data (
opts.norm.flag=false), a case where its sign-based check silently degrades. opts.perf.epsilonvalidation fixed forAbsPerf=true— previously accepted with no numeric validation at all.
See RELEASE_NOTES.md for full detail.
Full Changelog: v0.9.0...v0.9.1