Skip to content

VECTOR 0.3.2: saved projects survive a power cycle - #1537

Merged
repeat98 merged 5 commits into
mainfrom
fix/vector-settings-survive-boot
Nov 13, 2026
Merged

repeat98 merged 5 commits into
mainfrom
fix/vector-settings-survive-boot

Conversation

@repeat98

@repeat98 repeat98 commented Nov 13, 2026 •

Copy link
Copy Markdown
Owner

VECTOR 0.3.2-experimental. Related to #1533 and #596.

What was wrong. VECTOR keeps its settings in the Part. Up to 0.3.1 it stored SPAN in the top four bits of one byte, so SPAN 8 to 12 (the default is 12) gave a byte of 0x80 or more. Stock's Part check counts that as a value to repair, and at power-on the battery restore then drops the whole bank: every track reads STATIC and the trigs are gone. VECTOR's wrapper around the check (0.2.4) only helps while VECTOR is registered. Over USB the base restores the battery copies before the kept modules are back, so every USB user with a VECTOR track at its defaults was hit. The same happened on a unit without VECTOR, and on a track switched back to STATIC or FLEX (#596).

What changes.

  • vector_pack keeps every byte below 0x80: SPAN's top bit moves to a free bit of the neighbouring byte. A saved project now loads with or without VECTOR, on the stock OS too.
  • vector_unpack reads both forms, so settings from every earlier version keep their values. The marker stays S2/2.
  • While it runs, VECTOR rewrites the old byte in the four working Parts of the open bank and their battery copies, and marks those Parts changed.
  • The USB package is rebuilt from this source (428d970a…, 18,334 bytes); the declared lag at 0.2.5 is gone. Card packages rebuilt in the pinned toolchain.

Compatibility. No new hook, site or claim; modules:compat is unchanged. Going back to 0.3.1 or older reads SPAN 8 to 12 saved by 0.3.2 as 0 to 4. Source and media: no new files, nothing from firmware.

How I checked it (details in TESTING.md):

  • On the owner's MKII, 13 November 2026, driven over USB on a RAM-booted development twin, packages as timed trials, a scratch project, Part and pattern bytes read over USB. With the published 0.2.5 package and SPAN 12 the settings read … 0c c0; after a restart every track was STATIC and T1's and T2's trigs were gone; a second restart without saving brought the bank back with the byte repaired to 00. With this package SPAN 12 reads … 4b 40 and the second page shows 12; after a restart the bank, the trigs and the bytes were unchanged.
  • ot_emu, a base with no VECTOR installed, stock's check called on the live Part: 0.3.1's default bytes return 1, 0.3.2's return 0 at the defaults and with every control at its maximum.
  • ot_emu, the new USB package installed: 0.3.1 bytes planted in two Parts were rewritten in the bank and the battery copy, and the check returned 0.
  • test_engine.c under ASan/UBSan, also in the toolchain image; it fails on 0.3.1's engine.c.
  • npm run module:doctor -- vector green, npm run pr:ready: Ready.

Not tested. On the unit the restarts were RAM boots with the track switched back to FLEX and the settings left in place, because a trial cannot roll back while a track names VECTOR. A restart with the track still set to VECTOR under 0.3.2, a power cycle with 0.3.2 kept on the flashed base, the rewrite of old settings on a unit (emulator only), PROJECT > RELOAD as the recovery and the card build were not run.

Not covered. Saved Parts keep the old byte until the Part is saved again. A track switched from VECTOR back to STATIC or FLEX with an older version and SPAN 8 or higher is not repaired, because VECTOR no longer knows it.

Guides: the persistence section of docs/ADD_A_MODULE.md did not say that every byte a module stores in a Part must pass stock's check without the module, because the check runs at boot before the modules are back. Fixed in #1538.

  • I read the guide for its category in docs/module-guides/, and TESTING.md lists what I did not test.
  • Source and media are mine or properly licensed. Nothing comes from Elektron firmware.
  • Screenshots are real captures of the current module UI (unchanged). Emulator results are labelled as emulator results.
  • Automatically merge and publish my module update after checks pass.
  • I verified the source, licences, UI and qualification reports, including instance isolation and Part/project/reboot persistence where applicable; no required acceptance check is failed or untested.

🤖 Generated with Claude Code

repeat98 and others added 2 commits November 13, 2026 21:14
… project survives a power cycle (#1533, #596)

SPAN's top bit moves out of bit 7; settings saved by older versions read the same and are rewritten in the open bank.

Co-Authored-By: Claude <noreply@anthropic.com>
…age 428d970a, recipe pins

Co-Authored-By: Claude <noreply@anthropic.com>
repeat98 and others added 3 commits November 13, 2026 21:53
… boots); hardware record names the shipped package

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
@repeat98
repeat98 merged commit 6755340 into main Nov 13, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant