Repository navigation
docs(pm-dispatch): record the dequeue actor, the footer surface axis and objectui's label stripper - #19734
Conversation
…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>
…atform-readings-four-rows
Contract reviewServed-tier: ① Derived judgmentsRendered in-seat by the skills seat 1 session at the served tier the maintainer named on this date (the fable tier word at
② Semver levelNone — no release. ③ Boundary flags
Implemented-by: VERDICT: PASS Generated by Claude Code |
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 wasre-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):16states the SUCCESS sequence carriesremoved_from_merge_queue,:17gives the disambiguator (nomergedafter it, PR still open). The branch-listing refinement was also already there::63(只在存在时有意义) plus:64and:44. Uncovered delta: the actor —grep github-merge-queuereturned 0. That delta is what this PR adds.:345coversPATCH /pullson a PR;:414covers the issues route on a real issue. The measured cell — the issues route aimed at a pull request — was absent.:125job 日志只有 MCP 取得回,REST 侧转 blob 存储, with the general form at:122and the action form at:123. Self-bound Routine::457自绑唤醒的是已存在的会话、工具已加载.What changed (6 insertions, 5 deletions, one file)
Recorded:
:348(new) — the footer append follows the SURFACE, not the route: an issues-routebody PATCH aimed at a pull request takes the same +58 bare-footer append, and leaves the
draft bit alone.
:414is scoped to a real issue in the same edit, so the pair now stateswhich axis it varies on.
:245(new) — objectui's labeler runs withsync-labels: true, so the PR label set isrecomputed 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 carrygithub-merge-queue[bot], so the actor discriminatesnothing. This is the one piece of
removed_from_merge_queuefires on a SUCCESSFUL merge too — 3 of 5 on this board today were merges, so the event is not a failure signal #19343 the file lacked.:304/:305— the old pair readget_job_logs 无论 tail_lines ... ⇒ 两者都答不了到底挂在哪,which is exactly the misreading [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 was filed about. Scoped to
tail_linesand corrected:with
return_contentthe whole log came back. The REST-leg clause retired into:125, whichalready carries it.
Line budget — the ceiling is not raised
:64⛔ 它的缺席不是任何方向的读数。Its fact is stated twice more in the same file —
:63gh-readonly-queue/* 只在存在时有意义(only meaningful when present, i.e. absence says nothing) and
:44ref 缺席只作旁证,⛔ 永不承载结论.scripts/pm/check-skill-line-ratchet.mjs(table rows are structurally exempt and this file'stable-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 head3bfd45c32after 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 0andpnpm check:nul-bytes :: exit 0.pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst 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.
skip-changesetis correct and measured, not assumed: of 70 non-private manifests (all 70declare
files[]), 0 have a package root containing the changed path; positive controlpackages/spec/package.jsonis contained by exactly 1 published root, so the instrument fires.Scope notes (filed, not fixed here)
Part of, not a closing keyword. Its footer half isrecorded here, but the card also carries a second measured reading that is still absent from the
file (
grep merge_commit_sha⇒ 0, lit controlgrep -c auto_merge⇒ 3): a queued open PR'smerge_commit_shanames an anticipated commit that is not on main and may never be. Closing thecard would hide that half from every open-only filter, which
:445warns about. The seat decides.already covered is not closed by the dev. The
:304/:305correction it motivated is includedanyway, because the old wording actively produced the error the card describes.
红窗里 draft 翻转 ... 照常走 ccr REST,⛔ 不为它们守候(:145/:146) and⛔ 满余额不放行 undraft:同分钟满额而 ccr 路 429(:163, with:49/:50). A seat could actwrongly on either. Noted, not touched — resolving it needs a measurement this card did not take.
neighbouring line that refines it:
:253/:318(the MCP read path swallowing angle-bracketfragments inside inline code spans) and
:260/:322(counting empty inline code spans as thediscriminator). Left for a seat that can judge the collateral.
Deviations, declared
scripts/pm/check-skill-id-lint.mjsscans every.mdunder.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.
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 --prreading is in the report comment on #19343.Generated by Claude Code
Generated by Claude Code