Skip to content

docs(pm-dispatch): record the dequeue actor, the footer surface axis and objectui's label stripper - #19734

Merged
huangyiirene merged 2 commits into
mainfrom
claude/issue-19343-platform-readings-four-rows
Sep 22, 2026
Merged

huangyiirene merged 2 commits into
mainfrom
claude/issue-19343-platform-readings-four-rows

Conversation

@huangyiirene

@huangyiirene huangyiirene commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

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

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):

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)

  • platform-readings records the body-PATCH footer behaviour by ROUTE; measured, it follows the SURFACE — the issues route on a PR doubles the footer #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.
  • [finding] a job log refused over REST is still readable through the MCP read tool — a seat mis-read one blocked channel as no channel and mis-diagnosed a queue ejection #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


Generated by Claude Code

…and objectui's label stripper

Four platform-fact rows were dispatched for this file; two were already
covered on the base and are dropped with evidence rather than restated.

Added / corrected:
- the dequeue actor: both queue exits carry github-merge-queue[bot], so the
  actor discriminates nothing (the event and the PR-state disambiguator were
  already present).
- the attribution footer follows the SURFACE, not the route: an issues-route
  body PATCH aimed at a pull request takes the PR surface's +58 bare-footer
  append while leaving the draft bit alone; the issue-surface row is scoped to
  a real issue.
- the job-log row: get_job_logs is refused only with tail_lines; with
  return_content it returned the whole log, so the tool is not the dead end the
  row implied.
- objectui's labeler runs sync-labels, recomputing the whole path-derived label
  set, so a hand-applied PR label dies on the next push and re-applying loses
  the same race again.

Paid for by retiring one provable duplicate so the ceiling is not raised.

Claude-Session: https://claude.ai/code/session_01Wnstp2kTth7sGXfr8fXypc
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 22, 2026
@huangyiirene huangyiirene added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 22, 2026 — with Claude

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 3bfd45c3217955bc6aa7aaed5b8b8d0fb024e4e7

① Derived judgments

Rendered in-seat by the skills seat 1 session at the served tier the maintainer named on this date (the fable tier word at get_session → external_metadata.last_served_model, re-read this hour; ruling record 5771798588). The contract is the family's four first-touch gradings by domain:skills#2 (5752859586 / 5762277902 / 5752867836 / 5753145274 — class 平台事实变化 → a fact row in references/platform-readings.md, one PR for the family) with the refinement 5749955497 on the anchor, each row owed only where the base lacked or misstated the fact; the file's ceiling 469 paid by provable duplicates, every line ≤ 120 bytes, ⛔ nothing outside the one file.

  • (a) The diff — measured by this seat on a review worktree at the head. Two commits on the branch (the change, then a merge of origin/main — the squash at landing yields one parent); merge base e37ea4d06; one file, .claude/skills/pm-dispatch/references/platform-readings.md +6 / −5; 469 lines after (468 before), ceiling 469, headroom 0, the ratchet row untouched; lines over 120 bytes: 0. Two rows added (:245 the objectui labeler, :348 the footer axis), three amended in place at zero net (:17 the actor, :304 / :305 the job-log pair, :414 scoped to a real issue), one duplicate retired (old :64).
  • (b) Premise per card, re-measured by this seat on the base and the head. removed_from_merge_queue fires on a SUCCESSFUL merge too — 3 of 5 on this board today were merges, so the event is not a failure signal #19343 partly valid: :16 / :17 already carried the success sequence and the disambiguator, :63 / :44 the queue-ref reading — the one missing piece was the ACTOR, and the card's own table has github-merge-queue[bot] on all five exits: :17 now says so. finding(platform-readings): objectui's labeler runs with sync-labels: true, so a hand-applied PR label is silently removed on the next push — and the four-step read-back happens inside the window where it still looks fine #19179 valid: labeler / sync-labels had 0 hits on the base; the card measures objectui's actions/labeler@v7 with sync-labels: true rewriting the PR label set wholesale on every push — :245 states it and the ⛔ not to re-apply. platform-readings records the body-PATCH footer behaviour by ROUTE; measured, it follows the SURFACE — the issues route on a PR doubles the footer #19390 valid for the footer half: :345 covered PATCH /pulls on a PR and :414 the issues route on a real issue; the measured cell — the issues route aimed at a pull request, +58 bare footer appended, the sent footer kept — was absent and is :348; :414 is scoped to 「真 issue」 in the same edit so the pair states its axis. [finding] a job log refused over REST is still readable through the MCP read tool — a seat mis-read one blocked channel as no channel and mis-diagnosed a queue ejection #19404 FALSIFIED on both halves: :125 (job logs come back over MCP only; the REST side turns to blob storage) with :122 / :123, and :458 on the head (the self-bound Routine wakes an existing session with its tools loaded) were on the base — no row owed; the old :304 / :305 wording (「两者都答不了到底挂在哪」) was the very misreading the card was filed about, and the card's measurement (get_job_logs with return_content: true returned the whole 24013-character log on the first call) is what the corrected pair now states.
  • (c) The payment is provable. Old :64 「⛔ 它的缺席不是任何方向的读数」 restated :63 (the queue ref is meaningful only when present) and :44 (a missing ref is corroboration only, ⛔ never carries a conclusion) — both read on the base by this seat. The REST-leg clause of old :305 (GET /actions/jobs/{id}/logs refused, CONNECT 403) survives at :125.
  • (d) The dispatch's own errors, corrected by measurement. Zone 1 asked each row to carry its source card number — scripts/pm/check-skill-id-lint.mjs reds on #NNN anywhere under .claude/skills/pm-dispatch/, the file carries none today, and AGENTS.md states the same principle: numbers omitted, dates kept where load-bearing, check:pm-skill-id-lint 0 (30 files). The prescribed first line named all four cards: two were dropped on the evidence in (b) and reported, not chosen silently. Row 3's second premise (the Routine surface) and Row 3's first (the channel) were both already in the file — the dispatch's 「still absent」 was wrong on that card.
  • (e) Gates — re-run by this seat on the review worktree at the head after pnpm install --frozen-lockfile --offline. check-skill-line-ratchet.mjs 0 (the file 469 / 469) and its self-test 0 (157 cases); check:pm-skill-id-lint 0; check:nul-bytes 0 (9233 files); check:pm-skill-ratchet 0; check:skill-frame-sync 0; check-governed-merges.mjs --pr 19734 exit 3 — GOVERNED, Tier S (.claude/** ×1, 11 changed lines); check-expected-skips.mjs --pr 19734 0 (12 skipped check runs, every one in the roster). The dev's derivation: 20 families by dispatch-gates.mjs --commands, re-derived identical after the base merge, --ran 20 / 20 / 0 NOT-MEASURED (one first-pass exit 3 prerequisite on check:doc-formula-expressions, cured by the declared build through the verify lock, re-run 0). CI at this head at the seat's read: 26 latest-per-name check runs — 15 success, 11 skipped, 0 in progress; Lint & Repo Gates and the Governed Surface Queue Guard success. Check Changeset ran twice on this head: the run before the skip-changeset label failed, the run after it reads skipped and is in the roster — the bar's latest-per-name reading is the second, ⛔ not a red.

② Semver level

None — no release. .claude/** is in no package's files[] (the dev measured 70 manifests, 0 containing the path, with packages/spec/package.json as the lit control); skip-changeset written through label-write.mjs with read-back — the write was refused once by the shared pace budget and retried at the named instant, as dispatched.

③ Boundary flags

Implemented-by: claude/issue-19343-platform-readings-four-rows
Reviewed-by: session_01Wnstp2kTth7sGXfr8fXypc

VERDICT: PASS


Generated by Claude Code

@huangyiirene
huangyiirene marked this pull request as ready for review September 22, 2026 15:14
@huangyiirene
huangyiirene added this pull request to the merge queue Sep 22, 2026
Merged via the queue into main with commit af4f8ee Sep 22, 2026
38 of 39 checks passed
@huangyiirene
huangyiirene deleted the claude/issue-19343-platform-readings-four-rows branch September 22, 2026 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment