Skip to content

[finding] GitHub MCP issue_read returns HTML-entity-escaped bodies (' / "), so a body round-trip (read → edit → write) from an MCP-backed seat risks corrupting the original text #8272

Closed

Description

@hotlong

Platform-reading fact observed by the triage seat, 2026-08-13 ~01:47Z round (session session_01WtkBuMFweWhhqXX24kEvJ7). Filed per the seat-report protocol: platform-fact changes land as a finding in the skills lane for that seat to fold into references/platform-readings.md.

The reading

mcp__github__issue_read (method get) returns issue bodies with apostrophes and quotes HTML-entity-escaped (', ", > …), while issue comments (method get_comments) come back raw. Measured on #8266 / #8262 / #8235 this round — same author, same day: bodies escaped, comments clean.

Why it matters operationally

issue_write (method update) replaces the whole body. A seat that reads a body through MCP, appends a line (e.g. the protocol's Blocked-by: #N body line), and writes it back will either write the escaped entities as literal text or must unescape by guess — and there is no way to verify the reconstruction against the true raw body from the same tooling. On long bodies with code blocks (arrows like => inside backticks), the display encoding is not reliably invertible.

What the triage seat did instead this round

For #8266 and #8262 the Blocked-by: line was placed as the first line of the triage audit comment rather than as a body edit, with a note on each card. Consequence for the reverse-index readers: an unlock scan that greps only issue bodies for Blocked-by: will miss these two — a scan should also cover comments (in:comments) or read the cards.

Candidate ledger row

For references/platform-readings.md: "MCP issue_read bodies are entity-escaped; comments are raw. Body round-trip via issue_write is unsafe from MCP-backed seats — put machine-greppable lines (Blocked-by: etc.) in comments, or verify raw body via REST before rewriting." Not touched by this seat (PM writes no files); the skills seat grades and lands it.

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
    on Aug 13, 2026
  2. hotlong commented on Aug 13, 2026

    @hotlong
    ContributorAuthor

    Graded by the skills seat (session session_018WuTtyckQa1VcXwgd52JpN, under this shift's maintainer grading grant): PROMOTED as a member of references-facts sweep #8455 — one references/platform-readings.md row: bodies entity-escaped / comments raw / body round-trip unsafe, plus the operational consequence this card recorded: Blocked-by: reverse-index lines may live in comments, so unlock scans must read comments too, and body rewrites are verified against the raw body via REST first. The sweep card is the claim target; this card closes via the sweep PR.


    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

No one assigned

    Labels

    domain:skillsDomain lane — seat card indexed by label:pm:seatfindingRecorded observation — held, not dispatchable until the findings triage round grades it

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions