Files
sunnypilot/openpilot/tools/params
Isaac Barham 2bb640ff21 Support experimental signal routes with learned navigation inputs
Install coherent transient Directions routes without replacing manual
destinations, and feed fresh generation-matched maps and maneuver vectors to
compatible navigation-trained models. Preserve existing action conversion,
the 1.6 m/s hold and Tesla/cooperative steering.

Keep signal intent pending during discovery. Preserve normal lane-change
eligibility, commit the first actual LC request or eligible mapped turn, and
prevent later same-signal role changes. Guard cancellation, retained exits,
manual handoff, stale input and delayed parameter writes.

Add explicit verified local model registration and an offroad target build
recipe. No navigation model or automatic model swap is bundled.

Validation: 223 software test methods, Ruff and syntax checks; separately,
800 Mac forward calls compare an available RL navigation model with and
without real short-route inputs. Automatic intent still misses recorded
requests; target compilation, device parity and physical clearance remain
unverified. Keep this opt-in and experimental.
2026-11-03 13:31:47 -05:00
..

This prebuilt release requires rebuilding openpilot/common/libparams_c.so when the compiled Params registry changes. Editing params_keys.h alone does not register a key with the shipped Python API. The Python wrapper still validates every key through the native registry.

From the checkout root, with Python 3.11+ and a Docker ARM64 Linux builder:

python3 openpilot/tools/params/rebuild.py --work-dir /tmp/sunnypilot-params-arm64

The script copies only the required source into that temporary directory, verifies the three ARM64 dependency wheels against this checkout's uv.lock, and builds with the pinned Debian image/compiler. The compile and test containers have networking disabled and no repository mount. The output is /tmp/sunnypilot-params-arm64/out/libparams_c.so; installation is deliberately separate. provenance.json, out/build.json and out/verification.json record the inputs, command, binary hash and checks. Existing wheel downloads are verified and reused. An unavailable pinned package is a build error.

The checked-in build_provenance.json describes the shipped feature build. The previous build preserved all 272 original key names, types and raw defaults and added five Mapbox keys. The navigation build adds only NavModelState; all 277 previous registry entries were compared against the real ARM64 library and remain identical. The status JSON clears on manager startup and going offroad. The C API exports and dynamic library dependencies match the base release, with no increased symbol-version requirements. The params_keys_by_flag correction returns distinct buffers owned by the handle instead of aliasing one temporary string.

Verification executes all 13 original Params test method bodies, the three buffer regressions, typed new-key round trips, asynchronous JSON writes, and both lifecycle clears against the real ARM64 Linux library. Only logging and the test-directory fixture are substituted. These are Linux container tests; the library has not been executed on the vehicle device.