Skip to content

Commit af4f8ee

Browse files
huangyiireneclaude
andauthored
docs(pm-dispatch): record the dequeue actor, the footer surface axis and objectui's label stripper (#19734)
Fixes #19343, fixes #19179, fixes #19404 Clause-②: no Four platform-fact rows were dispatched for one file, `.claude/skills/pm-dispatch/references/platform-readings.md`. Each row's premise was re-read on the base before writing. **Two of the four were already covered on the base** and are reported as falsified rather than restated; the other two are recorded, plus two in-place corrections. The ceiling was not raised. ## Premise reading per row (measured on `origin/main`, before any edit) | card | premise | evidence on the base | |:--|:--|:--| | #19343 | **partly valid** | the headline fact was already there: `:16` states the SUCCESS sequence carries `removed_from_merge_queue`, `:17` gives the disambiguator (no `merged` after it, PR still open). The branch-listing refinement was also already there: `:63` (`只在存在时有意义`) plus `:64` and `:44`. **Uncovered delta: the actor** — `grep github-merge-queue` returned 0. That delta is what this PR adds. | | #19390 | **valid** (footer half) | `:345` covers `PATCH /pulls` on a PR; `:414` covers the issues route on a real issue. The measured cell — the issues route aimed at a **pull request** — was absent. | | #19404 | **FALSIFIED** | both halves already on the base. Channel: `:125` `job 日志只有 MCP 取得回,REST 侧转 blob 存储`, with the general form at `:122` and the action form at `:123`. Self-bound Routine: `:457` `自绑唤醒的是已存在的会话、工具已加载`. | | #19179 | **valid** | `grep -E 'labeler|sync-labels'` returned 0. The general read-back discipline exists at `:244`/`:245`, but the named objectui mechanism did not. | ## What changed (6 insertions, 5 deletions, one file) Recorded: - **`:348` (new)** — the footer append follows the SURFACE, not the route: an issues-route body PATCH aimed at a pull request takes the same +58 bare-footer append, and leaves the draft bit alone. `:414` is scoped to a real issue in the same edit, so the pair now states which axis it varies on. - **`:245` (new)** — objectui's labeler runs with `sync-labels: true`, so the PR label set is recomputed wholesale from the diff's paths and a hand-applied label dies on the next push; re-applying loses the same race again, which is why the row says not to. Corrected in place (0 net lines): - **`:17`** — both queue exits carry `github-merge-queue[bot]`, so the actor discriminates nothing. This is the one piece of #19343 the file lacked. - **`:304`/`:305`** — the old pair read `get_job_logs 无论 tail_lines ... ⇒ 两者都答不了到底挂在哪`, which is exactly the misreading #19404 was filed about. Scoped to `tail_lines` and corrected: with `return_content` the whole log came back. The REST-leg clause retired into `:125`, which already carries it. ## Line budget — the ceiling is not raised - before **468** / ceiling **469**; after **469** / ceiling **469**. The ratchet row is untouched. - Paid for by retiring one **provable duplicate**: old `:64` `⛔ 它的缺席不是任何方向的读数。` Its fact is stated twice more in the same file — `:63` `gh-readonly-queue/* 只在存在时有意义` (only meaningful when present, i.e. absence says nothing) and `:44` `ref 缺席只作旁证,⛔ 永不承载结论`. - Every line is within the file's own 120-byte cap, enforced by `scripts/pm/check-skill-line-ratchet.mjs` (table rows are structurally exempt and this file's table-row pin is 0, so the rows are bullets). Widest line after the edit: 0 lines over 120 bytes. ## Gates — 20 derived families, 20 run, 0 NOT-MEASURED Derived with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (no hand-written path list) and reconciled with `--ran`, re-run on the final head `3bfd45c32` after merging `origin/main`: - `✓ dispatch-gates --ran: 20 derived famil(ies) accounted for — 20 run, 0 NOT-MEASURED (a DERIVED zero — all 20 recorded an exit code and none of them is 3).` - `✓ check-skill-line-ratchet: ...platform-readings.md is 469 lines (ceiling 469; headroom 0).` - `pnpm check:pm-skill-id-lint :: exit 0` and `pnpm check:nul-bytes :: exit 0`. - `pnpm --filter @objectstack/lint run check:doc-formula-expressions` first exited **3 — PREREQUISITE NOT MET**, which its own text says measured nothing. Built its two declared prerequisites through the shared verify lock, re-ran, exit **0**. Recorded as measured, not as a failure. - Control-character self-scan over the changed file: 0 hits. `skip-changeset` is correct and measured, not assumed: of **70** non-private manifests (all 70 declare `files[]`), **0** have a package root containing the changed path; positive control `packages/spec/package.json` is contained by exactly 1 published root, so the instrument fires. ## Scope notes (filed, not fixed here) - **#19390 remains open deliberately** — hence `Part of`, not a closing keyword. Its footer half is recorded here, but the card also carries a second measured reading that is still absent from the file (`grep merge_commit_sha` ⇒ 0, lit control `grep -c auto_merge` ⇒ 3): a queued open PR's `merge_commit_sha` names an anticipated commit that is not on main and may never be. Closing the card would hide that half from every open-only filter, which `:445` warns about. The seat decides. - **#19404 remains open** — its premise is falsified above, and per the dispatch a card whose row is already covered is not closed by the dev. The `:304`/`:305` correction it motivated is included anyway, because the old wording actively produced the error the card describes. - The file states both `红窗里 draft 翻转 ... 照常走 ccr REST,⛔ 不为它们守候` (`:145`/`:146`) and `⛔ 满余额不放行 undraft:同分钟满额而 ccr 路 429` (`:163`, with `:49`/`:50`). A seat could act wrongly on either. Noted, not touched — resolving it needs a measurement this card did not take. - Two further duplicate pairs were found but **not** retired, because retiring either would orphan a neighbouring line that refines it: `:253`/`:318` (the MCP read path swallowing angle-bracket fragments inside inline code spans) and `:260`/`:322` (counting empty inline code spans as the discriminator). Left for a seat that can judge the collateral. ## Deviations, declared - The dispatch asked each row to carry **the source card number**. It cannot: `scripts/pm/check-skill-id-lint.mjs` scans every `.md` under `.claude/skills/pm-dispatch/` including `references/`, reds on `/#[0-9]{3,}/`, and the file carries 0 such tokens today. Card numbers were omitted; measurement dates were kept where they are load-bearing, matching the file's existing style. The gate passes. - The dispatch's first line named all four cards. Two were dropped from it on the evidence above. - Commit trailers use the repository's **model-free** pair, as AGENTS.md requires and the pre-push hook enforces. Tier S governed surface (`.claude/**`): opened as a draft and left that way — not marked ready, auto-merge not armed. `check-governed-merges.mjs --pr` reading is in the report comment on #19343. --- _Generated by [Claude Code](https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc)_ --- _Generated by [Claude Code](https://claude.ai/code)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 342808c commit af4f8ee

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

‎.claude/skills/pm-dispatch/references/platform-readings.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
- ⛔ 永不据它判没挂上而重挂 —— 重挂踢队重排。
1515
- 推送重折已挂 auto-merge 的 PR 可静默掉挂,无字段说明 ⇒ 重折后重发,再按队列 ref 探。
1616
- 成功序列读伴随不读次序:`removed_from_merge_queue` 与 `merged` 同秒或数秒内到,次序实测不定。
17-
- 真被踢是其后无 `merged`、几分钟后 PR 仍 open。
17+
- 真被踢是其后无 `merged`、几分钟后 PR 仍 open;两种退出的 actor 同为 `github-merge-queue[bot]`。
1818
- 不在 `origin/main` 上是二义读数:在队列里等 / 没入队,两者处置相反。
1919
- ⇒ 落地检查恒两个读数:队列成员资格 和 `origin/main`,缺一不可。
2020
- `origin/main` 按内容读(grep 本 PR 的产物),⛔ 不按 head sha 祖先性、不按 `merged` 布尔。
@@ -61,7 +61,6 @@
6161
- 回读 `auto_merge` 非空本接口给不了:`pull_request_read` 与 `fields` 枚举都无该成员。
6262
- 效果读数 = 下列阳性探针、timeline 入队事件、最终落地;队列分支仅在场时算。
6363
- 队列 ref 答 BUILD 不答成员资格:`gh-readonly-queue/*` 只在存在时有意义,即有 build 在跑。
64-
- ⛔ 它的缺席不是任何方向的读数。
6564
- 阳性探针 ①:`update_pull_request_branch` 回已入队分支不能更新 = 在队。
6665
- 它正常返回则顺带逼出暗冲突;它不踢已挂 PR,只是永不入队。
6766
- 阳性探针 ②:`merge_pull_request` 回 405 `Pull Request is in the merge queue` = 在队。
@@ -243,6 +242,7 @@
243242
- ⇒ ⛔ 读成功而标签空或缺席不读作没有标签:按 `data-name=` 确认,否则整集作 UNKNOWN。
244243
- 可达时优先加法端点;⛔ 单读与单次即时读回都不决断。
245244
- ⇒ union-write 欠一次延迟确认;必需标签(如 `skip-changeset`)其后每次触碰重核。
245+
- objectui labeler 带 `sync-labels: true`:PR 标签按路径整集重算,手打的下次 push 即失,⛔ 不重挂。
246246
- `list_issues` 永不返回 assignees:`fields` 枚举无此成员,不传也没有。
247247
- 已认领卡与空闲卡响应逐字节相同,清单只是候选名单 ⇒ 认领前必须过完整 `issue_read`。
248248
- `comments` 计数会多读:实测 1 而列表与 timeline 双 0 ⇒ 线程空否读那两条,⛔ 不读计数。
@@ -301,8 +301,8 @@
301301
- cancel-in-progress 窗口只罩得住慢载体 ⇒ 先比对 run `head_sha` 与 PR 当前 head,不开调查。
302302
- 两仓 CI 并发组都按 PR 号不按 head:重跑过期 head 取消当前 head 的 run ⇒ 重跑是写不是读。
303303
- CI 红了先取完整日志归档再下结论:断言文本只在归档里,直读工具拿不到。
304-
- `get_check_run` 回空 `output.text`;`get_job_logs` 无论 `tail_lines` 只回尾部的 service-container teardown。
305-
- ⇒ 两者都答不了到底挂在哪;`GET /actions/jobs/{id}/logs` 被出口代理拒绝,CONNECT 403。
304+
- `get_check_run` 回空 `output.text`;`get_job_logs` 带 `tail_lines` 只回尾部的 service-container teardown。
305+
- ⇒ 改带 `return_content: true` 整份日志回包(2026-09-20 一 job)⇒ REST 腿被拒只是该腿的读数。
306306
- 失败 step 名免下载即得:`actions_get method=get_workflow_job`。
307307
- check-run annotations 端点带退出码与失败命令,是免归档的第二条便宜读。
308308
- 真实断言文本走 run 日志归档:`actions_get method=get_workflow_run_logs_url` 后下载解压。
@@ -345,6 +345,7 @@
345345
- 改侧 · 裸 REST `PATCH /pulls` 恒追加一条裸页脚并保留既有页脚,差恰 58 字节,与尾部无关。
346346
- 尾部已是 `---` 加页脚块也照追加,重送复现 ⇒ 建侧的不追加判据 ⛔ 不外推到改侧。
347347
- 同路送无页脚正文存回恰一条(平台裸形)⇒ 该格处方是不送页脚,⛔ 不是不重送正文。
348+
- 该追加按面不按路由:`PATCH /issues/{n}` 打在 PR 上同样 +58 追加裸页脚,而 draft 位不动。
348349
- 页脚两拼写:裸版与 session-URL 版都要剥,漏剥的卡在正文中段,而 58 字节差照常。
349350
- ⇒ 代价是归属:裸形无 session id,按此剥净的 PR 正文不载明哪个会话写的;另置见 AGENTS.md。
350351
- 第四形:建 PR 两通道同判 —— 送出体尾部不是 `---` 加页脚块时,追加一条同形页脚。
@@ -411,7 +412,7 @@
411412
- MCP `issue_write create` 落库丢掉正文尾部的署名页脚块,正文其余部分完好。
412413
- MCP `issue_write` update 送尾部横线加页脚块则两者同被吃掉,而调用照常回 id 与 url。
413414
- 建卡走 REST `POST /issues`:带页脚存活,无页脚合成恰一条(+58);回读后 `PATCH` 重送逐字节存下。
414-
- issue 正文 `PATCH` 识别按整块:送全块或不送页脚都存回恰一条,已有页脚归一末尾不复制。
415+
- 真 issue 正文 `PATCH` 识别按整块:送全块或不送页脚都存恰一条,已有页脚归一末尾不复制。
415416
- 无横线的裸页脚不算页脚:它被保留而整块另追加,总数二 ⇒ 恒一条只对上行两输入成立。
416417
- 该格两空:MCP 送裸页脚、`title`/`labels` 单字段 `issue_write` 是否动页脚,均未实测。
417418
- issue `PATCH` 同体带 `labels` 与 `type` 回 500 且零写入;拆两次写各 200,已带 type 的卡未实测。

0 commit comments

Comments
 (0)