diff options
Diffstat (limited to 'CHANGELOG.md')
| -rw-r--r-- | CHANGELOG.md | 86 |
1 files changed, 82 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 409b069..090694e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,90 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by ha <!-- generated:start --> +## 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 <sha>` for the rest + +## v4.6.153 — 2026-11-07 + +_Touches CHANGELOG.md (1), main.html (1), modules (1) · project 1_ + +- **V4.6.153 — cache-bust the review fixes** `13271e5` + +## v4.6.152 — 2026-11-07 + +_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/... + - Root cause: no UI layer existed. main.html hard-codes one flex column, and terminal.js binds the stock nodes by id at construction, so an alternative layout had to either duplicate the output stream or reparent the real nodes. + - Fix: + - modules/core/module-uishell.js (new): mode registry, #ui-root, stock-node + - snapshot/restore, identity check that reverts to classic when a mode removes or clones #terminal-container, shell-docked #ui-foot (the AI stop button exists in every mode), ui command, gated first-run picker, ?ui= honoured only if the mode actually registers, lazy mode loading via the same loader ext modules use. + - … run `git show <sha>` for the rest +- **V4.6.152 changelog + change-history row for the six modes** `38e75c5` +- **Mode layout constraints, capture() arg split, suppress classic welcome modal** `61ba8b5` + - #ui-root is a flex column (it was display:block, so every mode's flex:1 was inert and the + - terminal collapsed to 0px while the composer sat at the bottom of a 4600px flow) + - overflow:clip on #ui-root and body: overflow:hidden is still a scroll container, and the + - terminal's scrollIntoView() on new output scrolled the mode's own chrome off-screen + - terminal min-height 100px: in the tabbed/panel modes its grid parent is not a flex parent + - 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 + +_Touches modules (5), main.html (1), help.html (1) · project 1, fix 1_ + +- **V4.6.151 — wget that actually saves, web_fetch that actually pages** `f84a82d` + - S1 (reported by agent-os4-maint-01, wrongly refuted by the chat auto-reply): wget existed but was unusable and dishonest. + - Cause 1: _cmdWget used the page's own fetch(url), so every cross-origin URL + - died on CORS ("Failed to fetch"). Measured in the served v4.6.150 page: fetch(cgit README) threw, /api/fetch returned 200/1954 bytes. + - Cause 2: _vfsWriteBytes ignored writeFile()'s boolean, so the command printed + - a green tick when the target directory did not exist. Measured: fs.writeFile('nosuchdir/x.txt') === false. + - Cause 3: bytes were round-tripped through String.fromCharCode, mangling UTF-8. + - Fix: fetch through /api/fetch (raw source), mkdir -p, writeFile + read-back + - verification, error instead of a tick on failure. Register curl with -s/-o parsing delegating to the same writer so the two cannot drift. + - … run `git show <sha>` for the rest +- **Document curl in help command table (auto)** `f8e4c51` + - Plan: .hermes/plans/2026-11-07_061825-newos4-curl-help-row.md (T1) Root cause: curl shipped in v4.6.151 (cryptogzip.js:19 getHelpInfo, :612 commands['curl']) but help.html's command table was never updated, so check_help_coverage() reported 365/366. + - Change: one <tr> row added after the wget row in help.html's command table. No JS/PHP touched; cryptogzip.js, modules-index.json and atlas unchanged as specified in T2. + - Verification: grep -c '<code>curl ' help.html -> 1 wget row at 1086, curl row at 1087 -> adjacent grep -c "_isBase64" modules/ext/cryptogzip.js -> 0 (unchanged) git diff --stat -> help.html | 1 + python3 scripts/newos4-maintain.py -> PASS: help coverage 366/366, maintenance result: OK, needs OK: none HTTP help.html -> 200 + +## v4.6.150 — 2026-11-06 + +_Touches modules (7), main.html (1), CHANGELOG.md (1) · project 2_ + +- **Commit the module work that has been live but uncommitted** `6bea062` + - Operator commit-approve, 2026-11-06. These changes have been served since 2026-11-02/03 while git HEAD still stamped v4.6.146, so the mirror published a tree four builds behind the running instance and the release tag named the wrong build. + - … run `git show <sha>` for the rest +- **Regenerate for v4.6.150** `10e2ac2` + ## v4.6.146 — 2026-11-06 -_Touches docs (11), modules (3), README.md (3), CHANGELOG.md (3) · docs 10, fix 4, release 3_ +_Touches docs (11), CHANGELOG.md (4), modules (3), README.md (3) · docs 10, fix 4, release 3_ -- …and 4 earlier commit(s) in this build -- **Per-OS clone guide (Linux, macOS, Windows, Termux, iOS)** `8e34256` - - Served at https://newos.webx11.duckdns.org/usage.html from docs/usage.html in this repo, so the page, the mirror and the README share one source. Covers the four failure modes that actually bite: CRLF on Windows (core.autocrlf), missing CA bundles, cloning into /sdcard from Termux (FUSE has no POSIX permissions), and the read-only 403 on push. +- …and 5 earlier commit(s) in this build - **Drop hardcoded file/commit counts from the usage page** `d2bb158` - 310 files / 182 commits were already wrong at publish time (184). A count that changes on every publish is a rot vector; the page now says what the tree is and lets the reader run the commands. - **No byte count either — it grows with every publish** `a24ec6b` @@ -47,6 +124,7 @@ _Touches docs (11), modules (3), README.md (3), CHANGELOG.md (3) · docs 10, fix - Symptom: after bodies were rendered, this fix's own commit was missing from its own entry, and a long URL inside an expanded detail was clipped at the right edge on a 390 px screen. - Cause: items took group[:MAX_ITEMS] from a CHRONOLOGICAL list, so a 17-commit build showed its first 14 and dropped the newest three (the count line said "…and 3 more", hiding which three). And the injected detail CSS set no overflow-wrap, so a 47-character URL pushed the paragraph to 320 px of unbreakable text — the document stayed at 0 overflow only because the li clipped it. - … run `git show <sha>` for the rest +- **Regenerate after the render and ordering fixes** `2feefc0` ## v4.6.145 — 2026-11-02 |