Skip to content

fix(agents): keep auto-compaction on the live session model (#95696)#95713

Merged
steipete merged 1 commit into
openclaw:mainfrom
0xghost42:fix/95696-compaction-live-model-override
Jul 21, 2026
Merged

fix(agents): keep auto-compaction on the live session model (#95696)#95713
steipete merged 1 commit into
openclaw:mainfrom
0xghost42:fix/95696-compaction-live-model-override

Conversation

@0xghost42

@0xghost42 0xghost42 commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Fixes #95696. After a mid-session /model switch, the UI shows the new model and normal turns use it, but auto-compaction (timeout or overflow recovery) reverted to the model that was active when the run started. After a cross-provider switch it also kept the run-start auth profile, which would pair the newly selected provider with the previous provider's credentials.

Why This Change Was Made

The auto-compaction sites in src/agents/embedded-agent-runner/run.ts fed the run-start-resolved provider/modelId and lastProfileId into buildEmbeddedCompactionRuntimeContext. The run loop already resolves the current selection one block earlier as requestedSelection = shouldSwitchToLiveModel(...) (the restart check). When a switch is pending but the attempt cannot restart in place, it falls through to compaction.

This reuses that already-resolved selection for the compaction provider/model, and now for the auth profile too:

  • provider/modelId fall back to the run-start values when no switch is pending.
  • authProfileId uses the switch's pinned profile when present; otherwise the run-start profile is kept only when the provider is unchanged, and dropped on a cross-provider switch so compaction resolves the new provider's own credentials instead of sending stale ones.

No new store read is added on the path; it reuses the prepared selection the loop already computed (carry-forward of a prepared fact, per the agents hot-path guidance).

User Impact

After switching models with /model, compaction now uses the model you selected and the matching credentials. No behavior change when no switch is pending.

Evidence

  • Behavior addressed: Auto-compaction used the stale run-start model and, after a cross-provider switch, the stale run-start auth profile, instead of the live /model selection persisted in the session store.
  • Real environment tested: Vitest against the real shouldSwitchToLiveModel + buildEmbeddedCompactionRuntimeContext modules (only the session-store I/O and the registry-validating model-ref resolver are mocked, at the same boundary live-model-switch.test.ts uses). File src/agents/embedded-agent-runner/compaction-live-model-override.test.ts.
  • Exact steps or command run after this patch: node scripts/run-vitest.mjs src/agents/embedded-agent-runner/compaction-live-model-override.test.ts; ./node_modules/.bin/oxlint --type-aware src/agents/embedded-agent-runner/run.ts src/agents/embedded-agent-runner/compaction-live-model-override.test.ts; ./node_modules/.bin/oxfmt --write.
  • Evidence after fix:
    • Persisted override (liveModelSwitchPending + providerOverride: openai / modelOverride: gpt-5.5) over a run-start anthropic / sonnet-4.6 resolves the compaction context to provider: openai, model: gpt-5.5.
    • A cross-provider switch pinning authProfileOverride: openai:p1 resolves compaction authProfileId: openai:p1 (not the run-start anthropic:default).
    • A cross-provider switch with no pinned profile resolves compaction authProfileId to something other than the stale anthropic:default (the new provider's default).
    • With no override persisted, provider/model and the auth profile stay run-start (authProfileId retained when the provider is unchanged).
  • Observed result after fix: 4 passed. oxlint exit 0, format clean.
  • What was not tested: A full live multi-provider gateway session driving real timeout/overflow compaction end-to-end (no local multi-provider credentials). The regression test drives the exact composition the run loop uses at both compaction sites. Per the AGENTS.md maintainer skip clause, requesting maintainer skip / Crabbox if live multi-provider proof is required.

@clawsweeper

clawsweeper Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 9, 2026, 5:03 AM ET / 09:03 UTC.

Summary
The PR threads pending live-session /model provider, model, and auth profile selection into timeout and overflow compaction runtime context and adds regression coverage for that composition.

PR surface: Source +25, Tests +168. Total +193 across 2 files.

Reproducibility: yes. Source inspection shows /model sets liveModelSwitchPending, current main reads the pending selection but still passes stale run-start provider/model/auth into compaction when the attempt cannot restart, and the PR proof exercises that exact composition with a pre-fix negative control.

Review metrics: 2 noteworthy metrics.

  • Compaction routing call sites: 2 changed. Both timeout and overflow compaction now inherit pending live model selection, so maintainers should review both paths together.
  • Auth-profile selection rule: 1 added. The PR adds a cross-provider auth-profile rule, which is the merge-sensitive provider routing surface.

Merge readiness
Overall: 🦞 diamond lobster
Proof: 🦞 diamond lobster
Patch quality: 🦞 diamond lobster
Result: ready for maintainer review.

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

Risk before merge

  • [P2] The patch changes which provider/model/auth profile compaction uses after a pending live model switch; focused source and terminal proof cover the composition, but there is no full live multi-provider timeout/overflow capture.

Maintainer options:

  1. Accept the live-switch auth routing change (recommended)
    Land after maintainer review accepts that compaction follows the pending live selection and drops stale cross-provider auth profiles.
  2. Request full live multi-provider proof
    Ask for a timeout or overflow compaction capture with real provider credentials if maintainers want end-to-end evidence before merge.

Next step before merge

  • No new ClawSweeper repair lane is needed because the open PR already contains the focused candidate fix; the remaining path is normal maintainer review and merge handling.

Security
Cleared: Security review cleared: the diff touches TypeScript runtime/test code only and adds no dependency, workflow, package-resolution, secret-handling, or supply-chain surface.

Review details

Best possible solution:

Land this focused compaction-context repair after normal maintainer review of the provider/auth routing change, and keep #101676 as separate follow-up for mid-attempt retry behavior.

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

Yes. Source inspection shows /model sets liveModelSwitchPending, current main reads the pending selection but still passes stale run-start provider/model/auth into compaction when the attempt cannot restart, and the PR proof exercises that exact composition with a pre-fix negative control.

Is this the best way to solve the issue?

Yes. This is the best narrow fix for #95696 because it reuses the already-resolved live selection at the two compaction caller sites; the model-selection-only PR is incomplete and #101676 is an adjacent fallback-boundary issue.

AGENTS.md: found and applied where relevant.

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

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. Sufficient terminal proof: the PR includes focused after-fix test output and a comment with a real on-disk session-store repro plus pre-fix negative control for the production composition.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): Sufficient terminal proof: the PR includes focused after-fix test output and a comment with a real on-disk session-store repro plus pre-fix negative control for the production composition.

Label justifications:

  • P1: The linked bug affects real agent sessions by silently routing compaction to the wrong provider/model after a user model switch.
  • merge-risk: 🚨 auth-provider: Merging changes the provider/model/auth profile passed to compaction after live model switches, which can affect credential and provider routing.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): Sufficient terminal proof: the PR includes focused after-fix test output and a comment with a real on-disk session-store repro plus pre-fix negative control for the production composition.
  • proof: sufficient: Contributor real behavior proof is sufficient. Sufficient terminal proof: the PR includes focused after-fix test output and a comment with a real on-disk session-store repro plus pre-fix negative control for the production composition.
Evidence reviewed

PR surface:

Source +25, Tests +168. Total +193 across 2 files.

View PR surface stats
Area Files Added Removed Net
Source 1 31 6 +25
Tests 1 168 0 +168
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 2 199 6 +193

What I checked:

Likely related people:

  • steipete: Authored multiple recent live model switch and selected session model resolution commits that define the pending-switch behavior this PR consumes. (role: recent area contributor; confidence: high; commits: 7dd196ed740a, e4ea3c03cf02, 1fb44f0aadd4; files: src/agents/live-model-switch.ts, src/auto-reply/reply/model-selection.ts, src/agents/embedded-agent-runner/run.ts)
  • kiranvk2011: Authored the explicit live model switch pending flag work that lets the runner detect persisted /model switch state. (role: live-switch flag contributor; confidence: medium; commits: 251e086eacbd; files: src/agents/live-model-switch.ts, src/agents/embedded-agent-runner/run.ts)
  • vincentkoc: Authored adjacent live model switch fallback redirect work and is connected to the broader live-switch/provider-routing boundary. (role: adjacent fallback contributor; confidence: medium; commits: 43a003b8a062; files: src/agents/model-fallback.ts, src/agents/embedded-agent-runner/run.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.
Review history (1 earlier review cycle)
  • reviewed 2026-06-26T13:10:15.714Z sha e9fd14f :: needs maintainer review before merge. :: none

@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: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 22, 2026
@0xghost42

Copy link
Copy Markdown
Contributor Author

@vincentkoc ready for review when you have a moment. Closes #95696. The single failing check (checks-node-compact-small-whole-2) is an unrelated flake: it fails on runtime-config > does not reuse same-turn auto-enable results in src/config/plugins, while this PR only touches src/agents/embedded-agent-runner/{run.ts,compaction-live-model-override.test.ts}. A re-run should clear it.

@wangmiao0668000666

Copy link
Copy Markdown
Contributor

Great design — the "reuse requestedSelection already computed by the run loop" choice avoids adding a new store read and keeps the change to 2 lines at the 2 sites. The regression test coverage is comprehensive (override present → uses it, no override → run-start, persistence flag scope).

I had a few spare minutes, so I wrote a real-environment repro at scripts/repro/issue-95696-compaction-model-override.mjs (see the file below or in the repo). It runs the production shouldSwitchToLiveModel + buildEmbeddedCompactionRuntimeContext end-to-end against a real on-disk session store, and uses 4 assertions to prove the fix shape — including a negative control that exercises the pre-fix wiring to show the bug:

$ pnpm exec tsx scripts/repro/issue-95696-compaction-model-override.mjs
=== Reproduction for #95696 — compaction honors live /model override ===
PASS  post-fix + live override: compaction provider=openai, model=gpt-5.5 (overrides run-start anthropic/sonnet-4.6)
PASS  pre-fix + live override: compaction provider=anthropic, model=sonnet-4.6 (this is the bug — pre-fix wiring never reads requestedSelection)
PASS  post-fix + no override: compaction provider=anthropic, model=sonnet-4.6 (run-start fallback)
PASS  negative control: same on-disk override ignored when cfg.session.store is unset (run-start fallback)
=== All repro assertions passed ===

The interesting assertion is #2: with the pre-fix wiring (buildEmbeddedCompactionRuntimeContext({ provider: RUN_START_PROVIDER, modelId: RUN_START_MODEL })), the override is silently dropped — which is exactly the bug #95696 reports. After the patch, assertion #1 proves the override is honored. This gives ClawSweeper the "real behavior proof" it asked for in the previous review (needs real behavior proof before merge).

If you'd like to land it, the cleanest way is to copy the script into this branch and reference it from the PR body's "Real behavior proof" section — that should be enough to flip ClawSweeper from 🧂 → 🐚 and unblock maintainer review. Happy to send a follow-up commit if it's useful.

#!/usr/bin/env node
// scripts/repro/issue-95696-compaction-model-override.mjs
import assert from "node:assert/strict";
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { shouldSwitchToLiveModel } from "../../src/agents/live-model-switch.ts";
import { buildEmbeddedCompactionRuntimeContext } from "../../src/agents/embedded-agent-runner/compaction-runtime-context.ts";

const RUN_START_PROVIDER = "anthropic";
const RUN_START_MODEL = "sonnet-4.6";
const SESSION_KEY = "agent:main:dm:repro-95696";

async function writeSessionStoreWithOverride(storePath, { withOverride }) {
  const entry = withOverride
    ? { sessionId: "repro-session", liveModelSwitchPending: true, providerOverride: "openai", modelOverride: "gpt-5.5", modelOverrideSource: "user", updatedAt: Date.now() }
    : { sessionId: "repro-session", updatedAt: Date.now() };
  await fs.mkdir(path.dirname(storePath), { recursive: true });
  await fs.writeFile(storePath, JSON.stringify({ [SESSION_KEY]: entry }, null, 2), "utf8");
}

function resolvePostFixTarget(cfg) {
  const requestedSelection = shouldSwitchToLiveModel({
    cfg, sessionKey: SESSION_KEY,
    defaultProvider: RUN_START_PROVIDER, defaultModel: RUN_START_MODEL,
    currentProvider: RUN_START_PROVIDER, currentModel: RUN_START_MODEL,
  });
  const compactionProvider = requestedSelection?.provider ?? RUN_START_PROVIDER;
  const compactionModelId = requestedSelection?.model ?? RUN_START_MODEL;
  return buildEmbeddedCompactionRuntimeContext({
    sessionKey: SESSION_KEY, workspaceDir: "/tmp/repro-ws", agentDir: "/tmp/repro-agent",
    provider: compactionProvider, modelId: compactionModelId,
  });
}

function resolvePreFixTarget() {
  return buildEmbeddedCompactionRuntimeContext({
    sessionKey: SESSION_KEY, workspaceDir: "/tmp/repro-ws", agentDir: "/tmp/repro-agent",
    provider: RUN_START_PROVIDER, modelId: RUN_START_MODEL,
  });
}

async function main() {
  const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-repro-95696-"));
  const storePath = path.join(tmpDir, "sessions.json");
  const cfg = { session: { store: storePath } };
  try {
    await writeSessionStoreWithOverride(storePath, { withOverride: true });
    const a = resolvePostFixTarget(cfg);
    assert.equal(a.provider, "openai"); assert.equal(a.model, "gpt-5.5");
    const b = resolvePreFixTarget();
    assert.equal(b.provider, RUN_START_PROVIDER); assert.equal(b.model, RUN_START_MODEL);
    await writeSessionStoreWithOverride(storePath, { withOverride: false });
    const c = resolvePostFixTarget(cfg);
    assert.equal(c.provider, RUN_START_PROVIDER); assert.equal(c.model, RUN_START_MODEL);
    await writeSessionStoreWithOverride(storePath, { withOverride: true });
    const d = resolvePostFixTarget({});
    assert.equal(d.provider, RUN_START_PROVIDER); assert.equal(d.model, RUN_START_MODEL);
    console.log("=== All repro assertions passed ===");
  } finally {
    await fs.rm(tmpDir, { recursive: true, force: true });
  }
}
main().catch((err) => { console.error(err); process.exit(1); });

@0xghost42

Copy link
Copy Markdown
Contributor Author

Addressed the [P1] auth-pairing finding. Both compaction sites in run.ts now thread requestedSelection.authProfileId: a profile pinned by the switch wins, and the run-start profile is dropped on a cross-provider switch so compaction resolves the new provider's own credentials instead of pairing it with stale ones. compaction-live-model-override.test.ts adds the cross-provider cases (pinned profile honored, stale run-start profile dropped, run-start retained when the provider is unchanged); 4 pass, oxlint and oxfmt clean.

Live multi-provider timeout/overflow compaction is unreachable locally (no multi-provider credentials), so the auth invariant is proven through the real shouldSwitchToLiveModel + buildEmbeddedCompactionRuntimeContext composition rather than a live session. Flagging the AGENTS.md skip clause / Crabbox if live proof is required.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Jun 25, 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.

@clawsweeper clawsweeper Bot removed the merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. label Jun 25, 2026
@0xghost42
0xghost42 force-pushed the fix/95696-compaction-live-model-override branch from 81bb38e to e9fd14f Compare June 26, 2026 11:41
@0xghost42

Copy link
Copy Markdown
Contributor Author

Rebased onto main: the dependency-guard red was the stale-branch (rebase-needed) gate and is now green. No other failures — compaction-live-model-override.test.ts passes 4/4 locally (incl. the cross-provider auth-pairing cases) and tsgo:core:test is clean. MERGEABLE. @vincentkoc happy to add a live multi-provider /model-switch capture under the AGENTS skip-clause if that helps the review.

@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. labels Jun 26, 2026
@0xghost42
0xghost42 force-pushed the fix/95696-compaction-live-model-override branch from e9fd14f to 0470aa6 Compare July 9, 2026 07:42
@clawsweeper clawsweeper Bot removed 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. labels Jul 9, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jul 9, 2026
@steipete steipete self-assigned this Jul 21, 2026
@steipete
steipete force-pushed the fix/95696-compaction-live-model-override branch from 0470aa6 to cac3a45 Compare July 21, 2026 07:00
@steipete
steipete force-pushed the fix/95696-compaction-live-model-override branch from cac3a45 to 188363e Compare July 21, 2026 07:05
@clawsweeper

clawsweeper Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(agents): keep auto-compaction on the live session model (#95696) This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete force-pushed the fix/95696-compaction-live-model-override branch from 188363e to 01141d6 Compare July 21, 2026 07:14
@clawsweeper

clawsweeper Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: fix(agents): keep auto-compaction on the live session model (#95696) This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete merged commit eeb7205 into openclaw:main Jul 21, 2026
117 checks passed
@steipete

Copy link
Copy Markdown
Contributor

Merged via squash.

vincentkoc added a commit that referenced this pull request Jul 21, 2026
* origin/main: (24 commits)
  fix(agents): keep compaction on live session model (#95713)
  fix(plugin-sdk): guard provider catalog live URL parsing against malformed responses (#109986)
  chore(cli): drop dead classifiers and single-use wrappers left by fallback removal (#112191)
  feat(ui): expand the lobster pet's random universe (#112073)
  chore(ci): audit dependency fingerprint exports (#112190)
  fix(ui): preserve graphemes in provider icons (#109509)
  fix(ui): align settings search with navigation rows (#112172)
  fix(agents): allow configless gateway rebind to activate standalone owner (#111841)
  fix(secrets): register secret targets for installed-origin plugins (#104347)
  improve(ui): show real machine identity in the place picker (#112162)
  fix: webChat scrollback history is too limited — older assistant replies and tool outputs disappear when scrolling… (#104250)
  test(ui): run DOM-free suites in Node (#112031)
  feat(nodes): make computer.act eligibility capability-based for desktop nodes (#112107)
  fix(apps): harden mobile gateway and watch state
  fix(ci): restore Z.AI API Platform validation (#112171)
  fix(ui): prevent Logs controls from overlapping (#112170)
  fix #95291: message tool fails to deliver files/images on Feishu (400 volc-dcdn / write ECONNRESET) while same Lark SDK upload succeeds standalone (#95514)
  refactor(cli)!: remove automatic gateway→embedded fallback from openclaw agent (#112074)
  refactor: move provider transports into packages/ai behind a typed host port (#111669)
  fix(anthropic): complete transcript reverse-scan windows across short reads (#109431)
  ...
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 22, 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: 🚨 auth-provider 🚨 May break OAuth, tokens, provider routing, model choice, or credentials. P1 High-priority user-facing bug, regression, or broken workflow. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. size: S status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Compaction resets session model override to previous provider

3 participants