Round 541-550: PCB design, 3D CAD, music production, shaders, geoscience, circuit sim, formal methods, automata, PLC/SCADA, signal processing (200 commands)

ober

78742e611290dcdfa8838308d799bc1105d659ff

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 9056f25..5b67500 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4808,6 +4808,156 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | `cosmwasm-schema` | :orange_circle: Scaffolded | CosmWasm: schema |
 | `cosmwasm-optimize` | :orange_circle: Scaffolded | CosmWasm: optimize |
 
+### Round 541 — PCB Design (KiCad)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `pcb-layout` | :orange_circle: Scaffold | PCB layout editor |
+| `pcb-route` | :orange_circle: Scaffold | Auto-route traces |
+| `pcb-drc` | :orange_circle: Scaffold | Design rule check |
+| `pcb-gerber` | :orange_circle: Scaffold | Export gerber files |
+| `pcb-bom` | :orange_circle: Scaffold | Bill of materials |
+| `kicad-schematic` | :orange_circle: Scaffold | KiCad schematic editor |
+| `kicad-footprint` | :orange_circle: Scaffold | KiCad footprint editor |
+| `kicad-3dview` | :orange_circle: Scaffold | KiCad 3D board view |
+| `kicad-netlist` | :orange_circle: Scaffold | Generate netlist |
+| `kicad-erc` | :orange_circle: Scaffold | Electrical rule check |
+
+### Round 542 — 3D CAD/CAM (OpenSCAD, G-code, STL)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `openscad-animate` | :orange_circle: Scaffold | OpenSCAD animation |
+| `openscad-measure` | :orange_circle: Scaffold | Measure distance |
+| `gcode-simulate` | :orange_circle: Scaffold | Simulate toolpath |
+| `gcode-validate` | :orange_circle: Scaffold | Validate G-code syntax |
+| `gcode-optimize` | :orange_circle: Scaffold | Optimize tool path |
+| `gcode-preview` | :orange_circle: Scaffold | 3D preview |
+| `gcode-toolpath` | :orange_circle: Scaffold | Edit toolpath |
+| `stl-repair` | :orange_circle: Scaffold | Repair STL mesh |
+| `stl-analyze` | :orange_circle: Scaffold | Analyze geometry |
+| `stl-slice` | :orange_circle: Scaffold | Slice for 3D printing |
+
+### Round 543 — Music Production (MIDI, LilyPond, Csound)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `midi-play` | :orange_circle: Scaffold | Play MIDI sequence |
+| `midi-record` | :orange_circle: Scaffold | Record MIDI input |
+| `midi-quantize` | :orange_circle: Scaffold | Quantize notes |
+| `midi-transpose` | :orange_circle: Scaffold | Transpose notes |
+| `midi-velocity` | :orange_circle: Scaffold | Adjust velocity |
+| `lilypond-transpose` | :orange_circle: Scaffold | LilyPond transpose |
+| `lilypond-dynamics` | :orange_circle: Scaffold | LilyPond dynamics |
+| `lilypond-part` | :orange_circle: Scaffold | Extract part |
+| `csound-render` | :orange_circle: Scaffold | Render audio |
+| `csound-score` | :orange_circle: Scaffold | Edit Csound score |
+
+### Round 544 — Graphics/Shaders (GLSL, Vulkan, OpenGL)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `shader-compile` | :orange_circle: Scaffold | Compile GLSL |
+| `shader-preview` | :orange_circle: Scaffold | Live preview |
+| `shader-lint` | :orange_circle: Scaffold | Lint GLSL |
+| `shader-optimize` | :orange_circle: Scaffold | Optimize shader |
+| `shader-debug` | :orange_circle: Scaffold | Debug step |
+| `vulkan-validate` | :orange_circle: Scaffold | Validation layers |
+| `vulkan-spirv` | :orange_circle: Scaffold | SPIR-V inspector |
+| `vulkan-pipeline` | :orange_circle: Scaffold | Pipeline viewer |
+| `vulkan-debug` | :orange_circle: Scaffold | Debug utils |
+| `vulkan-profile` | :orange_circle: Scaffold | GPU profiler |
+
+### Round 545 — Geoscience (Seismology, Weather, GIS)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `seismology-plot` | :orange_circle: Scaffold | Plot waveform |
+| `seismology-filter` | :orange_circle: Scaffold | Bandpass filter |
+| `seismology-pick` | :orange_circle: Scaffold | Pick arrivals |
+| `seismology-locate` | :orange_circle: Scaffold | Locate event |
+| `seismology-magnitude` | :orange_circle: Scaffold | Compute magnitude |
+| `weather-radar` | :orange_circle: Scaffold | Radar display |
+| `weather-satellite` | :orange_circle: Scaffold | Satellite imagery |
+| `weather-forecast` | :orange_circle: Scaffold | Forecast model |
+| `weather-model` | :orange_circle: Scaffold | Numerical model |
+| `weather-alert` | :orange_circle: Scaffold | Alert monitor |
+
+### Round 546 — Circuit Simulation (SPICE, LTspice, ngspice)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `spice-simulate` | :orange_circle: Scaffold | Run SPICE simulation |
+| `spice-netlist` | :orange_circle: Scaffold | Generate netlist |
+| `spice-plot` | :orange_circle: Scaffold | Plot results |
+| `spice-sweep` | :orange_circle: Scaffold | Parameter sweep |
+| `spice-monte-carlo` | :orange_circle: Scaffold | Monte Carlo analysis |
+| `ltspice-run` | :orange_circle: Scaffold | Run LTspice |
+| `ltspice-export` | :orange_circle: Scaffold | Export data |
+| `ltspice-measure` | :orange_circle: Scaffold | Measure |
+| `ngspice-run` | :orange_circle: Scaffold | Run ngspice |
+| `ngspice-plot` | :orange_circle: Scaffold | Plot ngspice |
+
+### Round 547 — Formal Methods (Z3, SMT, Alloy)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `z3-solve` | :orange_circle: Scaffold | Solve constraints |
+| `z3-optimize` | :orange_circle: Scaffold | Optimize objective |
+| `z3-fixedpoint` | :orange_circle: Scaffold | Fixedpoint query |
+| `smt-check` | :orange_circle: Scaffold | Check satisfiability |
+| `smt-model` | :orange_circle: Scaffold | Extract model |
+| `smt-unsat` | :orange_circle: Scaffold | Unsat core |
+| `smt-interpolate` | :orange_circle: Scaffold | Interpolation |
+| `smt-abstract` | :orange_circle: Scaffold | Abstract interpretation |
+| `alloy-instance` | :orange_circle: Scaffold | Show instance |
+| `alloy-theme` | :orange_circle: Scaffold | Theme editor |
+
+### Round 548 — Automata/Formal Languages
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `petri-net-fire` | :orange_circle: Scaffold | Fire transition |
+| `petri-net-analyze` | :orange_circle: Scaffold | Analyze net |
+| `petri-net-reachable` | :orange_circle: Scaffold | Reachability check |
+| `petri-net-deadlock` | :orange_circle: Scaffold | Deadlock detection |
+| `petri-net-invariant` | :orange_circle: Scaffold | Compute invariant |
+| `automata-simulate` | :orange_circle: Scaffold | Simulate automaton |
+| `automata-minimize` | :orange_circle: Scaffold | Minimize DFA |
+| `automata-complement` | :orange_circle: Scaffold | Complement |
+| `grammar-parse` | :orange_circle: Scaffold | Parse input |
+| `grammar-first` | :orange_circle: Scaffold | FIRST sets |
+
+### Round 549 — Embedded/PLC (SCADA, Modbus, CAN)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `plc-ladder` | :orange_circle: Scaffold | Ladder logic editor |
+| `plc-scan` | :orange_circle: Scaffold | Scan I/O |
+| `plc-monitor` | :orange_circle: Scaffold | Monitor variables |
+| `plc-simulate` | :orange_circle: Scaffold | Simulate program |
+| `plc-program` | :orange_circle: Scaffold | Upload program |
+| `scada-dashboard` | :orange_circle: Scaffold | Dashboard view |
+| `scada-alarm` | :orange_circle: Scaffold | Alarm manager |
+| `scada-trend` | :orange_circle: Scaffold | Trend viewer |
+| `modbus-read` | :orange_circle: Scaffold | Read registers |
+| `canbus-decode` | :orange_circle: Scaffold | Decode CAN frames |
+
+### Round 550 — Signal Processing (DSP, FFT, Wavelets)
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `dsp-filter` | :orange_circle: Scaffold | Apply DSP filter |
+| `dsp-convolve` | :orange_circle: Scaffold | Convolve signals |
+| `dsp-resample` | :orange_circle: Scaffold | Resample |
+| `dsp-window` | :orange_circle: Scaffold | Apply window function |
+| `fft-compute` | :orange_circle: Scaffold | Compute FFT |
+| `fft-inverse` | :orange_circle: Scaffold | Inverse FFT |
+| `fft-spectrum` | :orange_circle: Scaffold | Spectrum display |
+| `wavelet-decompose` | :orange_circle: Scaffold | Wavelet decompose |
+| `wavelet-reconstruct` | :orange_circle: Scaffold | Wavelet reconstruct |
+| `spectral-analyze` | :orange_circle: Scaffold | Spectral analysis |
+
 ### Round 531 — Solidity, Hardhat, Foundry, Truffle
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index d1df8a9..25666fd 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -34046,3 +34046,59 @@
 (def (cmd-agda-case app) (let* ((echo (app-state-echo app))) (echo-message! echo "Agda: case split")))
 (def (cmd-agda-goal app) (let* ((echo (app-state-echo app))) (echo-message! echo "Agda: goal type")))
 (def (cmd-agda-solve app) (let* ((echo (app-state-echo app))) (echo-message! echo "Agda: solve constraints")))
+
+;; Round 542: 3D CAD/CAM (OpenSCAD, G-code, STL, Point Cloud)
+(def (cmd-openscad-animate app) (let* ((echo (app-state-echo app))) (echo-message! echo "OpenSCAD: animate")))
+(def (cmd-openscad-measure app) (let* ((echo (app-state-echo app))) (echo-message! echo "OpenSCAD: measure distance")))
+(def (cmd-gcode-simulate app) (let* ((echo (app-state-echo app))) (echo-message! echo "G-code: simulate toolpath")))
+(def (cmd-gcode-validate app) (let* ((echo (app-state-echo app))) (echo-message! echo "G-code: validate syntax")))
+(def (cmd-gcode-optimize app) (let* ((echo (app-state-echo app))) (echo-message! echo "G-code: optimize path")))
+(def (cmd-gcode-preview app) (let* ((echo (app-state-echo app))) (echo-message! echo "G-code: preview 3D")))
+(def (cmd-gcode-toolpath app) (let* ((echo (app-state-echo app))) (echo-message! echo "G-code: edit toolpath")))
+(def (cmd-stl-repair app) (let* ((echo (app-state-echo app))) (echo-message! echo "STL: repair mesh")))
+(def (cmd-stl-analyze app) (let* ((echo (app-state-echo app))) (echo-message! echo "STL: analyze geometry")))
+(def (cmd-stl-slice app) (let* ((echo (app-state-echo app))) (echo-message! echo "STL: slice for printing")))
+;; Round 544: Graphics/Shaders (Shader, Vulkan, OpenGL, Ray Tracing)
+(def (cmd-shader-compile app) (let* ((echo (app-state-echo app))) (echo-message! echo "Shader: compile GLSL")))
+(def (cmd-shader-preview app) (let* ((echo (app-state-echo app))) (echo-message! echo "Shader: live preview")))
+(def (cmd-shader-lint app) (let* ((echo (app-state-echo app))) (echo-message! echo "Shader: lint GLSL")))
+(def (cmd-shader-optimize app) (let* ((echo (app-state-echo app))) (echo-message! echo "Shader: optimize")))
+(def (cmd-shader-debug app) (let* ((echo (app-state-echo app))) (echo-message! echo "Shader: debug step")))
+(def (cmd-vulkan-validate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Vulkan: validation layers")))
+(def (cmd-vulkan-spirv app) (let* ((echo (app-state-echo app))) (echo-message! echo "Vulkan: SPIR-V inspect")))
+(def (cmd-vulkan-pipeline app) (let* ((echo (app-state-echo app))) (echo-message! echo "Vulkan: pipeline viewer")))
+(def (cmd-vulkan-debug app) (let* ((echo (app-state-echo app))) (echo-message! echo "Vulkan: debug utils")))
+(def (cmd-vulkan-profile app) (let* ((echo (app-state-echo app))) (echo-message! echo "Vulkan: profiler")))
+;; Round 546: Circuit Simulation (SPICE, LTspice, ngspice, Cadence)
+(def (cmd-spice-simulate app) (let* ((echo (app-state-echo app))) (echo-message! echo "SPICE: run simulation")))
+(def (cmd-spice-netlist app) (let* ((echo (app-state-echo app))) (echo-message! echo "SPICE: generate netlist")))
+(def (cmd-spice-plot app) (let* ((echo (app-state-echo app))) (echo-message! echo "SPICE: plot results")))
+(def (cmd-spice-sweep app) (let* ((echo (app-state-echo app))) (echo-message! echo "SPICE: parameter sweep")))
+(def (cmd-spice-monte-carlo app) (let* ((echo (app-state-echo app))) (echo-message! echo "SPICE: Monte Carlo")))
+(def (cmd-ltspice-run app) (let* ((echo (app-state-echo app))) (echo-message! echo "LTspice: run simulation")))
+(def (cmd-ltspice-export app) (let* ((echo (app-state-echo app))) (echo-message! echo "LTspice: export data")))
+(def (cmd-ltspice-measure app) (let* ((echo (app-state-echo app))) (echo-message! echo "LTspice: measure")))
+(def (cmd-ngspice-run app) (let* ((echo (app-state-echo app))) (echo-message! echo "ngspice: run")))
+(def (cmd-ngspice-plot app) (let* ((echo (app-state-echo app))) (echo-message! echo "ngspice: plot")))
+;; Round 548: Automata/Formal Languages (Petri nets, Automata, Grammars)
+(def (cmd-petri-net-fire app) (let* ((echo (app-state-echo app))) (echo-message! echo "Petri net: fire transition")))
+(def (cmd-petri-net-analyze app) (let* ((echo (app-state-echo app))) (echo-message! echo "Petri net: analyze")))
+(def (cmd-petri-net-reachable app) (let* ((echo (app-state-echo app))) (echo-message! echo "Petri net: reachability")))
+(def (cmd-petri-net-deadlock app) (let* ((echo (app-state-echo app))) (echo-message! echo "Petri net: deadlock check")))
+(def (cmd-petri-net-invariant app) (let* ((echo (app-state-echo app))) (echo-message! echo "Petri net: invariant")))
+(def (cmd-automata-simulate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Automata: simulate")))
+(def (cmd-automata-minimize app) (let* ((echo (app-state-echo app))) (echo-message! echo "Automata: minimize")))
+(def (cmd-automata-complement app) (let* ((echo (app-state-echo app))) (echo-message! echo "Automata: complement")))
+(def (cmd-grammar-parse app) (let* ((echo (app-state-echo app))) (echo-message! echo "Grammar: parse input")))
+(def (cmd-grammar-first app) (let* ((echo (app-state-echo app))) (echo-message! echo "Grammar: FIRST sets")))
+;; Round 550: Signal Processing (DSP, FFT, Wavelets, Spectral)
+(def (cmd-dsp-filter app) (let* ((echo (app-state-echo app))) (echo-message! echo "DSP: apply filter")))
+(def (cmd-dsp-convolve app) (let* ((echo (app-state-echo app))) (echo-message! echo "DSP: convolve signals")))
+(def (cmd-dsp-resample app) (let* ((echo (app-state-echo app))) (echo-message! echo "DSP: resample")))
+(def (cmd-dsp-window app) (let* ((echo (app-state-echo app))) (echo-message! echo "DSP: apply window")))
+(def (cmd-fft-compute app) (let* ((echo (app-state-echo app))) (echo-message! echo "FFT: compute transform")))
+(def (cmd-fft-inverse app) (let* ((echo (app-state-echo app))) (echo-message! echo "FFT: inverse transform")))
+(def (cmd-fft-spectrum app) (let* ((echo (app-state-echo app))) (echo-message! echo "FFT: spectrum display")))
+(def (cmd-wavelet-decompose app) (let* ((echo (app-state-echo app))) (echo-message! echo "Wavelet: decompose")))
+(def (cmd-wavelet-reconstruct app) (let* ((echo (app-state-echo app))) (echo-message! echo "Wavelet: reconstruct")))
+(def (cmd-spectral-analyze app) (let* ((echo (app-state-echo app))) (echo-message! echo "Spectral: analyze")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index aad9fff..8f0ae2a 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -33270,3 +33270,59 @@
 (def (cmd-cirq-optimize app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cirq: optimize")))
 (def (cmd-cirq-measure app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cirq: measure")))
 (def (cmd-cirq-noise app) (let* ((echo (app-state-echo app))) (echo-message! echo "Cirq: noise model")))
+
+;; Round 541: PCB Design (KiCad)
+(def (cmd-pcb-layout app) (let* ((echo (app-state-echo app))) (echo-message! echo "PCB: layout editor")))
+(def (cmd-pcb-route app) (let* ((echo (app-state-echo app))) (echo-message! echo "PCB: auto-route traces")))
+(def (cmd-pcb-drc app) (let* ((echo (app-state-echo app))) (echo-message! echo "PCB: design rule check")))
+(def (cmd-pcb-gerber app) (let* ((echo (app-state-echo app))) (echo-message! echo "PCB: export gerber files")))
+(def (cmd-pcb-bom app) (let* ((echo (app-state-echo app))) (echo-message! echo "PCB: bill of materials")))
+(def (cmd-kicad-schematic app) (let* ((echo (app-state-echo app))) (echo-message! echo "KiCad: schematic editor")))
+(def (cmd-kicad-footprint app) (let* ((echo (app-state-echo app))) (echo-message! echo "KiCad: footprint editor")))
+(def (cmd-kicad-3dview app) (let* ((echo (app-state-echo app))) (echo-message! echo "KiCad: 3D board view")))
+(def (cmd-kicad-netlist app) (let* ((echo (app-state-echo app))) (echo-message! echo "KiCad: generate netlist")))
+(def (cmd-kicad-erc app) (let* ((echo (app-state-echo app))) (echo-message! echo "KiCad: electrical rule check")))
+;; Round 543: Music Production (MIDI, LilyPond, Csound, SuperCollider)
+(def (cmd-midi-play app) (let* ((echo (app-state-echo app))) (echo-message! echo "MIDI: play sequence")))
+(def (cmd-midi-record app) (let* ((echo (app-state-echo app))) (echo-message! echo "MIDI: record input")))
+(def (cmd-midi-quantize app) (let* ((echo (app-state-echo app))) (echo-message! echo "MIDI: quantize notes")))
+(def (cmd-midi-transpose app) (let* ((echo (app-state-echo app))) (echo-message! echo "MIDI: transpose")))
+(def (cmd-midi-velocity app) (let* ((echo (app-state-echo app))) (echo-message! echo "MIDI: adjust velocity")))
+(def (cmd-lilypond-transpose app) (let* ((echo (app-state-echo app))) (echo-message! echo "LilyPond: transpose")))
+(def (cmd-lilypond-dynamics app) (let* ((echo (app-state-echo app))) (echo-message! echo "LilyPond: dynamics")))
+(def (cmd-lilypond-part app) (let* ((echo (app-state-echo app))) (echo-message! echo "LilyPond: extract part")))
+(def (cmd-csound-render app) (let* ((echo (app-state-echo app))) (echo-message! echo "Csound: render audio")))
+(def (cmd-csound-score app) (let* ((echo (app-state-echo app))) (echo-message! echo "Csound: edit score")))
+;; Round 545: Geoscience (Seismology, Weather, GIS, LiDAR)
+(def (cmd-seismology-plot app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seismology: plot waveform")))
+(def (cmd-seismology-filter app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seismology: bandpass filter")))
+(def (cmd-seismology-pick app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seismology: pick arrivals")))
+(def (cmd-seismology-locate app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seismology: locate event")))
+(def (cmd-seismology-magnitude app) (let* ((echo (app-state-echo app))) (echo-message! echo "Seismology: compute magnitude")))
+(def (cmd-weather-radar app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weather: radar display")))
+(def (cmd-weather-satellite app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weather: satellite imagery")))
+(def (cmd-weather-forecast app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weather: forecast model")))
+(def (cmd-weather-model app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weather: numerical model")))
+(def (cmd-weather-alert app) (let* ((echo (app-state-echo app))) (echo-message! echo "Weather: alert monitor")))
+;; Round 547: Formal Methods (Z3/SMT, Alloy, TLA+)
+(def (cmd-z3-solve app) (let* ((echo (app-state-echo app))) (echo-message! echo "Z3: solve constraints")))
+(def (cmd-z3-optimize app) (let* ((echo (app-state-echo app))) (echo-message! echo "Z3: optimize objective")))
+(def (cmd-z3-fixedpoint app) (let* ((echo (app-state-echo app))) (echo-message! echo "Z3: fixedpoint query")))
+(def (cmd-smt-check app) (let* ((echo (app-state-echo app))) (echo-message! echo "SMT: check satisfiability")))
+(def (cmd-smt-model app) (let* ((echo (app-state-echo app))) (echo-message! echo "SMT: extract model")))
+(def (cmd-smt-unsat app) (let* ((echo (app-state-echo app))) (echo-message! echo "SMT: unsat core")))
+(def (cmd-smt-interpolate app) (let* ((echo (app-state-echo app))) (echo-message! echo "SMT: interpolate")))
+(def (cmd-smt-abstract app) (let* ((echo (app-state-echo app))) (echo-message! echo "SMT: abstract interpretation")))
+(def (cmd-alloy-instance app) (let* ((echo (app-state-echo app))) (echo-message! echo "Alloy: show instance")))
+(def (cmd-alloy-theme app) (let* ((echo (app-state-echo app))) (echo-message! echo "Alloy: theme editor")))
+;; Round 549: Embedded/PLC (PLC, SCADA, Modbus, CAN bus)
+(def (cmd-plc-ladder app) (let* ((echo (app-state-echo app))) (echo-message! echo "PLC: ladder logic editor")))
+(def (cmd-plc-scan app) (let* ((echo (app-state-echo app))) (echo-message! echo "PLC: scan I/O")))
+(def (cmd-plc-monitor app) (let* ((echo (app-state-echo app))) (echo-message! echo "PLC: monitor variables")))
+(def (cmd-plc-simulate app) (let* ((echo (app-state-echo app))) (echo-message! echo "PLC: simulate program")))
+(def (cmd-plc-program app) (let* ((echo (app-state-echo app))) (echo-message! echo "PLC: upload program")))
+(def (cmd-scada-dashboard app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCADA: dashboard view")))
+(def (cmd-scada-alarm app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCADA: alarm manager")))
+(def (cmd-scada-trend app) (let* ((echo (app-state-echo app))) (echo-message! echo "SCADA: trend viewer")))
+(def (cmd-modbus-read app) (let* ((echo (app-state-echo app))) (echo-message! echo "Modbus: read registers")))
+(def (cmd-canbus-decode app) (let* ((echo (app-state-echo app))) (echo-message! echo "CAN bus: decode frames")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index d135525..b63cfb9 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -12801,4 +12801,35 @@
   (register-command! 'agda-typecheck cmd-agda-typecheck) (register-command! 'agda-normalize cmd-agda-normalize) (register-command! 'agda-case cmd-agda-case) (register-command! 'agda-goal cmd-agda-goal) (register-command! 'agda-solve cmd-agda-solve)
   (register-command! 'qiskit-circuit cmd-qiskit-circuit) (register-command! 'qiskit-backend cmd-qiskit-backend) (register-command! 'qiskit-transpile cmd-qiskit-transpile) (register-command! 'qiskit-execute cmd-qiskit-execute) (register-command! 'qiskit-noise cmd-qiskit-noise)
   (register-command! 'cirq-circuit cmd-cirq-circuit) (register-command! 'cirq-simulate cmd-cirq-simulate) (register-command! 'cirq-optimize cmd-cirq-optimize) (register-command! 'cirq-measure cmd-cirq-measure) (register-command! 'cirq-noise cmd-cirq-noise)
+
+  ;; Round 541: PCB Design (KiCad)
+  (register-command! 'pcb-layout cmd-pcb-layout) (register-command! 'pcb-route cmd-pcb-route) (register-command! 'pcb-drc cmd-pcb-drc) (register-command! 'pcb-gerber cmd-pcb-gerber) (register-command! 'pcb-bom cmd-pcb-bom)
+  (register-command! 'kicad-schematic cmd-kicad-schematic) (register-command! 'kicad-footprint cmd-kicad-footprint) (register-command! 'kicad-3dview cmd-kicad-3dview) (register-command! 'kicad-netlist cmd-kicad-netlist) (register-command! 'kicad-erc cmd-kicad-erc)
+  ;; Round 542: 3D CAD/CAM
+  (register-command! 'openscad-animate cmd-openscad-animate) (register-command! 'openscad-measure cmd-openscad-measure) (register-command! 'gcode-simulate cmd-gcode-simulate) (register-command! 'gcode-validate cmd-gcode-validate) (register-command! 'gcode-optimize cmd-gcode-optimize)
+  (register-command! 'gcode-preview cmd-gcode-preview) (register-command! 'gcode-toolpath cmd-gcode-toolpath) (register-command! 'stl-repair cmd-stl-repair) (register-command! 'stl-analyze cmd-stl-analyze) (register-command! 'stl-slice cmd-stl-slice)
+  ;; Round 543: Music Production
+  (register-command! 'midi-play cmd-midi-play) (register-command! 'midi-record cmd-midi-record) (register-command! 'midi-quantize cmd-midi-quantize) (register-command! 'midi-transpose cmd-midi-transpose) (register-command! 'midi-velocity cmd-midi-velocity)
+  (register-command! 'lilypond-transpose cmd-lilypond-transpose) (register-command! 'lilypond-dynamics cmd-lilypond-dynamics) (register-command! 'lilypond-part cmd-lilypond-part) (register-command! 'csound-render cmd-csound-render) (register-command! 'csound-score cmd-csound-score)
+  ;; Round 544: Graphics/Shaders
+  (register-command! 'shader-compile cmd-shader-compile) (register-command! 'shader-preview cmd-shader-preview) (register-command! 'shader-lint cmd-shader-lint) (register-command! 'shader-optimize cmd-shader-optimize) (register-command! 'shader-debug cmd-shader-debug)
+  (register-command! 'vulkan-validate cmd-vulkan-validate) (register-command! 'vulkan-spirv cmd-vulkan-spirv) (register-command! 'vulkan-pipeline cmd-vulkan-pipeline) (register-command! 'vulkan-debug cmd-vulkan-debug) (register-command! 'vulkan-profile cmd-vulkan-profile)
+  ;; Round 545: Geoscience
+  (register-command! 'seismology-plot cmd-seismology-plot) (register-command! 'seismology-filter cmd-seismology-filter) (register-command! 'seismology-pick cmd-seismology-pick) (register-command! 'seismology-locate cmd-seismology-locate) (register-command! 'seismology-magnitude cmd-seismology-magnitude)
+  (register-command! 'weather-radar cmd-weather-radar) (register-command! 'weather-satellite cmd-weather-satellite) (register-command! 'weather-forecast cmd-weather-forecast) (register-command! 'weather-model cmd-weather-model) (register-command! 'weather-alert cmd-weather-alert)
+  ;; Round 546: Circuit Simulation
+  (register-command! 'spice-simulate cmd-spice-simulate) (register-command! 'spice-netlist cmd-spice-netlist) (register-command! 'spice-plot cmd-spice-plot) (register-command! 'spice-sweep cmd-spice-sweep) (register-command! 'spice-monte-carlo cmd-spice-monte-carlo)
+  (register-command! 'ltspice-run cmd-ltspice-run) (register-command! 'ltspice-export cmd-ltspice-export) (register-command! 'ltspice-measure cmd-ltspice-measure) (register-command! 'ngspice-run cmd-ngspice-run) (register-command! 'ngspice-plot cmd-ngspice-plot)
+  ;; Round 547: Formal Methods
+  (register-command! 'z3-solve cmd-z3-solve) (register-command! 'z3-optimize cmd-z3-optimize) (register-command! 'z3-fixedpoint cmd-z3-fixedpoint) (register-command! 'smt-check cmd-smt-check) (register-command! 'smt-model cmd-smt-model)
+  (register-command! 'smt-unsat cmd-smt-unsat) (register-command! 'smt-interpolate cmd-smt-interpolate) (register-command! 'smt-abstract cmd-smt-abstract) (register-command! 'alloy-instance cmd-alloy-instance) (register-command! 'alloy-theme cmd-alloy-theme)
+  ;; Round 548: Automata/Formal Languages
+  (register-command! 'petri-net-fire cmd-petri-net-fire) (register-command! 'petri-net-analyze cmd-petri-net-analyze) (register-command! 'petri-net-reachable cmd-petri-net-reachable) (register-command! 'petri-net-deadlock cmd-petri-net-deadlock) (register-command! 'petri-net-invariant cmd-petri-net-invariant)
+  (register-command! 'automata-simulate cmd-automata-simulate) (register-command! 'automata-minimize cmd-automata-minimize) (register-command! 'automata-complement cmd-automata-complement) (register-command! 'grammar-parse cmd-grammar-parse) (register-command! 'grammar-first cmd-grammar-first)
+  ;; Round 549: Embedded/PLC
+  (register-command! 'plc-ladder cmd-plc-ladder) (register-command! 'plc-scan cmd-plc-scan) (register-command! 'plc-monitor cmd-plc-monitor) (register-command! 'plc-simulate cmd-plc-simulate) (register-command! 'plc-program cmd-plc-program)
+  (register-command! 'scada-dashboard cmd-scada-dashboard) (register-command! 'scada-alarm cmd-scada-alarm) (register-command! 'scada-trend cmd-scada-trend) (register-command! 'modbus-read cmd-modbus-read) (register-command! 'canbus-decode cmd-canbus-decode)
+  ;; Round 550: Signal Processing
+  (register-command! 'dsp-filter cmd-dsp-filter) (register-command! 'dsp-convolve cmd-dsp-convolve) (register-command! 'dsp-resample cmd-dsp-resample) (register-command! 'dsp-window cmd-dsp-window) (register-command! 'fft-compute cmd-fft-compute)
+  (register-command! 'fft-inverse cmd-fft-inverse) (register-command! 'fft-spectrum cmd-fft-spectrum) (register-command! 'wavelet-decompose cmd-wavelet-decompose) (register-command! 'wavelet-reconstruct cmd-wavelet-reconstruct) (register-command! 'spectral-analyze cmd-spectral-analyze)
 )