From 4587c757b17d8a92df7c98ec37ace4c5500a4f5a Mon Sep 17 00:00:00 2001 From: Agando Date: Mon, 2 Nov 2026 21:21:24 +0100 Subject: fix(newos4): read_file pages were silently truncated; delegation no longer invents "completed" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two defects found by re-deriving a report that claimed both were still open. read_file paging (module-aiassist.js) - A page larger than the result clip was clipped AFTER read_file had computed next_offset. On the last page next_offset is null, so the model was told truncated:false while its tail had been removed: measured 11 890 of 19 999 chars delivered, returned:19999, no pointer to the rest - 8 109 chars lost with no way to ask for them. * the clip now sets truncated=true and next_offset=offset+keep when it removes the tail of a page that had no continuation (and never splits a surrogate pair) * read_file caps a page at the result budget (min(pageCap, toolResultChars-200)), so a page is always delivered whole and next_offset is exactly contiguous Live v4.6.143: 19 999-char file -> page 11 800 (next_offset 11 800), page 2 8 199 (next_offset null): 11 800 + 8 199 = 19 999, nothing withheld. A model asking for limit:32000 is clamped to 11 800 and told truncated:true. The ~500-char symptom was the 500-char floor: a caller passing limit:200 gets 500, which is why targeted sed -n reads looked better than the tool. Delegation reporting (module-orchestrator.js, module-aiassist.js) - chat() returning {content} was already fixed in 8a9333b, but three other places still substituted the word "completed" for an absent answer, so the symptom survived: delegateTask's outbox wrote status:'completed' even when the worker returned nothing; the delegate_task tool returned {success:true, result:"completed"}; orchestrate-parallel summarised an unmatched agent as {status:'ok', result:'completed (agent recycled)'} and a missing outbox as "completed (no outbox)". - Now: an empty/undefined answer is status 'failed' with error 'agent produced no answer' / 'no result in outbox' / 'agent not found — result unverifiable', and the tool returns success:false with result:null. Tests: test-delegation-reporting.js 6 (RED 3/6 against HEAD: D3/D4 success:true, D5 the literal "completed"), test-tool-context-bound 26 with E6-E8 (RED 24/2: truncated:false, next_offset null). maintain 27/27. --- main.html | 6 +-- modules/core/core-bundle.js | 79 ++++++++++++++++++++++++------- modules/core/module-aiassist.js | 44 +++++++++++++++-- modules/core/module-loader.js | 2 +- modules/core/module-orchestrator.js | 35 +++++++++----- modules/test/test-delegation-reporting.js | 57 ++++++++++++++++++++++ modules/test/test-tool-context-bound.js | 17 +++++++ 7 files changed, 204 insertions(+), 36 deletions(-) create mode 100644 modules/test/test-delegation-reporting.js diff --git a/main.html b/main.html index f3c4ac4..39efdc5 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +