LearnNewsExamplesServices
Frontmatter
id15603
titlelist_issues MCP default page can be hours-stale for freshness sweeps
stateClosed
labels
bugai
assigneesneo-kimi-iris
createdAtJul 20, 2026, 2:56 PM
updatedAtJul 22, 2026, 7:12 PM
githubUrlhttps://github.com/neomjs/neo/issues/15603
authorneo-kimi-iris
commentsCount2
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
contentTrust
projected
quarantined0
signals[]
blockedBy[]
blocking[]
closedAtJul 22, 2026, 7:12 PM

list_issues MCP default page can be hours-stale for freshness sweeps

neo-kimi-iris
neo-kimi-iris commented on Jul 20, 2026, 2:56 PM

Context

During the 2026-07-20 same-identity herd (two parallel Iris sessions), both sessions ran the ticket-create Content Sweep (i) honestly and still filed duplicates (#15596 / #15597). The collision itself fit inside the irreducible create-gap (the #12856 two-phase claim→recheck→execute anchor), and the tiebreak resolved it cleanly. But the post-incident V-B-A surfaced a second, independent safeguard degradation: the MCP list_issues call — explicitly sanctioned by ticket-create-workflow.md §1a(i) as an equivalent to gh issue list — returned a first page that did not surface issues filed hours earlier, on two independent calls.

The Problem

Verified observations (2026-07-20, Iris seat):

  1. 11:02Z sweep (list_issues, limit 20, projection summary): first result #15592 (updated 2026-07-19T21:37Z). #15596 was filed 11:04:53Z — genuinely absent because it did not exist yet. Sweep honest; gap window.
  2. 12:51Z check (list_issues, limit 6, projection title_only): first page STILL starts at #15592 (updated Jul 19 21:37Z) and contains nothing newer — while #15599 (11:48Z), #15598 (11:48Z), #15596 (11:04Z) all exist and carry same-day update activity. A live UPDATED_AT DESC page cannot look like this; the served page is materially stale.
  3. gh CLI contrast (gh issue list --state open --limit 8 --json number,createdAt, same minute): correctly returns #15599, #15598, #15596 on top — created-descending, live.
  4. KB lineage: the tool's default sort is documented as UPDATED_AT DESC via IssueService.listIssuesGraphqlService.query(FETCH_ISSUES_LIST); a prior first-page defect (assignee filter searching only page one) was already called a "collision generator" and fixed server-side (#15220 / #14434 line). The staleness observed here is a distinct, unfixed behavior of the same surface — root cause (cache, memoized first page, or query construction) is part of the work.

Net: an agent using the sanctioned "equivalent MCP call" for the freshness sweep can receive a page missing hours of fresh filings — exactly the thundering-herd window the gate exists to catch. The gh path in the skill text is correct; the "equivalent MCP tool or GitHub API call" clause is not currently trustworthy for this gate.

The Architectural Reality

  • .agents/skills/ticket-create/references/ticket-create-workflow.md §1a(i) — the live freshness sweep mandate + the equivalence clause.
  • ai/mcp/server/github-workflow/IssueService.listIssues / GraphqlService FETCH_ISSUES_LIST (sort + paging + any response caching; the staleness root cause lives here).
  • Prior fix lineage for the same tool surface: #15220, #14434 (assignee-filter first-page defect, fixed server-side with truncation reporting).

The Fix

Two independent deliverables, one ticket:

  1. Skill text (substrate, small): amend §1a(i) so the equivalence clause requires live, created-descending evidence — the gh issue list command already satisfies it; the MCP list_issues call is only acceptable once deliverable 2 lands. Add one sentence naming the observed failure mode (stale first page across the herd window).
  2. Tool investigation + fix (github-workflow MCP): root-cause why the default list_issues page served hours-old results twice (cache? memoization? query shape) and fix or document-with-warning. Server-side per the #15220 / #14434 precedent.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
ticket-create-workflow.md §1a(i) skill payload (current text) Equivalence clause requires live created-desc evidence; gh path named as the reference MCP path allowed only after deliverable 2 skill text itself this incident
list_issues MCP tool github-workflow server code + KB-documented UPDATED_AT DESC default First page surfaces fresh filings (live ordering), or carries an explicit staleness/truncation signal warning documented in tool description if unfixed tool handbook two observations above + gh contrast

Decision Record impact

none — sweep-discipline text + tool behavior fix; no ADR conflict.

Acceptance Criteria

  • §1a(i) equivalence clause amended (live created-desc requirement + observed failure mode named)
  • MCP list_issues staleness root-caused and fixed, or an explicit staleness/truncation signal added to the response
  • Regression evidence: a fresh filing appears in the tool's first page within the herd window (test or documented live probe)
  • (if tool code changes) unit coverage for the fixed path

Out of Scope

  • Redesigning the two-phase claim→recheck→execute discipline (the create-gap mitigation already exists and worked as designed via the tiebreak).
  • list_pull_requests or other list tools' paging audits (separate tickets if the same root cause surfaces there).

Avoided Traps

  • Treating the herd collision as proof the sweep text is broken — the sweeps were honest; the collision fit the designed create-gap. This ticket is scoped to the independent staleness degradation only.
  • Silently swapping the skill to gh-only without fixing the tool — hides a server-side defect other consumers may hit.

Related

  • #12856 (thundering-herd anchor: two-phase claim→recheck→execute)
  • #15220 / #14434 (list_issues first-page defect lineage)
  • #15596 / #15597 (the incident pair; #15597 closed as duplicate)

Origin Session ID: fdb40bf0-24ea-4622-a2a2-1b94a4f3dae5

Retrieval Hint: query_raw_memories: "list_issues stale first page content sweep herd" · anchors .agents/skills/ticket-create/references/ticket-create-workflow.md, ai/mcp/server/github-workflow/


Live latest-open sweep: gh issue list (created-desc, live) 20 open issues checked at 2026-07-20T12:56Z; no equivalent found. A2A in-flight sweep: list_messages all/30 same minute; no competing claim on this scope. KB semantic sweep: prior first-page lineage #15220/#14434 confirmed adjacent-not-duplicate.