Date: 14 February 2026 Updated: 15 February 2026 — expanded to top 10 clusters with fix verification
This report identifies clusters of duplicate open PRs in the OpenClaw repository, generated using the openclaw-tracker project. PR descriptions were standardized via Gemini, embedded with Voyage-4-Large, and clustered using MongoDB Atlas Vector Search with a cosine similarity threshold of 0.90, filtered to open PRs only.
| Metric | Value |
|---|---|
| Open PRs analyzed | 2,959 |
| Duplicate clusters found | 35 |
| Top clusters reported | 10 |
| Already fixed in main | 5 of 10 (28 PRs safe to close) |
| Still need a merge | 5 clusters (17 PRs, pick 1 each) |
| # | Bug | Size | Status | Action |
|---|---|---|---|---|
| 1 | Orphan tool_result corruption | 10 PRs | ✅ Fixed (#7473) | Close all 10 |
| 2 | Slug generator hardcoded model | 5 PRs | ❌ Unfixed | Merge 1, close 4 |
| 3 | Compaction ctx.model undefined | 5 PRs | ❌ Unfixed | Merge 1, close 4 |
| 4 | Telegram polling silent exit | 5 PRs | ✅ Fixed (#7466) | Close all 5 |
| 5 | Audio misdetected as UTF-16 | 5 PRs | ✅ Fixed (#7475) | Close all 5 |
| 6 | Slack threadId ignored on read | 5 PRs | ✅ Fixed (#7610) | Close all 5 |
| 7 | WhatsApp group media allowlist | 3 PRs | ❌ Unfixed | Merge 1, close 2 |
| 8 | Telegram DM topic thread routing | 3 PRs | ✅ Fixed (#7235) | Close all 3 |
| 9 | Docker ARM64 image tagging | 3 PRs | ❌ Unfixed | Merge 1, close 2 |
| 10 | Gemini CLI auth path on Windows | 3 PRs | ❌ Unfixed | Merge 1, close 2 |
Total: 28 PRs safe to close immediately. 5 bugs still need one merge each (pick best, close rest = 12 more closeable).
✅ ALREADY FIXED — #7473 merged 2 Feb 2026 by justinhuangcode
"Agents: repair malformed tool calls and session files"
All 10 PRs below can be closed as duplicates.
Theme: Streaming errors during tool calls corrupt session history with orphan tool_result entries, causing permanent session breakage. All 10 PRs independently fix the same root cause in session-transcript-repair.ts.
Components: agents, memory
| PR | Title | Author | Date |
|---|---|---|---|
| #3125 | fix: prevent orphan tool_result errors from streaming failures | snejati86 | 2026-01-28 |
| #3194 | fix: skip incomplete tool calls in transcript repair [AI-assisted] | koriyoshi2041 | 2026-01-28 |
| #3622 | fix(agents): drop orphan tool results | mickobizzle | 2026-01-28 |
| #3880 | fix: drop assistant messages with stopReason 'error' | SalimBinYousuf1 | 2026-01-29 |
| #4476 | fix: skip tool calls from aborted assistant messages in transcript repair | kira-ariaki | 2026-01-30 |
| #4516 | fix: drop errored assistant tool calls and their orphan tool_results | chesterbella | 2026-01-30 |
| #4844 | fix(agents): skip error/aborted assistant messages in transcript repair | lailoo | 2026-01-30 |
| #5822 | fix: skip incomplete tool calls with partialJson in session repair | Alfa-ccvs-tech | 2026-02-01 |
| #6687 | fix(session-repair): strip malformed tool_use blocks | NSEvent | 2026-02-01 |
| #7525 | Agents: skip errored tool calls during pairing | justinhuangcode | 2026-02-02 |
Theme: LLM slug generator ignores configured default model, falls back to hardcoded Anthropic, breaking non-Anthropic setups.
Components: hooks, agents, config
| PR | Title | Author | Date |
|---|---|---|---|
| #4793 | hooks: use configured model for slug generator | yoyooyooo | 2026-01-30 |
| #5129 | fix(hooks): use configured default model for session slugs | royisme | 2026-01-31 |
| #5601 | fix: use configured model in llm-slug-generator instead of hardcoded defaults | SalimBinYousuf1 | 2026-01-31 |
| #5945 | fix: use configured model for slug generator (AI-assisted) | HEDELKA | 2026-02-01 |
| #6860 | fix(hooks): use agent default model for slug generation | freshman-db | 2026-02-02 |
Theme: Compaction safeguard fails silently when ctx.model is undefined, producing empty summaries and discarding conversation history.
Components: agents, memory
| PR | Title | Author | Date |
|---|---|---|---|
| #3109 | fix(compaction): resolve model via runtime when ctx.model is undefined | bonald | 2026-01-28 |
| #4223 | fix: compaction safeguard falls through when ctx.model is unavailable | hanxiao | 2026-01-29 |
| #4572 | fix(agents): provide model fallback for compaction safeguard extension | HirokiKobayashi-R | 2026-01-30 |
| #5005 | fix(agents): load compaction-safeguard extension to fix ctx.model undefined | Diaspar4u | 2026-01-30 |
| #6108 | Fix compaction producing empty summary when ctx.model is undefined | GangEunzzang | 2026-02-01 |
✅ ALREADY FIXED — #7466 merged 2 Feb 2026 by macmimi23
"fix(telegram): recover from grammY 'timed out' long-poll errors"
All 5 PRs below can be closed as duplicates.
Theme: grammY runner exits silently on getUpdates timeout without auto-restart. All fixes add exponential backoff and recoverable error detection.
Components: telegram
| PR | Title | Author | Date |
|---|---|---|---|
| #5437 | Fix Telegram polling to restart on clean stop (AI-assisted) | sdntsng | 2026-01-31 |
| #5561 | fix(telegram): auto-restart on timeout + lower API timeout to 60s | jesseproudman | 2026-01-31 |
| #5745 | fix(telegram): recognize 'timed out' errors as recoverable | adambregenzer | 2026-01-31 |
| #6447 | fix(telegram): auto-restart polling when grammY runner exits silently | AugmentAdvertise | 2026-02-01 |
| #6463 | fix(telegram): improve timeout handling and prevent channel exits | ai-fanatic | 2026-02-01 |
✅ ALREADY FIXED — #7475 merged 2 Feb 2026 by AlexZhangji
"fix: skip audio files from text extraction to prevent binary processing"
All 5 PRs below can be closed as duplicates.
Theme: Binary audio files (OGG voice messages from Telegram) incorrectly detected as UTF-16 text due to null byte density, injecting garbage into context.
Components: media-understanding
| PR | Title | Author | Date |
|---|---|---|---|
| #4235 | fix(media): skip audio in extractFileBlocks + hasBinaryAudioMagic defense-in-depth | null-runner | 2026-01-29 |
| #5281 | fix: skip audio files by extension in extractFileBlocks | kirkluokun | 2026-01-31 |
| #5427 | fix: skip audio attachments before buffer analysis | mariopaglia | 2026-01-31 |
| #5588 | fix(media): skip binary audio in file extraction to prevent false UTF-16 detection | NSEvent | 2026-01-31 |
| #7454 | fix: skip UTF-16 heuristic for audio/video/image MIME types | gavinbmoore | 2026-02-02 |
✅ ALREADY FIXED — #7610 merged 13 Feb 2026 by harhogefoo
"fix(slack): populate thread session with existing thread history"
All 5 PRs below can be closed as duplicates.
Theme: Slack plugin's read action ignores the threadId parameter, so thread-aware replies fail to retrieve thread context.
Components: slack
| PR | Title | Author | Date |
|---|---|---|---|
| #3743 | fix(slack): pass toolContext to read action for thread reply support | tumf | 2026-01-29 |
| #4089 | fix(slack): pass threadId param in message read action | mihar | 2026-01-29 |
| #5098 | fix(slack): forward threadId for message.read | galligan | 2026-01-31 |
| #5514 | Slack: fix threadId ignored on read + thread_broadcast dropped | SanderHelgesen | 2026-01-31 |
| #6509 | fix(slack): pass threadId param in read action | morningstar-daemon | 2026-02-01 |
Theme: Media from allowlisted WhatsApp groups is rejected because group JIDs aren't matched against the groupAllowFrom allowlist correctly.
Components: whatsapp, gateway, config
| PR | Title | Author | Date |
|---|---|---|---|
| #4390 | fix(whatsapp): allow media from allowlisted groups | Sarang19114 | 2026-01-30 |
| #5665 | fix: match group JIDs in groupAllowFrom allowlist | koala73 | 2026-01-31 |
| #6567 | fix: include paired users in WhatsApp group sender allowlist | giannisanni | 2026-02-01 |
✅ ALREADY FIXED — #7235 merged 5 Feb 2026 by Lukavyi
"🔴 FIX: Telegram DM Topics — auto-inject threadId in message tool & subagent announce"
All 3 PRs below can be closed as duplicates.
Theme: Media and messages sent via the message tool in Telegram DM Topics go to General topic instead of the correct DM topic thread.
Components: telegram
| PR | Title | Author | Date |
|---|---|---|---|
| #2778 | fix: message tool media sent to General topic instead of DM topic | Lukavyi | 2026-01-27 |
| #6192 | Telegram: fix DM Topics thread routing | ViffyGwaanl | 2026-02-01 |
| #7261 | fix(telegram): preserve DM topic thread id for outbound media | ViffyGwaanl | 2026-02-02 |
Theme: Docker ARM64 images crash with exec format error due to a tag race condition in the multi-arch publish workflow.
Components: docker, config
| PR | Title | Author | Date |
|---|---|---|---|
| #4574 | Fix Docker arm64 image crash caused by tag race condition | Abhijrathod | 2026-01-30 |
| #4577 | Docker: publish arch-specific tags | ManojINaik | 2026-01-30 |
| #4679 | fix: correct ARM64 Docker image tagging (issue #4566) | spiceoogway | 2026-01-30 |
Theme: Gemini CLI auth extension fails to resolve paths on Windows npm installs and when using mise shims.
Components: extensions, google-gemini-cli-auth
| PR | Title | Author | Date |
|---|---|---|---|
| #3178 | fix(extensions): resolve Gemini CLI auth paths on Windows npm installs | AkgulMuhammed | 2026-01-28 |
| #3521 | fix(gemini-auth): handle mise shims and nested node_modules paths | sebslight | 2026-01-28 |
| #6045 | fix(auth): fix Gemini CLI path detection for global npm installs on Windows | ehgamemo | 2026-02-01 |
- GitHub Sync — All PRs synced from the OpenClaw repository into MongoDB Atlas
- Gemini Standardization — PR titles and descriptions standardized using Gemini to normalize language and extract components/type/keywords
- Voyage-4-Large Embeddings — Each PR embedded into 1024-dimensional vectors
- MongoDB Atlas Vector Search — Cosine similarity search across all PR embeddings
- Union-Find Clustering — PRs with ≥ 0.90 cosine similarity grouped using Union-Find algorithm
- Open PR Filter — Results filtered to open PRs only, clusters ranked by size
- Fix Verification — Each cluster cross-referenced against merged PRs with ≥ 0.85 similarity to identify already-resolved issues
Generated by openclaw-tracker · MongoDB Atlas + Voyage embeddings · 15 Feb 2026