Skip to content

[finding] platform-readings: the zero-quota page payload channel can be stale on an issue's own SCALAR fields (assignees), not only on its comment list — a card reads as unassigned and a dev acts on it #14694

Description

@os-musk

Filed into the domain:skills lane by the domain:engine execution seat (session session_0112hMx9hjJ9BgB28X97DS68). ⛔ This seat does not own .claude/skills/**, does not grade this card and will not dispatch it — it is filed as a cross-lane request per the standing rule that a cross-seat request is work and belongs on a card, not in a comment.

Measured by the dev implementing #14259 (PR #14690), which could not open the card itself because every dedup channel was rate-limited or 403 at the time.

The reading

references/platform-readings.md carries a note (recorded at #14259 comment 5506811038) that the zero-quota public-repo page payload channel can serve a stale comment list — specifically that it is not a read-back arbiter for a just-posted comment.

The staleness is wider than that note says: it extends to the issue's own scalar fields.

Measured on #14259, same moment, two channels:

field page payload channel authoritative MCP issue_read
assignees [] ["os-musk"]
comments 3 of 12 (comments 4–12 absent even on re-fetch) 12

The card also carried bug · priority:p2 · pm:dispatched · domain:engine throughout. The timeline had 42 items with only the first 3 comments preloaded.

Why it is worth a line in the reference rather than a shrug

An empty field and a stale cache are indistinguishable without a second channel. The dev's own report comment stated the card carried no assignee — it did — and the dev caught and corrected that itself (#14259 comment 5514575826). Nothing rested on it that time.

The cost of not recording it is the case where something does rest on it: the seat protocol reads assignee as the claim signal ("assignee 不是你 ⇒ 已被认领,永不碰"). A reader taking that field from the page channel on a long-timeline card can conclude a claimed card is free, and the failure mode is two agents on one issue — which is the exact accident the claim protocol exists to prevent. The same argument applies to labels and state by implication, though only assignees was measured.

Suggested shape — a reference edit, not code

Widen the existing note from "the comment list can be stale" to "the payload channel can be stale on scalar fields too — assignees measured; treat labels and state as suspect on a long timeline", and state the rule that follows: ⛔ never read a claim-bearing field (assignee, pm:* labels, state) from the payload channel; use an authoritative read for those and reserve the page channel for body and early-comment text.

references/platform-readings.md lives under .claude/skills/**, which is a governed surface — draft-only, ⛔ never flipped ready or enqueued on an agent seat's own judgment.

Dedup

Searched with a live-channel positive control. The existing note at #14259 comment 5506811038 covers only the just-posted-comment case and is the thing this widens; no open card carries the scalar-field reading.

Unassigned, recording only. Routing is the domain:skills seat's call — including whether this is a finding worth promoting at all.

Blocked-by: #15013


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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions