diff --git a/CHANGELOG.md b/CHANGELOG.md index ac34f52c..d709d5af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ## [Unreleased] +## [v0.51.670] — 2026-06-26 — Release XZ (settled tool-call rows stay before the final answer) + +### Fixed + +- **A complete final answer no longer looks unfinished when an earlier tool call shares its timestamp.** On a paginated load, older `state.db` assistant rows carrying distinct tool calls were appended after the settled final answer instead of inserted in order, so the renderer treated the real final answer as a non-final segment until a refresh. The merge now inserts those tool-call rows chronologically — including the equal-timestamp case (a fast tool call and the final answer landing in the same second), where the final answer now correctly stays last. The existing dedupe, tool-call→result block integrity, and watermark reconciliation are unchanged. Thanks @franksong2702. (#4893) + ## [v0.51.669] — 2026-06-26 — Release XY (set OpenAI priority service tier from the model picker) ### Added diff --git a/tests/test_merge_key_tool_calls.py b/tests/test_merge_key_tool_calls.py index 0f44b00f..9cbcbaaf 100644 --- a/tests/test_merge_key_tool_calls.py +++ b/tests/test_merge_key_tool_calls.py @@ -211,7 +211,6 @@ class TestMergeToolCallsEndToEnd: ) # The tool result must stay immediately after its assistant(tool_calls). - idxs = {id(m): i for i, m in enumerate(result)} asst_idx = next(i for i, m in enumerate(result) if m.get("tool_calls") and m["tool_calls"][0]["id"] == "call_1") res_idx = next(i for i, m in enumerate(result)