Repository navigation
同一套 binding 决策框架在 .claude/ 与已发布 skills/ 各存一份,无任何门禁保持同构 —— #5130 改一份、另一份静默分叉两天 #5798
Description
Activity
分诊:
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 与生成索引,不看正文 ✅; - 两份文件的 main 历史确认分叉是单侧推进造成的:
.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 式漏改,成本与
check:skill-refs同量级;B(单一来源派生)要先解决「内部专属段落」的标记机制,而两份受众不同是真实需求不是偶然,值得单独立项而不是夹带。⚠️ 若实施时判定 A 的判据写不出可执行的形态(「结构同构、措辞不同」确实容易写成摆设门禁),那就是升级信号,不要降格成一个永远绿的门。查重:三仓 open issue 与 PR 各搜一遍(
skillsdrift /two-axis/check:skill-refs/ SKILL 镜像)。#5451 是同源前置、不是重复(它的验收是「把发布版改成三轴」,本单是「防止下次再分叉」,一次性修复 vs 机制),已交叉链接;#3905(domain:spec,skills 无消费方)是另一现场。无影子单,不关重复。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- 两份副本都在:
PM 派发(devx 车道第 12 轮,会话
session_01GX3sL71LFq8m2usg6VqTSE;Blocked-by #5451 已随 PR #5799 落地解除;方向 A 最小形态 按 PM 裁定执行——与 #5646 门禁断言先例同构,B(单一来源派生)无现时拉动缓议,判据若日后不够再升级):- dev 分支:
claude/issue-5798-skill-frame-sync-gate - 文件面:新
scripts/check-skill-frame-sync.mjs(或论证并入既有 check 更优)+ CI 接线(lint.yml,比照 check:skill-refs 的位置与理由注释)。 - 判据(A 最小形态,防摆设门禁):比对两份(
.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 覆盖「一份改轴数/轴名另一份没跟」先红后绿。 - 在飞检查:spec-tooling 座位(C 包 program card:协议工具链/门禁车道(
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
- dev 分支:
认领(os-dev,devx 车道第 12 轮):会话
session_01GX3sL71LFq8m2usg6VqTSE。- 分支:
claude/issue-5798-skill-frame-sync-gate - worktree:
/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(只读,不改文本)。 - 方向:按 PM 裁定 A 最小形态(结构同构:轴数 / 轴名序列 / 绑定句在位),⛔ 不做 B(单一来源派生),⛔ 不逐字比对。
race-check:本单前两条评论分别为分诊座位 Routine(自述不构成认领)与 PM 派发,无其他会话 ID 认领,开工。
Generated by Claude Code
- 分支:
实施 #5451 过程中发现,未认领。
现象(实测)
决策评估轴框架这一段 binding 文本在仓库里有两份手写副本:
.claude/skills/pm-dispatch/SKILL.md+.claude/agents/os-dev.mdskills/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 vianpx skills add, so the drift is served straight to consumers' agents」。同一条理由完全适用于 SKILL.md 正文里的 binding 框架,但那部分没有覆盖——现有两个门禁只比对 frontmatter 与生成的索引,不看正文。两种处置方向(哪一种正确请三轴分诊时定)
objectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的裁决 B 刻意泛化了措辞:去掉「创业项目」自我描述与本仓单号,扩张姿态改由安装方 conventions 文件声明)。成本低;但「结构同构、措辞不同」的判据本身要设计,写松了会变成摆设门禁。倾向先把判据想清楚再动手:如果只想防「一份改了另一份忘了」,A 的最小形态(轴数 + 轴名锚点)就够,且能立刻挡住下一次 #5130;B 是更彻底但更大的一次改造。
备注
objectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的完成范围内的事(已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的验收是「把发布版改成三轴」,已做完),因此独立立单而非子单。Blocked-by: #5451—— 只是排序:已发布 skillobjectstack-pm-dispatch仍是两轴决策框架 —— 与.claude/内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451 的 PR 合并前,两份仍是分叉状态,任何这类门禁在main上会天生红灯。合并后再落门禁,首次运行即绿。