# Implementation Plan 1. Define the native signal model/override artifact and migration adapter; reuse existing generation, validation, and deterministic signal UID rules. 2. Add QGIS import/export commands that translate `traffic_signal_assemblies.geojson` to/from the native artifact without making native compile depend on QGIS. 3. Extend native compile/workbench state to expose signal assemblies, OSM controls/arms, and derived runtime provenance. 4. Add validated atomic signal save operations for generate, move, rotate, delete, and field edits; preserve legacy ID compatibility. 5. Add Workbench map styling, selection, editing controls, dirty state, save, compile/reload, and clear error handling for signal assemblies. 6. Ensure native Blender/Cesium/preview stages consume runtime signal data generated from the native model, while legacy stages remain compatible. 7. Add focused traffic-signal, Workbench, migration, and cross-layer round-trip tests; run the existing legacy traffic-signal and preview suites. ## Validation ```bash npm run test:traffic-signals npm run test:preview-assets npm run test:road-workbench npm run road:compile -- --config config/areas/nantaizi-lake-innovation-valley.json npm run road:check -- --config config/areas/nantaizi-lake-innovation-valley.json ``` Manual acceptance must cover native-only generate/move/rotate/delete -> save -> recompile -> runtime JSON and preview, plus QGIS import/export compatibility; disabled signals must be omitted from runtime output.