You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Status (2026-07-21): restructured by the 2026-07 realignment — the remaining scope is cut into three behavior areas in this order: junction control (p4-s3/s4) → junction interior surface control (p4-s5) → maneuvers + signalization + signs (p4-s6…s9). 9/9 sprints done — all P4 sprints merged. p4-s7 (#228) shipped its own single-part rm:signalmount linkage (signal odr_id → object odr_ids, already list-shaped) rather than waiting on p6-s9 (assemblies, #323); when #323 lands it swaps a model id for an assembly id with no schema change. Explicit deliverable — DONE: the stopline entity was designed once (P4 discovery §3) and landed in p4-s3 (#318): records sparse on Junction keyed by RoadEnd, one pure junction_stoplines() query shared by the mesher, the writer, the editor and the bindings, and rm:stopline persistence per ADR-0008 (materialized signalLines object = Layer 0, userData = Layer 1). The P3 crosswalk companion migrated onto it; p4-s6 maneuver termination reuses it. The #318 GUI hand-check (drag/flip/save/reload/third-party viewer) is still pending the maintainer — recorded as GW-5 step 5b.
Every new non-ASAM carrier in this pillar (rm:stopline, locked-state/span extensions, span records, rm:maneuver, rm:phases) follows ADR-0008.
Follow-ups: #311 (pre-existing write_xodr segfault on a junction with a dangling arm road) RESOLVED 2026-07-20 in PR #330 — p4-s4 is no longer gated, #313 (USD compliance wrapper migration; CI pins usd-core<26.8 meanwhile).
GW-3 steps 6–11 are implementable — the hand-run gates this epic together with GW-4. Update (2026-07-23, field triage batch 2 — #397): the pillar was sprint-complete; it reopens for one release-blocking item — bug #402 (junction-floor sidewalk band segmentation: jagged seams + zero-band collapse; not a #385 regression, lands before#356). Gates v0.1.0 per the batch-2 decision. GW-3/GW-4 hand-run status is unaffected until it lands. Update (2026-07-25):#402landed (PR #441, main 408266a). The pillar's remaining open item is #356 (curved-approach corner solver, still DEFERRED pending a field repro), plus the GW-3/GW-4 hand-runs — so this epic stays open.
Update (2026-07-27): two changes. #356's deferral premise is gone — it reproduces in the headless harness (PR #445, main dd593d7; the missing ingredient was the sidewalk profile, no field file needed), so the solver redesign is unblocked. And #440 (junction floors + ground surfaces are untextured — no UVs; split out of #360) is homed here per maintainer decision, release-blocking under the amended gate rule (PR #458: follow-ups of gated issues inherit blocking status).
Update (2026-08-02):#356 is fixed (PR #559, main d41052f) — the solver redesign the 2026-07-22 findings called for, verified headlessly rather than visually as that comment predicted would be necessary. The pillar's remaining open items are #440, #480, #534, #537 and the GW-3/GW-4 hand-runs, so this epic stays open.
Scope
Corner tool (done: control-vertex/extent reshape, radius, materials); junction control: stopline entity + per-road default stoplines, locked/custom junctions (manual create, convert auto↔locked, add/remove roads, merge, parallel-road s-span and single-road junctions, corner re-derivation); junction interior surface control: per-span visualization, Include Samples, Sort Index; maneuvers + signalization + signs: maneuver roads with Lock Geometry and Turn Type; Signal tool with auto-signalize templates and <controller> export; Signal Phase Editor in the 2D Editor pane; Sign tool with editable text.
Pillar P4 of the Road to Parity roadmap · Milestone P4 — Junctions & Signals · P4 discovery.
Scope
Corner tool (done: control-vertex/extent reshape, radius, materials); junction control: stopline entity + per-road default stoplines, locked/custom junctions (manual create, convert auto↔locked, add/remove roads, merge, parallel-road s-span and single-road junctions, corner re-derivation); junction interior surface control: per-span visualization, Include Samples, Sort Index; maneuvers + signalization + signs: maneuver roads with Lock Geometry and Turn Type; Signal tool with auto-signalize templates and
<controller>export; Signal Phase Editor in the 2D Editor pane; Sign tool with editable text.Feeds
GW-3, GW-4.
Sprints
Follow-ups
write_xodrsegfault on a junction with a dangling arm road (PR fix(xodr): never dereference a stale road link when writing (#311) #330, main ce06d84) — the writer now resolves road links before dereferencing; unblocks p4-s4d41052f). All four causes the instrumentation plan named were wrong: every corner solvedvalid=trueand nothing early-returned. The real fault was that a road curving THROUGH the junction had its two halves treated as a 112° street corner, so the straight rays met at a fabricated apex 7.18 m beyond the true pavement edge. Detected now the way the straight case always was (parallel_edges's curved analogue) and paved as the arc corridor the edge describes. Straight approaches bit-identical; ASan/UBSan clean<validity>lane restrictions are preserved but invisible and unauthorable (§14.2/§13.6; 2026-07-28 roadmap review; awaiting triage — not release-blocking unless triaged in)@typedropped, every connection skipped as "unknown road", saved back as an empty common junction (2026-07-31 roadmap review; awaiting triage)@elementS/@elementDirdropped, foreign virtual-junction connections deleted, connection children beyond<laneLink>dropped (2026-07-31 roadmap review; awaiting triage)408266a) — the floor is now cut ALONG the sidewalk seam (the band's interior outline becomes constrained CDT edges before triangulation) instead of classified near it; all four numeric criteria met with margin (mid-band misclassification 0.000 % vs a < 1 % ceiling, seam deviation ≤ 0.0006 m vs < 1.0 m, zero collapses), measured by the triage's probe oracles now living incore/tests/test_junction_sidewalk_bands.cppSupersedes
(none)