Development responsibilities
TL;DR
- Rust
menobis-core— all heavy computation. Minimal public API. - Rust
menobis-python— thin pyo3 bindings; no logic beyond argument transformation; type stubs in_menobis.pyi. - Python
src/menobis/— validation, orchestration, CLI, I/O. - Rust
menobis-test-oracles— exact (slow) backends for cross-validation. Never imported by production code.
The full Rust module map lives in Architecture.
menobis-test-oracles (validation)
NOT a production dependency. Contains legacy exact backends (DP, rejection, enumeration, max-flow, greedy constructor, stub matching) and cross-validation tests. Validates that the fast production code matches exact results for small N. Seeds are deterministic; test sizes are bounded.
Test separation
| Where | What | Speed |
|---|---|---|
menobis-core #[cfg(test)] |
per-function unit tests | < 1 s |
menobis-test-oracles/tests/ |
production-vs-oracle cross-validation | moderate |
tests/ (no mark) |
Python API contract, routing, data flow, docs contract | seconds |
tests/ @pytest.mark.heavy |
E2E recovery, strength-cost, deep oracle | minutes |
uv run pytest for the fast suite; uv run pytest --run-heavy for the full
suite; cargo test --workspace for all Rust including oracles.
How to extend
- Implement the kernel in
menobis-core. - Add a pyo3 binding in
menobis-python+ type stub in_menobis.pyi. - Wire into the Python routing layer (
routing.py). - Test at Python level (light: API, heavy: E2E recovery).
- Validate against the oracle crate for small N.
See Extending MENoBiS for the full guide, including the contributor documentation policy.