Skip to content

fix(agents): preserve last assistant reply before compaction boundary (#76729)#94720

Closed
LiuwqGit wants to merge 2 commits into
openclaw:mainfrom
LiuwqGit:fix/issue-76729-preserve-assistant-boundary
Closed

fix(agents): preserve last assistant reply before compaction boundary (#76729)#94720
LiuwqGit wants to merge 2 commits into
openclaw:mainfrom
LiuwqGit:fix/issue-76729-preserve-assistant-boundary

Conversation

@LiuwqGit

@LiuwqGit LiuwqGit commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Behavior addressed: When a session is compacted, the successor transcript previously dropped the assistant reply immediately before compaction.firstKeptEntryId, breaking the conversational turn structure. With compactionSummary → user → ..., the assistant reply that answered the summarized user question disappeared, leaving the successor transcript narratively incomplete.
  • Why this matters now: Issue Feishu replies disappear from webchat after compaction rotation (buildSuccessorEntries drops assistant messages) #76729 — users see a context window that begins with a user question that has no preceding assistant answer. The LLM lacks the assistant's prior framing when responding to subsequent turns.
  • Intended outcome: The kept tail preserves the assistant reply that closes the summarized user message, so the successor transcript begins with compactionSummary → assistant → user → ....
  • Out of scope: No changes to compaction logic itself, summary generation, duplicate-user-message dedup, or post-compaction state entries.

Linked context

Closes #76729

Related: #94720 supersedes prior attempts (#90299 / #93805 / #91707) that proposed post-compaction patches; this fix addresses the root cause at the successor-transcript build step.

Real behavior proof

  • Behavior or issue addressed: Successor transcript now keeps the assistant reply immediately before the surviving user message, maintaining compactionSummary → assistant → user → ... turn structure instead of dropping the assistant.

  • Real environment tested: Node.js v24.16.0 on Windows 11 x64, local openclaw checkout at commit f2cfac0 on branch fix/issue-76729-preserve-assistant-boundary. The fix touches a pure function (buildSuccessorEntries in src/agents/embedded-agent-runner/compaction-successor-transcript.ts); this proof exercises the exact tail-preservation logic with a fixture that mirrors the reporter's trace from issue Feishu replies disappear from webchat after compaction rotation (buildSuccessorEntries drops assistant messages) #76729, runs the logic on a real Node.js runtime, and prints the kept tail side-by-side.

  • Exact steps or command run after this patch:

    cd work/openclaw
    git checkout fix/issue-76729-preserve-assistant-boundary
    node scripts/run-vitest.mjs src/agents/embedded-agent-runner/prove-76729.e2e.test.ts
  • Evidence after fix (terminal capture):

    === PR #94720 L2 Real Behavior Proof (#76729) ===
    Node.js: v24.16.0
    Platform: win32 x64
    Date: 2026-06-21T01:08:10.303Z
    
    Reporter's trace (issue #76729):
      [e1] user: "What's the weather today?"
      [e2] assistant: "It's sunny and 72 degrees in San Francisco."
      [e3] user: "What about tomorrow?"
      [e4] assistant: "Tomorrow will be cloudy with a chance of rain."
      [compaction] firstKeptEntryId=e3, summary="User asked about weather, assistant provided today's forecast."
      [e5] user: "Should I bring an umbrella?"
    
    BEFORE fix (no tail walk):
      effectiveFirstKeptId = "e3"
      → kept tail starts at: What about tomorrow?
      → dropped: the assistant reply at e2 (silent message-loss of 'It's sunny...')
    
    AFTER fix (tail walk preserves assistant before firstKept):
      effectiveFirstKeptId = "e2"
      → kept tail starts at: It's sunny and 72 degrees in San Francisco.
      → preserved: the assistant reply 'It's sunny and 72 degrees...'
    
    === Verdicts ===
      ✓ BEFORE drops assistant tail (the bug)
      ✓ AFTER extends firstKeptEntryId to the assistant
      ✓ Assistant message text is preserved
    
    Overall: ✓ PASS — successor transcript preserves the assistant reply before firstKept
    
  • Observed result after fix: With compaction.firstKeptEntryId = "e3" (the second user message) and the entry at e2 being an assistant message, the new tail-walk logic on lines 130-138 of compaction-successor-transcript.ts extends effectiveFirstKeptId from "e3" back to "e2". The successor transcript's kept tail now begins with the assistant reply "It's sunny and 72 degrees in San Francisco." followed by the user turn "What about tomorrow?" — preserving the conversational turn structure.

  • Before evidence (revert replay): Reverting the tail-walk to keep effectiveFirstKeptId = compaction.firstKeptEntryId causes the regression test compaction-successor-transcript.duplicate-prompt-loss.test.ts (case "preserves assistant reply immediately before firstKeptEntryId (Feishu replies disappear from webchat after compaction rotation (buildSuccessorEntries drops assistant messages) #76729)") to fail with expected messages[0].role === "assistant", received "user". This is the same wire-visible drop the reporter observed in Feishu replies disappear from webchat after compaction rotation (buildSuccessorEntries drops assistant messages) #76729.

  • What was not tested: Live Control UI / WebChat session with end-to-end compaction. The proof uses the local embedded-agent successor-transcript runtime harness, which exercises the same buildSuccessorEntries code path the live session invokes at compaction time.

  • Proof limitations: L2 runtime fixture (deterministic branch replay). Live end-to-end requires an openclaw gateway with a session that has had a real compaction cycle. The harness covers the exact decision surface the live path uses.

  • Reproduction command for maintainers:

    cd work/openclaw
    git checkout fix/issue-76729-preserve-assistant-boundary
    node scripts/run-vitest.mjs src/agents/embedded-agent-runner/prove-76729.e2e.test.ts && \
      node --import tsx scripts/run-vitest.mjs \
        src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts

Tests and validation

  • node scripts/run-vitest.mjs src/agents/embedded-agent-runner/prove-76729.e2e.test.ts — exit 0, L2 fixture proves tail-preservation logic
  • node --import tsx scripts/run-vitest.mjs src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts — full suite passed
  • 2 new tests added:
    1. preserves assistant reply immediately before firstKeptEntryId (#76729) — confirms the tail walk
    2. does not extend past non-assistant / deduped state entries (#76729) — guards the early break in the walk
  • Existing #91707 and #90299 regression tests still pass (no behavior change to compaction / summary logic)

Risk checklist

  • Did user-visible behavior change? Yes — the LLM in a compacted session now sees the prior assistant reply that frames the summarized user question.
  • Did config, environment, or migration behavior change? No
  • Did security, auth, secrets, network, or tool execution behavior change? No
  • Highest-risk area: The tail walk could extend firstKeptEntryId past a non-message entry (e.g. state / custom / label) if the early break on line 137 is removed. Mitigated by: (a) explicit isDedupedStateEntry / type === "custom" / type === "label" guards before the assistant check, (b) the regression test that walks past a deduped state and confirms effectiveFirstKeptId does NOT extend.

Current review state

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed June 21, 2026, 2:44 AM ET / 06:44 UTC.

Summary
The PR changes embedded-agent successor transcript rotation to preserve the assistant reply immediately before compaction.firstKeptEntryId and adds regression/proof coverage.

PR surface: Source +25, Tests +249. Total +274 across 3 files.

Reproducibility: yes. Source inspection shows current main removes summarized message entries while replay starts at compaction.firstKeptEntryId, and the PR body/check provide focused runtime proof for the assistant-boundary loss.

Review metrics: 1 noteworthy metric.

  • Compaction replay anchor: 1 firstKeptEntryId rewrite added. The adjusted boundary controls which pre-compaction context survives into the successor transcript, so maintainers should review it as session-state-sensitive before merge.

Root-cause cluster
Relationship: fixed_by_candidate
Canonical: #76729
Summary: This PR is an active candidate fix for the canonical assistant-boundary compaction issue; older direct attempts are closed unmerged, another open PR targets the same issue, and adjacent duplicate-prompt work touches the same builder for a different loss mode.

Members:

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🦐 gold shrimp
Proof: 🦞 diamond lobster
Patch quality: 🦐 gold shrimp
Result: needs maintainer review before merge.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Move or remove the fixed-path proof output so the proof test cleans up everything it writes.
  • Restore formatter-clean indentation in the changed successor transcript test.
  • [P2] Rerun the focused proof and successor-transcript suites after the repair.

Mantis proof suggestion
A short WebChat or Control UI proof would help maintainers see the user-visible reply survive compaction rotation and refresh. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify WebChat or Control UI still shows the assistant reply after compaction transcript rotation and refresh.

Risk before merge

  • [P1] The added proof test still writes a fixed temp file outside its cleanup directory, which can make repeated or parallel runs flaky.
  • [P1] Two open PRs target the same linked assistant-boundary issue, and an adjacent open PR changes the same successor-transcript builder for duplicate-prompt loss, so maintainers should sequence one coherent compaction replay result.

Maintainer options:

  1. Clean Up The Proof Test First (recommended)
    Move or remove the fixed temp-file write in the proof test, restore formatter-clean indentation, and rerun the focused proof and successor-transcript suites without changing production behavior.
  2. Sequence The Compaction Builder PRs
    Review or rebase this PR with fix(agents): keep post-compaction user re-issue of a kept-tail prompt during compaction rotation #94328 and fix: assistant reply lost between compaction summary and first kept user in successor transcript #95484 in mind so assistant-boundary and duplicate-prompt fixes do not fight in the same builder.
  3. Prefer The Sibling Candidate Later
    If maintainers choose a different candidate branch for the same issue, keep this PR open until that branch is clean, proof-positive, and actually supersedes this work.
Copy recommended automerge instruction
@clawsweeper automerge

Special instructions:
Fix `src/agents/embedded-agent-runner/prove-76729.e2e.test.ts` so proof output is written inside the test-owned `tmpDir` or not written at all, preserving cleanup and avoiding a fixed shared temp path. Also restore formatter-clean indentation in `src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts`; do not change the production compaction behavior. Then run `node scripts/run-vitest.mjs src/agents/embedded-agent-runner/prove-76729.e2e.test.ts` and `node scripts/run-vitest.mjs src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts`.

Next step before merge

  • [P2] A narrow automated repair can clean up the proof test temp-file handling and formatting without changing production compaction behavior.

Security
Cleared: No concrete security or supply-chain concern found; the diff changes agent transcript rotation logic and tests without dependency, workflow, package, or secret-handling changes.

Review findings

  • [P2] Keep proof output inside the test temp dir — src/agents/embedded-agent-runner/prove-76729.e2e.test.ts:141-142
  • [P3] Restore formatter-clean indentation — src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts:129
Review details

Best possible solution:

Land one coherent successor-transcript fix that preserves the assistant-boundary reply, keeps test artifacts isolated, and remains compatible with the adjacent duplicate-prompt compaction fix.

Do we have a high-confidence way to reproduce the issue?

Yes. Source inspection shows current main removes summarized message entries while replay starts at compaction.firstKeptEntryId, and the PR body/check provide focused runtime proof for the assistant-boundary loss.

Is this the best way to solve the issue?

Mostly yes. The production fix is at the right owner boundary because successor transcript construction controls both stored replay and future session context, but the proof test and formatting need cleanup before merge.

Full review comments:

  • [P2] Keep proof output inside the test temp dir — src/agents/embedded-agent-runner/prove-76729.e2e.test.ts:141-142
    This test already owns and removes tmpDir, but the proof file is written to a fixed process temp path. Parallel Vitest shards or retrying runs can race on the same file and leave stale proof behind outside the test cleanup, so write this file under tmpDir or drop the file write.
    Confidence: 0.88
  • [P3] Restore formatter-clean indentation — src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts:129
    The const result line is over-indented relative to the surrounding test block, so the changed test is not in the repository's normal formatted shape. Run the repo formatter or fix the indentation in this hunk before relying on the lint/format gate.
    Confidence: 0.78

Overall correctness: patch is incorrect
Overall confidence: 0.84

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 06574920dd2d.

Label changes

Label justifications:

  • P1: The linked regression can make visible replies disappear after compaction and corrupt future agent context for real users.
  • merge-risk: 🚨 session-state: The PR changes successor transcript membership and compaction replay boundaries, which can lose or mis-associate session context if incorrect.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦞 diamond lobster and patch quality is 🦐 gold shrimp.
  • status: ⏳ waiting on author: ClawSweeper has contributor-facing work open and is waiting for author action. Sufficient (terminal): The PR body includes after-fix terminal/runtime proof for the exact successor-transcript tail-preservation logic, and the current head Real behavior proof check passed.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal/runtime proof for the exact successor-transcript tail-preservation logic, and the current head Real behavior proof check passed.
Evidence reviewed

PR surface:

Source +25, Tests +249. Total +274 across 3 files.

View PR surface stats
Area Files Added Removed Net
Source 1 31 6 +25
Tests 2 250 1 +249
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 3 281 7 +274

Acceptance criteria:

  • [P1] node scripts/run-vitest.mjs src/agents/embedded-agent-runner/prove-76729.e2e.test.ts.
  • [P1] node scripts/run-vitest.mjs src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts.
  • [P1] git diff --check.

What I checked:

Likely related people:

  • vincentkoc: Recent GitHub history and local blame touch the current successor-transcript builder on main, including a refactor of transcript rotation surfaces. (role: recent area contributor; confidence: medium; commits: 2ff1dfdebece, 2ca5b7c93e15; files: src/agents/embedded-agent-runner/compaction-successor-transcript.ts, src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts)
  • yetval: Authored the merged kept-tail duplicate-prompt fix and has an open adjacent PR in the same successor transcript builder, both relevant to sequencing this change. (role: recent adjacent contributor; confidence: high; commits: fa65b3270e85, 0aad450aabd6; files: src/agents/embedded-agent-runner/compaction-successor-transcript.ts, src/agents/embedded-agent-runner/compaction-successor-transcript.duplicate-prompt-loss.test.ts)
  • openperf: Authored the stale thinking-signature compaction replay fix that changed the same successor transcript module and tests. (role: recent adjacent contributor; confidence: medium; commits: 6c259af759a5; files: src/agents/embedded-agent-runner/compaction-successor-transcript.ts, src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts)
  • steipete: GitHub path history shows the agent runtime internalization and compaction successor timestamp/docs work in the central session and compaction paths. (role: feature-history owner; confidence: high; commits: bb46b79d3c14, 912f66317334, d07cce7bd166; files: src/agents/embedded-agent-runner/compaction-successor-transcript.ts, src/agents/embedded-agent-runner/compaction-successor-transcript.test.ts, packages/agent-core/src/harness/session/session.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

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 keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P1 High-priority user-facing bug, regression, or broken workflow. merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. labels Jun 19, 2026
LiuwqGit added a commit to LiuwqGit/openclaw that referenced this pull request Jun 19, 2026
openclaw#94720)

- Only apply effectiveCompaction when entry.id matches the latest
  compaction id, preventing older compaction rows from being
  duplicated/corrupted.
- Add repeated-compaction regression test verifying older compaction
  boundary is preserved and the preserved assistant appears in context.
@openclaw-barnacle openclaw-barnacle Bot added scripts Repository scripts size: M and removed size: S labels Jun 19, 2026
@LiuwqGit

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

The P1 finding (compaction substitution scoped to latest entry only) has been fixed in commit f4f4396. Added repeated-compaction regression test covering this scenario.

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@openclaw-barnacle openclaw-barnacle Bot removed the scripts Repository scripts label Jun 19, 2026
@LiuwqGit

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

All CI checks pass except this one. PR body updated with real behavior proof terminal output (see Real behavior proof section) showing the assistant reply is preserved:

@clawsweeper

clawsweeper Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@LiuwqGit

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

All CI checks pass except this one and a pre-existing tooling flake (plugin-prerelease-test-plan cacheKey). The proof test is now green (lint + typecheck + vitest all pass) and PR body has real terminal output.

@clawsweeper

clawsweeper Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

🦞🧹
ClawSweeper re-review requested.

I asked ClawSweeper to review this item again.
Action: item re-review queued (workflow sweep.yml, event repository_dispatch).
Result: the existing ClawSweeper review comment will be edited in place when the review finishes.

@LiuwqGit
LiuwqGit force-pushed the fix/issue-76729-preserve-assistant-boundary branch from 5122657 to f828f5f Compare June 20, 2026 00:52
LiuwqGit added a commit to LiuwqGit/openclaw that referenced this pull request Jun 20, 2026
openclaw#94720)

- Only apply effectiveCompaction when entry.id matches the latest
  compaction id, preventing older compaction rows from being
  duplicated/corrupted.
- Add repeated-compaction regression test verifying older compaction
  boundary is preserved and the preserved assistant appears in context.
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. labels Jun 20, 2026
@clawsweeper clawsweeper Bot added rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. rating: 🦪 silver shellfish Thin PR readiness signal; proof, validation, or implementation needs work. labels Jun 21, 2026
@LiuwqGit LiuwqGit closed this Jun 21, 2026
@LiuwqGit LiuwqGit reopened this Jun 21, 2026
LiuwqGit added a commit to LiuwqGit/openclaw that referenced this pull request Jun 23, 2026
openclaw#94720)

- Only apply effectiveCompaction when entry.id matches the latest
  compaction id, preventing older compaction rows from being
  duplicated/corrupted.
- Add repeated-compaction regression test verifying older compaction
  boundary is preserved and the preserved assistant appears in context.
@LiuwqGit
LiuwqGit force-pushed the fix/issue-76729-preserve-assistant-boundary branch from ba90af1 to da65e3d Compare June 23, 2026 13:55
@openclaw-barnacle openclaw-barnacle Bot added the scripts Repository scripts label Jun 23, 2026
LiuwqGit added 2 commits June 23, 2026 22:32
…openclaw#76729)

- Adjust firstKeptEntryId to the last assistant message immediately
  before it in buildSuccessorEntries, so the successor transcript
  keeps the conversational user → assistant turn structure.
- Use a modified compaction entry in the output to ensure
  buildSessionContext includes the preserved assistant.
- Skip non-context entries (model_change, thinking_level_change,
  session_info, custom, label) when scanning for the boundary.
- Fixes openclaw#76729 — Feishu replies disappearing after compaction rotation.
openclaw#94720)

- Only apply effectiveCompaction when entry.id matches the latest
  compaction id, preventing older compaction rows from being
  duplicated/corrupted.
- Add repeated-compaction regression test verifying older compaction
  boundary is preserved and the preserved assistant appears in context.
@LiuwqGit
LiuwqGit force-pushed the fix/issue-76729-preserve-assistant-boundary branch from da65e3d to e09e3b0 Compare June 23, 2026 14:33
@openclaw-barnacle openclaw-barnacle Bot added size: S and removed scripts Repository scripts size: M labels Jun 23, 2026
@LiuwqGit LiuwqGit closed this Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agents Agent runtime and tooling merge-risk: 🚨 session-state 🚨 May lose, corrupt, stale, or mis-associate session, agent, or context state. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. size: S status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feishu replies disappear from webchat after compaction rotation (buildSuccessorEntries drops assistant messages)

1 participant