velxio/CHANGELOG.md

234 lines
19 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
All notable changes to Velxio will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [3.0.1] - 2026-07-18
### Added
- Added keyboard mapping for pushbuttons – assign a key from the component property dialog; keycap badge shows the mapping on the canvas.
- Introduced global message dialog and confirm modal replacing native `confirm()` and `alert()` calls across the editor, file explorer, and other modals.
- Preserved in-progress workspace across login redirect using sessionStorage (stashed as `.vlx` and restored after authentication).
- Added full 830-point and mini 170-point breadboard parts with Fritzing artwork (CC-BY-SA 3.0) and computed pin geometry.
- Added built-in internal connectivity for breadboard strips and power rails (netlist merging).
- Added new 4-pin I2C SSD1306 OLED module and gallery examples for Uno, ESP32, Pico, and STM32.
- Added auto-detecting SSD1306 part that automatically selects I2C or SPI protocol based on wiring.
- Added ESP32 WiFi + MQTT (PubSubClient) gallery example that round-trips through a public broker.
- Added ESP32-S3 ILI9341 TFT display example.
- Added multi-board “Run All” button with split-menu to run only the active board.
- Added wire color discoverable UI on desktop: context menu with color swatches and floating palette when a wire is selected.
- Added featured component sorting – breadboards now lead the component picker.
- Added per-component pin hover highlighting (only the pin under the cursor lights up, matching the breadboard behaviour).
- Added runtime burnout for resistors, electrolytic capacitors, and LEDs (sustained overload destroys the part; charred visual and open circuit).
- Added pre-flight circuit verifier rules: missing power, dangling two‑terminal parts, power shorts, over‑voltage warnings for boards and electrolytic capacitors.
- Added Pico W WiFi emulation (paid feature): virtual DHCP/ARP net, IoT gateway, internet bridge, and full associaton.
- Added AVR EEPROM emulation (fixes hangs on `EEPROM.read/write/update`).
- Added ATtiny85 USI I2C bridge enabling SSD1306 OLED support via TinyWireM.
- Added feedback mechanisms: star banner follow-up for users who dismissed the first prompt, and circuit verification results now appear in the output console.
### Changed
- Redesigned the examples page: compact toolbar, denser grid with 5:3 thumbnails (no black bars), and filter chips with dropdown selects.
- Unified editor toolbar controls now collapse by container width instead of viewport, preventing overlap when the AI chat panel is open.
- Removed redundant file-tabs bar from the toolbar; file switching is now done exclusively from the left explorer.
- Breadboards now always sit behind all other components (z‑index -1) to reflect their physical role.
- Pin overlays stack within their component group and no longer leak through covering components.
- Board pins stay clickable – hover handlers moved to the component wrapper, not the drag overlay.
- Slide-switch model corrected from SPST to genuine SPDT with pin‑1/pin‑3 throws and a common wiper.
- NTC temperature sensor SPICE model fixed (pull‑up on top, NTC to GND) so the decode matches the example sketch.
- SPICE pre-flight and runtime electrical re-solve now triggered on all output pin edges (ESP32, STM32, Raspberry Pi) and on component burnout.
- Circuit verifier findings are now logged to the output console instead of a toolbar toast.
- Virtual file system upload now auto‑starts the Pi and waits for the shell before sending files.
- The Run button shows a spinner and stays disabled while circuit verification is in progress.
- Non‑English locales (zh‑cn, pt‑br) now load correctly on direct navigation.
- `/en/*` routes are redirected to the prefix‑free path instead of rendering a blank page.
- Star banner flags are now separate for dismissal and click‑through, allowing one follow‑up prompt.
- Built‑In breadboard and minimap artwork switched to the Fritzing parts‑library (CC‑BY‑SA 3.0).
- ESP32 digital inputs are now driven from the real SPICE solve for accurate `digitalRead()`; AVR inputs include modeled internal pull‑up resistors; RP2040 and STM32 also benefit from SPICE‑driven inputs.
- Pico W board now loads the `RPI_PICO_W` firmware variant (with `network` module) when a CYW43 peripheral is present.
### Fixed
- Fixed keyboard‑mapped buttons firing while typing in the Monaco code editor (focus sink detection improved).
- Fixed board pins being unclickable when the cursor moved from the drag overlay onto a pin square.
- Fixed wire colour changes from the UI being a no‑op (`applyNow` was `false`).
- Fixed `recordUpdateWire` being undefined in `SimulatorCanvas` causing JavaScript reference errors.
- Fixed rotated component pin positions being wrong for wire starting, undo/redo, and import (three separate bugs).
- Fixed Delete/Backspace key inadvertently triggering board removal instead of only deleting selected components.
- Fixed ESP32 UART pin classification missing for multi‑board Serial interconnect (TX/RX, TX2/RX2 now properly mapped).
- Fixed ESP32‑C3 digital inputs not resolving from SPICE (spiceDrivenInputs enabled).
- Fixed ESP32 dual 3V3/5V pins (e.g., DevKitM‑1) not being tied to the supply rail.
- Fixed ATtiny85 pin name mapping and Timer0 PWM register addresses (blink/PWM works).
- Fixed AVR EEPROM not instantiated – `EEPROM.read/write` no longer hangs.
- Fixed SSD1306 page‑addressing mode (default memory mode set to 2) so Tiny4kOLED and U8g2 render correctly.
- Fixed breadboard holes not connecting during netlist building (5‑hole strips and power rails now merge).
- Fixed breadboard pins invisible for dense components – only the pin under the cursor lights up (consistent with other components).
- Fixed Pico W WiFi emulation: gSPI framing, F2 byte order, host‑wake IRQ, event frames (BDC headers), and virtual DHCP/ARP.
- Fixed Pico W MicroPython file writing (UTF‑8 byte length for LittleFS) – multi‑byte characters no longer truncate files.
- Fixed ESP32‑C3/‑S3 compiling with wrong target (`esp32` instead of `esp32s3`) and missing GPIO pins 40‑48.
- Fixed ESP32 firmware download fast‑path for WiFi emulation (inDiscardableWriteData).
- Fixed SPICE re‑solve not being triggered on ESP32/STM32/Pi output pin edges (LED stayed stuck on).
- Fixed SPICE re‑solve not being triggered when a component burns out (burnt part stayed in the circuit).
- Fixed circuit verifier being blind to current faults in production (branch currents not enumerated via ngspice AllVecs).
- Fixed circuit pre‑flight verification never running on Run button click (click event mistaken for `skipVerify` argument).
- Fixed verification findings being wiped when Run auto‑compiled after verification.
- Fixed tooltip/text fields not being respected when Backspace was used to delete wires (AI chat, etc.).
- Fixed window blur not releasing keyboard‑mapped buttons (no stuck keys after Alt‑Tab).
- Fixed minimap red viewport rectangle not updating during canvas drag (now live‑tracked via `requestAnimationFrame`).
- Fixed Docker build artifact upload exhausting Actions storage quota (disabled).
- Fixed QEMU/ROM downloads failing on transient deploy blips (added retries).
- Fixed backend E2E tests failing on fork PRs due to missing secrets (gated gracefully).
- Fixed non‑English locale bundles not loading on direct navigation (i18next initialisation and case matching corrected).
- Fixed `/en/*` routes rendering blank (redirected to prefix‑free canonical path).
- Fixed UI: toolbar controls overlapping on narrow bar when AI chat panel was open (container query collapse).
- Fixed UI: neon decorative outlines replaced with solid tokenized `#0071e3` accent across editor and landing page.
- Fixed UI: “Circuit check” findings preserved across Run auto‑compile, no longer cleared.
- Fixed UI: breadboards now always behind components, and pin overlays stack correctly with their group.
- Fixed UI: pinned overlays pickers (Add Component, board picker) now render above AI chat panel (z‑index 9000).
- Fixed UI: rotated component pin boxes incorrect after import/undo/load (re‑measure after layout).
- Fixed UI: star banner tracking distinguished between dismissal and actual click‑through.
- Fixed UI: file tab bar removed from toolbar to free up horizontal space.
- Fixed examples: ESP32 Blink LED example now includes a series resistor.
- Fixed examples: 8 MicroPython WiFi examples changed from plain Pico to Pico‑W board type.
- Fixed examples: slide‑switch wiring in digital and circuit examples updated to match corrected SPDT model.
## [3.0.0] - 2026-06-11
### Added
- Custom retro CPU chips (Z80, 8080, 4004, 4040, 8086) with programmable ROM, board-less operation, and in-editor assembly support
- MicroSD card emulation over SPI for AVR, RP2040, and ESP32 with FAT16 image and upload panel
- Library Manager with per-board manifests, content-addressed cache, version management, uninstall, and autocomplete
- ePaper display emulation for SSD168x (B/W, tri-colour), UC8159c (ACeP 7-colour), and UC8179 (mono) panels
- Undo/redo for canvas operations (components, wires, moves, rotations, property changes)
- PinResolver abstraction enabling SPICE-resolved digital inputs for mixed-mode simulation
- Full ngspice WASM migration: one solver path across browser and Node tests
- SignalRouter for ESP32 GPIO Matrix routing, replacing the per‑peripheral ad‑hoc cache
- Oscilloscope trigger modes (Auto / Normal / Single) with edge selection and position control
- RP2040 real-time performance: IdleSpinDetector elides busy‑wait loops, WFI sleeps are bounded
- ESP32‑CAM emulation with real webcam frame bridge via QEMU
- Multi‑board wire‑aware interconnect (UART, I2C, SPI, digital pins) across all supported boards
- GitHub Sync, Share/Embed modal, BOM CSV export, schematic PNG export (Pro features)
- Desktop app welcome page, grace/license gating, native menubar bridge, in‑app update toast
- i18n support for 9 locales (en, es, pt‑br, it, fr, zh‑cn, de, ja, ru) across the UI
- Extension hooks for private overlays: auth/DB split, session, save action, agent chat slot
- .vlx project export/import for stateless OSS self‑hosters
- Board options modal, per‑target compilation console with status grouping
- Live compile log streaming for ESP‑IDF (cmake/ninja output) and arduino‑cli
- Visual LED test harness (CDP‑driven) and netlist snapshot tests for all gallery examples
- Over 100 new gallery examples (Pico Doom, ESP32‑CAM preview, ePaper dashboards, retro CPU demos, 100 Days of IoT, analog circuits, etc.)
### Changed
- Library Manager redesigned: single unified tab with state‑aware row actions (Add to project, In project toggle, Uninstall/Remove)
- Compilation system: async job model with status polling, request dedup, concurrency semaphore, persistent ESP‑IDF build directory
- ESP‑IDF builds now use ccache with 8 GB cap, per‑variant persistent directories, and graceful fallback for incomplete manifests
- Server‑side library resolution scoped to content‑addressed cache; global volume retired
- ePaper rendering improved: native‑window compose, proper rotation, byte‑aware orientation, paged window union
- Canvas interactions enhanced: wires follow component rotation, minimap with draggable viewport, drag‑to‑move parts during simulation
- Bundle size reduced via manualChunks: main entry dropped from ~23 MB to ~2.68 MB; wokwi‑elements, PiTerminal, mcu‑emulators split
- Landing page refreshed with AI agent section, updated pricing tiers, licensing cards, and live editor hero screenshot
- Pricing copy updated to multiplier messaging (Pro = 20×, Pro Max = 50×)
- Desktop app hides marketing nav, redirects / → /editor, shows splash screen during boot
- CHANGELOG.md entries reflect all new features and changes for v3.0.0
### Fixed
- ESP32: WiFi/HTTP client link by enabling mbedTLS PSK; BLE stack switched to Bluedroid; LEDC duty routing for multi‑servo; flash image trimming (10× smaller JSON); sdkconfig defaults for cleaner serial output
- RP2040: delay()‑based sketches now run in real‑time on slow hosts; SPI0 routing fixed for Arduino init; UART TX waveform synthesized
- AVR: serial RX queue so `Serial.readStringUntil` sees full input; UART TX waveform at bit level; INPUT_PULLUP pin state; LED visualization through SPICE
- Multi‑board: initSimulator no longer wipes Interconnect’s UART wrapper; board removal reconciles `running` flag
- Canvas: wires follow component rotation; undo/redo state restored; component deletion cascades to wires; sensor panel opens on desktop click; wire color palette works
- i18n: index.html SEO fallback div removed after mount; missing locale keys for admin/user pages added
- Desktop: openExternal works via cascade of IPC paths; native menu routes navigate in‑window
- CI: Frontend Tests restored by patching RP2040 mocks and install‑libraries payload; backend e2e re‑enabled; worker heap limit bumped; cache storage growth limited
- Library: ArduinoJson and other src/‑layout libraries compile correctly by preserving directory structure
- ePaper: BUSY polarity per controller family; RAM Y‑counter wraps at window end; orientation correct across all boards
- Visual LED: RGB LED, 7‑segment, and PWM fade now correctly driven through SPICE‑resolved pins
- PinManager: updatePort respects DDR mask so INPUT_PULLUP does not falsely mark pin as output
- Many other bug fixes across compilation, simulation, UI, and platform compatibility
### Performance
- Bundle size reduced by 88% for main entry via manualChunks
- ESP‑IDF warm compiles drop from 5–7 min to 5–30 s with ccache + persistent build dir
- Compilation dedup prevents multiple ninja jobs from racing on the same sketch
- Spice/I2C waveform rendering speed improved by batching SPI bytes in the worker
- Minimap and canvas rendering optimised for mid‑range hardware
### Removed
- Legacy SpiceEngine (eecircuit‑engine) and CircuitScheduler replaced by ngspice WASM
- Dead auth/DB dependencies from OSS image (SQLAlchemy, JWT, etc.)
- Per‑board LEDC update fallback after SignalRouter rollout
- Unused files: `wireOffsetCalculator`, `wirePathGenerator`, `wireSegments`
- Global arduino‑libraries volume no longer needed for library resolution
## [2.0.1] - 2026-04-22
### Added
- Enhanced electrical simulation with ngspice-WASM engine for accurate analog circuit analysis
- Expanded component catalog with 44 SPICE-compatible parts including logic gates, transistors, op-amps, regulators, and electromechanical components
- Added 40 new circuit examples demonstrating analog, digital, and electromechanical concepts
- Introduced custom web components for electronic elements (relays, resistors, capacitors, inductors, transistors)
- Implemented ESP32 ADC waveform simulation with periodic 12-bit waveform look-up tables and interpolation
- Added voltmeter and ammeter instrument components for real-time circuit measurements
- Created comprehensive end-to-end tests for electrical simulation including capacitor charging, rectifier behavior, and waveform analysis
- Added GitHub Actions workflow for circuit simulation testing on every push and PR
### Changed
- Renamed all components to use 'velxio-' prefix for consistency
- Enabled electrical simulation by default (always-on SPICE mode) instead of requiring manual activation
- Enhanced LED brightness simulation to reflect actual current flow from SPICE calculations
- Updated backend to handle unhandled asyncio exceptions and prevent process crashes
- Improved component metadata generation to prevent CI drift and enforce up-to-date metadata
- Refactored property synchronization in simulation parts to use event-based system
- Expanded ADC pin mapping to support all 18 board types for full microcontroller integration
### Fixed
- Fixed sitemap generation to include all circuit examples for better SEO visibility
- Resolved floating input node issues in RC low-pass filter circuits that caused SPICE singular matrix errors
- Updated proxy configuration to use 127.0.0.1 for improved compatibility
- Fixed metadata regeneration to properly include custom components in the component picker
- Improved backend entrypoint script to ensure clean container restarts when processes die
## [2.0.1] - 2026-04-17
### Added
- Added ATtiny85 support with examples and simulation tests
- Added BMP280 sensor component with circuit preview and SVG representation
- Added example detail pages with improved SEO and sitemap generation
- Added MicroPython support for RP2040 (Pico), ESP32, ESP32-S3, and ESP32-C3 boards
- Added ability to upload precompiled firmware files (.hex, .bin, .elf) directly into the emulator
- Added ability to remove boards from workspace with confirmation dialog
- Added I2C sensor support with slave emulation for MPU6050, BMP280, DS1307, and DS3231 sensors
- Added ESP32 WiFi/BLE emulation with ESP-IDF compilation pipeline
- Added VS Code extension skeleton for local simulation
- Added comprehensive documentation for ESP32 GPIO sensor simulation, Docker infrastructure, and MicroPython implementation
- Added auto-compile feature that triggers compilation when pressing Play if code changed or no firmware loaded
- Added share functionality for projects and examples with visibility toggle
- Added component metadata overrides and enhanced property controls
- Added new CI/CD workflows for backend unit tests, end-to-end tests, and automated Discord release notifications
- Added Docker multi-architecture support (amd64 + arm64) and pre-built ESP-IDF toolchain image
### Changed
- Enhanced auto-compile to use board's file group for WiFi detection instead of legacy global files
- Updated CircuitPreview component and implemented ShareModal using createPortal
- Enhanced Arduino pin tracing in DynamicComponent and updated LittleFS WASM initialization
- Enhanced ESP-IDF compiler library resolution logic and added support for dynamic library detection
- Enhanced wire connection handling and GND checks for components
- Enhanced logging for library loading and WiFi progress
- Updated Docker build processes with optimized build contexts and multi-architecture support
- Changed WiFi SSID normalization to match QEMU access points for reliable ESP32 WiFi connection
- Refactored I2C slave tests for ESP32 with improved event handling and ACK/NACK responses
### Fixed
- Fixed container restart issue by monitoring both backend and nginx processes
- Fixed project saving to use active board files/kind and improved error messages
- Fixed ESP32 boot stability with deterministic instruction counting
- Fixed ESP32 Run button to auto-compile and recover firmware after page refresh
- Fixed LED ground check to require cathode wired to GND (or LOW GPIO) to light up
- Fixed MPU6050Slave I2C handling with improved WHO_AM_I read tracking
- Fixed ESP32 WiFi SSID/channel alignment with QEMU access_points array
- Fixed RISC-V toolchain paths for ESP32-C3 compilation
- Fixed ESP-IDF Python requirements installation in Docker
- Fixed SaveProjectModal to prevent saving to `/api/projects/none` when project ID is invalid
- Fixed ESP32 compilation by adding missing dependencies (cmake, ninja-build, git, packaging, libusb)
[2.0.1]: https://github.com/davidmonterocrespo24/velxio/releases/tag/v2.0.1
[3.0.0]: https://github.com/davidmonterocrespo24/velxio/releases/tag/v3.0.0
[3.0.1]: https://github.com/davidmonterocrespo24/velxio/releases/tag/v3.0.1