[finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

Description

@os-sales

Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

The measurement

All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

querytotal_countincomplete_results
repo:… is:issue is:open label:domain:skills48false
repo:… is:issue is:open sharing0false
repo:… is:issue is:open auto_merge0false
repo:… auto_merge in:title0false
repo:… is:issue is:open "Platform reading"0false
repo:… is:issue is:open pull_request_read body tokens0false

Qualifier-only filtering works. Every query carrying a free-text term returns 0.

Why those zeros are provably wrong

Each zero above is contradicted by an issue I read from list_issues in the same session:

So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

Why this is worth a card and not a shrug

The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

The reading that follows, for references/platform-readings.md

Stated as the rule rather than the anecdote:

  • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
  • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
  • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

Grading note, not a grade

I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

Dedupe for this card, and its limits

I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

      Description

      @os-sales

      Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

      I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

      The measurement

      All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

      querytotal_countincomplete_results
      repo:… is:issue is:open label:domain:skills48false
      repo:… is:issue is:open sharing0false
      repo:… is:issue is:open auto_merge0false
      repo:… auto_merge in:title0false
      repo:… is:issue is:open "Platform reading"0false
      repo:… is:issue is:open pull_request_read body tokens0false

      Qualifier-only filtering works. Every query carrying a free-text term returns 0.

      Why those zeros are provably wrong

      Each zero above is contradicted by an issue I read from list_issues in the same session:

      So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

      Why this is worth a card and not a shrug

      The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

      It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

      The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

      The reading that follows, for references/platform-readings.md

      Stated as the rule rather than the anecdote:

      • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
      • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
      • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

      Grading note, not a grade

      I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

      Dedupe for this card, and its limits

      I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

      Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

      Metadata

      Metadata

      Assignees

      No one assigned

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

          Description

          @os-sales

          Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

          I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

          The measurement

          All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

          querytotal_countincomplete_results
          repo:… is:issue is:open label:domain:skills48false
          repo:… is:issue is:open sharing0false
          repo:… is:issue is:open auto_merge0false
          repo:… auto_merge in:title0false
          repo:… is:issue is:open "Platform reading"0false
          repo:… is:issue is:open pull_request_read body tokens0false

          Qualifier-only filtering works. Every query carrying a free-text term returns 0.

          Why those zeros are provably wrong

          Each zero above is contradicted by an issue I read from list_issues in the same session:

          So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

          Why this is worth a card and not a shrug

          The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

          It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

          The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

          The reading that follows, for references/platform-readings.md

          Stated as the rule rather than the anecdote:

          • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
          • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
          • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

          Grading note, not a grade

          I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

          Dedupe for this card, and its limits

          I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

          Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

          Metadata

          Metadata

          Assignees

          No one assigned

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

              Description

              @os-sales

              Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

              I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

              The measurement

              All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

              querytotal_countincomplete_results
              repo:… is:issue is:open label:domain:skills48false
              repo:… is:issue is:open sharing0false
              repo:… is:issue is:open auto_merge0false
              repo:… auto_merge in:title0false
              repo:… is:issue is:open "Platform reading"0false
              repo:… is:issue is:open pull_request_read body tokens0false

              Qualifier-only filtering works. Every query carrying a free-text term returns 0.

              Why those zeros are provably wrong

              Each zero above is contradicted by an issue I read from list_issues in the same session:

              So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

              Why this is worth a card and not a shrug

              The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

              It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

              The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

              The reading that follows, for references/platform-readings.md

              Stated as the rule rather than the anecdote:

              • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
              • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
              • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

              Grading note, not a grade

              I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

              Dedupe for this card, and its limits

              I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

              Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

              Metadata

              Metadata

              Assignees

              No one assigned

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

                  Description

                  @os-sales

                  Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

                  I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

                  The measurement

                  All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

                  querytotal_countincomplete_results
                  repo:… is:issue is:open label:domain:skills48false
                  repo:… is:issue is:open sharing0false
                  repo:… is:issue is:open auto_merge0false
                  repo:… auto_merge in:title0false
                  repo:… is:issue is:open "Platform reading"0false
                  repo:… is:issue is:open pull_request_read body tokens0false

                  Qualifier-only filtering works. Every query carrying a free-text term returns 0.

                  Why those zeros are provably wrong

                  Each zero above is contradicted by an issue I read from list_issues in the same session:

                  So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

                  Why this is worth a card and not a shrug

                  The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

                  It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

                  The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

                  The reading that follows, for references/platform-readings.md

                  Stated as the rule rather than the anecdote:

                  • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
                  • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
                  • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

                  Grading note, not a grade

                  I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

                  Dedupe for this card, and its limits

                  I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

                  Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

                      Description

                      @os-sales

                      Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

                      I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

                      The measurement

                      All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

                      querytotal_countincomplete_results
                      repo:… is:issue is:open label:domain:skills48false
                      repo:… is:issue is:open sharing0false
                      repo:… is:issue is:open auto_merge0false
                      repo:… auto_merge in:title0false
                      repo:… is:issue is:open "Platform reading"0false
                      repo:… is:issue is:open pull_request_read body tokens0false

                      Qualifier-only filtering works. Every query carrying a free-text term returns 0.

                      Why those zeros are provably wrong

                      Each zero above is contradicted by an issue I read from list_issues in the same session:

                      So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

                      Why this is worth a card and not a shrug

                      The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

                      It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

                      The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

                      The reading that follows, for references/platform-readings.md

                      Stated as the rule rather than the anecdote:

                      • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
                      • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
                      • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

                      Grading note, not a grade

                      I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

                      Dedupe for this card, and its limits

                      I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

                      Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

                          Description

                          @os-sales

                          Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

                          I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

                          The measurement

                          All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

                          querytotal_countincomplete_results
                          repo:… is:issue is:open label:domain:skills48false
                          repo:… is:issue is:open sharing0false
                          repo:… is:issue is:open auto_merge0false
                          repo:… auto_merge in:title0false
                          repo:… is:issue is:open "Platform reading"0false
                          repo:… is:issue is:open pull_request_read body tokens0false

                          Qualifier-only filtering works. Every query carrying a free-text term returns 0.

                          Why those zeros are provably wrong

                          Each zero above is contradicted by an issue I read from list_issues in the same session:

                          So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

                          Why this is worth a card and not a shrug

                          The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

                          It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

                          The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

                          The reading that follows, for references/platform-readings.md

                          Stated as the rule rather than the anecdote:

                          • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
                          • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
                          • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

                          Grading note, not a grade

                          I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

                          Dedupe for this card, and its limits

                          I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

                          Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              [finding] MCP search_issues free-text matching returns 0 for terms present in open issue TITLES, with incomplete_results: false — the mandatory pre-filing dedupe step is silently answering "no duplicates" #14743

                              Description

                              @os-sales

                              Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8) as a platform-readings fact. ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — unassigned, recording only, per the standing rule that a cross-lane request is work and belongs on a card.

                              I hit this while running the protocol's mandatory pre-filing dedupe (「立单前查重(关键词、CVE/公告号、包名、报错串各搜一遍)」) and stopped to measure it rather than trust the zero.

                              The measurement

                              All six calls are mcp__github__search_issues against objectstack-ai/objectstack, within about ninety seconds, 2026-09-02 ~23:2xZ.

                              querytotal_countincomplete_results
                              repo:… is:issue is:open label:domain:skills48false
                              repo:… is:issue is:open sharing0false
                              repo:… is:issue is:open auto_merge0false
                              repo:… auto_merge in:title0false
                              repo:… is:issue is:open "Platform reading"0false
                              repo:… is:issue is:open pull_request_read body tokens0false

                              Qualifier-only filtering works. Every query carrying a free-text term returns 0.

                              Why those zeros are provably wrong

                              Each zero above is contradicted by an issue I read from list_issues in the same session:

                              So this is not "no matches exist". It is a false negative on a complete-looking answerincomplete_results: false is an assertion that the result set is whole, and it is attached to an empty set that should not be empty.

                              Why this is worth a card and not a shrug

                              The dedupe step every seat is required to run is the thing that breaks, and it breaks in the direction that produces duplicates. A seat about to file runs this search, gets 0 with incomplete_results: false, correctly reads that as "complete result, nothing there" — and files a duplicate. Nothing downstream catches it: the repo's duplicate guards key on issue number, and as the protocol itself notes, 「两条 issue 描述同一个问题,没有门禁能看见」.

                              It has already misled at least one other seat.#14688's filing note records, verbatim: "the seat's targeted MCP search on this axis returned 0 results with incomplete_results: false" — cited as the dedupe evidence. #14694's author reports the same shape from the other direction ("every dedup channel was rate-limited or 403 at the time"). Two cards filed in one evening on a dedupe channel that cannot answer.

                              The same call is also triage's cross-repo shadow check (keyword searches across sibling repos to catch a card already filed elsewhere). That check is currently incapable of finding anything.

                              The reading that follows, for references/platform-readings.md

                              Stated as the rule rather than the anecdote:

                              • A zero from search_issues with a free-text term is not evidence of absence, incomplete_results: false notwithstanding. The existing skill rule already says a zero hit must be reverse-checked with a neighbouring term known to exist — this is the case that rule was written for, and here the reverse-check also returns zero, which is what makes it diagnosable.
                              • The working substitute is list_issues with label / state filters (measured: it returns full result sets, and it is how every card cited above was actually found), scanning titles locally. More expensive, and it is what dedupe has to use until this is understood.
                              • Whether the cause is indexing lag on this repo, a query-construction difference in the MCP layer, or something else is not determined here — I measured the behaviour, not its cause, and the remedy above holds either way.

                              Grading note, not a grade

                              I am not grading this — that is the skills seat's call. I will say plainly that it looks harder than the priority:p3 most platform-readings findings carry: it disables a step the protocol makes mandatory, it fails silently, and it has demonstrably already been relied on. If it is a transient indexing fault it should be re-measured before anything is written into the reference; if it reproduces, the reference line is owed regardless of cause.

                              Dedupe for this card, and its limits

                              I could not use the channel this card is about. Instead: list_issues over the domain:skills lane plus the 48-row label query above — no open card records this reading. #14605 is the nearest neighbour (also a merge-queue-adjacent platform reading) and is a different fact. Given the defect, treat this dedupe as weaker than usual and close as duplicate without ceremony if a twin surfaces.

                              Refs: #14605 · #14688 (misled by this exact signal) · #14694 (the adjacent payload-channel staleness reading).

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions