This post is the single authoritative registration of the skills seat. Four-section template; the job description is versioned at .claude/skills/pm-dispatch/references/lanes/skills.md — ⛔ not copied here.
Current PM
🟢 os-sales · session session_01MCLBsUgfykL74aU716rzVK · ledger refreshed 2026-09-12T02:24Z (check-in 2) · seated 2026-09-12T00:35Z on the maintainer's /pm-dispatch skills summon · R1 . Previous incumbents: os-litant session_01YKEjmbYNvYWJvWGSWx26zK (2026-09-10 → 2026-09-11, R1 waves 7–11, brief 5630147753); os-justin session_01MoTv7pn338AZ71owsp19gQ (2026-09-09 → 2026-09-10, brief 5615648021); yinlianghui session_01HxLw5aKDPR5RJgyUR7Exkd (brief 5598607084).
Four mutex readings at 2026-09-12T00:26Z: latest close brief = 5630147753 and it is the newest event on this post; no later round-open marker; no foreign Claim: on any lane pm:dispatched ∪ pm:queue card after the brief (git ls-remote --heads origin 'claude/issue-*' over every queue card number answers only claude/issue-17009-prior-ruling-search and claude/issue-17359-skills-capability-guidance, both pre-brief); newest CLOSED lane card by updated_at = #17606 (2026-09-12T00:20Z) and it carries no Claim: at all (a director ruling and a maintainer close — cross-seat writing, not occupancy). Mutex clear; the brief is the release. Charter touch on origin/main 431c757 (fetched at seating): SKILL.md, references/core-rules.md and references/lanes/skills.md all last touched 1f0b565 (2026-09-11T06:58Z), later than the previous marker's reading — all three re-read at tip before this write.
Maintainer rulings in force (verbatim on their cards, ⛔ not restated): tier policy (#17285 → PR #17294 , landed); card-home (#17288 → PR #17315 , landed); published PM skill deleted (#17311 → PR #17325 , landed); CLAUDE.md pointer program #17161 (3 of 5 repos landed; #17163 cloud / #17165 www wait on repo attachment; #17164 objectos → PR #283 at the human terminal, objectos not readable from this session); review-of-record (#17302 → PR #17349 , landed); #17189 rider → #17359 (blocked); forced-takeover ruling (#17033 , landed); #15367 ruled A (batch #91 ) with the root-artefact-vs-browser-dump equality as a PRECONDITION; #17389 = maintainer direct dispatch (「这个是决裁的基本原则,应该写入skills」, p1); #17606 + #15913 ruled A (batch #116 , 2026-09-12T00:17Z, 5642107272): the squash message comes from the PR body — the setting was applied by hotlong at 00:19Z on objectstack (PR_TITLE + PR_BODY; the ruling's exit names BOTH repos, the director seat verifies) → #17727 (this lane, p2: pre-push trailer refusal, the Part-of: colon gap, the gate's re-scope to the PR body).
Inherited + running ledger (hand-off)
In flight (3) — wave 4, ledger refreshed 2026-09-12T02:24Z (all mode:subagent, worktrees /home/user/objectstack-issue-<n>, faces disjoint): [finding] platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 family (p2, platform-readings.md rows for [finding] platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 · [finding] a REST PATCH /pulls/{n} appends a second bare attribution footer — and the measured fix is to send NO footer at all, not to stop re-sending #17239 · [finding] Platform reading: every REST WRITE through the egress proxy needs an explicit Content-Type: application/json — without it the proxy answers 415 and nothing is written #17563 · [finding] platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710 ; anchor claim 5642555988, dispatched 01:35Z; draft PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746 head fe5fb9d8, no report yet; governed ⇒ human terminal) · Card trailers in commit messages are caught pre-push, not post-push — a .githooks/pre-push refusal, the Part-of: colon gap in check:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 (p2, pre-push trailer refusal + Part-of: colon gap + RULE 2 re-scope + one os-dev.md line; claim 5642558438, dispatched 01:35Z; PR-A fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745 head 929c205a — its out-of-face touch on check-half-states.mjs is being justified or dropped on the seat's message; PR-B (os-dev.md) pending; no report yet) · [finding] check-clause2-carriers T1 reads a function PARAMETER annotated ctx: z.RefinementCtx as a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 (p1 Bug, the T1 widening tell's scope in check-widening-tells.mjs; claim 5642827410, dispatched 02:22Z; pure code ⇒ in-seat contract-tier review → ready → queue). On each report: review per review-checklist.md at the tier the claim names; gates reconciled with --ran on the final diff.
Awaiting a human merge (6, governed, four-piece placed on each) : objectstack PR docs(agents): state the tracked root SDUI manifest and the per-PR parity run #17733 (check:react-declaration-parity refuses to run for want of a manifest that is now checked in at the repo root #15367 , head 82b83613, AGENTS.md parity-gate sentences after the ruling's measurement; ACCEPT 5642433729, 速读 5642428943; CI 17 green / 16 skipped at 01:26Z) · PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734 (skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis framework — 「以 objectstack 协议为准,文档以实际实现为准」, spec > implementation > documentation #17389 , head ea98fed9, the base adjudication principle in the four-axis block + core-rules; ACCEPT 5642446122, 速读 5642446256; the frame block's md5 becomes 3327d02c… on merge — later dispatch words paste the new block) · PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ([finding] #15929's class recurred on #16934: a decision card whose Governing text: omitted the ADR that already decides it (ADR-0131 D8) reached batch presentation with a recommendation to re-rule — the text-level governing-text step failed at filing and at presentation; a mechanical prior-ruling search is asked #17009 D1, head f4dbf03e, the predecessor's four-piece; on MERGED the card returns to pm:queue for D2, ⛔ not closed) · objectui PR [spec] Field.inlineColumns is z.array(z.any()) — a mis-keyed inline-grid column publishes clean and renders blank cells #9227 (fix(metadata-protocol): report a non-canonical stored type as skipped instead of canonical (#8957) #9059 , head efd2d607, the app-composition exclusivity line; ACCEPT 5642552565, 速读 5642552690) · objectui PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 ([finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for .changeset/ paths — a breaking changeset shipped locally-green and went red only in CI #8410 + docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 , head 17359148, two evidentiary rules in objectui AGENTS.md §9; ACCEPT 5642553191, 速读 5642553505) · objectos PR 🔗 Broken links detected in documentation #283 ([objectos] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17164 ; objectos unreachable from this session). On MERGED: landing record on the card(s) + pm:dispatched / assignee cleared in one write with read-back; chains advance (SKILL.md → [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touches skills/** — the tier it requires is reserved away from every lane that can hit it #17490 ; AGENTS.md → AGENTS.md tells agents check:react-declaration-parity cannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405 ; objectui AGENTS.md → objectui#8640).
Landed since the previous brief : the 12 governed drafts os-zhuang merged on 2026-09-11 (records + assignee clears posted at seating): PR pm-dispatch: make check-clause2-carriers C4 recognise the live contract-review verdict dialect, and name the session a reviewer writes #17368 ([finding] check-clause2-carriers C4 is silent on every 2026-09-09 contract-review verdict — its VERDICT: discriminator and session-only Reviewed-by: grammar match neither the bold Verdict: heading dialect nor the isolated-subagent authorship the seats now write #17346 ) bc2bf01c · docs(agents): a PR declaring clause-② grades its changeset at least minor #17415 ([finding] PR #16650 merged with clause-② yes and both packages it grew graded patch — the LEVEL axis could not see them, so it printed green #16973 ) 155b875d · docs(skills): state what single posture means for the organization count in objectstack-data #17476 ([finding] The published objectstack-data skill never says what single posture means for the organization count — an AI app author reading it (and the code's exemption list) lands on 「stay single, seed one sys_organization per tenant, bring your own RLS wall」; the sentence that forbids that shape lives only in content/docs/deployment/tenancy-modes.mdx and ADR-0105 §「Today's two postures」, neither linked from the skill #17019 ) 7d350a46 · docs(pm): engine lane red line points at the anchoring rule's lint exception #17519 ([finding] references/lanes/engine.md:15 states packages/lint ⇒ domain:devx with no exception — a third text carrying the lane-table mis-read #16993 measured #17088 ) 8f751cdc · docs(pm): record three measured auto-merge and label-cap platform readings #17523 ([finding] The pm-dispatch landing rule lets a dev's auto-merge delete the seat's review entirely — arming on an already-green PR merges immediately #17160 ) d8de5995 · docs(pm): add docs/qa/** to the domain:devx row of the lane table #17526 ([finding] the 域车道 table in pm-dispatch SKILL.md has no entry for docs/qa/**, so checklist-area cards are routed by judgment call #17459 ) 735a2059 · fix(pm): guard-governed-enqueue reads a rename's old path too #17531 ([finding] guard-governed-enqueue.sh reads only 'filename' from the changed-files API — a PR that renames a governed file OFF the governed surface reads as NOT governed #17503 ) f8ee4918 · docs(skills): stageOrder is funnel-only at the three hand-written sites #17538 (Three hand-written sites still document options.stageOrder for a pyramid chart type the schema refuses #17471 ) f55922f2 · docs(agents): point os-dev at the surviving decision-frame copy #17540 ([finding] The os-dev dispatch template's {decision_frame} slot is optional and unconditioned, so it is omitted exactly on the rounds that return needs_decision — two independent rounds hit it the same day #17520 ) 526a2668 · docs(adr): ADR-0131 §1.2(3) — the precondition is reachable and reported at boot, not a refused boot #17544 (docs(adr): ADR-0131 §1.2(3) calls a precondition "today a refused boot" — nothing refuses it, and #17010 measured the silent boot it describes #17467 ) e03cb884 · docs(skills): bind three evidence controls onto the retirement playbook's liveness step #17566 ([finding] Two retirement cards in one day rested on false "dead key" premises — the census used as evidence scores the same zero for a known-live key, and cross-repo liveness evidence rots faster than its verdict #17553 ) 1a089328 · docs(pm): base the REST draft-flip row on a probe, not the docs #17597 ([finding] Platform reading: REST PATCH /pulls/{n} with {"draft": false} answers HTTP 200 and silently does nothing — the channel table records the field as unsupported, but on documentation, and a 200 reads as success #17582 ) 76c9fab3. Through the queue by this seat : PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 (条款②声明载体是一扇单向门:席位能把自己写进一个自己出不去的状态 —— 一个会话里同一个坑被踩了 5 次 #17366 ) e9efc403 MERGED 2026-09-12T01:54Z (ACCEPT + landing record 5642782164; residue cleared).
Self-triage this shift (done) : [finding] platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 p3 Task · [finding] platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 p2 Task · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710 p3 Task (grading comments 5642286838 / 5642287310 / 5642287727) — folded into the platform-readings family (wave 3); at check-in 2: [finding] check-clause2-carriers T1 reads a function PARAMETER annotated ctx: z.RefinementCtx as a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 p1 Bug (5642818369; landing point corrected to check-widening-tells.mjs; dispatched wave 4) · check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 p2 Bug (5642822751; the three H22 docblock statements survive PR fix(pm): re-pin H22 closed-issue update rate from a card-only measurement of the stream the patrol actually pages #17627 ) · [finding] Four patrol anchors tell the reader that a stalled Swept line means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 p3 Task (5642823048; the filing seat's grade stands) · backlog sweep: an UNGRADED card sitting in pm:queue with a domain:* matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 p2 Task (5642823259; no H row covers the shape — a gap, count first). finding off and type set on all four. pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (director-filed, p2, maintainer's word) read and placed behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515 on decision-analysis.md; type Task set here — like Card trailers in commit messages are caught pre-push, not post-push — a .githooks/pre-push refusal, the Part-of: colon gap in check:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 , it arrived with none (triage gap recorded). Filed by this seat : skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (p2 Task — the patrol timer armed once at seating as a self-bound Routine; SKILL.md chain) · skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (p3 Task — a mid-task narrowing names the replacement owner; dispatch-runbook.md) · [finding] the tracked root sdui.manifest.json and the browser dump differ on the fields the parity gate consumes (18 of 57 components; dataSource missing on 15 in the root artefact) — the gate's verdict set is identical under both today, which is the configuration in which the drift is least visible #17735 (finding, spec lane) · [finding] docs/releases-maintenance.md :113–:121, scripts/bump-objectui.sh and scripts/build-console.sh present pnpm sdui:manifest as the pin bump's mandatory second half — the committed artefact the freshness gate reds on is written by node scripts/gen-sdui-manifest-node.mjs, which none of them names #17736 (finding, devx lane) · objectui#9223 (finding — ADR-0055 item 5, the maintainer's call) · [finding] REST PATCH /issues/{n} with labels and type in ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (p3 Task, self-graded — REST PATCH with labels + type in one body returns 500; one platform-readings.md row behind the family PR).
Queue (objectstack pm:queue, this lane) at this refresh — 24 : p2 Bugs A Claim: comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 · [finding] check-clause2-carriers reads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 (clause2-carriers chain, FREE — PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 landed) · check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 (half-states chain, behind PR fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745 's touch) · AGENTS.md tells agents check:react-declaration-parity cannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405 · AGENTS.md declares the agent commit trailer pair model-free and nothing enforces it — 18 commits on 5 open PR branches carry a model identifier, all with green CI #17280 (AGENTS.md chain, behind PR docs(agents): state the tracked root SDUI manifest and the per-PR parity run #17733 ); p2 Tasks [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touches skills/** — the tier it requires is reserved away from every lane that can hit it #17490 · [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569 · skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 · backlog sweep: an UNGRADED card sitting in pm:queue with a domain:* matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 (SKILL.md chain, behind PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734 ) · pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (decision-analysis.md, behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ); p3 Bugs [finding] check-half-states H19 counts a superseded Blocked-by: target that lives only in a historic COMMENT — three seats have now hand-dispositioned the same false positive on #11333 #17564 · [finding] H9's issue-ref class fires on a mid-sentence issue mention, so four tracked-path holds read clean (#8753 #8607 #8589 #6009) — the declaration-position narrowing was measured on the census but not landed #17605 (half-states chain); p3 Tasks [finding] label:finding is 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D1 (behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ) · [finding] The WAIT side of the shared process table is unguarded: pgrep -f matched the asking shell itself, and three background waiters sat deadlocked for 5 hours #17104 · AGENTS.md Protocol Domains table still lists Cloud | cloud/ after #16325 relocates the directory to marketplace/ #17370 (AGENTS.md chain) · [finding] Two triage gradings named a target the governing ADR itself rejects — the grading quotes no line of the adjudication it routes against #17497 (SKILL.md chain) · [finding] three PRs merged on 2026-09-09 still carrying needs:contract-review — no H row names a merged PR or closed card that still wears a gate label #17510 · skills(pm tooling): 分诊席一班攒下的四道写入纪律只活在会话 scratchpad 里 —— 随容器消失,其中「并发出现的六态属他席」这条原则章程未成文 #17624 · [finding] Four patrol anchors tell the reader that a stalled Swept line means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 (half-states chain tail) · skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (dispatch-runbook.md, free) · [finding] REST PATCH /issues/{n} with labels and type in ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (platform-readings.md, behind PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746 ); unattachable [cloud] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17163 · [www.objectos.ai] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17165 ; held for the maintainer 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 (p1). Next free slot ⇒ A Claim: comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 (p2 Bug, free chain head), then [finding] check-clause2-carriers reads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 / skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 / skills(pm tooling): 分诊席一班攒下的四道写入纪律只活在会话 scratchpad 里 —— 随容器消失,其中「并发出现的六态属他席」这条原则章程未成文 #17624 / [finding] three PRs merged on 2026-09-09 still carrying needs:contract-review — no H row names a merged PR or closed card that still wears a gate label #17510 by the total order. objectui pm:queue 2 : [finding] the fable-mandatory tier is recalled at claim time, not derived — a mandatory-surface card shipped at opus because the claim comment misclassified its file surface #8640 (p2 Task, objectui AGENTS.md — behind PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 ) · A bound external.credentialsRef is silently dropped on the DSN branches of the mysql and mongodb driver arms #8696 (p3 Task, scripts/upstream-port-pin.json, free after objectui PR docs(pm): PM token discipline — seat-post throttling, targeted reads, dispatch-prompt slimming at net-zero lines #9207 landed).
Decision box (this lane) : 1 — The M9.1 / M9.2 expression phases — including "ast becomes required in build output" — are asserted in six files and one published docs page, and defined in no ADR #17323 (p2). pm:awaiting-maintainer : [Decision] 22 pure-objectui defect cards live in objectstack under repo:objectui, but objectui IS reachable — the seam fallback is being used where its precondition does not hold #17250 · A claim corrected during review still ships in history: the squash message is built from commit messages, which no review round reads #15913 (setting D: objectstack reads PR_TITLE + PR_BODY at 01:28Z; objectui still COMMIT_OR_PR_TITLE + COMMIT_MESSAGES — the ruling's exit names both repos; the director seat verifies). Holds : [PM decision] skills lane batch 9 — platform-readings.md third increment: raise the ceiling by the measured +39 (358 → 397); and the MCP write-pool quota sentence collision #15275 · [finding] A contract-review PASS leaves ZERO trace on the PR itself — verdict on the card, label cleared, no review object — so a legitimate un-park is indistinguishable from an intruder from the PR side #13417 · [finding] MCP search_issues DID honour GitHub qualifiers (repo: is: label:) in two exact readings — the ledger's "qualifier form returns total_count 0" rule needs a second session before it stands or falls #16762 · [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742 . Blocked : hotcrm has no half-state patrol anchor, so the pm:dispatched + assignee residue after a Fixes auto-close has now been repaired by hand seven rounds running #14881 (os-steve) · skills: evaluate whether the published security/platform guidance must teach the app-capability vs system-permission distinction and the isDefault → everyone binding rule (after #17189) #17359 (Blocked-by: #17189). Anchors left to owners : PM corpus audit (maintainer-directed): classify every instruction line — keep / duplicate / demote / delete — then rewrite and re-lock every ratchet #13597 · Published-skills factual sweep: verify every behavioral claim in skills/** against the implementation — program anchor #13658 (pm:epic) · Skills catalog optimization program (maintainer-directed): audit every skill on both roots, then optimize — program anchor #14292 · [program] CLAUDE.md is a pointer to AGENTS.md in every repo — no second instruction set to maintain (maintainer 2026-09-09) #17161 .
Maintainer items pending : the ADR-routing 「改」 (objectui#9223 waits on it); objectui main ruleset + Governed Surface Queue Guard (objectui#6596); the objectui half of setting D; attaching cloud / www / objectos ([cloud] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17163 / [www.objectos.ai] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17165 / [objectos] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17164 's landing record); the six repo:hotcrm cards; hotcrm#1819; 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 (p1, held); the timer-arming direction on skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (veto window).
Governed-merge audit at seating (run 2026-09-12T00:30Z, --since-ref objectstack=0918c441188c --since-ref objectui=689953ae9a57): 15 governed merges, all merged_by os-zhuang — objectstack PR docs(agents): a PR declaring clause-② grades its changeset at least minor #17415 · feat(spec)!: retire the type: 'page' list-view mount and its pageName binding #17298 · pm-dispatch: make check-clause2-carriers C4 recognise the live contract-review verdict dialect, and name the session a reviewer writes #17368 · docs(pm): base the REST draft-flip row on a probe, not the docs #17597 · docs(skills): bind three evidence controls onto the retirement playbook's liveness step #17566 · docs(adr): ADR-0131 §1.2(3) — the precondition is reachable and reported at boot, not a refused boot #17544 · docs(agents): point os-dev at the surviving decision-frame copy #17540 · docs(skills): stageOrder is funnel-only at the three hand-written sites #17538 · fix(pm): guard-governed-enqueue reads a rename's old path too #17531 · docs(pm): record three measured auto-merge and label-cap platform readings #17523 · docs(pm): add docs/qa/** to the domain:devx row of the lane table #17526 · docs(pm): engine lane red line points at the anchoring rule's lint exception #17519 · docs(skills): state what single posture means for the organization count in objectstack-data #17476 · fix(cli): os migrate meta --from N lists the conversions its tombstones prescribe, and an empty range stops reading as success #17462 ; objectui PR docs: spell the console form routes with the real /_console mount #9079 . ⚠️ INCOMPLETE: cloud / objectos / hotcrm have no checkout ⇒ unaudited. Next: --since-ref objectstack=431c75712090 --since-ref objectui=b775500af677.
Half-state anchor [Half-state patrol] check-half-states live sweep — generated view (please pin) #9857 (swept 2026-09-11T19:46Z) rows naming this lane: H40 dangling #17044 / #17032 in a historical marker comment on this post (recorded, left as is); no H row names a lane card or PR. H17 index ∩ every dispatched face this fire = ∅ ([finding] html tier: action:button / action:icon declare an input named type, so the discriminator refusal makes that input unauthorable on the html tier — and the refusal's prescription ("write the tag you meant") has no answer for these two components #14490 's trigger files were read-only inputs of check:react-declaration-parity refuses to run for want of a manifest that is now checked in at the repo root #15367 's measurement, named on that claim).
Hot-file serial queue
.claude/skills/pm-dispatch/SKILL.md (812/812) + references/core-rules.md (151/151): PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734 (skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis framework — 「以 objectstack 协议为准,文档以实际实现为准」, spec > implementation > documentation #17389 ) at the human terminal (the four-axis block :734–:755 + core-rules :143) → [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touches skills/** — the tier it requires is reserved away from every lane that can hit it #17490 (:610, the tier conjunction) → [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569 (the zero-hit rule's control scope) → skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (the seating-time Routine) → backlog sweep: an UNGRADED card sitting in pm:queue with a domain:* matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 (the sweep's fourth disjunct or its H-row home; count first) → [finding] Two triage gradings named a target the governing ADR itself rejects — the grading quotes no line of the adjudication it routes against #17497 (p3, the triage grading's governing line) → the ADR-routing row once the maintainer says 「改」. references/lanes/*.md: free.
AGENTS.md (1075/1075): PR docs(agents): state the tracked root SDUI manifest and the per-PR parity run #17733 (check:react-declaration-parity refuses to run for want of a manifest that is now checked in at the repo root #15367 ) at the human terminal (the parity-gate sentence family, sites A + B) → AGENTS.md tells agents check:react-declaration-parity cannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405 → AGENTS.md declares the agent commit trailer pair model-free and nothing enforces it — 18 commits on 5 open PR branches carry a model identifier, all with green CI #17280 → [finding] The WAIT side of the shared process table is unguarded: pgrep -f matched the asking shell itself, and three background waiters sat deadlocked for 5 hours #17104 → AGENTS.md Protocol Domains table still lists Cloud | cloud/ after #16325 relocates the directory to marketplace/ #17370 .
scripts/pm/check-clause2-carriers.mjs + references/contract-review.md (60/60): FREE (PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 landed e9efc403) → A Claim: comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 → [finding] check-clause2-carriers reads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 . scripts/pm/check-widening-tells.mjs: [finding] check-clause2-carriers T1 reads a function PARAMETER annotated ctx: z.RefinementCtx as a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 in flight .
scripts/pm/check-half-states.mjs chain: PR fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745 (Card trailers in commit messages are caught pre-push, not post-push — a .githooks/pre-push refusal, the Part-of: colon gap in check:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 ) carries an out-of-face +60/−5 touch under justification → check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 (p2 Bug, the H22 docblock recipe) → [finding] check-half-states H19 counts a superseded Blocked-by: target that lives only in a historic COMMENT — three seats have now hand-dispositioned the same false positive on #11333 #17564 → [finding] H9's issue-ref class fires on a mid-sentence issue mention, so four tracked-path holds read clean (#8753 #8607 #8589 #6009) — the declaration-position narrowing was measured on the census but not landed #17605 → [finding] #15929's class recurred on #16934: a decision card whose Governing text: omitted the ADR that already decides it (ADR-0131 D8) reached batch presentation with a recommendation to re-rule — the text-level governing-text step failed at filing and at presentation; a mechanical prior-ruling search is asked #17009 D2 → [finding] label:finding is 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D2 → [finding] three PRs merged on 2026-09-09 still carrying needs:contract-review — no H row names a merged PR or closed card that still wears a gate label #17510 → [finding] Four patrol anchors tell the reader that a stalled Swept line means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 (the anchor heartbeat line; also scripts/render-release-coverage-anchor.mjs + two workflows' prose).
references/platform-readings.md (425/425 → the landed count on the family PR) + the ratchet's CEILINGS row: [finding] platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 family in flight (PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746 ) ([finding] a REST PATCH /pulls/{n} appends a second bare attribution footer — and the measured fix is to send NO footer at all, not to stop re-sending #17239 · [finding] Platform reading: every REST WRITE through the egress proxy needs an explicit Content-Type: application/json — without it the proxy answers 415 and nothing is written #17563 · [finding] platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710 ) → [finding] REST PATCH /issues/{n} with labels and type in ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (one row; rides the family PR only if free of a second review round); [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569 's rider rows on the same terms.
.githooks/pre-push + scripts/check-partof-closing-keyword.mjs + .claude/agents/os-dev.md (403/403): Card trailers in commit messages are caught pre-push, not post-push — a .githooks/pre-push refusal, the Part-of: colon gap in check:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 in flight (two PRs by merge path). references/dispatch-runbook.md (241/241): skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (free).
package.json + .github/workflows/lint.yml self-test step: [finding] label:finding is 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D1 (behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ). references/decision-analysis.md (50/50) + scripts/pm/check-prior-rulings.mjs: PR feat(pm): mechanise the prior-ruling search for decision cards #17515 at the human terminal → pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (the ①-first self-check line, maintainer-ordered; ceiling rises with it).
objectui AGENTS.md (577 on PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 's head): PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 ([finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for .changeset/ paths — a breaking changeset shipped locally-green and went red only in CI #8410 + docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492 ) at the human terminal → objectui#8640. objectui skills/objectui/guides/app-composition.md: PR [spec] Field.inlineColumns is z.array(z.any()) — a mis-keyed inline-grid column publishes clean and renders blank cells #9227 (fix(metadata-protocol): report a non-canonical stored type as skipped instead of canonical (#8957) #9059 ) at the human terminal . objectui scripts/upstream-port-pin.json: objectui#8696 (free). objectui docs/adr/0055: objectui#9223 (finding, routing waits on 「改」).
skills/objectstack-data/rules/security.md: skills: evaluate whether the published security/platform guidance must teach the app-capability vs system-permission distinction and the isDefault → everyone binding rule (after #17189) #17359 (blocked on An app-declared capability with scope: 'org' counts as a high-privilege bit, so a set carrying only app capability tokens cannot bind to the everyone anchor #17189 ). skills/objectstack-platform/SKILL.md, skills/objectstack-ai/SKILL.md: free.
Notes
Job description: references/lanes/skills.md. Standing facts carried forward (unchanged): value gate + reject authority from #13597 ; scripts/docs-audit/handwritten-docs.json NON-governed by ruling; published skills/** governed in objectui too; scripts/pm/** pure-code PRs land by in-seat contract-tier review → ready → queue, any .md in the diff ⇒ draft at the governed terminal; read the PR's event log before touching a governed draft; path face via check-governed-merges.mjs --test (objectui: check-governed-queue-guard.mjs --test). Publication register: none of objectstack / objectui / hotcrm / objectos is registered here as deploying on a default-branch push ⇒ treated as unverified; landing criterion = MERGED through the queue. Tier policy in force: this seat builds and reviews at the contract-review tier for the clause-① files (SKILL.md, os-dev.md) and published skills/**; references/**-only and AGENTS.md cards build at the default tier with the seat's contract-tier review. Squash setting on objectstack since 2026-09-12T00:19Z: PR_TITLE + PR_BODY — a PR body is now the landed commit message. Channel facts this session: REST open (core 15000/15000 · search 30/30 · graphql 10000/10000 at 00:27Z); MCP GitHub tools normal; list_repos answers objectstack, objectui, hotcrm only. Checkouts in this container: /home/user/objectstack (shared, fast-forwarded to 431c757 at seating, deepened to 2026-09-03), /home/user/objectui (b775500, deepened, no node_modules — dependency-free gates run there, the rest in dev worktrees); dev worktrees are named on their claims. Verify lock free at 00:27Z. Sessions in the cloud: none. PR subscriptions: none at seating. Patrol timer: check-in 3 trig_01DJrphM51UD3tHD6X4iapNh at 02:59Z (check-ins 1 and 2 fired 01:27Z / 02:13Z and were worked); re-armed first at every check-in while anything is in flight (≤45 min), 60–70 on standby. Platform fact measured 02:19Z: a REST issue PATCH carrying labels and type in one body returns 500 and writes nothing; two writes succeed (#17754 ). Session branch claude/pm-dispatch-skills-z4ysb5 at 431c757 (no seat edits; origin/main is e9efc403).
Generated by Claude Code
This post is the single authoritative registration of the skills seat. Four-section template; the job description is versioned at
.claude/skills/pm-dispatch/references/lanes/skills.md— ⛔ not copied here.Current PM
🟢 os-sales · session
session_01MCLBsUgfykL74aU716rzVK· ledger refreshed 2026-09-12T02:24Z (check-in 2) · seated 2026-09-12T00:35Z on the maintainer's/pm-dispatch skillssummon · R1. Previous incumbents: os-litantsession_01YKEjmbYNvYWJvWGSWx26zK(2026-09-10 → 2026-09-11, R1 waves 7–11, brief 5630147753); os-justinsession_01MoTv7pn338AZ71owsp19gQ(2026-09-09 → 2026-09-10, brief 5615648021); yinlianghuisession_01HxLw5aKDPR5RJgyUR7Exkd(brief 5598607084).Four mutex readings at 2026-09-12T00:26Z: latest close brief = 5630147753 and it is the newest event on this post; no later round-open marker; no foreign
Claim:on any lanepm:dispatched∪pm:queuecard after the brief (git ls-remote --heads origin 'claude/issue-*'over every queue card number answers onlyclaude/issue-17009-prior-ruling-searchandclaude/issue-17359-skills-capability-guidance, both pre-brief); newest CLOSED lane card byupdated_at= #17606 (2026-09-12T00:20Z) and it carries noClaim:at all (a director ruling and a maintainer close — cross-seat writing, not occupancy). Mutex clear; the brief is the release. Charter touch onorigin/main431c757(fetched at seating):SKILL.md,references/core-rules.mdandreferences/lanes/skills.mdall last touched1f0b565(2026-09-11T06:58Z), later than the previous marker's reading — all three re-read at tip before this write.Maintainer rulings in force (verbatim on their cards, ⛔ not restated): tier policy (#17285 → PR #17294, landed); card-home (#17288 → PR #17315, landed); published PM skill deleted (#17311 → PR #17325, landed); CLAUDE.md pointer program #17161 (3 of 5 repos landed; #17163 cloud / #17165 www wait on repo attachment; #17164 objectos → PR #283 at the human terminal, objectos not readable from this session); review-of-record (#17302 → PR #17349, landed); #17189 rider → #17359 (blocked); forced-takeover ruling (#17033, landed); #15367 ruled A (batch #91) with the root-artefact-vs-browser-dump equality as a PRECONDITION; #17389 = maintainer direct dispatch (「这个是决裁的基本原则,应该写入skills」, p1); #17606 + #15913 ruled A (batch #116, 2026-09-12T00:17Z, 5642107272): the squash message comes from the PR body — the setting was applied by hotlong at 00:19Z on objectstack (
PR_TITLE+PR_BODY; the ruling's exit names BOTH repos, the director seat verifies) → #17727 (this lane, p2: pre-push trailer refusal, thePart-of:colon gap, the gate's re-scope to the PR body).Inherited + running ledger (hand-off)
mode:subagent, worktrees/home/user/objectstack-issue-<n>, faces disjoint): [finding]platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 family (p2,platform-readings.mdrows for [finding]platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 · [finding] a RESTPATCH /pulls/{n}appends a second bare attribution footer — and the measured fix is to send NO footer at all, not to stop re-sending #17239 · [finding] Platform reading: every REST WRITE through the egress proxy needs an explicitContent-Type: application/json— without it the proxy answers 415 and nothing is written #17563 · [finding]platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710; anchor claim 5642555988, dispatched 01:35Z; draft PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746 headfe5fb9d8, no report yet; governed ⇒ human terminal) · Card trailers in commit messages are caught pre-push, not post-push — a.githooks/pre-pushrefusal, thePart-of:colon gap incheck:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 (p2, pre-push trailer refusal +Part-of:colon gap + RULE 2 re-scope + oneos-dev.mdline; claim 5642558438, dispatched 01:35Z; PR-A fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745 head929c205a— its out-of-face touch oncheck-half-states.mjsis being justified or dropped on the seat's message; PR-B (os-dev.md) pending; no report yet) · [finding]check-clause2-carriersT1 reads a function PARAMETER annotatedctx: z.RefinementCtxas a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 (p1 Bug, the T1 widening tell's scope incheck-widening-tells.mjs; claim 5642827410, dispatched 02:22Z; pure code ⇒ in-seat contract-tier review → ready → queue). On each report: review perreview-checklist.mdat the tier the claim names; gates reconciled with--ranon the final diff.check:react-declaration-parityrefuses to run for want of a manifest that is now checked in at the repo root #15367, head82b83613, AGENTS.md parity-gate sentences after the ruling's measurement; ACCEPT 5642433729, 速读 5642428943; CI 17 green / 16 skipped at 01:26Z) · PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734 (skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis framework — 「以 objectstack 协议为准,文档以实际实现为准」, spec > implementation > documentation #17389, headea98fed9, the base adjudication principle in the four-axis block + core-rules; ACCEPT 5642446122, 速读 5642446256; the frame block's md5 becomes3327d02c…on merge — later dispatch words paste the new block) · PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ([finding] #15929's class recurred on #16934: a decision card whoseGoverning text:omitted the ADR that already decides it (ADR-0131 D8) reached batch presentation with a recommendation to re-rule — the text-level governing-text step failed at filing and at presentation; a mechanical prior-ruling search is asked #17009 D1, headf4dbf03e, the predecessor's four-piece; on MERGED the card returns topm:queuefor D2, ⛔ not closed) · objectui PR [spec] Field.inlineColumns is z.array(z.any()) — a mis-keyed inline-grid column publishes clean and renders blank cells #9227 (fix(metadata-protocol): report a non-canonical stored type as skipped instead of canonical (#8957) #9059, headefd2d607, the app-composition exclusivity line; ACCEPT 5642552565, 速读 5642552690) · objectui PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 ([finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for.changeset/paths — a breaking changeset shipped locally-green and went red only in CI #8410 + docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492, head17359148, two evidentiary rules in objectui AGENTS.md §9; ACCEPT 5642553191, 速读 5642553505) · objectos PR 🔗 Broken links detected in documentation #283 ([objectos] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17164; objectos unreachable from this session). On MERGED: landing record on the card(s) +pm:dispatched/ assignee cleared in one write with read-back; chains advance (SKILL.md → [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touchesskills/**— the tier it requires is reserved away from every lane that can hit it #17490; AGENTS.md → AGENTS.md tells agentscheck:react-declaration-paritycannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405; objectui AGENTS.md → objectui#8640).check-clause2-carriersC4 recognise the live contract-review verdict dialect, and name the session a reviewer writes #17368 ([finding]check-clause2-carriersC4 is silent on every 2026-09-09 contract-review verdict — itsVERDICT:discriminator and session-onlyReviewed-by:grammar match neither the boldVerdict:heading dialect nor the isolated-subagent authorship the seats now write #17346)bc2bf01c· docs(agents): a PR declaring clause-② grades its changeset at least minor #17415 ([finding] PR #16650 merged with clause-②yesand both packages it grew gradedpatch— the LEVEL axis could not see them, so it printed green #16973)155b875d· docs(skills): state whatsingleposture means for the organization count in objectstack-data #17476 ([finding] The publishedobjectstack-dataskill never says whatsingleposture means for the organization count — an AI app author reading it (and the code's exemption list) lands on 「staysingle, seed onesys_organizationper tenant, bring your own RLS wall」; the sentence that forbids that shape lives only incontent/docs/deployment/tenancy-modes.mdxand ADR-0105 §「Today's two postures」, neither linked from the skill #17019)7d350a46· docs(pm): engine lane red line points at the anchoring rule's lint exception #17519 ([finding]references/lanes/engine.md:15statespackages/lint⇒domain:devxwith no exception — a third text carrying the lane-table mis-read #16993 measured #17088)8f751cdc· docs(pm): record three measured auto-merge and label-cap platform readings #17523 ([finding] The pm-dispatch landing rule lets a dev's auto-merge delete the seat's review entirely — arming on an already-green PR merges immediately #17160)d8de5995· docs(pm): add docs/qa/** to the domain:devx row of the lane table #17526 ([finding] the域车道table in pm-dispatch SKILL.md has no entry fordocs/qa/**, so checklist-area cards are routed by judgment call #17459)735a2059· fix(pm): guard-governed-enqueue reads a rename's old path too #17531 ([finding] guard-governed-enqueue.sh reads only 'filename' from the changed-files API — a PR that renames a governed file OFF the governed surface reads as NOT governed #17503)f8ee4918· docs(skills): stageOrder is funnel-only at the three hand-written sites #17538 (Three hand-written sites still documentoptions.stageOrderfor apyramidchart type the schema refuses #17471)f55922f2· docs(agents): point os-dev at the surviving decision-frame copy #17540 ([finding] The os-dev dispatch template's{decision_frame}slot is optional and unconditioned, so it is omitted exactly on the rounds that returnneeds_decision— two independent rounds hit it the same day #17520)526a2668· docs(adr): ADR-0131 §1.2(3) — the precondition is reachable and reported at boot, not a refused boot #17544 (docs(adr): ADR-0131 §1.2(3) calls a precondition "today a refused boot" — nothing refuses it, and #17010 measured the silent boot it describes #17467)e03cb884· docs(skills): bind three evidence controls onto the retirement playbook's liveness step #17566 ([finding] Two retirement cards in one day rested on false "dead key" premises — the census used as evidence scores the same zero for a known-live key, and cross-repo liveness evidence rots faster than its verdict #17553)1a089328· docs(pm): base the REST draft-flip row on a probe, not the docs #17597 ([finding] Platform reading: RESTPATCH /pulls/{n}with{"draft": false}answers HTTP 200 and silently does nothing — the channel table records the field as unsupported, but on documentation, and a 200 reads as success #17582)76c9fab3. Through the queue by this seat: PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 (条款②声明载体是一扇单向门:席位能把自己写进一个自己出不去的状态 —— 一个会话里同一个坑被踩了 5 次 #17366)e9efc403MERGED 2026-09-12T01:54Z (ACCEPT + landing record 5642782164; residue cleared).platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 p3 Task · [finding]platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 p2 Task · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710 p3 Task (grading comments 5642286838 / 5642287310 / 5642287727) — folded into the platform-readings family (wave 3); at check-in 2: [finding]check-clause2-carriersT1 reads a function PARAMETER annotatedctx: z.RefinementCtxas a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 p1 Bug (5642818369; landing point corrected tocheck-widening-tells.mjs; dispatched wave 4) · check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 p2 Bug (5642822751; the three H22 docblock statements survive PR fix(pm): re-pin H22 closed-issue update rate from a card-only measurement of the stream the patrol actually pages #17627) · [finding] Four patrol anchors tell the reader that a stalledSweptline means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 p3 Task (5642823048; the filing seat's grade stands) · backlog sweep: an UNGRADED card sitting inpm:queuewith adomain:*matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 p2 Task (5642823259; no H row covers the shape — a gap, count first).findingoff andtypeset on all four. pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (director-filed, p2, maintainer's word) read and placed behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515 ondecision-analysis.md;typeTask set here — like Card trailers in commit messages are caught pre-push, not post-push — a.githooks/pre-pushrefusal, thePart-of:colon gap incheck:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727, it arrived with none (triage gap recorded). Filed by this seat: skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (p2 Task — the patrol timer armed once at seating as a self-bound Routine; SKILL.md chain) · skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (p3 Task — a mid-task narrowing names the replacement owner;dispatch-runbook.md) · [finding] the tracked rootsdui.manifest.jsonand the browser dump differ on the fields the parity gate consumes (18 of 57 components;dataSourcemissing on 15 in the root artefact) — the gate's verdict set is identical under both today, which is the configuration in which the drift is least visible #17735 (finding, spec lane) · [finding]docs/releases-maintenance.md:113–:121,scripts/bump-objectui.shandscripts/build-console.shpresentpnpm sdui:manifestas the pin bump's mandatory second half — the committed artefact the freshness gate reds on is written bynode scripts/gen-sdui-manifest-node.mjs, which none of them names #17736 (finding, devx lane) · objectui#9223 (finding— ADR-0055 item 5, the maintainer's call) · [finding] RESTPATCH /issues/{n}withlabelsandtypein ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (p3 Task, self-graded — RESTPATCHwithlabels+typein one body returns 500; oneplatform-readings.mdrow behind the family PR).pm:queue, this lane) at this refresh — 24: p2 Bugs AClaim:comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 · [finding]check-clause2-carriersreads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 (clause2-carriers chain, FREE — PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 landed) · check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 (half-states chain, behind PR fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745's touch) · AGENTS.md tells agentscheck:react-declaration-paritycannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405 · AGENTS.md declares the agent commit trailer pair model-free and nothing enforces it — 18 commits on 5 open PR branches carry a model identifier, all with green CI #17280 (AGENTS.md chain, behind PR docs(agents): state the tracked root SDUI manifest and the per-PR parity run #17733); p2 Tasks [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touchesskills/**— the tier it requires is reserved away from every lane that can hit it #17490 · [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569 · skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 · backlog sweep: an UNGRADED card sitting inpm:queuewith adomain:*matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 (SKILL.md chain, behind PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734) · pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (decision-analysis.md, behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515); p3 Bugs [finding] check-half-states H19 counts a supersededBlocked-by:target that lives only in a historic COMMENT — three seats have now hand-dispositioned the same false positive on #11333 #17564 · [finding] H9'sissue-refclass fires on a mid-sentence issue mention, so four tracked-path holds read clean (#8753 #8607 #8589 #6009) — the declaration-position narrowing was measured on the census but not landed #17605 (half-states chain); p3 Tasks [finding]label:findingis 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D1 (behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515) · [finding] The WAIT side of the shared process table is unguarded:pgrep -fmatched the asking shell itself, and three background waiters sat deadlocked for 5 hours #17104 · AGENTS.md Protocol Domains table still listsCloud | cloud/after #16325 relocates the directory tomarketplace/#17370 (AGENTS.md chain) · [finding] Two triage gradings named a target the governing ADR itself rejects — the grading quotes no line of the adjudication it routes against #17497 (SKILL.md chain) · [finding] three PRs merged on 2026-09-09 still carryingneeds:contract-review— no H row names a merged PR or closed card that still wears a gate label #17510 · skills(pm tooling): 分诊席一班攒下的四道写入纪律只活在会话 scratchpad 里 —— 随容器消失,其中「并发出现的六态属他席」这条原则章程未成文 #17624 · [finding] Four patrol anchors tell the reader that a stalledSweptline means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 (half-states chain tail) · skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (dispatch-runbook.md, free) · [finding] RESTPATCH /issues/{n}withlabelsandtypein ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (platform-readings.md, behind PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746); unattachable [cloud] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17163 · [www.objectos.ai] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17165; held for the maintainer 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 (p1). Next free slot ⇒ AClaim:comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 (p2 Bug, free chain head), then [finding]check-clause2-carriersreads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098 / skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 / skills(pm tooling): 分诊席一班攒下的四道写入纪律只活在会话 scratchpad 里 —— 随容器消失,其中「并发出现的六态属他席」这条原则章程未成文 #17624 / [finding] three PRs merged on 2026-09-09 still carryingneeds:contract-review— no H row names a merged PR or closed card that still wears a gate label #17510 by the total order. objectuipm:queue2: [finding] the fable-mandatory tier is recalled at claim time, not derived — a mandatory-surface card shipped at opus because the claim comment misclassified its file surface #8640 (p2 Task, objectui AGENTS.md — behind PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226) · A boundexternal.credentialsRefis silently dropped on the DSN branches of the mysql and mongodb driver arms #8696 (p3 Task,scripts/upstream-port-pin.json, free after objectui PR docs(pm): PM token discipline — seat-post throttling, targeted reads, dispatch-prompt slimming at net-zero lines #9207 landed).astbecomes required in build output" — are asserted in six files and one published docs page, and defined in no ADR #17323 (p2).pm:awaiting-maintainer: [Decision] 22 pure-objectui defect cards live in objectstack underrepo:objectui, but objectui IS reachable — the seam fallback is being used where its precondition does not hold #17250 · A claim corrected during review still ships in history: the squash message is built from commit messages, which no review round reads #15913 (setting D: objectstack readsPR_TITLE+PR_BODYat 01:28Z; objectui stillCOMMIT_OR_PR_TITLE+COMMIT_MESSAGES— the ruling's exit names both repos; the director seat verifies). Holds: [PM decision] skills lane batch 9 — platform-readings.md third increment: raise the ceiling by the measured +39 (358 → 397); and the MCP write-pool quota sentence collision #15275 · [finding] A contract-review PASS leaves ZERO trace on the PR itself — verdict on the card, label cleared, no review object — so a legitimate un-park is indistinguishable from an intruder from the PR side #13417 · [finding] MCPsearch_issuesDID honour GitHub qualifiers (repo:is:label:) in two exact readings — the ledger's "qualifier form returns total_count 0" rule needs a second session before it stands or falls #16762 · [Decision] The shared GitHub identity's GraphQL quota is being burned to 2× — MCP writes go through GraphQL, so seats are silently write-blocked while reads keep working #11742. Blocked:hotcrmhas no half-state patrol anchor, so thepm:dispatched+ assignee residue after aFixesauto-close has now been repaired by hand seven rounds running #14881 (os-steve) · skills: evaluate whether the published security/platform guidance must teach the app-capability vs system-permission distinction and theisDefault→everyonebinding rule (after #17189) #17359 (Blocked-by: #17189). Anchors left to owners: PM corpus audit (maintainer-directed): classify every instruction line — keep / duplicate / demote / delete — then rewrite and re-lock every ratchet #13597 · Published-skills factual sweep: verify every behavioral claim in skills/** against the implementation — program anchor #13658 (pm:epic) · Skills catalog optimization program (maintainer-directed): audit every skill on both roots, then optimize — program anchor #14292 · [program] CLAUDE.md is a pointer to AGENTS.md in every repo — no second instruction set to maintain (maintainer 2026-09-09) #17161.mainruleset +Governed Surface Queue Guard(objectui#6596); the objectui half of setting D; attaching cloud / www / objectos ([cloud] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17163 / [www.objectos.ai] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17165 / [objectos] CLAUDE.md becomes a pointer to AGENTS.md — measure the pair first, then reduce to the pointer #17164's landing record); the sixrepo:hotcrmcards; hotcrm#1819; 共享身份的限流纪律不存在:一次限流信号约束的是「身份」不是「客户端」,而规矩只说了不要重试 —— 2026-09-10 全 fleet 停摆事故 #17374 (p1, held); the timer-arming direction on skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (veto window).--since-ref objectstack=0918c441188c --since-ref objectui=689953ae9a57): 15 governed merges, allmerged_byos-zhuang — objectstack PR docs(agents): a PR declaring clause-② grades its changeset at least minor #17415 · feat(spec)!: retire thetype: 'page'list-view mount and itspageNamebinding #17298 · pm-dispatch: makecheck-clause2-carriersC4 recognise the live contract-review verdict dialect, and name the session a reviewer writes #17368 · docs(pm): base the REST draft-flip row on a probe, not the docs #17597 · docs(skills): bind three evidence controls onto the retirement playbook's liveness step #17566 · docs(adr): ADR-0131 §1.2(3) — the precondition is reachable and reported at boot, not a refused boot #17544 · docs(agents): point os-dev at the surviving decision-frame copy #17540 · docs(skills): stageOrder is funnel-only at the three hand-written sites #17538 · fix(pm): guard-governed-enqueue reads a rename's old path too #17531 · docs(pm): record three measured auto-merge and label-cap platform readings #17523 · docs(pm): add docs/qa/** to the domain:devx row of the lane table #17526 · docs(pm): engine lane red line points at the anchoring rule's lint exception #17519 · docs(skills): state whatsingleposture means for the organization count in objectstack-data #17476 · fix(cli):os migrate meta --from Nlists the conversions its tombstones prescribe, and an empty range stops reading as success #17462; objectui PR docs: spell the console form routes with the real/_consolemount #9079.--since-ref objectstack=431c75712090 --since-ref objectui=b775500af677.#17044/#17032in a historical marker comment on this post (recorded, left as is); no H row names a lane card or PR. H17 index ∩ every dispatched face this fire = ∅ ([finding] html tier:action:button/action:icondeclare an input namedtype, so the discriminator refusal makes that input unauthorable on the html tier — and the refusal's prescription ("write the tag you meant") has no answer for these two components #14490's trigger files were read-only inputs ofcheck:react-declaration-parityrefuses to run for want of a manifest that is now checked in at the repo root #15367's measurement, named on that claim).Hot-file serial queue
.claude/skills/pm-dispatch/SKILL.md(812/812) +references/core-rules.md(151/151): PR skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis frame #17734 (skills(pm-dispatch): write the maintainer's base adjudication principle into the four-axis framework — 「以 objectstack 协议为准,文档以实际实现为准」, spec > implementation > documentation #17389) at the human terminal (the four-axis block :734–:755 + core-rules :143) → [finding] A non-skills lane cannot satisfy the governed fork's at-tier review rule for a PR that touchesskills/**— the tier it requires is reserved away from every lane that can hit it #17490 (:610, the tier conjunction) → [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569 (the zero-hit rule's control scope) → skills(pm-dispatch): the patrol timer is armed ONCE at seating as a self-bound Routine and deleted at sign-off — a round-end re-arm skipped once idled a seat ~7 h #17728 (the seating-time Routine) → backlog sweep: an UNGRADED card sitting inpm:queuewith adomain:*matches none of the three disjunctions — invisible to triage, visible to the lane's candidate query #17742 (the sweep's fourth disjunct or its H-row home; count first) → [finding] Two triage gradings named a target the governing ADR itself rejects — the grading quotes no line of the adjudication it routes against #17497 (p3, the triage grading's governing line) → the ADR-routing row once the maintainer says 「改」.references/lanes/*.md: free.AGENTS.md(1075/1075): PR docs(agents): state the tracked root SDUI manifest and the per-PR parity run #17733 (check:react-declaration-parityrefuses to run for want of a manifest that is now checked in at the repo root #15367) at the human terminal (the parity-gate sentence family, sites A + B) → AGENTS.md tells agentscheck:react-declaration-paritycannot run locally and "comes not from CI" — a manifest is checked in at the repo root, so agents record NOT MEASURED where a green is one command away #17405 → AGENTS.md declares the agent commit trailer pair model-free and nothing enforces it — 18 commits on 5 open PR branches carry a model identifier, all with green CI #17280 → [finding] The WAIT side of the shared process table is unguarded:pgrep -fmatched the asking shell itself, and three background waiters sat deadlocked for 5 hours #17104 → AGENTS.md Protocol Domains table still listsCloud | cloud/after #16325 relocates the directory tomarketplace/#17370.scripts/pm/check-clause2-carriers.mjs+references/contract-review.md(60/60): FREE (PR fix(pm): give the clause-② declaration limb a self-solvable exit #17738 landede9efc403) → AClaim:comment that yields ZERO parsed branches silently stops governing instead of saying so — #16170's class recurring in a third spelling, now measured on three live cards #17149 → [finding]check-clause2-carriersreads a key-INITIAL describing line as a declaration — its own self-test asserts the general property "only DESCRIBES ⇒ MISSING", and the fixture pinning it covers only the other half #17098.scripts/pm/check-widening-tells.mjs: [finding]check-clause2-carriersT1 reads a function PARAMETER annotatedctx: z.RefinementCtxas a new authorable key — so every PR that adds an object-level refusal raises a widening tell for the refusal itself #17618 in flight.scripts/pm/check-half-states.mjschain: PR fix(ci): refuse card relations in commit messages at push, and re-scope the PR-time gate to the body #17745 (Card trailers in commit messages are caught pre-push, not post-push — a.githooks/pre-pushrefusal, thePart-of:colon gap incheck:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727) carries an out-of-face +60/−5 touch under justification → check-half-states: H22 pages a CARD-ONLY stream on the patrol runner and a PR-inclusive one from an agent container, so the file's own cost note, page-ceiling derivation and every hand re-measure describe a population the sweep never reads #17626 (p2 Bug, the H22 docblock recipe) → [finding] check-half-states H19 counts a supersededBlocked-by:target that lives only in a historic COMMENT — three seats have now hand-dispositioned the same false positive on #11333 #17564 → [finding] H9'sissue-refclass fires on a mid-sentence issue mention, so four tracked-path holds read clean (#8753 #8607 #8589 #6009) — the declaration-position narrowing was measured on the census but not landed #17605 → [finding] #15929's class recurred on #16934: a decision card whoseGoverning text:omitted the ADR that already decides it (ADR-0131 D8) reached batch presentation with a recommendation to re-rule — the text-level governing-text step failed at filing and at presentation; a mechanical prior-ruling search is asked #17009 D2 → [finding]label:findingis 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D2 → [finding] three PRs merged on 2026-09-09 still carryingneeds:contract-review— no H row names a merged PR or closed card that still wears a gate label #17510 → [finding] Four patrol anchors tell the reader that a stalledSweptline means the caller died — none states the interval that makes "stalled" decidable, and their cadences differ by 4× #17720 (the anchor heartbeat line; alsoscripts/render-release-coverage-anchor.mjs+ two workflows' prose).references/platform-readings.md(425/425 → the landed count on the family PR) + the ratchet's CEILINGS row: [finding]platform-readings.md's «backticks and bold are read» rule is TRUE of the PR-body gate and FALSE of the claim-comment limb — and it cost three of this seat's claim comments, two of which declared the opposite of the truth #17680 family in flight (PR docs(pm): eleven platform readings into the fact table — 23 rows, 3 in-place corrections, ceiling 425 to 448 #17746) ([finding] a RESTPATCH /pulls/{n}appends a second bare attribution footer — and the measured fix is to send NO footer at all, not to stop re-sending #17239 · [finding] Platform reading: every REST WRITE through the egress proxy needs an explicitContent-Type: application/json— without it the proxy answers 415 and nothing is written #17563 · [finding]platform-readings.md's attribution-footer table has no ISSUE-BODY carrier — three cells measured today, and bare REST SYNTHESIZES a footer where the PR-side reading says the MCP wrapper does not #17677 · finding(pm-dispatch): domain:cli seat R73 (2026-09-11) — shift-end items in the three categories (platform facts · principle gaps · mechanizable) #17710) → [finding] RESTPATCH /issues/{n}withlabelsandtypein ONE body returns 500 and writes nothing; the same two fields as two writes succeed #17754 (one row; rides the family PR only if free of a second review round); [finding] The "pair every zero with a control" rule does not say the control must be scoped to the same thing as the claim — three misses in one shift, every one returning a reassuring answer #17569's rider rows on the same terms..githooks/pre-push+scripts/check-partof-closing-keyword.mjs+.claude/agents/os-dev.md(403/403): Card trailers in commit messages are caught pre-push, not post-push — a.githooks/pre-pushrefusal, thePart-of:colon gap incheck:partof-closing-keyword, and the gate's re-scope once the squash message comes from the PR body #17727 in flight (two PRs by merge path).references/dispatch-runbook.md(241/241): skills(pm-dispatch): a mid-task note that narrows a standing dispatch contract names the replacement owner and the moment — otherwise it manufactures a half-state (a C1 dual-carrier split measured on PR #17725 / #16804) #17729 (free).package.json+.github/workflows/lint.ymlself-test step: [finding]label:findingis 2% precise as the "ungraded" index — 385 of 395 open cards carrying it are already graded, on both boards #16904 D1 (behind PR feat(pm): mechanise the prior-ruling search for decision cards #17515).references/decision-analysis.md(50/50) +scripts/pm/check-prior-rulings.mjs: PR feat(pm): mechanise the prior-ruling search for decision cards #17515 at the human terminal → pm-dispatch charter: add a mechanical self-check to the recommendation item so axis ① (≥50%) derives the letter and ②③④ cannot flip it (maintainer, 2026-09-12) #17748 (the ①-first self-check line, maintainer-ordered; ceiling rises with it).AGENTS.md(577 on PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226's head): PR 技能卡:标签写前同动作内重读——陈旧快照整组回写陷阱行收紧(行中性) #9226 ([finding] dispatch-gates.mjs does not derive pr-automation.yml's Check Changeset for.changeset/paths — a breaking changeset shipped locally-green and went red only in CI #8410 + docs(pm-dispatch): fable quota-exhaustion exemption in Model tiering #8492) at the human terminal → objectui#8640. objectuiskills/objectui/guides/app-composition.md: PR [spec] Field.inlineColumns is z.array(z.any()) — a mis-keyed inline-grid column publishes clean and renders blank cells #9227 (fix(metadata-protocol): report a non-canonical stored type as skipped instead of canonical (#8957) #9059) at the human terminal. objectuiscripts/upstream-port-pin.json: objectui#8696 (free). objectuidocs/adr/0055: objectui#9223 (finding, routing waits on 「改」).skills/objectstack-data/rules/security.md: skills: evaluate whether the published security/platform guidance must teach the app-capability vs system-permission distinction and theisDefault→everyonebinding rule (after #17189) #17359 (blocked on An app-declaredcapabilitywithscope: 'org'counts as a high-privilege bit, so a set carrying only app capability tokens cannot bind to theeveryoneanchor #17189).skills/objectstack-platform/SKILL.md,skills/objectstack-ai/SKILL.md: free.Notes
Job description:
references/lanes/skills.md. Standing facts carried forward (unchanged): value gate + reject authority from #13597;scripts/docs-audit/handwritten-docs.jsonNON-governed by ruling; publishedskills/**governed in objectui too;scripts/pm/**pure-code PRs land by in-seat contract-tier review → ready → queue, any.mdin the diff ⇒ draft at the governed terminal; read the PR's event log before touching a governed draft; path face viacheck-governed-merges.mjs --test(objectui:check-governed-queue-guard.mjs --test). Publication register: none of objectstack / objectui / hotcrm / objectos is registered here as deploying on a default-branch push ⇒ treated as unverified; landing criterion = MERGED through the queue. Tier policy in force: this seat builds and reviews at the contract-review tier for the clause-① files (SKILL.md, os-dev.md) and publishedskills/**;references/**-only andAGENTS.mdcards build at the default tier with the seat's contract-tier review. Squash setting on objectstack since 2026-09-12T00:19Z:PR_TITLE+PR_BODY— a PR body is now the landed commit message. Channel facts this session: REST open (core 15000/15000 · search 30/30 · graphql 10000/10000 at 00:27Z); MCP GitHub tools normal;list_reposanswers objectstack, objectui, hotcrm only. Checkouts in this container:/home/user/objectstack(shared, fast-forwarded to431c757at seating, deepened to 2026-09-03),/home/user/objectui(b775500, deepened, no node_modules — dependency-free gates run there, the rest in dev worktrees); dev worktrees are named on their claims. Verify lock free at 00:27Z. Sessions in the cloud: none. PR subscriptions: none at seating. Patrol timer: check-in 3trig_01DJrphM51UD3tHD6X4iapNhat 02:59Z (check-ins 1 and 2 fired 01:27Z / 02:13Z and were worked); re-armed first at every check-in while anything is in flight (≤45 min), 60–70 on standby. Platform fact measured 02:19Z: a REST issuePATCHcarryinglabelsandtypein one body returns 500 and writes nothing; two writes succeed (#17754). Session branchclaude/pm-dispatch-skills-z4ysb5at431c757(no seat edits;origin/mainise9efc403).Generated by Claude Code