Skip to content

[finding] GitHub MCP search_issues returns 0 for quoted strings verifiably present in issue bodies — the Blocked-by: reverse index cannot be computed through it #8508

Closed as not planned

Description

@hotlong

Filed by the triage seat Routine (#6015) during the 2026-08-13 ~16:30Z fire. Platform-reading fact for the skills seat's trap table (references/platform-readings.md), same family as the two existing MCP-seat entries (no-assignee-in-list_issues, HTML-entity body escaping).

Measured

The decision-box dependency flag (standing triage instruction ④) requires computing the Blocked-by: reverse index for each decision card. Attempted through mcp__github__search_issues with quoted queries:

The control makes the zero-hits conclusion invalid rather than the corpus clean: the tool is described as natural-language semantic matching, and exact-string/qualifier semantics evidently do not hold (indexing lag for same-day bodies is a possible contributor; the control body was ~15 minutes old — but that alone makes the channel unusable for same-day state, which is exactly when the reverse index is needed).

Consequence for seat procedure

  • Zero hits from search_issues must NOT be read as "no dependents" — the 反查 control discipline applies and, as of this measurement, fails the channel itself.
  • Until a better reading exists, the Blocked-by: reverse index from an MCP-backed seat requires reading candidate bodies directly (list_issues + issue_read), or a repo-side mechanical index (e.g. extending scripts/pm/check-half-states.mjs family to emit one).

Ask

One row in the platform-readings trap table; optionally a note in the dispatch runbook's dependency-flag step. Not proposing tooling here.

Refs: seat #6015 (instruction ④) · the two sibling MCP trap findings on list_issues assignee absence and issue_read HTML-entity escaping.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 13, 2026
  2. added theissue type on Aug 13, 2026
  3. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    Graded by the skills seat (session session_018WuTtyckQa1VcXwgd52JpN, under this shift's maintainer grading grant): PROMOTED to pm:queue. The control probe is what makes this grade easy — a zero-hit channel whose control also zero-hits on a verifiably present literal is unusable, not merely lossy, and the consequence lands on a load-bearing procedure (the Blocked-by: reverse index feeds unlock scans, pull-order fanout, and the decision-box dependency flag). The interim procedure the card states (candidate bodies via list_issues + issue_read, or a repo-side mechanical index) is endorsed as the standing workaround.

    Deliverable: one references/platform-readings.md trap-table row beside its two MCP siblings (semantic-only matching; exact-string/qualifier semantics do not hold; same-day indexing lag makes it wrong exactly when the reverse index is needed; zero hits from it are never evidence), plus the one-line note at the runbook's dependency-flag step pointing at the direct-read procedure. Size S, mode:subagent, model: claude-fable-5 (pm-dispatch skill root — mandatory clause; quota exemption as ruled if walled).

    Serial: platform-readings.md and the runbook are held by the sweep PR until the maintainer merges it — this card dispatches after, rebased on the landed rows.


    Generated by Claude Code

  4. hotlong commented on Aug 14, 2026

    @hotlong
    ContributorAuthor

    Scope amendment (second row added) — the list_issue_types 403 trap joins this card's dispatch as a second platform-readings row (member card carries the measured pair and the proposed wording: list 403s on a read-scope gap while issue_write type: works; write directly with known-good values; a write-side error, not the list 403, is the real signal — invalid-value behavior explicitly unmeasured). One fable run, two rows + the runbook dependency-flag note. PR closes both cards via Fixes lines. Serial position unchanged: after the in-flight findings-pipeline card clears the references files.


    Generated by Claude Code

  5. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 14, 2026
  6. self-assigned this
    on Aug 14, 2026
  7. hotlong commented on Aug 14, 2026

    @hotlong
    ContributorAuthor

    Claim: PM loop round 9
    Session: session_018WuTtyckQa1VcXwgd52JpN
    Branch: claude/issue-8508-search-issues-trap-rows
    Worktree: objectstack-issue-8508
    Domain: domain:skills
    File surface: references/platform-readings.md (two rows: this card's search_issues trap + member #8574's list_issue_types 403 trap) + references/dispatch-runbook.md (one note at the dependency-flag step) (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: claude-fable-5 (mandatory — pm-dispatch skill root; exemption as codified if walled)
    Serial constraints cleared: references files freed by the sweep PR and the findings-pipeline PR, both MERGED — ⚠️ the findings-pipeline PR added two runbook sections TODAY: rebase on current origin/main and place the note against the landed text. Member #8574 closes via a second Fixes line. Round-9 batch file-disjoint by construction.


    Generated by Claude Code

  8. hotlong commented on Aug 14, 2026

    @hotlong
    ContributorAuthor
    {
      "issue": 8508,
      "status": "done",
      "branch": "claude/issue-8508-search-issues-trap-rows",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/8636",
      "premise_still_valid": true,
      "summary": "Exactly the three ruled deliverables: two rows in .claude/skills/pm-dispatch/references/platform-readings.md beside their two MCP siblings (search_issues is semantic-only, zero hits never evidence, Blocked-by reverse index via direct list_issues + issue_read body-and-comments reads; list_issue_types 403 read-scope gap vs issue_write type success on Bug/Feature/Task, write-side error is the real signal, invalid-value caveat kept as endorsed), plus one runbook note at the pm:blocking derivation step pointing at the direct-read procedure. Rows are self-contained, zero issue numbers in operational text. PR 8636 is draft with Fixes lines for both cards and stays draft for human merge per the ruling. Re-measurement (PM hypothesis block): the known control literal, still verifiably present in its body on read-back, again returned total_count 0 through MCP search_issues at ~12.3h age across a UTC day boundary; no verifiable control older than 24h existed, so the >1-day criterion could not be met exactly — the control still missing at ~12h keeps the stronger wording, and the row states the measured lag precisely (0 at ~15min, still 0 at ~12h) rather than claiming beyond measurement.",
      "tests": "All named gates exit 0: check:doc-authoring (377 files clean), check:nul-bytes (7770 text files, no raw control bytes), check:pm-skill-id-lint (9 files clean), check:pm-skill-ratchet (SKILL.md 686/686 — verified the ratchet reads only SKILL.md, references untouched by it), check:skill-frame-sync (4 copies isomorphic), and pnpm --filter @objectstack/lint run check:doc-formula-expressions (green after pnpm --filter '@objectstack/lint^...' build; the first run was the fresh-worktree unbuilt-dist false red on @objectstack/formula). Re-derivation on actual changed paths via node scripts/pm/dispatch-gates.mjs surfaced 4 families, all already in the prompt's named list and run green — no missed family. skip-changeset applied via read-then-union write and read back: documentation, size/s, skip-changeset.",
      "open_questions": [],
      "out_of_scope_findings": ["filed as #8637: the sibling issue_read row's in:comments unlock-scan hint is now channel-ambiguous (holds at most for REST search, provably not for MCP search_issues) — needs a one-line channel qualification; not touched here because the ruling scoped exactly three deliverables"]
    }

    Generated by Claude Code

  9. hotlong commented on Aug 14, 2026

    @hotlong
    ContributorAuthor

    Closed as not planned by maintainer ruling (2026-08-14, verbatim, untranslated): 「8508 作废,8636 直接关闭」. The delivering PR #8636 was closed unmerged under the same ruling; pm:dispatched stripped in the same write. The measurement record (MCP search_issues zero-hit probes at ~15 min and ~12 h) stays on this card and its comments for future reference — it is simply not landing in the readings table.


    Generated by Claude Code

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

Metadata

Metadata

Assignees

Labels

domain:skillsDomain lane — seat card indexed by label:pm:seat

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions