`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.