skill-family-engineering-kit 0.8.3 → 0.9.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 +37 -0
- package/CHANGELOG.zh-CN.md +37 -0
- package/README.md +24 -9
- package/README.zh-CN.md +24 -9
- package/candidate/profile-bundle.mjs +104 -1
- package/docs/architecture/index.html +3 -3
- package/docs/integration/audit/index.html +2 -1
- package/docs/integration/audit/mutation-taxonomy/index.html +1 -1
- package/docs/integration/audit/version-compatibility/index.html +5 -3
- package/docs/public/status/index.html +3 -3
- package/docs/reference/api/contracts/index.html +105 -1
- package/docs/reference/api/engineering-kit/index.html +2 -0
- package/docs/reference/api/harness/index.html +140 -1
- package/docs/search/search_index.json +1 -1
- package/package.json +3 -3
- package/profile-spi/extension-spi.json +1 -1
- package/release-notes/0.8.4.yaml +19 -0
- package/release-notes/0.9.0.yaml +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.0 locale=en baseline=sha256:6419bbdc8d469e6dd7f9fda5995e5465cc6bf98724371f9f4aa9293a7e0d9f14 -->
|
|
4
|
+
## [0.9.0] - 2026-08-24
|
|
5
|
+
|
|
6
|
+
Engineering Kit 0.9.0 projects the stable filesystem schemas, bound-read Harness closure, and candidate ordered batch validation into the existing Quickstart Bundle.
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Projects the three stable filesystem schemas and two candidate batch schemas from Contracts authorities.
|
|
11
|
+
- Projects the stable bound-read entry and its exact native prebuild closure without adding a Kit command.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Keeps the four top-level Kit commands and Profile SPI candidate boundary unchanged.
|
|
16
|
+
|
|
17
|
+
### Upgrade Notes
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
<!-- release-skill:changelog:end version=0.9.0 locale=en -->
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
<!-- release-skill:changelog:start version=0.8.4 locale=en baseline=sha256:0f6ad4e641ae6ef85ea323e458aa6263aa6d87280e704ac1324742f83016d779 -->
|
|
24
|
+
## [0.8.4] - 2026-08-24
|
|
25
|
+
|
|
26
|
+
Lockstep Foundation 0.8.4 update documents validated external source authority without changing Kit commands or Profile SPI.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- Moves the package version to 0.8.4 together with Contracts and Harness.
|
|
31
|
+
- Documents that consumers validate a source-authority receipt through Contracts before passing the returned coordinates through the existing sourceRepository and sourceBaseCommit fields.
|
|
32
|
+
- Keeps the four stable top-level Kit commands, builder, Profile SPI, and public exports unchanged.
|
|
33
|
+
|
|
34
|
+
### Upgrade Notes
|
|
35
|
+
|
|
36
|
+
Pin all three Foundation packages to exactly 0.8.4. A provider Profile descriptor upgrading from 0.8.3 and Contracts 1.7.0 must mechanically update its base.contractsVersion field to 1.8.0. Existing functions and Schema shapes, Profile SPI v3, and the four Kit commands require no migration; source-authority consumers only add the Contracts validation step before invoking the existing builder surface.
|
|
37
|
+
<!-- release-skill:changelog:end version=0.8.4 locale=en -->
|
|
38
|
+
|
|
39
|
+
|
|
3
40
|
<!-- release-skill:changelog:start version=0.8.3 locale=en baseline=sha256:93875982c9f941309d63e40d5758b0fe7b20d74242f71934c3fd3cd90fe6ba52 -->
|
|
4
41
|
## [0.8.3] - 2026-08-23
|
|
5
42
|
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# 变更日志
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.9.0 locale=zh-CN baseline=sha256:c84db7b53f562cbdad947ccf8fcc23209f18137100270b2691bab7d9a7ad623c -->
|
|
4
|
+
## [0.9.0] - 2026-08-24
|
|
5
|
+
|
|
6
|
+
Engineering Kit 0.9.0 将稳定文件系统 Schema、绑定读取 Harness 闭包与有序批量校验 candidate 投影到既有 Quickstart Bundle。
|
|
7
|
+
|
|
8
|
+
### 新增
|
|
9
|
+
|
|
10
|
+
- 从 Contracts 权威源投影三个稳定文件系统 Schema 与两个批量校验 candidate Schema。
|
|
11
|
+
- 投影稳定绑定读取入口及其精确原生预构建闭包,不新增 Kit 命令。
|
|
12
|
+
|
|
13
|
+
### 变更
|
|
14
|
+
|
|
15
|
+
- 四个顶层 Kit 命令与 Profile SPI 的 candidate 边界保持不变。
|
|
16
|
+
|
|
17
|
+
### 升级说明
|
|
18
|
+
|
|
19
|
+
三个 Foundation 包必须精确锁定 0.9.0 并重新构建 managed Bundle;批量校验只能通过既有 candidate Bundle 与 mechanisms CLI 使用。
|
|
20
|
+
<!-- release-skill:changelog:end version=0.9.0 locale=zh-CN -->
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
<!-- release-skill:changelog:start version=0.8.4 locale=zh-CN baseline=sha256:38a973bb735c925e8453656ce24a11173b530c6376609d68dfb850d9029daa21 -->
|
|
24
|
+
## [0.8.4] - 2026-08-24
|
|
25
|
+
|
|
26
|
+
随 Foundation 0.8.4 锁步升版,补充外置 source authority 校验用法;Kit 命令与 Profile SPI 不变。
|
|
27
|
+
|
|
28
|
+
### 变更
|
|
29
|
+
|
|
30
|
+
- 包版本与 Contracts、Harness 一同升至 0.8.4。
|
|
31
|
+
- 说明消费者先经 Contracts 校验 source-authority receipt,再把返回坐标传入既有 sourceRepository 与 sourceBaseCommit 字段。
|
|
32
|
+
- 四个稳定顶层命令、builder、Profile SPI 与公共导出保持不变。
|
|
33
|
+
|
|
34
|
+
### 升级说明
|
|
35
|
+
|
|
36
|
+
消费者必须把三个 Foundation 包精确锁定到 0.8.4。provider Profile descriptor 从 0.8.3 与 Contracts 1.7.0 升级时,必须把自身的 base.contractsVersion 字段机械更新为 1.8.0。既有函数与 Schema 形状、Profile SPI v3、Kit 四命令均不需要迁移;需要 source authority 的消费者只增加调用 builder 前的 Contracts 校验步骤。
|
|
37
|
+
<!-- release-skill:changelog:end version=0.8.4 locale=zh-CN -->
|
|
38
|
+
|
|
39
|
+
|
|
3
40
|
<!-- release-skill:changelog:start version=0.8.3 locale=zh-CN baseline=sha256:3315d4594a7e28926b54dae3057c35d192b1e9293d07d22fd8856f44da2a7d80 -->
|
|
4
41
|
## [0.8.3] - 2026-08-23
|
|
5
42
|
|
package/README.md
CHANGED
|
@@ -4,23 +4,27 @@
|
|
|
4
4
|
|
|
5
5
|
# skill-family-engineering-kit
|
|
6
6
|
|
|
7
|
-
<!-- release-skill:release-version: 0.
|
|
7
|
+
<!-- release-skill:release-version: 0.9.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.9.0** (2026-08-24)
|
|
13
13
|
|
|
14
|
-
|
|
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.
|
|
15
|
+
|
|
16
|
+
**Added**
|
|
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.
|
|
15
20
|
|
|
16
21
|
**Changed**
|
|
17
22
|
|
|
18
|
-
-
|
|
19
|
-
- Rebuilding a managed Bundle projects the updated Harness paths module, including its single ENOENT anchor recomputation and unchanged fail-closed boundaries.
|
|
23
|
+
- Keeps the four top-level Kit commands and Profile SPI candidate boundary unchanged.
|
|
20
24
|
|
|
21
25
|
**Upgrade Notes**
|
|
22
26
|
|
|
23
|
-
|
|
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.
|
|
24
28
|
<!-- release-skill:managed:end id=latest-release -->
|
|
25
29
|
|
|
26
30
|
| Command | Purpose | Side effects |
|
|
@@ -41,7 +45,7 @@ Kit is the "engineering stage" layer, depending on the Harness and Contracts. It
|
|
|
41
45
|
## Installation and Minimal Example
|
|
42
46
|
|
|
43
47
|
```sh
|
|
44
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
48
|
+
npm install --save-dev skill-family-engineering-kit@0.9.0
|
|
45
49
|
npm exec -- skill-family-kit --help
|
|
46
50
|
npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
|
|
47
51
|
npm exec -- skill-family-kit adopt-plan --root <repo>
|
|
@@ -49,7 +53,7 @@ npm exec -- skill-family-kit projection --root <repo>
|
|
|
49
53
|
npm exec -- skill-family-kit check --root <repo>
|
|
50
54
|
```
|
|
51
55
|
|
|
52
|
-
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.
|
|
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`.
|
|
53
57
|
|
|
54
58
|
### Public Profile SPI
|
|
55
59
|
|
|
@@ -59,6 +63,8 @@ The package carries three SPI JSON resources and the Contracts canonical `profil
|
|
|
59
63
|
|
|
60
64
|
`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.
|
|
61
65
|
|
|
66
|
+
When a provider Profile descriptor moves from Foundation 0.8.4 and Contracts 1.8.0 to Foundation 0.9.0, update its `base.contractsVersion` field mechanically to `1.9.0`. The four Kit commands and Profile SPI retain their existing shapes.
|
|
67
|
+
|
|
62
68
|
### Report sub-action
|
|
63
69
|
|
|
64
70
|
```sh
|
|
@@ -73,13 +79,22 @@ The caller must first construct a valid report model; Kit does not derive facts
|
|
|
73
79
|
Use the candidate subpath to build a deterministic Quickstart Profile v2 projection from explicit consumer schemas and frozen source identity:
|
|
74
80
|
|
|
75
81
|
```js
|
|
82
|
+
import { parseSourceAuthorityReceipt } from "skill-family-contracts";
|
|
76
83
|
import {
|
|
77
84
|
buildQuickstartProfileProjection,
|
|
78
85
|
QUICKSTART_PROFILE_TARGET_PREFIX,
|
|
79
86
|
} from "skill-family-engineering-kit/candidate/quickstart-profile";
|
|
87
|
+
|
|
88
|
+
const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
|
|
89
|
+
if (!authority.valid) throw new Error(authority.errorCode);
|
|
90
|
+
|
|
91
|
+
const projection = await buildQuickstartProfileProjection({
|
|
92
|
+
...projectionInputs,
|
|
93
|
+
...authority.data,
|
|
94
|
+
});
|
|
80
95
|
```
|
|
81
96
|
|
|
82
|
-
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.
|
|
97
|
+
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.
|
|
83
98
|
|
|
84
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`.
|
|
85
100
|
|
package/README.zh-CN.md
CHANGED
|
@@ -5,23 +5,27 @@
|
|
|
5
5
|
|
|
6
6
|
# skill-family-engineering-kit
|
|
7
7
|
|
|
8
|
-
<!-- release-skill:release-version: 0.
|
|
8
|
+
<!-- release-skill:release-version: 0.9.0 -->
|
|
9
9
|
|
|
10
10
|
开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
|
|
11
11
|
|
|
12
12
|
<!-- release-skill:managed:start id=latest-release -->
|
|
13
|
-
**0.
|
|
13
|
+
**0.9.0** (2026-08-24)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Engineering Kit 0.9.0 将稳定文件系统 Schema、绑定读取 Harness 闭包与有序批量校验 candidate 投影到既有 Quickstart Bundle。
|
|
16
|
+
|
|
17
|
+
**新增**
|
|
18
|
+
|
|
19
|
+
- 从 Contracts 权威源投影三个稳定文件系统 Schema 与两个批量校验 candidate Schema。
|
|
20
|
+
- 投影稳定绑定读取入口及其精确原生预构建闭包,不新增 Kit 命令。
|
|
16
21
|
|
|
17
22
|
**变更**
|
|
18
23
|
|
|
19
|
-
-
|
|
20
|
-
- 重建受管 Bundle 会投影更新后的 Harness paths 模块,包括仅一次 ENOENT 锚点重求和保持不变的失败关闭边界。
|
|
24
|
+
- 四个顶层 Kit 命令与 Profile SPI 的 candidate 边界保持不变。
|
|
21
25
|
|
|
22
26
|
**升级说明**
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
三个 Foundation 包必须精确锁定 0.9.0 并重新构建 managed Bundle;批量校验只能通过既有 candidate Bundle 与 mechanisms CLI 使用。
|
|
25
29
|
<!-- release-skill:managed:end id=latest-release -->
|
|
26
30
|
|
|
27
31
|
| 命令 | 用途 | 副作用 |
|
|
@@ -42,7 +46,7 @@ Kit 是「工程阶段」层,依赖 Harness 与 Contracts。它只做四件事
|
|
|
42
46
|
## 安装和最小示例
|
|
43
47
|
|
|
44
48
|
```sh
|
|
45
|
-
npm install --save-dev skill-family-engineering-kit@0.
|
|
49
|
+
npm install --save-dev skill-family-engineering-kit@0.9.0
|
|
46
50
|
npm exec -- skill-family-kit --help
|
|
47
51
|
npm exec -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
|
|
48
52
|
npm exec -- skill-family-kit adopt-plan --root <repo>
|
|
@@ -50,7 +54,7 @@ npm exec -- skill-family-kit projection --root <repo>
|
|
|
50
54
|
npm exec -- skill-family-kit check --root <repo>
|
|
51
55
|
```
|
|
52
56
|
|
|
53
|
-
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.
|
|
57
|
+
以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.9.0 -- skill-family-kit --help`。
|
|
54
58
|
|
|
55
59
|
### 公共 Profile SPI
|
|
56
60
|
|
|
@@ -60,6 +64,8 @@ npm exec -- skill-family-kit check --root <repo>
|
|
|
60
64
|
|
|
61
65
|
`verifyProfile({ profileRoot })` 只读处理 Profile descriptor;项目根声明使用对应的 `verifyProjectProfile({ projectRoot, profileRelPath? })`。两个入口遇到无效输入都以稳定结果码失败关闭,不会执行 Profile 提供的文件;Profile 的领域含义仍由调用方负责。
|
|
62
66
|
|
|
67
|
+
provider Profile descriptor 从 Foundation 0.8.4 与 Contracts 1.8.0 升级到 Foundation 0.9.0 时,须把自身的 `base.contractsVersion` 字段更新为 `1.9.0`。Kit 四个顶层命令与 Profile SPI 的形状保持不变。
|
|
68
|
+
|
|
63
69
|
### 报告子动作
|
|
64
70
|
|
|
65
71
|
```sh
|
|
@@ -74,13 +80,22 @@ npm exec -- skill-family-kit check report --root <repo> --report <report.md> --m
|
|
|
74
80
|
需要从显式消费者 Schema 与冻结来源身份生成确定性的 Quickstart Profile v2 投影时,使用 candidate 子路径:
|
|
75
81
|
|
|
76
82
|
```js
|
|
83
|
+
import { parseSourceAuthorityReceipt } from "skill-family-contracts";
|
|
77
84
|
import {
|
|
78
85
|
buildQuickstartProfileProjection,
|
|
79
86
|
QUICKSTART_PROFILE_TARGET_PREFIX,
|
|
80
87
|
} from "skill-family-engineering-kit/candidate/quickstart-profile";
|
|
88
|
+
|
|
89
|
+
const authority = parseSourceAuthorityReceipt(receipt, actualSubjects);
|
|
90
|
+
if (!authority.valid) throw new Error(authority.errorCode);
|
|
91
|
+
|
|
92
|
+
const projection = await buildQuickstartProfileProjection({
|
|
93
|
+
...projectionInputs,
|
|
94
|
+
...authority.data,
|
|
95
|
+
});
|
|
81
96
|
```
|
|
82
97
|
|
|
83
|
-
|
|
98
|
+
`receipt` 与 `actualSubjects` 由调用方在 Kit 外取得。Contracts 先精确核对两者,既有 builder 再接收返回的 `sourceRepository` 与 `sourceBaseCommit`;Kit 不解析发布计划,也不发现来源权威。生成的 Bundle 按 Schema `$id` 选择 standalone validator,离线运行时不依赖 Foundation 包、`node_modules` 或 Ajv。provenance 绑定 Foundation 来源、消费者 Schema、payload 字节、工具版本,以及实际进入 Bundle 的代码许可证。
|
|
84
99
|
|
|
85
100
|
以上辅助函数不写文件,也不增加第五个顶层命令。调用方需要把返回的 `manifest` 交给稳定的 `runProjection` API。该子路径公开但**不稳定**;使用 v2 时应精确锁定 `0.4.0`,仍依赖 v1 依赖闭包 Bundle 的接入必须继续精确锁定 `0.2.1`。
|
|
86
101
|
|
|
@@ -69,6 +69,14 @@ const FOUNDATION_SCHEMA_FILES = Object.freeze([
|
|
|
69
69
|
["harness-surface-inventory.schema.json", "schemas/foundation/harness-surface-inventory.schema.json"],
|
|
70
70
|
]);
|
|
71
71
|
|
|
72
|
+
const ADDITIONAL_FOUNDATION_SCHEMA_FILES = Object.freeze([
|
|
73
|
+
["filesystem-root-binding.schema.json", "src/schemas/filesystem-root-binding.schema.json", "schemas/foundation/filesystem-root-binding.schema.json"],
|
|
74
|
+
["fixed-set-publication-manifest.schema.json", "src/schemas/fixed-set-publication-manifest.schema.json", "schemas/foundation/fixed-set-publication-manifest.schema.json"],
|
|
75
|
+
["fixed-set-publication-receipt.schema.json", "src/schemas/fixed-set-publication-receipt.schema.json", "schemas/foundation/fixed-set-publication-receipt.schema.json"],
|
|
76
|
+
["schema-validation-batch-request.schema.json", "candidate/foundation-mechanisms/schema-validation-batch-request.schema.json", "schemas/foundation/schema-validation-batch-request.schema.json"],
|
|
77
|
+
["schema-validation-batch-result.schema.json", "candidate/foundation-mechanisms/schema-validation-batch-result.schema.json", "schemas/foundation/schema-validation-batch-result.schema.json"],
|
|
78
|
+
]);
|
|
79
|
+
|
|
72
80
|
const HARNESS_IMPORT_MAP = new Map([
|
|
73
81
|
["skill-family-contracts", "../contracts/index.mjs"],
|
|
74
82
|
["skill-family-contracts/candidate/quickstart-profile", "../contracts-candidate/index.mjs"],
|
|
@@ -76,6 +84,7 @@ const HARNESS_IMPORT_MAP = new Map([
|
|
|
76
84
|
["../src/errors.mjs", "./errors.mjs"],
|
|
77
85
|
["../src/paths.mjs", "./paths.mjs"],
|
|
78
86
|
["../src/strict-read.mjs", "./strict-read.mjs"],
|
|
87
|
+
["../src/bound-read.mjs", "./bound-read.mjs"],
|
|
79
88
|
]);
|
|
80
89
|
|
|
81
90
|
const HARNESS_STRICT_READ_IMPORT_MAP = new Map([
|
|
@@ -124,6 +133,18 @@ const FIXED_SET_CANDIDATE_FILES = Object.freeze([
|
|
|
124
133
|
"prebuilds/linux-x64-gnu/rename_directory_no_replace.linux-x64-gnu.node",
|
|
125
134
|
]);
|
|
126
135
|
const FIXED_SET_BINARY_PREFIX = "prebuilds/";
|
|
136
|
+
const STABLE_BOUND_READ_NATIVE_FILES = Object.freeze([
|
|
137
|
+
"prebuild-manifest.json",
|
|
138
|
+
"prebuilds/darwin-arm64/bound_read.darwin-arm64.node",
|
|
139
|
+
"prebuilds/darwin-x64/bound_read.darwin-x64.node",
|
|
140
|
+
"prebuilds/linux-arm64-gnu/bound_read.linux-arm64-gnu.node",
|
|
141
|
+
"prebuilds/linux-x64-gnu/bound_read.linux-x64-gnu.node",
|
|
142
|
+
]);
|
|
143
|
+
const STABLE_BOUND_READ_METADATA_FILES = Object.freeze([
|
|
144
|
+
"NOTICE",
|
|
145
|
+
"prebuild-sbom.json",
|
|
146
|
+
"prebuild-release-receipt.json",
|
|
147
|
+
]);
|
|
127
148
|
|
|
128
149
|
// These fragments are the exact case-sensitive words rejected by the
|
|
129
150
|
// bundle-wide byte scan. Caller-provided source identities enter provenance
|
|
@@ -958,6 +979,13 @@ function projectContractsCandidateIndex(sourceText) {
|
|
|
958
979
|
`schema load path ${fileName}`,
|
|
959
980
|
);
|
|
960
981
|
}
|
|
982
|
+
for (const [fileName] of ADDITIONAL_FOUNDATION_SCHEMA_FILES.filter(([name]) => name.startsWith("schema-validation-batch-"))) {
|
|
983
|
+
applyOnce(
|
|
984
|
+
`load(new URL("../foundation-mechanisms/${fileName}", import.meta.url))`,
|
|
985
|
+
`load(new URL("../../schemas/foundation/${fileName}", import.meta.url))`,
|
|
986
|
+
`schema load path ${fileName}`,
|
|
987
|
+
);
|
|
988
|
+
}
|
|
961
989
|
|
|
962
990
|
const getCollectionMarker = "function getCollection(";
|
|
963
991
|
const getCollectionHits = projected.split(getCollectionMarker).length - 1;
|
|
@@ -1068,12 +1096,15 @@ function runnerSource() {
|
|
|
1068
1096
|
'export * from "./runtime/harness/quickstart-profile.mjs";',
|
|
1069
1097
|
'export { validateQuickstartProfileDocument } from "./runtime/contracts-candidate/index.mjs";',
|
|
1070
1098
|
'export { validateBySchemaId } from "./validators.mjs";',
|
|
1099
|
+
'export { createFilesystemRootBinding, readFileBound } from "./runtime/harness/bound-read.mjs";',
|
|
1100
|
+
'export { createFixedSetPublicationManifest, publishFixedSet } from "./runtime/harness/fixed-set-publication.mjs";',
|
|
1071
1101
|
'export { publishFileExclusive, publishFileOrReplace, replaceFileAtomic } from "./runtime/harness/atomic.mjs";',
|
|
1072
1102
|
'export { acquireFilesystemLock, inspectFilesystemLock, releaseFilesystemLock, recoverFilesystemLock } from "./runtime/harness/token-lock.mjs";',
|
|
1073
1103
|
'import { invokeFoundationMechanism as invokeHarnessMechanism } from "./runtime/harness/quickstart-profile.mjs";',
|
|
1074
1104
|
'import { validateBySchemaId } from "./validators.mjs";',
|
|
1105
|
+
'import { listValidatableSchemaIds } from "./validators.mjs";',
|
|
1075
1106
|
'export function invokeFoundationMechanism(request) {',
|
|
1076
|
-
' return invokeHarnessMechanism(request, { validateBySchemaId });',
|
|
1107
|
+
' return invokeHarnessMechanism(request, { validateBySchemaId, listValidatableSchemaIds });',
|
|
1077
1108
|
'}',
|
|
1078
1109
|
"",
|
|
1079
1110
|
].join("\n");
|
|
@@ -1176,6 +1207,10 @@ export async function buildQuickstartProfileProjection({
|
|
|
1176
1207
|
`candidate/quickstart-profile/${fileName}`,
|
|
1177
1208
|
);
|
|
1178
1209
|
}
|
|
1210
|
+
const additionalSchemaTexts = {};
|
|
1211
|
+
for (const [fileName, sourcePath] of ADDITIONAL_FOUNDATION_SCHEMA_FILES) {
|
|
1212
|
+
additionalSchemaTexts[fileName] = await readSourceText(contractsRoot, sourcePath);
|
|
1213
|
+
}
|
|
1179
1214
|
sources.harnessIndex = await readSourceText(harnessRoot, "src/index.mjs");
|
|
1180
1215
|
sources.harnessCandidate = await readSourceText(harnessRoot, "candidate/quickstart-profile.mjs");
|
|
1181
1216
|
sources.harnessMechanismsCli = await readSourceText(harnessRoot, "candidate/mechanisms-cli.mjs");
|
|
@@ -1185,6 +1220,22 @@ export async function buildQuickstartProfileProjection({
|
|
|
1185
1220
|
sources.harnessStrictRead = await readSourceText(harnessRoot, "src/strict-read.mjs");
|
|
1186
1221
|
sources.harnessAtomic = await readSourceText(harnessRoot, "src/atomic.mjs");
|
|
1187
1222
|
sources.harnessTokenLock = await readSourceText(harnessRoot, "src/token-lock.mjs");
|
|
1223
|
+
sources.harnessBoundRead = await readSourceText(harnessRoot, "src/bound-read.mjs");
|
|
1224
|
+
sources.harnessFixedSetPublication = await readSourceText(harnessRoot, "src/fixed-set-publication.mjs");
|
|
1225
|
+
sources.harnessFixedSetPublicationLoader = await readSourceText(harnessRoot, "src/fixed-set-publication-loader.mjs");
|
|
1226
|
+
sources.harnessBoundReadLoader = await readSourceText(harnessRoot, "src/native/loader.mjs");
|
|
1227
|
+
sources.harnessBoundReadManifest = await readSourceText(harnessRoot, "src/native/prebuild-manifest.json");
|
|
1228
|
+
sources.harnessBoundReadMetadata = {};
|
|
1229
|
+
for (const relative of STABLE_BOUND_READ_METADATA_FILES) {
|
|
1230
|
+
sources.harnessBoundReadMetadata[relative] = await readSourceText(harnessRoot, `src/native/${relative}`);
|
|
1231
|
+
}
|
|
1232
|
+
const harnessBoundReadBinaries = {};
|
|
1233
|
+
for (const relative of STABLE_BOUND_READ_NATIVE_FILES.slice(1)) {
|
|
1234
|
+
harnessBoundReadBinaries[relative] = await readCanonicalRegularFile(
|
|
1235
|
+
path.join(harnessRoot, "src/native", relative),
|
|
1236
|
+
`stable bound-read prebuild ${relative}`,
|
|
1237
|
+
);
|
|
1238
|
+
}
|
|
1188
1239
|
// The package manifests are recorded as complete original bytes below, so
|
|
1189
1240
|
// every provenance path digest recomputes from the real file.
|
|
1190
1241
|
const contractsPackageJsonText = await readSourceText(contractsRoot, "package.json");
|
|
@@ -1233,6 +1284,10 @@ export async function buildQuickstartProfileProjection({
|
|
|
1233
1284
|
name: fileName,
|
|
1234
1285
|
text: candidateSchemaTexts[fileName],
|
|
1235
1286
|
})),
|
|
1287
|
+
...ADDITIONAL_FOUNDATION_SCHEMA_FILES.map(([fileName]) => ({
|
|
1288
|
+
name: fileName,
|
|
1289
|
+
text: additionalSchemaTexts[fileName],
|
|
1290
|
+
})),
|
|
1236
1291
|
].map((entry) => ({ name: entry.name, document: JSON.parse(entry.text) }));
|
|
1237
1292
|
|
|
1238
1293
|
const graph = buildSchemaGraph(consumerRecords, foundationSchemaDocuments);
|
|
@@ -1359,6 +1414,9 @@ export async function buildQuickstartProfileProjection({
|
|
|
1359
1414
|
for (const [fileName, bundlePath] of FOUNDATION_SCHEMA_FILES) {
|
|
1360
1415
|
setText(bundlePath, candidateSchemaTexts[fileName]);
|
|
1361
1416
|
}
|
|
1417
|
+
for (const [fileName, , bundlePath] of ADDITIONAL_FOUNDATION_SCHEMA_FILES) {
|
|
1418
|
+
setText(bundlePath, additionalSchemaTexts[fileName]);
|
|
1419
|
+
}
|
|
1362
1420
|
setText("schemas/foundation/operation-request.schema.json", sources.operationRequest);
|
|
1363
1421
|
setText("schemas/foundation/operation-result.schema.json", sources.operationResult);
|
|
1364
1422
|
setText("schemas/foundation/migration-manifest.schema.json", sources.migrationManifestSchema);
|
|
@@ -1387,6 +1445,31 @@ export async function buildQuickstartProfileProjection({
|
|
|
1387
1445
|
"runtime/harness/token-lock.mjs",
|
|
1388
1446
|
projectModuleWithImportMap(sources.harnessTokenLock, HARNESS_TOKEN_LOCK_IMPORT_MAP, "harness src/token-lock.mjs"),
|
|
1389
1447
|
);
|
|
1448
|
+
setText(
|
|
1449
|
+
"runtime/harness/bound-read.mjs",
|
|
1450
|
+
projectModuleWithImportMap(
|
|
1451
|
+
sources.harnessBoundRead,
|
|
1452
|
+
new Map([["skill-family-contracts", "../contracts/index.mjs"]]),
|
|
1453
|
+
"harness src/bound-read.mjs",
|
|
1454
|
+
),
|
|
1455
|
+
);
|
|
1456
|
+
setText(
|
|
1457
|
+
"runtime/harness/fixed-set-publication.mjs",
|
|
1458
|
+
projectModuleWithImportMap(
|
|
1459
|
+
sources.harnessFixedSetPublication,
|
|
1460
|
+
new Map([["skill-family-contracts", "../contracts/index.mjs"]]),
|
|
1461
|
+
"harness src/fixed-set-publication.mjs",
|
|
1462
|
+
),
|
|
1463
|
+
);
|
|
1464
|
+
setText("runtime/harness/fixed-set-publication-loader.mjs", sources.harnessFixedSetPublicationLoader);
|
|
1465
|
+
setText("runtime/harness/native/loader.mjs", sources.harnessBoundReadLoader);
|
|
1466
|
+
setText("runtime/harness/native/prebuild-manifest.json", sources.harnessBoundReadManifest);
|
|
1467
|
+
for (const relative of STABLE_BOUND_READ_METADATA_FILES) {
|
|
1468
|
+
setText(`runtime/harness/native/${relative}`, sources.harnessBoundReadMetadata[relative]);
|
|
1469
|
+
}
|
|
1470
|
+
for (const relative of STABLE_BOUND_READ_NATIVE_FILES.slice(1)) {
|
|
1471
|
+
setBytes(`runtime/harness/native/${relative}`, harnessBoundReadBinaries[relative].bytes);
|
|
1472
|
+
}
|
|
1390
1473
|
const migrationManifestSchemaId = JSON.parse(sources.migrationManifestSchema).$id;
|
|
1391
1474
|
setText(
|
|
1392
1475
|
"runtime/kit/migration.mjs",
|
|
@@ -1472,6 +1555,11 @@ export async function buildQuickstartProfileProjection({
|
|
|
1472
1555
|
["packages/skill-family-contracts/candidate/quickstart-profile/result.schema.json", candidateSchemaTexts["result.schema.json"], "projected"],
|
|
1473
1556
|
["packages/skill-family-contracts/candidate/quickstart-profile/consumer-schema-inventory.schema.json", candidateSchemaTexts["consumer-schema-inventory.schema.json"], "projected"],
|
|
1474
1557
|
["packages/skill-family-contracts/candidate/quickstart-profile/harness-surface-inventory.schema.json", candidateSchemaTexts["harness-surface-inventory.schema.json"], "projected"],
|
|
1558
|
+
...ADDITIONAL_FOUNDATION_SCHEMA_FILES.map(([fileName, sourcePath]) => [
|
|
1559
|
+
`packages/skill-family-contracts/${sourcePath}`,
|
|
1560
|
+
additionalSchemaTexts[fileName],
|
|
1561
|
+
"projected",
|
|
1562
|
+
]),
|
|
1475
1563
|
["packages/skill-family-contracts/candidate/quickstart-profile/index.mjs", sources.candidateIndex, "extraction-input"],
|
|
1476
1564
|
["packages/skill-family-harness-node/package.json", harnessPackageJsonText, "identity"],
|
|
1477
1565
|
["packages/skill-family-harness-node/src/index.mjs", sources.harnessIndex, "imported-surface"],
|
|
@@ -1483,6 +1571,21 @@ export async function buildQuickstartProfileProjection({
|
|
|
1483
1571
|
["packages/skill-family-harness-node/src/strict-read.mjs", sources.harnessStrictRead, "projected"],
|
|
1484
1572
|
["packages/skill-family-harness-node/src/atomic.mjs", sources.harnessAtomic, "projected"],
|
|
1485
1573
|
["packages/skill-family-harness-node/src/token-lock.mjs", sources.harnessTokenLock, "projected"],
|
|
1574
|
+
["packages/skill-family-harness-node/src/bound-read.mjs", sources.harnessBoundRead, "projected"],
|
|
1575
|
+
["packages/skill-family-harness-node/src/fixed-set-publication.mjs", sources.harnessFixedSetPublication, "projected"],
|
|
1576
|
+
["packages/skill-family-harness-node/src/fixed-set-publication-loader.mjs", sources.harnessFixedSetPublicationLoader, "projected"],
|
|
1577
|
+
["packages/skill-family-harness-node/src/native/loader.mjs", sources.harnessBoundReadLoader, "projected"],
|
|
1578
|
+
["packages/skill-family-harness-node/src/native/prebuild-manifest.json", sources.harnessBoundReadManifest, "identity"],
|
|
1579
|
+
...STABLE_BOUND_READ_METADATA_FILES.map((relative) => [
|
|
1580
|
+
`packages/skill-family-harness-node/src/native/${relative}`,
|
|
1581
|
+
sources.harnessBoundReadMetadata[relative],
|
|
1582
|
+
"identity",
|
|
1583
|
+
]),
|
|
1584
|
+
...STABLE_BOUND_READ_NATIVE_FILES.slice(1).map((relative) => [
|
|
1585
|
+
`packages/skill-family-harness-node/src/native/${relative}`,
|
|
1586
|
+
harnessBoundReadBinaries[relative].bytes,
|
|
1587
|
+
"binary",
|
|
1588
|
+
]),
|
|
1486
1589
|
["packages/skill-family-engineering-kit/package.json", kitPackageJsonText, "identity"],
|
|
1487
1590
|
["packages/skill-family-engineering-kit/candidate/profile-bundle.mjs", kitBuilderSource, "builder"],
|
|
1488
1591
|
["packages/skill-family-engineering-kit/candidate/projection-bundle-cli.mjs", kitCliSource, "builder"],
|
|
@@ -1972,7 +1972,7 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
1972
1972
|
<tbody>
|
|
1973
1973
|
<tr>
|
|
1974
1974
|
<td>Contracts</td>
|
|
1975
|
-
<td>结构、协议、错误码、协议名登记;
|
|
1975
|
+
<td>结构、协议、错误码、协议名登记;35 类顶层对象;9 条 mandatory rule</td>
|
|
1976
1976
|
<td>业务字段语义、领域审计、远端写入、模型生成</td>
|
|
1977
1977
|
</tr>
|
|
1978
1978
|
<tr>
|
|
@@ -2077,12 +2077,12 @@ Contracts(结构、协议、错误码、协议名登记)
|
|
|
2077
2077
|
<p>三包结构保持、不拆第四包(FND-ADR-007);制品治理采用 artifact-graph CLI 与版本锁(FND-ADR-006)。</p>
|
|
2078
2078
|
<h2 id="首版预算">首版预算<a class="headerlink" href="#首版预算" title="Permanent link">¶</a></h2>
|
|
2079
2079
|
<ul>
|
|
2080
|
-
<li>顶层 Contracts 对象:
|
|
2080
|
+
<li>顶层 Contracts 对象:35 类(完整清单以 <code>packages/skill-family-contracts/src/registry.json</code> 为唯一真源):project-manifest、profile-descriptor、project-profile(FND-ADR-013,1.7.0 纳入)、managed-file-lock、operation-request、operation-result、migration-manifest、adapter-source、report-model、report-binding、host-descriptor、host-registry、host-capability-fact、host-probe-result、adapter-build-manifest、host-operation-plan、host-operation-receipt、state-event-envelope、state-snapshot-metadata、token-estimate-result、surface-scan-policy、declared-read-surface-result、structured-scan-policy(FND-ADR-010/011)、timeout-policy、watchdog-termination-envelope(FND-ADR-012,append-only 保持 1.5.0)、public-boundary-declaration、platform-difference-registry、observation-scope、profile-adoption-declaration、audit-baseline-pin、token-estimate-record(审计规则裁决与整改 1.6.0 纳入)、source-authority-receipt(1.8.0 纳入)、filesystem-root-binding、fixed-set-publication-manifest、fixed-set-publication-receipt(1.9.0 纳入);</li>
|
|
2081
2081
|
<li>Kit 顶层命令:4 个(scaffold、adopt-plan、projection、check);</li>
|
|
2082
2082
|
<li>强制机械规则:当前 9 条,预算不超过 20 条,绝对上限 30 条;CR-001 对登记表内全部 Schema 做统一编译;</li>
|
|
2083
2083
|
<li>叶子包:3 个(skill-family-contracts、skill-family-harness-node、skill-family-engineering-kit);</li>
|
|
2084
2084
|
<li>Schema 校验器:Ajv 8.20.0(精确版本 pin),支持 draft-07 与 2020-12 双方言;</li>
|
|
2085
|
-
<li>kernel 协议:skill-family.kernel.operation(stable),Contracts 版本 1.
|
|
2085
|
+
<li>kernel 协议:skill-family.kernel.operation(stable),Contracts 版本 1.9.0;</li>
|
|
2086
2086
|
<li>默认运行时语言:Node;第二语言实现首版为 0。</li>
|
|
2087
2087
|
</ul>
|
|
2088
2088
|
<p>任何新增组件必须说明删除它会导致的两个以上真实消费者重复实现,并通过独立 fixture 验证。</p>
|
|
@@ -1796,7 +1796,8 @@
|
|
|
1796
1796
|
isolation-and-lockfile.md 隔离安装与包锁验证设计
|
|
1797
1797
|
independence.md 独立性声明与机械证明
|
|
1798
1798
|
schemas/audit-evidence.schema.json 证据文档的 JSON Schema(审计自有)
|
|
1799
|
-
baseline/contracts-1.
|
|
1799
|
+
baseline/contracts-1.9.0.pin.json Contracts 1.9.0 当前候选基线 pin(摘要+事实)
|
|
1800
|
+
baseline/contracts-1.8.0.pin.json Contracts 1.8.0 只读兼容存档 pin
|
|
1800
1801
|
baseline/contracts-1.6.0.pin.json Contracts 1.6.0 只读兼容存档 pin
|
|
1801
1802
|
baseline/contracts-1.5.0.pin.json Contracts 1.5.0 只读兼容存档 pin
|
|
1802
1803
|
baseline/contracts-1.1.1.pin.json Contracts 1.1.1 只读兼容存档 pin
|
|
@@ -1943,7 +1943,7 @@
|
|
|
1943
1943
|
<h3 id="M4-遗漏omission">M4 遗漏(omission)<a class="headerlink" href="#M4-遗漏omission" title="Permanent link">¶</a></h3>
|
|
1944
1944
|
<p>变异从冻结文档中<strong>删除</strong>必备部件。三个覆盖检查(fixture 用 <code>expect.check</code> 声明):</p>
|
|
1945
1945
|
<ul>
|
|
1946
|
-
<li><code>registry-schema-coverage</code
|
|
1946
|
+
<li><code>registry-schema-coverage</code>:当前基线 pin 中的全部顶层对象都必须登记;</li>
|
|
1947
1947
|
<li><code>rules-checktype-coverage</code>:九个检查类型每个都必须被至少一条 mandatory 规则覆盖;</li>
|
|
1948
1948
|
<li><code>error-code-coverage</code>:冻结错误码清单一个不能少。</li>
|
|
1949
1949
|
</ul>
|
|
@@ -1791,7 +1791,7 @@
|
|
|
1791
1791
|
<tbody>
|
|
1792
1792
|
<tr>
|
|
1793
1793
|
<td><code>contractsVersion</code></td>
|
|
1794
|
-
<td>Contracts 冻结版本(当前 <code>1.
|
|
1794
|
+
<td>Contracts 冻结版本(当前 <code>1.9.0</code>)</td>
|
|
1795
1795
|
<td>机器契约内容的版本</td>
|
|
1796
1796
|
</tr>
|
|
1797
1797
|
<tr>
|
|
@@ -1806,7 +1806,7 @@
|
|
|
1806
1806
|
</tr>
|
|
1807
1807
|
</tbody>
|
|
1808
1808
|
</table>
|
|
1809
|
-
<p>三者都由 <code>describeAuditSurface()</code> 一次性给出,审计侧把它们与基线 pin(当前为 <code>baseline/contracts-1.
|
|
1809
|
+
<p>三者都由 <code>describeAuditSurface()</code> 一次性给出,审计侧把它们与基线 pin(当前为 <code>baseline/contracts-1.9.0.pin.json</code>)比对。</p>
|
|
1810
1810
|
<h2 id="兼容规则">兼容规则<a class="headerlink" href="#兼容规则" title="Permanent link">¶</a></h2>
|
|
1811
1811
|
<p>一个被消费的 Contracts 包与某个基线 pin <strong>兼容</strong>,当且仅当同时满足:</p>
|
|
1812
1812
|
<ol>
|
|
@@ -1864,7 +1864,9 @@
|
|
|
1864
1864
|
<li><strong>Contracts 1.4.0(2026-08-09)</strong>:持久状态能力线增量,不是描述补丁:新增 <code>state-event-envelope</code>、<code>state-snapshot-metadata</code> 两个顶层契约,改变了公开机器合同与审计事实。</li>
|
|
1865
1865
|
<li><strong>Contracts 1.5.0(2026-08-16)</strong>:FND-ADR-010/011 能力线增量,不是描述补丁:新增 <code>declared-read-surface-result</code>、<code>structured-scan-policy</code> 两个顶层契约(顶层对象集合 20 → 22),改变了公开机器合同与审计事实。该 pin 的摘要与事实均从当前 <code>describeAuditSurface()/digestAuditSurface()</code> 机械投影,provenance 仍为 <code>product-compatibility-fixture</code>。</li>
|
|
1866
1866
|
<li><strong>Contracts 1.6.0(2026-08-18)</strong>:审计整改 C5 能力线增量,不是描述补丁:新增 <code>public-boundary-declaration</code>、<code>platform-difference-registry</code>、<code>observation-scope</code>、<code>profile-adoption-declaration</code>、<code>audit-baseline-pin</code>、<code>token-estimate-record</code> 六个顶层契约(顶层对象集合 24 → 30),改变了公开机器合同与审计事实;未新增 SFC 错误码,规则与 kernel 协议仅随 <code>contractsVersion</code> 字段更新。pin 合同本身(<code>audit-baseline-pin</code>)与消费面校验函数 <code>verifyBaselinePin()</code>(AUD-BASE-001 / AUD-LOCK-001 编码)在本版本落地(GAP-5 / SG-28)。</li>
|
|
1867
|
-
<li><strong>Contracts 1.7.0(2026-08-22)</strong>:FND-ADR-013 的 Project Profile 能力线增量。新增 <code>project-profile</code> 顶层契约(顶层对象集合 30 → 31),统一 scaffold 项目根声明的机器结构;未新增 SFC 错误码。<code>contracts-1.7.0.pin.json</code>
|
|
1867
|
+
<li><strong>Contracts 1.7.0(2026-08-22)</strong>:FND-ADR-013 的 Project Profile 能力线增量。新增 <code>project-profile</code> 顶层契约(顶层对象集合 30 → 31),统一 scaffold 项目根声明的机器结构;未新增 SFC 错误码。<code>contracts-1.7.0.pin.json</code> 由 <code>scripts/baseline-pin-gen.mjs --update</code> 从 <code>describeAuditSurface()/describeBaselinePin()</code> 机械生成,并经过合同校验和 <code>verifyBaselinePin()</code> 自校验;现作为历史只读兼容存档保留。</li>
|
|
1868
|
+
<li><strong>Contracts 1.8.0(2026-08-24)</strong>:新增业务中立的 <code>source-authority-receipt</code> 顶层契约(31 → 32),以及纯校验、解析 API;未新增 SFC 错误码。<code>contracts-1.8.0.pin.json</code> 由 <code>scripts/baseline-pin-gen.mjs --update</code> 从公开 Contracts 表面机械生成并自校验;1.7.0 及更早 pin 保留为只读兼容存档。</li>
|
|
1869
|
+
<li><strong>Contracts 1.9.0(2026-08-24)</strong>:新增业务中立的 <code>filesystem-root-binding</code>、<code>fixed-set-publication-manifest</code> 和 <code>fixed-set-publication-receipt</code> 三个顶层契约(32 → 35)。错误码、规则、检查类型、预算、Kernel 操作和校验策略均未变化。<code>contracts-1.9.0.pin.json</code> 由 <code>scripts/baseline-pin-gen.mjs --update</code> 从公开 Contracts 表面机械生成并自校验;1.8.0 及更早 pin 保留为只读兼容存档。</li>
|
|
1868
1870
|
<li>审计运行时先做包锁验证(见 isolation-and-lockfile.md),再做变异重放;pin 不匹配时,变异重放结果不得被采信。</li>
|
|
1869
1871
|
</ul>
|
|
1870
1872
|
<h2 id="profile-行为变更纪律2026-08-19D6">profile 行为变更纪律(2026-08-19,D6)<a class="headerlink" href="#profile-行为变更纪律2026-08-19D6" title="Permanent link">¶</a></h2>
|
|
@@ -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.9.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.9.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.9.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>
|