Repository navigation
Description
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb
Filing gate: ③ maintainer-directed. Ruling-ref: Leehom, project chat 2026-11-14T22:42:56Z, verbatim 「同意 把低风险的 Tier H 放权给座位」, agreeing to the scope the coordinator proposed to him. In the coordinator's words, not his: pure docs, ADR annotations or notes, and skills wording are landed by the seat itself once the in-seat contract review passes. Anything that touches a contract (spec or published types, Clause ②, narrowing) or security still goes to Leehom.
维护者速读
你已同意把低风险的 Tier H 交给席位落地,但门禁还没跟上:合并队列的 Governed Surface Queue Guard(必需检查)只在 os-zhuang / hotlong 批准或入队时放行 Tier H,skills/** 在登记表里写死为 Tier H。席位现在入队会被弹出。本卡把裁决落到登记表、门禁和 AGENTS.md 第 14 条,合入仍需你亲手合并(它本身改的是 Tier H 文件)。
What blocks the ruling today
scripts/pm/check-governed-merges.mjsGOVERNED_SURFACES:skills/**anddocs/adr/**are Tier H. The header says "Publishedskills/**stays Tier H: the seat did not propose moving it."scripts/pm/check-governed-queue-guard.mjs(themerge_groupleg of the required checkGoverned Surface Queue Guard) passes a Tier H PR only on an APPROVED review or an enqueue byGOVERNED_APPROVERS(os-zhuang,hotlong). A Tier S PR passes on the seat's own## Contract reviewPASS record for the current head.AGENTS.mdPrime Directive 14 lists these surfaces as Tier H, andpnpm check:pm-governed-proseholds that paragraph to the register.
What lands
- A low-risk arm of Tier S in the register, under the ruling's scope:
skills/**(with.changeset/**) is Tier S when the diff touches no other governed path and nopackages/**,ui/packages/**or other published source.docs/**andcontent/docs/**prose are ungoverned already. State in the register header that they need nothing.docs/adr/**: a note or annotation is low risk, but a change to a decision is not, and paths alone cannot tell them apart. Propose a mechanical reading inopen_questions, for example aLow-risk: annotationline on the seat's PASS record that the guard reads, or leave ADRs Tier H. Do not decide it in code without the seat's word.- Fail closed as today: a mixed diff, a Clause-② trigger, a
securitylabel, or an unreadable record is Tier H.
- The guard reads the new arm through
governedTierFor(no second copy), with--self-testrows pinning each of these: a pure skills diff on a PASS record passes; skills pluspackages/spec/**stays H; skills withClause-②: yesstays H; no record stays H. - AGENTS.md Prime Directive 14 and the pm-dispatch references (
landing-operations.md,lanes/skills.md,contract-review.mdwhere they restate the tier) name the low-risk arm and cite this ruling.check:pm-governed-prosestays green. - The post-merge audit (
check-governed-merges.mjs) reports a low-risk Tier S merge without a PASS record as a finding, as it does for.claude/**today.
Done when
A pure skills/** wording PR with a same-head PASS record lands through the queue on the seat's enqueue, and the guard refuses each of the H cases above.
Reach
Every lane's skills and docs PRs. About seven PRs are waiting on a maintainer click right now (#33394, #33455, #33458, #33460, #33475, #33480, #33482).
Activity
objectstack-fleet commentedon Nov 14, 2026
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb
Claim: PM loop round 4
Session:
session_01FEkQ5pjSPT7ui2EUcunaVbAccount:
os-project-managerBranch:
claude/project-thread-dhp24eWorktree:
objectstack-issue-33501Domain:
domain:skillsSeat:
domain:skills#1File surface:
scripts/pm/check-governed-merges.mjs,scripts/pm/check-governed-queue-guard.mjs(self-tests included),AGENTS.md(Prime Directive 14 only),.claude/skills/pm-dispatch/**where it restates the tier (stop on breach; explain in the report)Container & model:
M,mode:thread,model: opus(default;dispatch-gates --tieron the real diff decides),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect cardThread-read: none
Premise: holds (measured 22:45Z: a seat enqueue of a Tier H skills PR is refused by the required
Governed Surface Queue Guard)Serial constraints: #33484 (in flight, pm-dispatch references and
scripts/pm/): mergeorigin/mainbefore push and name any shared fileOrder:
/mnt/project-files/pm-orders/skills/order-33501.md(project file). Graded p1 in this stroke on Leehom 「把低风险的 Tier H 放权给座位,立 p1 卡优化」 (2026-11-14T22:47Z). Ruling-ref: Leehom 「同意 把低风险的 Tier H 放权给座位」 (2026-11-14T22:42Z). Claimed 2026-11-14T22:48Z.os-project-manager commentedon Nov 14, 2026
Grading: P1 (was p2 + p1 both hung;
priority:p2removed). Ruling-ref: Leehom, project thread 2026-11-14T22:47:23Z, verbatim 「把低风险的 Tier H 放权给座位,立 p1 卡优化」, after 22:42:56Z 「同意 把低风险的 Tier H 放权给座位」.What else the change has to reach (read on main
f068cde8)skills/**) and docs(adr-0055): record the 2026-11-14 amendment, writeRequiresMasterRead — read on the master is enough to write, by opt-in #33425 (docs/adr/**) merged on 2026-11-14 with zero reviews. The only hard stop is themerge_groupleg ofGoverned Surface Queue Guard, as the card says. No GitHub settings change is owed by the maintainer./skills/and/docs/adr/as they are. They only summon approvers.--self-test'scodeownersMirrorVerdictreds when a Tier S row is routed there, so model the low-risk arm as a diff reading on the Tier H row (the wayreadWorkflowDiffsplits.github/workflows/**), not as a row moved to Tier S. Then the mirror stays green and a contract-touching skills PR still summons the approvers.execute.mjsgovernedReviewPlantakeslandingTierOfover paths alone and applies only the workflow split. Unless the low-risk reading is applied there too, every low-risk skills/ADRpr_readystill requests os-zhuang/hotlong (noise, not a block).ENQUEUE_FRONT_FENCESgoverned(jump) can stay as it is.Served-tier: CONTRACT_REVIEW_TIER+ PASS on the current head, neverTIER_DEFAULT.ui/skills/**is skills wording too and belongs in the arm. ADR notes and annotations are inside the ruling (not optional), sodocs/adr/**should get the mechanical reading the card proposes rather than staying Tier H by default; a new ADR or a change to a decision line stays H..claude/**):SKILL.md:186,202,references/contract-review.md:16,51,references/landing-operations.md:12,89,references/execution-duties.md:17(the soft cap of 5 waiting Tier H PRs should count only those that stay H),references/lanes/skills.md:24, andreferences/coordinator.mdwhere it says Tier H stays draft.AGENTS.md,scripts/pm/check-governed-*.mjsand possibly CODEOWNERS, so it is Tier H itself and lands by Leehom's hand. The seven waiting PRs keep needing his click until it merges.Generated by Claude Code
objectstack-fleet commentedon Nov 14, 2026
domain:skills#1 · os-project-manager · session_01FEkQ5pF46HJnpBrhgVWtwV
os-dev-report
{
"issue": 33501,
"status": "done",
"branch": "claude/project-thread-dhp24e",
"pr": "#33531",
"session": "session_01FEkQ5pF46HJnpBrhgVWtwV",
"premise_still_valid": true,
"summary": "The skills-catalog and ui-skills-catalog register rows keep tier H and carry a low-risk reading (lowRiskArmVerdict in check-governed-merges.mjs), modelled on the workflows split: Tier S only when every governed path is a catalog path, every other path is a .changeset/*.md or Markdown prose under docs/ or content/docs/ (an allowlist of shapes), the PR body declares a bare Clause-② no (readClause2Line) and no security label; anything else or an unread input is H. The queue guard keeps every path of every commit of the PR (allPaths) and, on merge_group, re-reads the catalog entry's tier through governedTierFor with the body and labels of the pull object it already fetches (readLowRiskTier); the existing Tier S record leg then needs a same-head CONTRACT_REVIEW_TIER PASS. --pr answers the arm off its own GET (live: 33394 and 33482 read Tier S). AGENTS.md PD 14 and two pm-dispatch lines name the arm; docs/adr stays Tier H (open question below).",
"tests": "Head 69addfe. check-governed-merges --self-test exit 0, 640 assertions (was 616; new 24-case battery, roster floor 36 to 37). check-governed-queue-guard --self-test exit 0, 449 cases (was 433; new 16-case end-to-end battery through runGuard, roster floor 30 to 31): pure skills + changeset + same-head record clears with zero approvals; no record or older-head record refused; each H case with a valid record refused before the record leg (packages/spec, Clause-② yes, no (narrowing), no Clause-② line, security label, beside AGENTS.md, unreadable pull, a published path in another commit of the same PR). Mutation (not kept): removing the readLowRiskTier call from runGuard makes the guard self-test fail; restored, git diff HEAD empty. Scripts only, no package touched: no build closure or dogfood owed.",
"gates": "Local, head 69addfe: dispatch-gates --commands derived 46 families; all 46 exit 0 after building @objectstack/lint... under os-verify-lock (VERDICT command-exit 0). --ran: 46 derived famil(ies) accounted for, 46 run, 0 NOT-MEASURED (a DERIVED zero). Record: /mnt/project-files/pm-orders/skills/33501-gates-ran.txt. First run on fd329e5 had one red, check:pm-dispatch-gates (new bare docs/ literal joined the escapable-literal species); fixed by spelling the riders as path shapes (remedy b), rerun green. check-skill-line-ratchet exit 0 (AGENTS.md 1050, SKILL.md 319, lanes/skills.md 35, no ceiling moved). check:pm-governed-prose exit 0. dispatch-gates --tier: MANDATORY contract-review tier from SKILL.md clause 1. check-governed-merges --branch: exit 3 GOVERNED, landing tier H (.claude/** x2, AGENTS.md). CI check-runs on PR 33531: not yet read at report time; the seat reads them.",
"dogfood_battery": "n/a: no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 MCP GitHub calls. Read-only REST via gh api: card 33501 body and comments (twice), recent pulls list. check-governed-merges --pr 33394 and --pr 33482 read those PRs over its own channel.",
"api_writes": "3: git push (new branch claude/project-thread-dhp24e); relay pr_create (fleet-write run 43654981096, PR 33531, 12406 bytes sent and stored identical, label skip-changeset, no assignees); this os-dev-report comment via post-stamped.mjs.",
"deviations": "(1) Model tier: dispatch-gates --tier reads MANDATORY contract-review tier for the SKILL.md edit (two one-line wording edits); this thread ran at the claim's default model, so the seat's in-seat contract review at that tier is the owed record. (2) Standing lines ask for a trailing signed HTML comment in the PR body; os-dev.md bans HTML comments other than the harness attribution, so the signature is a prose line under Fixes (same as PR 33427). (3) Comment 6885437809 asked for execute.mjs governedReviewPlan and a docs/adr arm in this PR; both are outside the claim's file surface and the order and the seat's message keep ADR to an open question, so neither is implemented here (see out_of_scope_findings and open_questions). (4) The order's mechanism assumption held with one correction: the guard did read the PR body already (pull object, for the card locator), but not labels; makePullReader now returns label names.",
"files_changed": [
"AGENTS.md",
"scripts/pm/check-governed-merges.mjs",
"scripts/pm/check-governed-queue-guard.mjs",
".claude/skills/pm-dispatch/SKILL.md",
".claude/skills/pm-dispatch/references/lanes/skills.md"
],
"serial": "Shares .claude/skills/pm-dispatch/SKILL.md with 33484 (different lines); whichever lands second merges origin/main.",
"open_questions": [
{
"question": "docs/adr arm: the ruling names ADR notes and annotations, but a path list cannot tell a note from a changed decision. Which mechanical reading, if any, should move an ADR diff to Tier S?",
"options": [
"A. Leave docs/adr/** Tier H (this PR). Zero new code; every ADR note keeps waiting on a click.",
"B. Add-only reading: Tier S when every docs/adr path is an existing file at the merge base, the diff adds lines and deletes none, no added line is a Status line or sits under a Decision heading, plus the same Clause-② no and no-security conditions. Mechanical and pinnable (git numstat plus the base file's heading map); about one card, one reader beside readWorkflowDiff in the register and a battery in each script.",
"C. A Low-risk: annotation line on the seat's PASS record that the guard reads. Cheap, but the seat certifies its own tier, which the guard cannot check."
],
"recommendation": "B as its own card. Business need: real pull, ADR notes (for example 33425) wait on a click today. Long-term: a diff reading keeps the register the one source of the tier, as the workflows split does. Error-proofing: add-only plus no Decision or Status line is structural; C trusts a self-declaration. Scope: one reader, no new gate. A stays the safe default until the card lands."
}
],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: skills seat 1 (follow-up card): scripts/pm/fleet-write/execute.mjs governedReviewPlan reads paths only, so pr_ready on a low-risk skills PR still requests GOVERNED_APPROVERS (a summons, not a block). Applying lowRiskArmVerdict there needs the pull body and labels the relay already reads. Dedupe words: governedReviewPlan, low-risk arm, review request, relay pr_ready."
]
}
Generated by Claude Code