`oxmpl` - roadmap

Roadmap

Epics and stories agreed with the product owner. Entries are added only when agreed — never bulk-imported from docs/BACKLOG.md.

E1: Release 0.7.0 — Stability & Robustness

Ship main's breaking refactors (AnyState trait, simplified State trait, direct SE2/SE3 structs) plus planner error-handling robustness, with bump-minor-pre-major: true so the release lands as 0.7.0, not 1.0.0 (ADR-0001). Full context: oxmpl - sprint-001.

Story Size One-liner
S1.1 S Flip bump-minor-pre-major: true in release-please config
S1.2 M Sampling errors propagate as PlanningError::Sampling(..) in all four planners + bindings
S1.3 S Timeout-only termination; rrt.rs iteration TODO resolved by decision
S1.4 S No println! in library code
S1.5 M Release chores: v0.7.0 published (crates.io, PyPI, npm)

E2: Planner Determinism & Performance (0.7.x) — superseded

Created 2026-09-22 from root causes found during S1.4 verification. Superseded 2026-10-08 by E4 after the senior-engineer grilling: S2.1 → S4.1, S2.2 → S4.3/S4.4, S2.3 → backlog (goal-region re-sampling). Tickets cancelled, not done.

E3: Release 0.8.0 — Toolchain refresh

Bring every dependency and tool current and resolve the resulting breakages before validation work starts. Breaking by decision: rand 0.10 trait renames, Python ≥ 3.11, Rust ≥ 1.85 / edition 2024. Publishing moves to tokenless Trusted Publishing on PyPI and crates.io; 'latest' versions banned from workflows; Dependabot added. Blocks E4. Full context: oxmpl - sprint-002.

Story Size One-liner
S3.1 M Rust core: edition 2024, rust-version 1.85, rand 0.10 / getrandom 0.4
S3.2 M Python: PyO3 0.29, maturin ≥ 1.15, requires-python >=3.11, pytest 9
S3.3 M JS: wasm-pack 0.15, vitest 5 + vite 8, eslint 10, typescript ^6 pinned
S3.4 M CI: current action majors, Trusted Publishing, cargo publish --workspace, Dependabot
S3.5 S Dev environment (flake update) + docs under mdBook 0.5
S3.6 S Release 0.8.0 published (crates.io, PyPI, npm)

E4: Release 0.9.0 — Validation

Replace the four private check_motion copies with a pluggable motion-validation model after OMPL: SpaceInformation as the single source of validity, fallible thread-safe validation, space-owned resolution (no hidden ×0.1), typed binding errors, user motion validators in Python/JS, reproducible PRM roadmaps. Decisions: repo ADR-0003. Gated on E3. Provisional schedule (scaffolded 2026-10-08, uncommitted): oxmpl - sprint-003 S4.1–S4.3 → oxmpl - sprint-004 S4.4–S4.5 → oxmpl - sprint-005 S4.6, S4.8 → oxmpl - sprint-006 S4.7, S4.9, S4.10; target release ~2027-01-20.

Story Size One-liner
S4.1 M PRM milestone budget (additive; reproducible roadmaps)
S4.2 M Fallible, thread-safe validation core (UserError, PlanningError::User)
S4.3 S Space resolution: valid_segment_count, max-of-components, default fraction 0.01
S4.4 M MotionValidator trait + DiscreteMotionValidator; four check_motion copies deleted
S4.5 L SpaceInformation migration (~147 call sites; the big break)
S4.6 M Binding error hierarchy (OxmplError; original user exceptions re-raised)
S4.7 M User motion validators in Python/JS
S4.8 M Resolution exposed for all six spaces in both bindings
S4.9 M Docs, migration guide, ADR-0003 accepted
S4.10 S Release 0.9.0 published

Next: Release 0.10.0 — Path Quality

Path simplification (scope in oxmpl - backlog). Not yet an epic; created at release planning after 0.9.0.