skill-family-engineering-kit 0.9.0 → 0.11.0

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/CHANGELOG.zh-CN.md +43 -0
  3. package/README.md +27 -17
  4. package/README.zh-CN.md +27 -17
  5. package/candidate/adoption-mechanisms.mjs +1 -1
  6. package/candidate/profile-bundle.mjs +45 -14
  7. package/data/hosts/claude/host-descriptor.json +40 -0
  8. package/data/hosts/codebuddy/host-descriptor.json +21 -0
  9. package/data/hosts/codex/host-descriptor.json +40 -0
  10. package/data/hosts/deepseek-harness/host-descriptor.json +23 -0
  11. package/data/hosts/kimi-code/host-descriptor.json +36 -0
  12. package/data/hosts/qoder/host-descriptor.json +12 -0
  13. package/data/hosts/registry.json +13 -0
  14. package/data/hosts/workbuddy/host-descriptor.json +34 -0
  15. package/docs/agents/capability-catalog.en.json +59 -51
  16. package/docs/agents/capability-catalog.json +81 -24
  17. package/docs/agents/capability-catalog.schema.json +19 -3
  18. package/docs/agents/capability-catalog.zh-CN.json +59 -51
  19. package/docs/agents/index.html +4 -1
  20. package/docs/architecture/index.html +36 -5
  21. package/docs/en/agents/index.html +1 -0
  22. package/docs/en/architecture/index.html +30 -5
  23. package/docs/en/help/index.html +2 -1
  24. package/docs/en/recipes/adapter-text-closure/index.html +4 -3
  25. package/docs/en/recipes/host-profile-integration/index.html +32 -12
  26. package/docs/en/reference/compatibility/index.html +129 -124
  27. package/docs/en/reference/failure-and-side-effect-matrix/index.html +23 -3
  28. package/docs/help/index.html +2 -1
  29. package/docs/integration/audit/index.html +3 -1
  30. package/docs/integration/audit/version-compatibility/index.html +4 -2
  31. package/docs/public/status/index.html +3 -3
  32. package/docs/recipes/adapter-text-closure/index.html +4 -3
  33. package/docs/recipes/host-profile-integration/index.html +32 -12
  34. package/docs/reference/api/contracts/index.html +120 -4
  35. package/docs/reference/api/engineering-kit/index.html +41 -22
  36. package/docs/reference/api/harness/index.html +98 -8
  37. package/docs/reference/api/index.html +1 -1
  38. package/docs/reference/compatibility/index.html +138 -124
  39. package/docs/reference/failure-and-side-effect-matrix/index.html +4 -4
  40. package/docs/search/search_index.json +1 -1
  41. package/package.json +9 -6
  42. package/profile-spi/extension-spi.json +1 -1
  43. package/release-notes/0.10.0.yaml +25 -0
  44. package/release-notes/0.11.0.yaml +23 -0
  45. package/src/host-profiles.mjs +75 -15
  46. package/src/host-verification-drivers.mjs +51 -0
  47. package/src/host-verification.mjs +662 -0
  48. package/src/host.mjs +115 -14
  49. package/src/index.mjs +10 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.11.0 locale=en baseline=sha256:108e261312b0838af53184710453fe19f369a9ea10ac5d1fc3e829e919d0f99d -->
4
+ ## [0.11.0] - 2026-08-25
5
+
6
+ Engineering Kit 0.11.0 adds a candidate real-host verification API and ships the registered host Profile closure.
7
+
8
+ ### Added
9
+
10
+ - Adds runHostVerification for one fresh, bounded Kimi or WorkBuddy invocation reusing the caller's existing login state, and verifyHostVerificationBindings for pure result composition.
11
+ - Recomputes closure and stream digests from raw bytes and keeps private evidence outside the public result.
12
+ - Ships the registered host Profile closure through bundledHostProfilesRoot().
13
+
14
+ ### Changed
15
+
16
+ - Manual Profiles retain their lifecycle restrictions; host verification does not grant build, plan, apply, install, update, uninstall, or rollback support.
17
+
18
+ ### Upgrade Notes
19
+
20
+ The 0.11.0 host-verification API is candidate-only. It does not own domain PASS/FAIL, release state, or automatic login, and it claims no authentication isolation, unchanged credentials, fixed model identity, or disabled host tool capability. executableSha256 is a point-in-time preflight observation, not proof of the executed image; the caller exclusively controls that namespace. Foundation retains session directories, and the caller cleans its outer temporaryRoot after inspection.
21
+ <!-- release-skill:changelog:end version=0.11.0 locale=en -->
22
+
23
+
24
+ <!-- release-skill:changelog:start version=0.10.0 locale=en baseline=sha256:fc575df3b8c5f7a0d819090ce9637f8cdc654c277892fe3f14149d5cc1746b24 -->
25
+ ## [0.10.0] - 2026-08-24
26
+
27
+ Engineering Kit 0.10.0 adds responsibility-specific canonical entrypoints, a bounded host lifecycle slice, and a thin read-only peer adapter verification entry.
28
+
29
+ ### Added
30
+
31
+ - Adds skill-family-engineering-kit/quickstart-profile, /adoption, and /skill-naming canonical exports.
32
+ - Adds finite Profile alias resolution, independent manual probe facts for non-driver hosts, and explicit local install/update plans; uninstall remains a manual-recovery refusal.
33
+ - Adds `verifyHostPeers` as a thin wrapper over Harness peer verification; the Kit retains four top-level commands and does not write peer directories.
34
+
35
+ ### Changed
36
+
37
+ - Keeps the historical Quickstart candidate export as a same-source migration alias and preserves the four-command Kit boundary.
38
+ - Compiles one canonical Quickstart and batch Schema set while mapping historical and canonical IDs to the same standalone validators.
39
+
40
+ ### Upgrade Notes
41
+
42
+ Update all three exact pins to 0.10.0 and migrate imports and Schema IDs once to canonical identities. A later maturity-label promotion adds no separate Bundle rebuild requirement; package-identity, source-digest, and provenance changes continue to follow the existing projection contract.
43
+ <!-- release-skill:changelog:end version=0.10.0 locale=en -->
44
+
45
+
3
46
  <!-- release-skill:changelog:start version=0.9.0 locale=en baseline=sha256:6419bbdc8d469e6dd7f9fda5995e5465cc6bf98724371f9f4aa9293a7e0d9f14 -->
4
47
  ## [0.9.0] - 2026-08-24
5
48
 
@@ -1,5 +1,48 @@
1
1
  # 变更日志
2
2
 
3
+ <!-- release-skill:changelog:start version=0.11.0 locale=zh-CN baseline=sha256:5d5852f3fa3c970b4d277600a0886d533e3c883fc72ce144a85a071d1e270771 -->
4
+ ## [0.11.0] - 2026-08-25
5
+
6
+ Engineering Kit 0.11.0 增加候选真实宿主验证 API,并随包携带已登记宿主 Profile 闭包。
7
+
8
+ ### 新增
9
+
10
+ - 新增 runHostVerification,执行一次 fresh、受约束的 Kimi 或 WorkBuddy 调用(复用调用方现有登录态);新增 verifyHostVerificationBindings,组合结果时只做纯校验。
11
+ - 从原始字节重算闭包和流摘要,并把私有证据留在公共结果之外。
12
+ - 通过 bundledHostProfilesRoot() 携带已登记宿主 Profile 闭包。
13
+
14
+ ### 变更
15
+
16
+ - manual Profile 继续保留生命周期限制;宿主验证不会授予 build、plan、apply、install、update、uninstall 或 rollback 能力。
17
+
18
+ ### 升级说明
19
+
20
+ 0.11.0 宿主验证 API 仍为候选能力,不拥有领域 PASS/FAIL、发布状态或自动登录;不宣称认证状态隔离、凭证未变化、模型身份固定或宿主工具能力已关闭。executableSha256 只是启动前的点时观察,不证明实际执行映像;调用方独占对应命名空间。Foundation 保留 session 目录,调用方检查后清理外层 temporaryRoot。
21
+ <!-- release-skill:changelog:end version=0.11.0 locale=zh-CN -->
22
+
23
+
24
+ <!-- release-skill:changelog:start version=0.10.0 locale=zh-CN baseline=sha256:45180b7a3b60853842cbe3a379da7ff95f1bd1fe832192368ec2c92a813279dc -->
25
+ ## [0.10.0] - 2026-08-24
26
+
27
+ Engineering Kit 0.10.0 为历史 candidate 提供职责明确的规范入口,增加受限的跨平台宿主身份、探针和本地生命周期能力,并提供同级适配器只读验证薄入口。
28
+
29
+ ### 新增
30
+
31
+ - 新增 skill-family-engineering-kit/quickstart-profile、/adoption 与 /skill-naming 规范导出。
32
+ - 增加有限 Profile alias 解析、非 driver 宿主的独立手动 probe fact 和显式本地 install/update 计划;uninstall 仍要求人工恢复。
33
+ - 新增 `verifyHostPeers`,只包装 Harness 的 peer 验证,不增加第五个顶层命令,也不写入 peer 目录。
34
+
35
+ ### 变更
36
+
37
+ - 历史 Quickstart candidate 导出继续作为同源迁移别名,Kit 四命令边界不变。
38
+ - 只编译一套规范 Quickstart 与批量校验 Schema;历史和规范 ID 指向同一 standalone validator。
39
+
40
+ ### 升级说明
41
+
42
+ 消费者应把三个包的精确 pin 更新到 0.10.0,并把导入与 Schema ID 一次迁移到规范身份。以后仅晋升成熟度标签时不另加 Bundle 重建要求;包身份、来源摘要或 provenance 变化仍按既有投影合同处理。
43
+ <!-- release-skill:changelog:end version=0.10.0 locale=zh-CN -->
44
+
45
+
3
46
  <!-- release-skill:changelog:start version=0.9.0 locale=zh-CN baseline=sha256:c84db7b53f562cbdad947ccf8fcc23209f18137100270b2691bab7d9a7ad623c -->
4
47
  ## [0.9.0] - 2026-08-24
5
48
 
package/README.md CHANGED
@@ -4,27 +4,28 @@
4
4
 
5
5
  # skill-family-engineering-kit
6
6
 
7
- <!-- release-skill:release-version: 0.9.0 -->
7
+ <!-- release-skill:release-version: 0.11.0 -->
8
8
 
9
9
  An engineering toolkit used in development and CI. There are **exactly four** top-level commands, and no fifth:
10
10
 
11
11
  <!-- release-skill:managed:start id=latest-release -->
12
- **0.9.0** (2026-08-24)
12
+ **0.11.0** (2026-08-25)
13
13
 
14
- Engineering Kit 0.9.0 projects the stable filesystem schemas, bound-read Harness closure, and candidate ordered batch validation into the existing Quickstart Bundle.
14
+ Engineering Kit 0.11.0 adds a candidate real-host verification API and ships the registered host Profile closure.
15
15
 
16
16
  **Added**
17
17
 
18
- - Projects the three stable filesystem schemas and two candidate batch schemas from Contracts authorities.
19
- - Projects the stable bound-read entry and its exact native prebuild closure without adding a Kit command.
18
+ - Adds runHostVerification for one fresh, bounded Kimi or WorkBuddy invocation reusing the caller's existing login state, and verifyHostVerificationBindings for pure result composition.
19
+ - Recomputes closure and stream digests from raw bytes and keeps private evidence outside the public result.
20
+ - Ships the registered host Profile closure through bundledHostProfilesRoot().
20
21
 
21
22
  **Changed**
22
23
 
23
- - Keeps the four top-level Kit commands and Profile SPI candidate boundary unchanged.
24
+ - Manual Profiles retain their lifecycle restrictions; host verification does not grant build, plan, apply, install, update, uninstall, or rollback support.
24
25
 
25
26
  **Upgrade Notes**
26
27
 
27
- Pin all three Foundation packages to exactly 0.9.0 and rebuild managed Bundles. Batch validation is available only through the existing candidate Bundle and mechanisms CLI.
28
+ The 0.11.0 host-verification API is candidate-only. It does not own domain PASS/FAIL, release state, or automatic login, and it claims no authentication isolation, unchanged credentials, fixed model identity, or disabled host tool capability. executableSha256 is a point-in-time preflight observation, not proof of the executed image; the caller exclusively controls that namespace. Foundation retains session directories, and the caller cleans its outer temporaryRoot after inspection.
28
29
  <!-- release-skill:managed:end id=latest-release -->
29
30
 
30
31
  | Command | Purpose | Side effects |
@@ -45,7 +46,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
45
46
  ## Installation and Minimal Example
46
47
 
47
48
  ```sh
48
- npm install --save-dev skill-family-engineering-kit@0.9.0
49
+ npm install --save-dev skill-family-engineering-kit@0.11.0
49
50
  npm exec -- skill-family-kit --help
50
51
  npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
51
52
  npm exec -- skill-family-kit adopt-plan --root <repo>
@@ -53,7 +54,7 @@ npm exec -- skill-family-kit projection --root <repo>
53
54
  npm exec -- skill-family-kit check --root <repo>
54
55
  ```
55
56
 
56
- The four commands above cover skeleton generation, read-only inventory, managed projection, and diagnostics respectively; a zero-install form is available via `npm exec --package=skill-family-engineering-kit@0.9.0 -- skill-family-kit --help`.
57
+ The four commands above cover skeleton generation, read-only inventory, managed projection, and diagnostics respectively; a zero-install form is available via `npm exec --package=skill-family-engineering-kit@0.11.0 -- skill-family-kit --help`.
57
58
 
58
59
  ### Public Profile SPI
59
60
 
@@ -63,7 +64,7 @@ The package carries three SPI JSON resources and the Contracts canonical `profil
63
64
 
64
65
  `verifyProfile({ profileRoot })` is read-only and data-only for Profile descriptors. `verifyProjectProfile({ projectRoot, profileRelPath? })` is the corresponding entry for a project root declaration. Both refuse invalid input with stable result codes, never execute Profile-provided files, and leave Profile domain meaning to the caller.
65
66
 
66
- When a provider Profile descriptor moves from Foundation 0.8.4 and Contracts 1.8.0 to Foundation 0.9.0, update its `base.contractsVersion` field mechanically to `1.9.0`. The four Kit commands and Profile SPI retain their existing shapes.
67
+ When a provider Profile descriptor moves from Foundation 0.9.0 and Contracts 1.9.0 to Foundation 0.10.0, update its `base.contractsVersion` field mechanically to `1.10.0`. The four Kit commands and Profile SPI retain their existing shapes.
67
68
 
68
69
  ### Report sub-action
69
70
 
@@ -83,7 +84,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
83
84
  import {
84
85
  buildQuickstartProfileProjection,
85
86
  QUICKSTART_PROFILE_TARGET_PREFIX,
86
- } from "skill-family-engineering-kit/candidate/quickstart-profile";
87
+ } from "skill-family-engineering-kit/quickstart-profile";
87
88
 
88
89
  const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
89
90
  if (!authority.valid) throw new Error(authority.errorCode);
@@ -96,7 +97,7 @@ const projection = await buildQuickstartProfileProjection({
96
97
 
97
98
  The caller obtains `receipt` and `actualSubjects` outside Kit. Contracts validates their exact binding before the existing builder receives `sourceRepository` and `sourceBaseCommit`; Kit does not parse release plans or discover source authority. The generated Bundle selects standalone validators by schema `$id` and runs offline without Foundation packages, `node_modules`, or runtime Ajv. Its provenance binds Foundation sources, consumer schemas, payload bytes, tool versions, and the licenses of code that actually enters the Bundle.
98
99
 
99
- Pass the returned `manifest` to the stable `runProjection` API; the helper does not write files or add a fifth top-level command. This subpath is public but **not stable**. Pin exactly `0.4.0` for v2; integrations that still require the v1 dependency-closure Bundle must stay pinned to exactly `0.2.1`.
100
+ Pass the returned `manifest` to the stable `runProjection` API; the helper does not write files or add a fifth top-level command. The capability remains **candidate**, so pin all three packages exactly. Version 0.10.0 adds the canonical path above; the historical `/candidate/quickstart-profile` path remains a same-source migration alias. Adoption and skill naming now also have the canonical `skill-family-engineering-kit/adoption` and `skill-family-engineering-kit/skill-naming` paths. A later stable promotion will not require a second migration. Integrations that still require the v1 dependency-closure Bundle must stay pinned to exactly `0.2.1`.
100
101
 
101
102
  ### Host sub-action
102
103
 
@@ -107,7 +108,15 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
107
108
  npm exec -- skill-family-kit adopt-plan host-plan --root <workspace> --host <id> --path-category <id> --build-manifest <relpath> --probe-facts <relpath> --hosts-root <dir>
108
109
  ```
109
110
 
110
- The Profile must be provided explicitly; Kit does not bind a specific host by default. Probe starts no process by default; only when both `--allow-host-spawn --host-executable <absolute-path>` are given is the frozen version vector executed. `host-apply` is stably rejected; install, update, or uninstall is not implemented. Codex's skill target path is fixed at `.agents/skills`; other supported hosts are offered only per registered Profile; Qoder is `unsupported`, this version only references its structure, provides no full driver, and does not claim to have run in Qoder. adapter source only accepts declared text closures; binary projection is not supported; see this version's CHANGELOG and registered Profile for the precise host support matrix.
111
+ The Profile must be provided explicitly; Kit does not bind a specific host by default. Canonical host IDs may resolve only aliases declared by the finite registered Profile set. Probe starts no process by default; only when both `--allow-host-spawn --host-executable <absolute-path>` are given is the frozen version vector executed. Local install and update use an explicit authorization reference plus the existing contained publication primitives; uninstall is rejected with `manual-recovery-required` because Foundation has no safe bound deletion primitive. Two registered hosts have trusted version drivers; Kimi Code, WorkBuddy, CodeBuddy, and DeepSeek Harness expose independent manual facts; Qoder is `unsupported`. Adapter source only accepts declared text closures; binary projection is not supported; see the [host capability matrix](../../docs/reference/host-capability-matrix.md) and registered Profiles.
112
+
113
+ ### Candidate real-host verification library API
114
+
115
+ `runHostVerification({ request, bindings, hostsRoot })` and `verifyHostVerificationBindings({ results, expectedCommon, expectedRequestDigestByHost })` are library APIs, not a fifth Kit command. The first runs one bounded candidate verification against caller-bound roots using an admitted built-in driver (`kimi-code-print-v1` or `workbuddy-codebuddy-print-v1`, both bound to `existing-user-state + host-managed`) and returns a Contracts-validated, redacted four-state result. The second is pure and combines only `observed` results with the exact common fields and per-host request digest expected by the caller.
116
+
117
+ The API keeps consumer workload, domain output checks, domain PASS/FAIL, release freshness, and release state outside Foundation. The caller supplies a canonical `existingUserStateRoot` that is projected into the child environment but never read, digested, modified or cleaned by Foundation; it does not grant manual Profiles any build, plan, apply, install, update, or uninstall capability. The Kimi and WorkBuddy real-host publication gates remain a hard publication requirement for 0.11.0.
118
+
119
+ `executableSha256` binds only the bytes observed by the strict preflight read; the actual process is still spawned by pathname, so the caller must exclusively control the executable namespace through probe and invocation. Foundation retains the call's `session-*` directory and never deletes it by pathname. After inspection, the caller cleans its exclusively owned outer `temporaryRoot`.
111
120
 
112
121
  ## Typical Use Cases
113
122
 
@@ -169,7 +178,7 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
169
178
  ### Do not use when
170
179
 
171
180
  - You need auto-fix (`check` does not fix), or auto-migration (`adopt-plan` writes no files).
172
- - You need host apply/install/update/uninstall or a full Qoder driver (explicitly unsupported).
181
+ - You need remote host publication, automatic trust confirmation, uninstall deletion, or a full Qoder driver (explicitly unsupported).
173
182
  - You need a stable Quickstart API or expect the candidate helper to bypass `runProjection` authorization.
174
183
 
175
184
  ### Capability selection
@@ -180,7 +189,8 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
180
189
  - `foundation.kit.check`: nine check classes, diagnosis only, no fix.
181
190
  - `foundation.kit.report`: projection/check report sub-action orchestration.
182
191
  - `foundation.kit.git-probe`: read-only whitelisted Git status probe.
183
- - `foundation.kit.host`: describe/build/probe/plan, apply stably rejected.
192
+ - `foundation.kit.host`: describe/build/probe/plan plus authorized, digest-bound local install/update through `applyHostPlan`; Kit CLI apply, generic or remote apply, and deleting uninstall remain rejected.
193
+ - `verifyHostPeers` is a thin read-only host entry over Harness peer adapter verification; it does not write peer directories or add a fifth command.
184
194
  - `foundation.kit.licensing`: Profile authorization-data loading and generation.
185
195
  - `foundation.kit.identity-check`: identity-drift and Profile-consistency checks.
186
196
  - `foundation.kit.cli`: four-command dispatch and mutation-flag entry rejection.
@@ -215,12 +225,12 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
215
225
  ### Route elsewhere when
216
226
 
217
227
  - Remote publish: route to release-skill.
218
- - host apply/install/update/uninstall: explicitly unsupported.
228
+ - remote host publication, automatic trust confirmation, and uninstall deletion: explicitly unsupported; local install/update are limited to the registered plan API.
219
229
  - Business state machine / migration execution: stays with the caller or a later version.
220
230
 
221
231
  ### Machine-readable sources
222
232
 
223
233
  - Public capability catalog: [`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json) (`foundation.kit.*` entries).
224
234
  - Package-local source: `src/*.mjs`.
225
- - Package-local candidate source: `candidate/*`; public import: `skill-family-engineering-kit/candidate/quickstart-profile`.
235
+ - Package-local candidate source: `candidate/*`; canonical public imports: `skill-family-engineering-kit/quickstart-profile`, `/adoption`, and `/skill-naming`; historical migration alias: `skill-family-engineering-kit/candidate/quickstart-profile`.
226
236
  <!-- agent-quick-reference:end -->
package/README.zh-CN.md CHANGED
@@ -5,27 +5,28 @@
5
5
 
6
6
  # skill-family-engineering-kit
7
7
 
8
- <!-- release-skill:release-version: 0.9.0 -->
8
+ <!-- release-skill:release-version: 0.11.0 -->
9
9
 
10
10
  开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
11
11
 
12
12
  <!-- release-skill:managed:start id=latest-release -->
13
- **0.9.0** (2026-08-24)
13
+ **0.11.0** (2026-08-25)
14
14
 
15
- Engineering Kit 0.9.0 将稳定文件系统 Schema、绑定读取 Harness 闭包与有序批量校验 candidate 投影到既有 Quickstart Bundle。
15
+ Engineering Kit 0.11.0 增加候选真实宿主验证 API,并随包携带已登记宿主 Profile 闭包。
16
16
 
17
17
  **新增**
18
18
 
19
- - Contracts 权威源投影三个稳定文件系统 Schema 与两个批量校验 candidate Schema。
20
- - 投影稳定绑定读取入口及其精确原生预构建闭包,不新增 Kit 命令。
19
+ - 新增 runHostVerification,执行一次 fresh、受约束的 Kimi WorkBuddy 调用(复用调用方现有登录态);新增 verifyHostVerificationBindings,组合结果时只做纯校验。
20
+ - 从原始字节重算闭包和流摘要,并把私有证据留在公共结果之外。
21
+ - 通过 bundledHostProfilesRoot() 携带已登记宿主 Profile 闭包。
21
22
 
22
23
  **变更**
23
24
 
24
- - 四个顶层 Kit 命令与 Profile SPI candidate 边界保持不变。
25
+ - manual Profile 继续保留生命周期限制;宿主验证不会授予 build、plan、apply、install、update、uninstall rollback 能力。
25
26
 
26
27
  **升级说明**
27
28
 
28
- 三个 Foundation 包必须精确锁定 0.9.0 并重新构建 managed Bundle;批量校验只能通过既有 candidate Bundle mechanisms CLI 使用。
29
+ 0.11.0 宿主验证 API 仍为候选能力,不拥有领域 PASS/FAIL、发布状态或自动登录;不宣称认证状态隔离、凭证未变化、模型身份固定或宿主工具能力已关闭。executableSha256 只是启动前的点时观察,不证明实际执行映像;调用方独占对应命名空间。Foundation 保留 session 目录,调用方检查后清理外层 temporaryRoot。
29
30
  <!-- release-skill:managed:end id=latest-release -->
30
31
 
31
32
  | 命令 | 用途 | 副作用 |
@@ -46,7 +47,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
46
47
  ## 安装和最小示例
47
48
 
48
49
  ```sh
49
- npm install --save-dev skill-family-engineering-kit@0.9.0
50
+ npm install --save-dev skill-family-engineering-kit@0.11.0
50
51
  npm exec -- skill-family-kit --help
51
52
  npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
52
53
  npm exec -- skill-family-kit adopt-plan --root <repo>
@@ -54,7 +55,7 @@ npm exec -- skill-family-kit projection --root <repo>
54
55
  npm exec -- skill-family-kit check --root <repo>
55
56
  ```
56
57
 
57
- 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.9.0 -- skill-family-kit --help`。
58
+ 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.11.0 -- skill-family-kit --help`。
58
59
 
59
60
  ### 公共 Profile SPI
60
61
 
@@ -64,7 +65,7 @@ npm exec -- skill-family-kit check --root <repo>
64
65
 
65
66
  `verifyProfile({ profileRoot })` 只读处理 Profile descriptor;项目根声明使用对应的 `verifyProjectProfile({ projectRoot, profileRelPath? })`。两个入口遇到无效输入都以稳定结果码失败关闭,不会执行 Profile 提供的文件;Profile 的领域含义仍由调用方负责。
66
67
 
67
- provider Profile descriptor 从 Foundation 0.8.4 与 Contracts 1.8.0 升级到 Foundation 0.9.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.9.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
68
+ provider Profile descriptor 从 Foundation 0.9.0 与 Contracts 1.9.0 升级到 Foundation 0.10.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.10.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
68
69
 
69
70
  ### 报告子动作
70
71
 
@@ -84,7 +85,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
84
85
  import {
85
86
  buildQuickstartProfileProjection,
86
87
  QUICKSTART_PROFILE_TARGET_PREFIX,
87
- } from "skill-family-engineering-kit/candidate/quickstart-profile";
88
+ } from "skill-family-engineering-kit/quickstart-profile";
88
89
 
89
90
  const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
90
91
  if (!authority.valid) throw new Error(authority.errorCode);
@@ -97,7 +98,7 @@ const projection = await buildQuickstartProfileProjection({
97
98
 
98
99
  `receipt` 与 `actualSubjects` 由调用方在 Kit 外取得。Contracts 先精确核对两者,既有 builder 再接收返回的 `sourceRepository` 与 `sourceBaseCommit`;Kit 不解析发布计划,也不发现来源权威。生成的 Bundle 按 Schema `$id` 选择 standalone validator,离线运行时不依赖 Foundation 包、`node_modules` 或 Ajv。provenance 绑定 Foundation 来源、消费者 Schema、payload 字节、工具版本,以及实际进入 Bundle 的代码许可证。
99
100
 
100
- 以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API。该子路径公开但**不稳定**;使用 v2 时应精确锁定 `0.4.0`,仍依赖 v1 依赖闭包 Bundle 的接入必须继续精确锁定 `0.2.1`。
101
+ 以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API。该能力仍是 **candidate**,必须精确锁定三个包。0.10.0 新增上面的规范入口;历史 `/candidate/quickstart-profile` 入口作为同源迁移别名继续可用。adoption 与 skill naming 也分别提供 `skill-family-engineering-kit/adoption` 和 `skill-family-engineering-kit/skill-naming` 规范入口。消费者迁移一次后,未来晋升 stable 不再二次迁移。仍依赖 v1 依赖闭包 Bundle 的接入必须继续精确锁定 `0.2.1`。
101
102
 
102
103
  ### 宿主子动作
103
104
 
@@ -108,7 +109,15 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
108
109
  npm exec -- skill-family-kit adopt-plan host-plan --root <workspace> --host <id> --path-category <id> --build-manifest <relpath> --probe-facts <relpath> --hosts-root <dir>
109
110
  ```
110
111
 
111
- Profile 必须显式提供,Kit 不默认绑定具体宿主。probe 默认不启动进程;只有同时给出 `--allow-host-spawn --host-executable <绝对路径>` 才执行冻结版本向量。`host-apply` 稳定拒绝,未实现安装、更新或卸载。Codex 的技能目标路径固定为 `.agents/skills`;其他受支持宿主只按已登记 Profile 提供;Qoder 为 `unsupported`,本版只参考其结构,不提供完整 driver,也不声称已在 Qoder 运行。adapter source 只接受已声明的文本闭包,不支持二进制投影;精确宿主支持矩阵见本版本 CHANGELOG 与已登记 Profile。
112
+ Profile 必须显式提供,Kit 不默认绑定具体宿主。规范宿主 ID 只能解析已登记有限 Profile 中声明的 alias。probe 默认不启动进程;只有同时给出 `--allow-host-spawn --host-executable <绝对路径>` 才执行冻结版本向量。本地 install/update 通过显式授权引用和既有受收容发布原语执行;uninstall 因没有安全的绑定删除原语而返回 `manual-recovery-required`,不删除文件。Claude/Codex 使用受信版本 driver;Kimi Code、WorkBuddy、CodeBuddy 和 DeepSeek Harness 只提供独立手动事实;Qoder 为 `unsupported`。adapter source 只接受已声明的文本闭包,不支持二进制投影;精确宿主支持矩阵见 [宿主能力矩阵](../../docs/reference/host-capability-matrix.md) 与已登记 Profile。
113
+
114
+ ### 候选真实宿主验证库 API
115
+
116
+ `runHostVerification({ request, bindings, hostsRoot })` 和 `verifyHostVerificationBindings({ results, expectedCommon, expectedRequestDigestByHost })` 是库 API,不是第五个 Kit 命令。前者通过已准入的内置 driver(`kimi-code-print-v1` 或 `workbuddy-codebuddy-print-v1`,均绑定 `existing-user-state + host-managed`),针对调用方绑定的根执行一次候选验证,并返回经过 Contracts 校验的脱敏四态结果;后者是纯函数,只组合 `observed` 结果,并核对共同字段和逐宿主 request digest。
117
+
118
+ 该 API 不接管消费者 workload、领域输出检查、领域 PASS/FAIL、发布新鲜度或发布状态。调用方提供 canonical 的 `existingUserStateRoot`;Foundation 只把它投影进子进程环境,不读取、摘要、修改或清理其中内容,也不会因此为 manual Profile 授予 build、plan、apply、install、update 或 uninstall 能力。
119
+
120
+ `executableSha256` 只绑定启动前严格读取到的字节。实际进程仍按 pathname 启动,因此调用方必须在 probe 和正式调用期间独占可执行文件的命名空间。Foundation 保留本次调用的 `session-*` 目录,不按路径删除;调用方检查完成后,统一清理其独占的外层 `temporaryRoot`。
112
121
 
113
122
  ## 典型使用场景
114
123
 
@@ -170,7 +179,7 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
170
179
  ### Do not use when
171
180
 
172
181
  - 需要自动修复(`check` 不修复)、自动迁移(`adopt-plan` 不写文件)。
173
- - 需要 host apply/install/update/uninstall 或 Qoder 完整 driver(明确 unsupported)。
182
+ - 需要远端宿主发布、自动信任、删除式 uninstall 或 Qoder 完整 driver(明确 unsupported)。
174
183
  - 需要稳定 Quickstart API,或希望 candidate 辅助函数绕过 `runProjection` 授权。
175
184
 
176
185
  ### Capability selection
@@ -181,7 +190,8 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
181
190
  - `foundation.kit.check`:九类检查只诊断不修复。
182
191
  - `foundation.kit.report`:projection/check report 子动作编排。
183
192
  - `foundation.kit.git-probe`:只读白名单 Git 状态探测。
184
- - `foundation.kit.host`:describe/build/probe/planapply 稳定拒绝。
193
+ - `foundation.kit.host`:有限身份解析、describe/build/probe/plan,以及受授权的本地 install/update;删除式 uninstall 和远端 apply 稳定拒绝。
194
+ - `verifyHostPeers` 是 Harness 同级适配器验证的薄只读宿主入口,不写入 peer 目录,也不增加第五个顶层命令。
185
195
  - `foundation.kit.licensing`:Profile 授权数据加载与生成。
186
196
  - `foundation.kit.identity-check`:身份漂移与 Profile 一致性检查。
187
197
  - `foundation.kit.cli`:四命令分派与变更旗标入口拒绝。
@@ -216,12 +226,12 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
216
226
  ### Route elsewhere when
217
227
 
218
228
  - 远端发布:转 release-skill。
219
- - host apply/install/update/uninstall:明确 unsupported。
229
+ - 远端 host apply、自动信任与删除式 uninstall:明确 unsupported;本地 install/update 仅限已登记计划。
220
230
  - 业务状态机/迁移执行:留在调用方或后续版本。
221
231
 
222
232
  ### Machine-readable sources
223
233
 
224
234
  - 公开能力目录:[`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json)(`foundation.kit.*` 条目)。
225
235
  - 包内源:`src/*.mjs`。
226
- - 包内 Candidate 源:`candidate/*`;公共导入:`skill-family-engineering-kit/candidate/quickstart-profile`。
236
+ - 包内 Candidate 源:`candidate/*`;规范公共导入:`skill-family-engineering-kit/quickstart-profile`、`/adoption` 与 `/skill-naming`;历史迁移别名:`skill-family-engineering-kit/candidate/quickstart-profile`。
227
237
  <!-- agent-quick-reference:end -->
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  verifyHarnessSurfaceInventory,
9
9
  verifyManagedBundleIdentity,
10
- } from "skill-family-harness-node/candidate/quickstart-profile";
10
+ } from "skill-family-harness-node/quickstart-profile";
11
11
 
12
12
  export { verifyManagedBundleIdentity };
13
13
 
@@ -7,11 +7,12 @@ import {
7
7
  canonicalJson,
8
8
  } from "skill-family-contracts";
9
9
  import {
10
+ HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS,
10
11
  QUICKSTART_PROFILE_ID,
11
12
  QUICKSTART_PROFILE_VERSION,
12
- } from "skill-family-contracts/candidate/quickstart-profile";
13
+ } from "skill-family-contracts/quickstart-profile";
13
14
  import { digestBytes } from "skill-family-harness-node";
14
- import { verifyConsumerSchemaInventory } from "skill-family-harness-node/candidate/quickstart-profile";
15
+ import { verifyConsumerSchemaInventory } from "skill-family-harness-node/quickstart-profile";
15
16
 
16
17
  /**
17
18
  * Candidate Quickstart Profile v2 offline bundle builder (unstable).
@@ -79,7 +80,7 @@ const ADDITIONAL_FOUNDATION_SCHEMA_FILES = Object.freeze([
79
80
 
80
81
  const HARNESS_IMPORT_MAP = new Map([
81
82
  ["skill-family-contracts", "../contracts/index.mjs"],
82
- ["skill-family-contracts/candidate/quickstart-profile", "../contracts-candidate/index.mjs"],
83
+ ["skill-family-contracts/quickstart-profile", "../contracts-candidate/index.mjs"],
83
84
  ["../src/closure.mjs", "./closure.mjs"],
84
85
  ["../src/errors.mjs", "./errors.mjs"],
85
86
  ["../src/paths.mjs", "./paths.mjs"],
@@ -110,7 +111,7 @@ const HARNESS_TOKEN_LOCK_IMPORT_MAP = new Map([
110
111
 
111
112
  const ADOPTION_IMPORT_MAP = new Map([
112
113
  ["../src/migration.mjs", "./runtime/kit/migration.mjs"],
113
- ["skill-family-harness-node/candidate/quickstart-profile", "./runtime/harness/quickstart-profile.mjs"],
114
+ ["skill-family-harness-node/quickstart-profile", "./runtime/harness/quickstart-profile.mjs"],
114
115
  ]);
115
116
 
116
117
  const DIALECT_URIS = Object.freeze({
@@ -1043,6 +1044,32 @@ function standaloneMapSource({ entries2020, entriesDraft07 }) {
1043
1044
  return lines.join("\n");
1044
1045
  }
1045
1046
 
1047
+ function standaloneEntriesWithHistoricalAliases(schemaIds) {
1048
+ const canonicalEntries = [...schemaIds]
1049
+ .sort()
1050
+ .map((schemaId, index) => ({ schemaId, exportName: standaloneExportName(index) }));
1051
+ const canonicalById = new Map(
1052
+ canonicalEntries.map((entry) => [entry.schemaId, entry]),
1053
+ );
1054
+ const aliases = Object.entries(HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS)
1055
+ .map(([legacyId, canonicalId]) => {
1056
+ if (canonicalById.has(legacyId)) {
1057
+ throw new Error(
1058
+ `historical candidate schema $id collides with a canonical schema: ${legacyId}`,
1059
+ );
1060
+ }
1061
+ const canonical = canonicalById.get(canonicalId);
1062
+ if (!canonical) {
1063
+ throw new Error(
1064
+ `historical candidate schema migration target is absent from the Bundle: ${canonicalId}`,
1065
+ );
1066
+ }
1067
+ return { schemaId: legacyId, exportName: canonical.exportName };
1068
+ });
1069
+ return [...canonicalEntries, ...aliases]
1070
+ .sort((a, b) => (a.schemaId < b.schemaId ? -1 : a.schemaId > b.schemaId ? 1 : 0));
1071
+ }
1072
+
1046
1073
  function validatorsSource() {
1047
1074
  return `import standaloneValidators from "./runtime/generated/standalone-map.mjs";
1048
1075
  import { findNonJsonValue, normalizeValidationError } from "./runtime/json-boundary.mjs";
@@ -1292,6 +1319,14 @@ export async function buildQuickstartProfileProjection({
1292
1319
 
1293
1320
  const graph = buildSchemaGraph(consumerRecords, foundationSchemaDocuments);
1294
1321
 
1322
+ for (const record of consumerRecords) {
1323
+ if (Object.hasOwn(HISTORICAL_CANDIDATE_SCHEMA_ID_MIGRATIONS, record.document.$id)) {
1324
+ throw buildError(
1325
+ `consumer schema $id is reserved for a historical Foundation identity: ${record.document.$id}`,
1326
+ );
1327
+ }
1328
+ }
1329
+
1295
1330
  // --- Standalone validator generation (Ajv build dependency only). ---
1296
1331
  const fromContracts = createRequire(pathToFileURL(path.join(contractsRoot, "package.json")));
1297
1332
  const ajvEntry = fromContracts.resolve("ajv");
@@ -1322,6 +1357,10 @@ export async function buildQuickstartProfileProjection({
1322
1357
  ...foundationSchemaDocuments.map((entry) => entry.document),
1323
1358
  ...graph["2020-12"].map((record) => record.document),
1324
1359
  ];
1360
+ const generated2020SchemaIds = [
1361
+ ...schemas2020.map((schema) => schema.$id),
1362
+ "https://contracts.skill-family.example/quickstart-profile/v2/harness-surface-detectors.json",
1363
+ ];
1325
1364
  const generated2020 = await generateStandaloneModule({
1326
1365
  AjvCtor: Ajv2020,
1327
1366
  schemas: schemas2020,
@@ -1329,10 +1368,7 @@ export async function buildQuickstartProfileProjection({
1329
1368
  codegenTemplate,
1330
1369
  standaloneCode,
1331
1370
  isValidDateTime,
1332
- schemaIds: [
1333
- ...schemas2020.map((schema) => schema.$id),
1334
- "https://contracts.skill-family.example/candidate/quickstart-profile/v2/harness-surface-detectors.json",
1335
- ],
1371
+ schemaIds: generated2020SchemaIds,
1336
1372
  });
1337
1373
  const schemasDraft07 = graph["draft-07"].map((record) => record.document);
1338
1374
  const withDraft07 = schemasDraft07.length > 0;
@@ -1487,12 +1523,7 @@ export async function buildQuickstartProfileProjection({
1487
1523
  setText("runtime/generated/validate-draft-07.mjs", generatedDraft07);
1488
1524
  }
1489
1525
  const sortById = (a, b) => (a.$id < b.$id ? -1 : 1);
1490
- const entries2020 = [
1491
- ...schemas2020.map((schema) => schema.$id),
1492
- "https://contracts.skill-family.example/candidate/quickstart-profile/v2/harness-surface-detectors.json",
1493
- ]
1494
- .sort()
1495
- .map((schemaId, index) => ({ schemaId, exportName: standaloneExportName(index) }));
1526
+ const entries2020 = standaloneEntriesWithHistoricalAliases(generated2020SchemaIds);
1496
1527
  const entriesDraft07 = [...schemasDraft07]
1497
1528
  .sort(sortById)
1498
1529
  .map((schema, index) => ({ schemaId: schema.$id, exportName: standaloneExportName(index) }));
@@ -0,0 +1,40 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "skill-family.host-descriptor",
4
+ "hostId": "claude",
5
+ "displayName": "Claude Code",
6
+ "support": "supported",
7
+ "maturity": "stable",
8
+ "sourceAliases": [
9
+ "claude-code"
10
+ ],
11
+ "driverId": "claude-version-v1",
12
+ "adapterFormat": "skill-directory-v1",
13
+ "pathCategories": [
14
+ {
15
+ "id": "claude-user-skills",
16
+ "role": "skill-root",
17
+ "scope": "user",
18
+ "anchor": "user-home",
19
+ "relPath": ".claude/skills"
20
+ },
21
+ {
22
+ "id": "claude-project-skills",
23
+ "role": "skill-root",
24
+ "scope": "project",
25
+ "anchor": "project-root",
26
+ "relPath": ".claude/skills"
27
+ }
28
+ ],
29
+ "probeCapabilities": [
30
+ "cli",
31
+ "version",
32
+ "payload",
33
+ "registry",
34
+ "discover",
35
+ "enabled",
36
+ "reload",
37
+ "smoke",
38
+ "uninstall"
39
+ ]
40
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "skill-family.host-descriptor",
4
+ "hostId": "codebuddy",
5
+ "displayName": "CodeBuddy",
6
+ "support": "manual",
7
+ "maturity": "manual",
8
+ "sourceAliases": [],
9
+ "pathCategories": [],
10
+ "probeCapabilities": [
11
+ "cli",
12
+ "version",
13
+ "payload",
14
+ "registry",
15
+ "discover",
16
+ "enabled",
17
+ "reload",
18
+ "smoke",
19
+ "uninstall"
20
+ ]
21
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "skill-family.host-descriptor",
4
+ "hostId": "codex",
5
+ "displayName": "Codex",
6
+ "support": "supported",
7
+ "maturity": "stable",
8
+ "sourceAliases": [
9
+ "openai-codex"
10
+ ],
11
+ "driverId": "codex-version-v1",
12
+ "adapterFormat": "skill-directory-v1",
13
+ "pathCategories": [
14
+ {
15
+ "id": "codex-user-skills",
16
+ "role": "skill-root",
17
+ "scope": "user",
18
+ "anchor": "user-home",
19
+ "relPath": ".agents/skills"
20
+ },
21
+ {
22
+ "id": "codex-project-skills",
23
+ "role": "skill-root",
24
+ "scope": "project",
25
+ "anchor": "project-root",
26
+ "relPath": ".agents/skills"
27
+ }
28
+ ],
29
+ "probeCapabilities": [
30
+ "cli",
31
+ "version",
32
+ "payload",
33
+ "registry",
34
+ "discover",
35
+ "enabled",
36
+ "reload",
37
+ "smoke",
38
+ "uninstall"
39
+ ]
40
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "kind": "skill-family.host-descriptor",
4
+ "hostId": "deepseek-harness",
5
+ "displayName": "DeepSeek Harness",
6
+ "support": "manual",
7
+ "maturity": "developer-preview",
8
+ "sourceAliases": [
9
+ "dsh"
10
+ ],
11
+ "pathCategories": [],
12
+ "probeCapabilities": [
13
+ "cli",
14
+ "version",
15
+ "payload",
16
+ "registry",
17
+ "discover",
18
+ "enabled",
19
+ "reload",
20
+ "smoke",
21
+ "uninstall"
22
+ ]
23
+ }