Skip to content

fix(memory): close local embedding providers on timeout#83858

Closed
brokemac79 wants to merge 1 commit into
openclaw:mainfrom
brokemac79:fix/issue-83792-embedding-lifecycle
Closed

fix(memory): close local embedding providers on timeout#83858
brokemac79 wants to merge 1 commit into
openclaw:mainfrom
brokemac79:fix/issue-83792-embedding-lifecycle

Conversation

@brokemac79

@brokemac79 brokemac79 commented May 19, 2026

Copy link
Copy Markdown
Contributor

Fixes #83792

Summary

  • Adds an explicit close lifecycle to memory embedding providers, including local node-llama-cpp resources.
  • Aborts and disposes local embedding model/context startup when the provider is closed during or after initialization.
  • Adds scoped memory search/index teardown for one agent and wires Active Memory timeout cleanup through that runtime path.
  • Keeps QMD manager cooldown behavior intact when scoped teardown has no cached manager to close.
  • Guards cache cleanup so an old closing manager cannot evict a newer replacement manager after timeout teardown.

ClawSweeper guidance followed

  • Defines a memory embedding provider lifecycle for releasing local model mappings.
  • Wires Active Memory timeout behavior to scoped memory search/index cleanup.
  • Adds tests for local provider close/abort/dispose behavior and scoped manager teardown.
  • Addresses the cache ownership race noted in ClawSweeper review with a compare-and-delete guard and regression test.

Testing

  • node scripts/run-vitest.mjs packages/memory-host-sdk/src/host/embeddings.test.ts
  • node scripts/run-vitest.mjs extensions/active-memory/index.test.ts -t "releases memory search managers after active-memory timeouts"
  • node scripts/run-vitest.mjs extensions/memory-core/src/memory/index.test.ts -t "closes embedding providers|evicts scoped|retries embedding provider close"
  • node scripts/run-vitest.mjs extensions/memory-core/src/memory/search-manager.test.ts -t "qmd open-failure cooldown|requested agent"
  • node scripts/run-vitest.mjs src/plugin-sdk/memory-host-search.test.ts src/plugins/memory-runtime.test.ts extensions/memory-core/index.test.ts -t "scoped|runtime cleanup|lazy runtime"
  • tsgo core, extensions, package-test, and extension-test slices
  • Direct oxlint binary on touched core/package files and touched extension files
  • git diff --check
  • After the cache-race fix: focused memory-core Vitest, tsgo extensions + extension tests, direct oxlint on touched files, git diff --check

Real behavior proof

Behavior or issue addressed: Active Memory Telegram preflight on the reporter's live VPS should not retain a local node-llama-cpp/GGUF embedding model mapping after an Active Memory timeout.

Real environment tested: brokemac79's live OpenClaw VPS instance (polymarket-mc), Ubuntu user systemd service openclaw-gateway.service, OpenClaw 2026.5.18 package with this PR build deployed at head f932d646b33fcfe09be1c0dcbdfae3fb7351c6b4; Telegram group/topic IDs redacted; config had memorySearch.provider: "local" and plugins.slots.memory: "memory-core".

Exact steps or command run after this patch: Deployed the PR build to the live VPS package directory with root-owned plugin files, restarted openclaw-gateway.service, sent a Telegram message to @Ant_clawd_bot, then monitored the live gateway PID with ps, journalctl --user -u openclaw-gateway.service, and /proc/<pid>/maps for embeddinggemma|gguf|node-llama|Q8_0 for roughly five minutes after the timeout.

Evidence after fix:

PROOF_BASELINE_UTC=2026-05-19T02:12:37Z
PR_HEAD=f932d646b33fcfe09be1c0dcbdfae3fb7351c6b4
SERVICE=openclaw-gateway.service
PID 1610255 /usr/bin/node /usr/lib/node_modules/openclaw/dist/index.js gateway --port 18789
MAP_COUNT_BEFORE=0
CONFIG_MEMORY { "memorySearch": { "provider": "local" }, "pluginSlotMemory": "memory-core" }

LIVE_PROOF_MONITOR_START_UTC=2026-05-19T02:18:03Z PID=1610255
2026-05-19T02:17:35.490+00:00 [telegram] Inbound message telegram:group:<redacted-group>:topic:<redacted-topic> -> @Ant_clawd_bot (group, 58 chars)
2026-05-19T02:17:50.848+00:00 [plugins] active-memory: agent=main session=agent:main:telegram:group:<redacted-group>:topic:<redacted-topic> activeProvider=openai activeModel=gpt-5.5 start timeoutMs=5000 queryChars=58 searchQueryChars=58
2026-05-19T02:18:00.843+00:00 [plugins] [hooks] before_prompt_build handler from active-memory failed: timed out after 10000ms
2026-05-19T02:18:01.587+00:00 [plugins] active-memory: agent=main session=agent:main:telegram:group:<redacted-group>:topic:<redacted-topic> activeProvider=openai activeModel=gpt-5.5 done status=timeout elapsedMs=10008 summaryChars=0
PROBE 1 UTC=02:18:03 RSS_KB=718284 MAP_COUNT=0
PROBE 2 UTC=02:18:13 RSS_KB=735048 MAP_COUNT=0
PROBE 3 UTC=02:18:23 RSS_KB=583816 MAP_COUNT=0
...
PROBE 30 UTC=02:22:53 RSS_KB=603704 MAP_COUNT=0
LIVE_PROOF_MONITOR_END_UTC=2026-05-19T02:23:04Z PID=1610255 RSS_KB=595424 MAP_COUNT=0
FINAL_AFTER_UTC=2026-05-19T02:23:28Z PID=1610255 RSS_KB=603628 MAP_COUNT_AFTER=0
2026-05-19T02:18:45.996+00:00 [telegram] sendMessage ok chat=<redacted-chat> message=<redacted-message>

Observed result after fix: The live VPS reproduced the Active Memory timeout path from Telegram and still returned a Telegram reply. The process had zero matching GGUF/node-llama mappings before the run, during the timeout monitoring window, and in the final after snapshot (MAP_COUNT_AFTER=0), so the local embedding model mapping was not retained after the timeout.

Not tested: Long soak across many repeated Telegram topics, non-Linux hosts, every alternate memory provider, and a maintainer-run production package artifact. The proof above is from the reporter's live Linux VPS instance.

Note: the repo scripts/run-oxlint.mjs wrapper failed before lint on this Windows checkout because C:\Program Files\nodejs\node.exe was not shell-quoted while preparing extension boundary artifacts. Direct oxlint on the touched files passed.

@openclaw-barnacle openclaw-barnacle Bot added extensions: memory-core Extension: memory-core size: L triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

Codex review: passed.

Workflow note: Future ClawSweeper reviews update this same comment in place.

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.

Summary
The branch adds a close lifecycle for local memory embedding providers, exposes scoped memory search-manager cleanup through the SDK/runtime path, and runs that cleanup after Active Memory timeouts with focused regression tests.

Reproducibility: yes. with high confidence from source plus supplied live proof: current main lacks a provider close path, and the linked issue/PR logs show the 2026.5.18 Telegram Active Memory timeout retaining a local GGUF mapping that the PR head no longer retains.

PR rating
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Summary: Strong real proof and focused lifecycle tests make the PR likely mergeable, with readiness capped by the availability tradeoff from scoped timeout cleanup.

Rank-up moves:

  • none
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.

PR egg
✨ Hatched: 🥚 common Frosted Crabkin

        .--^^^^--.           
     .-'  o    o  '-.        
    /       \__/      \      
   |    /\  ____  /\   |     
   |   /  \/____\/  \  |     
    \  \_.------._/  /       
     '._  `----'  _.'        
        '-.____.-'           
       _/|_|  |_|\_          
      /__|      |__\         
       .-----------.         
      '-------------'        

Rarity: 🥚 common.
Trait: hums during re-review.
Share on X: post this hatch
Copy: My PR egg hatched a 🥚 common Frosted Crabkin in ClawSweeper.

What is this egg doing here?
  • Eggs appear after the PR passes real-behavior proof. It is here for vibes, not verdicts: it does not change labels, ratings, merge decisions, or automation.
  • The shell reacts to review momentum: open follow-up work warms it up, re-review makes it wobble, and a clean final review lets it hatch.
  • How to hatch it: reach status: 👀 ready for maintainer look or status: 🚀 automerge armed; that usually means sufficient real-behavior proof, no blocking P0/P1/P2 findings, no security attention needed, and clean correctness.
  • The hatch is seeded from this repository and PR number, so the same PR keeps the same creature; the reviewed head SHA can only change safe visual details.
  • Rarity is just collectible sparkle: 🥚 common, 🌱 uncommon, 💎 rare, ✨ glimmer, and 🌈 legendary.

Real behavior proof
Sufficient (logs): The PR body supplies redacted live VPS logs and /proc mapping checks for the Telegram timeout path, with additional gray-box native-resource/RSS verification in discussion comments.

Risk before merge
Why this matters: - Timeout cleanup intentionally evicts the affected agent's warm memory search/index manager, so the next memory search may cold-start and repeated timeout traffic may churn native model startup.

  • The real proof covers a Linux VPS Telegram timeout path and gray-box native-resource checks, but not long soak behavior, non-Linux hosts, or every alternate memory provider.

Maintainer options:

  1. Accept scoped timeout cleanup (recommended)
    Land after exact-head checks if reclaiming native local embedding mappings after timeouts is worth cold-starting that agent's memory manager on next use.
  2. Pause for broader lifecycle policy
    Pause only if maintainers want idle TTL, config-change eviction, or sub-agent removal cleanup included before accepting timeout-triggered eviction.

Next step before merge
No repair job is needed; the remaining action is exact-head CI/automerge gating and maintainer acceptance of the scoped cleanup availability tradeoff.

Security
Cleared: The virtual merge diff changes memory lifecycle code, typed SDK/runtime facades, and tests without adding dependencies, workflows, secret handling, install hooks, or broader code execution paths.

Review details

Best possible solution:

Land the scoped timeout cleanup after exact-head gates, and track broader idle-TTL, sub-agent removal, and config-change eviction policies separately if maintainers want them.

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

Yes, with high confidence from source plus supplied live proof: current main lacks a provider close path, and the linked issue/PR logs show the 2026.5.18 Telegram Active Memory timeout retaining a local GGUF mapping that the PR head no longer retains.

Is this the best way to solve the issue?

Yes. The provider close lifecycle plus scoped timeout teardown is the narrow maintainable fix boundary; broader idle or config-change cleanup is useful follow-up work rather than a blocker for this timeout leak.

Label justifications:

  • P2: The PR fixes a concrete retained native-memory bug with limited scope around memory-core and Active Memory timeout handling.
  • merge-risk: 🚨 availability: Merging changes timeout cleanup behavior so repeated timeouts can evict warm managers and increase local embedding startup churn.

What I checked:

  • Current main retains local embedding resources without a close lifecycle: On current main, createLocalEmbeddingProvider caches the Llama runtime, model, and embedding context but exposes only embedQuery/embedBatch methods, so callers have no provider-level way to dispose those resources after a timeout. (packages/memory-host-sdk/src/host/embeddings.ts:23, 1d77170a305b)
  • PR adds provider abort/dispose lifecycle: The virtual merge tree adds closed-state checks, abort signals for initialization, resource disposal for context/model/runtime, and an idempotent close method on the local embedding provider. (packages/memory-host-sdk/src/host/embeddings.ts:151, e437bd1621c1)
  • PR adds scoped manager teardown with ownership guard: The virtual merge tree adds closeMemoryIndexManagersForAgent and updates MemoryIndexManager.close to close the provider before and after pending sync, then delete the cache entry only if it still points at the closing manager. (extensions/memory-core/src/memory/manager.ts:89, e437bd1621c1)
  • PR wires timeout cleanup through Active Memory: Active Memory now resolves the live config, schedules scoped memory-search cleanup after timeout paths, and logs cleanup failures without blocking the reply path. (extensions/active-memory/index.ts:995, e437bd1621c1)
  • Regression tests cover provider close and scoped teardown: The PR adds tests for local provider disposal, abort during model/context initialization, manager close retry, scoped cache eviction without evicting a newer manager, QMD cooldown preservation, and the Active Memory timeout hook. (packages/memory-host-sdk/src/host/embeddings.test.ts:172, e437bd1621c1)
  • Dependency contract supports the chosen lifecycle shape: The upstream node-llama-cpp docs describe dispose as the resource-release mechanism, LlamaModelOptions includes loadSignal, and LlamaEmbeddingContextOptions includes createSignal, matching the PR's abort/dispose approach. (node-llama-cpp.withcat.ai)

Likely related people:

  • @steipete: Git blame and history show Peter Steinberger carrying the current memory host/manager code and recent memory embedding/provider refactors, including the memory host SDK move and provider-plugin extraction. (role: recent area contributor; confidence: high; commits: 59defa3e7159, eebce9e9c7cb, 77e6e4cf87f7; files: packages/memory-host-sdk/src/host/embeddings.ts, extensions/memory-core/src/memory/manager.ts, extensions/memory-core/src/memory/search-manager.ts)
  • @Takhoffman: Git history shows Tak Hoffman introduced the Active Memory plugin and made several later changes to its recall behavior, which is the timeout trigger path this PR changes. (role: feature owner; confidence: high; commits: b83726d13e33, f94d6778b1d5, 885209ed0330; files: extensions/active-memory/index.ts, extensions/active-memory/index.test.ts)
  • @vincentkoc: Git history shows repeated recent work in memory-core and memory-host SDK seams, including embedding adapter restoration and memory-core typing/seam repairs adjacent to the changed lifecycle code. (role: adjacent memory-core contributor; confidence: medium; commits: 37f449d7e189, 5342cc49b10f, 32eff914c67b; files: extensions/memory-core, packages/memory-host-sdk, src/plugin-sdk/memory-host-search.ts)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 1d77170a305b.

@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. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. labels May 19, 2026
@brokemac79 brokemac79 force-pushed the fix/issue-83792-embedding-lifecycle branch from a0e1021 to f932d64 Compare May 19, 2026 02:05
@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 19, 2026
@brokemac79

Copy link
Copy Markdown
Contributor Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented May 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.

Re-review progress:

@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 May 19, 2026
@hxy91819 hxy91819 self-requested a review May 19, 2026 03:07

@hxy91819 hxy91819 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.

Here is what I have dug on this PR tech background.

In OpenClaw's design, each sub-agent gets its own cached embedding model instance (via MemoryIndexManager / QMD manager) for memory search. When a sub-agent's memory search times out, the local node-llama-cpp model's VRAM/RSS was never released — even if that sub-agent never does another memory search, the resources stay allocated for the lifetime of the process. The existing closeAll* path only runs at process shutdown, so during runtime memory only grows. This PR adds a runtime release path by wiring provider.close() through a scoped teardown chain triggered on timeout.

Trade-off acknowledged: After timeout, the cache entry is evicted alongside the resources, so the next memory search for that agent cold-starts the model. This is acceptable because a timeout already signals something is wrong (model too large, machine too slow), and retaining potentially failing resources can worsen the problem. Cold start costs seconds; OOM is fatal. If smoother reactivation is needed later, an idle-TTL strategy can layer on top of the close() infrastructure this PR adds, without further changes to the provider lifecycle.

@hxy91819

Copy link
Copy Markdown
Member

Reviewed this PR in depth. The lifecycle and scoped teardown approach is sound — this is standard practice for native resource management (close/abort/dispose, ownership guards, scoped teardown vs global shutdown).

One area for future follow-up: The current trigger paths for resource release are timeout and process shutdown. There are additional lifecycle events that could also warrant cleanup, but these are not blockers for this PR:

  1. Idle TTL release — most systems use idle timeout or reference-count-zero to trigger release rather than only on search timeout. An idle TTL would let the model stay warm for likely reuse while still reclaiming resources from inactive agents. The close() infrastructure this PR adds makes this a policy-layer change only — no further provider lifecycle changes needed.

  2. Sub-agent removal — when a sub-agent is removed from the config, its cached model instance has no release path. Only closeAll* (process shutdown) and timeout trigger cleanup today. A hook on agent lifecycle end would close this gap.

  3. Config-change cache eviction — changing an agent's memorySearch config (model, provider, parameters) changes the cache key. The old key's manager gets replaced but not closed, leaving stale resources allocated. A "new key replaces old key → close old manager" path would address this.

None of these block this PR. The close() / scoped teardown infrastructure this PR adds is the prerequisite for all of them.

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 19, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 19, 2026
@hxy91819

Copy link
Copy Markdown
Member

Gray-box verification report

Ran two manual gray-box smoke suites against both main and this PR branch. Both import real source via tsx (no mocking), exercising real node-llama-cpp native resources and RSS measurement.

Layer 1: EmbeddingProvider.close() lifecycle

scripts/smoke/memory-provider-close.mjs (in openclaw-e2e-go)

Metric main PR
provider.close method undefined function
First embedQuery RSS gain +451 MB +454 MB
After close() RSS release N/A -317 MB
close() idempotent N/A
embedQuery after close N/A "Local embedding provider has been closed"

Layers 2–4: Manager + scoped teardown + facade chain

scripts/smoke/memory-lifecycle-graybox.mjs (in openclaw-e2e-go)

Layer What's tested PR main
L2 MemoryIndexManager.close() resolves + idempotent
L3 closeMemorySearchManager({ agentId }) — one agent closed, others untouched ❌ API nonexistent
L4 closeActiveMemorySearchManager facade chain resolves ❌ API nonexistent

What this proves

  1. Native memory is actually released — real RSS measurement shows disposeResources([context, model, llama]) frees ~317 MB.
  2. Layers 3–4 don't exist on main — the scoped teardown and facade APIs are entirely new, and their absence on main correctly reproduces the original leak path.
  3. Manager lifecycle is healthyclose() resolves and is idempotent on both branches.

Combined with the existing 16 unit tests (which cover INDEX_CACHE guard, QMD manager path, and active-memory timeout trigger chain), the fix is well-verified.

Scripts

Located at openclaw-e2e-go/scripts/smoke/:

  • memory-provider-close.mjs — Layer 1 (requires node-llama-cpp installed)
  • memory-lifecycle-graybox.mjs — Layers 2–4 (no native deps needed)
  • REPORT-PR83858.md — full report with coverage matrix

@hxy91819 hxy91819 requested a review from a team as a code owner May 19, 2026 07:10
@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation channel: discord Channel integration: discord channel: mattermost Channel integration: mattermost channel: telegram Channel integration: telegram labels May 19, 2026
@openclaw-barnacle openclaw-barnacle Bot added size: L and removed channel: telegram Channel integration: telegram channel: whatsapp-web Channel integration: whatsapp-web app: android App: android app: macos App: macos app: web-ui App: web-ui gateway Gateway runtime extensions: memory-lancedb Extension: memory-lancedb cli CLI command changes scripts Repository scripts commands Command implementations docker Docker and sandbox tooling agents Agent runtime and tooling channel: feishu Channel integration: feishu extensions: deepseek extensions: codex extensions: xai proof: sufficient ClawSweeper judged the real behavior proof convincing. size: XL labels May 19, 2026
@hxy91819 hxy91819 force-pushed the fix/issue-83792-embedding-lifecycle branch from 83baa18 to f932d64 Compare May 19, 2026 07:39
@hxy91819

Copy link
Copy Markdown
Member

/clawsweeper re-review

@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 19, 2026
@hxy91819

Copy link
Copy Markdown
Member

/clawsweeper automerge

@clawsweeper clawsweeper Bot added the clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge label May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

🦞🔧
ClawSweeper saw the passing review, but the PR needs another repair pass before merge.

Source: clawsweeper[bot]
Feedback: structured ClawSweeper verdict: pass (sha=f932d646b33fcfe09be1c0dcbdfae3fb7351c6b4); CHANGELOG.md entry is required before automerge; dispatch a focused changelog repair
Action: repair worker queued. Run: https://github.com/openclaw/clawsweeper/actions/runs/26083970435
Model: gpt-5.5

I will update this PR branch, or open a safe credited replacement, if the repair worker finds a narrow CI fix.

Automerge progress:

  • 2026-05-19 07:51:10 UTC review queued f932d646b33f (queued)
  • 2026-05-19 08:06:45 UTC review passed f932d646b33f (structured ClawSweeper verdict: pass (sha=f932d646b33fcfe09be1c0dcbdfae3fb7351c...)

@clawsweeper clawsweeper Bot added status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane. and removed status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels May 19, 2026
@clawsweeper

clawsweeper Bot commented May 19, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper 🐠 reef update

Thanks for the work here. ClawSweeper could not write to the source branch, so it opened a replacement PR rather than letting the fix drift. attribution still points back here.

Why replacement: ClawSweeper could not update the source PR branch directly; GitHub did not grant sufficient push rights to the bot for that branch.
Replacement PR: #84048
Why close: this run explicitly closes the superseded source PR after the credited replacement PR is open, so review continues in one place.
Closing this one because the run was configured to close superseded source PRs after opening the replacement.
Contributor credit is carried into the replacement PR body and changelog plan.
Co-author credit kept:

fish notes: model gpt-5.5, reasoning high; reviewed against 70e7256.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clawsweeper:automerge Maintainer opted this PR into bounded ClawSweeper-reviewed automerge extensions: memory-core Extension: memory-core merge-risk: 🚨 availability 🚨 May cause crashes, hangs, restart loops, stalls, or process outages. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: L status: 🚀 automerge armed This PR is in ClawSweeper's automerge lane.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Active Memory Telegram preflight retains local embedding model mapping after timeout

2 participants