Skip to content

Commit e167956

Browse files
feat(pm): the governed register gains the six nested ui/ workspace rows (#25834)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} --> _Requested by **Tesla** · [project thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoAqVfFyhsxKuFcEP9YTBj25)_ Part of #25712 (4b PR 2b: the governed register learns the `ui/` workspace). Part of objectstack#25677. Clause-②: no Metadata-protocol: none ## 维护者速读(草稿) - **改了什么:** 受管面登记表新增 `ui/` 工作区的六行(`ui/docs/adr/**`、`ui/.claude/**`、`ui/skills/**`、`ui/AGENTS.md`、`ui/CLAUDE.md`、`ui/.github/workflows/**`),全部 Tier H,只管 objectstack;CODEOWNERS 同加六行;`AGENTS.md` 第 14 条与 pm-dispatch 技能的路径分叉段写上这六个面。 - **为什么改:** objectui 合进 `ui/` 之后,它原来自己的受管面不能落空;第 16 项裁决(`ui/.claude/**` 在并入根 `.claude/**` 之前保持 Tier H)。 - **风险与代价(含回滚):** 两个指令文件都在行数上限,本 PR 不加行、不抬上限,靠原地压缩措辞付账;回滚 = revert 本 PR。`main` 上还没有 `ui/`,这六行在 cutover 之前不命中任何路径。 - **席位意见:**(留空) - **你要做的:** 批准本 PR(Tier H,因为改了 `AGENTS.md`)。 ## What changes - `scripts/pm/check-governed-merges.mjs`: six rows on `GOVERNED_SURFACES`. They are objectui's own register (every root row except the North Star) prefixed with `ui/`, scoped `repos: ['objectstack']`, and all Tier H. `ui/.claude/**` is included, because it stays Tier H until it folds into the root `.claude/**` (Tesla, 2026-10-25, director item 16). - The self-test's `UI_SPECIMENS` rows from PR 1 (#25732) now pin the live rows. The flipped pin is `today-the-register-does-not-know-ui-…`, which becomes `the-register-knows-ui-the-rows-are-live`. - The register seam stays covered by the one register that does not carry the rows. - The counts that read the register move from 7 to 13 for objectstack only. cloud and objectui stay at 7, objectos and hotcrm at 6. - `scripts/pm/check-governed-queue-guard.mjs`: the CODEOWNERS mirror pins move to the live rows. With the `/ui/` lines removed, the file on disk is short exactly one line per row. The "13 surfaces govern objectstack" head is pinned. - `.github/CODEOWNERS`: six `/ui/…` lines routed to every `GOVERNED_APPROVERS` account. - `AGENTS.md` Prime Directive #14 and `.claude/skills/pm-dispatch/SKILL.md` (the ACCEPT path fork) name the six globs, as `check:pm-governed-prose` requires. - Both files are at their ceiling (1117/1117 and 319/319 lines). No ceiling was raised; both stay at those line counts, every line at most 120 bytes. - In AGENTS.md the paragraph is re-wrapped over its own ten lines. To make room, four clauses come out, quoted as they stood: 1. ` — this file is one —` after `` `CLAUDE.md` `` (`AGENTS.md` is already in the list). 2. `; a mixed diff is governed whole on one path hit.` (the next paragraph says it again). 3. `When it reds, name the surface here.` (the gate's own message says it). 4. `the` and `table` around `` `GOVERNED_SURFACES` ``: "The register is the `GOVERNED_SURFACES` table in" now reads "The register is `GOVERNED_SURFACES` in". - In SKILL.md, one line is paid by joining the install-surface probe line onto the cross-repo unblock criterion two lines above it, which leaves that line's quoted wording intact. ## Verification | Gate | `main` + this PR | sitting tree + PR 2a + this PR | |---|---|---| | `pnpm check:pm-governed-merges` (534 assertions) | 0 | 0 | | `node scripts/pm/check-governed-queue-guard.mjs --self-test` (345 cases) | 0 | 0 | | `pnpm check:pm-governed-prose` (13 surfaces, both regions) | 0 | 0 | | `pnpm check:pm-skill-ratchet` (AGENTS.md 1117/1117, SKILL.md 319/319) | 0 | 0 | - Derived gates (`node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`): 54 families, all exit 0 at this head on `main` `e2aaaf1c07` (after PR 2a #25833). `--ran` reconciles 54 run, 0 NOT-MEASURED, 0 UNRUN. `check:doc-formula-expressions` needs `@objectstack/lint` built first. - `node scripts/pm/dispatch-gates.mjs --self-test` (both tiers, run by hand because CI runs the slow tier only on push and schedule): 0, 2182 cases (fast 1917 in 291 s, slow 265 in 875 s), measured on `b00fc55c7d` + this change; the one commit between that and this base is PR 2a, whose three files this PR does not touch. - On `main` the six rows are inert, because no `ui/` path exists there yet. - On the sitting tree (cutover `c326d2fdf1` + 4a `50bd417d30` + `main` + PR 2a), `node scripts/pm/check-governed-merges.mjs --test`: - exits 3 (governed, landing tier H) for `ui/.claude/x`, `ui/AGENTS.md`, `ui/CLAUDE.md`, `ui/docs/adr/0001-x.md`, `ui/skills/objectui/SKILL.md` and `ui/.github/workflows/ci.yml`; - exits 0 (0 of 1 path governed) for `ui/packages/x/src/y.ts`. - On the sitting tree, `check:pm-governed-merges`, the queue-guard self-test, `check:pm-governed-prose` and `check:pm-skill-ratchet` all exit 0. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS Co-authored-by: Claude <noreply@anthropic.com>
1 parent 90a34e2 commit e167956

5 files changed

Lines changed: 73 additions & 60 deletions

File tree

‎.claude/skills/pm-dispatch/SKILL.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,8 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
135135
- `Blocked-by:` 行是机器可 grep 的反向索引,一遍读喂三个职责,⛔ 只做第一件。
136136
- 三职责:上游关单放回解锁卡;按解锁扇出排序;在合并后的 ref 上重验回队卡文件面。
137137
- 一个标签存在当且仅当有具名读者;`pm:blocking` 即其推导缓存,读者以词表脚本注为权威。
138-
- 跨仓解锁判据是消费方可安装,⛔ 不是上游已合并。
138+
- 跨仓解锁判据是消费方可安装,⛔ 不是上游已合并;探针:装上的包是否接受新键/新行为。
139139
- 以发布包消费上游的仓,解锁放回前先验修复已进可安装的发行版。
140-
- 安装面探针:装上的包是否接受新键/新行为。
141140
- 未发版 ⇒ 转 `pm:on-hold` + `Restart-when:` 加消费方安装面判据,⛔ 不回 `pm:queue`。
142141
- 该 hold 评论预写唤醒后的派发形状;pin 消费的仓不适用:pin 移动即可安装,走 pin 滞后读数。
143142
- 状态变更不过夜:标签无评论、assignee 无认领评论、结论只在 chat,都是半状态。
@@ -183,6 +182,7 @@ PM 的工作是循环:选卡 → 认领 → 派发 → 收集 → 复核 → 报
183182
- 路径面用 `get_files` 取,⛔ 不看报告自述;动手之前先分,不是事后对照。
184183
- governed 面统一定义:`docs/adr/**`+`.claude/**`(全量)+`skills/**`+`docs/NORTH-STAR.md`+`.github/workflows/**`。
185184
- governed 面同含 `AGENTS.md`+`CLAUDE.md`;`GOVERNED_REPOS` 同治理、行可限仓,执行席恒随落地仓车道。
185+
- 另含 `ui/docs/adr/**`+`ui/.claude/**`+`ui/skills/**`+`ui/AGENTS.md`+`ui/CLAUDE.md`+`ui/.github/workflows/**`。
186186
- 路径面命中 Tier H ⇒ ACCEPT 换终局四件套,混合 diff ⛔ 不按比例判;要拆让 dev 单独开 PR。
187187
- 改动 >3000 行(含生成物)同换终局四件套,⛔ 无 Tier S 例外;读数 = PR additions+deletions。
188188
- ① 席位记录一条落 PR,两层同欠:Tier H 置顶速读五段,其下 `## 席位核对`;卡只留指针行。

‎.github/CODEOWNERS‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@
4646
/docs/NORTH-STAR.md @os-zhuang @hotlong
4747
/.github/workflows/ @os-zhuang @hotlong
4848

49+
# Tier H governed surfaces of the nested `ui/` workspace (#25712) — the same
50+
# register rows, under `ui/`; `ui/.claude/` is Tier H, unlike the root tree
51+
/ui/docs/adr/ @os-zhuang @hotlong
52+
/ui/.claude/ @os-zhuang @hotlong
53+
/ui/skills/ @os-zhuang @hotlong
54+
/ui/AGENTS.md @os-zhuang @hotlong
55+
/ui/CLAUDE.md @os-zhuang @hotlong
56+
/ui/.github/workflows/ @os-zhuang @hotlong
57+
4958
# The enforcement chain
5059
/.github/CODEOWNERS @os-zhuang @hotlong
5160
/scripts/pm/check-governed-merges.mjs @os-zhuang @hotlong

‎AGENTS.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,12 @@ localStorage / auth gotchas.
265265
approval, Tier S by the owning seat on a contract-tier review of record; before that record no AI seat merges,
266266
queues, or arms auto-merge on a PR whose diff touches one.** The governed surfaces are `docs/adr/**`,
267267
`docs/NORTH-STAR.md`, `.claude/**` (agents, hooks and settings — not only skills), `skills/**`, `AGENTS.md`,
268-
`CLAUDE.md` — this file is one — and `.github/workflows/**`; a mixed diff is governed whole on one path hit.
269-
The register is the `GOVERNED_SURFACES` table in `scripts/pm/check-governed-merges.mjs`, each row carrying its tier;
270-
adding a surface is an edit *there*, never here, and `pnpm check:pm-governed-prose` reds per-PR when this
271-
paragraph names fewer surfaces than the register — or more. When it reds, name the surface here. A fork PR
272-
(head repo ≠ base repo) is a proposal, never a delivery, whatever its paths: no AI seat readies, queues, arms
273-
auto-merge on or approves it; the owning seat adopts the diff onto an internal branch and lands that.
268+
`CLAUDE.md` and `.github/workflows/**`, and under `ui/` `ui/docs/adr/**`, `ui/.claude/**`, `ui/skills/**`,
269+
`ui/AGENTS.md`, `ui/CLAUDE.md` and `ui/.github/workflows/**`, all Tier H. The register is `GOVERNED_SURFACES` in
270+
`scripts/pm/check-governed-merges.mjs`, each row carrying its tier; adding a surface is an edit *there*, never here,
271+
and `pnpm check:pm-governed-prose` reds per-PR when this paragraph names fewer surfaces than the register — or
272+
more. A fork PR (head repo ≠ base repo) is a proposal, never a delivery, whatever its paths: no AI seat readies,
273+
queues, arms auto-merge on or approves it; the owning seat adopts the diff onto an internal branch and lands that.
274274

275275
**Authoring stays open to every seat** — drafting, pushing, opening and revising the PR. What is reserved is the
276276
**landing**: on a PR whose diff touches a governed surface ⛔ never merge, ⛔ never queue, ⛔ never arm

0 commit comments

Comments
 (0)