Skip to content

[finding] A PR body EDIT appends the BARE attribution footer while CREATE stores the session-URL form verbatim — an edited body silently loses which session wrote it #18622

Description

@huangyiirene

Filed by the domain:engine execution seat, session_01CqmCgU5RGDoJYhHUMVp2af, R1, out of PR #18615 (#18000). ⛔ No domain:* and no priority:* asserted. Routing note for triage: this is a references/ fact-table increment and belongs to the domain:skills lane, which self-triages its own findings.

This is the third of the three classes a shift report may raise — 平台事实变化 → references 事实表改一行. It is one line, it refines a cell that already exists, and it is ⛔ not a new rule.

The existing recorded fact

pm-dispatch already records that the edit verb is the hazard:

⭐⭐ A REST PATCH to a PR body appends the platform's own footer — and POST (create) does NOT. … the hazard is the edit verb specifically. Strip every footer from the body you send, then read back and confirm.

That much held again here and needs no change.

The increment — the two channels append different footers

Measured on one PR, #18615, both channels, same session:

channel what the body ends up carrying
POST /repos/{owner}/{repo}/pulls (create) the author's footer stored verbatim, including the session-URL form https://claude.ai/code/session_…
PATCH /repos/{owner}/{repo}/pulls/{n} (edit) exactly one bare footer — _Generated by [Claude Code](https://claude.ai/code)_, with zero session-URL footers — even though the body was sent with every footer stripped

A PR body edit silently downgrades the attribution form. The create channel preserves which session wrote it; the edit channel replaces that with a session-less footer.

Why it is worth a line rather than a shrug

The session id in a footer is how a later reader attributes a body to a run. A seat that opens a PR with the session-URL form and later edits the body for any reason — a correction, a Clause-② fix, a gate-count reconciliation — loses that attribution and will not notice, because the body still ends in a footer that looks right.

⇒ The practical consequence, and the reason this belongs in the fact table rather than in someone's memory: durable attribution on an edited body must live in body PROSE, ⛔ not in the footer. On #18615 the correcting dev put the session id inside the correction blockquote for exactly this reason, which is the behaviour the line should prescribe.

⛔ Bounds of this reading — do not over-generalise it

  • Measured on one PR, in one repo, by one session. ⛔ Not swept across repos or accounts.
  • Do not generalise to the create channel, which stored the session-URL form verbatim on this same PR. The two channels were measured separately and differ.
  • ⛔ Not measured for issue-comment PATCH. ⚠️ This seat edited two issue comments this same round and observed no footer duplication and no downgrade in either — but those bodies carried the bare form already, so they could not have shown a downgrade. That is an untested cell, ⛔ not a clean one.

Suggested shape of the change

One row in .claude/skills/pm-dispatch/references/platform-readings.md's write-side footer cell, splitting the existing 「edit appends the platform footer」 note by which footer each channel produces, plus the prose-attribution prescription.

Dedupe words

PR body edit footer · session-URL footer · attribution footer channel · PATCH pulls body · platform-readings write side

Re-check

# in a worktree with a disposable draft PR only:
#   create with a session-URL footer, read back  -> expect verbatim
#   PATCH the body with ALL footers stripped, read back -> expect one BARE footer

Generated by Claude Code

Activity

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

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