You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
108-issue window release (#3449-#3557 boundary), dominated by a config-subsystem hardening sweep (atomic writes, env-reference preservation, key clears, MCP migration) and the closing of two integration-layer regressions: the playbook failure-sample gate (#3557) and session branch lineage that never reached disk (#3558).
Startup blank-TUI fix: runMaintenance held the store mutex across a full-store scan, freezing the TUI for ~50s on launch with large session histories (#3514).
agent: removed the stale !stats.Success gate in recordPlaybook — failure samples now reach Playbook.Record, so SuccessRate degrades and prune can evict degraded strategies (#3557); batch write invariants extracted per-file targets for multi_file_write and notebook_edit (#3547/#3548); multi-file write checkpoints record create-vs-edit so undo removes created files (#3512); error_classifier substring misclassification fixed with an auth_error class and compile-missing-file attribution (#3525); dead 'hash' term dropped from the Python weak-hash context gate (#3541).
session/tui: branch lineage (ParentSessionID/ForkPoint) now persists to the JSONL meta record and index; new /branches tree view and /branch-switch <id> jump between related sessions (#3558).
agentruntime: workflow orchestrator compacts finalized steps every round (#3544); loop-top cancel exit honors the Partial contract (#3537).
config: env-ref restore by server name not index (#3533); env references preserved in im.yaml / mcp_servers.yaml saves (#3528); single-sourced a2a auth delta so explicit api_key clears survive (#3531); anonymous/duplicate MCP server migration (#3524); endpoint validated before side effects in SetEndpointAPIKey (#3522); removeKeysEnv rewrites keys.env atomically (#3519).
commands: corrupt skill_usage JSON no longer silently erased (#3517); replaceVar passes non-matching bytes through verbatim (#3515).
Sessions forked before this release have no branch lineage on disk (the field never persisted); /branches shows trees only for forks created from v1.3.255 onward.