Seventeen pi merges on October 23: physical model IDs on messages, model names in selectors, and eleven fixes
Seventeen pull requests merged in pi on October 23: two features, eleven fixes, four documentation changes.
Two features change what the model layer records and shows. #11265 stores the responseModel — the physical model actually used — on each PiMessage, so consumers like Radius can see what a virtual model such as cheap resolved to; this matters since #11000 drops thinking traces on model-name mismatches. #11347 (closes #5916) makes /model and /scoped-models show a display name in parentheses whenever it adds information — renamed models.json overrides were previously invisible.
Startup and sessions get two resilience fixes. #11304 stops a failing configured package from aborting startup: the failure is recorded per source, the package is skipped the way offline mode does, and a warning points at pi remove. #11288 writes forked sessions through one open handle instead of reopening per entry — a 73 MB session took over 30 seconds to fork under an endpoint security file monitor.
Output correctness accounts for four fixes. #11326 gives pi.exec() stdout and stderr their own UTF-8 StringDecoders, so multi-byte characters split across pipe chunks no longer decode into U+FFFD halves. #11325 rewrites TypeBox const in tool schemas to enum for the Google adapters — Gemini ignores const, letting the model send values that failed validation. #11318 fixes the faux provider’s cache accounting so every prompt token lands in exactly one bucket. #8057, in examples, stops a schema-invalid todo result from crashing the TUI.
Three fixes concern TUI rendering and selection. #11321 stops nested blockquotes from rendering exponentially — the width clamps around 39 levels of > at 80 columns, and each further level re-wrapped every line. #11340 adopts iTerm2’s word characters for fullscreen double-click selection (fixes #10980). #11320 crops boxed Kitty images above the viewport instead of dropping them entirely.
Two packaging fixes close the set: #11319 rebuilds the standalone binaries with Bun 1.4.4 across six tested platforms, and #11343 (fixes #11209) stops mapping non-arm64 architectures to x86_64 in fd/rg selection — ARM32 and ia32 got binaries that failed with Exec format error.
Four docs merges round out the day: #11338 fixes provider-checklist drift and broken MCP anchors while documenting /mcp, pi mcp add|remove, PI_CLEAR_ON_SHRINK, and "disabled" timeouts (closes #11243); #11329 removes a stale comment; #11351 and #11352 add missing changelog entries and require them for main-targeting work. All seventeen postdate the v1.4.0 tag, so they ship with the next release.