Repository navigation
v0.6.4
Twelve fixes. Ten of them are one bug wearing different hats, and two come from Fusion field logs.
Tool results stop being cut at ingestion
compressToolResult was trimming tool output to 400 characters and 12 trailing lines as it was stored. The summary it returns is the tool_result turn, so whatever it dropped was gone — not deferred, not pageable. Twelve call sites took that bare default.
- #477 — nine ordered listings (
git log/status/branch,github pr/issue list,proc.list,window.list,browser.tabs, shell jobs) were cut to their oldest three to five rows with the header line gone.git lognow returns 20 commits newest-first;proc.listkeeps itsPID PPID USER CPU% MEM% COMMANDheader. - #470 —
os.shell.runtook the bare default whilegit.diffpassed 64 KB, so the model could not read the end of a command it had just run. It now keeps the tail, and the wide budget is paid once on the step that consumes it rather than re-pasted into history. - #474 —
skill.run_scriptdropped theexit:header first, so a script's success was invisible. - #475 — five MCP and vision sites discarded budgets their own code declared.
- #473 — the loop veto was cut on the very sentence that tells the model what to do instead of repeating.
- #472 — the forced reply quoted the no-progress streak and called it a refusal count.
- #471 — the skills catalog truncated silently (17 of 33 skills on the reporter's install) and
skills.catalogTokenBudgetinconfig.jsonwas parsed and ignored. Config version 70.
Memory
- #469 —
memory_linksstayed empty on every multi-step turn: the allowlist was rebuilt after each tool batch and was empty by the time reflection read it. A skipped link generation now says why in the trace instead of being silent. - #468 —
memory.embeddings.enabledwas cleared by a transient daemon observation, permanently dropping hybrid recall to FTS5. The reconciler is one-way now: only a user action or a durable disk fact clears the opt-in.
Fusion
- #487 — a worker's 45-minute clock started before it had a server slot, while the first-token budget is 30 minutes by design. A four-task fan-out on a two-slot machine lost its tail to timeouts with zero tool calls. The clock now starts at the first token;
timeoutandqueuedare separate statuses frommax_steps, because their remedies differ; a task can size its ownmaxSteps/timeoutMsup to 4× the configured default; and every row carriesqueueWaitMs, so a worker nothing ever answered is distinguishable from one that queued. - #488 — two workers implemented the same symbol with opposite field meanings and both satisfied the contract, which checks names.
provides[].shapecarries one line of meaning into the consumer's brief.
Docs
- #476 — 52 documented config defaults across 27 keys had drifted from the code, some by two orders of magnitude, with a guard test so they cannot drift again.
Verified against the built binary through a real terminal, not only in unit tests: listings, shell tails, skill-script output, the catalog marker, vision, MCP (including a 279-character resource URI round-tripping), the full veto text, memory links, and the embeddings latch measured side by side against v0.6.3 — where the flag flips to false within five seconds and here holds.