skill-family-engineering-kit 0.9.0 → 0.10.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 (38) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CHANGELOG.zh-CN.md +22 -0
  3. package/README.md +20 -17
  4. package/README.zh-CN.md +20 -17
  5. package/candidate/adoption-mechanisms.mjs +1 -1
  6. package/candidate/profile-bundle.mjs +45 -14
  7. package/docs/agents/capability-catalog.en.json +59 -51
  8. package/docs/agents/capability-catalog.json +70 -21
  9. package/docs/agents/capability-catalog.schema.json +19 -3
  10. package/docs/agents/capability-catalog.zh-CN.json +59 -51
  11. package/docs/agents/index.html +4 -1
  12. package/docs/architecture/index.html +35 -5
  13. package/docs/en/agents/index.html +1 -0
  14. package/docs/en/architecture/index.html +30 -5
  15. package/docs/en/help/index.html +2 -1
  16. package/docs/en/recipes/adapter-text-closure/index.html +4 -3
  17. package/docs/en/recipes/host-profile-integration/index.html +31 -12
  18. package/docs/en/reference/compatibility/index.html +129 -124
  19. package/docs/en/reference/failure-and-side-effect-matrix/index.html +23 -3
  20. package/docs/help/index.html +2 -1
  21. package/docs/integration/audit/index.html +2 -1
  22. package/docs/integration/audit/version-compatibility/index.html +3 -2
  23. package/docs/public/status/index.html +3 -3
  24. package/docs/recipes/adapter-text-closure/index.html +4 -3
  25. package/docs/recipes/host-profile-integration/index.html +31 -12
  26. package/docs/reference/api/contracts/index.html +77 -4
  27. package/docs/reference/api/engineering-kit/index.html +33 -20
  28. package/docs/reference/api/harness/index.html +19 -8
  29. package/docs/reference/api/index.html +1 -1
  30. package/docs/reference/compatibility/index.html +138 -124
  31. package/docs/reference/failure-and-side-effect-matrix/index.html +4 -4
  32. package/docs/search/search_index.json +1 -1
  33. package/package.json +9 -6
  34. package/profile-spi/extension-spi.json +1 -1
  35. package/release-notes/0.10.0.yaml +25 -0
  36. package/src/host-profiles.mjs +38 -12
  37. package/src/host.mjs +115 -14
  38. package/src/index.mjs +6 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.10.0 locale=en baseline=sha256:fc575df3b8c5f7a0d819090ce9637f8cdc654c277892fe3f14149d5cc1746b24 -->
4
+ ## [0.10.0] - 2026-08-24
5
+
6
+ Engineering Kit 0.10.0 adds responsibility-specific canonical entrypoints, a bounded host lifecycle slice, and a thin read-only peer adapter verification entry.
7
+
8
+ ### Added
9
+
10
+ - Adds skill-family-engineering-kit/quickstart-profile, /adoption, and /skill-naming canonical exports.
11
+ - 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.
12
+ - Adds `verifyHostPeers` as a thin wrapper over Harness peer verification; the Kit retains four top-level commands and does not write peer directories.
13
+
14
+ ### Changed
15
+
16
+ - Keeps the historical Quickstart candidate export as a same-source migration alias and preserves the four-command Kit boundary.
17
+ - Compiles one canonical Quickstart and batch Schema set while mapping historical and canonical IDs to the same standalone validators.
18
+
19
+ ### Upgrade Notes
20
+
21
+ 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.
22
+ <!-- release-skill:changelog:end version=0.10.0 locale=en -->
23
+
24
+
3
25
  <!-- release-skill:changelog:start version=0.9.0 locale=en baseline=sha256:6419bbdc8d469e6dd7f9fda5995e5465cc6bf98724371f9f4aa9293a7e0d9f14 -->
4
26
  ## [0.9.0] - 2026-08-24
5
27
 
@@ -1,5 +1,27 @@
1
1
  # 变更日志
2
2
 
3
+ <!-- release-skill:changelog:start version=0.10.0 locale=zh-CN baseline=sha256:45180b7a3b60853842cbe3a379da7ff95f1bd1fe832192368ec2c92a813279dc -->
4
+ ## [0.10.0] - 2026-08-24
5
+
6
+ Engineering Kit 0.10.0 为历史 candidate 提供职责明确的规范入口,增加受限的跨平台宿主身份、探针和本地生命周期能力,并提供同级适配器只读验证薄入口。
7
+
8
+ ### 新增
9
+
10
+ - 新增 skill-family-engineering-kit/quickstart-profile、/adoption 与 /skill-naming 规范导出。
11
+ - 增加有限 Profile alias 解析、非 driver 宿主的独立手动 probe fact 和显式本地 install/update 计划;uninstall 仍要求人工恢复。
12
+ - 新增 `verifyHostPeers`,只包装 Harness 的 peer 验证,不增加第五个顶层命令,也不写入 peer 目录。
13
+
14
+ ### 变更
15
+
16
+ - 历史 Quickstart candidate 导出继续作为同源迁移别名,Kit 四命令边界不变。
17
+ - 只编译一套规范 Quickstart 与批量校验 Schema;历史和规范 ID 指向同一 standalone validator。
18
+
19
+ ### 升级说明
20
+
21
+ 消费者应把三个包的精确 pin 更新到 0.10.0,并把导入与 Schema ID 一次迁移到规范身份。以后仅晋升成熟度标签时不另加 Bundle 重建要求;包身份、来源摘要或 provenance 变化仍按既有投影合同处理。
22
+ <!-- release-skill:changelog:end version=0.10.0 locale=zh-CN -->
23
+
24
+
3
25
  <!-- release-skill:changelog:start version=0.9.0 locale=zh-CN baseline=sha256:c84db7b53f562cbdad947ccf8fcc23209f18137100270b2691bab7d9a7ad623c -->
4
26
  ## [0.9.0] - 2026-08-24
5
27
 
package/README.md CHANGED
@@ -4,27 +4,29 @@
4
4
 
5
5
  # skill-family-engineering-kit
6
6
 
7
- <!-- release-skill:release-version: 0.9.0 -->
7
+ <!-- release-skill:release-version: 0.10.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.10.0** (2026-08-24)
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.10.0 adds responsibility-specific canonical entrypoints, a bounded host lifecycle slice, and a thin read-only peer adapter verification entry.
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 skill-family-engineering-kit/quickstart-profile, /adoption, and /skill-naming canonical exports.
19
+ - 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.
20
+ - Adds `verifyHostPeers` as a thin wrapper over Harness peer verification; the Kit retains four top-level commands and does not write peer directories.
20
21
 
21
22
  **Changed**
22
23
 
23
- - Keeps the four top-level Kit commands and Profile SPI candidate boundary unchanged.
24
+ - Keeps the historical Quickstart candidate export as a same-source migration alias and preserves the four-command Kit boundary.
25
+ - Compiles one canonical Quickstart and batch Schema set while mapping historical and canonical IDs to the same standalone validators.
24
26
 
25
27
  **Upgrade Notes**
26
28
 
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.
29
+ 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.
28
30
  <!-- release-skill:managed:end id=latest-release -->
29
31
 
30
32
  | Command | Purpose | Side effects |
@@ -45,7 +47,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
45
47
  ## Installation and Minimal Example
46
48
 
47
49
  ```sh
48
- npm install --save-dev skill-family-engineering-kit@0.9.0
50
+ npm install --save-dev skill-family-engineering-kit@0.10.0
49
51
  npm exec -- skill-family-kit --help
50
52
  npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
51
53
  npm exec -- skill-family-kit adopt-plan --root <repo>
@@ -53,7 +55,7 @@ npm exec -- skill-family-kit projection --root <repo>
53
55
  npm exec -- skill-family-kit check --root <repo>
54
56
  ```
55
57
 
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`.
58
+ 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.10.0 -- skill-family-kit --help`.
57
59
 
58
60
  ### Public Profile SPI
59
61
 
@@ -63,7 +65,7 @@ The package carries three SPI JSON resources and the Contracts canonical `profil
63
65
 
64
66
  `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
67
 
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.
68
+ 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
69
 
68
70
  ### Report sub-action
69
71
 
@@ -83,7 +85,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
83
85
  import {
84
86
  buildQuickstartProfileProjection,
85
87
  QUICKSTART_PROFILE_TARGET_PREFIX,
86
- } from "skill-family-engineering-kit/candidate/quickstart-profile";
88
+ } from "skill-family-engineering-kit/quickstart-profile";
87
89
 
88
90
  const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
89
91
  if (!authority.valid) throw new Error(authority.errorCode);
@@ -96,7 +98,7 @@ const projection = await buildQuickstartProfileProjection({
96
98
 
97
99
  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
100
 
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`.
101
+ 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
102
 
101
103
  ### Host sub-action
102
104
 
@@ -107,7 +109,7 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
107
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>
108
110
  ```
109
111
 
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.
112
+ 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.
111
113
 
112
114
  ## Typical Use Cases
113
115
 
@@ -169,7 +171,7 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
169
171
  ### Do not use when
170
172
 
171
173
  - 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).
174
+ - You need remote host publication, automatic trust confirmation, uninstall deletion, or a full Qoder driver (explicitly unsupported).
173
175
  - You need a stable Quickstart API or expect the candidate helper to bypass `runProjection` authorization.
174
176
 
175
177
  ### Capability selection
@@ -180,7 +182,8 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
180
182
  - `foundation.kit.check`: nine check classes, diagnosis only, no fix.
181
183
  - `foundation.kit.report`: projection/check report sub-action orchestration.
182
184
  - `foundation.kit.git-probe`: read-only whitelisted Git status probe.
183
- - `foundation.kit.host`: describe/build/probe/plan, apply stably rejected.
185
+ - `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.
186
+ - `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
187
  - `foundation.kit.licensing`: Profile authorization-data loading and generation.
185
188
  - `foundation.kit.identity-check`: identity-drift and Profile-consistency checks.
186
189
  - `foundation.kit.cli`: four-command dispatch and mutation-flag entry rejection.
@@ -215,12 +218,12 @@ This package must not perform git init, commit, push, tag, stash, branch switch,
215
218
  ### Route elsewhere when
216
219
 
217
220
  - Remote publish: route to release-skill.
218
- - host apply/install/update/uninstall: explicitly unsupported.
221
+ - remote host publication, automatic trust confirmation, and uninstall deletion: explicitly unsupported; local install/update are limited to the registered plan API.
219
222
  - Business state machine / migration execution: stays with the caller or a later version.
220
223
 
221
224
  ### Machine-readable sources
222
225
 
223
226
  - Public capability catalog: [`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json) (`foundation.kit.*` entries).
224
227
  - Package-local source: `src/*.mjs`.
225
- - Package-local candidate source: `candidate/*`; public import: `skill-family-engineering-kit/candidate/quickstart-profile`.
228
+ - 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
229
  <!-- agent-quick-reference:end -->
package/README.zh-CN.md CHANGED
@@ -5,27 +5,29 @@
5
5
 
6
6
  # skill-family-engineering-kit
7
7
 
8
- <!-- release-skill:release-version: 0.9.0 -->
8
+ <!-- release-skill:release-version: 0.10.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.10.0** (2026-08-24)
14
14
 
15
- Engineering Kit 0.9.0 将稳定文件系统 Schema、绑定读取 Harness 闭包与有序批量校验 candidate 投影到既有 Quickstart Bundle。
15
+ Engineering Kit 0.10.0 为历史 candidate 提供职责明确的规范入口,增加受限的跨平台宿主身份、探针和本地生命周期能力,并提供同级适配器只读验证薄入口。
16
16
 
17
17
  **新增**
18
18
 
19
- - Contracts 权威源投影三个稳定文件系统 Schema 与两个批量校验 candidate Schema。
20
- - 投影稳定绑定读取入口及其精确原生预构建闭包,不新增 Kit 命令。
19
+ - 新增 skill-family-engineering-kit/quickstart-profile、/adoption /skill-naming 规范导出。
20
+ - 增加有限 Profile alias 解析、非 driver 宿主的独立手动 probe fact 和显式本地 install/update 计划;uninstall 仍要求人工恢复。
21
+ - 新增 `verifyHostPeers`,只包装 Harness 的 peer 验证,不增加第五个顶层命令,也不写入 peer 目录。
21
22
 
22
23
  **变更**
23
24
 
24
- - 四个顶层 Kit 命令与 Profile SPI 的 candidate 边界保持不变。
25
+ - 历史 Quickstart candidate 导出继续作为同源迁移别名,Kit 四命令边界不变。
26
+ - 只编译一套规范 Quickstart 与批量校验 Schema;历史和规范 ID 指向同一 standalone validator。
25
27
 
26
28
  **升级说明**
27
29
 
28
- 三个 Foundation 包必须精确锁定 0.9.0 并重新构建 managed Bundle;批量校验只能通过既有 candidate Bundle mechanisms CLI 使用。
30
+ 消费者应把三个包的精确 pin 更新到 0.10.0,并把导入与 Schema ID 一次迁移到规范身份。以后仅晋升成熟度标签时不另加 Bundle 重建要求;包身份、来源摘要或 provenance 变化仍按既有投影合同处理。
29
31
  <!-- release-skill:managed:end id=latest-release -->
30
32
 
31
33
  | 命令 | 用途 | 副作用 |
@@ -46,7 +48,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
46
48
  ## 安装和最小示例
47
49
 
48
50
  ```sh
49
- npm install --save-dev skill-family-engineering-kit@0.9.0
51
+ npm install --save-dev skill-family-engineering-kit@0.10.0
50
52
  npm exec -- skill-family-kit --help
51
53
  npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
52
54
  npm exec -- skill-family-kit adopt-plan --root <repo>
@@ -54,7 +56,7 @@ npm exec -- skill-family-kit projection --root <repo>
54
56
  npm exec -- skill-family-kit check --root <repo>
55
57
  ```
56
58
 
57
- 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.9.0 -- skill-family-kit --help`。
59
+ 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.10.0 -- skill-family-kit --help`。
58
60
 
59
61
  ### 公共 Profile SPI
60
62
 
@@ -64,7 +66,7 @@ npm exec -- skill-family-kit check --root <repo>
64
66
 
65
67
  `verifyProfile({ profileRoot })` 只读处理 Profile descriptor;项目根声明使用对应的 `verifyProjectProfile({ projectRoot, profileRelPath? })`。两个入口遇到无效输入都以稳定结果码失败关闭,不会执行 Profile 提供的文件;Profile 的领域含义仍由调用方负责。
66
68
 
67
- provider Profile descriptor 从 Foundation 0.8.4 与 Contracts 1.8.0 升级到 Foundation 0.9.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.9.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
69
+ provider Profile descriptor 从 Foundation 0.9.0 与 Contracts 1.9.0 升级到 Foundation 0.10.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.10.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
68
70
 
69
71
  ### 报告子动作
70
72
 
@@ -84,7 +86,7 @@ import { parseSourceAuthorityReceipt } from "skill-family-contracts";
84
86
  import {
85
87
  buildQuickstartProfileProjection,
86
88
  QUICKSTART_PROFILE_TARGET_PREFIX,
87
- } from "skill-family-engineering-kit/candidate/quickstart-profile";
89
+ } from "skill-family-engineering-kit/quickstart-profile";
88
90
 
89
91
  const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
90
92
  if (!authority.valid) throw new Error(authority.errorCode);
@@ -97,7 +99,7 @@ const projection = await buildQuickstartProfileProjection({
97
99
 
98
100
  `receipt` 与 `actualSubjects` 由调用方在 Kit 外取得。Contracts 先精确核对两者,既有 builder 再接收返回的 `sourceRepository` 与 `sourceBaseCommit`;Kit 不解析发布计划,也不发现来源权威。生成的 Bundle 按 Schema `$id` 选择 standalone validator,离线运行时不依赖 Foundation 包、`node_modules` 或 Ajv。provenance 绑定 Foundation 来源、消费者 Schema、payload 字节、工具版本,以及实际进入 Bundle 的代码许可证。
99
101
 
100
- 以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API。该子路径公开但**不稳定**;使用 v2 时应精确锁定 `0.4.0`,仍依赖 v1 依赖闭包 Bundle 的接入必须继续精确锁定 `0.2.1`。
102
+ 以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `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
103
 
102
104
  ### 宿主子动作
103
105
 
@@ -108,7 +110,7 @@ npm exec -- skill-family-kit scaffold host-build --root <workspace> --host <id>
108
110
  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
111
  ```
110
112
 
111
- Profile 必须显式提供,Kit 不默认绑定具体宿主。probe 默认不启动进程;只有同时给出 `--allow-host-spawn --host-executable <绝对路径>` 才执行冻结版本向量。`host-apply` 稳定拒绝,未实现安装、更新或卸载。Codex 的技能目标路径固定为 `.agents/skills`;其他受支持宿主只按已登记 Profile 提供;Qoder 为 `unsupported`,本版只参考其结构,不提供完整 driver,也不声称已在 Qoder 运行。adapter source 只接受已声明的文本闭包,不支持二进制投影;精确宿主支持矩阵见本版本 CHANGELOG 与已登记 Profile。
113
+ 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。
112
114
 
113
115
  ## 典型使用场景
114
116
 
@@ -170,7 +172,7 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
170
172
  ### Do not use when
171
173
 
172
174
  - 需要自动修复(`check` 不修复)、自动迁移(`adopt-plan` 不写文件)。
173
- - 需要 host apply/install/update/uninstall 或 Qoder 完整 driver(明确 unsupported)。
175
+ - 需要远端宿主发布、自动信任、删除式 uninstall 或 Qoder 完整 driver(明确 unsupported)。
174
176
  - 需要稳定 Quickstart API,或希望 candidate 辅助函数绕过 `runProjection` 授权。
175
177
 
176
178
  ### Capability selection
@@ -181,7 +183,8 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
181
183
  - `foundation.kit.check`:九类检查只诊断不修复。
182
184
  - `foundation.kit.report`:projection/check report 子动作编排。
183
185
  - `foundation.kit.git-probe`:只读白名单 Git 状态探测。
184
- - `foundation.kit.host`:describe/build/probe/planapply 稳定拒绝。
186
+ - `foundation.kit.host`:有限身份解析、describe/build/probe/plan,以及受授权的本地 install/update;删除式 uninstall 和远端 apply 稳定拒绝。
187
+ - `verifyHostPeers` 是 Harness 同级适配器验证的薄只读宿主入口,不写入 peer 目录,也不增加第五个顶层命令。
185
188
  - `foundation.kit.licensing`:Profile 授权数据加载与生成。
186
189
  - `foundation.kit.identity-check`:身份漂移与 Profile 一致性检查。
187
190
  - `foundation.kit.cli`:四命令分派与变更旗标入口拒绝。
@@ -216,12 +219,12 @@ projection 只写同时满足两个条件的路径:manifest 列出,且目标
216
219
  ### Route elsewhere when
217
220
 
218
221
  - 远端发布:转 release-skill。
219
- - host apply/install/update/uninstall:明确 unsupported。
222
+ - 远端 host apply、自动信任与删除式 uninstall:明确 unsupported;本地 install/update 仅限已登记计划。
220
223
  - 业务状态机/迁移执行:留在调用方或后续版本。
221
224
 
222
225
  ### Machine-readable sources
223
226
 
224
227
  - 公开能力目录:[`capability-catalog.json`](https://ifoohoo.github.io/skill-family-engineering-kit/agents/capability-catalog.json)(`foundation.kit.*` 条目)。
225
228
  - 包内源:`src/*.mjs`。
226
- - 包内 Candidate 源:`candidate/*`;公共导入:`skill-family-engineering-kit/candidate/quickstart-profile`。
229
+ - 包内 Candidate 源:`candidate/*`;规范公共导入:`skill-family-engineering-kit/quickstart-profile`、`/adoption` 与 `/skill-naming`;历史迁移别名:`skill-family-engineering-kit/candidate/quickstart-profile`。
227
230
  <!-- 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) }));