skill-family-engineering-kit 0.17.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 +19 -0
- package/CHANGELOG.zh-CN.md +19 -0
- package/README.md +16 -19
- package/README.zh-CN.md +16 -19
- package/candidate/profile-bundle.mjs +1 -1
- package/data/capability-catalog/capability-catalog.en.json +47 -0
- package/data/capability-catalog/capability-catalog.json +26 -0
- package/data/capability-catalog/capability-catalog.zh-CN.json +47 -0
- package/docs/agents/capability-catalog.en.json +47 -0
- package/docs/agents/capability-catalog.json +26 -0
- package/docs/agents/capability-catalog.zh-CN.json +47 -0
- package/docs/architecture/index.html +1 -1
- package/docs/en/architecture/index.html +1 -1
- package/docs/public/status/index.html +3 -3
- package/docs/reference/api/harness/index.html +36 -1
- package/docs/search/search_index.json +1 -1
- package/package.json +3 -3
- package/release-notes/0.18.0.yaml +19 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
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
|
+
|
|
3
22
|
<!-- release-skill:changelog:start version=0.17.0 locale=en baseline=sha256:c09a3edaeab4e9f29527900bff5baaa7f7be185a9270ce81f450fab8ec9fb16f -->
|
|
4
23
|
## [0.17.0] - 2026-09-01
|
|
5
24
|
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
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
|
+
|
|
3
22
|
<!-- release-skill:changelog:start version=0.17.0 locale=zh-CN baseline=sha256:7c413da3ad02837bdd63a1b49a5dc78cefe15a9779a05ce070876f817d09ae65 -->
|
|
4
23
|
## [0.17.0] - 2026-09-01
|
|
5
24
|
|
package/README.md
CHANGED
|
@@ -4,29 +4,26 @@
|
|
|
4
4
|
|
|
5
5
|
# skill-family-engineering-kit
|
|
6
6
|
|
|
7
|
-
<!-- release-skill:release-version: 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.
|
|
12
|
+
**0.18.0** (2026-09-05)
|
|
13
13
|
|
|
14
|
-
Engineering Kit 0.
|
|
14
|
+
Engineering Kit 0.18.0 projects the stable Harness replaceFixedSetAtomic export into the existing offline Quickstart Bundle.
|
|
15
15
|
|
|
16
16
|
**Added**
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
- Adds describeSkeletonReferenceImplementation and returns its identity from scaffoldTarget.
|
|
20
|
-
- 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.
|
|
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.
|
|
21
19
|
|
|
22
20
|
**Changed**
|
|
23
21
|
|
|
24
|
-
-
|
|
25
|
-
- Keeps host-managed login state, domain acceptance, and real-host qualification under consumer ownership.
|
|
22
|
+
- Moves the package version to 0.18.0 together with Contracts and Harness while preserving runProjection as the Bundle write and authorization boundary.
|
|
26
23
|
|
|
27
24
|
**Upgrade Notes**
|
|
28
25
|
|
|
29
|
-
Pin all three Foundation packages to exactly 0.
|
|
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.
|
|
30
27
|
<!-- release-skill:managed:end id=latest-release -->
|
|
31
28
|
|
|
32
29
|
### Foundation 0.15.0 candidate qualification entries
|
|
@@ -56,7 +53,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
|
|
|
56
53
|
|
|
57
54
|
## Installation and Minimal Example
|
|
58
55
|
|
|
59
|
-
Version 0.
|
|
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:
|
|
60
57
|
|
|
61
58
|
```sh
|
|
62
59
|
pack_dir="$(mktemp -d)"
|
|
@@ -64,21 +61,21 @@ pack_dir="$(mktemp -d)"
|
|
|
64
61
|
(cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
|
|
65
62
|
(cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
|
|
66
63
|
mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
|
|
67
|
-
(cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.
|
|
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")
|
|
68
65
|
```
|
|
69
66
|
|
|
70
67
|
After publication, use the registry coordinate:
|
|
71
68
|
|
|
72
69
|
```sh
|
|
73
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
74
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
75
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
76
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
77
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
78
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
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>
|
|
79
76
|
```
|
|
80
77
|
|
|
81
|
-
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.
|
|
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`.
|
|
82
79
|
|
|
83
80
|
### Three adoption journeys
|
|
84
81
|
|
|
@@ -297,4 +294,4 @@ The candidate `runPluginVerification({ request, bindings, hostsRoot })` preserve
|
|
|
297
294
|
|
|
298
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.
|
|
299
296
|
|
|
300
|
-
Version 0.
|
|
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,29 +5,26 @@
|
|
|
5
5
|
|
|
6
6
|
# skill-family-engineering-kit
|
|
7
7
|
|
|
8
|
-
<!-- release-skill:release-version: 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.
|
|
13
|
+
**0.18.0** (2026-09-05)
|
|
14
14
|
|
|
15
|
-
Engineering Kit 0.
|
|
15
|
+
Engineering Kit 0.18.0 将 Harness 稳定的 replaceFixedSetAtomic 导出投影到既有离线 Quickstart Bundle。
|
|
16
16
|
|
|
17
17
|
**新增**
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
- 新增 describeSkeletonReferenceImplementation,并由 scaffoldTarget 返回该参考骨架身份。
|
|
21
|
-
- adopt-plan 新增须成对使用的 --engineering-baseline 与 --compare-skeleton。结果只报告参考侧独有、目标侧独有、条目类型和文件类别差异,不裁定合规、等价、严重程度或豁免。
|
|
19
|
+
- 既有 candidate Bundle 携带稳定的固定集合替换源码、加载器、原生闭包与 replaceFixedSetAtomic 导出;不新增平行实现,也不增加 Kit 命令。
|
|
22
20
|
|
|
23
21
|
**变更**
|
|
24
22
|
|
|
25
|
-
-
|
|
26
|
-
- 宿主管理的登录态、领域验收和真实宿主资格继续归消费者负责。
|
|
23
|
+
- 包版本与 Contracts、Harness 一同升至 0.18.0,runProjection 继续作为 Bundle 的写入与授权边界。
|
|
27
24
|
|
|
28
25
|
**升级说明**
|
|
29
26
|
|
|
30
|
-
三个 Foundation 包须一起精确锁定到 0.
|
|
27
|
+
三个 Foundation 包须一起精确锁定到 0.18.0,并从这些已安装包的精确字节重建受管 Bundle。Bundle 消费者获得相同的非幂等替换语义,不得盲目重试提交后或不确定结果。
|
|
31
28
|
<!-- release-skill:managed:end id=latest-release -->
|
|
32
29
|
|
|
33
30
|
### Foundation 0.15.0 candidate 资格入口
|
|
@@ -57,7 +54,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
|
|
|
57
54
|
|
|
58
55
|
## 安装和最小示例
|
|
59
56
|
|
|
60
|
-
0.
|
|
57
|
+
0.18.0 是本地候选版本。候选验证先把三个包分别打入同一个临时目录,再安装这三个精确 tarball:
|
|
61
58
|
|
|
62
59
|
```sh
|
|
63
60
|
pack_dir="$(mktemp -d)"
|
|
@@ -65,21 +62,21 @@ pack_dir="$(mktemp -d)"
|
|
|
65
62
|
(cd packages/skill-family-harness-node && pnpm pack --pack-destination "$pack_dir")
|
|
66
63
|
(cd packages/skill-family-engineering-kit && pnpm pack --pack-destination "$pack_dir")
|
|
67
64
|
mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
|
|
68
|
-
(cd "$pack_dir/consumer" && npm install "$pack_dir/skill-family-contracts-0.
|
|
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")
|
|
69
66
|
```
|
|
70
67
|
|
|
71
68
|
发布后再使用 registry 坐标:
|
|
72
69
|
|
|
73
70
|
```sh
|
|
74
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
75
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
76
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
77
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
78
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
79
|
-
npm exec --package=skill-family-engineering-kit@0.
|
|
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>
|
|
80
77
|
```
|
|
81
78
|
|
|
82
|
-
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.
|
|
79
|
+
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit --help`。
|
|
83
80
|
|
|
84
81
|
### 三条采用旅程
|
|
85
82
|
|
|
@@ -298,4 +295,4 @@ Foundation 本身不发起网络请求,但绑定的 executable 仍可能联网
|
|
|
298
295
|
|
|
299
296
|
独立入口 `runSkillFamilyDirectoryVerification({ request, bindings })` 固定 Kimi 生产 argv 与窄环境,并拒绝调用方 observation。原始 parser 通过生产进程路径验证,但受控 fixture 事件不会被提升为 `observed`;缺少官方 typed mapping 时,公共结果保持 `indeterminate` 和 manual candidate。
|
|
300
297
|
|
|
301
|
-
0.
|
|
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",
|
|
@@ -1395,6 +1395,32 @@
|
|
|
1395
1395
|
"migration": "none",
|
|
1396
1396
|
"promotionPolicy": "consumer-transparent"
|
|
1397
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
|
+
},
|
|
1398
1424
|
{
|
|
1399
1425
|
"id": "foundation.harness.executable-identity-observation",
|
|
1400
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": "逐次只读观察显式绑定根中的可执行入口、符号链接链、脚本解释器与启动字节,供消费者在启动前紧邻重观察",
|
|
@@ -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",
|
|
@@ -1395,6 +1395,32 @@
|
|
|
1395
1395
|
"migration": "none",
|
|
1396
1396
|
"promotionPolicy": "consumer-transparent"
|
|
1397
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
|
+
},
|
|
1398
1424
|
{
|
|
1399
1425
|
"id": "foundation.harness.executable-identity-observation",
|
|
1400
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": "逐次只读观察显式绑定根中的可执行入口、符号链接链、脚本解释器与启动字节,供消费者在启动前紧邻重观察",
|
|
@@ -1980,7 +1980,7 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
1980
1980
|
- release-skill 发布状态与全部远端写入,不进入 Foundation
|
|
1981
1981
|
- Artifact Graph `artifacts/` 架构制品体系,门禁为 check:artifacts
|
|
1982
1982
|
</code></pre>
|
|
1983
|
-
<p>同一 Git workspace 还包含 <code>packages/foundation-adoption-review/</code
|
|
1983
|
+
<p>同一 Git workspace 还包含 <code>packages/foundation-adoption-review/</code>。它是独立的 Plugin release unit 和公开镜像源,从 0.17.0 起与 Foundation 数值对齐,历史 0.1.0 发布保持不变。它使用 Foundation 的公开事实,但不属于 Contracts → Harness → Engineering Kit 依赖链,也不计作 Foundation 的第四个机制包。该 Plugin 的公开闭包由自己的 release unit 白名单限定;根目录的计划、制品、测试和其他私有文档不会进入 Plugin 镜像。</p>
|
|
1984
1984
|
<p>箭头指向被依赖方。公共核心不得反向依赖具体 Profile 或具体技能族;新能力的依赖方向落位见 <code>artifacts/design/FND-DES-001.md</code>,逐资产归属见 FND-ADR-002。</p>
|
|
1985
1985
|
<h2 id="职责矩阵">职责矩阵<a class="headerlink" href="#职责矩阵" title="Permanent link">¶</a></h2>
|
|
1986
1986
|
<p>每个分层只承担下表列出的职责,越界能力一律由外部项目或消费者拥有。</p>
|
|
@@ -1980,7 +1980,7 @@ Horizontal (attachment surfaces, no new vertical layers):
|
|
|
1980
1980
|
- release-skill release state and all remote writes; does not enter Foundation
|
|
1981
1981
|
- Artifact Graph the `artifacts/` architecture artifact system; its gate is check:artifacts
|
|
1982
1982
|
</code></pre>
|
|
1983
|
-
<p>The same Git workspace also contains <code>packages/foundation-adoption-review/</code>. It is an independent
|
|
1983
|
+
<p>The same Git workspace also contains <code>packages/foundation-adoption-review/</code>. It is an independent Plugin release unit and public-mirror source. Starting with 0.17.0, its version number aligns with Foundation while the historical 0.1.0 release remains unchanged. It consumes Foundation's public facts, but it is not part of the Contracts → Harness → Engineering Kit dependency chain and does not count as a fourth Foundation mechanism package. Its public closure is restricted by that release unit's own allowlist; the root's private plans, artifacts, tests, and other documents do not enter the Plugin mirror.</p>
|
|
1984
1984
|
<p>Arrows point to the depended-upon party. The public core must not depend in reverse on a concrete Profile or a concrete skill family; where a new capability's dependency direction lands is specified in <code>artifacts/design/FND-DES-001.md</code>, and asset-by-asset ownership is in FND-ADR-002.</p>
|
|
1985
1985
|
<h2 id="Responsibility-Matrix">Responsibility Matrix<a class="headerlink" href="#Responsibility-Matrix" title="Permanent link">¶</a></h2>
|
|
1986
1986
|
<p>Each layer assumes only the responsibilities listed below; out-of-scope capabilities are owned by external projects or consumers.</p>
|
|
@@ -1792,17 +1792,17 @@
|
|
|
1792
1792
|
<tbody>
|
|
1793
1793
|
<tr>
|
|
1794
1794
|
<td><code>skill-family-contracts</code></td>
|
|
1795
|
-
<td>0.
|
|
1795
|
+
<td>0.18.0</td>
|
|
1796
1796
|
<td><a href="https://github.com/ifoohoo/skill-family-contracts">ifoohoo/skill-family-contracts</a></td>
|
|
1797
1797
|
</tr>
|
|
1798
1798
|
<tr>
|
|
1799
1799
|
<td><code>skill-family-harness-node</code></td>
|
|
1800
|
-
<td>0.
|
|
1800
|
+
<td>0.18.0</td>
|
|
1801
1801
|
<td><a href="https://github.com/ifoohoo/skill-family-harness-node">ifoohoo/skill-family-harness-node</a></td>
|
|
1802
1802
|
</tr>
|
|
1803
1803
|
<tr>
|
|
1804
1804
|
<td><code>skill-family-engineering-kit</code></td>
|
|
1805
|
-
<td>0.
|
|
1805
|
+
<td>0.18.0</td>
|
|
1806
1806
|
<td><a href="https://github.com/ifoohoo/skill-family-engineering-kit">ifoohoo/skill-family-engineering-kit</a></td>
|
|
1807
1807
|
</tr>
|
|
1808
1808
|
</tbody>
|