d5bb40f6 Reworks save-bar dirty-state tracking, wires it into tools.register, and adds a version field to protocol messages.
- The save-bar dirty-state utility in _utilities.js was rewritten with a new valuemodified event and a shared capture/settle registry for more reliable change detection.
- tools.register() now captures save-bar state before invoking a registered handler and settles it afterward via double requestAnimationFrame, keeping the save bar accurate when a tool action modifies form state.
- Bootstrap now attaches a version field to the client config, and web-vitals includes the same version field in its WebVitals protocol messages.
Files 19
+117 -63
16 modified