skill-family-engineering-kit 0.16.0 → 0.18.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,46 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.18.0 locale=en baseline=sha256:9c6fe9859fb75316937790054ae7d45bfc21d38ce97d8e650d7da18757a462c5 -->
4
+ ## [0.18.0] - 2026-09-05
5
+
6
+ Engineering Kit 0.18.0 projects the stable Harness replaceFixedSetAtomic export into the existing offline Quickstart Bundle.
7
+
8
+ ### Added
9
+
10
+ - The existing candidate Bundle now carries the stable fixed-set replacement source, loader, native closure, and replaceFixedSetAtomic export without adding a parallel implementation or a new Kit command.
11
+
12
+ ### Changed
13
+
14
+ - Moves the package version to 0.18.0 together with Contracts and Harness while preserving runProjection as the Bundle write and authorization boundary.
15
+
16
+ ### Upgrade Notes
17
+
18
+ Pin all three Foundation packages to exactly 0.18.0 and rebuild managed Bundles from those exact installed package bytes. Bundle consumers receive the same non-idempotent replacement semantics and must not retry post-commit or indeterminate outcomes blindly.
19
+ <!-- release-skill:changelog:end version=0.18.0 locale=en -->
20
+
21
+
22
+ <!-- release-skill:changelog:start version=0.17.0 locale=en baseline=sha256:c09a3edaeab4e9f29527900bff5baaa7f7be185a9270ce81f450fab8ec9fb16f -->
23
+ ## [0.17.0] - 2026-09-01
24
+
25
+ Engineering Kit 0.17.0 separates CodeBuddy from WorkBuddy host verification and adds an opt-in structural comparison against a provider-owned engineering baseline.
26
+
27
+ ### Added
28
+
29
+ - Adds the codebuddy-print-v1 driver for CodeBuddy project discovery under .codebuddy/skills while preserving the existing workbuddy-codebuddy-print-v1 driver and WorkBuddy layout.
30
+ - Adds describeSkeletonReferenceImplementation and returns its identity from scaffoldTarget.
31
+ - Adds the paired adopt-plan options --engineering-baseline and --compare-skeleton. The result reports reference-only, target-only, entry-type, and file-class differences without declaring compliance, equivalence, severity, or waivers.
32
+
33
+ ### Changed
34
+
35
+ - Adds skill-family-kit check entries --root . to the generated public-plugin check script; other profiles keep their existing check command.
36
+ - Keeps host-managed login state, domain acceptance, and real-host qualification under consumer ownership.
37
+
38
+ ### Upgrade Notes
39
+
40
+ Pin all three Foundation packages to exactly 0.17.0. CodeBuddy and WorkBuddy are separate host routes even when they consume the same plugin payload. Baseline comparison is read-only and opt-in; the baseline provider still owns rule semantics and publication.
41
+ <!-- release-skill:changelog:end version=0.17.0 locale=en -->
42
+
43
+
3
44
  <!-- release-skill:changelog:start version=0.16.0 locale=en baseline=sha256:47c81698bf9458edc28ec1e198e43ad6f961db4249f606426a4b83664872a5d8 -->
4
45
  ## [0.16.0] - 2026-08-31
5
46
 
@@ -1,5 +1,46 @@
1
1
  # 变更日志
2
2
 
3
+ <!-- release-skill:changelog:start version=0.18.0 locale=zh-CN baseline=sha256:c8c2891b64fc31e1fb3754715da04d6ec0727b31e36e011d38735e45795cdd53 -->
4
+ ## [0.18.0] - 2026-09-05
5
+
6
+ Engineering Kit 0.18.0 将 Harness 稳定的 replaceFixedSetAtomic 导出投影到既有离线 Quickstart Bundle。
7
+
8
+ ### 新增
9
+
10
+ - 既有 candidate Bundle 携带稳定的固定集合替换源码、加载器、原生闭包与 replaceFixedSetAtomic 导出;不新增平行实现,也不增加 Kit 命令。
11
+
12
+ ### 变更
13
+
14
+ - 包版本与 Contracts、Harness 一同升至 0.18.0,runProjection 继续作为 Bundle 的写入与授权边界。
15
+
16
+ ### 升级说明
17
+
18
+ 三个 Foundation 包须一起精确锁定到 0.18.0,并从这些已安装包的精确字节重建受管 Bundle。Bundle 消费者获得相同的非幂等替换语义,不得盲目重试提交后或不确定结果。
19
+ <!-- release-skill:changelog:end version=0.18.0 locale=zh-CN -->
20
+
21
+
22
+ <!-- release-skill:changelog:start version=0.17.0 locale=zh-CN baseline=sha256:7c413da3ad02837bdd63a1b49a5dc78cefe15a9779a05ce070876f817d09ae65 -->
23
+ ## [0.17.0] - 2026-09-01
24
+
25
+ Engineering Kit 0.17.0 将 CodeBuddy 与 WorkBuddy 的宿主验证分开,并新增按需启用的提供方工程基线结构比较。
26
+
27
+ ### 新增
28
+
29
+ - 新增 codebuddy-print-v1 driver,按 CodeBuddy 的 .codebuddy/skills 项目目录发现技能;既有 workbuddy-codebuddy-print-v1 driver 与 WorkBuddy 布局保持不变。
30
+ - 新增 describeSkeletonReferenceImplementation,并由 scaffoldTarget 返回该参考骨架身份。
31
+ - adopt-plan 新增须成对使用的 --engineering-baseline 与 --compare-skeleton。结果只报告参考侧独有、目标侧独有、条目类型和文件类别差异,不裁定合规、等价、严重程度或豁免。
32
+
33
+ ### 变更
34
+
35
+ - public-plugin 骨架生成的 check 脚本新增 skill-family-kit check entries --root .;其他 Profile 的检查命令保持不变。
36
+ - 宿主管理的登录态、领域验收和真实宿主资格继续归消费者负责。
37
+
38
+ ### 升级说明
39
+
40
+ 三个 Foundation 包须一起精确锁定到 0.17.0。CodeBuddy 与 WorkBuddy 即使消费同一插件载荷,也必须走独立宿主路由。基线比较只读且按需启用;规则语义与基线发布仍由基线提供方负责。
41
+ <!-- release-skill:changelog:end version=0.17.0 locale=zh-CN -->
42
+
43
+
3
44
  <!-- release-skill:changelog:start version=0.16.0 locale=zh-CN baseline=sha256:1db170e8f4ae8ca25301b4e5893d86a0f486218fa75f9bcc0ced2a5eba7d26d6 -->
4
45
  ## [0.16.0] - 2026-08-31
5
46
 
package/README.md CHANGED
@@ -4,23 +4,26 @@
4
4
 
5
5
  # skill-family-engineering-kit
6
6
 
7
- <!-- release-skill:release-version: 0.16.0 -->
7
+ <!-- release-skill:release-version: 0.18.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.16.0** (2026-08-31)
12
+ **0.18.0** (2026-09-05)
13
13
 
14
- Engineering Kit 0.16.0 tightens the candidate host-verification regression around one common workload and consumer answer across five fixed drivers.
14
+ Engineering Kit 0.18.0 projects the stable Harness replaceFixedSetAtomic export into the existing offline Quickstart Bundle.
15
+
16
+ **Added**
17
+
18
+ - The existing candidate Bundle now carries the stable fixed-set replacement source, loader, native closure, and replaceFixedSetAtomic export without adding a parallel implementation or a new Kit command.
15
19
 
16
20
  **Changed**
17
21
 
18
- - Verifies that all five fixed host drivers consume the same candidate bindings and expose the caller's business answer through the existing runHostVerification path.
19
- - Keeps host-managed state, domain acceptance, and real-host qualification outside Foundation; no new Kit command or lifecycle capability is added.
22
+ - Moves the package version to 0.18.0 together with Contracts and Harness while preserving runProjection as the Bundle write and authorization boundary.
20
23
 
21
24
  **Upgrade Notes**
22
25
 
23
- The five-host check exercises the existing candidate API and does not turn a fixture or test result into real-host qualification. Consumers still own domain assertions and host authorization.
26
+ Pin all three Foundation packages to exactly 0.18.0 and rebuild managed Bundles from those exact installed package bytes. Bundle consumers receive the same non-idempotent replacement semantics and must not retry post-commit or indeterminate outcomes blindly.
24
27
  <!-- release-skill:managed:end id=latest-release -->
25
28
 
26
29
  ### Foundation 0.15.0 candidate qualification entries
@@ -50,7 +53,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
50
53
 
51
54
  ## Installation and Minimal Example
52
55
 
53
- Version 0.16.0 is a local candidate. Build all three tarballs into one temporary directory and install those exact files for a candidate check:
56
+ Version 0.18.0 is a local candidate. Build all three tarballs into one temporary directory and install those exact files for a candidate check:
54
57
 
55
58
  ```sh
56
59
  pack_dir="$(mktemp -d)"
@@ -58,21 +61,21 @@ pack_dir="$(mktemp -d)"
58
61
  (cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
59
62
  (cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
60
63
  mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
61
- (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.16.0.tgz" "$pack_dir/skill-family-harness-node-0.16.0.tgz" "$pack_dir/skill-family-engineering-kit-0.16.0.tgz")
64
+ (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.18.0.tgz" "$pack_dir/skill-family-harness-node-0.18.0.tgz" "$pack_dir/skill-family-engineering-kit-0.18.0.tgz")
62
65
  ```
63
66
 
64
67
  After publication, use the registry coordinate:
65
68
 
66
69
  ```sh
67
- npm install --save-dev skill-family-engineering-kit@0.16.0
68
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit --help
69
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
70
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale en --uses ./uses.json
71
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit projection --root <repo>
72
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit check --root <repo>
70
+ npm install --save-dev skill-family-engineering-kit@0.18.0
71
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit --help
72
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
73
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale en --uses ./uses.json
74
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit projection --root <repo>
75
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit check --root <repo>
73
76
  ```
74
77
 
75
- 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.16.0 -- skill-family-kit --help`.
78
+ 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.18.0 -- skill-family-kit --help`.
76
79
 
77
80
  ### Three adoption journeys
78
81
 
@@ -291,4 +294,4 @@ The candidate `runPluginVerification({ request, bindings, hostsRoot })` preserve
291
294
 
292
295
  The separate `runSkillFamilyDirectoryVerification({ request, bindings })` entry fixes the Kimi production argv and narrow environment and rejects caller observation. Its raw parser is exercised through the production process path, but no controlled fixture event is promoted to `observed`; without an official typed mapping, the public result remains `indeterminate` and a manual candidate.
293
296
 
294
- Version 0.16.0 is a local source candidate and is not published. Consume the three locally verified tarballs; a version marker, unit test or successful install is not complete contract integration, migration completion, or real-host qualification.
297
+ Version 0.18.0 is a local source candidate and is not published. Consume the three locally verified tarballs; a version marker, unit test or successful install is not complete contract integration, migration completion, or real-host qualification.
package/README.zh-CN.md CHANGED
@@ -5,23 +5,26 @@
5
5
 
6
6
  # skill-family-engineering-kit
7
7
 
8
- <!-- release-skill:release-version: 0.16.0 -->
8
+ <!-- release-skill:release-version: 0.18.0 -->
9
9
 
10
10
  开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
11
11
 
12
12
  <!-- release-skill:managed:start id=latest-release -->
13
- **0.16.0** (2026-08-31)
13
+ **0.18.0** (2026-09-05)
14
14
 
15
- Engineering Kit 0.16.0 收紧五个固定 driver 的候选宿主验证回归,要求共用一个 workload 并核对消费者业务答案。
15
+ Engineering Kit 0.18.0 Harness 稳定的 replaceFixedSetAtomic 导出投影到既有离线 Quickstart Bundle。
16
+
17
+ **新增**
18
+
19
+ - 既有 candidate Bundle 携带稳定的固定集合替换源码、加载器、原生闭包与 replaceFixedSetAtomic 导出;不新增平行实现,也不增加 Kit 命令。
16
20
 
17
21
  **变更**
18
22
 
19
- - 通过既有 `runHostVerification` 路径核对 Claude、Codex、Kimi、Qoder WorkBuddy 使用同一候选绑定,并暴露调用方的业务答案。
20
- - 保持宿主管理状态、领域接受规则和真实宿主资格归调用方负责;不新增 Kit 命令或生命周期能力。
23
+ - 包版本与 Contracts、Harness 一同升至 0.18.0,runProjection 继续作为 Bundle 的写入与授权边界。
21
24
 
22
25
  **升级说明**
23
26
 
24
- 五宿主检查只验证现有候选 API,不会把 fixture 或测试结果升级为真实宿主资格;领域断言与宿主授权仍由消费者负责。
27
+ 三个 Foundation 包须一起精确锁定到 0.18.0,并从这些已安装包的精确字节重建受管 Bundle。Bundle 消费者获得相同的非幂等替换语义,不得盲目重试提交后或不确定结果。
25
28
  <!-- release-skill:managed:end id=latest-release -->
26
29
 
27
30
  ### Foundation 0.15.0 candidate 资格入口
@@ -51,7 +54,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
51
54
 
52
55
  ## 安装和最小示例
53
56
 
54
- 0.16.0 是本地候选版本。候选验证先把三个包分别打入同一个临时目录,再安装这三个精确 tarball:
57
+ 0.18.0 是本地候选版本。候选验证先把三个包分别打入同一个临时目录,再安装这三个精确 tarball:
55
58
 
56
59
  ```sh
57
60
  pack_dir="$(mktemp -d)"
@@ -59,21 +62,21 @@ pack_dir="$(mktemp -d)"
59
62
  (cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
60
63
  (cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
61
64
  mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
62
- (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.16.0.tgz" "$pack_dir/skill-family-harness-node-0.16.0.tgz" "$pack_dir/skill-family-engineering-kit-0.16.0.tgz")
65
+ (cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.18.0.tgz" "$pack_dir/skill-family-harness-node-0.18.0.tgz" "$pack_dir/skill-family-engineering-kit-0.18.0.tgz")
63
66
  ```
64
67
 
65
68
  发布后再使用 registry 坐标:
66
69
 
67
70
  ```sh
68
- npm install --save-dev skill-family-engineering-kit@0.16.0
69
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit --help
70
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
71
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale zh-CN --uses ./uses.json
72
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit projection --root <repo>
73
- npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit check --root <repo>
71
+ npm install --save-dev skill-family-engineering-kit@0.18.0
72
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit --help
73
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
74
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale zh-CN --uses ./uses.json
75
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit projection --root <repo>
76
+ npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit check --root <repo>
74
77
  ```
75
78
 
76
- 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.16.0 -- skill-family-kit --help`。
79
+ 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit --help`。
77
80
 
78
81
  ### 三条采用旅程
79
82
 
@@ -292,4 +295,4 @@ Foundation 本身不发起网络请求,但绑定的 executable 仍可能联网
292
295
 
293
296
  独立入口 `runSkillFamilyDirectoryVerification({ request, bindings })` 固定 Kimi 生产 argv 与窄环境,并拒绝调用方 observation。原始 parser 通过生产进程路径验证,但受控 fixture 事件不会被提升为 `observed`;缺少官方 typed mapping 时,公共结果保持 `indeterminate` 和 manual candidate。
294
297
 
295
- 0.16.0 为本地源码候选,尚未发布。消费本地已验证的三包 tarball;版本标记、单元测试或安装成功都不等于契约接入完成、迁移完成或真实宿主资格。
298
+ 0.18.0 为本地源码候选,尚未发布。消费本地已验证的三包 tarball;版本标记、单元测试或安装成功都不等于契约接入完成、迁移完成或真实宿主资格。
@@ -1124,7 +1124,7 @@ function runnerSource() {
1124
1124
  'export { validateQuickstartProfileDocument } from "./runtime/contracts-candidate/index.mjs";',
1125
1125
  'export { validateBySchemaId } from "./validators.mjs";',
1126
1126
  'export { createFilesystemRootBinding, readFileBound } from "./runtime/harness/bound-read.mjs";',
1127
- 'export { createFixedSetPublicationManifest, publishFixedSet } from "./runtime/harness/fixed-set-publication.mjs";',
1127
+ 'export { createFixedSetPublicationManifest, publishFixedSet, replaceFixedSetAtomic } from "./runtime/harness/fixed-set-publication.mjs";',
1128
1128
  'export { publishFileExclusive, publishFileOrReplace, replaceFileAtomic } from "./runtime/harness/atomic.mjs";',
1129
1129
  'export { acquireFilesystemLock, inspectFilesystemLock, releaseFilesystemLock, recoverFilesystemLock } from "./runtime/harness/token-lock.mjs";',
1130
1130
  'import { invokeFoundationMechanism as invokeHarnessMechanism } from "./runtime/harness/quickstart-profile.mjs";',
@@ -2128,6 +2128,53 @@
2128
2128
  "Return malicious-concurrency threats to Foundation as a minimal capability gap; do not copy a walker, native addon, Harness, schema, Registry, runner or receipt chain locally"
2129
2129
  ]
2130
2130
  },
2131
+ {
2132
+ "id": "foundation.harness.fixed-set-publication",
2133
+ "intent": "Publish one complete fixed set without replacement, or atomically exchange one complete staged sibling with an existing target directory",
2134
+ "useWhen": [
2135
+ "Need to publish a complete directory only when the target is absent",
2136
+ "Need to replace one existing directory with a complete staged sibling under the same canonical parent"
2137
+ ],
2138
+ "doNotUseWhen": [
2139
+ "Source and target cannot be real sibling directories under one canonical parent",
2140
+ "Need a copy, merge, backup, automatic rollback or retry workflow"
2141
+ ],
2142
+ "prerequisites": [
2143
+ "Install exact matching versions of all three Foundation packages on a packaged Darwin or Linux GNU platform",
2144
+ "Source and target trees contain only real directories and single-link regular files",
2145
+ "The caller exclusively controls both directory names for the duration of the call"
2146
+ ],
2147
+ "inputs": [
2148
+ "createFixedSetPublicationManifest and publishFixedSet take a complete source, target parent, safe target segment and frozen manifest",
2149
+ "replaceFixedSetAtomic takes { sourceRoot, targetParent, targetSegment } for an existing target sibling"
2150
+ ],
2151
+ "outputs": [
2152
+ "No-replace publication returns a structured publication receipt",
2153
+ "Verified replacement returns both paths, published and displaced closure digests, and published, committed, verified, namespace-synced state"
2154
+ ],
2155
+ "sideEffects": [
2156
+ "No-replace publication moves the source directory to an absent target after verification",
2157
+ "Replacement performs one native directory exchange and leaves the displaced target at sourceRoot; Foundation deletes neither side"
2158
+ ],
2159
+ "failureSemantics": [
2160
+ "Supported pre-commit replacement failure preserves the original target path and bytes",
2161
+ "Replacement mechanism failures use SFC2004 with atomic-replace-failed and a phase, publication, commit, verification and durability tuple",
2162
+ "Unsupported replacement platforms use SFC2004 with unsupported-platform"
2163
+ ],
2164
+ "invariants": [
2165
+ "Neither path falls back to a JavaScript check-then-rename sequence",
2166
+ "Replacement commits through one Darwin RENAME_SWAP or Linux RENAME_EXCHANGE under one verified parent handle",
2167
+ "Replacement is not idempotent; the same call exchanges the directories back"
2168
+ ],
2169
+ "ownedByCaller": [
2170
+ "Meaning and acceptance of the directory contents",
2171
+ "Staging lifecycle, cleanup of the displaced target after verified success, and recovery decisions after post-commit or indeterminate failure"
2172
+ ],
2173
+ "routeElsewhere": [
2174
+ "Remote release authorization and publication: route to release-skill",
2175
+ "Directory rendering and payload selection: keep in the consuming product"
2176
+ ]
2177
+ },
2131
2178
  {
2132
2179
  "id": "foundation.harness.executable-identity-observation",
2133
2180
  "intent": "Observe an explicitly bound executable entry, symlink chain, interpreter and launch bytes as a read-only point-in-time fact for an immediately pre-launch re-observation",
@@ -702,6 +702,7 @@
702
702
  "entrypoints": [
703
703
  "scaffoldTarget (packages/skill-family-engineering-kit/src/scaffold.mjs)",
704
704
  "describeSkeletonFiles (packages/skill-family-engineering-kit/src/skeleton.mjs)",
705
+ "describeSkeletonReferenceImplementation (packages/skill-family-engineering-kit/src/skeleton.mjs)",
705
706
  "normalizeSkeletonInputs (packages/skill-family-engineering-kit/src/skeleton.mjs)"
706
707
  ],
707
708
  "sourceRefs": [
@@ -1394,6 +1395,32 @@
1394
1395
  "migration": "none",
1395
1396
  "promotionPolicy": "consumer-transparent"
1396
1397
  },
1398
+ {
1399
+ "id": "foundation.harness.fixed-set-publication",
1400
+ "package": "skill-family-harness-node",
1401
+ "layer": "harness",
1402
+ "since": "0.9.0",
1403
+ "stability": "stable",
1404
+ "adoptionScopes": ["harness", "engineering-kit"],
1405
+ "entrypoints": [
1406
+ "skill-family-harness-node: createFixedSetPublicationManifest, publishFixedSet, replaceFixedSetAtomic (packages/skill-family-harness-node/src/fixed-set-publication.mjs)",
1407
+ "skill-family-harness-node/fixed-set-publication: createFixedSetPublicationManifest, publishFixedSet, replaceFixedSetAtomic (packages/skill-family-harness-node/src/fixed-set-publication.mjs)"
1408
+ ],
1409
+ "sourceRefs": [
1410
+ "packages/skill-family-harness-node/src/fixed-set-publication.mjs",
1411
+ "packages/skill-family-harness-node/src/fixed-set-publication-loader.mjs",
1412
+ "packages/skill-family-harness-node/src/native/bound_read.c",
1413
+ "packages/skill-family-engineering-kit/candidate/profile-bundle.mjs"
1414
+ ],
1415
+ "positiveTestRefs": [
1416
+ "packages/skill-family-harness-node/test/stable-filesystem-operations.test.mjs",
1417
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1418
+ ],
1419
+ "negativeTestRefs": [
1420
+ "packages/skill-family-harness-node/test/stable-filesystem-operations.test.mjs",
1421
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1422
+ ]
1423
+ },
1397
1424
  {
1398
1425
  "id": "foundation.harness.executable-identity-observation",
1399
1426
  "package": "skill-family-harness-node",
@@ -2127,6 +2127,53 @@
2127
2127
  "恶意并发威胁交回 Foundation 形成最小能力缺口;不得本地复制 walker、native addon、Harness、schema、Registry、runner 或 receipt 链"
2128
2128
  ]
2129
2129
  },
2130
+ {
2131
+ "id": "foundation.harness.fixed-set-publication",
2132
+ "intent": "在目标缺失时发布一个完整固定集合,或把一个完整暂存兄弟目录与既有目标目录原子交换",
2133
+ "useWhen": [
2134
+ "只在目标缺失时发布一棵完整目录树",
2135
+ "用同一规范父目录下的完整暂存兄弟目录替换一个既有目录"
2136
+ ],
2137
+ "doNotUseWhen": [
2138
+ "源目录和目标目录无法成为同一规范父目录下的真实兄弟目录",
2139
+ "需要复制、合并、备份、自动回滚或重试流程"
2140
+ ],
2141
+ "prerequisites": [
2142
+ "在带有固定预构建闭包的 Darwin 或 Linux GNU 平台安装精确匹配的三个 Foundation 包版本",
2143
+ "源树和目标树只含真实目录与单链接普通文件",
2144
+ "调用期间由调用方独占两个目录名称"
2145
+ ],
2146
+ "inputs": [
2147
+ "createFixedSetPublicationManifest 与 publishFixedSet 接收完整源目录、目标父目录、安全目标段和冻结 manifest",
2148
+ "replaceFixedSetAtomic 为既有兄弟目标接收 { sourceRoot, targetParent, targetSegment }"
2149
+ ],
2150
+ "outputs": [
2151
+ "不替换发布返回结构化 publication receipt",
2152
+ "确认替换成功后返回两个路径、发布与被置换闭包摘要,以及 published、committed、verified、namespace-synced 状态"
2153
+ ],
2154
+ "sideEffects": [
2155
+ "不替换发布经验证后,把源目录移动到不存在的目标路径",
2156
+ "替换执行一次原生目录交换,被置换的旧目标留在 sourceRoot;Foundation 不删除任一侧"
2157
+ ],
2158
+ "failureSemantics": [
2159
+ "受支持的提交前替换失败保留原目标路径和字节",
2160
+ "替换机制失败使用 SFC2004 与 atomic-replace-failed,并携带阶段、发布、提交、验证和持久化状态 tuple",
2161
+ "不支持替换的平台使用 SFC2004 与 unsupported-platform"
2162
+ ],
2163
+ "invariants": [
2164
+ "两条路径都不降级到 JavaScript 检查后改名序列",
2165
+ "替换在一个已验证父目录句柄下,通过一次 Darwin RENAME_SWAP 或 Linux RENAME_EXCHANGE 提交",
2166
+ "替换不是幂等操作;相同调用会把两个目录交换回去"
2167
+ ],
2168
+ "ownedByCaller": [
2169
+ "目录内容的含义与接受策略",
2170
+ "暂存目录生命周期、确认成功后的旧目标清理,以及提交后或不确定失败的恢复决定"
2171
+ ],
2172
+ "routeElsewhere": [
2173
+ "远程发布授权与发布动作交给 release-skill",
2174
+ "目录渲染与载荷选择留在消费产品"
2175
+ ]
2176
+ },
2130
2177
  {
2131
2178
  "id": "foundation.harness.executable-identity-observation",
2132
2179
  "intent": "逐次只读观察显式绑定根中的可执行入口、符号链接链、脚本解释器与启动字节,供消费者在启动前紧邻重观察",
@@ -5,6 +5,11 @@
5
5
  "displayName": "CodeBuddy",
6
6
  "support": "manual",
7
7
  "maturity": "manual",
8
+ "verification": {
9
+ "driverId": "codebuddy-print-v1",
10
+ "authStrategy": "existing-user-state",
11
+ "credentialMutation": "host-managed"
12
+ },
8
13
  "sourceAliases": [],
9
14
  "pathCategories": [],
10
15
  "probeCapabilities": [
@@ -2128,6 +2128,53 @@
2128
2128
  "Return malicious-concurrency threats to Foundation as a minimal capability gap; do not copy a walker, native addon, Harness, schema, Registry, runner or receipt chain locally"
2129
2129
  ]
2130
2130
  },
2131
+ {
2132
+ "id": "foundation.harness.fixed-set-publication",
2133
+ "intent": "Publish one complete fixed set without replacement, or atomically exchange one complete staged sibling with an existing target directory",
2134
+ "useWhen": [
2135
+ "Need to publish a complete directory only when the target is absent",
2136
+ "Need to replace one existing directory with a complete staged sibling under the same canonical parent"
2137
+ ],
2138
+ "doNotUseWhen": [
2139
+ "Source and target cannot be real sibling directories under one canonical parent",
2140
+ "Need a copy, merge, backup, automatic rollback or retry workflow"
2141
+ ],
2142
+ "prerequisites": [
2143
+ "Install exact matching versions of all three Foundation packages on a packaged Darwin or Linux GNU platform",
2144
+ "Source and target trees contain only real directories and single-link regular files",
2145
+ "The caller exclusively controls both directory names for the duration of the call"
2146
+ ],
2147
+ "inputs": [
2148
+ "createFixedSetPublicationManifest and publishFixedSet take a complete source, target parent, safe target segment and frozen manifest",
2149
+ "replaceFixedSetAtomic takes { sourceRoot, targetParent, targetSegment } for an existing target sibling"
2150
+ ],
2151
+ "outputs": [
2152
+ "No-replace publication returns a structured publication receipt",
2153
+ "Verified replacement returns both paths, published and displaced closure digests, and published, committed, verified, namespace-synced state"
2154
+ ],
2155
+ "sideEffects": [
2156
+ "No-replace publication moves the source directory to an absent target after verification",
2157
+ "Replacement performs one native directory exchange and leaves the displaced target at sourceRoot; Foundation deletes neither side"
2158
+ ],
2159
+ "failureSemantics": [
2160
+ "Supported pre-commit replacement failure preserves the original target path and bytes",
2161
+ "Replacement mechanism failures use SFC2004 with atomic-replace-failed and a phase, publication, commit, verification and durability tuple",
2162
+ "Unsupported replacement platforms use SFC2004 with unsupported-platform"
2163
+ ],
2164
+ "invariants": [
2165
+ "Neither path falls back to a JavaScript check-then-rename sequence",
2166
+ "Replacement commits through one Darwin RENAME_SWAP or Linux RENAME_EXCHANGE under one verified parent handle",
2167
+ "Replacement is not idempotent; the same call exchanges the directories back"
2168
+ ],
2169
+ "ownedByCaller": [
2170
+ "Meaning and acceptance of the directory contents",
2171
+ "Staging lifecycle, cleanup of the displaced target after verified success, and recovery decisions after post-commit or indeterminate failure"
2172
+ ],
2173
+ "routeElsewhere": [
2174
+ "Remote release authorization and publication: route to release-skill",
2175
+ "Directory rendering and payload selection: keep in the consuming product"
2176
+ ]
2177
+ },
2131
2178
  {
2132
2179
  "id": "foundation.harness.executable-identity-observation",
2133
2180
  "intent": "Observe an explicitly bound executable entry, symlink chain, interpreter and launch bytes as a read-only point-in-time fact for an immediately pre-launch re-observation",
@@ -702,6 +702,7 @@
702
702
  "entrypoints": [
703
703
  "scaffoldTarget (packages/skill-family-engineering-kit/src/scaffold.mjs)",
704
704
  "describeSkeletonFiles (packages/skill-family-engineering-kit/src/skeleton.mjs)",
705
+ "describeSkeletonReferenceImplementation (packages/skill-family-engineering-kit/src/skeleton.mjs)",
705
706
  "normalizeSkeletonInputs (packages/skill-family-engineering-kit/src/skeleton.mjs)"
706
707
  ],
707
708
  "sourceRefs": [
@@ -1394,6 +1395,32 @@
1394
1395
  "migration": "none",
1395
1396
  "promotionPolicy": "consumer-transparent"
1396
1397
  },
1398
+ {
1399
+ "id": "foundation.harness.fixed-set-publication",
1400
+ "package": "skill-family-harness-node",
1401
+ "layer": "harness",
1402
+ "since": "0.9.0",
1403
+ "stability": "stable",
1404
+ "adoptionScopes": ["harness", "engineering-kit"],
1405
+ "entrypoints": [
1406
+ "skill-family-harness-node: createFixedSetPublicationManifest, publishFixedSet, replaceFixedSetAtomic (packages/skill-family-harness-node/src/fixed-set-publication.mjs)",
1407
+ "skill-family-harness-node/fixed-set-publication: createFixedSetPublicationManifest, publishFixedSet, replaceFixedSetAtomic (packages/skill-family-harness-node/src/fixed-set-publication.mjs)"
1408
+ ],
1409
+ "sourceRefs": [
1410
+ "packages/skill-family-harness-node/src/fixed-set-publication.mjs",
1411
+ "packages/skill-family-harness-node/src/fixed-set-publication-loader.mjs",
1412
+ "packages/skill-family-harness-node/src/native/bound_read.c",
1413
+ "packages/skill-family-engineering-kit/candidate/profile-bundle.mjs"
1414
+ ],
1415
+ "positiveTestRefs": [
1416
+ "packages/skill-family-harness-node/test/stable-filesystem-operations.test.mjs",
1417
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1418
+ ],
1419
+ "negativeTestRefs": [
1420
+ "packages/skill-family-harness-node/test/stable-filesystem-operations.test.mjs",
1421
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1422
+ ]
1423
+ },
1397
1424
  {
1398
1425
  "id": "foundation.harness.executable-identity-observation",
1399
1426
  "package": "skill-family-harness-node",
@@ -2127,6 +2127,53 @@
2127
2127
  "恶意并发威胁交回 Foundation 形成最小能力缺口;不得本地复制 walker、native addon、Harness、schema、Registry、runner 或 receipt 链"
2128
2128
  ]
2129
2129
  },
2130
+ {
2131
+ "id": "foundation.harness.fixed-set-publication",
2132
+ "intent": "在目标缺失时发布一个完整固定集合,或把一个完整暂存兄弟目录与既有目标目录原子交换",
2133
+ "useWhen": [
2134
+ "只在目标缺失时发布一棵完整目录树",
2135
+ "用同一规范父目录下的完整暂存兄弟目录替换一个既有目录"
2136
+ ],
2137
+ "doNotUseWhen": [
2138
+ "源目录和目标目录无法成为同一规范父目录下的真实兄弟目录",
2139
+ "需要复制、合并、备份、自动回滚或重试流程"
2140
+ ],
2141
+ "prerequisites": [
2142
+ "在带有固定预构建闭包的 Darwin 或 Linux GNU 平台安装精确匹配的三个 Foundation 包版本",
2143
+ "源树和目标树只含真实目录与单链接普通文件",
2144
+ "调用期间由调用方独占两个目录名称"
2145
+ ],
2146
+ "inputs": [
2147
+ "createFixedSetPublicationManifest 与 publishFixedSet 接收完整源目录、目标父目录、安全目标段和冻结 manifest",
2148
+ "replaceFixedSetAtomic 为既有兄弟目标接收 { sourceRoot, targetParent, targetSegment }"
2149
+ ],
2150
+ "outputs": [
2151
+ "不替换发布返回结构化 publication receipt",
2152
+ "确认替换成功后返回两个路径、发布与被置换闭包摘要,以及 published、committed、verified、namespace-synced 状态"
2153
+ ],
2154
+ "sideEffects": [
2155
+ "不替换发布经验证后,把源目录移动到不存在的目标路径",
2156
+ "替换执行一次原生目录交换,被置换的旧目标留在 sourceRoot;Foundation 不删除任一侧"
2157
+ ],
2158
+ "failureSemantics": [
2159
+ "受支持的提交前替换失败保留原目标路径和字节",
2160
+ "替换机制失败使用 SFC2004 与 atomic-replace-failed,并携带阶段、发布、提交、验证和持久化状态 tuple",
2161
+ "不支持替换的平台使用 SFC2004 与 unsupported-platform"
2162
+ ],
2163
+ "invariants": [
2164
+ "两条路径都不降级到 JavaScript 检查后改名序列",
2165
+ "替换在一个已验证父目录句柄下,通过一次 Darwin RENAME_SWAP 或 Linux RENAME_EXCHANGE 提交",
2166
+ "替换不是幂等操作;相同调用会把两个目录交换回去"
2167
+ ],
2168
+ "ownedByCaller": [
2169
+ "目录内容的含义与接受策略",
2170
+ "暂存目录生命周期、确认成功后的旧目标清理,以及提交后或不确定失败的恢复决定"
2171
+ ],
2172
+ "routeElsewhere": [
2173
+ "远程发布授权与发布动作交给 release-skill",
2174
+ "目录渲染与载荷选择留在消费产品"
2175
+ ]
2176
+ },
2130
2177
  {
2131
2178
  "id": "foundation.harness.executable-identity-observation",
2132
2179
  "intent": "逐次只读观察显式绑定根中的可执行入口、符号链接链、脚本解释器与启动字节,供消费者在启动前紧邻重观察",