`oxmpl` - backlog
Backlog
Parking lot for deferred and undecided work. This file records items deliberately deferred during release planning, with the reasons and revisit conditions, so they can be picked back up later. It is not the plan of record — epics, stories, and sprints are tracked in TaskNotes and the sprint pages here in the vault (see
oxmpl- planning). Items only move from here into committed work when agreed in release planning.This file belongs to the OxMPL personal planning vault. The technical counterparts live in the repo: domain vocabulary in the root
CONTEXT.md, decisions indocs/planning/adr/.
Agreed release line (decided in release planning)
- 0.7.0 — Stability & Robustness: ship the
State/AnyStaterefactor already on main (repo:docs/planning/adr/0002-two-tier-state-traits.md); propagate sampling errors instead of panicking; keep timeout as the sole termination condition; library hygiene. Breaking changes allowed — pre-1.0, breaking bumps the minor (repo:docs/planning/adr/0001-pre-1.0-versioning-policy.md). - 0.8.0 — Toolchain refresh (E3): every dependency and tool brought current; breaking by decision (rand 0.10 renames, Python ≥ 3.11, Rust ≥ 1.85 / edition 2024); tokenless Trusted Publishing on all registries. Agreed 2026-10-08.
- 0.9.0 — Validation (E4): pluggable motion validation after OMPL —
SpaceInformation, fallible thread-safe validation, space-owned resolution, typed binding errors, user motion validators, PRM milestone budget (repo:docs/planning/adr/0003-motion-validation.md). Agreed 2026-10-08. - 0.10.0 — Path Quality: path simplification module mirroring OMPL's
PathSimplifier(scope below). Moved from 0.8.0 on 2026-10-08: the simplifier is built on motion validation, which lands in 0.9.0. - Beyond: chosen from the candidates below during future release planning.
Path simplification — deferred from 0.10.0
0.10.0 scope is fixed (retargeted from 0.8.0 on 2026-10-08): reduce_vertices, collapse_close_vertices, smooth_b_spline, exposed individually plus a simplify_max convenience and a time-bounded simplify — mirroring OMPL's default simplifyMax pipeline. Deferred, with revisit notes:
partial_shortcut— stochastic shortcutting between intermediate path points, not just vertices (Geraerts & Overmars, Clearance-based path optimization, ICRA 2004). Stochastic; no clear termination besides step budgets.rope_shortcut— deterministic RRT-Rope shortening (Petit & Desbiens, SMC 2021); specifically tuned for RRTConnect output. Natural fit once RRTConnect users ask for shorter paths.perturb_pathandfind_better_goal— blocked: both need concepts OxMPL does not have yet (an optimization objective; a goal-sampling region). Revisit after 0.10.0, when the simplifier module gives them a home.- Metric-space caveat (design note for 0.10.0): several OMPL operations assume the triangle inequality. OxMPL's
distanceis defined per state space; the simplifier must document which operations require a metric space.
Robust binding errors — deferred from Sprint 001 → absorbed into S4.6 (0.9.0)
-
Resolved 2026-10-08: error contract agreed in the grilling (ADR-0003) and committed as S4.6 — Binding error hierarchy. Entry kept for history; move to Completed when 0.9.0 ships.
-
Intent: Let Python and JavaScript callers distinguish planner failure kinds without parsing message text. Improve generic Python exceptions and replace JavaScript's thrown strings with proper error objects. The exception hierarchy and cross-language mapping remain the owner's technical decision.
-
Reason deferred (2026-10-05): Owner wants this improvement but not in the current sprint. S1.2 already verifies that sampling failures are catchable through the existing bindings; changing the public error API is separate work.
-
Revisit: At the next release-planning discussion after 0.7.0, agree the error contract, compatibility impact, acceptance criteria, and release scope before creating a committed story. No target release or sprint is assigned.
-
Reminder: NOTE/TODO callouts in
docs/src/python_api.mdanddocs/src/js_api.md; no implementation is included in Sprint 001.
Goal-region re-sampling for RRT-Connect — deferred 2026-10-08
- Intent: RRT-Connect seeds its goal tree with a single
sample_goal()root; OMPL re-samples goals during growth (criteriongetSampledGoalsCount() < tGoal_->size()/2), which strengthens RRT-Connect on sampleable goal regions. - Reason deferred: a feature-parity gap, not determinism/performance; removed from E2 in the 2026-10-08 grilling. Former ticket S2.3 (cancelled; its details keep the full analysis).
- Revisit: with the samplers work, which also changes goal sampling.
Candidates for 0.11.0+
- Nearest-neighbour data structures (formerly listed as "KdTrees"): the domain concept is nearest-neighbour search; the data structure is an implementation choice. OMPL defaults to GNAT, not Kd-trees — Kd-trees handle non-Euclidean/compound spaces poorly, and OxMPL's spaces (SO2, SO3, SE2, SE3, Compound) are exactly those. Status quo is a linear scan in every tree planner. Decide with metric constraints in view; this also unlocks revisiting planner termination knobs (
max_iterations) once benchmarking exists to tune them. - Samplers (informed, Gaussian, obstacle-based, …): best sequenced after NN work — informed sampling exploits NN structures, and RRTStar quality gains are largest when both exist.
- Benchmarking: a full benchmark suite deserves its own release once there are variants worth comparing (multiple planners × NN structures). Until then: light benchmarks only as acceptance criteria (e.g. "simplified path ≥ X% shorter on fixture scenes" in 0.10.0).
- Visualisation tooling: still parked, no agreed direction.
- Python bindings refactor (
oxmpl-py): may revisit later.