Skip to content

Commit 00db38b

Browse files
committed
fix: align skill distribution contracts
1 parent 7dcd768 commit 00db38b

22 files changed

Lines changed: 166 additions & 62 deletions

File tree

.sopify/blueprint/design.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,8 @@ P4b 减重和 P4c 宿主消费治理的红线边界。只冻结 artifact / schem
441441

442442
> **未列入面默认可删**`state/sessions/*``state/last_route.json`、runtime 内部模块边界、route name 全集、output 渲染文案措辞均为 runtime 内部实现,不在 keep-list 内。P4b 减重时可自由处置。
443443
444+
`host_support` 只声明官方适配器能把 Skill 语义交付到对应宿主的支持界面并由宿主消费。它不等同于原生 Skill discovery,也不证明该宿主已经完成 E2E;支持等级、已验证能力和入口形态继续由 `HostCapability` 表达。当前五个内置 Skill 面向 `codex / claude / qoder / copilot`,其中 Copilot 通过单文件展开消费。
445+
444446

445447
## Output Rendering Audit — *[pre-P8 legacy reference]*
446448

@@ -589,7 +591,7 @@ Sopify 的设计目标不仅是工程轻量(削减 runtime),更是产品
589591
## 硬约束
590592

591593
1. **能删则删**:新概念必须替换旧概念或证明不增加概念预算
592-
2. **sopify_writer 只做协议准入和写入**:不做 plan materialization、文件迁移、自动修复、状态推进
594+
2. **sopify_writer 只做确定性协议操作**负责结构/版本校验、receipt 写入、标准目录迁移与成功后清理 state;不做 plan materialization、自动修复或语义状态推断
593595
3. **确定性执行层只按结构化事实执行**:不理解人话、不做语义推断
594596
4. **Host prompt 不定义机器真相**:prompt 只渲染 machine truth,不作为 truth source
595597
5. **develop_mode 是 hint**:不参与权限裁决;权限裁决看 ActionProposal side_effect + state + risk policy
@@ -604,7 +606,7 @@ Sopify 的设计目标不仅是工程轻量(削减 runtime),更是产品
604606

605607
- `ActionProposal(action_type="archive_plan")` 是协议入口;`~go finalize` 只是 alias
606608
- 主体是结构化 `archive_subject`,不通过正则或词表猜
607-
- 两层分离:sopify_writer 负责 protocol admission + write receipts;宿主负责 check + apply
609+
- 两层分离:宿主负责确认显式 finalize 意图并准备语义输入;sopify_writer 负责结构/版本校验、receipt 写入、标准目录迁移和成功后清理 state
608610
- Legacy/metadata 不完整主体返回 `migration_required`,不自动修复
609611
- 归档只在主体等于当前 `active_plan.json` 指向的 plan 时清理执行状态
610612

.sopify/plan/20260718_evidentloop_optional_audit_integration/plan.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ knowledge_sync:
1919
## Plan Snapshot
2020

2121
- **Goal**: 保留 Sopify 产品无关的验证证据能力,以 EvidentLoop 替代当前 CrossReview 集成,并提供不绑定运行时的一次性可选配套安装与公开版本 dogfood。
22-
- **Status**: Wave 1–2 主实现及审计修复已获两路独立审批和用户接受;247 tests、58 subtests 通过
23-
- **Next**: 将 Wave 1–2 作为单个本地 checkpoint commit 提交后进入 Wave 3;不推送 Sopify 分支
24-
- **Task**: 7/20
22+
- **Status**: Wave 1–3 与 Task 4.0 已完成;EvidentLoop `v0.1.0a2` 已公开发布,当前分发契约漂移已收口
23+
- **Next**: 等待用户审计 Task 4.0;确认前不进入 Wave 4.1 的可选安装实现
24+
- **Task**: 11/21
2525

2626
评分:
2727
- 方案质量: 9/10
2828
- 落地就绪: 8/10
2929

3030
评分理由:
3131
- 优点: 统一复用现有 plan 入口、writer、Verifier 和 EvidentLoop 通用产物,不增加第二套审计协议或兼容层。
32-
- 扣分: EvidentLoop 新公开版本、多宿主配套安装和 Codex 完整 diff dogfood 尚需执行期证据确认;自动升级明确延后。
32+
- 扣分: 多宿主配套安装和 Codex 完整 diff dogfood 尚需执行期证据确认;自动升级明确延后。
3333

3434
## Context / Why
3535

@@ -45,6 +45,7 @@ CrossReview 已被独立产品 EvidentLoop 替代,但 Wave 2 实施前,Sopif
4545
-`plan_version` 表达完整方案版本,并使入口预检、并行推进检查和 receipt 使用同一语义。
4646
- 删除 Sopify 当前 CrossReview Skill、默认钩子、废弃方案和当前文档承诺;历史归档保持不变。
4747
- 在 EvidentLoop 独立仓库补充通用 `diff_version / report_version` 输出,并通过下一公开 Alpha 提供给所有消费者。
48+
- 在进入可选安装前收口当前分发契约:develop 完成态、active plan 读取入口和内置 Skill 的宿主支持声明保持一致。
4849
- 保持 Sopify 默认只提供产品无关的 Verifier evidence 消费;不安装验证器也能完整使用 plan、develop、handoff 和 receipt。
4950
- 为 Sopify 可安装宿主增加显式 `--with-evidentloop` 配套安装:只在用户选择时为目标宿主安装缺失的官方固定版本 CLI 与 Skill;不把该参数作为运行能力开关。
5051
- 允许用户直接使用已独立安装的 EvidentLoop 或其他验证组件,不要求经 Sopify 安装,不增加验证器注册表。
@@ -68,7 +69,7 @@ CrossReview 已被独立产品 EvidentLoop 替代,但 Wave 2 实施前,Sopif
6869
1. 对齐方案包结构、`plan_version`、入口预检和中英文分发资产。
6970
2. 删除 CrossReview 当前执行面,并收口 Sopify blueprint、protocol 与 ADR 当前真相。
7071
3. 在 EvidentLoop 独立仓库补齐通用 `diff_version / report_version`,经确认后发布下一 Alpha。
71-
4. 在现有 Sopify 多宿主安装器中加入 `--with-evidentloop` 最小分支,复用目标宿主映射并验证未选择、缺失安装、兼容复用和不兼容停车。
72+
4. 先收口当前分发契约漂移,再在现有 Sopify 多宿主安装器中加入 `--with-evidentloop` 最小分支,复用目标宿主映射并验证未选择、缺失安装、兼容复用和不兼容停车。
7273
5. 先完成全量验证、残留审计和知识同步,再以 Codex 作为首轮真实宿主,用该公开版本与配套安装路径审计最终“实现与契约 diff”;初次报告生成后显式停车等待用户裁定。
7374
6. 用户裁定闭环后附着报告、写 receipt,完成只读残留复核和标准 finalize 归档。
7475

@@ -78,12 +79,14 @@ CrossReview 已被独立产品 EvidentLoop 替代,但 Wave 2 实施前,Sopif
7879
- `.sopify/history/**` 不做名称迁移、内容重写或样例重生成;旧字段和旧版本值保持历史事实。
7980
- 方案级别统一为:light 只有 `plan.md`;standard 为 `plan.md + tasks.md`;architecture 为 `plan.md + tasks.md + design.md`。不预建空 receipts、assets、ADR 或 diagrams。
8081
- `plan.md` 是统一入口,`plan_version` 是完整方案版本。底层使用 SHA-256,但字段名和用户文案不暴露算法术语。
82+
- develop 完成后只把 `plan.md` 生命周期元数据更新为 `ready_to_archive` 并保留在 `plan/`;只有显式 `~go finalize` 才通过 writer 归档。该状态不是新的 state 文件或生命周期引擎。
8183
- `plan_version` 先按 level 校验精确文件集合,再按固定顺序读取该级别的 `plan.md / tasks.md / design.md`;排除 `audits/``receipts/``assets/`、state 和其他派生产物。
8284
- EvidentLoop 通用提供 `diff_version``report_version`;Sopify 自己计算 `plan_version` 并建立 receipt 关联。EvidentLoop 不增加 `plan_id`、Sopify adapter、receipt 或 plan/design profile。
8385
- Sopify 默认能力是消费通用 `verdict / evidence / source`;EvidentLoop 是官方推荐、可选配套安装的首个验证器,不是默认安装、默认执行或唯一实现。
8486
- `--with-evidentloop` 默认关闭且只提供安装便利,不写 `evidentloop_enabled`、component registry、state 或持久安装来源。未选择时保持现有安装路径和 `stdlib_only` 核心依赖模型。
8587
- 配套安装面向 Sopify 已有可安装宿主,通过现有 host adapter 映射到标准 Skills CLI agent target:`codex → codex``claude → claude-code``qoder → qoder``copilot → github-copilot`。Skill 固定使用 `-g` 安装到目标宿主的用户级全局发现路径;新增宿主缺少映射时才明确返回未支持,不另建宿主框架。
8688
- Codex 是本方案首轮真实 E2E dogfood 宿主,不是配套安装的唯一宿主。其他宿主必须区分“安装链/结构已验证”和“Skill discovery/审计 E2E 已验证”,不把安装成功宣传为完整可用证据。
89+
- 内置 Skill 的 `host_support` 只表示其语义可由官方适配器交付到对应宿主的支持界面并被消费;它不代表原生 Skill discovery 或 E2E 已验证,能力等级继续由 `HostCapability` 表达。
8790
- 带参数时,缺失项按 Sopify 发布时固定的 EvidentLoop 公开版本与 tag 安装;已存在且通过兼容探针时直接复用;已存在但不兼容时停止并说明,不静默覆盖、降级或升级。
8891
- 本方案不自动管理 EvidentLoop 后续升级。用户可按 EvidentLoop 官方方式独立升级;升级后只要兼容探针通过,Sopify 即可使用。自动升级待真实需求出现后另行设计。
8992
- 用户使用其他验证器时沿用通用 Verifier evidence 与 receipt,不要求 `diff_version / report_version`、EvidentLoop 报告目录或安装参数。
@@ -127,8 +130,12 @@ CrossReview 已被独立产品 EvidentLoop 替代,但 Wave 2 实施前,Sopif
127130
- [x] 用户确认连续实施 Wave 1–2。
128131
- [x] Wave 1–2 实施、定向验证、全量回归和当前知识收口完成。
129132
- [x] Wave 1–2 审计问题最小修复与回归完成;两路独立审批 P0=0、P1=0,用户已接受。
130-
- [ ] Wave 3–6、公开版本 dogfood 和归档完成。
133+
- [x] Wave 1–2 已提交为本地 checkpoint `7dcd768`,Sopify 分支未推送。
134+
- [x] Wave 3 的 EvidentLoop 通用版本实现、定向验证与 370 项全量回归完成。
135+
- [x] EvidentLoop `v0.1.0a2` 已发布:[Publish](https://github.com/evidentloop/evidentloop/actions/runs/29678876261) 成功,[PyPI](https://pypi.org/project/evidentloop/0.1.0a2/) 包含未撤回的 wheel 与 sdist,[GitHub prerelease](https://github.com/evidentloop/evidentloop/releases/tag/v0.1.0a2) 为非草稿;schema `0.4`、prompt `v0.5` 保持不变,Release 无额外 assets 不阻断。
136+
- [x] Task 4.0 已完成:develop/finalize 生命周期、active-plan 读取入口和四宿主 `host_support` 已双语收口;96 tests、36 subtests 与 Ruff 通过。
137+
- [ ] Wave 4–6、公开版本 dogfood 和归档完成。
131138

132139
## Next
133140

134-
Wave 1–2 形成本地 checkpoint commit 后进入 Wave 3。Wave 3 只实施 EvidentLoop 通用版本能力;发布前仍需用户单独授权
141+
等待用户审计 Task 4.0;确认前不进入 Wave 4.1 的 `--with-evidentloop` 实现

.sopify/plan/20260718_evidentloop_optional_audit_integration/tasks.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@
2727

2828
## Wave 3 | EvidentLoop 通用版本能力
2929

30-
- [ ] 3.1 在 EvidentLoop 独立仓库重新核对 main、用户改动和公开版本状态,按其独立生命周期建立最小方案;范围仅为通用 `diff_version / report_version`,不包含任何 Sopify 名称或 plan 语义。
31-
- [ ] 3.2 复用 EvidentLoop 已有确定性哈希,在正式 `audit.json` 的 namespaced extension 和 `finalize / revise` 结构化结果中提供通用版本值;同步 API、CLI、Skill、数据模型和定向测试。
30+
- [x] 3.1 在 EvidentLoop 独立仓库重新核对 main、用户改动和公开版本状态,按其独立生命周期建立最小方案;范围仅为通用 `diff_version / report_version`,不包含任何 Sopify 名称或 plan 语义。
31+
- [x] 3.2 复用 EvidentLoop 已有确定性哈希,在正式 `audit.json` 的 namespaced extension 和 `finalize / revise` 结构化结果中提供通用版本值;同步 API、CLI、Skill、数据模型和定向测试。
3232
- 验收:`diff_version` 唯一对应本次实际 Git diff;`report_version` 唯一对应正式 `audit.json` 字节;正式 HTML 继续校验与 JSON 的 graph/run identity 一致,不单设版本字段。
3333
- 验收:新报告 finalize 返回非空两版本;带版本报告 revise 原样继承 `diff_version`;legacy schema `0.4` 报告缺失时仍可 revise,并明确返回 `diff_version: null`,不得猜测。
3434
- 验收:覆盖 legacy `0.4`、连续两轮 revise、copy、in-place、recovery 和 Skill 校验路径。
3535
- 验收:不升级 code-diff schema 版本,不迁移已发布字段,不增加 plan profile、宿主 adapter、模型 SDK、provider 配置或集成注册表。
36-
- [ ] 3.3 完成 EvidentLoop 定向与全量验证后,在 tag/PyPI/GitHub Release 前停车请求用户发布授权;获授权后发布下一 Alpha,并核对 package、schema、prompt、Release metadata 和 evidence asset 状态。
36+
- [x] 3.3 完成 EvidentLoop 定向与全量验证后,在 tag/PyPI/GitHub Release 前停车请求用户发布授权;获授权后发布 `v0.1.0a2`,并核对 package、schema、prompt、Release metadata 和 evidence asset 状态。
37+
- 证据:[Publish run](https://github.com/evidentloop/evidentloop/actions/runs/29678876261) 成功;[PyPI](https://pypi.org/project/evidentloop/0.1.0a2/) 包含未撤回的 wheel 与 sdist;[GitHub prerelease](https://github.com/evidentloop/evidentloop/releases/tag/v0.1.0a2) 为非草稿,schema `0.4`、prompt `v0.5` 未变,Release 无额外 assets 不阻断。
3738

3839
## Wave 4 | 多宿主可选配套安装
3940

41+
- [x] 4.0 收口当前分发契约的三处既有漂移,不重开 Wave 1–2,也不引入新状态或宿主框架。
42+
- 验收:中英文 header 与 develop Skill/rules 统一为“develop 完成后更新 `plan.md``ready_to_archive` 生命周期元数据并保留在 `plan/`;只有显式 `~go finalize` 才通过 writer 归档”。
43+
- 验收:中英文 `$kb/$templates` 使用 `state/active_plan.json → plan/<plan_id>/plan.md`,删除退役的 `current_plan.path + current_plan.files` 口径。
44+
- 验收:五个内置 Skill 都声明 `codex / claude / qoder / copilot`,同步生成 catalog 和最小防漂移测试;`host_support` 只表示官方适配器可交付并消费 Skill 语义,不替代 `HostCapability` 的能力等级与 E2E 证据。
4045
- [ ] 4.1 在现有 Python installer、远程 shell/PowerShell wrapper 和用户文档中增加默认关闭的 `--with-evidentloop`;通过现有 HostAdapter 固定映射 `codex → codex``claude → claude-code``qoder → qoder``copilot → github-copilot`,并在核心写入前校验映射、`uv``npx`
4146
- 验收:不带参数时不执行任何 EvidentLoop lookup、网络访问或提示,现有安装成功语义、payload 和 `stdlib_only` 依赖声明保持不变;只有 help/文档新增可选参数说明。缺少 Skill target 映射的新宿主明确停止可选分支。
4247
- [ ] 4.2 用一个 EvidentLoop 专用安装 helper 实现最小分支,不建立通用 component framework:兼容安装直接复用,缺失的 CLI/Skill 按固定 package 版本和 Git tag 补齐,已有不兼容项时不修改。

scripts/render-host-skills.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ def main() -> None:
125125
help="Path to hosts.yaml",
126126
)
127127
parser.add_argument("--lang", help="Language code (en or zh)")
128-
parser.add_argument("--host", help="Host id (claude, codex, copilot)")
128+
parser.add_argument("--host", help="Host id (claude, codex, qoder, copilot)")
129129
parser.add_argument("--output", type=Path, help="Output file path (default: stdout)")
130130
parser.add_argument(
131131
"--verify-all",

skills/catalog/analyze/skill.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ allowed_paths:
1616
host_support:
1717
- codex
1818
- claude
19+
- qoder
20+
- copilot
1921
permission_mode: default

skills/catalog/builtin_catalog.generated.json

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"generated_at": "2026-06-07T06:13:51.963293+00:00",
2+
"generated_at": "2026-07-19T08:14:29.246893+00:00",
33
"schema_version": "1",
44
"skills": [
55
{
@@ -15,7 +15,9 @@
1515
"handoff_kind": "analysis",
1616
"host_support": [
1717
"codex",
18-
"claude"
18+
"claude",
19+
"qoder",
20+
"copilot"
1921
],
2022
"id": "analyze",
2123
"metadata": {},
@@ -44,7 +46,9 @@
4446
"handoff_kind": "plan",
4547
"host_support": [
4648
"codex",
47-
"claude"
49+
"claude",
50+
"qoder",
51+
"copilot"
4852
],
4953
"id": "design",
5054
"metadata": {},
@@ -73,7 +77,9 @@
7377
"handoff_kind": "develop",
7478
"host_support": [
7579
"codex",
76-
"claude"
80+
"claude",
81+
"qoder",
82+
"copilot"
7783
],
7884
"id": "develop",
7985
"metadata": {},
@@ -103,7 +109,9 @@
103109
"handoff_kind": "kb",
104110
"host_support": [
105111
"codex",
106-
"claude"
112+
"claude",
113+
"qoder",
114+
"copilot"
107115
],
108116
"id": "kb",
109117
"metadata": {},
@@ -133,7 +141,9 @@
133141
"handoff_kind": "template",
134142
"host_support": [
135143
"codex",
136-
"claude"
144+
"claude",
145+
"qoder",
146+
"copilot"
137147
],
138148
"id": "templates",
139149
"metadata": {},

skills/catalog/design/skill.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ allowed_paths:
1616
host_support:
1717
- codex
1818
- claude
19+
- qoder
20+
- copilot
1921
permission_mode: default

skills/catalog/develop/skill.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ allowed_paths:
1717
host_support:
1818
- codex
1919
- claude
20+
- qoder
21+
- copilot
2022
permission_mode: default

skills/catalog/kb/skill.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,6 @@ allowed_paths:
1717
host_support:
1818
- codex
1919
- claude
20+
- qoder
21+
- copilot
2022
permission_mode: default

skills/catalog/templates/skill.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ allowed_paths:
1616
host_support:
1717
- codex
1818
- claude
19+
- qoder
20+
- copilot
1921
permission_mode: default

0 commit comments

Comments
 (0)