feat(06-01): CSR graph codec + committed mini-graph fixture + RouteStep.kind (GREEN)

- graph.ts: decodeGraph/encodeGraph over the pinned little-endian CSR
  layout; header magic+version+exact byte-size validation BEFORE any view
  allocation (T-06-03/T-06-03b fail-honest null); zero-copy typed-array
  views; street-name pool with UNNAMED_NAME_ID sentinel
- header padded 60 -> 64 bytes so f64 views are 8-byte aligned — unaligned
  Float64Array throws RangeError, making plan-literal offsets incompatible
  with the plan's own zero-copy law (documented deviation; field
  order/content/endian unchanged; consumers inherit via encodeGraph)
- build-mini-graph.mjs + committed mini-graph.bin: hand-built 5x5 grid,
  25 nodes, 80 directed edges, 3 named streets, exactly ONE oneway pair,
  two speed classes (60/30 km/h) — the A* ground truth (G7 pins it)
- types.ts: RouteStep gains optional kind (8 turn kinds) — Engine A
  populates it (06-01); fixture-world steps stay empty arrays (D-10)
This commit is contained in:
araharah-executor
2026-10-24 12:07:17 +08:00
parent 53740944b8
commit 1ce35907d5
4 changed files with 397 additions and 0 deletions
+13
View File
@@ -50,6 +50,19 @@ export interface RouteStep {
name?: string;
/** polyline6-encoded step geometry (backend #2/#3 populate this). */
geometry?: string;
/**
* Maneuver kind — Engine A populates this (06-01); fixture-world steps
* stay empty arrays (D-10).
*/
kind?:
| "depart"
| "straight"
| "left"
| "right"
| "slight-left"
| "slight-right"
| "uturn"
| "arrive";
}
/**