Skip to content

Instantly share code, notes, and snippets.

@adam91holt
Last active February 14, 2026 21:00
Show Gist options
  • Select an option

  • Save adam91holt/588b1462fdf86efb74855a5722605d0c to your computer and use it in GitHub Desktop.

Select an option

Save adam91holt/588b1462fdf86efb74855a5722605d0c to your computer and use it in GitHub Desktop.
OpenClaw PR Duplicate Cluster Report - Top 5 clusters of duplicate open PRs identified via vector similarity

OpenClaw PR Duplicate Cluster Report

Date: 14 February 2026 Updated: 15 February 2026 — expanded to top 10 clusters with fix verification

Summary

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)

TL;DR for Maintainers

# 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).


Cluster 1: Orphan tool_result / Streaming Session Corruption (10 PRs)

✅ 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

Cluster 2: Slug Generator Hardcoded Anthropic Model (5 PRs)

❌ UNFIXED — Needs one PR merged

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

Cluster 3: Compaction ctx.model Undefined (5 PRs)

❌ UNFIXED — Needs one PR merged

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

Cluster 4: Telegram Polling Silent Exit (5 PRs)

✅ 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

Cluster 5: Audio Files Misdetected as UTF-16 Text (5 PRs)

✅ 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

Cluster 6: Slack threadId Ignored on Read (5 PRs)

✅ 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

Cluster 7: WhatsApp Group Media Allowlist (3 PRs)

❌ UNFIXED — Needs one PR merged

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

Cluster 8: Telegram DM Topic Thread Routing (3 PRs)

✅ 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

Cluster 9: Docker ARM64 Image Tagging (3 PRs)

❌ UNFIXED — Needs one PR merged

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

Cluster 10: Gemini CLI Auth Path on Windows (3 PRs)

❌ UNFIXED — Needs one PR merged

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

Methodology

  1. GitHub Sync — All PRs synced from the OpenClaw repository into MongoDB Atlas
  2. Gemini Standardization — PR titles and descriptions standardized using Gemini to normalize language and extract components/type/keywords
  3. Voyage-4-Large Embeddings — Each PR embedded into 1024-dimensional vectors
  4. MongoDB Atlas Vector Search — Cosine similarity search across all PR embeddings
  5. Union-Find Clustering — PRs with ≥ 0.90 cosine similarity grouped using Union-Find algorithm
  6. Open PR Filter — Results filtered to open PRs only, clusters ranked by size
  7. 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

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