Commit fcba191
docs(pm-skill): carry the enqueue-row lag caveat on the queue-membership rows (#18457)
Fixes #18439
An in-place re-key of
`.claude/skills/pm-dispatch/references/platform-readings.md` rows
:10–:12 (the 队列成员资格与 auto-merge opening block). The rows are TRUE as
written and stay decisive; what they lacked is the enqueue row's
read-back caveat. No new row, no other row, and the timeline pair stays
the decisive re-readable reading. File holds at 466 / 466 (ceiling 466,
headroom 0); every changed row is under the 120-byte cap.
## 维护者速读(草稿)
**改了什么** — pm-dispatch 事实表里判「这个 PR
在不在合并队列」的三行(:10–:12)原地重排,总行数不变。新增的是入队行的读回窗口这一事实:入队行通常即时可读,但曾实测在入队后 +75 s
仍读不到、随后以入队时刻回填出现。三行现在同时说清:决断读数仍是 timeline 的那对事件、它可重查、短窗内读不到不算否定读数、要复读。
**为什么改** — 这不是某行写错了,是事实表对一个已被两个席位撞上的失败模式保持沉默。席位在自己入队后立刻读
timeline,读到空就当成「没入队」,然后照这个假读数行动;文件从未授权这么读。两次代价已经发生:一张卡因此立错(前提随后被证伪),另一份读数因此写偏。补上这一行等于把「再读一次」变成写死的处置,而不是每个席位自己踩一遍。
**风险与代价(含回滚)** — 风险低:只改事实表的三行散文,无代码、无产物、无发布面。代价是三行都被压到 120 字节上限附近(119 /
118 / 119),后续要往这个区块加字得先腾地方;`可重查` 从 :11 挪到了 :10,`分得开未入队与被踢` 从 :12 挪到了
:11,读这几行的人看到的顺序会变。回滚 = revert 这一个 commit,文件回到原样,行数与上限都不动。
**席位意见** — (留空,待席位定稿)
**你要做的** — 读下面的 before / after 三行,确认措辞与你读这张表时的用法一致;认可就把这个 draft
转正并按队列落地。
## Rows, before → after
Bytes measured with `wc -c` on the on-disk line (cap `MAX_LINE_BYTES` =
120, `scripts/pm/check-skill-line-ratchet.mjs`).
| Row | Before | After |
|:---|---:|---:|
| :10 | 115 B | 119 B |
| :11 | 93 B | 118 B |
| :12 | 114 B | 119 B |
| file | 466 lines | 466 lines (ceiling 466, headroom 0) |
Before:
```text
- 判在不在合并队列的决断读数是 timeline 事件 `added_to_merge_queue` / `removed_from_merge_queue`。
- 拼写 `GET /repos/{o}/{r}/issues/{pr}/timeline`:可按需重查、一次调用双向答。
- 它分得开从未入队与入队后被踢;`pull_request.enqueued` webhook 推送式不可重读,只作旁证。
```
After:
```text
- 判在不在队列的决断读数是 timeline 事件 `added_to_merge_queue` / `removed_from_merge_queue`,可重查。
- 拼写 `GET /repos/{o}/{r}/issues/{pr}/timeline`:一次双向答,分得开未入队与被踢;webhook 不可重读。
- 入队行通常即时可读,曾实测 +75 s 缺席 ⇒ 短窗缺席非读数,复读;`pull_request.enqueued` 旁证。
```
Every fact the three rows carried before is still carried: the decisive
timeline events and their two spellings, the REST spelling,
re-readability, the one-call-both-directions property, the
never-enqueued / kicked discrimination, the `pull_request.enqueued`
name, that the webhook cannot be re-read, and that it is corroboration
only. Three facts are new, all measured and recorded on the card: the
enqueue row is normally readable at once; it was once measured absent at
+75 s; therefore a short-window absence is not a reading and the
prescription is to re-read.
Wording that had to give to pay for the three new facts, none of it a
fact:
- `合并队列` → `队列` on :10 (the block heading already reads 队列成员资格与
auto-merge).
- `可按需重查` → `可重查`, and the clause moved from :11 up to :10.
- `一次调用双向答` → `一次双向答` (「一次…答」 already says one call).
- `它分得开从未入队与入队后被踢` → `分得开未入队与被踢`, moved from :12 up to :11.
- `推送式不可重读,只作旁证` split: `不可重读` stays on :11 next to the timeline's `可重查`
(that is the contrast the new 复读 prescription rests on), the role
shrinks to the one word `旁证` on :12 beside the event name.
## The two measured facts and where they come from
Both were read through the row's own REST spelling, on this repository,
and both live on the card:
- **Normally readable at once** — present at +10 s and again at +46 s
(comment 5696739885), at +27 s (comment 5696508188), and at +8 min
(issue body). Row `created_at` is one second *before* the
`pull_request.enqueued` webhook reached the reading seat in both of the
short-window cases.
- **Once measured absent at +75 s** — two PRs read no enqueued row at +0
s and +75 s, then read back backdated to the enqueue instant (the spec
seat's reading, cited in the card body).
The row states both and invents no bound: 「通常即时可读」 and 「曾实测 +75 s 缺席」
are exactly what was measured. Nothing in the range between +75 s and +8
min was measured and the row claims nothing there.
## Deviation from the dispatch's suggested wording
The dispatch suggested the consequence read 「复读,或以队列 ref + 落地为再读对」. The
second half is **not** in the landed row, for two reasons, and no row
was added to resolve it (the card forbids that):
1. **Budget.** The caveat alone costs about 98 bytes on its own row;
`:12` after it holds 119 of 120. The queue-ref-plus-landing clause is
roughly another 40 bytes and there is no row in :10–:12 with that much
slack — the only way to buy it is to drop a measured fact that has no
other home.
2. **It would make `:12` contradict `:60`–`:61`, which the card says
stay as they are.** Row :60 reads 「队列 ref 答 BUILD
不答成员资格:`gh-readonly-queue/*` 只在存在时有意义,即有 build 在跑。」 and :61 reads 「⛔
它的缺席不是任何方向的读数。」 Promoting the queue ref to the fallback membership pair
reads straight across those two. The fallbacks a reader needs are
already in the file and unchanged: :19 (落地检查恒两个读数), :59 (效果读数 =
阳性探针、timeline 入队事件、最终落地) and the two positive membership probes at
:63–:66.
`复读` is the prescription the new facts actually license, and it is the
one the row carries.
## Gates
`node scripts/pm/dispatch-gates.mjs --commands` from this worktree, no
paths, derived against merge base `66abef3fd`: **16 families, 16 run, 0
NOT-MEASURED, 0 UNRUN** — reconciled with `--ran` recording `command ::
exit code`, and the tool reports the zero as DERIVED, not claimed. All
16 exit 0.
Named on the card and green: `pnpm check:pm-skill-ratchet`
(`platform-readings.md is 466 lines (ceiling 466; headroom 0)` and
`every line is within 120 bytes`), `pnpm check:pm-skill-id-lint`, `pnpm
check:skill-frame-sync`. `pnpm check:pm-governed-prose` is not in the
derived set (it is one of the 53 artifact-roster families whose silence
is a fact about a list, not about these paths) — run anyway, exit 0.
`pnpm check:pm-settings-deny-roster` is the one roster family whose list
sits under `.claude`, where the derivation says silence is evidence in
neither direction — run anyway, exit 0. `node
scripts/check-skills-token-ratchet.mjs` (published `skills/`, not this
tree) also run, exit 0.
One gate first refused rather than failed: `pnpm --filter
@objectstack/lint run check:doc-formula-expressions` exited **3** with
`PREREQUISITE NOT MET — the workspace package @objectstack/formula is
not built`. That is NOT MEASURED, not a finding. Built its two
prerequisites through the shared verify lock (`VERDICT command-exit 0 ·
held the lock 147s`) and re-ran it: exit 0, `9 @example(s) judged
clean`.
Repo-wide scans (`pnpm lint` and the 11 wide-population families, the 14
changeset-derived families, the CI-measured and workflow-valued
families) are CI's run, not this worktree's.
## Changeset
None — `skip-changeset`, on AGENTS.md Post-Task Checklist step 3's own
arm: 「⛔ never `skip-changeset`: that label is for a diff that publishes
nothing from any released package」. Measured rather than assumed: 24
workspace manifests scanned, **0** declare anything under `.claude` in
`files[]`; positive control, `packages/spec`'s `files[]` resolves to
real shipped paths (`dist`, `json-schema`, `api-surface`, …). The diff
is one file under `.claude/skills/`, which no released package ships.
## Acceptance notes
- Scope held to this card: rows :10–:12 of one file, one commit, 3 lines
changed, 0 added, 0 removed.
- `premise_still_valid: true` — the three rows were re-read on this
branch's base (`origin/main` had advanced from `b6fe311a` to `66abef3f`
between dispatch and worktree creation; `git diff b6fe311..HEAD` on
this path is empty, so the quoted wording is byte-identical to what the
card quotes).
- The timeline pair is not demoted and no row was added — both explicit
stop conditions on the card.
- ⛔ Not addressed here and left open on purpose: nothing. No
out-of-scope defect was found in this block.
- Note, not a filing: rows :10–:12 now sit at 119 / 118 / 119 of 120
bytes and the file at 466 / 466, so this block has no slack left in
either dimension. The next fact that has to land here needs the ceiling
raise the file's own quota section governs, not a squeeze. 承接者:the next
PR that re-keys this block.
- No model identifier appears in this branch's title, body, commit
messages or comments; the commit carries the model-free trailer pair and
no card relation (AGENTS.md).
---
_Generated by [Claude
Code](https://claude.ai/code/session_01HPfcjvF23QBoBj7P47DDxs)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent bdd0570 commit fcba191
1 file changed
Lines changed: 3 additions & 3 deletions
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
12 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| |||
0 commit comments