aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHermes SysOp <sysop@webx11.duckdns.org>2026-11-12 16:24:39 +0100
committerHermes SysOp <sysop@webx11.duckdns.org>2026-11-12 16:24:39 +0100
commitcbaa678ae624860ce4f918428a7b09d5f0e0ae2f (patch)
treede867d3660592866cb14b2d479567d8c3258670f
parentc08a795ae822e905639caf563e36cf7953d530f1 (diff)
chore(newos4): commit maintenance output after v4.6.159
-rw-r--r--CHANGELOG.md19
1 files changed, 18 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9739ebf..8f1c05b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,15 +4,32 @@ Generated from git history by `scripts/build-changelog.py` — do not edit by ha
<!-- generated:start -->
+## v4.6.159 — 2026-11-12
+
+_Touches modules (8), main.html (1) · fix 1_
+
+- **One arg-coercion boundary + binary-safe gunzip + clean boot log (v4.6.159)** `47b8aff`
+ - 1. Tool arguments are coerced once, at the dispatch boundary (module-aiassist.js)
+ - _coerceToolArgs(name, a) at :1584 reads the tool's own JSON schema and, for every
+ - declared string prop, converts number/boolean with String() and object/array with JSON.stringify (never "[object Object]"); declared integer/number props accept unambiguous numeric strings. null/undefined stay absent so the handlers' defaults and _pathArg still own "no value given".
+ - Called at both dispatch boundaries: runTool (:2650) and runModuleTool (:3565 —
+ - reachable from view_module and from ship_module -> test_module/health_check, which have their own parse+switch).
+ - A JSON body of "null" or "[1,2]" parses to a non-object; both sites normalise to {}
+ - before any handler reads a.field.
+ - The 26 handlers keep their `a.x || ''` reads: `|| ''` catches only FALSY, which is
+ - … run `git show <sha>` for the rest
+
## v4.6.158 — 2026-11-09
-_Touches modules (12), main.html (1), packages.json (1) · fix 1_
+_Touches modules (12), data (4), main.html (1), packages.json (1) · fix 1, project 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
+- **Commit feedback ledger after the v4.6.158 triage** `d86364e`
+ - decisions.jsonl gains 10 rows: 4 stale 2026-10-23 probes rejected, m.pull resolved as a usage error, and the four 2026-11-08/09 crashes resolved against a38f5dc. Queue after: awaiting 0, steering 0, plans_review 0.
## v4.6.157 — 2026-11-09