VAMOS Engineering Audit¶
Last updated: 2026-05-02
This page records the current publication-readiness audit for VAMOS. It is intentionally blunt: the goal is to keep the public docs aligned with what the codebase actually does today.
Follow-up Status¶
Additional follow-up on 2026-05-02 addressed the highest-risk engineering findings outside release metadata:
- archive config validation now accepts the maintained bounded-archive schema
- population evaluation rejects missing, wrong-shaped, or non-finite objective/constraint outputs
- build smoke checks clean stale build artifacts and verify wheel modules against
src/vamos - algorithm package exports are lazy, and import-cycle checks now cover algorithm modules
- AGE-MOEA and RVEA config schemas are included in experiment-spec validation
- algorithm plugins can be discovered through the
vamos.algorithmsentry point group - operator validation derives known names from runtime registries instead of a stale hardcoded list
- bounded archive nondominated/crowding paths reuse vectorized kernel helpers, and 2D HV contribution pruning is linear in archive size
- Dask evaluation fallback is explicit via
fallback_to_serial=True - CI mypy coverage now includes registry, config-spec, evaluation, and optimization-result layers
Release metadata/classifier status is tracked separately from this page.
The highest-friction CLI issues identified in this audit were fixed in a follow-up patch on 2026-03-31:
- standard
vamos --problem ...execution now has subprocess smoke coverage vamos quickstart --yes ...execution now has subprocess smoke coveragevamos create-problem --yes ...execution now has subprocess smoke coverage- CLI
--engine autois now accepted and covered by smoke tests - config-driven
vamos --config ...execution and--validate-confignow have subprocess smoke coverage vamos bench ... --smokenow provides a cheap, real orchestration path for benchmark CLI smoke coveragevamos tune ... --backend random --smokenow provides a cheap, real orchestration path for tuning CLI smoke coveragevamos profileand the commonvamos zoocommands now have real execution smoke coverage- CLI guide command examples now have dedicated command-level smoke coverage in the docs test suite
- README command examples now have dedicated command-level smoke coverage for the published onboarding path
- The canonical tuning guide now has command-level smoke coverage for the maintained tune smoke path
- SPEA2 raw-fitness and density computation now run through a vectorized path rather than nested Python loops
- IBEA hypervolume indicators now use an exact vectorized matrix formulation instead of repeated pairwise hypervolume calls
- the NumPy kernel now uses chunked tournament sampling and a memory-safe blocked non-dominated sort path for large arrays
- genealogy tolerance matching now uses a shared blocked matcher instead of row-by-row survivor scans
optimize(..., seed=[...])now returnsStudyResultwith built-in aggregation helpers- algorithm config builders now share internal mixins instead of repeating the same fluent method bodies across every algorithm
- source docstrings are now normalized away from Google-style
Args:sections, and tests now guard against reintroducingnp.random.rand(in the test suite - the repo now ships a pinned paper environment snapshot at
paper/requirements-publication.txt
The remaining sections preserve the audit rationale, especially around vectorization semantics, reproducibility expectations, and test-surface gaps outside the common path.
Executive Summary¶
VAMOS has a credible technical core and is in materially better shape than it was at the time of the original audit. The programmatic optimize(...) API now has a stronger multi-run surface through StudyResult, the standard CLI onboarding path is smoke-tested, and the published README/CLI/tuning command surface has real command-level coverage instead of relying on help text or trust. The main technical blockers around SPEA2, IBEA, large-tournament fallback behavior, and large-population non-dominated sorting were also reduced with exact vectorized or blocked implementations. The remaining publication risks are narrower: some performance-sensitive utilities outside the main kernels still deserve more benchmarking, the heaviest optional tuning and benchmark matrices still have thinner verification than a publication-grade framework should target, and packaging metadata is not yet at a final 1.0-style release gate. Against pymoo, VAMOS is now materially closer on user-facing polish and evaluation-surface clarity, but it still trails on ecosystem maturity and benchmark ergonomics.
Current grades:
- Architecture and design: B
- API design and user-friendliness: B-
- Code quality and maintainability: B
- Testing and reliability: B+
- Performance and vectorization: B-
- Packaging and distribution: B
- Documentation and onboarding: B+
- Comparative best practices vs pymoo: B
Critical Issues¶
1. Run-oriented CLI onboarding was broken at audit time¶
Verified behavior:
vamos --problem zdt1 --algorithm nsgaii ...fails withInvalid operator spec for 'crossover'.vamos quickstart --yes --no-plot ...fails with the same underlying error.
Root cause:
src/vamos/experiment/cli/common.pyemits variation override dictionaries even when the operatormethodisNone.src/vamos/engine/algorithm/_builder_common.pyforwards those dictionaries into variation resolution.src/vamos/engine/config/variation.pycorrectly rejects them as invalid operator specs.
Status:
- Fixed in follow-up. Base CLI runs and quickstart execution now have smoke coverage for the common path.
2. CLI help and runtime disagreed on --engine auto¶
Verified behavior:
src/vamos/experiment/runtime/catalog.pysupports programmaticengine="auto".src/vamos/experiment/cli/args_core.pyrestricts CLI--enginechoices tonumpy,numba, andmoocore.- The CLI help text still tells users to pass
--engine auto.
Status:
- Fixed in follow-up. The CLI parser now accepts
--engine auto, and the common path is smoke-tested.
3. make_problem(..., vectorized=False) is elementwise adaptation, not auto-vectorization¶
Verified behavior:
- In
src/vamos/foundation/problem/builder.py, scalar problems are evaluated with a Python loop over rows whenvectorized=False. - That is compatibility-focused elementwise adaptation, not real vectorized execution.
Comparison to pymoo:
- pymoo explicitly distinguishes batched
Problemand elementwiseElementwiseProblem. - VAMOS should be equally explicit instead of describing the elementwise adapter as "auto-vectorization".
Documentation consequence:
- Tell users that scalar callables are supported for convenience.
- Tell performance-sensitive users to pass
vectorized=Trueand implement a true batched function.
Important Improvements¶
Extend smoke coverage beyond the common onboarding path¶
The current test suite exercises the Python API and many core internals. The common CLI onboarding path, config-driven CLI execution, benchmark smoke mode, tune smoke mode, create-problem, profile, zoo, and the published README/CLI-guide/tuning-guide commands now have subprocess smoke coverage. The next gap is breadth rather than total absence. VAMOS should continue by adding:
- broader benchmark/tuning smoke coverage beyond the current
vamos bench ... --smoke,vamos tune ... --smoke, and the existing tune split/fallback slices - broader docs smoke coverage for additional CLI subcommands beyond the current guide examples and common paths
Stop publishing stale CLI and tooling commands¶
The docs had drift such as:
--nsgaii-replacement-sizedocumented after it was removed from the parserpython tools/health.py --mypy-fulldocumented even though the tool does not implement that flag
Every CLI or tooling command that appears in public docs should either be smoke-tested or clearly labeled as reference syntax.
Tighten public typing and exception contracts¶
Internally, the repo already uses mypy and a custom exception hierarchy. Public surfaces still expose some weak contracts, including object and Any in optimize-layer overloads and inconsistent exception documentation around make_problem() and Problem.evaluate(). This is fixable, but the docs should not overclaim a stricter public contract than the code currently provides.
Publish a pinned paper environment¶
The research extra intentionally keeps wide version ranges for benchmarking libraries. That is acceptable for installation flexibility, but it is not enough for paper-grade reproducibility. Publication artifacts should include a lockfile or fully pinned environment spec.
Comparative Notes vs pymoo¶
Where VAMOS currently falls short of reviewer expectations set by pymoo:
- pymoo is clearer about evaluation mode. Its docs separate elementwise and batched problems instead of implying that one becomes the other automatically.
- pymoo's getting-started surface is more internally consistent: advertised commands and documented options generally work as shown.
- VAMOS has stronger architecture-health guardrails than a typical research repo, but reviewers will notice onboarding breakage before they notice internal discipline.
Strengths¶
The audit is not uniformly negative. Specific strengths worth preserving:
- The programmatic
optimize(...)path is viable and should remain the primary public facade. - The registry/config architecture provides a real extension story for algorithms, operators, and problems.
- The repo already ships typed package metadata (
py.typed) and runs architecture-focused tests, not only numerical correctness tests. - Optional backends and extras are cleanly separated enough that the core package is still usable without the full research stack.
Maintainer Guidance¶
When updating docs, examples, or agent playbooks:
- Prefer
optimize(...)for the shortest first script, but it is now accurate to document the standard CLI path as smoke-tested for NSGA-II/ZDT1. - Do not claim that scalar custom problems are vectorized unless the user explicitly passes
vectorized=True. - CLI
--engine autois now supported; keep parser/help/runtime behavior aligned and covered by tests. - Treat benchmark-facing environments as pinned artifacts, not just extras declarations.