Repository navigation
pm-dispatch references: platform-facts sweep — five measured deliverables across four member cards #8455
Description
Activity
Evidence refinement for member item 5's
enable_pr_auto_mergerow, measured live this shift (2026-08-13 ~14:29–14:30Z, two attempts): passing an explicitmergeMethod: "SQUASH"on this repo still echoes(method: MERGE, …)— the parameter is coerced/overridden, most plausibly by the merge queue governingmain(whose landed history is one commit per PR regardless). The row's wording should therefore anchor on the failure signal, not the method name: an emptymethod:in the echo is the silent-no-op signal; a non-empty echo (evenMERGE) has landed PRs on this repo through the queue. Keep the "always pass an explicit mergeMethod" instruction, but do not assert the echo will read backSQUASH— the implementing dev should fold this into the same row.
Generated by Claude Code
Scope amendment (member item 6 added) — from the Part-of/auto-close investigation card's grading: the protocol fallback half of that card (make "re-pull the lane inventory after every merge and diff it against the expected state" an explicit post-merge step where the landing text lives, i.e.
references/landing-operations.md) moves INTO this sweep. Reason: that one line is.claude/skills/pm-dispatch/**text and therefore under the fable-mandatory clause — it rides this sweep's fable dispatch instead of upgrading a whole investigation card's model for one sentence. The step is justified by the measured incident alone (it is what caught the wrongly-closed card), independent of what the mechanism investigation concludes. The investigation card itself stays scoped to the timeline-mechanism read + thescripts/pm/check-half-states.mjscontradiction guard, onopus.
Generated by Claude Code
Scope amendment (member item 7 added) — from the Part-of/auto-close investigation's ACCEPT: the author-side keyword-hygiene rule, one deliverable in
references/review-checklist.md's PR-shape section (beside the existingFixes-vs-Part offirst-line rule): GitHub's closing-keyword parser bindsclose/fix/resolve(+inflections, but NOT gerunds) to a#Non the same line and ignores all surrounding prose — negations, modals, and warnings included; the sentence written to prevent an auto-close is exactly what performed one. Therefore: ⛔ never put a closing keyword next to another open card's number in a PR body; write "card N is not addressed here" / "out of scope: card N", or put the keyword in backticks (measured: code spans do not fire). Reviewers check the PR body for this shape before ready-flip on anyPart ofPR; a report-only detector for the contradiction also patrols it.Evidence and phrasing source: the mechanism record now in
scripts/pm/check-half-states.mjs's header (four live readings) — the implementing dev should keep the reference row self-contained per the id-lint rule.
Generated by Claude Code
Claim: PM loop round 3
Session:session_018WuTtyckQa1VcXwgd52JpN
Branch:claude/issue-8455-references-facts-sweep
Worktree:objectstack-issue-8455
Domain:domain:skills
File surface:.claude/skills/pm-dispatch/references/**ONLY — expected:platform-readings.md,review-checklist.md,dispatch-runbook.md,seat-post-protocol.md,landing-operations.md(stop on breach; explain in the report). ⛔ SKILL.md is held by the parallel Model-tiering card — zero SKILL.md lines from this card.
Container & model: M,mode:subagent,model: claude-fable-5(mandatory — pm-dispatch skill root; quota exemption per the standing ruling if the wall is measured, recorded here)
Serial constraints cleared:dispatch-runbook.mdfreed — its holder PR merged tomainatff1e9b6(this branch bases on it, so the four-rulings sections are already present; extend, don't collide); no other in-flight claim onreferences/**(lane inventory + per-card reads current as of this round).Deliverable enumeration for the dev: body items 1–5 plus the two scope-amendment comments on this card (auto-merge echo refinement; author-side keyword-hygiene rule → review-checklist) plus the post-merge lane-inventory re-pull step (→
landing-operations.md, from the Part-of incident — it is the step that caught the silent close). One more evidence point measured minutes ago for the echo row: on the merge-queue path the echo can be empty while theenqueuedtimeline event fires and the PR lands — the row should anchor on queue membership/timeline as the authoritative signal and treat the echo as unreliable in both directions.
Generated by Claude Code
{ "issue": 8455, "status": "done", "branch": "claude/issue-8455-references-facts-sweep", "pr": "https://github.com/objectstack-ai/objectstack/pull/8490", "premise_still_valid": true, "summary": "All seven deliverables (body items 1-5 + two scope amendments + the claim's lane-inventory step) landed as self-contained reading rules across exactly the five expected references files; zero SKILL.md lines. Per-member premise checks: all seven facts were absent from origin/main, with one partial-overlap note — the closing-keyword mechanism section already existed in platform-readings (negation trap + body-vs-commit dual parse), so the keyword-hygiene deliverable landed as the new reviewer clause in review-checklist plus a three-fact extension (same-line binding, gerunds excluded, inline code spans safe / fences unmeasured) of that existing row rather than a duplicate row. The echo row anchors per the amendments: explicit mergeMethod always, echo unreliable in both directions, timeline events + MERGED authoritative. PR body verified through the detector branch's h7PartOfWithClosingKeyword/closingKeywordTargets before opening: only the four member cards bind to closing keywords; the sweep card, the absorbed-item card and the investigation card are clean and remain open. skip-changeset applied via read-then-union (bots' documentation + size/s preserved) and read back: [documentation, size/s, skip-changeset]. PR stays draft per the ADR-class merge path.", "tests": "Six named gate families, foreground under flock /tmp/os-heavy-verify.lock: check:doc-authoring exit=0, check:nul-bytes exit=0, check:pm-skill-id-lint exit=0, check:pm-skill-ratchet exit=0, check:skill-frame-sync exit=0; check:doc-formula-expressions first run exit=1 (ERR_MODULE_NOT_FOUND @objectstack/formula/dist — fresh-worktree unbuilt deps, the known false red), exit=0 after pnpm --filter '@objectstack/lint^...' build. Re-derivation per contract: node scripts/pm/dispatch-gates.mjs over the five changed paths returned exactly the six named families — no additions beyond the prompt's list. Ratchet non-applicability verified by reading check-skill-line-ratchet.mjs (SKILL_PATH targets SKILL.md only).", "open_questions": [], "out_of_scope_findings": [] }GitHub-write posture note: this container is MCP-only (REST rejected with a GitHub-App notice, no gh CLI), so the skip-changeset append used issue_write whole-set replace after reading the live label set — read-back confirms nothing was stripped.
Generated by Claude Code
Generated by Claude Code
Review: ACCEPT — reviewer of record: skills seat, session
session_018WuTtyckQa1VcXwgd52JpN. PR #8490 reviewed hunk-by-hunk (5 references files, +63/−3, zero SKILL.md lines — surface verified against the claim).- All seven deliverables land as reading rules in each file's own idiom, each anchored on the failure signal: head-pinning + never-rerun-superseded (review-checklist) with the both-directions accounting rule; the supersession signature row;
list_issues-is-a-shortlist; entity-escaped bodies +in:commentsunlock-scan consequence; account-scoped session handles (runbook) + the non-transferable archive step ⑥ʹ (seat-post-protocol) — including the sharp line that a cross-accountnot foundis indistinguishable from "never existed" and never a death signal; the echo row rewritten to "unreliable in both directions, authoritative = queue timeline events + MERGED" with both measured instances; the two throughput data points; the post-merge inventory-diff landing step with the correct complementarity note (per-card read needs a list, inventory diff needs none — and it is what caught the incident); and the keyword-hygiene reviewer clause beside the first-line rule, with the three measured parser boundaries extending the existing row rather than duplicating it — the right call, checked against the file. - Discipline: dispatch's six families green foreground under the lock (fresh-worktree false red correctly identified and re-run); re-derivation exact; ratchet non-applicability verified by reading the script, not assumed; PR body passed the H7 predicate before opening with only the four member cards bound to closing keywords; labels applied by read-then-union.
- 综合分析: every row is a this-week measured fact that already cost a round somewhere; the sweep shape amortizes one fable run across seven deliverables; and the rows are written as machine-checkable reading rules, not advice — the AI-error-resistance axis satisfied by construction.
Terminal state: ADR-class. PR #8490 stays a visibly-open draft for the maintainer's hand-merge. On merge: members #8434 / #8374 / #8272 / #8187 close via the
Fixeslines; the seat then closes #8294 by hand (items 1–2 landed via the role-file PR already on main; item 3 lands here) and #8293 by hand (its detector is in the merge queue; its author-side rule lands here) — with links, per each card's split record.
Generated by Claude Code
- All seven deliverables land as reading rules in each file's own idiom, each anchored on the failure signal: head-pinning + never-rerun-superseded (review-checklist) with the both-directions accounting rule; the supersession signature row;
Closed as delivered (skills seat, session
session_018WuTtyckQa1VcXwgd52JpN, deliberate close — the sweep PR'sFixeslines named the four member cards, not this claim-target card): all seven deliverables landed onmainvia the sweep PR merged 00:35Z. Members #8434 / #8374 / #8272 / #8187 closed by itsFixeslines; the two absorbed split-halves (#8294 item 3; the Part-of investigation's author-rule) are recorded on their own cards.pm:dispatchedremoved in the same action.
Generated by Claude Code
Filed by the skills seat (session
session_018WuTtyckQa1VcXwgd52JpN) under this shift's maintainer grant (2026-08-13, verbatim, untranslated: 「集中处理skills车道中的所有任务,包括分诊和集中开卡你都可以处理。」). Sweep-promotion of four graded findings plus one absorbed item, all hitting the same criterion: a measured platform/process fact whose deliverable is a self-contained row/line in.claude/skills/pm-dispatch/references/**— no SKILL.md lines, no code. Per the sweep rule: this card is the claim target; member cards keep their labels but are not separately dispatchable while this card is open.Members and itemized deliverables (落点 | content)
cancelledrun on a superseded head gets rerun, burning a heavyweight cycle and producing a false red #8434 —references/review-checklist.md: two clauses — (a) pin every gate reading to the PR's CURRENT head: readpulls/{n}.head.shafirst; a run whosehead_shadiffers is a reading about a dead commit — neither its green nor its red counts, in either direction; (b) never rerun a run on a superseded head: acancelledconclusion on a non-current head needs no action at all — the newer push already has its own runs. Plus onereferences/platform-readings.mdrow: cheap sibling workflowssuccess+ heavyweight carriercancelledon the same head is the expected signature of ordinary supersession (siblings finish in seconds, carriers take 10–15 min), not evidence of selective failure.list_issuesreturns no assignee field, so a lane inventory cannot tell a claimed card from a free one — add to the platform-readings trap table #8374 —references/platform-readings.mdrow:list_issuesnever returns assignees (no suchfieldsmember; absent from the response either way), so a lane listing cannot distinguish a claimed card from a free one — a listing is a shortlist, and every entry needs a fullissue_readbefore it can be claimed.issue_readreturns HTML-entity-escaped bodies ('/"), so a body round-trip (read → edit → write) from an MCP-backed seat risks corrupting the original text #8272 —references/platform-readings.mdrow: MCPissue_readbodies are HTML-entity-escaped while comments come back raw; a body round-trip viaissue_writeis unsafe from MCP-backed seats — machine-greppable lines (e.g. the blocked-by reverse index) may live in comments instead, so unlock scans must read comments too, and any body rewrite should be verified against the raw body via REST first.archive_session/ probe / poke are all unavailable to a successor seat — the hand-off checklist asks for something the successor cannot do #8187 —references/dispatch-runbook.md, extending the existing "SendMessage 直投 not-reachable 是设计而非故障" line: session handles are account-scoped —get_session/archive_session/ the trigger-poke route all answernot foundfor another account's session, and that answer is never a death signal. Plusreferences/seat-post-protocol.md退场收尾清单: the outgoing PM archives its own dev sessions before standing down; if a session must be left running, the seat post says so and marks the archive obligation non-transferable.references/platform-readings.mdrows: (a)enable_pr_auto_mergewithout an explicitmergeMethod: "SQUASH"is a silent no-op on this repo — it falls back to the forbidden merge-commit method; the echo's emptymethod:field is the failure signal; (b) measured data points worth a line each: single-container heavy-verify concurrency sweet spot ≈3; merge-queue landing latency ~15–30 min per PR, serialized. Items 1–2 of [finding] Three mechanizable items from a 16-hour spec-lane shift: os-dev's background-wait stall (6 instances), the verify-lock convention devs invented, and enable_pr_auto_merge's silent no-op #8294 are absorbed elsewhere (the os-dev role-file card) — ⛔ this PR must NOT close [finding] Three mechanizable items from a 16-hour spec-lane shift: os-dev's background-wait stall (6 instances), the verify-lock convention devs invented, and enable_pr_auto_merge's silent no-op #8294; reference it in prose only, never in a closing position, and do not create a development link to it.Constraints
.claude/skills/pm-dispatch/references/**ONLY. ⛔ No SKILL.md edits (line ratchet untouched). Rows land in the existing table/rule style, self-contained, ⛔ no issue-number references in the operational text (check:pm-skill-id-lint).references/dispatch-runbook.mdis held by the dispatch-strategy card's in-flight work — this sweep dispatches after that PR lands and rebases over it.claude-fable-5mandatory (pm-dispatch skill root); the 2026-08-13 quota-exhaustion exemption applies (flooropus, downgrade + reason recorded in the claim comment).Fixes #8434,Fixes #8374,Fixes #8272,Fixes #8187(all four fully delivered here). The PR body carries the per-member 落点|before|after list (sweep five-condition rule).