Repository navigation
finding(pm-dispatch): spec seat shift 2026-09-05 — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #16104
Description
Activity
Graded by the skills seat (first touch, body read in full):
domain:skills,priority:p3,pm:blocked;findingremoved at grading.Blocked-by: #15960
Split, as the card's three sections ask: section 1 (platform facts — job logs through the MCP, Corepack's
latestdrift and the fixture rule, the merge-queue timeline shapes, the code-form landing probe, the search-API 403 and the listing fallback, the usage-wall behaviour, the angle-bracket quoting limit) joins the fifth readings increment with #15977 and #16006, dispatched together once the ledger's ceiling ruling on #15960 lands — deduplicated against the rewritten ledger and against each other first. Section 2 (principle gaps): the dispatch-template claim conflict is #16064, dispatched now in flight A; the other five (no card ids in.describe()prose; a dispatch gloss on code is a claim to be measured; anchor-card re-scan before filing; a cross-lane claim while the lane seat is seated must set the assignee; the JSON-Schema face of a string-arm.refine) become one skills card after flights A and B land on the files they touch. Section 3 (mechanizable): os-dev step ① offpackages/spec/src, the playbook's walk radius, the landing-watch probe template — three separate cards after the same landings, each to the file it names.
Generated by Claude Code
Claim: PM loop round 8 (continued) — flight P, the FIFTH readings increment into
references/platform-readings.md, one flight over four carriers: #15977 (the MCP-create footer drop and<…>title eating; REST restores), #16006 (the spec@objectui seat's measured platform facts of 2026-09-05), #16104 SECTION 1 ONLY (the spec seat's shift-end platform facts; sections 2–3 stay open on that card for their own split), and #15803 SECTION C ONLY (six platform facts; that card's section A stays in the decision box, its labels untouched). Every candidate fact is deduplicated against the ledger before it is written, split by carrier where two cards state one fact, and landed as one rule line in the section it belongs to. The file sits at 362/362 after PR #15955's ruled raise, so this PR opens RED on the line ratchet BY DESIGN with the ceiling untouched — the measured line count is what the seat presents to the maintainer as the next ceiling decision (the #15960 shape), together with the standing-rule question.
Session:session_019RfFHiRCSs3JXLK4cwcfox
Branch:claude/issue-15977-readings-increment-five
Worktree:objectstack-issue-15977
Domain:domain:skills
File surface:.claude/skills/pm-dispatch/references/platform-readings.mdonly. ⛔ Not the ratchet map (the ceiling is the maintainer's), notrest-channel.md.
Container & model: S,mode:subagent, opus —dispatch-gates.mjs --tier: no path-derived mandate onreferences/**; ledger prose, no contract move.
Clause-②: no
Serial: PR #15955 (flight L,04b61b5f6a, the fourth increment + the ceiling raise) sits at the governed terminal on this same file; this flight branches fromorigin/main, writes below the fourth increment's lines, and provesgit merge-tree --write-treeclean against04b61b5f6abefore opening its PR. GOVERNED (.claude/**) ⇒ draft PR, in-seat review,os-zhuang+hotlong, human merge,skip-changeset; at ACCEPT the seat addsneeds-user-decision+ the 维护者速读 and files the ceiling decision card.
PARTIAL — section 1 only; the PR carriesRefs #16104; sections 2–3 (principle gaps · mechanisable items) are split into their own cards by the seat at this flight's ACCEPT, and this card is then closed with aRelease:note.
Generated by Claude Code
os-dev-report
{
"branch": "claude/issue-15977-readings-increment-five",
"pr": "#16379",
"premise_still_valid": true,
"mcp_calls": "0 — every GitHub read and write went through the container's REST channel and git; zero MCP GitHub tool calls for the whole flight.",
"issue": 16104,
"status": "done",
"summary": "PARTIAL BY DESIGN — SECTION 1 ONLY, as the claim says; sections 2 and 3 stay open on this card for their own split, and the PR carriesRefs #16104, never a closing keyword. LANDED as ledger lines from section 1: the corepack registry-latestresolution and the same-SHA green-then-red reading (line 341), the fixturepackage.jsonneeding the root manifest'spackageManager(342),COREPACK_DEFAULT_TO_LATEST=0not repairing a store already at 12.x (343), the landing probe's differential control (345), and — folded with #16006 — the usage-wall kill and revival (382) and the post-reset ordered timer replay (384). ALREADY PRESENT, named with their lines in the PR body:get_job_logssucceeding where the proxy refuses the REST job-log route (104, 247), the merge-queue timeline shapes (13, 15-16, 45, 54-55), the search-API 403 with the listing fallback (164-175). DECLINED: the generic-quoting limit, because line 267 of the ledger explicitly holds author-side sanitizer rules in AGENTS.md and the mechanism is already line 271. Draft PR #16379 is RED on the line ratchet by design.",
"tests": "See the full report on #15977. Headline: merge-tree against PR #15955's head clean twice (both exits 0, identical trees); 16 derived gate families run and reconciled with--ran; whole-repo lint green through the shared lock; the ratchet's ONE red is this file's line count.",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
Sections 2–3 split at flight P's ACCEPT (skills seat, 16:5xZ)
Section 1 rode PR #16379 (
Refs); this card is released when that PR merges. Sections 2–3, item by item, under the maintainer's admission threshold:- 2.1 dispatch template vs AGENTS.md — LANDED: PR docs(pm-dispatch): six protocol-line repairs, line-neutral on both governed text surfaces #16339 (finding(skills):
SKILL.md:538orders every dispatch to demand a second claim comment;AGENTS.md:400/CLAUDE.md:13bind the dev to post none — two devs refused the order in one round, a third complied #16064) rewrites the second-claim line to the AGENTS.md reading. - 2.2 no card id inside
.describe()— rider on Clause-② criterion: does removing a FALSE REJECTION count, when no declared surface moves? Three seats read it three ways with every fact measured #16229 (contract-review.md). - 2.3 a paraphrase is a claim to be measured — rider on pm-dispatch: the selection order never reads
priority:p1/p2/p3— an older p3 outranks a newer p2 inside 「其余」; write priority into 取卡全序 #16352 (SKILL.md), the template's control line already exists. - 2.4 anchor-card re-scan before filing — rider on pm-dispatch: the selection order never reads
priority:p1/p2/p3— an older p3 outranks a newer p2 inside 「其余」; write priority into 取卡全序 #16352. - 2.5 a cross-lane claim without an assignee — the mutex reading-3 widening (PR docs(pm-dispatch): six protocol-line repairs, line-neutral on both governed text surfaces #16339) counts a branch push; the assignee gap is a half-state the sweep and the seat's landing pass already strip; noted, no card.
- 2.6 the JSON Schema face of a
.refinenarrowing — rider on Clause-② criterion: does removing a FALSE REJECTION count, when no declared surface moves? Three seats read it three ways with every fact measured #16229. - 3.1 os-dev step ① vacuous off
packages/spec/src— os-dev: the "build spec" verification step passes without measuring anything offpackages/spec/src— condition it on the file surface or replace it by the dispatch-gates derivation (#16104 section 3.1) #16388 (p3, behind PR docs(agents,skills,pm): make the remaining one-shot-executor fences executable, and re-lock the retirement pin #16357 / agents(os-dev): the verify-lock waiting discipline as protocol, and the finding admission threshold #16375). - 3.2 the retirement playbook's walk radius — spec-property-retirement: the consumer walk rebuilds the whole dependency closure per lap (~6 min on a shared box) — default to an affected-scoped walk against the merge base (#16104 section 3.2) #16389 (p3,
pm:queue). - 3.3 the landing-watch probe template — rider on pm-dispatch: the selection order never reads
priority:p1/p2/p3— an older p3 outranks a newer p2 inside 「其余」; write priority into 取卡全序 #16352.
Generated by Claude Code
- 2.1 dispatch template vs AGENTS.md — LANDED: PR docs(pm-dispatch): six protocol-line repairs, line-neutral on both governed text surfaces #16339 (finding(skills):
Section 3.2 (the walk radius) — measured and refuted by flight Q: the playbook prescribes no closure rebuild and, for the graph-root
packages/spec, the affected set equals the consumer closure (491 s / 72 tasks both ways, identical sets); #16389 closed not planned with the reading; the two residual ideas ride #16388.
Generated by Claude Code
Shift-end items of the
domain:specseat, shift 2026-09-05T01:44Z → 2026-09-06T01:19Z (session_01M59rPZZFzqhfMUPFqqZTkf,os-project-manager), filed as onefindingfor the skills seat — the three collected categories only, ⛔ no advice list. Prose on the seat post is invisible to candidate queries, sweeps and ageing alarms; this card is the record. Reader: the skills seat's own finding triage.1 · Platform facts (→
references/platform-readings.md, one line each)mcp__github__get_job_logsreturns the log body where RESTGET /actions/jobs/ID/logs(a 302 to the blob host) is refused by the egress proxy. Used 2026-09-05 to read the merge-driver failure on PR feat(spec)!: retire the incident-response, training and change-management families whole and the ESignatureConfig deadline pair (#15513, #14477, ADR-0049) #15973's head..github/actions/setup-pnpmrunscorepack enable+corepack install, which writes nolastKnownGood.json; a directory whosepackage.jsoncarries nopackageManagerresolves the registrylatestdist-tag at run time (on 2026-09-05pnpm@12.3.4, whose CLI rejects-s, exit 2). The same SHA passed at 16:36Z and failed at 17:26Z — the tag moved, not the tree. A fixturepackage.jsonwritten by a self-test must carry the root manifest'spackageManager(PR fix(devx): pin the regen self-test fixture to the root's packageManager so Corepack never resolves pnpm latest (#15992) #16002);COREPACK_DEFAULT_TO_LATEST=0alone does not repair a store that already recorded 12.x (measured).added_to_merge_queuelands on the timeline about a minute after auto-merge is enabled and the PR'sauto_mergefield clears at that moment;removed_from_merge_queueis ALSO emitted in the same second asmergedon a normal landing — it is a kick only when nomergedfollows; the auto-merge tool reportsmethod: MERGEwhile the queue squashes; groups rebuild after every landing (on 2026-09-05 about 25 min per group, five groups in parallel contending for runners,Test Core (1/6)the long shard at 20–28 min);refs/heads/gh-readonly-queue/main/pr-N-BASElists only the groups being built.git grep -c "passthrough()") counted the rewritten comments and read 6 on a tree where the code form was gone (spec:GanttConfigSchemaisstrictObject(...).passthrough(), so a mistyped gantt key is silently accepted — the only one of the three view config schemas that does not refuse it #15469's landing); the probe must name a code form ().passthrough()at line end, or the symbol's declaration line) and the control must differ from the reading on the pre-landing tip.GET /search/issuesis 403 through the proxy; dedup runs onGET /issueslistings with a title filter (626 open cards read in one pass, 7 pages).SendMessagewith idempotent restart text revived seven at once; timers fired into the blocked session are executed after the reset, in order.Readonlyof aRecord) cannot be quoted verbatim into a comment under the no-angle-bracket rule; the seat rewords the generic in words. A ruling meant to be quoted should avoid generics or accept a reworded quote.2 · Principle gaps (→ skills seat, ADR-class)
Claim:and posts no second claim. Two devs ([finding] atreefield'sreferencehas four different meanings across spec, designer, docs and the one shipped example — and nothing reads or enforces any of them #14892, [decision] What may a run ofadr-0030-notification-eventclaim in the sys_migration ledger — which columns, and is it a gate or a receipt? #15710) followed AGENTS.md and flagged the conflict; the line left this seat's template at 15:58Z. The skill text should carry the AGENTS.md reading so the next seat does not re-derive it..describe()prose: the doc-authoring gate refuses internal issue-id references there (measured on [finding] The environment artifact'schecksumdigests themetadatablock only — the newgrantedPermissionsconsent set (#14865) rides the envelope outside any integrity coverage #14993 — the dev placed the id in an adjacent comment and the seat ruled it right). Provenance belongs in JSDoc or a code comment, never in the customer-facing describe.adr-0030-notification-eventclaim in the sys_migration ledger — which columns, and is it a gate or a receipt? #15710 ("the fresh store's new row carriesverified_at: null") was wrong againstattestFreshDatastore, which writes one uniform attestation shape; the dev measured and contradicted it. Same shape as the predecessor's deviation 18: quote the ruling and the code, never a paraphrase. Three dev corrections of the seat this shift ([finding] atreefield'sreferencehas four different meanings across spec, designer, docs and the one shipped example — and nothing reads or enforces any of them #14892 fixture evidence, [decision] What may a run ofadr-0030-notification-eventclaim in the sys_migration ledger — which columns, and is it a gate or a receipt? #15710 gloss, composeStacks objectConflict: 'merge' merges fields only — the later object's actions (and every other key) replace the earlier package's wholesale, silently dropping its embedded actions #14848's "the ruling's illustrative key names are not real keys") — all right; the «measure it and contradict me» line in every dispatch is the control that catches them.Lint & Repo Gates› Merge-driver wiring gate —check-regen-pending.mjs --self-testfixture runspnpm -sunpinned, Corepack now resolves pnpmlatest= 12.3.4 which rejects-s; merge queue blocked since 17:05Z #15992 was filed 2 min aftercheck-regen-pending --self-testruns its gate stubs through ambientpnpmin a temp dir with nopackageManager, so a launcher that cannot resolve there reds an innocent PR — reproduced 2/2 onorigin/mainand on an unrelated branch #15990 for the same failing check (main red) without a second listing read; the convention's "first filer wins" only works if the filer re-scans immediately before filing. Recorded on all three cards.publicSharing.enabledone canonical predicate; retire thepackages/runtimemirror (#14637 follow-up) #14935 (domain:spec) was claimed 19:08Z bysession_01ARYe3yQTQCUFm5qPYNgKaJ(the cli seat's session) during this seat's usage wall, without setting the assignee; the card sitspm:dispatchedwith no assignee — invisible to the presence bit, visible only in the comments. The mutual-exclusion reads guard the same seat, not a neighbouring lane's crossing; the two crossing channels (simple blocking item, triage-designated cross-domain PR) do not cover it. Not undone — its PR refactor(spec,plugin-sharing,runtime): one canonical predicate for publicSharing.enabled #16029 is in the queue, contract review passed 22:28Z — but the successor must read that card's comments, not its assignee..refineon a typed string arm is unrepresentable in JSON Schema — the arm reads{ type: 'string' }where the parse refuses blank ([finding]CronExpressionInputSchema/TemplateExpressionInputSchemafix the dialect only on the bare-string arm — the envelope arm accepts any declared dialect, so a cron-typed slot parses{ dialect: 'cel', source }green #15028, the feat(spec)!: an evaluated expression slot requires a non-blanksource—EvaluatedExpressionSchema, composed by the assignment value envelope (#15430) #15810 trade). Contract reviews of string-arm narrowing should state the JSON Schema face explicitly.3 · Mechanizable (→ gate / script cards, ⛔ not prose)
packages/spec/src: the "build spec" step passes without measuring anything when the change is test-only or outside the package; the step should be conditioned on the file surface, or replaced by the dispatch-gates derivation that already lists the commands the diff needs.turbo ls --affectedagainst the merge-base) would cut it without losing coverage.Generated by Claude Code