Filed unassigned by the domain:cli 执行 PM 席位(#6024),会话 session_01TvqBFLRzXdSPcbusDoED9k。⚠️ 路由到 domain:skills(os-dev 契约是那个车道的),⛔ 不留在本车道。
出处:PR #13425(卡 #13378)的 dev 主动报了这个冲突而没有默默定夺。⭐ 那是正确的动作,本条不是对它的批评。
两条判据,同一个标签
os-dev 契约对 skip-changeset 同时给了:
- 一份封闭的路径清单 ——
docs/adr、.claude、scripts/pm、tests/workflow,以及纯注释 diff;
- 一条发布判据 —— 有没有已发布的东西移动。
⚠️ 大多数时候两者同答。但它们会分叉,而分叉处正是最常见的一类 diff。
实测到的分叉
PR #13425 新增 packages/rest/src/xlsx-test-loader.ts —— 一个只被测试使用的 helper:
- 按清单判:路径是
src/*.ts,⛔ 不在封闭清单里 ⇒ 该写 changeset;
- 按发布判据判:
packages/rest 的 files 是 ["dist","README.md","CHANGELOG.md"],tsup 的 entry 只有 src/index.ts。全量构建后 grep:dist/index.js 0、dist/index.cjs 0(正控:同一次 grep 里 RestServer 命中 36)⇒ helper 到不了 dist,⛔ 没有任何已发布的东西移动 ⇒ 不该写 changeset。
⇒ 同一个 diff,两条判据给出相反的答案。
⭐ 哪一条应当为准,以及为什么这不只是措辞问题
本席位已在 PR #13425 上裁定以发布判据为准(标签保留),理由是 changeset 的存在目的是描述已发布的变化 —— 按路径形状而非发布事实来判,会在这一类 diff 上系统性地得出错的答案。
⚠️ 但这条裁定只覆盖那一个 PR。契约文本本身仍然自相矛盾,而分叉的这一类 diff 很常见:任何"放在 src/ 下却进不了 dist"的东西 —— 测试 helper、测试专用 fixture builder、被 files 或 build entry 排除的模块。
⇒ 每次都要么贴错标签(写一个描述"用户看不见的变化"的 changeset,污染 CHANGELOG),要么白花一轮去问 PM。#13425 花的是后者 —— ⭐ 那是两者里正确的一个,但它仍然是一轮成本。
建议方向,⛔ 本席不裁
⭐ 让发布判据成为唯一的判据,把封闭清单降级为它的快速通道("下列路径按定义不发布,可直接判定;其它情况按发布判据实测")。
⚠️ 关键在于判据要说明怎么测,⛔ 而不只是说"有没有发布":#13425 的 dev 用的是「构建后 grep dist/,带正控」,那是一个可执行、可复核的动作。⇒ 若只把判据写成一句原则而不给动作,下一个 dev 仍然会退回去数路径 —— 因为数路径是看得见怎么做的那一个。
⛔ 本席不改 governed surface(.claude/** / AGENTS.md / skills/** 不由本席位动)。
去重申报
⚠️ NOT MEASURED,⛔ 不是零读数:MCP search_issues 会返回假零(#13326)。⛔ 本卡未做可靠去重。若已有同形状的卡,请合并并留痕。
Refs
Generated by Claude Code
Filed unassigned by the⚠️ 路由到
domain:cli执行 PM 席位(#6024),会话session_01TvqBFLRzXdSPcbusDoED9k。domain:skills(os-dev 契约是那个车道的),⛔ 不留在本车道。出处:PR #13425(卡 #13378)的 dev 主动报了这个冲突而没有默默定夺。⭐ 那是正确的动作,本条不是对它的批评。
两条判据,同一个标签
os-dev 契约对
skip-changeset同时给了:docs/adr、.claude、scripts/pm、tests/workflow,以及纯注释 diff;实测到的分叉
PR #13425 新增
packages/rest/src/xlsx-test-loader.ts—— 一个只被测试使用的 helper:src/*.ts,⛔ 不在封闭清单里 ⇒ 该写 changeset;packages/rest的files是["dist","README.md","CHANGELOG.md"],tsup 的 entry 只有src/index.ts。全量构建后 grep:dist/index.js0、dist/index.cjs0(正控:同一次 grep 里RestServer命中 36)⇒ helper 到不了 dist,⛔ 没有任何已发布的东西移动 ⇒ 不该写 changeset。⇒ 同一个 diff,两条判据给出相反的答案。
⭐ 哪一条应当为准,以及为什么这不只是措辞问题
本席位已在 PR #13425 上裁定以发布判据为准(标签保留),理由是 changeset 的存在目的是描述已发布的变化 —— 按路径形状而非发布事实来判,会在这一类 diff 上系统性地得出错的答案。
src/下却进不了dist"的东西 —— 测试 helper、测试专用 fixture builder、被files或 build entry 排除的模块。⇒ 每次都要么贴错标签(写一个描述"用户看不见的变化"的 changeset,污染 CHANGELOG),要么白花一轮去问 PM。#13425 花的是后者 —— ⭐ 那是两者里正确的一个,但它仍然是一轮成本。
建议方向,⛔ 本席不裁
⭐ 让发布判据成为唯一的判据,把封闭清单降级为它的快速通道("下列路径按定义不发布,可直接判定;其它情况按发布判据实测")。
dist/,带正控」,那是一个可执行、可复核的动作。⇒ 若只把判据写成一句原则而不给动作,下一个 dev 仍然会退回去数路径 —— 因为数路径是看得见怎么做的那一个。⛔ 本席不改 governed surface(
.claude/**/AGENTS.md/skills/**不由本席位动)。去重申报
search_issues会返回假零(#13326)。⛔ 本卡未做可靠去重。若已有同形状的卡,请合并并留痕。Refs
Bufferinterface, so no Node Buffer can be passed toWorkbook.xlsx.load— 6 sites pay it withas any, the 7th is a ledgered error #13378 —— 冲突的出处与那次实测.claude/agents/os-dev.mdrule 1 lists the verify lock's four guarantees and no non-guarantee, one line above a wall-clock absolute — every dev agent reads exclusivity the brief never promised #12800 —— 同族:os-dev 契约里一段文本只列了保证、没列非保证,读者据此推出契约没承诺的东西。⭐ 本条是它的镜像:契约列了两条判据而没说哪条优先Generated by Claude Code