Fix chat timeline render identity reuse#917
Conversation
Qualify live chat row keys by thread, generation, kind, and entry id so reset or synthetic-row transitions cannot reuse stale visual subtrees. Clear stale FunctionalUI modifier dependency properties on reused controls to avoid leaking old bubble styling/layout into new rows. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Codex review: needs maintainer review before merge. Reviewed July 1, 2026, 8:40 PM ET / 00:40 UTC. Summary Reproducibility: no. deterministic current-main runtime reproduction was established. The linked issue and PR proof show the visible symptom and reset path, and source inspection shows plausible stale row-key and reused-control paths. Review metrics: 3 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the focused renderer identity, modifier cleanup, and cache-pruning fix once exact-head CI is green and maintainers accept the shared FunctionalUI compatibility surface. Do we have a high-confidence way to reproduce the issue? No deterministic current-main runtime reproduction was established. The linked issue and PR proof show the visible symptom and reset path, and source inspection shows plausible stale row-key and reused-control paths. Is this the best way to solve the issue? Yes, this is a narrow maintainable repair for stale render identity and reused modifier state, with the maintainer follow-up addressing cache growth from generation-qualified keys. The main remaining decision is compatibility acceptance for the shared FunctionalUI cleanup. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against bbd18d431766. Label changesLabel justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
Prevent keyed chat timeline generations from leaving old renderer controls, components, and content flyouts cached after they disappear from the rendered tree. This keeps the openclaw#917 row-identity fix from trading stale visual reuse for unbounded detached UI cache growth. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Thanks for the thoughtful fix here, Caleb. I did a two-model maintainer review because this touches the shared FunctionalUI renderer as well as the chat timeline. The row key/generation approach looks sound, and the One real issue came up during review: generation-qualified keys would otherwise mint new renderer paths on every Local validation on the patched branch:
I’m waiting for CI on the pushed commit, then I’m comfortable merging this. |
Summary
ClearValue(...)so reusedBorder,TextBlock, andControlinstances do not retain stale bubble layout/styling.Fixes #899.
Validation
./build.ps1- passeddotnet test ./tests/OpenClaw.Shared.Tests/OpenClaw.Shared.Tests.csproj --no-restore- passed: 2686 passed, 31 skippeddotnet test ./tests/OpenClaw.Tray.Tests/OpenClaw.Tray.Tests.csproj --no-restore- passed: 1455 passedpython ./.agents/skills/autoreview/scripts/autoreview --mode local --engine copilot- clean: no accepted/actionable findingsCodex autoreview could not run because the
codexexecutable was not installed in this environment; the same project autoreview helper was run with the Copilot engine instead.Real behavior proof
winapp run ".\\src\\OpenClaw.Tray.WinUI\\bin\\Debug\\net10.0-windows10.0.22621.0\\win-arm64" --manifest ".\\src\\OpenClaw.Tray.WinUI\\Package.appxmanifest" --executable "OpenClaw.Tray.WinUI.exe" --debug-outputopenclaw://chat.OpenClaw #899 render proof - please acknowledge briefly.lbl-openclaw899rend-26bd Text "OpenClaw #899 render proof - please acknowledge briefly."C:\\Users\\t-edencaleb\\.copilot\\session-state\\059f92fb-1d9f-4e9c-ac3a-a6f28cb355bd\\files\\issue899-fix-chat-after-send.png.The original #899 symptom has not been reproduced deterministically. This PR is a best-effort fix for the observed live-render failure mode: correct message data/copy/reload behavior but stale/malformed WinUI visuals. The patch targets two plausible renderer causes found in the current code: weak live row identity during reset/synthetic-row transitions and stale dependency-property values on reused FunctionalUI controls.
Here is current-head proof of the reset path: after running
/new, the next sent message renders as a full user bubble and the assistant transition renders without the stale gray/empty bubble artifact. This is not proof that the flaky #899 symptom is eliminated, because we have not found a deterministic repro. It is current-head smoke proof for the highest-risk path identified in the report:/newfollowed by a sent user message and assistant transition. The screenshot shows that this path still renders the full user bubble and does not show the stale gray/empty bubble artifact.Rubber-duck review
/newmanual proof would be useful if a reliable repro path is available.