Skip to content

同一套 binding 决策框架在 .claude/ 与已发布 skills/ 各存一份,无任何门禁保持同构 —— #5130 改一份、另一份静默分叉两天 #5798

Description

@os-zhuang

实施 #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 的最小形态(轴数 + 轴名锚点)就够,且能立刻挡住下一次 #5130;B 是更彻底但更大的一次改造。

备注

Activity

  1. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    ContributorAuthor

    分诊: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,实读,前提全部仍成立):

    阻塞判定(核过,是真的):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 各搜一遍(skills drift / two-axis / check:skill-refs / SKILL 镜像)。#5451 是同源前置、不是重复(它的验收是「把发布版改成三轴」,本单是「防止下次再分叉」,一次性修复 vs 机制),已交叉链接;#3905(domain:spec,skills 无消费方)是另一现场。无影子单,不关重复。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 6, 2026
  3. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    ContributorAuthor

    PM 派发(devx 车道第 12 轮,会话 session_01GX3sL71LFq8m2usg6VqTSE;Blocked-by #5451 已随 PR #5799 落地解除;方向 A 最小形态 按 PM 裁定执行——与 #5646 门禁断言先例同构,B(单一来源派生)无现时拉动缓议,判据若日后不够再升级):


    Generated by Claude Code

  4. os-zhuang commented on Aug 6, 2026

    @os-zhuang
    ContributorAuthor

    认领(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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions