<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>duplicate-detection on tomrochette.com</title>
    <link>https://tomrochette.com/tags/duplicate-detection/</link>
    <description>Recent content in duplicate-detection on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Thu, 24 Sep 2026 23:21:46 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/duplicate-detection/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>The Duplicate Issue Was Written in Chinese</title>
      <link>https://tomrochette.com/the-duplicate-issue-was-written-in-chinese/</link>
      <pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/the-duplicate-issue-was-written-in-chinese/</guid>
      <category>ai</category><category>llm</category><category>agents</category><category>issues</category><category>triage</category><category>open-source</category><category>github</category><category>duplicate-detection</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category>
      <description>&lt;p&gt;This morning I hit a bug and asked my agent to file an issue for it.&#xA;It came back with a stop sign instead.&#xA;The exact bug had already been reported, a few hours earlier, in Chinese.&#xA;&lt;strong&gt;The agent did the one thing a decade of keyword search never did for me: it read a Chinese bug report and knew it was mine.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;The Bug and the Request&#xA;    &lt;div id=&#34;the-bug-and-the-request&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-bug-and-the-request&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The app is &lt;a href=&#34;https://github.com/openchamber/openchamber&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;OpenChamber&lt;/a&gt; 2.0.0.&#xA;In Settings, under Web Search, every option failed the same way.&#xA;I picked a search provider, a toast appeared saying &amp;ldquo;Couldn&amp;rsquo;t save the web search choice.&amp;rdquo;, and the selection rolled back.&#xA;Textbook bug report material.&lt;/p&gt;&#xA;&lt;p&gt;I typed what I knew to my agent: create an issue, the web search choice cannot be saved, it happens when switching the search provider.&#xA;Notice what I did not do.&#xA;I did not search GitHub first, and I did not open the source.&#xA;I dumped a half-formed report on the agent and moved on, the way you dictate to an assistant who handles the rest.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;The Skill That Fired&#xA;    &lt;div id=&#34;the-skill-that-fired&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-skill-that-fired&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The skill my agent runs when I ask it to file an issue starts with one instruction: search for duplicates before any codebase investigation.&#xA;It followed the skill without being asked.&#xA;One grep tied my words to the app&amp;rsquo;s own UI strings, and then it ran three GitHub searches: &amp;ldquo;web search provider&amp;rdquo;, &amp;ldquo;search provider save&amp;rdquo;, and &amp;ldquo;websearch settings&amp;rdquo;.&#xA;The first returned four unrelated issues, and the second returned the Chinese report as its top result.&#xA;The queries were plain English, and the hit was still a Chinese report.&#xA;The bridge was the report&amp;rsquo;s body: the Chinese reporter had listed the failing endpoint, /api/config/websearch, and the frontend store, useWebSearchStore, and English identifiers like those match an English query no matter what language surrounds them.&#xA;Retrieval was never the hard part, because code identifiers are already language-neutral.&#xA;The agent opened the thread, read the Chinese, and did the translating after the hit, not before.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;The Match&#xA;    &lt;div id=&#34;the-match&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-match&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The match was issue &lt;a href=&#34;https://github.com/openchamber/openchamber/issues/3880&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;#3880&lt;/a&gt;, titled &amp;ldquo;[Bug] v2.0.0 网页搜索选择无法保存，切换任何选项都会报错&amp;rdquo; (&amp;ldquo;the web search selection cannot be saved, switching any option shows an error&amp;rdquo;).&#xA;It had been filed by a reporter I had never interacted with, and its prose was written entirely in Chinese.&#xA;Same component, same toast, same rollback on every option.&#xA;The Chinese reporter had even done their own careful investigation of their machine and listed the API calls involved.&lt;/p&gt;&#xA;&lt;p&gt;The agent read the full report, compared it against mine, and concluded it was an exact match.&#xA;Then it stopped.&#xA;No new issue was filed, and it told me why in plain terms: a duplicate already exists, so it did not create one.&#xA;It went one step further, checked the current source to confirm the bug was still live, and corrected a wrong guess in the existing thread&amp;rsquo;s comments.&lt;/p&gt;&#xA;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;Two paths after a bug report: a keyword search surfaces the Chinese report but the match cannot be confirmed and a duplicate gets filed, while an agent reads the hit, confirms it, and no duplicate exists&#34;&#xA;    src=&#34;https://tomrochette.com/the-duplicate-issue-was-written-in-chinese/images/duplicate-paths.svg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Why This Was New to Me&#xA;    &lt;div id=&#34;why-this-was-new-to-me&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#why-this-was-new-to-me&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Duplicate detection was never bounded by retrieval, it was bounded by confirmation, and confirmation is reading.&lt;/strong&gt;&#xA;GitHub search matches strings, and it matches them in the issue body too.&#xA;No English query matches the title 网页搜索选择无法保存, but the English identifiers in that report&amp;rsquo;s body match an English query fine.&#xA;So a keyword search can surface a foreign-language report.&#xA;What it cannot do is tell you the report is your bug, because judging the match means reading it.&#xA;An English speaker looking at a Chinese-titled search result skips it or files anyway, and both paths end in a duplicate.&#xA;I would have filed mine at exactly that step, not out of laziness, but because confirming the hit meant translating it by hand.&#xA;The old workflow was not broken, it stopped one step short, and the step it stopped at was the language wall.&lt;/p&gt;&#xA;&lt;p&gt;The result in the old world is familiar to anyone who has maintained a project.&#xA;The same bug arrives three times in three languages, a bilingual maintainer or a patient contributor eventually connects them, and the duplicates get merged weeks later, after the maintainers have already triaged each copy.&#xA;The dedup always happened, but it happened on the maintainer&amp;rsquo;s time.&lt;/p&gt;&#xA;&lt;p&gt;An LLM agent reads GitHub in any language it knows, Chinese as easily as English.&#xA;The string search still does the retrieval, the reading does the confirmation, and both happen in the same minute of the same session.&#xA;The dedup moves from the maintainer&amp;rsquo;s week to the reporter&amp;rsquo;s minute.&#xA;&lt;strong&gt;The first useful thing my agent did that morning was refuse to do the work I asked for.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What to Do Next&#xA;    &lt;div id=&#34;what-to-do-next&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-to-do-next&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;If agents file issues for you, put duplicate-first at the top of the issue-filing skill, and make the language point explicit: tell the agent to treat translation as part of the search and to read candidate issues before dismissing them.&#xA;A search that only matches your own language is a search that misses half the issues on GitHub.&#xA;If your agent ever fails to catch a cross-language duplicate, check whether its search was string-bound.&lt;/p&gt;&#xA;&lt;p&gt;If you maintain a project, expect the mirror image.&#xA;Fewer copies of the same bug reach your queue, because the reporter&amp;rsquo;s agent catches them at filing time.&#xA;The comments that still arrive can carry more than a symptom: an agent that finds an existing issue reads the thread, checks the current source, and can correct a wrong theory already sitting in it, as mine did on #3880.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/send-implementation-not-issue/&#34; &gt;Issues Are Free Now: Send the Implementation, Not the Idea&lt;/a&gt; - the economics of filing issues when agents make reports nearly free, and why a withheld duplicate is a contribution.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../openclaw-triage-pipeline/index.md&#34; &gt;The Bot Reads the Queue First: How OpenClaw Processes Thousands of Issues and Pull Requests&lt;/a&gt; - what changes when a machine reads the issue queue before any human does.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;../say-it-once/index.md&#34; &gt;Say It Once: How to Delegate Tasks to Agents Without Supervision&lt;/a&gt; - how standing conventions like &amp;ldquo;search duplicates first&amp;rdquo; get encoded so agents act on them unprompted.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/iterating-on-agent-skills/&#34; &gt;Iterating on Agent Skills: The Loop That Keeps Them Improving&lt;/a&gt; - where an instruction like duplicate-first comes from, and the loop that keeps a skill correct after it ships.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/openchamber/openchamber/issues/3880&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;OpenChamber issue #3880&lt;/a&gt; - the Chinese-language report my agent matched, including the reporter&amp;rsquo;s own investigation of the failing save.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
