✨ New Features
- (+) Spike: durchklickbare UI-Flow-Tests via Avalonia.Headless (Edit-Fork, Create-PDK, BoxSelect-Delete-Undo)
- (+) Eye/BER panel: plain-language help flyout with stacking animation (#535)
- (+) Transient panel: plain-language help flyout + adaptive time-axis unit (#600)
- (+) Sample-mode transient driver + signal-source library (#600)
- (+) FDTD: guided Docker setup dialog when Docker is missing or stopped (#649)
- (+) Active time-dependent compact models for transient mode (#529)
- feat: in-place self-update — download, swap, relaunch (#614)
🐛 Bug Fixes
- (=) Error console: marshal appends to the UI thread — background logging (passivity warnings in transient runs) crashed with 'Call from invalid thread' (#764)
- fix(routing): arc-true collision handling for frozen and styled waveguide routes (#761)
- fix(routing): flat PDK components (sub-cell pin pitch) route clean under the process floor (#760)
- fix(routing): A* honors the process bend-radius floor; controlled degradation instead of loops and crossings (#758)
- (=) UI-flow host: restore App.Services after each test, serialize flow tests in one collection
- Fix: editor rename within the same PDK no longer orphans the old component (#745)
- Fix #582: FDTD recompute sweeps the component's own wavelengths, stale ones warned + provenance-tagged
- Fix: Platzierungs-Sperre erkennt wertkompatible custom PDKs; PDK-Edit-Fenster nicht doppelt (#736)
- Fix missing wavelength/power editor for suffixed PDK coupler names (#689)
- (=) Salvage from #681/#680: SiEPIC Bond Pad electrical pin + bundled-PDK electrical-pin test
- Fix intermittent "Test host process crashed" QA abort (two pre-existing root causes)
- Fix #616 Linux data-loss: replace app files in place, guard shared dirs
- Fix case-sensitive script path in GDS verification test
- Fix GDS coordinate extraction test to match the script's actual JSON schema
- fix(self-update): guard progress callback from clobbering the terminal status
- fix(self-update): address verification findings (#614)
- Fix macOS update: download the .dmg, not the Windows .msi (#610)
🔧 Improvements
- (c) Bump version to 0.12.0 (#765)
- refactor: split the A*-attempt out of WaveguideRouter (file-size hard limit) (#759)
- chore: enable pr-feedback agent role in .agent.toml
- (c) Design spec: sample-mode transient driver + signal-source library (#600)
📝 Other Changes
- Feld-Runde 5: i18n-Live-Switch, Gruppen-Verbindungs-Settings, Chart-UX, Offset-Editor-Fixes + Pin-Kalibrierung (#763)
- Feld-Runde 4: Transient-Physik-Fix (Mehr-Hop-Ausbreitung), Eyedropper-Klick, Mixed-Process-Export, PDK-Datenfixes (#762)
- Analysis charts: plain wheel scrolls the dock, Ctrl(/Cmd)+wheel zooms (#693) (#708)
- Eye/BER + Transient: pick the analysis output coupler on the canvas (eyedropper, OUT tag, persisted) (#757)
- Routing respects the process minimum bend radius + clearly labeled radius columns in the process editor (#756)
- Figma-like waveguide editing: click/hover selection, distinct smooth curve styles, in-canvas radius handles with process-minimum clamp (#755)
- Agent: Routing UX: per-connection bend type, interconnect settings (width/radius/layer), manual per-bend radius + freeze (#631)
- test: tag slowest 31 classes [Category=Slow] for CI-only gating (#752)
- i18n phase 2: localize ViewModel/Service status strings (#749) (#751)
- Multi-language UI (i18n): English · Deutsch · 中文 · Español · 日本語 — auto-detect, live switch, guard test (#750)
- Retire per-instance Nazca overrides + component-editor preview fixes + heavy-test gating (#748)
- PDK-/Editor-UX-Polish: kompakte Controls, Editor-Fenster-Fixes, Trash-Restore pro Element, Rechtsklick→Editor (#742)
- docs(pr-media): visual walkthrough for #582
- PDK-Lifecycle: Startup-Reload (#700), '+'-Anlage, Layer-Divergenz mit Warnung/Design-Check, Trash-Delete (#739)
- PDK/Prozess-UX-Feinschliff: Save ohne Preview-Pflicht, modus-saubere PDK-Erstellung + Templates, per-PDK-Prozess-Editor (#733)
- Create Custom PDK: eigener Dialog (adopt/define), Prozess-Sichtbarkeit by-value, nazca-Beispiel (#732)
- New Component: Fixes + Struktur-Preview (Thumbnail/Popup) + Edit/Recompute (#729)
- PDK-first v-next: modales 'New PDK'-Fenster + Backend-Beispielcode-Autoload (#727)
- CornerStone coupler_straight: real cspdk S-matrix, no silent all-zero black box (#712) (#719)
- PDK-first 'Neue Komponente'-Assistent: benannte custom PDKs, own-code + Syntax-Highlighting, Meep (#723)
- Eigene Komponente per Rawcode: Code einfügen / aus .py laden im 'Neue Komponente'-Fenster (#721)
- Mode-slice inspector: point-and-probe waveguide modes on the canvas + fiber overlap at couplers (#691) (#706)
- Laser toggle: fix all review findings (#690 follow-up)
- Agent: FDTD recompute: review findings & follow-ups (#569) (#632)
- Docker setup: highlight the re-login hint (field-test feedback)
- Docker setup: classify socket permission-denied separately (#649 field test)
- Netlist view & export: gdsfactory YAML netlist (#687) (#688)
- Self-update (Linux): make the relaunch guard actually able to fire
- Agent: PDK consistency check: verify Lunima JSON nazcaFunction strings against installed Python packages (#625)
- Crossing insertion defaults to OFF (new features are opt-in)
- Settings: move crossing-insertion toggle from General onto the Routing page
- Routing: diagonal routing becomes an opt-in setting (default: off)
- Routing: Adaptive Crossing-Insertion mit echter PDK-Komponente (#553) (#629)
- Keep laser icons visible/clickable in Transient mode; skip disabled lasers in sweeps
- Routing: lateral goal tolerance as fallback retry instead of default
- Routing: restore lateral goal tolerance + hot-path fixes (review findings)
- Bring-your-own-Component v1: eigene gdsfactory-Komponente → eigenes PDK (FDTD-S-Matrix, prozess-gebunden) (#702)
- Agent: TE/TM polarization domain: parallel pin/connection kind (#626)
- Per-coupler laser on/off: laser-off couplers are outputs (#690)
- Review fix: only grating/edge couplers are light sources, not every "Coupler"
- Electrical connections export as metal traces (#682, part 1) (#686)
- Electrical metal routing: traces, waveguide-crossing bridges, probe pad (#682)
- Electrical pins: fix export/serialization/compat findings (#519 review)
- Demo PDK: electrical pins on Phase Shifter (heater) + Photodetector (anode/cathode)
- Harden self-updater rollback + shared-dir guard (#616 review findings)
- Routing: 8-direction octile routing with 45° diagonals as new default (#552)
- Enforce pin-kind compatibility in click-to-connect path and CreateConnectionCommand (#519)
- Re-trigger review: previous reviewer output was unparseable
- Electrical pin kind foundation: parallel signal domain alongside optical (#519)
- macOS update: guide the unsigned-build Gatekeeper bypass (#610)
- Harden macOS/Linux update launch: open via IUrlLauncher, don't auto-quit (#610)
📦 Installation
Windows (Recommended - MSI Installer)
- Download
Lunima-Setup-0.12.0.msi - Run the installer
- Desktop shortcut and Start Menu entry will be created automatically
Requirements: .NET 10 Desktop Runtime (x64) - installer will check and prompt if missing
Windows (Portable)
- Download
Lunima-0.12.0-win-x64.zip - Extract and run
Lunima.exe
Linux
- Download
Lunima-0.12.0-linux-x64.tar.gz - Extract:
tar xzf Lunima-*.tar.gz - Run:
./Lunima
macOS (Apple Silicon & Intel)
- Download
Lunima-0.12.0-osx-arm64.dmg(Apple Silicon) orLunima-0.12.0-osx-x64.dmg(Intel) - Open the
.dmgand drag Lunima into Applications - These builds are unsigned. On first launch, clear the quarantine flag:
(or right-click the app → Open → Open to bypass Gatekeeper once)
xattr -dr com.apple.quarantine /Applications/Lunima.app
No .NET installation required for portable versions — everything is included.
Commit: 082533c