v0.41.1
Magic Context v0.41.1
Patch release: fixes for four regressions reported against v0.41.0 within its first day, plus install hardening and clearer scheduler diagnostics. Thanks to tickernelz, luelueluez7Z, zetaloop, tenshiak, and trim21 for fast, well-evidenced reports.
Historian temperature is now opt-in on every leg (#399)
v0.41.0 applied the flash-calibration sampling temperature (0.1) to all historian runs. Reasoning models reject or constrain the parameter (OpenAI Responses rejects it outright; Anthropic thinking accepts only 1), so historian chains built on those models failed on every attempt, surfaced only as no_assistant. Temperature is now omitted unless explicitly configured, across OpenCode, Pi, and the Rust engine. Explicit historian.<harness>.temperature values still apply for flash-class calibration. Provider errors that were previously discarded by the empty-assistant branch now surface in the failure message. Based on tickernelz's PR with our follow-up for the OpenCode and Rust legs.
Pi subagents on bundled CLI layouts (#400)
Pi 0.84.3 moved its CLI entry to dist/bundle/cli.js, which the spawn detection did not recognize; on Windows the bare pi fallback then failed with spawn pi ENOENT, taking historian and dreamer runs down entirely. Detection now resolves the CLI from the Pi package manifest's declared bin (layout-tolerant), the Windows fallback resolves pi.cmd/pi.ps1/pi.exe through PATHEXT without a shell, and a residual spawn failure names what was checked.
Native ONNX no longer blocks installation (#402)
onnxruntime-node's postinstall can fail (currently: an unfollowed HTTP redirect upstream), and it previously sat on a required dependency edge — a failed native download aborted the whole plugin install. Native accelerators are now optional at install time: npm prunes them on failure and the plugin installs normally, local embeddings fall back to the bundled WASM runtime, and remote/synapse providers are unaffected. A manifest fence test keeps the edge optional through future dependency bumps.
Pi todo spinner removed (#398)
The animated in-progress todo glyph re-rendered the entire transcript ~6 times per second for the lifetime of any active task, disrupting scrollback. Reverted to a static glyph; a regression test now pins that the todo widget arms no timers between real state changes.
Clearer scheduler diagnostics (#401)
A report of "drops never happen" traced to log lines that hid what was actually going on: reductions land at turn boundaries by design (mid-turn transcript rewrites would invalidate the provider prompt cache on every tool step), but the logs neither said so nor named the deferral. The historian redundancy-skip line now identifies itself and states when reclaim is expected; deferral lines distinguish mid_turn_boundary from a genuine below-threshold scheduler_defer; and pending-drop counts report the durable queue depth instead of 0 when the queue simply was not loaded on a deferred pass.