From a46ebee30cfbbac86abb45068411bc28e1c65503 Mon Sep 17 00:00:00 2001 From: Agando Date: Sat, 7 Nov 2026 19:29:06 +0100 Subject: fix(newos4): workspace re-opened the modules panel every tick; picker lost two cards; commander was black MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three defects reported against v4.6.155, each reproduced before touching code: 1. 'the modules tab keeps opening' (workspace). api.capture() runs dispatchCommand() for real, and the Modules card called bare 'modules' — whose only effect is terminal.openModuleManager(). Every 15 s refresh re-opened the panel (measured: #module-manager display:flex at t+9s and t+18s). The card now captures 'listmods' (same inventory as text), and api.capture() refuses UI-only commands outright so a future card cannot reintroduce it. 2. 'the picker got reduced to 4 items'. showPicker() used this.list() once four modes were registered — but modes are lazy, so that is 'modes you have already visited'. It now always renders the six in level order, taking registered specs for label/tagline. 3. 'commander is mostly black' on a phone. The base sheet's #ui-root rule used body[data-ui-mode]:not(...) #ui-root (1,2,1) and therefore beat every mode's own body[data-ui-mode='x'] #ui-root (1,1,1): commander/studio/cockpit asked for display:grid and got flex column. Commander collapsed to a 253 px centre column in an 844 px page with both rails hidden. Base specificity is now (1,0,0) with an explicit !important hide for classic/boot, and the commander phone query pins grid-template-rows: minmax(0,1fr) so the single row fills. Measured after: picker 6 cards after visiting four modes; #module-manager stays display:none across a refresh cycle; commander display:grid, phone centre 390x810 with a 673 px terminal, desktop 232/788/260 columns. probe-ui-modes.py --cycle -> ALL PASS, 13 checks; shell test 25/25. v4.6.156 --- CHANGELOG.md | 15 +++++++++++++++ main.html | 6 +++--- modules/core/core-bundle.js | 28 ++++++++++++++++++++-------- modules/core/module-loader.js | 2 +- modules/core/module-uishell.js | 28 ++++++++++++++++++++-------- modules/ext/ui-commander.js | 4 +++- modules/ext/ui-workspace.js | 5 ++++- 7 files changed, 66 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f0a9d6..090694e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,21 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by ha +## v4.6.155 — 2026-11-07 + +_Touches modules (10), CHANGELOG.md (1), main.html (1) · fix 1_ + +- **Second review round — identity for every stock node, load dedup, sweep race, a11y** `0acee7d` + - Four models (kimi-k2.7-code, deepseek-v4-pro, minimax-m3, glm-5.3) reviewed the shipped change set. Review log with every accepted and rejected finding: .hermes/plans/2026-11-07_163420-newos4-six-ui-modes.review-log.md + - identity guard now covers every snapshot node, not just #terminal-container: terminal.js also + - binds #output, #command-input, #input-area and #status-bar, so a cloned one leaves the terminal writing into a detached node while the page looks perfect + - _restoreStock anchors on the next stock node already home, then on the recorded trailing + - sibling; a raw child index was measured wrong (terminal,input,status-bar,quick-actions) + - _loading map: a double-clicked card or a repeated 'ui easy' loads the mode once + - _sweepPending returns while that id is in flight instead of declaring failure at 6 s and + - overwriting the stored preference + - … run `git show ` for the rest + ## v4.6.153 — 2026-11-07 _Touches CHANGELOG.md (1), main.html (1), modules (1) · project 1_ diff --git a/main.html b/main.html index eb0fe9a..a6e17e9 100644 --- a/main.html +++ b/main.html @@ -1350,13 +1350,13 @@ - + - + - +