Skip to content

docs(pm-skills): the multi-label page truncates into a false-empty lane, and the arming echo is not the landing method - #18713

Merged
os-justin merged 1 commit into
mainfrom
claude/issue-18461-list-issues-or-filter-and-arm-echo
Sep 17, 2026
Merged

os-justin merged 1 commit into
mainfrom
claude/issue-18461-list-issues-or-filter-and-arm-echo

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #18461

Clause-②: no

One file: .claude/skills/pm-dispatch/references/platform-readings.md, held at 466 / 466 (headroom 0,
widest line 120 B). No ceiling raised. Net line change 0: one row rewritten in place, one row added, one
payment taken in the same file. skip-changeset.claude/** is shipped by no package's files[], so
nothing published moves.

Reserved rows are untouched and verified by content: :10:12 and :431 (#18469 PR-A's pending patch),
:209 (PR #18666's one-line change, awaiting the maintainer — it rides at :208 after the payment, byte
identical), and the nine rows PR #18689 adopted an hour before this branch (:28, :85, :249, :277:278,
:291, :347, :357, :393, :410 — none appears in any hunk of this diff).

Row ② — rewritten in place at :50

Ruling reference: the maintainer's letter A on #18421, comment 5716260764 (2026-09-17T14:41Z, 「同意」).
Its operative conclusion is the one this row carries: auto_merge.merge_method is not a reading of what will
land
— the landing shape is the merge queue's to decide.

before (120 B, the falsified form):

- 挂上的 auto-merge 存的方法恒为 `merge`,不论请求了什么;REST `auto_merge.merge_method` 读回 `merge`。

after (117 B):

- auto-merge 回读 `merge_method` 不恒定:同 `SQUASH` 载荷 `merge`/`squash` 皆现,⛔ 非落地方法判据。

Why 「不恒定」 and not either constant. 「恒为 merge」 is falsified by this card's four PRs; 「恒为
squash」 is falsified by the same table's first row and by the ruling's own measurement. Same endpoint
(PUT .../pulls/{n}/ccr/auto_merge), same {"merge_method":"SQUASH"} payload:

PR echoed merge_method landed as
#18395 merge single-parent squash
#18392 squash single-parent squash
#18416 squash single-parent squash
#18445 squash single-parent squash

The #18421 ruling measured the same endpoint answering merge (both arming channels, MCP and CCR), and the
dispatching seat's own arms today echoed squash on PR #18689 / #18690 / #18700 and merge on earlier ones.
Four landings, two echoes, one landing shape ⇒ the echo varies and decides nothing. A row asserting either
constant would teach a seat to investigate a read-back that is simply not a signal.

Neighbours left as they are. :49 is about the bare PATCH draft bit — unrelated. :51
(「仓库 allow_merge_commit:false 时同样读回 merge」) does not restate 「恒」: it is one conditioned
measurement, and 「同样」 now attaches to merge, which the rewritten row names as one of the two observed
values. :53:55 already carry the landing half (the branch rule decides; three carriers agreeing proves
nothing) and are untouched — the row above them no longer contradicts them.

Row ① — added at :272

after (118 B):

- 多标签页还静默截断:`totalCount` 231 而 `returned` 30,单标签同车道 24/24 ⇒ 求交读成空车道。

Placement — a declared deviation from the dispatch. The dispatch named the :247:248 neighbourhood
(the MCP list_issues rows). The OR half of this reading is already in the file, in the 读数陷阱 cluster at
:269:274: :269labels 数组是并集」, :270 「⛔ 永不读作交集」, :272 「失效全静默」, :273
「正确读法 = 整车道单标签一次读全加本地对 labels 求交」. Writing the new row at :247 would have put a second
home for the labels-OR fact six rows away from the first — the same duplication the dispatch forbids for row ②
(one row for one fact, never two). So the row is placed where the fact it compounds already lives: directly
between the silent-failure row :272 and the prescription :273, which it is the reason for. The fact
delivered is unchanged; only the address is.

What the row adds over :269:274. Those rows carry the OR semantics and the prescription. They do not
carry the truncation, and the two compound: the returned page is a fraction of the set with nothing in the
response saying which fraction, so a local intersection taken over that page can return zero and read as
「本车道无活」. The measurement is inside the row: labels=["domain:cli","pm:queue"] answered totalCount=231
with returned=30, while the single-label query on the same lane in the same minute answered 24 / 24 —
complete, and intersectable. That is what makes :273 load-bearing rather than a style preference.

The payment — one dedup, :202+:203 become one row

payment before after fact lost
:202+:203 「换道:探针绿走 REST 列表端点 GET /repos/{o}/{r}/issues?state=open&labels=a,b&per_page=N。」 + 「它走 core 桶且 labels 是真 AND;⛔ 完整性自证靠 &page=N 加总数核对。」 「换道:探针绿走 REST 列表端点列卡,走 core 桶且 labels 真 AND;拼写与自证见 rest-channel.md。」 (118 B) the inline endpoint spelling and the &page=N-plus-total spelling — both held verbatim in rest-channel.md 〈读侧〉, which :137 already names as their single home (「逐操作通道归属、写侧配方与队列路由三读法见 rest-channel.md,⛔ 不在本表复述」). The two facts the row keeps inline are the ones a seat needs before it switches channel; labels being a true AND on REST is also stated in-file at :274, and the core bucket at :115 / :128.

Net: 3 lines changed, 466 in, 466 out.

Gate readings

node scripts/pm/check-governed-merges.mjs --test .claude/skills/pm-dispatch/references/platform-readings.md
exits 3 = GOVERNED (.claude/** ×1) — recorded as the verdict it is. This PR stays draft; no seat flips it
ready, enqueues it or arms auto-merge. The references tier applies: the skills seat's ## Contract review
record goes on this thread, and the seat lands it.

  • pnpm check:pm-skill-ratchet :: exit 0 — 「platform-readings.md is 466 lines (ceiling 466; headroom 0)」,
    「widest table row is 0 bytes (pin 0; headroom 0)」; no line over 120 B (awk 'length > 120' returns nothing).
  • pnpm check:skill-frame-sync :: exit 0 — 「the one declared copy of the decision frame is internally
    coherent … 4 axes … 74 markdown files scanned for undeclared copies」.
  • pnpm lint (repo-wide, eslint . --no-inline-config) :: exit 0.
  • grep -naP for control characters over the file: no hits. No tag-shaped fragment in either new row.

Derived gate list, with exit codes

Derived from the worktree with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack
(no hand-fed paths; change set 1 path vs merge base 72dd95fa5), every command run, each exit code captured by
redirect-then-$?:

node scripts/check-closing-keyword-parity.mjs                       :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test           :: exit 0
node scripts/check-comment-mask-corpus.mjs                          :: exit 0
node scripts/pm/check-governed-queue-guard.mjs --self-test          :: exit 0
node scripts/pm/check-harness-current.mjs --self-test               :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions   :: exit 0
pnpm check:agent-test-spelling                                      :: exit 0
pnpm check:doc-authoring                                            :: exit 0
pnpm check:driver-memory-census                                     :: exit 0
pnpm check:nul-bytes                                                :: exit 0
pnpm check:pm-governed-merges                                       :: exit 0
pnpm check:pm-half-states                                           :: exit 0
pnpm check:pm-skill-id-lint                                         :: exit 0
pnpm check:pm-skill-ratchet                                         :: exit 0
pnpm check:refd-timer-probe                                         :: exit 0
pnpm check:required-contexts                                        :: exit 0
pnpm check:skill-frame-sync                                         :: exit 0
pnpm check:watch-hint-literal                                       :: exit 0
pnpm check:pm-settings-deny-roster                                  :: exit 0   (outside the derivation; run
                                                                                 because its roster lives under
                                                                                 .claude, which this path is in)

check:doc-formula-expressions first exited 3 — PREREQUISITE NOT MET (@objectstack/formula and
@objectstack/lint not built, 「Nothing was measured」). It was re-run to a real verdict after
pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint through
scripts/pm/os-verify-lock.sh (VERDICT command-exit 0, held 1s, waited 0s); only the exit 0 is recorded above.

Reconciliation: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.txt
「18 derived famil(ies) accounted for — 18 run, 0 NOT-MEASURED (a DERIVED zero — all 18 recorded an exit code
and none of them is 3)」. Outside that union: the 53 artifact-roster families, 11 wide-population families,
14 changeset-pending families and the CI-only families (--verify-required-set, check-half-states --provenance) — CI's, not this branch's, and named here so their absence is not read as a clearance.

Out of scope, reported not written

The card's third item — scripts/pm/check-expected-skips.mjs cannot run in a seat container
(ERR_MODULE_NOT_FOUND: Cannot find package 'yaml') — is not a references line and is not written here. In this
worktree, after pnpm install, [email protected] is present; the crash is a property of the container the seat runs
it from, not of the script.

Generated by Claude Code


Generated by Claude Code

…ne, and the arming echo is not the landing method

Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu
Co-authored-by: Claude <[email protected]>
@os-justin os-justin added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 17, 2026 — with Claude
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 17, 2026

Copy link
Copy Markdown
Collaborator Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 0e783e659cd528508f55e3b3e7c06f906eccdad0

Review of record on the PR thread (the Governed Surface Guard's merge_group leg reads this thread alone — #18701). In-seat review of PR #18713 (#18461) by the dispatching domain:skills seat, 2026-09-17T16:28Z, read against the PR's diff, files and head on GitHub and a scratch worktree at the head — ⛔ not against the dev report (5717770330). Clause-②: no on the PR body and on the claim (5717478127); check-clause2-carriers --pair 18713 answers 0. Fact-layer landing: the one file is .claude/skills/pm-dispatch/references/platform-readings.md, so check-governed-merges --pr 18713 answers GOVERNED (exit 3, .claude/** ×1) and the seat lands it on this review of record — the references/** carve-out the SKILL names.

① Derived judgments

② Semver level

None — no package is touched; skip-changeset on the PR is correct for .claude/**.

③ Boundary flags

  • Dev's open_questions: none. Stop conditions: none fired. One declared placement deviation, accepted above.
  • Out-of-scope findings: (1) the yaml gap in a seat container — carried on [finding] platform-readings: the list_issues labels filter is OR and truncates (can read as an empty lane), and auto_merge's stored merge_method is not always merge #18461 itself, not a references line; (2) the PR-body create channel appended a 90-byte rule-plus-session-URL footer under a footerless-tail body — a confirming measurement of :348–:350 / :412, not a new fact.
  • Gates: 18 derived, 18 run, 0 NOT-MEASURED, all exit 0 per the report (doc-formula-expressions first PREREQUISITE, rebuilt through the verify lock and re-run at 0); seat-side on the head: ratchet 0, frame-sync 0, over-120 0, --pair 0, GOVERNED exit 3, harness CURRENT. CI on the head at review time: 13 success, 12 skipped, 4 in progress; the landing pre-check re-reads every run completed and none failure before the ready flip.
  • Writes: api_writes 3 (draft PR, skip-changeset via label-write read back, this report), mcp_calls 0, PR body written once at create — within budget.
  • Independence pair: mode:subagent build, in-seat review by the dispatching seat at CONTRACT_REVIEW_TIER — by design per contract-review.md, not SELF-REVIEW.

Implemented-by: claude/issue-18461-list-issues-or-filter-and-arm-echo
Reviewed-by: session_01Gqi43smmqjJ5sUrhfoPeKu

VERDICT: PASS


Generated by Claude Code

@os-justin
os-justin marked this pull request as ready for review September 17, 2026 16:38
@os-justin
os-justin added this pull request to the merge queue Sep 17, 2026
Merged via the queue into main with commit 080688b Sep 17, 2026
32 checks passed
@os-justin
os-justin deleted the claude/issue-18461-list-issues-or-filter-and-arm-echo branch September 17, 2026 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants