v5.1.22
2026-04-13
Public changelog page
- NewChangelog at
/changelog— this page. Every future update will be documented here alongside the version and date. Accessible from the landing page nav.
Every update to Spark²Plan — from the big refactors to the little polish.
/changelog — this page. Every future update will be documented here alongside the version and date. Accessible from the landing page nav.build.mjs was using String.replace() to inject compiled JS into the HTML template. When minification produced $& patterns in variable names, .replace() interpreted them as regex backreferences and silently corrupted the bundle. Switched to split().join().alert(), confirm(), and prompt() browser dialog with a custom non-blocking toast + modal system (88 dialog calls migrated). Errors, success messages, and confirmations now feel native to the app.role="dialog", aria-modal, and aria-label to all modals and close buttons. Added a focus-trap hook.React.memo components. ~1,800 lines moved out of the monolithic App — they no longer re-render when unrelated state changes.updated_at column). If a conflict is detected, your local change is reverted and you're notified to refresh and try again. Prevents silent data loss in collaborative editing.