aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAgando <roduccomm@gmail.com>2026-11-07 18:57:47 +0100
committerAgando <roduccomm@gmail.com>2026-11-07 18:57:47 +0100
commite0b87c7b5a902dea69ac45ffa2e525387edebf42 (patch)
treec5c5d10700fd8ee52d71ef141500256dd8c2e0a7
parentfc24fdbe5d5bb504a967989122a66df9f9a7c6d7 (diff)
chore(newos4): v4.6.153 — cache-bust the review fixes
-rw-r--r--CHANGELOG.md10
-rw-r--r--main.html6
-rw-r--r--modules/core/module-loader.js2
3 files changed, 13 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9fc1839..3d142ba 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,7 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by ha
## v4.6.152 — 2026-11-07
-_Touches modules (13), README.md (1), help.html (1), main.html (1) · release 1, docs 1, fix 1_
+_Touches modules (18), CHANGELOG.md (2), README.md (1), help.html (1) · docs 2, fix 2, release 1_
- **Six interface modes (easy -> cockpit) over one terminal** `5dafaa4`
- Symptom: newOS4 had exactly one layout. A first-time user had no way in that did not require learning commands, and an operator had no surface showing live runtime state; the only way to see heap/VFS/tool-call telemetry was to type cat /sys/...
@@ -25,6 +25,14 @@ _Touches modules (13), README.md (1), help.html (1), main.html (1) · release 1,
- api.capture() split arguments itself; term._parseArgs does not exist, so every panel showed
- 'unavailable: term._parseArgs is not a function'
- the classic Let's Get Started modal is suppressed in non-classic modes: it covered easy's cards
+- **Rebuild changelog for v4.6.152** `5d9e037`
+- **Four-model review — lazy-load race, restore order, a11y, key handling** `fcd58a4`
+ - Reviewed the shipped change set with kimi-k2.7-code, deepseek-v4-pro, glm-5.3 and minimax-m3. Findings below are the ones that survived verification against file:line; the rest are in .hermes/plans/2026-11-07_163420-newos4-six-ui-modes.review-log.md
+ - Accepted and fixed:
+ - apply() had no generation token: a lazy mode load that finished after the user switched to
+ - another mode force-applied the abandoned one (`apply(want,{force:true})` in the .then). Every apply() now bumps `_loadSeq` and the callback acts only while its token is newest. Same token also removes a double mount: registerMode() already applies the mode as it registers, so the callback was mounting every lazy mode twice (teardown+cleanup twice).
+ - _restoreStock() used the recorded `nextSibling` as insert anchor. Every real mode moves
+ - … run `git show <sha>` for the rest
## v4.6.151 — 2026-11-07
diff --git a/main.html b/main.html
index b3f7bca..875ff38 100644
--- a/main.html
+++ b/main.html
@@ -1350,13 +1350,13 @@
</script>
<!-- v4.5.63: A2A scratchpad fixes + agent-register arg fix -->
-<script src="modules/core/core-bundle.js?v=v4.6.152"></script>
+<script src="modules/core/core-bundle.js?v=v4.6.153"></script>
<!-- Async dependency-ordered module loader now only initializes terminal and loads optional ext modules -->
-<script src="modules/core/module-loader.js?v=v4.6.152"></script>
+<script src="modules/core/module-loader.js?v=v4.6.153"></script>
<!-- Critical ext bundle loads AFTER webx11 exists so registerModule calls work -->
-<script src="modules/ext/critical-ext-bundle.js?v=v4.6.152"></script>
+<script src="modules/ext/critical-ext-bundle.js?v=v4.6.153"></script>
<script>
// ═══ ONE TRUE VERSION SOURCE ═══
diff --git a/modules/core/module-loader.js b/modules/core/module-loader.js
index e9d3413..7caa874 100644
--- a/modules/core/module-loader.js
+++ b/modules/core/module-loader.js
@@ -4,7 +4,7 @@
// Core module bundle loaded synchronously in main.html.
// This loader only handles version cache-busting, splash, terminal init, and optional ext modules.
- const LATEST_VER = 'v4.6.152';
+ const LATEST_VER = 'v4.6.153';
const CACHE = '?v=' + LATEST_VER;
// Exposed so ext modules can register their own URL with the same cache-busting version
// instead of an unversioned path the browser may already have cached (shell.js did).