Skip to content

Commit e27a7c0

Browse files
docs(pm-dispatch): say how the claim reads the Clause-② public surface (#21783)
Fixes #21748 Clause-②: no ## What changes One file, `.claude/skills/pm-dispatch/references/execution-duties.md`. In its claim section (〈认领(先认领后动工)〉), the `Clause-②` criterion line asks whether a card widens the accept set or the public surface, and nothing said how to read the public surface. Five lines now sit directly under that line. This is direction 1 of triage grade 5981293521: prose only. Direction 2 is out under ruling 208, so there is no script, no gate and no patrol row. ```text - 公开面 = 包构建后的入口声明所达,⛔ 不只数入口的再导出清单。 - 所达 = 再导出名,加经其 props、参数与返回类型可达的每个类型。 - 语言包键已发布:包导出语言包及其派生类型(`TranslationKeys = typeof en`)即发布每个键。 - `Clause-②: yes` 至少 `minor`:AGENTS.md Post-Task Checklist 第 3 条,本行在认领处复述。 - 席位读不定(席位不做构建)⇒ 认领写明,dev 在报告里于构建声明闭包上实测,实测定案。 ``` Each line maps to the triage comment's text: 1. Lines 1 and 2: "The public surface is what the package's built entry declaration reaches. That means the re-exported names, plus every type reachable through their props, parameters and return types. Not only the entry's re-export list." 2. Line 3: "A locale pack's keys are published. A package that exports its pack and a type derived from it (`TranslationKeys = typeof en`) publishes each key." 3. Line 4: "`Clause-②: yes` takes at least `minor` (AGENTS.md, Post-Task Checklist item 3). The line restates it where the claim is written." 4. Line 5: "When the seat's reading cannot settle a card (the seat makes no build), the claim says so, and the dev measures on the built declaration closure in its report. [...] that measurement decides." The line directly above still pins the value to exactly `yes` or `no`, so line 5 adds no third value. The seat writes its reading and says on the claim that it is unsettled. ## The three measured cases under the new text Read from the sibling `objectui` checkout at `9dfaca6` (objectui `main`). Each case was read at its own landing commit, with the parent commit as the control. - **objectui#11569** (PR objectui#11604, landing commit `902ebab`) reads `yes`, and line 4 now catches its mistake at the claim. The `record:line_items` registration in `@object-ui/plugin-form` drops `required: true` from its `childObject` input, so the page compile now accepts a node it used to refuse. That widens the accept set, so the answer is `yes`, as the claim said. The error was pairing that `yes` with a `patch` changeset. Line 4 states, on the line where the claim is written, that `yes` takes at least `minor`. The landed changeset reads `'@object-ui/plugin-form': minor`. - **objectui#11601** (PR objectui#11611, landing commit `b508ac5`) reads `yes` under lines 1 and 2. The `@object-ui/app-shell` entry carries `export { SchemaForm } from './views/metadata-admin/SchemaForm.js'`. `SchemaForm(props: SchemaFormProps)` takes `SchemaFormProps`, whose member `widgetContext?: WidgetContext` reaches `WidgetContext` through the props of a re-exported name. `WidgetContext` is not re-exported by name, which is exactly the hole line 1 is written for. The PR adds the optional member `datasets` (a `LoadState` of `DatasetCatalogEntry[]`) to `WidgetContext`. The parent commit has no `datasets?:` member. A new member on a reachable type widens the public surface, so `yes` and `minor`. The landed changeset reads `'@object-ui/app-shell': minor`. - **objectui#11591** (PR objectui#11606, landing commit `b92329c`) reads `yes` under line 3. The `@object-ui/i18n` entry exports `en` (`export { default as en } from './locales/en.js'`) and `type TranslationKeys`, which is declared as `export type TranslationKeys = typeof en;`. The PR adds `preview.changes.confirmNoteSeparate`, `confirmNoteSeparate_one` and `confirmNoteSeparate_other` to `en`. The parent commit has no `confirmNoteSeparate`. That makes three new keys in a published pack and three new members of a published type, so `yes`, and line 4 then requires at least `minor`. The landed changeset reads `'@object-ui/i18n': patch` and `'@object-ui/app-shell': patch`. These are source readings of the entry and of the declarations the diffs touch. For objectui#11601, the PR's own `dist` measurement agrees. ## Line budget (headroom 0, net 0) The file is ratcheted at 183 lines with 183 before and 183 after, and its ceiling is unchanged. Five restated lines pay for the five added lines. Each deleted line's owning copy stays on the reading path: its file is pointed to from a line this PR keeps in `execution-duties.md`. Those pointers are "派发词只带增量,构造细则与条款原文见 `references/dispatch-runbook.md`。" and "逐项判据展开在 `references/review-checklist.md`,每份报告对着它过。". There is no re-wrap and no rule removed. 1. Deleted (〈派发〉): "- 文件面写两句:预期落点;生产者在别包时修生产者侧并报落点,⛔ 不在消费者侧打补丁。" Owning copy, `references/dispatch-runbook.md` 〈派发词构造细则〉: "- 文件面两句原文照抄:预期落点是 X。" and "- 若实测表明真正的生产者在别包,直接按生产者侧修,落点与理由写进报告和 PR 正文。" 2. Deleted (〈派发〉): "- same-day churn 行:当天合并 ⇒ 先核对当前 main;在飞重叠每轮求交,相交即发四句警告。" Owning copy, `references/dispatch-runbook.md` 〈派发词构造细则〉: the same-day churn bullet ("见当天合并即加一行"), "- 该行原文:基于合并后的代码工作,issue 引用的片段可能已变,先核对当前 main。" and "- 在飞重叠每轮拦截:main 新落 PR 与在飞申报文件面求交,相交即发四句警告。" 3. Deleted (〈派发〉): "- 被在飞重叠完全覆盖就停下回报,⛔ 不硬造 diff。" Owning copy, `references/dispatch-runbook.md` 〈派发词构造细则〉: "- 四句:合 main 重跑测试矩阵、读对方 diff 重划边界、只补它没覆盖的、被完全覆盖就停下。" and "- ⛔ 不硬造 diff。中途收窄标准条款须点名替换承接人与时点,缺一 dev 报 blocked 不半执行。" 4. Deleted (〈复核〉): "- PR 形态与范围:draft、目标 `main`、`Fixes`/`Part of` 首行判据,翻 ready 前亲核。" Owning copy, `references/review-checklist.md` 〈PR 形态与卡片关系〉: "- PR 存在、是 draft、目标 `main`,正文首行引用卡片。", the keyword bullet that follows it ("仅当合并应当关卡;只落地了可实施的一半 ⇒ 必须"), and "- 闭合关键词两读:翻 ready 前亲核首行、亲扫全正文,⛔ 关键词永不挨另一张 open 卡编号。" 5. Deleted (〈复核〉): "- `Part of` 卡 MERGED 时点收口;changed files 范围与 changeset/`skip-changeset` 分流;测试证据。" Owning copy, `references/review-checklist.md`: "- `Part of` 收口的卡不会自动关,`pm:dispatched` 必须手工摘,动作要件见落地细则 B。", "- 三条判据:无 `content/docs/releases/` 改动、用户可见改动有 changeset、无与卡无关的文件。", "- Tests/docs-only 按仓库分流:本仓库走 `skip-changeset` 标签,⛔ 不走空 changeset。" and "- 测试证据要有真实命令与通过输出,⛔ 不接受一句 tests pass。". Also `references/landing-operations.md` 〈B〉: "- 确认 MERGED 同一动作里给 `Part of` 卡收口、`Fixes` 卡代关但标也须摘,⛔ 不拆到下轮巡检。" Every line in the file is 120 bytes or less. The five new lines measure 88, 87, 112, 102 and 116 bytes (`LC_ALL=C awk`). ## Premise, measured before editing At `ebfe658c7` (`origin/main` when the branch was cut), `git grep -n -i -E 'd\.ts|declaration|locale|TranslationKeys|re-export'` on the file found 0 hits (exit 1). The control word `Clause-②` found 2 hits in the same file. The reading rule was absent. ## Gates The gates were derived from this change set with `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack`: 17 commands, the same 17 the dispatch named. All 17 ran on head `af73798d9` and exited 0. `--ran` reconciliation: "17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED (a DERIVED zero — all 17 recorded an exit code and none of them is 3)". Selected verdict lines: - `pnpm check:pm-skill-ratchet`: "execution-duties.md is 183 lines (ceiling 183; headroom 0)". No line is over the 120-byte budget, since that red prints only on failure. - `pnpm check:pm-skill-id-lint`: "34 file(s) clean". - `pnpm check:skill-frame-sync`: "the one declared copy of the decision frame is internally coherent". - `pnpm check:nul-bytes`: "no raw ASCII control bytes". - `pnpm --filter @objectstack/lint run check:doc-formula-expressions` first exited 3 (prerequisite not met: `@objectstack/formula` and `@objectstack/lint` unbuilt). It exited 0 after the build it names was run through the verify lock. ## Acceptance notes - `references/contract-review.md` already carries the reviewer-side reading ("已发布面以包的 `exports` 映射为准", unreachable from the entry type graph and not `exports`-addressable means not published). The new claim-side lines agree with it, and it is not edited. - No findings filed. `skip-changeset`: `.claude/**` publishes nothing. ## 维护者速读(草稿) **改了什么**:执行席认领卡片时要判一行 `Clause-②: yes | no`(这张卡是否扩大对外公开的接口面)。原来只有判断问句、没写怎么判;现在在该行下面补了五行判法:看包构建后入口声明能够到的全部类型(不只看入口直接导出的名字),语言包的键也算公开,`yes` 至少要 `minor` 版本号,席位判不准时在认领里说明、由开发 agent 构建后实测定案。 **为什么改**:objectui 一个班次里连续三次判错(两次把实际扩大了公开面的卡判成 `no`,一次 `yes` 却配了 `patch`),原因都是这条判据没有说明读法。判错的后果是 CHANGELOG 分节写错、`no` 卡跳过了契约复核。 **风险与代价(含回滚)**:只改一份内部协议文件,不发布、不动脚本与门禁;文件行数不变(183/183),新增五行以删除五条在 `dispatch-runbook.md` / `review-checklist.md` 已有原文的重复行抵扣。回滚 = 还原本 PR 这一个提交。 **席位意见**: **你要做的**:无需操作。本 PR 是 Tier S 受管面(`.claude/**`),由席位做达档契约复核、PASS 后经合并队列落地;若不同意这套读法,在卡上留言即可。 --- _Generated by [Claude Code](https://claude.ai/code/session_011SekRJwTRqXSmsP6xTSci4)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent e09f1ac commit e27a7c0

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

‎.claude/skills/pm-dispatch/references/execution-duties.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@
6565
- 条款②入队闸门只读认领评论且只读行首键:句中提及与另发评论皆读不到,卡即不可读。
6666
- 谓词保持严格、⛔ 不放宽;session ID 不可省,`mode:subagent` 下 dev 与 PM 同 ID,身份看分支。
6767
- `Clause-②: yes | no` 恰这两种拼写,恒英文机器判据;判据:本卡放宽接受集或扩大公开面吗。
68+
- 公开面 = 包构建后的入口声明所达,⛔ 不只数入口的再导出清单。
69+
- 所达 = 再导出名,加经其 props、参数与返回类型可达的每个类型。
70+
- 语言包键已发布:包导出语言包及其派生类型(`TranslationKeys = typeof en`)即发布每个键。
71+
- `Clause-②: yes` 至少 `minor`:AGENTS.md Post-Task Checklist 第 3 条,本行在认领处复述。
72+
- 席位读不定(席位不做构建)⇒ 认领写明,dev 在报告里于构建声明闭包上实测,实测定案。
6873
- 档位引 `dispatch-gates --tier --repo 仓`⛔ 不凭记忆;天花板拼常量名并同行引据,⛔ 不抄模型 id
6974
- 末行 Serial constraints cleared 是落在评论里的读数,同包在飞单不点名等于没查。
7075
- 本卡 pin 断言兄弟卡在改的行为 ⇒ 派发令注明,并在用例内预登记翻转触发词,⛔ 不修绿。
@@ -131,9 +136,6 @@
131136
- 触 `skills/**` 的卡,派发词必带 PM 定的净增行数预算(按 feature 大小定,小功能给小数)。
132137
- dev 装不下预算 ⇒ 停手回报,⛔ 不自行扩写、不自行抬预算。
133138
- 对外发布的技能包是平台最大的对外价值,评估恒整包整体。
134-
- 文件面写两句:预期落点;生产者在别包时修生产者侧并报落点,⛔ 不在消费者侧打补丁。
135-
- same-day churn 行:当天合并 ⇒ 先核对当前 main;在飞重叠每轮求交,相交即发四句警告。
136-
- 被在飞重叠完全覆盖就停下回报,⛔ 不硬造 diff。
137139
- 翻转公开语义的裁决随卡带全仓 pin 清扫,两句缺一不可,原文见 runbook。
138140
- 拒收用例 ⇒ `code`+`status` 最低断言;过滤/谓词语义 ⇒ 编译面清单逐面申报,⛔ 静默略过。
139141
- 资源与后端:S 级机械 + M ⇒ `mode:subagent`;S 级但不机械(判断面在设计不在门禁)按 M 待遇。
@@ -170,8 +172,6 @@
170172

171173
- 你是记录在案的复核人:对 GitHub 核验,⛔ 不对报告的自述核验。
172174
- 逐项判据展开在 `references/review-checklist.md`,每份报告对着它过。
173-
- PR 形态与范围:draft、目标 `main`、`Fixes`/`Part of` 首行判据,翻 ready 前亲核。
174-
- `Part of` 卡 MERGED 时点收口;changed files 范围与 changeset/`skip-changeset` 分流;测试证据。
175175
- 改到已有 `.changeset/*.md` 的 PR ⛔ 不打 `skip-changeset`;确认取同 head 达档 PASS 或维护者原话。
176176
- 报告在草稿 PR 时点到达,CI 收敛读数只属于复核侧:gate `in_progress` 是诚实读数。
177177
- 绿色输出≠ 该绿证明了被测风险:拒收断言、全绿方向与时序、pin 翻转、边界后收益。

0 commit comments

Comments
 (0)