Skip to content

0.7.0

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 07 May 21:19
· 876 commits to main since this release
76df152

CANShift Studio 0.7.0 — burn UX, day/night legibility, and a tighter studio.

Highlights

Burn progress modal (Option C — part 1 of 2)

Clicking Burn now opens a full-window status modal that follows the device through the whole write cycle:

  • Pushing config to device… — sending the JSON over USB
  • Device writing & rebooting… — firmware acked, SD write + reboot in flight
  • Done — your config is live — auto-connect re-established the link

A 20-second safety timeout returns the modal to idle if the device never comes back, so it can never get stuck. The companion firmware-side LCD overlay ships in the next firmware release; until then you'll see the studio modal alone.

Day / night text legibility

Day mode renders dashboards on a light grey background. Until now, widget value labels read cfg.style.textColor.rgb directly — usually white — making them invisible on the day backdrop. The fix lives in firmware (ThemeManager::getEffectiveTextColor()) with the studio preview mirrored 1:1:

  • Day mode → black text on grey
  • Night mode → white text on black
  • Top bar untouched in both modes

Bespoke per-widget text colours (cyan COOLANT, orange OIL, red GEAR) intentionally collapse to the mode's text colour for legibility — the trade-off was explicitly accepted in #171.

⚠️ The full benefit lands once you flash the matching firmware build (also v0.7.0 in this release). Without it, the studio preview stays accurate but the device keeps the old white-on-grey behaviour.

Import / Export dashboard JSON

Two new entries under the File menu, distinct from Open / Save:

  • Import Dashboard… — load a foreign JSON without binding it as the working file. Studio runs the schema migration, validates, and refuses on errors. The editor opens with a dirty flag so a later Save prompts for a fresh location.
  • Export Dashboard… — write a snapshot of the current config to a chosen path without changing the working file path or the recent-files list.

Use this for backups and sharing where you don't want the regular Open/Save flow to retarget your active file.

Status feedback improvements

  • USB connection — the colored dot in the TopBar is now a proper USB icon that turns green when connected, orange while burning, red on error, gray when disconnected, with a soft drop-shadow glow on the active states.
  • Device config load — connecting to a device with no SD config, an invalid config, or a parse error no longer fails silently. A success log shows up when the load worked, an info log when the device just had nothing to send, and a red banner with full validator details when the on-device config is broken.

Internals

  • First main-process test infrastructure under canshift-studio/main/. Locks the USB disconnect bookkeeping introduced in v0.6.1 (intentional vs. involuntary close) so the contract can't silently regress.
  • Layout collision coverage taken from 90 % to 100 %. Push-left / push-up directions and cascade termination are now pinned.
  • Schema-aware JSON import path (Import Dashboard…) reuses the same migration the Open path runs.

Migrations

Schema is unchanged from 0.6.1 — still 1.10.0. No migration runs on existing dashboards.

Verification on real hardware

When testing the burn flow end-to-end:

  1. Install this studio build, connect a CANShift device.
  2. Trigger Burn — the new modal should walk through Pushing → Rebooting → Done.
  3. Once the firmware-side overlay ships in the next firmware release, you'll also see a "Saving config…" overlay on the LCD itself.

If the modal hangs at "Device writing & rebooting…" longer than 20 s, it'll auto-clear and the console panel + error bar will show why.

Full PR list since 0.6.1

  • #178feat(studio): import/export dashboard JSON outside the device flow
  • #181test(studio): regression coverage for USB disconnect bookkeeping
  • #182test(studio): cover layout collision push-left/up + cascade termination
  • #183feat(studio): USB icon reflects connection state in TopBar
  • #184feat(studio): surface device config load failures in the UI
  • #185feat(firmware): widget text color follows active mode (black/day, white/night)
  • #186feat(studio): burn progress modal — pushing/rebooting/done phases (v0.7.0)