E4: Validation — 0.9.0
Goal
Release 0.9.0 "Validation": replace the four private check_motion copies with a pluggable motion-validation model after OMPL — SpaceInformation (space + state validity checker + motion validator) as the single source of validity; fallible, thread-safe validation; resolution owned by the state space (max-of-component counts, default fraction 0.01, no hidden ×0.1); typed binding errors; user motion validators in Python/JS (one cross-language call per motion); reproducible PRM roadmaps via a milestone budget.
Decisions: repo docs/planning/adr/0003-motion-validation.md; glossary: CONTEXT.md. Supersedes E2. Gated on E3 (0.8.0).
Stories
- S4.1 — PRM milestone budget (size-M) — supersedes S2.1
- S4.2 — Fallible, thread-safe validation core (size-M)
- S4.3 — Space resolution: valid segment count (size-S)
- S4.4 — Motion validator trait and discrete validator (size-M; after S4.2, S4.3) — supersedes S2.2
- S4.5 — SpaceInformation migration (size-L; after S4.4)
- S4.6 — Binding error hierarchy (size-M; after S4.2)
- S4.7 — User motion validators in the bindings (size-M; after S4.5, S4.6)
- S4.8 — Resolution exposed in the bindings (size-M; after S4.3)
- S4.9 — Docs, migration guide, ADR-0003 accepted (size-M; after all)
- S4.10 — Release 0.9.0 (size-S; after all)
Parallel: S4.1–S4.3 have no intra-epic dependencies; S4.6 and S4.8 can run alongside S4.5.
Provisional schedule: 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 2027-01-20. Full regeneration spec for E4 and every story lives on those pages.