diff --git a/.changeset/pm-dispatch-domain-table-full-coverage.md b/.changeset/pm-dispatch-domain-table-full-coverage.md new file mode 100644 index 0000000000..65982b41b7 --- /dev/null +++ b/.changeset/pm-dispatch-domain-table-full-coverage.md @@ -0,0 +1,38 @@ +--- +--- + +docs(pm-dispatch): 域分类表补全 22 个未列包 —— 未列包不再落入「不可被任何 PM 认领」死角 (#5095) + +`.claude/skills/pm-dispatch/SKILL.md` 的 `domain:*` 包家族表只覆盖了一部分包,而同节的 +label discipline 规定「未打标签的 issue 任何 PM 都不得认领」—— 两条合起来,落在未列包上的 +issue 要么无法认领,要么每个 PM 各自临场判一次归属,车道协议「一个 PM 的分诊结论被缓存成 +标签、其他 PM 直接读」的价值当场归零。表下本就写明:未列包在首次分诊时定级,并由 PR 更新表。 +本条就是那个 PR。 + +对 `origin/main` 重新清点(77 个 workspace 包),补入的 22 个包按**锚定规则**逐包定级 —— +读 package.json 依赖方向、`src/` 内容与真实消费方,不从包名猜: + +- **`domain:engine`**:`packages/formula`(CEL / `matches-filter` / RLS 谓词求值,消费方 + 是 objectql 与各 driver)、`plugin-pinyin-search`(注册全局 `beforeInsert`/`beforeUpdate` + 钩子,与 #4775 同一条锚定先例)。 +- **`domain:services`**:`packages/triggers/*`(三个 flow 触发器,承接 automation 引擎的 + `FlowTrigger` 接线)、`plugin-email`(#5087 首次分诊已定)、`plugin-reports`、 + `embedder-openai`、`knowledge-memory`、`knowledge-ragflow`(后两者直接依赖 + `@objectstack/service-knowledge`)。 +- **`domain:devx`**:`packages/sdui-parser`(全仓唯一代码消费方是 `packages/lint`)、 + `packages/vscode-objectstack`(编写期编辑器 DX,只依赖 spec)、`apps/docs`(文档站)。 +- **`domain:cli`**:`packages/rest`(#4886 先例,#5423 沿用)、`packages/mcp`(落点与 + `packages/runtime/src/domains/mcp.ts` 同缝)、`packages/observability`(最大消费方是 + runtime)、`packages/client` / `client-react`(REST 线协议 SDK,自带 route-ledger 一致性 + 用例)、`packages/cloud-connection`(cli 车道 2026-08-05 首次分诊已定)、 + `packages/create-objectstack`、`packages/adapters/*`、`plugin-hono-server`、`plugin-dev` + (`os dev` 装配栈,posture 门与 cli serve/verify 同面)。 +- **兜底位显式点名**(表内新增一行,写明「不是遗漏」):`packages/apps/*`、 + `packages/console`、`examples/*` —— 各自的读法写在表下,`packages/console` 尤其点明其 + `dist/` 是 `../objectui` 的构建产物落盘位,UI 缺陷走 `repo:objectui`。 + +另加一句表的适用范围:本表只覆盖本仓的包;`objectui` / `cloud` 是仓库级分片,routing 用 +`repo:*` 表达,不另打 `domain:*`(域车道是「同仓多 PM 并发」的切法,不是第二套仓库标签)。 + +只改域分类表与其说明段,协议其它条款(含第 8 步三轴决策框架)一字未动;仅内部 agent +协议文本,不发布任何包,空 frontmatter 仅为满足 changeset 门禁。 diff --git a/.claude/skills/pm-dispatch/SKILL.md b/.claude/skills/pm-dispatch/SKILL.md index 1a987df3bc..e7deebdd8a 100644 --- a/.claude/skills/pm-dispatch/SKILL.md +++ b/.claude/skills/pm-dispatch/SKILL.md @@ -358,18 +358,36 @@ file the fix touches, you have not triaged it yet, and it is not labelable. | 标签 | 包家族 | |:--|:--| -| `domain:engine` | `packages/objectql`、`packages/metadata*`、`packages/platform-objects`、`packages/core`、`packages/plugins/driver-*` | -| `domain:services` | `packages/services/*`、`packages/plugins/plugin-approvals`、`plugin-webhooks`、`packages/connectors/*` | +| `domain:engine` | `packages/objectql`、`packages/metadata*`、`packages/platform-objects`、`packages/core`、`packages/formula`(CEL / `matches-filter` / RLS 谓词求值)、`packages/plugins/driver-*`、`plugin-pinyin-search`(全局写钩子,同 #4775 锚定) | +| `domain:services` | `packages/services/*`、`packages/connectors/*`、`packages/triggers/*`(flow 触发器)、`packages/plugins/plugin-approvals`、`plugin-webhooks`、`plugin-email`、`plugin-reports`、`embedder-openai`、`knowledge-memory`、`knowledge-ragflow` | | `domain:identity` | `packages/plugins/plugin-auth`、`plugin-security`、`plugin-sharing`、`plugin-audit` | -| `domain:devx` | `packages/lint`、`skills/**`、`content/docs/**`、`scripts/`(门禁类) | +| `domain:devx` | `packages/lint`、`packages/sdui-parser`(仅 lint 消费)、`packages/vscode-objectstack`、`skills/**`、`content/docs/**`、`apps/docs`、`scripts/`(门禁类) | | `domain:spec` | `packages/spec` 及其生成物(现 spec 车道不变) | -| `domain:cli` | `packages/cli`、`runtime`、`verify`、`qa`、`types` | +| `domain:cli` | `packages/cli`、`runtime`、`verify`、`qa`、`types`、`packages/rest`、`packages/mcp`、`packages/observability`、`packages/client`、`packages/client-react`(REST 线协议 SDK)、`packages/cloud-connection`、`packages/create-objectstack`、`packages/adapters/*`、`packages/plugins/plugin-hono-server`、`plugin-dev` | +| (无固定归属,按落点分诊) | `packages/apps/*`(`setup` / `studio` / `account`)、`packages/console`、`examples/*` —— 见下,**这一行是显式点名,不是遗漏** | `examples/**` belongs to the subsystem it exercises; anything that fits nowhere is judged at triage by its principal landing site. A package missing from the table is classified the first time it is triaged and the table updated **by PR** — the taxonomy evolves deliberately, never per-claim. +最后一行的三处兜底位:`examples/*` 照上一句;另两处的读法如下(表按 #5095 逐包 +核过真实消费方向补全,`packages/` 下余包都已落到上面某一行): + +- `packages/apps/*` 今天只是 app manifest + plugin 壳,内容仍从 + `@objectstack/platform-objects/apps` 再导出,落点可能在 platform-objects + (engine)、这三个包本身、或控制台渲染面(`repo:objectui`)—— 按主要落地站点 + 在分诊时判定。 +- `packages/console` 是 `../objectui` 构建产物的落盘位:仓内只跟踪 + `package.json` / `README` / `CHANGELOG`,`dist/` 由 `scripts/build-console.sh` + 生成且⛔禁止手改。控制台 UI 的缺陷走 `repo:objectui`;仓内唯一可改面是 pin / + 刷新脚本(`build-console.sh`、`bump-objectui.sh`、`check-console-sha.mjs`、 + `check-objectui-pin-fresh.mjs`),归 `scripts/`(门禁类)那一行。 + +本表只覆盖**本仓(objectstack)的包**。`objectui` / `cloud` 是**仓库级分片**, +routing 用 `repo:*` 表达(rule 4 的分片协议),不另打 `domain:*` —— 域车道是 +「同仓多 PM 并发」的切法,不是第二套仓库标签。 + **Label discipline.** `domain:*` is applied during the backlog sweep (round loop step 0) by whichever PM triages the issue. **Labeling ≠ claiming**: any PM may label any issue, including ones it will never claim — the label is