Repository navigation
Fix compaction history scan stalls and add lifecycle diagnostics - #2007
Conversation
|
Merge queue CI: failure — run 40674837903, attempt 1.
The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: failure — run 40681084098, attempt 1.
The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: failure — run 40684007427, attempt 1.
The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: failure — run 40686424288, attempt 1.
The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
|
Merge queue CI: success — run 40700049185, attempt 1. The run summary lists reused suites and executed checks. A green PR check alone does not mean queue validation has passed. |
TokenRhythm#1986) * fix(webui): keep a running turn's late rows above the queued follow-up A follow-up submitted while a turn is running lands in the transcript as a user row immediately, but the running turn keeps emitting router receipts and text afterwards with the older turn id. Rendering in arrival order placed those rows below the queued bubble, so the router strip and the activity it describes read as the follow-up's work. Group rendered rows by the first position of their turn before returning them. Rows inside one turn keep their arrival order, and rows without a turn key stay where they are. This corrects the strip and row attribution. The live edge is still mounted in the list trailing slot, which always renders after the last message row; moving it into its turn is a separate list-layout change. Refs TokenRhythm#1887 * fix(router): allow saving explicitly selected providers by default (TokenRhythm#1996) * fix(router): enable explicitly selected provider deployments on save * test(router): include provider save in browser workflow inventory * fix(deps): refresh vulnerable locks blocking router regression CI * fix(webui): let wheel gestures leave tool details at the scroll boundary (TokenRhythm#1985) An expanded tool result keeps its own bounded scroll window inside the transcript. Both that window and the code/diff viewport declared `overscroll-behavior: contain`, so a wheel gesture that reached either inner boundary was dropped instead of scrolling the conversation. During a live turn the transcript also stayed pinned to the live edge until the pointer moved onto ordinary text. Use `overscroll-behavior: auto` on both inner windows so the remainder of the gesture chains to the transcript. Scrolling inside a region that still has range keeps moving only that region. Adds a source guard that fails if either rule returns to `contain`. Fixes TokenRhythm#1889 Co-authored-by: angri450 <angri450@users.noreply.github.com> Co-authored-by: Open-Squilla <275096992+Open-Squilla@users.noreply.github.com> * fix(webui): silence routine reasoning replay notifications (TokenRhythm#2000) * fix(webui): contain collapsed activity scroll overflow (TokenRhythm#2003) * docs(readme): sync translated capability rows with the English README (TokenRhythm#2001) The zh-Hans, ja, fr, de, and es READMEs still described the pre-SDK-2.2 MCP extra install (opensquilla[recommended,mcp]) and a Windows sandbox gap that README.md already resolved. The mcp extra is now empty in pyproject.toml, so the documented install command is misleading. Co-authored-by: FENGCHENHAO\fch <204137222@qq.com> * Reset missing-session state for fresh chats (TokenRhythm#2004) * Fix compaction history scan stalls and add lifecycle diagnostics (TokenRhythm#2007) * Fix compaction history scan stalls and add lifecycle diagnostics * Bound scan allocations and observe post-summary settlement * Verify gateway exit diagnostics with inherited output pipes * Remove vulnerable download proxy serializer dependency * Preserve URI parser security floors in proxy tooling * Handle real quit confirmation in profile import acceptance * Handle quit confirmations in desktop acceptance cleanup * Run native close cancellation regression outside parallel CI * Update native close CI partition contract * Preserve internal handoff boundaries when ordering queued turns Group only explicitly anchored user turns within each uninterrupted presentation span. Preserve internal resume rows, incomplete history and legacy order while retaining late completion and router ownership. Co-authored-by: angri450 <angri450@users.noreply.github.com> * Update Vue I18n to address security audit findings --------- Co-authored-by: angri450 <angri450@users.noreply.github.com> Co-authored-by: Open-Squilla <275096992+Open-Squilla@users.noreply.github.com> Co-authored-by: fengchen122123-sudo <fengchen122123@gmail.com> Co-authored-by: FENGCHENHAO\fch <204137222@qq.com> Co-authored-by: lihongguang-0014 <hongguang.li@tokenrhythm.ai>
Scope
Malformed quoted text and long file references could hold the Python GIL during full-history coverage extraction after the model returned a summary, preventing compaction from reaching its durable commit. Use monotonic scans with compact indexes and incremental path consumption while preserving exact references and manifest completeness semantics.
Scope boundary: historical reference extraction, compaction/process observability, and the minimal download-proxy dependency fix required by the unchanged security gate.
Non-goals: image request-body limits, summary quality/admission policy, or determining the exact cause of a private user incident.
Branch
Base branch: main
Target exception: N/A
Development baseline: freshly fetched
origin/main@2bca6f54e4ed82301a25f12d29f9021f46243566; checked again before the review update.Issue
Linked issue: None
If None, reason: Maintainer-requested fix, independent review improvements, and remediation of the existing dependency-audit blocker.
Release Note
Release note: CHANGELOG.md Unreleased covers the scan fix, phase/process diagnostics, and removal of the vulnerable proxy dependency. Operator interpretation is documented in docs/diagnostics-and-replay.md.
Tests
Ruff: All changed Python source/test files passed;
git diff --checkpassed.Pytest on the reviewed implementation:
Build and dependencies:
npm ci --ignore-scripts, build, gateway lifecycle, process-cleanup lifecycle, and quit tests passed.Regression tests: added
Notes:
ci_serialphase. Both backends, the two internal concurrent closes, repeated cancellation, ownership assertions, and the original two-second watchdog remain unchanged. Collection verifies all 50 cases in the file are retained exactly once: 11 serial and 39 parallel.7f08a63c4; full merge-queue CI passed on the merged tree787e3f9b5. Fresh dependency audits and native packaged acceptance passed under the existing protection rules. Earlier attempts remain available in Actions history.The default test path remains offline, deterministic, credential-free, and safe for forks.
Maintainer Live Check
Maintainer live check: no
Surface: gateway
Maintainer-only note: Synthetic reproduction, regression suites, real child-process observation, and Desktop wiring/proxy checks are complete. No provider credentials or private session content are required.
Safety
Diagnostics contain host classifications, timing and process metadata, never prompts, summaries, exception messages, launch arguments or ownership secrets. No private transcripts, local artifacts, machine-specific paths, credentials or tests/_private/ contents are committed. Existing accounting, shutdown/recovery ownership and atomic commit behavior remain intact. Security audit thresholds and coverage are unchanged.
Third-Party Origin
Third-party origin: direct dependency
The existing fast-json-stringify registry dependency is updated under its MIT license; no source is copied or vendored. Registry integrity metadata is retained in package-lock.json and the existing dependency packaging notice applies. This removes the dependency chain affected by GHSA-gcqx-w48m-w2h4.
Read-only agent-reference research informed behavior and test shape. All scanner, diagnostic and regression code and wording were written independently.
Documentation Changes