Standard parts (partsLibrary.js)
- ACDC TXL palette: 15 solids plus the 16 stocked stripe combinations
- 29 wire functions fix colour, stripe and gauge per signal, so a wire
drawn from a given pin comes out identical on every build
- 16 pre-labelled parts: Skudak VCU (GRAY/BLACK), openinverter LDU
23-pin, Dilong OBC/DCDC, BMW pedal, Honeywell CSSV1500, Bender
ISO175, Bosch iBooster, Prius EPS, Volvo PS pump, cluster, DNR
switch, 32-way enclosure bulkhead, contactors, VW MEB BMS
- OEM colours override the in-house standard where we splice into a
factory loom (VW MEB LV connector, recovered from the VW bms diagram)
- Brown is ground, matching the MEB loom and European practice; orange
is reserved for AC mains and OEM high-voltage runs
Fuse box configurator (pdmLibrary.js)
- GEP FRH-A12/A24 and the 48-way PDM as 280-footprint cavity grids
- Place, drag and rotate fuses, relays, diodes, breakers and bus bars
- Bus bars occupy their own collision layer and feed the blades they
cross, suppressing those inputs so one wire supplies the run
- Cavity capacity is tracked; Apply is blocked while a placement
overlaps or overhangs
- Naming a circuit renames its pins: "VCU" gives "VCU in" / "VCU out"
Theming (theme.js)
- Light and dark modes; canvas background, grid dots, part fill and
part outline are configurable and persisted
- CSS converted to custom properties with property-aware light-mode
pairs, since a colour used as text and as a surface must flip
differently; no rule falls below 3:1 contrast in either theme
- Canvas devices, pins, labels, cable rows and the harness view are
themed too, since Konva bakes colours in at draw time and cannot
read CSS variables
Also
- Pass-through bulkheads: one device covering both connector faces,
with a single centred label per circuit
- Pin labels scale with the device font instead of a fixed 8px
- Keyboard handling is modal-scoped, so Delete no longer removes the
canvas device while the fuse box editor is open
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- History panel defaults to "This diagram" / "All" toggle
- "This diagram" filters git log to commits that touched only that
diagram's JSON file (git log -- diagrams/0001_*.json)
- Automatically switches to "All" when no diagram is open
- Restore flow still works per-commit, per-file
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Git modal (⎇ Git button): commit all diagrams as JSON to diagrams/ folder,
push to remote, view history, restore any diagram from any past commit
- Diagrams exported to diagrams/{id}_{name}.json on each commit so diffs are
human-readable and individual diagrams can be restored independently
- backend/run.py: changed host to 0.0.0.0 for LAN access
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Undo fixes:
- Move undo now redraws deviceLayer so devices visually snap back
- Label, reference, gauge, color, and all wire/device property changes are now undoable
- Duplicate and paste are now undoable (deletes cloned devices on Ctrl+Z)
Right-click menu additions (roadmap 16-20):
- Align & distribute: left/right/top/bottom edges, H/V spacing for multi-select
- Bring to front / Send to back via zOrder in device.properties
- Copy/paste wire style (color, gauge, stripe, twisted pair, shielded)
- Select all wires on net highlights every wire sharing the same label
- Lock device: prevents moves, shows padlock badge, persists across refresh
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Wire options (twisted pair, shielded, stripe, bundle) were not
persisting because the backend server had stale Python modules loaded
from before the WireUpdate schema was updated with these fields.
Pydantic silently ignored unrecognized fields, so only pre-existing
fields like color_stripe were saved.
Frontend fixes applied alongside the schema work:
- _patchWire now shows visible error on save failure instead of
swallowing errors and falsely flashing Saved
- Bundle dropdown rebuild is guarded with _updatingBundleDropdown flag
to prevent spurious change events from triggering unwanted PATCHes
- Enable uvicorn reload=True so server auto-restarts on code changes,
preventing stale module issues in the future
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>