From e0b87c7b5a902dea69ac45ffa2e525387edebf42 Mon Sep 17 00:00:00 2001 From: Agando Date: Sat, 7 Nov 2026 18:57:47 +0100 Subject: chore(newos4): v4.6.153 — cache-bust the review fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 10 +++++++++- main.html | 6 +++--- modules/core/module-loader.js | 2 +- 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 ` 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 @@ - + - + - +