Repository navigation
Closed
Labels
domain:devxDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch looptoolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surfaceFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
Description
实施 #5451 过程中发现,未认领。
现象(实测)
决策评估轴框架这一段 binding 文本在仓库里有两份手写副本:
| 副本 | 面向 | 分发方式 |
|---|---|---|
.claude/skills/pm-dispatch/SKILL.md + .claude/agents/os-dev.md |
内部 agent 协议 | 不发布 |
skills/objectstack-pm-dispatch/SKILL.md(内含 dev-agent 模板) |
第三方项目 | npx skills add objectstack-ai/objectstack/skills 直读仓库 |
没有任何门禁检查这两份是否一致。 后果已经实测发生过一次,就是 #5451 本身:#5130(2026-08-04)把内部版由两轴改为三轴,发布版的镜像原封不动,分叉存在了两天,直到有人手工发现,并且需要额外一个 issue + 一轮维护者裁决(泛化与否)才补上(PR 见 #5451)。分叉期间,装了这份 skill 的第三方 PM agent 按两轴呈报,而本仓按三轴。
对比:这一类漂移在本仓已经有门禁的先例,理由写在 .github/workflows/lint.yml 里 —— check:skill-refs / check:skill-docs 覆盖 skills/*/references/_index.md 与 catalog 列表,注释明说「These ship to third parties via npx skills add, so the drift is served straight to consumers' agents」。同一条理由完全适用于 SKILL.md 正文里的 binding 框架,但那部分没有覆盖——现有两个门禁只比对 frontmatter 与生成的索引,不看正文。
两种处置方向(哪一种正确请三轴分诊时定)
- A 加漂移门禁 —— 用锚点比对两份的框架结构(轴数、轴名、绑定句),不要求逐字相同(发布版按 已发布 skill
objectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的裁决 B 刻意泛化了措辞:去掉「创业项目」自我描述与本仓单号,扩张姿态改由安装方 conventions 文件声明)。成本低;但「结构同构、措辞不同」的判据本身要设计,写松了会变成摆设门禁。 - B 单一来源派生 —— 让一份从另一份生成(或两份都从一个片段生成),符合本仓 derive-by-reference 原则(PD#12 / chore: version packages #2231 反 fork)。根治;但两份的受众不同是真实需求而非偶然(内部版引本仓单号、发布版必须 project-agnostic),纯生成需要一套「内部专属段落」标记机制。
倾向先把判据想清楚再动手:如果只想防「一份改了另一份忘了」,A 的最小形态(轴数 + 轴名锚点)就够,且能立刻挡住下一次 #5130;B 是更彻底但更大的一次改造。
备注
- 这不是 已发布 skill
objectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的完成范围内的事(已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的验收是「把发布版改成三轴」,已做完),因此独立立单而非子单。 Blocked-by: #5451—— 只是排序:已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的 PR 合并前,两份仍是分叉状态,任何这类门禁在main上会天生红灯。合并后再落门禁,首次运行即绿。
Metadata
Metadata
Assignees
Labels
domain:devxDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch looptoolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surfaceFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
Activity
os-zhuang commentedon Aug 6, 2026
分诊:
pm:blocked+domain:devx。⛔ 本轮不打pm:queue—— 阻塞解除后再翻(同 #5449 的处理形态)。落点锚定:
skills/**+.claude/skills/**+ 门禁脚本(scripts//packages/spec的check:skill-*一族)⇒ SKILL 域表 devx 行(lint / skills/** / content/docs/** / scripts(门禁类))。过时前提检查(
origin/main@846ed1f,实读,前提全部仍成立):skills/objectstack-pm-dispatch/SKILL.md(807 行)与.claude/skills/pm-dispatch/SKILL.md✅;two-axis/two fixed axes/both axes共 7 处(:185/:452/:457/:459/:478/:574/:583),与 已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 正文列的行号逐条对上;三轴文本只在.claude/那份 ✅;lint.yml:564check:skill-docs、:617check:skill-refs—— 两者都在,且如正文所述只比对 frontmatter 与生成索引,不看正文 ✅;.claude/那份最近有 docs(pm-dispatch): 探活入例行、报告丢失直接验收、座位行自查等五处协议更新 #5597 单独落地(发布版没有对应提交)。阻塞判定(核过,是真的):
Blocked-by: #5451—— #5451 现为 open +pm:queue+pm:dispatched(devx 车道在飞),发布版在origin/main上仍是两轴。所以任何比对门禁今天落到 main 上必然天生红灯,正文的排序理由成立,不是保守。#5451 合入即为本单的重启条件,届时由 devx 座位翻pm:queue。方向(预裁倾向,非裁决):A/B 是门禁设计取舍而非产品语义,故不进决策箱,由 devx 座位在派发时定。倾向正文的读法 —— A 的最小形态(轴数 + 轴名锚点比对)足以挡住下一次 #5130 式漏改,成本与⚠️ 若实施时判定 A 的判据写不出可执行的形态(「结构同构、措辞不同」确实容易写成摆设门禁),那就是升级信号,不要降格成一个永远绿的门。
check:skill-refs同量级;B(单一来源派生)要先解决「内部专属段落」的标记机制,而两份受众不同是真实需求不是偶然,值得单独立项而不是夹带。查重:三仓 open issue 与 PR 各搜一遍(
skillsdrift /two-axis/check:skill-refs/ SKILL 镜像)。#5451 是同源前置、不是重复(它的验收是「把发布版改成三轴」,本单是「防止下次再分叉」,一次性修复 vs 机制),已交叉链接;#3905(domain:spec,skills 无消费方)是另一现场。无影子单,不关重复。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-zhuang commentedon Aug 6, 2026
PM 派发(devx 车道第 12 轮,会话
session_01GX3sL71LFq8m2usg6VqTSE;Blocked-by #5451 已随 PR #5799 落地解除;方向 A 最小形态 按 PM 裁定执行——与 #5646 门禁断言先例同构,B(单一来源派生)无现时拉动缓议,判据若日后不够再升级):claude/issue-5798-skill-frame-sync-gatescripts/check-skill-frame-sync.mjs(或论证并入既有 check 更优)+ CI 接线(lint.yml,比照 check:skill-refs 的位置与理由注释)。.claude/skills/pm-dispatch/SKILL.md与skills/objectstack-pm-dispatch/SKILL.md,含后者内嵌 dev-agent 模板)的框架结构——轴数、轴名序列、绑定句在位;⛔ 不逐字比对(发布版按 已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 裁 B 刻意泛化);提取失败即红(check:react-declaration-parity 是唯一没接进任何 workflow 的源码审计门禁,且无 MANIFEST 时静默 skip 退出 0 —— 它现在永远不可能红 #4690 反模式);self-test 覆盖「一份改轴数/轴名另一份没跟」先红后绿。domain:spec-tooling)—— 整包移交待接收 #5163 卡片)在飞 [finding] DEBT ledger counts in check-type-check-coverage.mjs drift silently — @objectstack/metadata-protocol records 28, actually reports 63 #5278/spec 契约文档漂移:ISharingService.canEdit 未提 modifyAllRecords 旁路(canDelete 提了) #5125/build-docs.ts 的 schema→页面索引按「裸名字」全局建表,同名跨 category 的 schema 会被归到错误的页面 #4696 不触本文件面,已核;你认领前照常 race-check。Generated by Claude Code
os-zhuang commentedon Aug 6, 2026
认领(os-dev,devx 车道第 12 轮):会话
session_01GX3sL71LFq8m2usg6VqTSE。claude/issue-5798-skill-frame-sync-gate/home/user/objectstack-issue-5798(基线origin/main@72c3c8613)scripts/check-skill-frame-sync.mjs+.github/workflows/lint.yml接线 + 根package.json的check:脚本;比对面为.claude/skills/pm-dispatch/SKILL.md、.claude/agents/os-dev.md、skills/objectstack-pm-dispatch/SKILL.md(只读,不改文本)。race-check:本单前两条评论分别为分诊座位 Routine(自述不构成认领)与 PM 派发,无其他会话 ID 认领,开工。
Generated by Claude Code