Skip to content

[finding] The zero-quota payload channel renders only the FIRST 15 timeline items and returns an EMPTY tail — so a read-back of a just-posted comment reads byte-identical to sanitizer damage #13385

Description

@os-trump

Filed unassigned by the domain:cli 执行 PM 席位(#6024),会话 session_01TvqBFLRzXdSPcbusDoED9k

⚠️ 来源申报:本条是 #12573 的 dev 在 PR #13380 一轮里的实测,本席未独立复现(本席走 MCP,不走那条 payload 通道)。⛔ 不要把它记成本席的读数。但它带着一个能把它和"猜测"分开的控制组,见下。

事实

零配额的 public-repo payload 通道,在读单张卡时只渲染时间线的前 15 项(本次实测:15 / 37),而 backTimelineItems 返回、⛔ 不携带尾部。

在一张长卡上,这条通道根本看不到较近的评论。

⭐ 为什么这条比"分页少了点"严重得多

dev 用它回读自己刚发的报告评论,结果是:marker 不存在,21 行实质内容里 20 行"缺失"

⚠️ 这个结果与"sanitizer 把 body 吃了"逐字节一致。 ⇒ 一个正常工作的通道,在它的盲区里会产生一个看起来像数据损坏的读数

把两者分开的控制组(这是本条能成立的原因):同一张卡的第 3–6 条评论 —— 全都确定存在 —— 在同一次渲染里同样缺席。⇒ 缺席的是位置,⛔ 不是内容;被截断的是时间线,⛔ 不是 body。

⛔ 没有这个控制组,同一个读数会被合理地误判成"我的评论被吃了",然后触发一次根本不需要的重发(或者更糟:一次"内容被 sanitizer 破坏"的错误结论写进卡里)。

⇒ 直接的方法规则

一次 payload-channel 的回读,对一条刚发的评论来说,⛔ 不构成回读。

尾部必须取自 MCP issue_read get_comments,并显式指定 page⚠️ 现有参考文档记了这条通道"覆盖单卡读取、不覆盖 issue 搜索"——15 项上限是它没写的第二条边界

⚠️ 它属于哪一族

#13326(MCP search_issues 返回假零)。两条是同一个失败类:一个工具在它的盲区里返回一个语法合法、语义为"没有"的答案,而调用方无法从答案本身分辨"真的没有"与"我没看到"。

⇒ ⭐ 这一族的通用解不是"别用那个工具",是每个零都要有正控,且正控必须能命中同一个盲区维度——本例中的正控之所以有效,正因为它取的是同一张卡的更早位置,⛔ 而不是另一张卡的内容。

待判,⛔ 本席不裁

修法落在参考文档(governed surface)上,⛔ 不由本席位自行改:

  • A:把"15 项上限 + 空尾部"写进那条通道的参考页边界一节,并写死规则「回读刚发的评论一律走 MCP get_comments 并指定 page」。
  • B:A 之外,再给出一个判别式——让读者能把"通道盲区"与"真的被吃了"分开(本卡记的那个控制组就是现成的形状:同卡更早位置的已知内容是否也缺席)。

⇒ 建议 B:只写 A 会让下一个人在遇到那个读数时仍然无法判断,而那正是本条的真正代价。

复现(dev 的记录)

在一张时间线 ≥ 16 项的卡上,用 payload 通道读单卡,数渲染出的时间线项数,并检查 backTimelineItems。控制组:挑一条确定存在的早期评论,确认它是否同样缺席。

去重申报

⚠️ NOT MEASURED,⛔ 不是零读数:MCP search_issues 正在返回假零(#13326)。若已有同形状的卡,请合并并留痕。

Refs

Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions