summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md40
1 files changed, 38 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 915fe55..9739ebf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,15 +4,51 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by ha
<!-- generated:start -->
-## v4.6.156 — 2026-11-07
+## v4.6.158 — 2026-11-09
-_Touches modules (5), CHANGELOG.md (1), main.html (1) · fix 1_
+_Touches modules (12), main.html (1), packages.json (1) · fix 1_
+
+- **Six crash classes from the feedback queue (v4.6.158)** `a38f5dc`
+ - Each item is symptom -> cause -> fix, re-verified against the served bytes.
+ - 1. debug-ai panel threw "Cannot read properties of undefined (reading 'substring')" (RPT-20261108-231622). _updateDebugPanel and two sibling previews called JSON.stringify(entry.args).substring(); JSON.stringify(undefined) returns undefined, and _toolCallLog entries carry args: undefined for any tool call with no arguments. All three previews now go through _formatToolArgs(), which renders "null" and never throws.
+ - 2. test_module threw "Cannot convert undefined or null to object" (RPT-20261108-232127). Object.keys(instance.commands) assumed every module initialises a command map. The throw landed after loadModuleFromCode had already succeeded, so the rolledBack:true branches were skipped and an unverified module stayed loaded. Both sites now require instance.commands.
+ - … run `git show <sha>` for the rest
+
+## v4.6.157 — 2026-11-09
+
+_Touches modules (3), main.html (1), .gitignore (1) · fix 1, review 1_
+
+- **Take the UI shell off the startup path until the crash reports are explained** `11a8e73`
+ - Symptom: operator reports newOS4 "started to crash since the last ui update"; a user (Max) reports his browser crashed. Order: roll back, do not re-enable until it is verified in a dev environment.
+ - Root cause: not yet established, and the log work rules out the obvious suspect.
+ - 0 requests for modules/ext/ui-*.js in the entire access log: no interface mode
+ - has ever mounted in production, so a mode's own chrome cannot be the cause.
+ - all six modes driven on one page in headless Chromium at 390x844: no crash, no
+ - page errors, one #terminal-container, heap flat at 10 MB over a 25 s idle.
+ - the six errors.json entries that read like a crash report (SPA is not defined,
+ - DOM harness FAILED: N, "...reading 'makeInstance'") exist in no shipped file - grep on the served 1.29 MB bundle returns 0 - so they came from a harness run inside that one browser session.
+ - … run `git show <sha>` for the rest
+- **Dev tree + crash matrix for the UI modes (prod stays classic)** `44bafb9`
+ - Follow-up to 11a8e73, which took the UI shell off the production startup path after the operator's crash report. This commit ships the verification harness the re-enable is gated on, and nothing that changes what users load.
+ - admin/scripts/probe-ui-crash.py (new): drives classic -> easy/chat/studio/
+ - workspace/commander/cockpit -> classic on ONE page per viewport, listening for the renderer `crash` event and `pageerror`, asserting exactly one #terminal-container, a visible output pane, a docked #status-bar, no horizontal overflow, heap < 250 MB and < 20 % drift across a 25 s idle soak in the two heaviest modes. Two mobile UAs (Android WebView - the operator's own, no `wv)` token - and iOS 16 Safari) get a boot-only pass. rc=1 on any finding.
+ - admin/docs/ui-crash-matrix-2026-11-09.json: the run of record. 3 viewports
+ - … run `git show <sha>` for the rest
+
+## v4.6.156 — 2026-11-09
+
+_Touches skills (25), data (24), .bkp-fix-20261023_143429 (17), downloads (12) · project 2, fix 1_
- **Workspace re-opened the modules panel every tick; picker lost two cards; commander was black** `84084ec`
- 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.
- … run `git show <sha>` for the rest
+- **Commit accumulated maintenance output** `00d8e4b`
+ - The daily collector and the feedback pipeline had left 57 modified files uncommitted (skills, modules-index, CHANGELOG, feedback decisions, debug counters). The public mirror publishes git HEAD, so without this the published repo stayed behind the tree - and it blocked the publisher outright once uncommitted subtrees started failing loudly.
+- **Snapshot the generated content that the served site is actually running** `d2e0d3a`
+ - 103 admin pages (nav block + feedback dashboard), 40 newos4 maintenance files, 39 gunesuygarligi pages (cookie banner, legal, pazar, haberler), and the handful of root pages that changed with them. These are regenerated by builders and cron, but they are what nginx serves right now, so the repository should match the deployment - and the public newos4 mirror refuses to publish a dirty subtree.
+ - No behaviour changes in this commit: it makes git agree with what is already live.
## v4.6.155 — 2026-11-07