nigig-org/crates/apps/nigig-traffic/docs/CURRICULUM_MATRIX.md

13 KiB
Raw Permalink Blame History

nigig-traffic curriculum matrix (TRAFFIC-08, practice-preview stage)

Target jurisdiction: unreviewed-general. Curriculum source/version: NONE — no qualified driving-instructor / traffic-law review has happened. Every row is Practice preview — finish marker only until a reviewer signs the row's geometry + observations + rule + replays + copy, at which point the row's content version leaves LegacyUnvalidated (0).

Conventions: real = implemented, tested observation/rule. reserved = payload exists but is NOT checked. Replays are headless (scenario_replays, rule_adversarial, coordinate_properties) unless marked GUI (blocked on the TRAFFIC-14 harness). Scoring: validated max_points (100 everywhere today) − 5 per recorded mistake, pass ≥ 70%, terminal result immutable. Accessibility: keyboard + touch (left-steer / right-pedal, P pause); no audio cues, no remapping UI yet.

Lanes (lane observation: course-relative offset, REAL; change/intent: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
lane_straight Hold centre straight steer/throttle/brake 2-lane road, primitives none lane offset REAL; indicator reserved drift >2 m mistake; finish = practice done drive centre to finish drift 6 m → mistake unreviewed
lane_hold_curve Hold lane on bend steer/throttle/brake curved road, primitives none lane offset REAL same steer bend to finish drift → mistake unreviewed
lane_two_lane_keep Keep correct lane steer/throttle/brake 2-lane road, primitives none lane offset REAL same hold lane to finish drift → mistake unreviewed
lane_change_right Change lane right steer/throttle/brake 2-lane road, primitives none lane offset REAL; indicator reserved drift >2 m mistake; finish = practice done (no lane-change sequence check) steer right, settle, finish drift → mistake unreviewed
lane_change_left Change lane left steer/throttle/brake 2-lane road, primitives none lane offset REAL; indicator reserved same as above steer left, settle, finish drift → mistake unreviewed
lane_merge Merge at speed steer/throttle/brake 2-lane road, primitives none (no traffic!) lane offset REAL; speed-matching reserved drift mistake; finish = practice done reach finish drift → mistake unreviewed
lane_bus_lane Avoid bus lane steer/throttle/brake road + bus-lane paint (visual only) none lane offset REAL; restriction times reserved drift mistake; finish = practice done reach finish drift → mistake unreviewed

Roundabouts (roundabout/exit/give-way: ALL reserved; finish-marker only)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
rb_give_way Yield from right steer/throttle/brake roundabout island, primitives none (no circulating traffic!) finish distance REAL; yield/gap reserved finish = practice done reach finish none (no yield check) unreviewed
rb_first_exit First exit steer/throttle/brake roundabout, primitives none finish REAL; exit arm/indicator reserved finish = practice done reach finish wrong exit still completes as practice unreviewed
rb_second_exit Second exit steer/throttle/brake roundabout, primitives none same same reach finish same unreviewed
rb_third_exit Third exit (180°) steer/throttle/brake roundabout, primitives none same same reach finish same unreviewed
rb_double_lane Multi-lane exit steer/throttle/brake roundabout, primitives none same; lane choice reserved same reach finish same unreviewed
rb_multi_exits Choose exit steer/throttle/brake 4-arm roundabout, primitives none same same reach finish same unreviewed

Parking (bay overlap + stop: REAL; orientation/heading/containment/slope/gear/handbrake: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
park_parallel Parallel park steer/throttle/brake/reverse bays beside road, primitives none (no flanking cars!) bay overlap REAL; heading reserved stop inside bay = practice done stop in bay stop outside → mistake unreviewed
park_perp Perpendicular park steer/throttle/brake bays, primitives none same same stop in bay stop outside → mistake unreviewed
park_angle_reverse Reverse bay park steer/throttle/brake/reverse bays, primitives none same; reverse-sequence reserved same stop in bay stop outside → mistake unreviewed
park_hill_bay Hill bay + handbrake steer/throttle/brake bays, flat ground only none same; slope/gear/handbrake reserved same (flat!) stop in bay stop outside → mistake unreviewed
park_ev Choose legal bay steer/throttle/brake bays, paint only none same; bay-legality reserved same stop in any bay stop outside → mistake unreviewed
park_handicap Avoid disabled bay steer/throttle/brake bays, paint only none same; bay-legality reserved same stop in any bay stop outside → mistake unreviewed

U-turns (course-relative reversal: REAL; zone/sequence/kerb/signs: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
ut_legal_open Legal U-turn steer/throttle/brake open road, primitives none rel. heading REAL rel >90° = practice done reverse heading
ut_single_turn Three-point turn steer/throttle/brake/reverse narrow road, primitives none rel. heading REAL; sequence/kerb reserved rel >90° = practice done reverse heading
ut_noSign Turn where permitted steer/throttle/brake road, no sign model none rel. heading REAL; sign reserved same reverse heading — unreviewed
ut_forbidden Do NOT turn steer/throttle/brake road, no sign model none rel. heading REAL reversal = Fail; finish w/o turn = practice done drive to finish reverse heading → Fail unreviewed

Signs (sign recognition/stop-line/dwell: ALL reserved; finish-marker only)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
sign_stop Full stop steer/throttle/brake stop-sign prop (generic), primitives none finish REAL; stop-line/dwell reserved finish = practice done reach finish rolling stop still completes as practice unreviewed
sign_yield Yield steer/throttle/brake yield prop (generic) none (no main-road traffic!) finish REAL; gap reserved same reach finish no-yield still completes unreviewed
sign_speed Hold limit steer/throttle/brake speed prop (generic) none finish REAL same reach finish — (no speed check in Signs!) unreviewed
sign_oneway One-way direction steer/throttle/brake one-way prop (generic) none finish REAL; direction reserved same reach finish wrong way still completes unreviewed
sign_ped Zebra crossing steer/throttle/brake crossing paint none (no pedestrians!) finish REAL same reach finish no-stop still completes unreviewed
sign_school School zone steer/throttle/brake school prop (generic) none (no children!) finish REAL same reach finish speeding still completes unreviewed
sign_roundabout Roundabout ahead steer/throttle/brake prop (generic) none finish REAL same reach finish — unreviewed
sign_parking Parking restrictions steer/throttle/brake prop (generic) none finish REAL same reach finish — unreviewed

Priority (proximity: REAL as proximity-only; stop/yield/gap/right-of-way: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
pri_yield_car Yield to right steer/throttle/brake junction, primitives 1 crossing car proximity REAL; stop/gap reserved too close = Fail; finish = practice done finish without contact drive into car → Fail (proximity) unreviewed
pri_stop_two_way Full stop + enter steer/throttle/brake junction, primitives 1 crossing car proximity REAL; stop-line/dwell reserved same finish too close → Fail unreviewed
pri_main_road Keep priority steer/throttle/brake junction, primitives 1 crossing car proximity REAL same finish too close → Fail unreviewed
pri_t_junction Right from stem steer/throttle/brake T-junction, primitives 1 crossing car proximity REAL; turn/yield reserved same finish too close → Fail unreviewed
pri_emergency Let emergency pass steer/throttle/brake road, primitives 1 car (not marked!) proximity REAL; pull-over reserved same finish too close → Fail unreviewed

Hazards (proximity: REAL as proximity-only; brake-response/clearance/contact: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
haz_child_run Child steps out steer/brake road, primitives 1 small mover proximity REAL; brake-response reserved too close = Fail; finish = practice done finish with gap drive into actor → Fail (proximity) unreviewed
haz_parked_door Door opens steer/brake parked car, primitives 1 static car proximity REAL same finish with gap too close → Fail unreviewed
haz_branch Debris ahead steer/brake debris block, primitives 1 static block proximity REAL same finish with gap too close → Fail unreviewed
haz_rain Wet braking steer/brake road, primitives 1 slow car proximity REAL; rain physics NOT modelled same finish with gap too close → Fail unreviewed
haz_bicycle Pass cyclist 1 m+ steer/brake road, primitives 1 cyclist mover proximity REAL; 1 m rule reserved same finish with gap too close → Fail unreviewed

Speed (speed vs limit + 4 km/h: REAL; grace/zone/duration: reserved)

Scenario Claim Inputs Geometry/assets Actors Observations Rule today Success replay Violation replays Review
spd_30 Hold 30 throttle/brake zone, primitives none speed REAL over +4 = mistake; finish = practice done drive ≤30 to finish 40 in 30 → mistake unreviewed
spd_50 Hold 50 throttle/brake zone, primitives none speed REAL same drive ≤50 to finish 60 in 50 → mistake unreviewed
spd_80 Hold 80 throttle/brake zone, primitives none speed REAL same drive ≤80 to finish 95 in 80 → mistake unreviewed
spd_var 50→30 change throttle/brake zone, single limit only none speed REAL; limit-change reserved same (whole route = 30) drive ≤30 to finish over → mistake unreviewed
spd_school School speed throttle/brake zone, primitives none speed REAL same drive ≤25 to finish over → mistake unreviewed
spd_corner Slow for bend throttle/brake bend, primitives none speed REAL; corner geometry reserved same drive ≤30 to finish over → mistake unreviewed

Known limitations (visible per plan §8/§10): no jurisdiction, no expert sign-off, primitives only (no identifiable signs/people), rain/slope not modelled, no indicator/mirror/gear/handbrake inputs, proximity ≠ contact, finish-marker completion ≠ assessed behaviour. Content version 0 for all.

Production rule engine (2026-09-25; applies to every row above)

One-tick checks are the tested truth table; production ticks go through RuleEngine, which adds time so single samples cannot decide:

  • speed: 30 sustained over-limit ticks to fault, 30 calm ticks to re-arm;
  • lane departures / outside-bay stops: one mistake per transition, never per-frame repeats; recovery re-arms;
  • parking: 60-tick stopped dwell inside the bay to complete;
  • proximity (priority/hazards): immediate terminal Fail, still labelled proximity, never contact;
  • legal U-turn: actual course-relative reversal required — reaching the finish without turning is quiet, not complete;
  • every transition is journaled in a bounded (4,096 + drop count) evidence trace; same observation sequence ⇒ same outcome sequence.
  • terminal results freeze immutably (ID + content version + rolling replay digest) and record into the in-memory session profile. Nothing is written to disk; settings copy stays session-only.