Uh oh!
There was an error while loading. Please reload this page.
docs(pm-dispatch): six measured platform-reading rows — search zeroing, labels AND/OR, the MCP read-path trap, landing by content - #11279
Conversation
… and the labels AND/OR asymmetry Three measured platform facts into the fact table, folded into existing entries where one already existed: - `search_issues` can go silently to zero for a WHOLE SESSION, control term included, while the same tool is healthy in another session at the same moment. Diagnose with a `repo:`-scoped control term known to hit; on zero switch channel immediately and never retry. - The correct fallback is the REST list endpoints (core bucket, complete results). Never hand-scan with MCP `list_issues`: GraphQL bucket, and a paginated hand-scan reads as "searched, nothing there" while having enumerated 100 of 226. - The labels filter is asymmetric across the two channels: REST `labels=a,b` is a true AND, MCP `list_issues` `labels` is an OR. The OR half was already on the row; this adds the REST counterpart and the two independent measurements from the same day. - The qualifier-syntax candidate mechanism is recorded as REFUTED, with both counter-measurements, so the mechanism hunt does not spend a session on it. The file sits at its line-ratchet ceiling with zero headroom, so the new entry is paid for in place per the gate header's remedy guidance (never raise a ceiling): one loosely wrapped bullet is re-flowed onto one line, no words dropped. Ceiling untouched at 134; the file is 134 at this commit and at the next. Fixes#11193 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
…dging landing by content Two measured read-path facts, both shaped to mislead in the safe-looking direction, folded into the entries that already own their subject: - The MCP `issue_read` / PR read path drops `<...>` fragments inside inline code while GitHub's stored bytes are intact (raw REST returns them verbatim). This matters because the repair-first rule then gets applied CORRECTLY to an undamaged card and the rewrite destroys correct content — three independent observations in one day, one of them a near miss stopped only by that dev's own verification habit, with no mechanical guard anywhere. The discriminator is empty inline-code spans, and the rule is: never judge truncation from the MCP read alone, confirm raw REST first. Numeric entities are ordinary encoding, not truncation evidence. The `issue_read` row above claimed read-side artifacts were uniformly reversible, so it gets the correction: a dropped fragment cannot be decoded back. - Landing is judged by CONTENT on `origin/main`, never by the PR head sha's ancestry (the queue lands a DIFFERENT commit, so the ancestry test answers NO for a fully merged PR — a distinct cause from the shallow-checkout trap already on file) and never by the `merged` boolean, which was measured returning false alongside a set `merged_at` and `state: closed` under a `fields` projection. Paid in place at the ceiling, same as the previous commit: one loosely wrapped bullet re-flowed onto one line, no words dropped. Ceiling untouched; the file is 134 lines here and at the parent commit. Fixes#11271 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
Uh oh!
There was an error while loading. Please reload this page.
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 32629104199 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
os-zhuang
commented
Aug 23, 2026
Queue-kick triage (skills seat, session Generated by Claude Code |
Fixes#11193
Fixes#11271
Six measured platform facts land as one-line-per-entry rows in
.claude/skills/pm-dispatch/references/platform-readings.md. Dispatched as a fold oftwo graded cards, one PR, one commit per member.
Member commits
39f6a6a1search_issuessession-level zeroing + control-term probe; REST list endpoints as the correct fallback (never MCPlist_issueshand-scans); the labels AND/OR asymmetry; the qualifier-syntax candidate recorded as REFUTED7fcab57forigin/mainFolded into existing entries, not appended
Per the grading note, the file was read in full first. Four of the six facts had an entry
that already owned their subject, so they were folded in rather than duplicated:
list_issues). This adds the RESTlabels=a,bAND counterpart and the two independent same-day measurements.issue_readrow claimed read-side artifacts were uniformly reversible. The newfact contradicts that in a way worth stating: a dropped fragment cannot be decoded back,
so that row gets the correction plus a pointer to the full rule.
is the same trap with the read paths swapped, so it extends that entry.
origin/mainreading is a content reading, and why the two tempting shortcuts are both wrong.
Only one genuinely new entry was needed (the search-zeroing operating procedure).
How the ceiling was paid
The file sits at its line-ratchet ceiling with zero headroom (134/134). Payment follows
the remedy guidance in
check-skill-line-ratchet.mjs's own header — compress in place,never raise a ceiling (raising needs a maintainer ruling, and none was sought or given).
Each commit adds exactly one physical line and pays for it by re-flowing one loosely
wrapped bullet onto a single line, no words dropped; both re-flowed bullets land well
inside the file's established line-length convention. The ceiling constant is untouched and
the file is 134 lines at both commits, so the ratchet is green at each one, not just at
the tip.
Gate verdict at the final head
7fcab57f, quoted as the gate printed it:⛔ #11106 remains open and is deliberately not addressed here. The line-vs-byte metering
question is in the decision inbox; this PR pays purely in lines per the current line-ratchet
remedy and neither resolves nor preempts it.
Governed surface
.claude/**is a governed surface: this PR opens as draft, is not to be flippedready by an agent, carries no auto-merge, and is for human merge only.
skip-changesetapplies by convention — the diff is one instruction-surface reference fileand publishes nothing.
Verification
Gate families derived mechanically from the actual change set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(re-derived after thefinal commit; same six families, no new members). All seven run green at
7fcab57f:check:pm-skill-ratchetcheck:pm-skill-id-lintcheck:doc-authoringcheck:skill-frame-synccheck:doc-formula-expressionscheck:pm-governed-mergescheck:nul-bytesThe new rows carry no issue numbers, per the file's own header rule and
check:pm-skill-id-lint.One fact verified first-hand while writing this PR
Fact 5 was confirmed in this session before it was written down, on this very fold: #11271's
body read through MCP showed an empty inline-code span and an identifier written without
angle brackets, while
curlagainstapi.github.comreturned the same body carrying fiveangle-bracket-bearing inline spans intact. The card was not damaged and was not
"repaired" — which is exactly the near-miss the row exists to prevent.
Declared narrowings
@objectstack/formuladependency closure was built with dts generation skipped. Thatgate loads
formulaat runtime and consumes no.d.ts, and this diff contains noTypeScript, so no type judgment rests on it.
pnpm lintwas not run; CI owns that run. Nothing here is a narrowing of anamed family — all six derived families plus
check:nul-bytesran in full.Reported at draft-PR time per the dispatch contract; CI convergence is the PM's to read.
Generated by Claude Code
Generated by Claude Code