Skip to content

A verification pass, with the numbers it produced

Everything below was run against the live system on 2026-09-12, not against fixtures. Where something did not work it is named, and where a number could not be produced the reason is given instead.

More data

Three KITTI raw drives were downloaded from the public archive. Two finished and were imported; the third stopped part way through its 1.77 GB archive and was left out rather than imported half complete.

drive frames Velodyne scans GPS fixes
2011_09_26_drive_0015 297 297 297
2011_09_26_drive_0027 188 188 188

KITTI raw is published by KIT and Toyota Technological Institute under CC BY-NC-SA 3.0 and is attributed on each session. What that changed in the corpus:

before after
real LiDAR points 18 million 159 million
point clouds 564 1,049
measured ego poses 154 639
frames 42,766 43,251

The HD map ran end to end for the first time

Before this pass no session had both lane annotations and a position fix, so the georeferencer could not run at all. Lane proposal turned out to be local rather than cloud-only, so it could be run across a drive that already had GPS on every frame.

stage result
lanes proposed on drive 0005 199 on 154 frames, 41 rejected as off the drivable surface
georeferenced to world space 199 elements, all with dataset calibration at quality 0.95
fused into continuous boundaries 53, of which 27 carry cross-frame consensus
paired into lanelets 29, with 3 successor links
Lanelet2 export 29 lanelet relations, 3 succession relations, 53 boundary ways
OpenDRIVE export 48 roads, 58 driving lanes, 1 road link

Both exports previously contained zero lanelet relations and zero driving lanes, so neither was routable.

Two things in that table are not yet trustworthy and should not be read as a working map. Fusion emits one boundary 8,439 m long on a drive of a few hundred metres, which is a merge running away. And the median paired lane is 2.54 m wide where a German lane is 3.0 to 3.5 m, which says the pairing is still matching things that are not the two sides of a lane. The layer runs; the geometry needs work.

The georeferencing itself was also wrong before this pass, by a factor of two and a half in the near field and fifteen approaching the horizon, because it used a nominal lens rather than the drive's own calibration. That is recorded in the engineering log.

Every readable route was called

scripts/smoke_api.py calls every GET route against the live database with an admin token. Writes are not swept: firing 400 POST, PUT, PATCH and DELETE routes blindly would train models, launch cloud jobs and delete data.

outcome count
answered 220
refused with 4xx, which is a working route 53
skipped, no id in this corpus to fill the path 44
slower than the 10 second limit 34
server error 1

The one server error was GET /api/collaborate/branches, which raised a bare 500 whenever lakeFS was not running. lakeFS is optional here: assignments, tasks and merge requests are all in Postgres and work without it. The route now refuses with a 503 naming the reason and saying what is unaffected, which is what every other optional-service path in this codebase already did. A test covers it and fails against the old code.

The 34 slow routes are not failures. Several answered in 8 to 9 seconds when the limit was 30, so they are slow rather than broken; the slowest answering route was /api/analytics/source-mix at 9.6 seconds. The sweep itself had to be fixed twice before it could report any of this: its path-parameter lookup scanned 600,000 rows on an unindexed JSON path and hung before sending a single request, and calling 352 routes serially could not finish inside any sensible timeout.

Everything else

check result
Python test suite 3,506 passed, 6 skipped, 4 xfailed, 0 failed
Web test suite 703 passed across 62 files
TypeScript typecheck clean
Import contract 1 kept, 0 broken
Web pages loaded 72 of 73 routes, 0 problems
Documentation build strict, clean

The one page not checked is the sign-in screen.