release-skill 0.9.17 → 0.9.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.cursor-plugin/plugin.json +10 -0
- package/.kimi-plugin/plugin.json +1 -1
- package/.qoder-plugin/plugin.json +1 -1
- package/CHANGELOG.md +70 -2
- package/INSTALL.md +66 -9
- package/INSTALL.zh-CN.md +49 -8
- package/README.md +41 -20
- package/README.zh-CN.md +31 -19
- package/adapters/claude/.claude-plugin/plugin.json +1 -1
- package/adapters/claude/bin/consumer-contract-vectors.json +7 -7
- package/adapters/claude/bin/error-codes.json +1 -1
- package/adapters/claude/bin/foundation-resource-binding.json +1 -1
- package/adapters/claude/bin/prebuild-manifest.json +8 -4
- package/adapters/claude/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/claude/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/claude/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/claude/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/claude/bin/registry.json +1 -1
- package/adapters/claude/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/claude/bin/rules.json +1 -1
- package/adapters/claude/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/claude/data/hosts/registry.json +1 -0
- package/adapters/claude/schemas/release-plan.schema.json +255 -25
- package/adapters/claude/schemas/release-project.schema.json +228 -26
- package/adapters/claude/skills/release-finish/SKILL.md +46 -7
- package/adapters/claude/skills/release-help/SKILL.md +47 -103
- package/adapters/claude/skills/release-verify/SKILL.md +2 -2
- package/adapters/claude/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/codex/.codex-plugin/plugin.json +2 -2
- package/adapters/codex/bin/consumer-contract-vectors.json +7 -7
- package/adapters/codex/bin/error-codes.json +1 -1
- package/adapters/codex/bin/foundation-resource-binding.json +1 -1
- package/adapters/codex/bin/prebuild-manifest.json +8 -4
- package/adapters/codex/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/codex/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/codex/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/codex/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/codex/bin/registry.json +1 -1
- package/adapters/codex/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/codex/bin/rules.json +1 -1
- package/adapters/codex/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/codex/data/hosts/registry.json +1 -0
- package/adapters/codex/schemas/release-plan.schema.json +255 -25
- package/adapters/codex/schemas/release-project.schema.json +228 -26
- package/adapters/codex/skills/release-finish/SKILL.md +46 -7
- package/adapters/codex/skills/release-help/SKILL.md +49 -105
- package/adapters/codex/skills/release-verify/SKILL.md +2 -2
- package/adapters/codex/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/cursor/.cursor-plugin/plugin.json +10 -0
- package/adapters/cursor/bin/consumer-contract-vectors.json +110 -0
- package/adapters/cursor/bin/error-codes.json +161 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-contracts/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-contracts/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-engineering-kit/THIRD_PARTY_NOTICES +142 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/LICENSE +202 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/NOTICE +10 -0
- package/adapters/cursor/bin/foundation-legal/skill-family-harness-node/native-NOTICE +2 -0
- package/adapters/cursor/bin/foundation-resource-binding.json +1 -0
- package/adapters/cursor/bin/kernel-protocol.json +60 -0
- package/adapters/cursor/bin/license-texts/Apache-2.0.txt +201 -0
- package/adapters/cursor/bin/license-texts/MIT.txt +21 -0
- package/adapters/cursor/bin/prebuild-manifest.json +83 -0
- package/adapters/cursor/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/cursor/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/cursor/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/cursor/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/cursor/bin/registry.json +347 -0
- package/adapters/cursor/bin/release-skill-local-finish.mjs +4 -0
- package/adapters/cursor/bin/release-skill.bundle.mjs +152352 -0
- package/adapters/cursor/bin/release-skill.mjs +54 -0
- package/adapters/cursor/bin/rules.json +104 -0
- package/adapters/cursor/bin/schemas/consumer-contract-vector.schema.json +149 -0
- package/adapters/cursor/data/hosts/claude/host-descriptor.json +45 -0
- package/adapters/cursor/data/hosts/codebuddy/host-descriptor.json +26 -0
- package/adapters/cursor/data/hosts/codex/host-descriptor.json +45 -0
- package/adapters/cursor/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/cursor/data/hosts/deepseek-harness/host-descriptor.json +23 -0
- package/adapters/cursor/data/hosts/kimi-code/host-descriptor.json +36 -0
- package/adapters/cursor/data/hosts/qoder/host-descriptor.json +26 -0
- package/adapters/cursor/data/hosts/registry.json +14 -0
- package/adapters/cursor/data/hosts/workbuddy/host-descriptor.json +34 -0
- package/adapters/cursor/data/licensing/registry.json +211 -0
- package/adapters/cursor/data/licensing/schema.json +207 -0
- package/adapters/cursor/native/safe-write/binding.gyp +41 -0
- package/adapters/cursor/native/safe-write/prebuilds/darwin-arm64/safe_write.node +0 -0
- package/adapters/cursor/native/safe-write/prebuilds.json +24 -0
- package/adapters/cursor/native/safe-write/src/safe_write.cc +2032 -0
- package/adapters/cursor/schemas/.render-manifest.json +41 -0
- package/adapters/cursor/schemas/approval-record.schema.json +115 -0
- package/adapters/cursor/schemas/artifact-lock.schema.json +111 -0
- package/adapters/cursor/schemas/artifact-plan.schema.json +52 -0
- package/adapters/cursor/schemas/artifact-policy.schema.json +76 -0
- package/adapters/cursor/schemas/evidence-event-v2.schema.json +164 -0
- package/adapters/cursor/schemas/evidence-event.schema.json +89 -0
- package/adapters/cursor/schemas/postpublish-approval-record.schema.json +47 -0
- package/adapters/cursor/schemas/release-plan.schema.json +2226 -0
- package/adapters/cursor/schemas/release-project.schema.json +1815 -0
- package/adapters/cursor/schemas/release-run.schema.json +777 -0
- package/adapters/cursor/skills/release-assess/SKILL.md +61 -0
- package/adapters/cursor/skills/release-config/SKILL.md +151 -0
- package/adapters/cursor/skills/release-docs/SKILL.md +120 -0
- package/adapters/cursor/skills/release-finish/SKILL.md +181 -0
- package/adapters/cursor/skills/release-help/SKILL.md +98 -0
- package/adapters/cursor/skills/release-marketplace/SKILL.md +157 -0
- package/adapters/cursor/skills/release-prepare/SKILL.md +136 -0
- package/adapters/cursor/skills/release-publish/SKILL.md +92 -0
- package/adapters/cursor/skills/release-reconcile/SKILL.md +81 -0
- package/adapters/cursor/skills/release-setup/SKILL.md +132 -0
- package/adapters/cursor/skills/release-verify/SKILL.md +110 -0
- package/adapters/cursor/src/schemas/adapter-build-manifest.schema.json +41 -0
- package/adapters/cursor/src/schemas/adapter-peer-verification-request.schema.json +54 -0
- package/adapters/cursor/src/schemas/adapter-peer-verification-result.schema.json +54 -0
- package/adapters/cursor/src/schemas/adapter-source.schema.json +47 -0
- package/adapters/cursor/src/schemas/audit-baseline-pin.schema.json +163 -0
- package/adapters/cursor/src/schemas/declared-read-surface-result.schema.json +61 -0
- package/adapters/cursor/src/schemas/engineering-baseline.schema.json +77 -0
- package/adapters/cursor/src/schemas/executable-identity-observation.schema.json +162 -0
- package/adapters/cursor/src/schemas/filesystem-root-binding.schema.json +14 -0
- package/adapters/cursor/src/schemas/filesystem-tree-observation.schema.json +71 -0
- package/adapters/cursor/src/schemas/fixed-set-publication-manifest.schema.json +108 -0
- package/adapters/cursor/src/schemas/fixed-set-publication-receipt.schema.json +148 -0
- package/adapters/cursor/src/schemas/host-capability-fact.schema.json +31 -0
- package/adapters/cursor/src/schemas/host-descriptor.schema.json +144 -0
- package/adapters/cursor/src/schemas/host-operation-plan.schema.json +57 -0
- package/adapters/cursor/src/schemas/host-operation-receipt.schema.json +81 -0
- package/adapters/cursor/src/schemas/host-probe-result.schema.json +30 -0
- package/adapters/cursor/src/schemas/host-registry.schema.json +18 -0
- package/adapters/cursor/src/schemas/host-verification-request.schema.json +67 -0
- package/adapters/cursor/src/schemas/host-verification-result.schema.json +149 -0
- package/adapters/cursor/src/schemas/managed-file-lock.schema.json +77 -0
- package/adapters/cursor/src/schemas/migration-manifest.schema.json +412 -0
- package/adapters/cursor/src/schemas/observation-scope.schema.json +91 -0
- package/adapters/cursor/src/schemas/operation-request.schema.json +58 -0
- package/adapters/cursor/src/schemas/operation-result.schema.json +130 -0
- package/adapters/cursor/src/schemas/platform-difference-registry.schema.json +110 -0
- package/adapters/cursor/src/schemas/plugin-verification-request.schema.json +499 -0
- package/adapters/cursor/src/schemas/plugin-verification-result.schema.json +1217 -0
- package/adapters/cursor/src/schemas/profile-adoption-declaration.schema.json +111 -0
- package/adapters/cursor/src/schemas/profile-descriptor.schema.json +99 -0
- package/adapters/cursor/src/schemas/project-manifest.schema.json +67 -0
- package/adapters/cursor/src/schemas/project-profile.schema.json +25 -0
- package/adapters/cursor/src/schemas/public-boundary-declaration.schema.json +73 -0
- package/adapters/cursor/src/schemas/report-binding.schema.json +42 -0
- package/adapters/cursor/src/schemas/report-model.schema.json +308 -0
- package/adapters/cursor/src/schemas/skill-family-directory-verification-request.schema.json +100 -0
- package/adapters/cursor/src/schemas/skill-family-directory-verification-result.schema.json +193 -0
- package/adapters/cursor/src/schemas/source-authority-receipt.schema.json +31 -0
- package/adapters/cursor/src/schemas/state-event-envelope.schema.json +38 -0
- package/adapters/cursor/src/schemas/state-snapshot-metadata.schema.json +25 -0
- package/adapters/cursor/src/schemas/structured-scan-policy.schema.json +97 -0
- package/adapters/cursor/src/schemas/surface-scan-policy.schema.json +42 -0
- package/adapters/cursor/src/schemas/timeout-policy.schema.json +24 -0
- package/adapters/cursor/src/schemas/token-estimate-record.schema.json +75 -0
- package/adapters/cursor/src/schemas/token-estimate-result.schema.json +43 -0
- package/adapters/cursor/src/schemas/watchdog-termination-envelope.schema.json +156 -0
- package/adapters/kimi/.kimi-plugin/plugin.json +1 -1
- package/adapters/kimi/bin/consumer-contract-vectors.json +7 -7
- package/adapters/kimi/bin/error-codes.json +1 -1
- package/adapters/kimi/bin/foundation-resource-binding.json +1 -1
- package/adapters/kimi/bin/prebuild-manifest.json +8 -4
- package/adapters/kimi/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/kimi/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/kimi/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/kimi/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/kimi/bin/registry.json +1 -1
- package/adapters/kimi/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/kimi/bin/rules.json +1 -1
- package/adapters/kimi/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/kimi/data/hosts/registry.json +1 -0
- package/adapters/kimi/schemas/release-plan.schema.json +255 -25
- package/adapters/kimi/schemas/release-project.schema.json +228 -26
- package/adapters/kimi/skills/release-finish/SKILL.md +46 -7
- package/adapters/kimi/skills/release-help/SKILL.md +49 -105
- package/adapters/kimi/skills/release-verify/SKILL.md +2 -2
- package/adapters/kimi/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/qoder/.qoder-plugin/plugin.json +1 -1
- package/adapters/qoder/bin/consumer-contract-vectors.json +7 -7
- package/adapters/qoder/bin/error-codes.json +1 -1
- package/adapters/qoder/bin/foundation-resource-binding.json +1 -1
- package/adapters/qoder/bin/prebuild-manifest.json +8 -4
- package/adapters/qoder/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/qoder/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/qoder/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/qoder/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/qoder/bin/registry.json +1 -1
- package/adapters/qoder/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/qoder/bin/rules.json +1 -1
- package/adapters/qoder/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/qoder/data/hosts/registry.json +1 -0
- package/adapters/qoder/schemas/release-plan.schema.json +255 -25
- package/adapters/qoder/schemas/release-project.schema.json +228 -26
- package/adapters/qoder/skills/release-finish/SKILL.md +46 -7
- package/adapters/qoder/skills/release-help/SKILL.md +49 -105
- package/adapters/qoder/skills/release-verify/SKILL.md +2 -2
- package/adapters/qoder/src/schemas/host-descriptor.schema.json +9 -2
- package/adapters/workbuddy/.codebuddy-plugin/plugin.json +1 -1
- package/adapters/workbuddy/bin/consumer-contract-vectors.json +7 -7
- package/adapters/workbuddy/bin/error-codes.json +1 -1
- package/adapters/workbuddy/bin/foundation-resource-binding.json +1 -1
- package/adapters/workbuddy/bin/prebuild-manifest.json +8 -4
- package/adapters/workbuddy/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/adapters/workbuddy/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/adapters/workbuddy/bin/registry.json +1 -1
- package/adapters/workbuddy/bin/release-skill.bundle.mjs +4425 -1519
- package/adapters/workbuddy/bin/rules.json +1 -1
- package/adapters/workbuddy/data/hosts/cursor/host-descriptor.json +34 -0
- package/adapters/workbuddy/data/hosts/registry.json +1 -0
- package/adapters/workbuddy/schemas/release-plan.schema.json +255 -25
- package/adapters/workbuddy/schemas/release-project.schema.json +228 -26
- package/adapters/workbuddy/skills/release-finish/SKILL.md +46 -7
- package/adapters/workbuddy/skills/release-help/SKILL.md +47 -103
- package/adapters/workbuddy/skills/release-verify/SKILL.md +2 -2
- package/adapters/workbuddy/src/schemas/host-descriptor.schema.json +9 -2
- package/bin/consumer-contract-vectors.json +7 -7
- package/bin/error-codes.json +1 -1
- package/bin/foundation-resource-binding.json +1 -1
- package/bin/prebuild-manifest.json +8 -4
- package/bin/prebuilds/darwin-arm64/bound_read.darwin-arm64.node +0 -0
- package/bin/prebuilds/darwin-x64/bound_read.darwin-x64.node +0 -0
- package/bin/prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node +0 -0
- package/bin/prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node +0 -0
- package/bin/registry.json +1 -1
- package/bin/release-skill-cli.mjs +115 -15
- package/bin/release-skill.bundle.mjs +4425 -1519
- package/bin/rules.json +1 -1
- package/data/hosts/cursor/host-descriptor.json +34 -0
- package/data/hosts/registry.json +1 -0
- package/package.json +7 -5
- package/platform-manifest.json +75 -9
- package/references/02-project-config.md +4 -0
- package/schemas/release-plan.schema.json +255 -25
- package/schemas/release-project.schema.json +228 -26
- package/scripts/sync-public-files.mjs +3 -22
- package/skills/release-finish/SKILL.md +46 -7
- package/skills/release-help/SKILL.md +47 -103
- package/skills/release-verify/SKILL.md +2 -2
- package/skills-src/release-finish/SKILL.md +46 -7
- package/skills-src/release-help/SKILL.md +47 -103
- package/skills-src/release-verify/SKILL.md +2 -2
- package/src/adapters/contract.mjs +1 -0
- package/src/adapters/plugin-marketplace.mjs +201 -9
- package/src/commands/post-release-finish.mjs +448 -0
- package/src/commands/post-release-local.mjs +312 -36
- package/src/commands/prepare.mjs +74 -9
- package/src/commands/publish.mjs +4 -1
- package/src/commands/ship.mjs +3 -0
- package/src/commands/verify.mjs +73 -0
- package/src/core/checkpoints.mjs +5 -2
- package/src/core/config.mjs +1 -1
- package/src/core/foundation-host-verification.mjs +168 -0
- package/src/core/plan.mjs +19 -1
- package/src/core/postpublish.mjs +9 -1
- package/src/core/run-retention.mjs +1 -1
- package/src/core/surface-host-bindings.mjs +1 -0
- package/src/core/verification-gates.mjs +1 -1
- package/src/platforms/registry.mjs +225 -16
- package/src/producers/build-adapters.mjs +21 -26
- package/src/producers/foundation-resource-projection.mjs +3 -3
- package/src/schemas/host-descriptor.schema.json +9 -2
|
@@ -6,148 +6,92 @@ description: "Discoverable entry point for release-skill: dependency and environ
|
|
|
6
6
|
> **Codex 安装入口解析协议**:在调用 CLI 前,Agent 必须从宿主当前已加载技能的元数据中取得本 `SKILL.md` 的实际绝对路径,并将该字面量记为 `SKILL_FILE`。
|
|
7
7
|
> `SKILL_FILE` 不是环境变量;禁止从工作目录、可执行搜索路径、源码仓库或 shell 调用上下文猜测。若宿主未提供该绝对路径,立即停止并报告安装定位失败。
|
|
8
8
|
> 对 `SKILL_FILE` 执行 `realpath`,取其目录向上两级得到 `PLUGIN_ROOT`;校验真实技能路径匹配 `PLUGIN_ROOT/skills/*/SKILL.md` 且仍位于插件根内(路径包含检查)。
|
|
9
|
-
> 令 `
|
|
10
|
-
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `
|
|
9
|
+
> 令 `RELEASE_SKILL_LOCAL_FINISH_ENTRY=PLUGIN_ROOT/bin/release-skill-local-finish.mjs`,对入口执行 `realpath` containment、`lstat` 非符号链接且为普通文件校验。
|
|
10
|
+
> 每一次 shell 工具调用都必须在同一个调用中用上述已验证绝对值设置 `RELEASE_SKILL_LOCAL_FINISH_ENTRY`,然后执行 `node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" ...`;不得依赖前一次 shell 的变量。
|
|
11
11
|
>
|
|
12
12
|
|
|
13
13
|
# release-help
|
|
14
14
|
|
|
15
15
|
## 触发
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
询问 release-skill 的用法、发布流程、依赖、环境、只读诊断或 dry-run 时使用。本入口只做能力说明和分诊;专用工作流交给对应 Skill。
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## 只读边界
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
- 能力说明:缺少配置时走 `help → setup → assess`;已有配置的安全默认路径是 `help → assess → prepare --offline`;日常生产发布优先使用可恢复的 `ship`,兼容的分阶段闭环仍是 `prepare --online --production → approve → publish → verify`。冻结计划批准是正常发布级流程的唯一批准门;声明 `requiresApproval: true` 的 postPublish hook 仍须等待独立 checkpoint 批准。若计划声明 `postVerify` hook,可用 `postverify` 直接执行独立收尾 run,也可由 `ship` 编排该阶段;本机收尾必须等待完成的 postVerify run,不能把仅有 `VERIFIED` 的 verify run 当作本机收尾授权。核心发布流程跨平台,WorkBuddy 本机收尾仅支持 macOS
|
|
23
|
-
- 最小示例:展示从 release-help 到 release-assess 的最短路径
|
|
24
|
-
- 只读诊断:运行 dry-run 检查,不修改任何文件
|
|
25
|
-
- 故障引导:根据错误码指向对应的修复 Skill
|
|
21
|
+
`help` 不联网、不检查认证、不改文件、不生成计划,也不执行 Git、宿主安装或外部发布写入。它只根据当前环境报告准备度并给出下一步。优先调用插件自带入口;不可用时才回退到源码入口。
|
|
26
22
|
|
|
27
|
-
|
|
23
|
+
核心流程跨平台;WorkBuddy 本机收尾仅支持 macOS。Node.js >= 22 和 Git 决定本地准备度。npm、gh 只影响生产发布依赖;pnpm 缺失只进入建议。
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
本地阶段通过须同时满足 `status: "READY"` 和 exit code 0。读取 `readiness.localPreparation.status` 与 `missingRequired`。生产另读 `readiness.productionPublish`:缺 npm/gh 为 `NOT_READY`,已安装也只是 `AUTH_CHECK_REQUIRED`,不代表认证、权限或发布授权已经成立。
|
|
30
26
|
|
|
31
|
-
|
|
27
|
+
## 0.9.19 候选边界
|
|
32
28
|
|
|
33
|
-
|
|
29
|
+
当前 0.9.19 候选精确消费 Foundation 0.21.0 的公开包根 API。0.9.19 仍是源码候选,不能从本说明推断已批准、发布或验证。
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
冻结前,`prepare` 或新建 `ship` 状态可重复传入 `--unit <id>`;不传则选择全部单元。延期单元不进入计划,也不获得发布状态。完整配置、生成物新鲜度和顶层 Hook 仍覆盖全项目;`publicSourceAuthorityReceipt` 的 coordinator 与 subjects 必须共同选择。冻结后以 `plan.units` 为唯一范围,publish、reconcile、verify、distribute 不再接受 `--unit`。
|
|
36
32
|
|
|
37
|
-
|
|
33
|
+
每个单元都要声明 `previousPublicBaseline`:确认没有前序版本才用 `none`,否则使用带 repo/ref/commit 的 `bound`。`none` 不绕过 publish 的唯一性预检。
|
|
38
34
|
|
|
39
|
-
|
|
35
|
+
Hook cache v2 只复用绝对路径,或已用真实 cwd 核验的 cwd-relative executable identity;裸 PATH、PATHEXT、Windows 或观察不可用时冷执行,并失败关闭。稳定隔离安装树只在宿主命令退出、目录隔离且扫描期间无并发写入时记录;附加链接只记录、不跟随,声明载荷中的 symlink 失败关闭。
|
|
40
36
|
|
|
41
|
-
##
|
|
37
|
+
## 最短路径
|
|
42
38
|
|
|
43
|
-
1.
|
|
44
|
-
2.
|
|
45
|
-
3.
|
|
46
|
-
4.
|
|
47
|
-
|
|
48
|
-
## 确定性脚本调用
|
|
39
|
+
1. 从插件根运行 `help --json`,检查本地准备度;生产发布再检查生产准备度。
|
|
40
|
+
2. 缺少 `.release-skill/project.yaml` 时进入 `release-setup`;已有配置时进入 `release-assess`。
|
|
41
|
+
3. 本地评估使用 `release-assess` 和 `prepare --offline`。默认在审阅计划与快照后停止。
|
|
42
|
+
4. 生产发布优先使用可恢复的 `ship`;也可走 `prepare --online --production → approve → publish → verify`。
|
|
49
43
|
|
|
50
44
|
```bash
|
|
51
|
-
# 从插件根运行(自包含 bundle,无需 node_modules)
|
|
52
45
|
node "$RELEASE_SKILL_ENTRY" help --json
|
|
53
46
|
node "$RELEASE_SKILL_ENTRY" setup --root <path> --json
|
|
54
47
|
node "$RELEASE_SKILL_ENTRY" assess --root <path> --offline --json
|
|
55
|
-
|
|
56
|
-
# 受限 postPublish hook 的 checkpoint 批准与计划批准分开。
|
|
57
|
-
node "$RELEASE_SKILL_ENTRY" ship --root <path> --target-version <version> --json
|
|
58
|
-
# 多发布单元项目显式选择本轮范围;未传 --unit 时仍为全部单元
|
|
59
|
-
node "$RELEASE_SKILL_ENTRY" ship --root <path> \
|
|
60
|
-
--target-version <version> --unit <unit-a> --unit <unit-b> --json
|
|
61
|
-
# 对已经 VERIFIED 的计划独立执行 postVerify hook;不读取或写入 ship state
|
|
62
|
-
node "$RELEASE_SKILL_ENTRY" postverify --root <path> \
|
|
63
|
-
--plan <plan-path> --approval <approval-path> --run <verified-run-path> \
|
|
64
|
-
--hook-approval <immutable-hook-approval-path> --json
|
|
65
|
-
# 开发阶段执行声明 hooks 并生成 prepare 可复用的内容绑定收据
|
|
66
|
-
# 配置时刻即授权(FM-16 处置 A):hook 是任意本地进程、无隔离、触发前无确认点,
|
|
67
|
-
# 命令调用本身即授权执行配置中的 hooks
|
|
68
|
-
node "$RELEASE_SKILL_ENTRY" hooks validate --root <path> --json
|
|
69
|
-
# 仅旧冻结计划兼容:记录历史 Kimi/CodeBuddy 人工证明
|
|
70
|
-
# (本地自声明收据,证明力弱:--actor 仅非空字符串校验、无外部签名核验;新计划不适用)
|
|
71
|
-
node "$RELEASE_SKILL_ENTRY" attest --root <path> \
|
|
72
|
-
--platform <kimi|codebuddy> --plugin <id> --result <passed|failed> --actor <person> --json
|
|
73
|
-
# 发布文档刷新:默认只读演练
|
|
74
|
-
node "$RELEASE_SKILL_ENTRY" docs refresh --unit <id> --json
|
|
75
|
-
# 摘要确认后的本地写入(三项绑定缺一不可)
|
|
76
|
-
node "$RELEASE_SKILL_ENTRY" docs refresh --unit <id> \
|
|
77
|
-
--write --confirm-refresh <refreshDigest> --ack-local-document-write --json
|
|
48
|
+
node "$RELEASE_SKILL_ENTRY" route --root <path> --target-version <version> --json
|
|
78
49
|
```
|
|
79
50
|
|
|
80
|
-
|
|
51
|
+
`route` 只做分类和推荐,不是授权门。分类为 docs、config、marketplace、code 或 mixed;存在 `PARTIAL` 时先进入 reconcile,不能确定时按更安全的完整路径处理。
|
|
81
52
|
|
|
82
|
-
|
|
53
|
+
## 生产发布与恢复边界
|
|
83
54
|
|
|
84
|
-
|
|
85
|
-
- **说明源**:`version` 必须与单元版本精确一致,`date` 为 `YYYY-MM-DD`,每个配置语种恰好出现一次且 `summary`、变更项非空,`security`/`breaking`/`added`/`changed`/`deprecated`/`removed`/`fixed` 至少一个类别含条目。YAML alias、重复键、未知字段和语种回退都失败关闭。
|
|
86
|
-
- **只读演练**:`docs refresh --unit <id> --json` 输出逐文件相对路径、locale、新旧摘要、`version`、`locales`、`inputDigest`、`refreshDigest` 和 `nextCommand.argv`;候选无变化时 `status: "clean"`。
|
|
87
|
-
- **确认写入**:必须同时提供 `--write`、精确 `--confirm-refresh <refreshDigest>` 和 `--ack-local-document-write`,全部目标作为一个事务提交;成功后立即复演必须为 `clean`。
|
|
55
|
+
只有用户明确要求生产发布,且冻结计划摘要已经人工审阅,才进入 `release-publish`。冻结计划批准是发布级唯一批准门;publish 会自行核对 plan、approval、digest、目标版本、远端冲突和允许动作。route、help、`READY`、历史成功或 `VERIFIED` 都不能替代批准。
|
|
88
56
|
|
|
89
|
-
|
|
57
|
+
`requiresApproval: true` 的 postPublish hook 还需要独立 checkpoint 批准。项目配置中的其他 hook 是任意本地进程,没有文件系统或网络隔离;执行相应命令即授权运行,help 不替用户作出该授权。
|
|
90
58
|
|
|
91
|
-
|
|
59
|
+
外部写入按 checkpoint 停止;部分成功进入 `PARTIAL`。不得自动删除远端标签、覆盖 Release、unpublish npm 或从头重跑。使用 `release-reconcile` 查询远端实际状态,只重试安全且未完成的动作;冲突交回人工决定。
|
|
92
60
|
|
|
93
|
-
|
|
94
|
-
|---|---|
|
|
95
|
-
| Node.js 版本不足 | `status: "NOT_READY"`, `missingRequired` 含 `"node>=22"`;提示升级至 >= 22 |
|
|
96
|
-
| Git 未安装 | `status: "NOT_READY"`, `missingRequired` 含 `"git"`;提示安装 Git |
|
|
97
|
-
| pnpm 未安装 | 不影响本地准备;仅出现在 recommendations 中 |
|
|
98
|
-
| npm/gh 未安装 | 本地准备仍可就绪,但 `readiness.productionPublish.status` 为 `NOT_READY` |
|
|
99
|
-
| npm/gh 已安装 | 生产状态仍为 `AUTH_CHECK_REQUIRED`;发布前验证 `gh auth`、Git HTTPS credential 和 npm auth |
|
|
100
|
-
| CLI 入口不存在 | 确认 `$RELEASE_SKILL_ENTRY` 存在;不存在时重新安装插件 |
|
|
101
|
-
| 项目配置不存在 | 路由 `release-setup`,默认只读;不得直接生成或覆盖 README/配置 |
|
|
102
|
-
| assess 失败 | 运行 `node "$RELEASE_SKILL_ENTRY" assess --offline --json` 获取详情 |
|
|
103
|
-
| 请求生产发布 | 已有公开版本先调用 `release-prepare --online --production` 观察 bound 基线;人工审阅后直接调用 `release-publish`,由 publish 自行完成计划、approval、digest、远端冲突和 `PARTIAL` 校验 |
|
|
104
|
-
| RELEASE_DOCS_INVALID | 配置或说明源语义非法(重复键、alias、未知字段、版本漂移等);修正配置或说明源后重新演练 |
|
|
105
|
-
| RELEASE_DOCS_TRANSLATION_MISSING | 配置语种缺失或多余;补齐说明源语种,与 `releaseDocuments.locales` 完全一致,不得回退 |
|
|
61
|
+
## VERIFIED 后收尾
|
|
106
62
|
|
|
107
|
-
|
|
63
|
+
声明的 `postVerify` hook 可由 `postverify` 独立执行或由 `ship` 编排。计划声明该 hook 时,本机收尾必须等待完成的 postVerify run;没有声明时使用同一计划的 `VERIFIED` verify run。
|
|
108
64
|
|
|
109
|
-
|
|
65
|
+
随后进入 `release-finish`,通过公共入口编排宿主更新、加载确认、已配置 setup 和源码分支检查:
|
|
110
66
|
|
|
111
67
|
```bash
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
--target-version <version> --json
|
|
116
|
-
|
|
117
|
-
# JSON 输出包含 classification 和 recommendation 字段
|
|
118
|
-
{
|
|
119
|
-
"classification": {
|
|
120
|
-
"code": [],
|
|
121
|
-
"docs": ["README.md"],
|
|
122
|
-
"config": [],
|
|
123
|
-
"marketplace": [],
|
|
124
|
-
"mixed": false
|
|
125
|
-
},
|
|
126
|
-
"recommendation": {
|
|
127
|
-
"workflowKind": "docs-only",
|
|
128
|
-
"reason": "Pure documentation changes detected...",
|
|
129
|
-
"firstCommand": "release-docs"
|
|
130
|
-
}
|
|
131
|
-
}
|
|
68
|
+
node "$RELEASE_SKILL_LOCAL_FINISH_ENTRY" \
|
|
69
|
+
--root <project-root> --plan <plan-path> --run <verify-or-postverify-run-path> \
|
|
70
|
+
--finish --json
|
|
132
71
|
```
|
|
133
72
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
- `
|
|
139
|
-
- `
|
|
140
|
-
- `
|
|
73
|
+
首次结果可能请求用户选择分支和本机宿主,或返回需要智能体实际加载并调用 setup 的请求。将绑定反馈写入文件后,以同一入口增加 `--finish-feedback <feedback-path>` 再次汇总。完整参数、反馈合同、宿主限制和 macOS Cursor 安装见 `release-finish`。仅有 `VERIFIED` 不构成本机写入、插件更新、分支合并或 setup 写入授权;收尾结果也不改写发布状态。
|
|
74
|
+
|
|
75
|
+
## 专用工作流路由
|
|
76
|
+
|
|
77
|
+
- 消费项目的 Cursor 场景配置、受控可执行目录、用户状态目录、结果不确定时的现场保留与复验,见 `release-verify`。
|
|
78
|
+
- README、CHANGELOG 和双语说明的 `docs refresh` 演练、摘要确认与受管写入,见 `release-docs`。
|
|
79
|
+
- VERIFIED 后的分支决定、宿主更新、加载反馈、setup 和源码检查,见 `release-finish`。
|
|
80
|
+
- 纯配置变更,见 `release-config`。
|
|
81
|
+
- 纯 marketplace 索引与快照变更,见 `release-marketplace`。
|
|
82
|
+
|
|
83
|
+
这些入口保留各自的参数、确认和失败关闭规则;help 不复制或放宽它们。
|
|
141
84
|
|
|
142
|
-
|
|
143
|
-
- [`release-docs`](../release-docs/SKILL.md) - 文档工作流详解
|
|
144
|
-
- [`release-config`](../release-config/SKILL.md) - 配置工作流详解
|
|
145
|
-
- [`release-marketplace`](../release-marketplace/SKILL.md) - Marketplace 工作流详解
|
|
85
|
+
## 故障分诊
|
|
146
86
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
87
|
+
- Node.js 或 Git 缺失:读取 `missingRequired`,补齐依赖后重跑 help。
|
|
88
|
+
- npm/gh 缺失或未认证:本地准备仍可继续;生产发布前另行完成 gh、Git HTTPS credential 与 npm auth 检查。
|
|
89
|
+
- CLI 入口缺失:确认 `$RELEASE_SKILL_ENTRY` 存在;缺失时重新安装插件。
|
|
90
|
+
- 项目配置缺失:进入 `release-setup` 的只读发现,不直接生成或覆盖 README/配置。
|
|
91
|
+
- assess 失败:运行 `release-assess` 的离线诊断并按错误码处理。
|
|
92
|
+
- `PARTIAL` 或远端冲突:进入 `release-reconcile`,保留已经成功的 checkpoint。
|
|
93
|
+
- 文档、Cursor、宿主更新或本机收尾失败:转到上节对应专用 Skill,不在 help 中猜测恢复步骤。
|
|
150
94
|
|
|
151
95
|
## 后续引导
|
|
152
96
|
|
|
153
|
-
|
|
97
|
+
本地就绪后运行 `release-assess`;需要生产发布时,再确认 npm、gh、认证、冻结计划和有效批准。
|
|
@@ -57,7 +57,7 @@ ship state;hook approval 缺失、错误或过期时,在 hook 执行前失
|
|
|
57
57
|
2. 使用插件根相对路径运行 CLI;命令调用本身即授权执行已配置的 verification gate 和 smoke process
|
|
58
58
|
3. 检查 exit code 和结构化状态:`VERIFIED`(全部通过)/ 失败(具体错误)
|
|
59
59
|
4. 只有 `VERIFIED` 才是发布 happy end
|
|
60
|
-
5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish
|
|
60
|
+
5. 达到 `VERIFIED` 后先检查计划是否声明 `postVerify` hook:直接收尾使用独立的 `postverify --plan --approval --run --hook-approval`,由该命令产生 `DISTRIBUTED` postVerify run;若仍由持久化 ship state 承担编排,则使用 `ship --hook-approval` 完成同一阶段,再把最终 run 路径交给 `release-finish`。没有 postVerify hook 时,把当前 verify run 路径交给 `release-finish`。随后执行返回的 `post-release --finish` 命令,按 `nextActions` 补齐分支决定、宿主加载与真实 setup 结果;发布策略已包含分支动作时略过合并询问
|
|
61
61
|
|
|
62
62
|
## 确定性脚本调用
|
|
63
63
|
|
|
@@ -84,7 +84,7 @@ node "$RELEASE_SKILL_ENTRY" postverify --root <path> \
|
|
|
84
84
|
|
|
85
85
|
## 发布后收尾
|
|
86
86
|
|
|
87
|
-
`VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish`
|
|
87
|
+
`VERIFIED` 不代表要自动修改开发分支或本机宿主。进入 `release-finish` 后,只有用户明确同意,才执行对应的本地动作。`post-release --finish` 退出 0 需要所有适用步骤完成或明确跳过;单纯的宿主 `UPDATED` 不代表新入口已加载,也不代表 setup 已执行。本机插件更新失败不会改变发布终态。
|
|
88
88
|
核心 prepare、publish、verify 流程跨平台;WorkBuddy 的本机收尾探测和更新仅支持 macOS。
|
|
89
89
|
|
|
90
90
|
## 烟雾测试
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"additionalProperties": false,
|
|
26
26
|
"required": ["driverId", "authStrategy", "credentialMutation"],
|
|
27
27
|
"properties": {
|
|
28
|
-
"driverId": { "enum": ["kimi-code-print-v1", "workbuddy-codebuddy-print-v1", "codebuddy-print-v1", "claude-code-print-v1", "codex-exec-v1", "qodercli-print-v1"] },
|
|
28
|
+
"driverId": { "enum": ["kimi-code-print-v1", "workbuddy-codebuddy-print-v1", "codebuddy-print-v1", "claude-code-print-v1", "codex-exec-v1", "qodercli-print-v1", "cursor-agent-print-v1"] },
|
|
29
29
|
"authStrategy": { "const": "existing-user-state" },
|
|
30
30
|
"credentialMutation": { "const": "host-managed" }
|
|
31
31
|
}
|
|
@@ -109,7 +109,14 @@
|
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
|
-
"if": { "properties": { "hostId": { "
|
|
112
|
+
"if": { "properties": { "hostId": { "const": "cursor" } }, "required": ["hostId"] },
|
|
113
|
+
"then": {
|
|
114
|
+
"required": ["verification"],
|
|
115
|
+
"properties": { "verification": { "type": "object", "properties": { "driverId": { "const": "cursor-agent-print-v1" } } } }
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"if": { "properties": { "hostId": { "enum": ["kimi-code", "workbuddy", "codebuddy", "claude", "codex", "qoder", "cursor"] } }, "required": ["hostId"] },
|
|
113
120
|
"else": { "properties": { "verification": false } }
|
|
114
121
|
},
|
|
115
122
|
{
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-skill",
|
|
3
|
+
"version": "0.9.19",
|
|
4
|
+
"description": "Safe preparation and frozen GitHub/npm production publishing with full happy end verification",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "广州市风荷科技有限公司"
|
|
7
|
+
},
|
|
8
|
+
"license": "Apache-2.0",
|
|
9
|
+
"skills": "./skills/"
|
|
10
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "skill-family.contracts.consumer-contract-vectors",
|
|
4
|
+
"foundationVersion": "0.21.0",
|
|
5
|
+
"sets": [
|
|
6
|
+
{
|
|
7
|
+
"capabilityId": "foundation.contracts.object-validation",
|
|
8
|
+
"vectorSetId": "foundation.contracts.object-validation.consumer-v1",
|
|
9
|
+
"contractId": "skill-family-contracts:validateDocument",
|
|
10
|
+
"strategy": "real-pure",
|
|
11
|
+
"vectors": [
|
|
12
|
+
{
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
15
|
+
"vectorId": "foundation.contracts.object-validation.consumer-v1.indeterminate",
|
|
16
|
+
"vectorSetId": "foundation.contracts.object-validation.consumer-v1",
|
|
17
|
+
"capabilityId": "foundation.contracts.object-validation",
|
|
18
|
+
"foundationVersion": "0.21.0",
|
|
19
|
+
"contractId": "skill-family-contracts:validateDocument",
|
|
20
|
+
"caseClass": "indeterminate",
|
|
21
|
+
"strategy": "real-pure",
|
|
22
|
+
"request": {
|
|
23
|
+
"document": { "schemaVersion": 1, "kind": "skill-family.project-manifest" },
|
|
24
|
+
"options": { "schemaId": "https://contracts.skill-family.example/v1/project-manifest.json", "dialect": "2020-12", "policy": "strict" }
|
|
25
|
+
},
|
|
26
|
+
"expected": { "outcome": "indeterminate", "allowedStates": ["return", "throw"], "failClosed": true }
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"schemaVersion": 1,
|
|
30
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
31
|
+
"vectorId": "foundation.contracts.object-validation.consumer-v1.negative",
|
|
32
|
+
"vectorSetId": "foundation.contracts.object-validation.consumer-v1",
|
|
33
|
+
"capabilityId": "foundation.contracts.object-validation",
|
|
34
|
+
"foundationVersion": "0.21.0",
|
|
35
|
+
"contractId": "skill-family-contracts:validateDocument",
|
|
36
|
+
"caseClass": "negative",
|
|
37
|
+
"strategy": "real-pure",
|
|
38
|
+
"request": {
|
|
39
|
+
"document": { "schemaVersion": 1, "kind": "skill-family.project-manifest", "project": { "id": "demo-project", "name": "Demo Project" }, "contracts": { "version": "not-a-version", "profile": "generic" } },
|
|
40
|
+
"options": { "schemaId": "https://contracts.skill-family.example/v1/project-manifest.json", "dialect": "2020-12", "policy": "strict" }
|
|
41
|
+
},
|
|
42
|
+
"expected": { "outcome": "return", "value": { "valid": false, "errorCode": "SFC1001", "errors": [{ "keyword": "pattern", "instancePath": "/contracts/version", "schemaPath": "#/properties/contracts/properties/version/pattern", "message": "must match pattern \"^[0-9]+\\.[0-9]+\\.[0-9]+$\"", "params": { "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" } }], "data": { "schemaVersion": 1, "kind": "skill-family.project-manifest", "project": { "id": "demo-project", "name": "Demo Project" }, "contracts": { "version": "not-a-version", "profile": "generic" } } } }
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"schemaVersion": 1,
|
|
46
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
47
|
+
"vectorId": "foundation.contracts.object-validation.consumer-v1.positive",
|
|
48
|
+
"vectorSetId": "foundation.contracts.object-validation.consumer-v1",
|
|
49
|
+
"capabilityId": "foundation.contracts.object-validation",
|
|
50
|
+
"foundationVersion": "0.21.0",
|
|
51
|
+
"contractId": "skill-family-contracts:validateDocument",
|
|
52
|
+
"caseClass": "positive",
|
|
53
|
+
"strategy": "real-pure",
|
|
54
|
+
"request": {
|
|
55
|
+
"document": { "schemaVersion": 1, "kind": "skill-family.project-manifest", "project": { "id": "demo-project", "name": "Demo Project" }, "contracts": { "version": "1.0.0", "profile": "generic" } },
|
|
56
|
+
"options": { "schemaId": "https://contracts.skill-family.example/v1/project-manifest.json", "dialect": "2020-12", "policy": "strict" }
|
|
57
|
+
},
|
|
58
|
+
"expected": { "outcome": "return", "value": { "valid": true, "errorCode": null, "errors": [], "data": { "schemaVersion": 1, "kind": "skill-family.project-manifest", "project": { "id": "demo-project", "name": "Demo Project" }, "contracts": { "version": "1.0.0", "profile": "generic" } } } }
|
|
59
|
+
}
|
|
60
|
+
]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"capabilityId": "foundation.harness.atomic-write",
|
|
64
|
+
"vectorSetId": "foundation.harness.atomic-write.consumer-v1",
|
|
65
|
+
"contractId": "skill-family-harness-node:writeFileAtomic",
|
|
66
|
+
"strategy": "official-fake",
|
|
67
|
+
"vectors": [
|
|
68
|
+
{
|
|
69
|
+
"schemaVersion": 1,
|
|
70
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
71
|
+
"vectorId": "foundation.harness.atomic-write.consumer-v1.indeterminate",
|
|
72
|
+
"vectorSetId": "foundation.harness.atomic-write.consumer-v1",
|
|
73
|
+
"capabilityId": "foundation.harness.atomic-write",
|
|
74
|
+
"foundationVersion": "0.21.0",
|
|
75
|
+
"contractId": "skill-family-harness-node:writeFileAtomic",
|
|
76
|
+
"caseClass": "indeterminate",
|
|
77
|
+
"strategy": "official-fake",
|
|
78
|
+
"request": { "root": { "runtimeBinding": "atomic-write-canonical-root" }, "relPath": "records/item.json", "data": "fixture-data", "options": { "mode": 420 } },
|
|
79
|
+
"expected": { "outcome": "indeterminate", "allowedStates": ["return", "throw"], "failClosed": true }
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"schemaVersion": 1,
|
|
83
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
84
|
+
"vectorId": "foundation.harness.atomic-write.consumer-v1.negative",
|
|
85
|
+
"vectorSetId": "foundation.harness.atomic-write.consumer-v1",
|
|
86
|
+
"capabilityId": "foundation.harness.atomic-write",
|
|
87
|
+
"foundationVersion": "0.21.0",
|
|
88
|
+
"contractId": "skill-family-harness-node:writeFileAtomic",
|
|
89
|
+
"caseClass": "negative",
|
|
90
|
+
"strategy": "official-fake",
|
|
91
|
+
"request": { "root": { "runtimeBinding": "atomic-write-canonical-root" }, "relPath": "../outside.json", "data": "fixture-data", "options": { "mode": 420 } },
|
|
92
|
+
"expected": { "outcome": "throw", "errorCode": "SFC2004", "errorKind": "path-traversal" }
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"schemaVersion": 1,
|
|
96
|
+
"kind": "skill-family.consumer-contract-vector",
|
|
97
|
+
"vectorId": "foundation.harness.atomic-write.consumer-v1.positive",
|
|
98
|
+
"vectorSetId": "foundation.harness.atomic-write.consumer-v1",
|
|
99
|
+
"capabilityId": "foundation.harness.atomic-write",
|
|
100
|
+
"foundationVersion": "0.21.0",
|
|
101
|
+
"contractId": "skill-family-harness-node:writeFileAtomic",
|
|
102
|
+
"caseClass": "positive",
|
|
103
|
+
"strategy": "official-fake",
|
|
104
|
+
"request": { "root": { "runtimeBinding": "atomic-write-canonical-root" }, "relPath": "records/item.json", "data": "fixture-data", "options": { "mode": 420 } },
|
|
105
|
+
"expected": { "outcome": "return", "valueRelation": "atomic-write-contained-absolute-target" }
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "skill-family.contracts.error-codes",
|
|
4
|
+
"contractsVersion": "1.18.0",
|
|
5
|
+
"policy": {
|
|
6
|
+
"format": "^SFC[0-9]{4}$",
|
|
7
|
+
"ranges": [
|
|
8
|
+
{
|
|
9
|
+
"prefix": "SFC1",
|
|
10
|
+
"category": "contract",
|
|
11
|
+
"note": "Contracts authority errors: schemas, registry, dialects, rules, fixtures."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"prefix": "SFC2",
|
|
15
|
+
"category": "kernel",
|
|
16
|
+
"note": "Kernel protocol operation errors."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"prefix": "SFC3",
|
|
20
|
+
"category": "report",
|
|
21
|
+
"note": "Report contract errors: digest binding, mandatory elements, fact drift. Style findings are never coded here; they are advisory output of the report check, not errors."
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"stability": "Codes are append-only. A frozen code is never reused for a different meaning; a deprecated code stays reserved. New codes require a contracts change."
|
|
25
|
+
},
|
|
26
|
+
"codes": [
|
|
27
|
+
{
|
|
28
|
+
"code": "SFC1001",
|
|
29
|
+
"name": "SCHEMA_VALIDATION_FAILED",
|
|
30
|
+
"category": "contract",
|
|
31
|
+
"stableSince": "1.0.0",
|
|
32
|
+
"meaning": "A document failed validation against its registered schema under the declared dialect and policy."
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"code": "SFC1002",
|
|
36
|
+
"name": "UNKNOWN_SCHEMA_ID",
|
|
37
|
+
"category": "contract",
|
|
38
|
+
"stableSince": "1.0.0",
|
|
39
|
+
"meaning": "The referenced $id is not present in the schema registry."
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"code": "SFC1003",
|
|
43
|
+
"name": "DUPLICATE_SCHEMA_ID",
|
|
44
|
+
"category": "contract",
|
|
45
|
+
"stableSince": "1.0.0",
|
|
46
|
+
"meaning": "Two schema registrations share the same $id; the registration is mechanically rejected."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"code": "SFC1004",
|
|
50
|
+
"name": "DUPLICATE_PROTOCOL_NAME",
|
|
51
|
+
"category": "contract",
|
|
52
|
+
"stableSince": "1.0.0",
|
|
53
|
+
"meaning": "Two protocol registrations share the same name and version; the registration is mechanically rejected."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"code": "SFC1005",
|
|
57
|
+
"name": "UNRESOLVED_REF",
|
|
58
|
+
"category": "contract",
|
|
59
|
+
"stableSince": "1.0.0",
|
|
60
|
+
"meaning": "A $ref target cannot be resolved within the registered schema set."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"code": "SFC1006",
|
|
64
|
+
"name": "UNSUPPORTED_DIALECT",
|
|
65
|
+
"category": "contract",
|
|
66
|
+
"stableSince": "1.0.0",
|
|
67
|
+
"meaning": "The declared JSON Schema dialect is not in the frozen supported dialect set."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"code": "SFC1007",
|
|
71
|
+
"name": "UNKNOWN_CHECK_TYPE",
|
|
72
|
+
"category": "contract",
|
|
73
|
+
"stableSince": "1.0.0",
|
|
74
|
+
"meaning": "A rule uses a check type outside the finite set of nine."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"code": "SFC1008",
|
|
78
|
+
"name": "RULE_BUDGET_EXCEEDED",
|
|
79
|
+
"category": "contract",
|
|
80
|
+
"stableSince": "1.0.0",
|
|
81
|
+
"meaning": "The mandatory rule count exceeds the first-version budget or the absolute cap."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"code": "SFC1009",
|
|
85
|
+
"name": "UNKNOWN_ERROR_CODE",
|
|
86
|
+
"category": "contract",
|
|
87
|
+
"stableSince": "1.0.0",
|
|
88
|
+
"meaning": "A fixture expectation references an error code that is not in this frozen registry."
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"code": "SFC1010",
|
|
92
|
+
"name": "FIXTURE_EXPECTATION_MISMATCH",
|
|
93
|
+
"category": "contract",
|
|
94
|
+
"stableSince": "1.0.0",
|
|
95
|
+
"meaning": "A fixture did not behave as declared: a valid-expecting fixture failed, or an invalid-expecting fixture did not fail with the declared stable code."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"code": "SFC1011",
|
|
99
|
+
"name": "UNKNOWN_PROTOCOL",
|
|
100
|
+
"category": "contract",
|
|
101
|
+
"stableSince": "1.0.0",
|
|
102
|
+
"meaning": "A request references a protocol name/version that is not registered."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"code": "SFC1012",
|
|
106
|
+
"name": "SCHEMA_COMPILE_FAILED",
|
|
107
|
+
"category": "contract",
|
|
108
|
+
"stableSince": "1.0.0",
|
|
109
|
+
"meaning": "A registered schema does not compile under its declared dialect (the schema document itself is invalid)."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"code": "SFC1013",
|
|
113
|
+
"name": "CONSUMER_CONTRACT_VERSION_MISMATCH",
|
|
114
|
+
"category": "contract",
|
|
115
|
+
"stableSince": "1.14.0",
|
|
116
|
+
"meaning": "A consumer contract vector, capability identity, vector set, or Foundation package version does not match the installed Contracts package."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"code": "SFC2002",
|
|
120
|
+
"name": "UNKNOWN_OPERATION",
|
|
121
|
+
"category": "kernel",
|
|
122
|
+
"stableSince": "1.0.0",
|
|
123
|
+
"meaning": "The requested operation name is not in the frozen operation vocabulary of the referenced protocol version."
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"code": "SFC2003",
|
|
127
|
+
"name": "INVALID_PARAMS",
|
|
128
|
+
"category": "kernel",
|
|
129
|
+
"stableSince": "1.0.0",
|
|
130
|
+
"meaning": "Operation params do not satisfy the frozen params contract of the requested operation."
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"code": "SFC2004",
|
|
134
|
+
"name": "EXECUTION_FAILED",
|
|
135
|
+
"category": "kernel",
|
|
136
|
+
"stableSince": "1.0.0",
|
|
137
|
+
"meaning": "The mechanism runtime failed while executing a well-formed operation; details carry the mechanism evidence. Demonstrable only by a mechanism runtime, not by static contracts checks."
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"code": "SFC3001",
|
|
141
|
+
"name": "REPORT_DIGEST_MISMATCH",
|
|
142
|
+
"category": "report",
|
|
143
|
+
"stableSince": "1.2.0",
|
|
144
|
+
"meaning": "A report binding digest (model, result, or report digest) does not match the recomputed sha256 digest, or the report is not the canonical render of its model; the binding is stale or tampered and is never trusted."
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"code": "SFC3002",
|
|
148
|
+
"name": "REPORT_ELEMENT_MISSING",
|
|
149
|
+
"category": "report",
|
|
150
|
+
"stableSince": "1.2.0",
|
|
151
|
+
"meaning": "A mandatory report element is absent, empty where it must not be, or declared in an unsupported form: the conclusion, non-empty evidence, risks/next-action sections, a supported locale, or a coded outcome for failed/blocked runs. No half report is issued for a missing element."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"code": "SFC3003",
|
|
155
|
+
"name": "REPORT_FACT_DRIFT",
|
|
156
|
+
"category": "report",
|
|
157
|
+
"stableSince": "1.2.0",
|
|
158
|
+
"meaning": "A report model misstates the bound operation result's terminal state/errors, or rendered report bytes diverge from the deterministic re-render of the bound report model: fact fields rewritten, sections deleted, duplicated, or injected."
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|