skill-family-contracts 0.3.0 → 0.4.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 +24 -0
- package/CHANGELOG.zh-CN.md +24 -0
- package/README.md +16 -13
- package/README.zh-CN.md +16 -13
- package/candidate/fixed-set-publication/capability.json +19 -0
- package/candidate/fixed-set-publication/fixtures/manifest-negative-directory-mode.json +38 -0
- package/candidate/fixed-set-publication/fixtures/manifest-negative-path-escape.json +42 -0
- package/candidate/fixed-set-publication/fixtures/manifest-positive-platform-bundle.json +55 -0
- package/candidate/fixed-set-publication/fixtures/manifest-positive-versioned-candidate.json +53 -0
- package/candidate/fixed-set-publication/fixtures/receipt-negative-partial.json +25 -0
- package/candidate/fixed-set-publication/fixtures/receipt-positive-fsync-indeterminate.json +29 -0
- package/candidate/fixed-set-publication/fixtures/receipt-positive-success.json +25 -0
- package/candidate/fixed-set-publication/fixtures/receipt-positive-unsupported.json +27 -0
- package/candidate/fixed-set-publication/fixtures/receipt-positive-verify-indeterminate.json +27 -0
- package/candidate/fixed-set-publication/manifest.schema.json +108 -0
- package/candidate/fixed-set-publication/receipt.schema.json +148 -0
- package/candidate/quickstart-profile/consumer-schema-inventory.schema.json +66 -0
- package/candidate/quickstart-profile/fixtures/inventory-negative-missing-retention.json +13 -0
- package/candidate/quickstart-profile/fixtures/inventory-positive.json +23 -0
- package/candidate/quickstart-profile/harness-surface-inventory.schema.json +137 -0
- package/candidate/quickstart-profile/index.mjs +91 -3
- package/package.json +1 -1
- package/release-notes/0.3.0.yaml +2 -0
- package/release-notes/0.4.0.yaml +29 -0
- package/src/fixtures/migration-manifest/negative-06-empty-reference-text.json +19 -0
- package/src/fixtures/migration-manifest/negative-07-empty-reference-replaced-by.json +19 -0
- package/src/fixtures/migration-manifest/negative-08-reference-unknown-field.json +19 -0
- package/src/fixtures/migration-manifest/positive-03-legacy-references.json +25 -0
- package/src/fixtures/surface-scan-policy/dialect-01-unsupported.json +19 -0
- package/src/fixtures/surface-scan-policy/negative-01-empty-patterns.json +19 -0
- package/src/fixtures/surface-scan-policy/positive-01-valid.json +19 -0
- package/src/fixtures/token-estimate-result/dialect-01-unsupported.json +23 -0
- package/src/fixtures/token-estimate-result/negative-01-extra-field.json +30 -0
- package/src/fixtures/token-estimate-result/positive-01-valid.json +29 -0
- package/src/index.mjs +7 -3
- package/src/registry.json +14 -0
- package/src/schemas/migration-manifest.schema.json +26 -0
- package/src/schemas/surface-scan-policy.schema.json +42 -0
- package/src/schemas/token-estimate-result.schema.json +43 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.4.0 locale=en baseline=sha256:813375a1145b9de729fa5d128a34b1f9a12b5942ab6f06da92486aa72df7a297 -->
|
|
4
|
+
## [0.4.0] - 2026-08-16
|
|
5
|
+
|
|
6
|
+
This release extends the stable Contracts registry to 20 top-level object classes under the unchanged contract-spec version 1.4.0, adds finite-closed-semantics fixtures and schemas (FND-ADR-009), and ships new fixed-set-publication and schema-inventory candidates.
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Registers two new stable top-level objects, token-estimate-result (deterministic UTF-8 byte-count estimation result with a closed guarantee enumeration) and surface-scan-policy (path/content patterns plus carried-only allowedUses), raising the object registry from 18 to 20 classes under contract-spec version 1.4.0 (FND-ADR-009).
|
|
11
|
+
- Extends the migration-manifest schema with legacy reference support and adds the matching fixtures (negative-06, negative-07, negative-08, positive-03).
|
|
12
|
+
- Adds the fixed-set-publication candidate (manifest and receipt schemas, fixtures, and a capability-fit declaration covering native-prebuild runtimes) outside the stable registry.
|
|
13
|
+
- Extends the Quickstart Profile candidate with consumer-schema-inventory and harness-surface-inventory schemas plus inventory fixtures.
|
|
14
|
+
- Applies the FND-ADR-001 gate-1 relaxation (one existing plus one structurally identical foreseeable consumer) and introduces gate 8 for finite closed semantics (FND-ADR-009).
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Keeps CONTRACTS_VERSION at 1.4.0; the same contract-spec line now covers the 20-object set, while the published 0.3.0 bytes carry the 18-object set of that version.
|
|
19
|
+
- Keeps method identifiers, parameter schemas, and domain result semantics under consumer ownership.
|
|
20
|
+
|
|
21
|
+
### Upgrade Notes
|
|
22
|
+
|
|
23
|
+
Version 0.4.0 is released on npm and the public mirror. Candidate subpaths are public but not stable; pin candidate imports to exactly 0.4.0 and validate stable objects against the 20-class registry contract.
|
|
24
|
+
<!-- release-skill:changelog:end version=0.4.0 locale=en -->
|
|
25
|
+
|
|
26
|
+
|
|
3
27
|
<!-- release-skill:changelog:start version=0.3.0 locale=en baseline=sha256:32a8df58662f9dbb64e142cb8a2b329556b4bd59872e48fcbc317cc971cbdd7c -->
|
|
4
28
|
## [0.3.0] - 2026-08-12
|
|
5
29
|
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# 变更日志
|
|
2
2
|
|
|
3
|
+
<!-- release-skill:changelog:start version=0.4.0 locale=zh-CN baseline=sha256:99c7f1d548dff69c87156f903efe5b05fa214299c01c9db4d79b0a322fe8ee5d -->
|
|
4
|
+
## [0.4.0] - 2026-08-16
|
|
5
|
+
|
|
6
|
+
本版在契约规格版本 1.4.0 不变的前提下把稳定 Contracts 登记表扩到 20 类顶层对象,补齐有限封闭语义(FND-ADR-009)的 fixtures 与 schema,并新增 fixed-set-publication 与 schema 清单候选。
|
|
7
|
+
|
|
8
|
+
### 新增
|
|
9
|
+
|
|
10
|
+
- 新增两个 stable 顶层对象:token-estimate-result(确定性 UTF-8 字节计数估算结果,封闭 guarantees 枚举)与 surface-scan-policy(路径/内容模式 + 只携带不解释的 allowedUses),对象登记从 18 类增至 20 类,契约规格版本保持 1.4.0(FND-ADR-009)。
|
|
11
|
+
- migration-manifest schema 增加遗留引用支持,并补齐对应 fixtures(negative-06、negative-07、negative-08、positive-03)。
|
|
12
|
+
- 新增 fixed-set-publication 候选(manifest/receipt schema、fixtures 与覆盖 native-prebuild 运行时的能力适配声明),不进入稳定登记表。
|
|
13
|
+
- Quickstart Profile 候选扩展 consumer-schema-inventory 与 harness-surface-inventory schema 及 inventory fixtures。
|
|
14
|
+
- 落地 FND-ADR-001 门 1 放宽(一个现有 + 一个结构同型可预见消费者)与门 8「有限封闭语义」(FND-ADR-009)。
|
|
15
|
+
|
|
16
|
+
### 变更
|
|
17
|
+
|
|
18
|
+
- CONTRACTS_VERSION 保持 1.4.0:同一契约规格版本线现在覆盖 20 类对象集,而已发布的 0.3.0 字节携带的是该版本的 18 类对象集。
|
|
19
|
+
- 方法标识、参数 Schema 与领域结果语义继续归消费者所有。
|
|
20
|
+
|
|
21
|
+
### 升级说明
|
|
22
|
+
|
|
23
|
+
0.4.0 已发布到 npm 与 public 镜像仓。candidate 子路径公开但不稳定;candidate 导入必须精确锁定 0.4.0,稳定对象按 20 类登记表契约校验。
|
|
24
|
+
<!-- release-skill:changelog:end version=0.4.0 locale=zh-CN -->
|
|
25
|
+
|
|
26
|
+
|
|
3
27
|
<!-- release-skill:changelog:start version=0.3.0 locale=zh-CN baseline=sha256:5f1c4cf56cc336279cbc6f11bc6cf8ce0a7524f454ff6589e067e828707a7cc7 -->
|
|
4
28
|
## [0.3.0] - 2026-08-12
|
|
5
29
|
|
package/README.md
CHANGED
|
@@ -4,28 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
# skill-family-contracts
|
|
6
6
|
|
|
7
|
-
<!-- release-skill:release-version: 0.
|
|
7
|
+
<!-- release-skill:release-version: 0.4.0 -->
|
|
8
8
|
|
|
9
9
|
The single authoritative package of machine-executable engineering structure and mechanism protocols (Contracts 1.4.0, frozen).
|
|
10
10
|
|
|
11
11
|
<!-- release-skill:managed:start id=latest-release -->
|
|
12
|
-
**0.
|
|
12
|
+
**0.4.0** (2026-08-16)
|
|
13
13
|
|
|
14
|
-
This
|
|
14
|
+
This release extends the stable Contracts registry to 20 top-level object classes under the unchanged contract-spec version 1.4.0, adds finite-closed-semantics fixtures and schemas (FND-ADR-009), and ships new fixed-set-publication and schema-inventory candidates.
|
|
15
15
|
|
|
16
16
|
**Added**
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
18
|
+
- Registers two new stable top-level objects, token-estimate-result (deterministic UTF-8 byte-count estimation result with a closed guarantee enumeration) and surface-scan-policy (path/content patterns plus carried-only allowedUses), raising the object registry from 18 to 20 classes under contract-spec version 1.4.0 (FND-ADR-009).
|
|
19
|
+
- Extends the migration-manifest schema with legacy reference support and adds the matching fixtures (negative-06, negative-07, negative-08, positive-03).
|
|
20
|
+
- Adds the fixed-set-publication candidate (manifest and receipt schemas, fixtures, and a capability-fit declaration covering native-prebuild runtimes) outside the stable registry.
|
|
21
|
+
- Extends the Quickstart Profile candidate with consumer-schema-inventory and harness-surface-inventory schemas plus inventory fixtures.
|
|
22
|
+
- Applies the FND-ADR-001 gate-1 relaxation (one existing plus one structurally identical foreseeable consumer) and introduces gate 8 for finite closed semantics (FND-ADR-009).
|
|
20
23
|
|
|
21
24
|
**Changed**
|
|
22
25
|
|
|
23
|
-
-
|
|
26
|
+
- Keeps CONTRACTS_VERSION at 1.4.0; the same contract-spec line now covers the 20-object set, while the published 0.3.0 bytes carry the 18-object set of that version.
|
|
24
27
|
- Keeps method identifiers, parameter schemas, and domain result semantics under consumer ownership.
|
|
25
28
|
|
|
26
29
|
**Upgrade Notes**
|
|
27
30
|
|
|
28
|
-
Version 0.
|
|
31
|
+
Version 0.4.0 is released on npm and the public mirror. Candidate subpaths are public but not stable; pin candidate imports to exactly 0.4.0 and validate stable objects against the 20-class registry contract.
|
|
29
32
|
<!-- release-skill:managed:end id=latest-release -->
|
|
30
33
|
|
|
31
34
|
## Problem It Solves
|
|
@@ -41,14 +44,14 @@ Schema validation is based entirely on [Ajv](https://ajv.js.org/) (exact version
|
|
|
41
44
|
## Installation and Minimal Example
|
|
42
45
|
|
|
43
46
|
```sh
|
|
44
|
-
npm install skill-family-contracts@0.
|
|
47
|
+
npm install skill-family-contracts@0.4.0
|
|
45
48
|
npm info skill-family-contracts --help
|
|
46
49
|
```
|
|
47
50
|
|
|
48
51
|
The minimal example starts from an empty directory and demonstrates how to validate a registered contract object:
|
|
49
52
|
|
|
50
53
|
```js
|
|
51
|
-
// Run from an empty directory: npm install skill-family-contracts@0.
|
|
54
|
+
// Run from an empty directory: npm install skill-family-contracts@0.4.0
|
|
52
55
|
import { validateDocument } from "skill-family-contracts";
|
|
53
56
|
|
|
54
57
|
const document = {
|
|
@@ -81,9 +84,9 @@ import {
|
|
|
81
84
|
} from "skill-family-contracts/candidate/quickstart-profile";
|
|
82
85
|
```
|
|
83
86
|
|
|
84
|
-
Version 0.
|
|
87
|
+
Version 0.4.0 carries Quickstart Profile v2. Its protocol fixes the business-neutral operation to `execute-method`; Resource, Task, and Result schemas resolve one another through their real v2 `$id` values. Foundation validates the JSON-safe exchange shape, while the consumer owns method identifiers, parameter schemas, and domain results.
|
|
85
88
|
|
|
86
|
-
The subpath is public but **not stable**. Its schemas remain absent from `src/registry.json`, do not expand the eighteen stable object classes, and may change or be removed in a later minor release. Pin exactly `0.
|
|
89
|
+
The subpath is public but **not stable**. Its schemas remain absent from `src/registry.json`, do not expand the eighteen stable object classes, and may change or be removed in a later minor release. Pin exactly `0.4.0` when evaluating v2. Integrations that still require candidate v1 must stay pinned to exactly `0.2.1`.
|
|
87
90
|
|
|
88
91
|
## Typical Use Cases
|
|
89
92
|
|
|
@@ -219,7 +222,7 @@ On validation failure `errorCode` is `SFC1001` (SCHEMA_VALIDATION_FAILED, docume
|
|
|
219
222
|
|
|
220
223
|
### Capability selection
|
|
221
224
|
|
|
222
|
-
- `foundation.contracts.object-validation`: Ajv dual-dialect validation of the
|
|
225
|
+
- `foundation.contracts.object-validation`: Ajv dual-dialect validation of the 20 object classes.
|
|
223
226
|
- `foundation.contracts.registry-protocol`: Schema `$id` and protocol-name registry query.
|
|
224
227
|
- `foundation.contracts.kernel-protocol`: operation-request/result protocol.
|
|
225
228
|
- `foundation.contracts.mandatory-checks`: nine mandatory rules and unresolved references.
|
|
@@ -249,7 +252,7 @@ On validation failure `errorCode` is `SFC1001` (SCHEMA_VALIDATION_FAILED, docume
|
|
|
249
252
|
|
|
250
253
|
### Architectural invariants
|
|
251
254
|
|
|
252
|
-
- The set of
|
|
255
|
+
- The set of 20 top-level object classes is fixed; additions require an ADR; the error-code freeze does not drift.
|
|
253
256
|
- The validator is exclusively Ajv 8.20.0 (exact pin); no other implementation is accepted.
|
|
254
257
|
|
|
255
258
|
### Route elsewhere when
|
package/README.zh-CN.md
CHANGED
|
@@ -5,28 +5,31 @@
|
|
|
5
5
|
|
|
6
6
|
# skill-family-contracts
|
|
7
7
|
|
|
8
|
-
<!-- release-skill:release-version: 0.
|
|
8
|
+
<!-- release-skill:release-version: 0.4.0 -->
|
|
9
9
|
|
|
10
10
|
机器可执行工程结构和机制协议的唯一权威包(Contracts 1.4.0,冻结)。
|
|
11
11
|
|
|
12
12
|
<!-- release-skill:managed:start id=latest-release -->
|
|
13
|
-
**0.
|
|
13
|
+
**0.4.0** (2026-08-16)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
本版在契约规格版本 1.4.0 不变的前提下把稳定 Contracts 登记表扩到 20 类顶层对象,补齐有限封闭语义(FND-ADR-009)的 fixtures 与 schema,并新增 fixed-set-publication 与 schema 清单候选。
|
|
16
16
|
|
|
17
17
|
**新增**
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
19
|
+
- 新增两个 stable 顶层对象:token-estimate-result(确定性 UTF-8 字节计数估算结果,封闭 guarantees 枚举)与 surface-scan-policy(路径/内容模式 + 只携带不解释的 allowedUses),对象登记从 18 类增至 20 类,契约规格版本保持 1.4.0(FND-ADR-009)。
|
|
20
|
+
- migration-manifest schema 增加遗留引用支持,并补齐对应 fixtures(negative-06、negative-07、negative-08、positive-03)。
|
|
21
|
+
- 新增 fixed-set-publication 候选(manifest/receipt schema、fixtures 与覆盖 native-prebuild 运行时的能力适配声明),不进入稳定登记表。
|
|
22
|
+
- Quickstart Profile 候选扩展 consumer-schema-inventory 与 harness-surface-inventory schema 及 inventory fixtures。
|
|
23
|
+
- 落地 FND-ADR-001 门 1 放宽(一个现有 + 一个结构同型可预见消费者)与门 8「有限封闭语义」(FND-ADR-009)。
|
|
21
24
|
|
|
22
25
|
**变更**
|
|
23
26
|
|
|
24
|
-
-
|
|
27
|
+
- CONTRACTS_VERSION 保持 1.4.0:同一契约规格版本线现在覆盖 20 类对象集,而已发布的 0.3.0 字节携带的是该版本的 18 类对象集。
|
|
25
28
|
- 方法标识、参数 Schema 与领域结果语义继续归消费者所有。
|
|
26
29
|
|
|
27
30
|
**升级说明**
|
|
28
31
|
|
|
29
|
-
0.
|
|
32
|
+
0.4.0 已发布到 npm 与 public 镜像仓。candidate 子路径公开但不稳定;candidate 导入必须精确锁定 0.4.0,稳定对象按 20 类登记表契约校验。
|
|
30
33
|
<!-- release-skill:managed:end id=latest-release -->
|
|
31
34
|
|
|
32
35
|
## 解决的问题
|
|
@@ -42,14 +45,14 @@ Schema 验证完全基于 [Ajv](https://ajv.js.org/)(精确版本见 `package.
|
|
|
42
45
|
## 安装和最小示例
|
|
43
46
|
|
|
44
47
|
```sh
|
|
45
|
-
npm install skill-family-contracts@0.
|
|
48
|
+
npm install skill-family-contracts@0.4.0
|
|
46
49
|
npm info skill-family-contracts --help
|
|
47
50
|
```
|
|
48
51
|
|
|
49
52
|
最小示例从空目录开始,演示如何校验一份已登记契约对象:
|
|
50
53
|
|
|
51
54
|
```js
|
|
52
|
-
// 从空目录运行:npm install skill-family-contracts@0.
|
|
55
|
+
// 从空目录运行:npm install skill-family-contracts@0.4.0
|
|
53
56
|
import { validateDocument } from "skill-family-contracts";
|
|
54
57
|
|
|
55
58
|
const document = {
|
|
@@ -82,9 +85,9 @@ import {
|
|
|
82
85
|
} from "skill-family-contracts/candidate/quickstart-profile";
|
|
83
86
|
```
|
|
84
87
|
|
|
85
|
-
0.
|
|
88
|
+
0.4.0 携带 Quickstart Profile v2。协议把业务中立的操作固定为 `execute-method`,Resource、Task、Result Schema 通过真实的 v2 `$id` 互相解析。Foundation 只校验 JSON-safe 交换结构;方法标识、参数 Schema 与领域结果继续归消费者所有。
|
|
86
89
|
|
|
87
|
-
以上子路径公开但**不稳定**。这些 Schema 不进入 `src/registry.json`,也不扩张十八类稳定对象,后续小版本可以修改或移除。评估 v2 时应精确锁定 `0.
|
|
90
|
+
以上子路径公开但**不稳定**。这些 Schema 不进入 `src/registry.json`,也不扩张十八类稳定对象,后续小版本可以修改或移除。评估 v2 时应精确锁定 `0.4.0`;仍依赖 candidate v1 的接入必须继续精确锁定 `0.2.1`。
|
|
88
91
|
|
|
89
92
|
## 典型使用场景
|
|
90
93
|
|
|
@@ -220,7 +223,7 @@ import {
|
|
|
220
223
|
|
|
221
224
|
### Capability selection
|
|
222
225
|
|
|
223
|
-
- `foundation.contracts.object-validation`:Ajv 双方言校验
|
|
226
|
+
- `foundation.contracts.object-validation`:Ajv 双方言校验 20 类对象。
|
|
224
227
|
- `foundation.contracts.registry-protocol`:Schema `$id` 与协议名登记查询。
|
|
225
228
|
- `foundation.contracts.kernel-protocol`:operation-request/result 协议。
|
|
226
229
|
- `foundation.contracts.mandatory-checks`:九类强制规则与未解析引用。
|
|
@@ -250,7 +253,7 @@ import {
|
|
|
250
253
|
|
|
251
254
|
### Architectural invariants
|
|
252
255
|
|
|
253
|
-
-
|
|
256
|
+
- 20 类顶层对象集合固定,新增需 ADR;错误码冻结不漂移。
|
|
254
257
|
- 校验器仅 Ajv 8.20.0(精确 pin),不接受其他实现。
|
|
255
258
|
|
|
256
259
|
### Route elsewhere when
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "skill-family.fixed-set-publication-capability-fit",
|
|
4
|
+
"status": "stable",
|
|
5
|
+
"runtimeSupport": "native-prebuild",
|
|
6
|
+
"stableRegistry": true,
|
|
7
|
+
"implementationExported": true,
|
|
8
|
+
"supportedPlatforms": [
|
|
9
|
+
"darwin-arm64",
|
|
10
|
+
"darwin-x64",
|
|
11
|
+
"linux-arm64-gnu",
|
|
12
|
+
"linux-x64-gnu"
|
|
13
|
+
],
|
|
14
|
+
"requiredPrimitives": [
|
|
15
|
+
"darwin.renameatx_np(RENAME_EXCL)",
|
|
16
|
+
"linux.renameat2(RENAME_NOREPLACE)"
|
|
17
|
+
],
|
|
18
|
+
"blockingReason": "Stable for the four supported platform keys (darwin-arm64, darwin-x64, linux-arm64-gnu, linux-x64-gnu). Windows, Linux musl, and unknown OS/architecture/libc combinations remain unsupported and fail closed."
|
|
19
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.manifest.negative.directory-mode",
|
|
3
|
+
"schema": "manifest",
|
|
4
|
+
"expectValid": false,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-manifest",
|
|
8
|
+
"source": {
|
|
9
|
+
"rootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "1111111111111111111111111111111111111111111111111111111111111111"
|
|
14
|
+
},
|
|
15
|
+
"root": { "type": "directory", "mode": 493, "device": "1", "inode": "1" },
|
|
16
|
+
"directories": [
|
|
17
|
+
{ "path": "nested", "type": "directory", "mode": 512, "device": "1", "inode": "2" }
|
|
18
|
+
],
|
|
19
|
+
"closureDigest": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
20
|
+
},
|
|
21
|
+
"target": {
|
|
22
|
+
"rootBinding": {
|
|
23
|
+
"kind": "trusted-filesystem-root-binding",
|
|
24
|
+
"digestAlgorithm": "sha256",
|
|
25
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
26
|
+
"digest": "3333333333333333333333333333333333333333333333333333333333333333"
|
|
27
|
+
},
|
|
28
|
+
"root": { "type": "directory", "mode": 493, "device": "3", "inode": "3" },
|
|
29
|
+
"directories": [],
|
|
30
|
+
"closureDigest": "4444444444444444444444444444444444444444444444444444444444444444",
|
|
31
|
+
"expectation": "absent"
|
|
32
|
+
},
|
|
33
|
+
"members": [
|
|
34
|
+
{ "path": "nested/file", "type": "regular", "mode": 420, "bytes": 1, "sha256": "5555555555555555555555555555555555555555555555555555555555555555" }
|
|
35
|
+
],
|
|
36
|
+
"digest": "6666666666666666666666666666666666666666666666666666666666666666"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.manifest.negative.path-escape",
|
|
3
|
+
"schema": "manifest",
|
|
4
|
+
"expectValid": false,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-manifest",
|
|
8
|
+
"source": {
|
|
9
|
+
"rootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "1111111111111111111111111111111111111111111111111111111111111111"
|
|
14
|
+
},
|
|
15
|
+
"root": { "type": "directory", "mode": 493, "device": "1", "inode": "101" },
|
|
16
|
+
"directories": [],
|
|
17
|
+
"closureDigest": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
18
|
+
},
|
|
19
|
+
"target": {
|
|
20
|
+
"rootBinding": {
|
|
21
|
+
"kind": "trusted-filesystem-root-binding",
|
|
22
|
+
"digestAlgorithm": "sha256",
|
|
23
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
24
|
+
"digest": "3333333333333333333333333333333333333333333333333333333333333333"
|
|
25
|
+
},
|
|
26
|
+
"root": { "type": "directory", "mode": 493, "device": "3", "inode": "301" },
|
|
27
|
+
"directories": [],
|
|
28
|
+
"closureDigest": "6666666666666666666666666666666666666666666666666666666666666666",
|
|
29
|
+
"expectation": "absent"
|
|
30
|
+
},
|
|
31
|
+
"members": [
|
|
32
|
+
{
|
|
33
|
+
"path": "../outside.txt",
|
|
34
|
+
"type": "regular",
|
|
35
|
+
"mode": 420,
|
|
36
|
+
"bytes": 1,
|
|
37
|
+
"sha256": "4444444444444444444444444444444444444444444444444444444444444444"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"digest": "5555555555555555555555555555555555555555555555555555555555555555"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.manifest.positive.platform-bundle",
|
|
3
|
+
"schema": "manifest",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-manifest",
|
|
8
|
+
"source": {
|
|
9
|
+
"rootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "1111111111111111111111111111111111111111111111111111111111111111"
|
|
14
|
+
},
|
|
15
|
+
"root": { "type": "directory", "mode": 493, "device": "1", "inode": "101" },
|
|
16
|
+
"directories": [
|
|
17
|
+
{ "path": "generated", "type": "directory", "mode": 493, "device": "1", "inode": "102" },
|
|
18
|
+
{ "path": "generated/platforms", "type": "directory", "mode": 493, "device": "1", "inode": "103" },
|
|
19
|
+
{ "path": "generated/platforms/fixture", "type": "directory", "mode": 493, "device": "1", "inode": "104" },
|
|
20
|
+
{ "path": "generated/platforms/fixture/skills", "type": "directory", "mode": 493, "device": "1", "inode": "105" },
|
|
21
|
+
{ "path": "generated/platforms/fixture/skills/demo", "type": "directory", "mode": 493, "device": "1", "inode": "106" }
|
|
22
|
+
],
|
|
23
|
+
"closureDigest": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
24
|
+
},
|
|
25
|
+
"target": {
|
|
26
|
+
"rootBinding": {
|
|
27
|
+
"kind": "trusted-filesystem-root-binding",
|
|
28
|
+
"digestAlgorithm": "sha256",
|
|
29
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
30
|
+
"digest": "3333333333333333333333333333333333333333333333333333333333333333"
|
|
31
|
+
},
|
|
32
|
+
"root": { "type": "directory", "mode": 493, "device": "2", "inode": "201" },
|
|
33
|
+
"directories": [],
|
|
34
|
+
"closureDigest": "7777777777777777777777777777777777777777777777777777777777777777",
|
|
35
|
+
"expectation": "absent"
|
|
36
|
+
},
|
|
37
|
+
"members": [
|
|
38
|
+
{
|
|
39
|
+
"path": "generated/platforms/fixture/plugin.json",
|
|
40
|
+
"type": "regular",
|
|
41
|
+
"mode": 420,
|
|
42
|
+
"bytes": 18,
|
|
43
|
+
"sha256": "4444444444444444444444444444444444444444444444444444444444444444"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"path": "generated/platforms/fixture/skills/demo/SKILL.md",
|
|
47
|
+
"type": "regular",
|
|
48
|
+
"mode": 420,
|
|
49
|
+
"bytes": 24,
|
|
50
|
+
"sha256": "5555555555555555555555555555555555555555555555555555555555555555"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"digest": "6666666666666666666666666666666666666666666666666666666666666666"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.manifest.positive.versioned-candidate",
|
|
3
|
+
"schema": "manifest",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-manifest",
|
|
8
|
+
"source": {
|
|
9
|
+
"rootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "7777777777777777777777777777777777777777777777777777777777777777"
|
|
14
|
+
},
|
|
15
|
+
"root": { "type": "directory", "mode": 448, "device": "7", "inode": "701" },
|
|
16
|
+
"directories": [
|
|
17
|
+
{ "path": "versions", "type": "directory", "mode": 448, "device": "7", "inode": "702" },
|
|
18
|
+
{ "path": "versions/v1", "type": "directory", "mode": 448, "device": "7", "inode": "703" },
|
|
19
|
+
{ "path": "versions/v1/scripts", "type": "directory", "mode": 448, "device": "7", "inode": "704" }
|
|
20
|
+
],
|
|
21
|
+
"closureDigest": "8888888888888888888888888888888888888888888888888888888888888888"
|
|
22
|
+
},
|
|
23
|
+
"target": {
|
|
24
|
+
"rootBinding": {
|
|
25
|
+
"kind": "trusted-filesystem-root-binding",
|
|
26
|
+
"digestAlgorithm": "sha256",
|
|
27
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
28
|
+
"digest": "9999999999999999999999999999999999999999999999999999999999999999"
|
|
29
|
+
},
|
|
30
|
+
"root": { "type": "directory", "mode": 448, "device": "9", "inode": "901" },
|
|
31
|
+
"directories": [],
|
|
32
|
+
"closureDigest": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
|
|
33
|
+
"expectation": "absent"
|
|
34
|
+
},
|
|
35
|
+
"members": [
|
|
36
|
+
{
|
|
37
|
+
"path": "versions/v1/SKILL.md",
|
|
38
|
+
"type": "regular",
|
|
39
|
+
"mode": 420,
|
|
40
|
+
"bytes": 31,
|
|
41
|
+
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"path": "versions/v1/scripts/runner.py",
|
|
45
|
+
"type": "regular",
|
|
46
|
+
"mode": 493,
|
|
47
|
+
"bytes": 42,
|
|
48
|
+
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"digest": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.receipt.negative.partial",
|
|
3
|
+
"schema": "receipt",
|
|
4
|
+
"expectValid": false,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-receipt",
|
|
8
|
+
"manifestDigest": "6666666666666666666666666666666666666666666666666666666666666666",
|
|
9
|
+
"targetRootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "7777777777777777777777777777777777777777777777777777777777777777"
|
|
14
|
+
},
|
|
15
|
+
"platform": "darwin",
|
|
16
|
+
"primitive": "darwin-renameatx-noreplace-v1",
|
|
17
|
+
"status": "partially_applied",
|
|
18
|
+
"targetState": "published",
|
|
19
|
+
"commitState": "rename-committed",
|
|
20
|
+
"verification": "verified",
|
|
21
|
+
"durability": "indeterminate",
|
|
22
|
+
"publishedClosureDigest": "8888888888888888888888888888888888888888888888888888888888888888",
|
|
23
|
+
"memberCount": 1
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.receipt.positive.fsync-indeterminate",
|
|
3
|
+
"schema": "receipt",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-receipt",
|
|
8
|
+
"manifestDigest": "1111111111111111111111111111111111111111111111111111111111111111",
|
|
9
|
+
"targetRootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
14
|
+
},
|
|
15
|
+
"platform": "linux",
|
|
16
|
+
"primitive": "linux-renameat2-noreplace-v1",
|
|
17
|
+
"status": "indeterminate",
|
|
18
|
+
"targetState": "published",
|
|
19
|
+
"commitState": "rename-committed",
|
|
20
|
+
"verification": "verified",
|
|
21
|
+
"durability": "indeterminate",
|
|
22
|
+
"publishedClosureDigest": "3333333333333333333333333333333333333333333333333333333333333333",
|
|
23
|
+
"memberCount": 2,
|
|
24
|
+
"error": {
|
|
25
|
+
"code": "DIRECTORY_FSYNC_FAILED",
|
|
26
|
+
"message": "The fixed set verified after rename, but directory fsync failed."
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.receipt.positive.success",
|
|
3
|
+
"schema": "receipt",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-receipt",
|
|
8
|
+
"manifestDigest": "1111111111111111111111111111111111111111111111111111111111111111",
|
|
9
|
+
"targetRootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "2222222222222222222222222222222222222222222222222222222222222222"
|
|
14
|
+
},
|
|
15
|
+
"platform": "linux",
|
|
16
|
+
"primitive": "linux-renameat2-noreplace-v1",
|
|
17
|
+
"status": "succeeded",
|
|
18
|
+
"targetState": "published",
|
|
19
|
+
"commitState": "rename-committed",
|
|
20
|
+
"verification": "verified",
|
|
21
|
+
"durability": "synced",
|
|
22
|
+
"publishedClosureDigest": "3333333333333333333333333333333333333333333333333333333333333333",
|
|
23
|
+
"memberCount": 2
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.receipt.positive.unsupported",
|
|
3
|
+
"schema": "receipt",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-receipt",
|
|
8
|
+
"manifestDigest": "4444444444444444444444444444444444444444444444444444444444444444",
|
|
9
|
+
"targetRootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "5555555555555555555555555555555555555555555555555555555555555555"
|
|
14
|
+
},
|
|
15
|
+
"platform": "other",
|
|
16
|
+
"primitive": "none",
|
|
17
|
+
"status": "refused",
|
|
18
|
+
"targetState": "absent",
|
|
19
|
+
"commitState": "not-committed",
|
|
20
|
+
"verification": "not-run",
|
|
21
|
+
"durability": "not-attempted",
|
|
22
|
+
"error": {
|
|
23
|
+
"code": "UNSUPPORTED_PLATFORM",
|
|
24
|
+
"message": "No verified no-replace primitive is available."
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"fixtureId": "fixed-set.receipt.positive.verify-indeterminate",
|
|
3
|
+
"schema": "receipt",
|
|
4
|
+
"expectValid": true,
|
|
5
|
+
"data": {
|
|
6
|
+
"schemaVersion": 1,
|
|
7
|
+
"kind": "skill-family.fixed-set-publication-receipt",
|
|
8
|
+
"manifestDigest": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
9
|
+
"targetRootBinding": {
|
|
10
|
+
"kind": "trusted-filesystem-root-binding",
|
|
11
|
+
"digestAlgorithm": "sha256",
|
|
12
|
+
"basis": "canonical-realpath-device-inode-type-mode-v1",
|
|
13
|
+
"digest": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
14
|
+
},
|
|
15
|
+
"platform": "darwin",
|
|
16
|
+
"primitive": "darwin-renameatx-noreplace-v1",
|
|
17
|
+
"status": "indeterminate",
|
|
18
|
+
"targetState": "indeterminate",
|
|
19
|
+
"commitState": "rename-committed",
|
|
20
|
+
"verification": "failed",
|
|
21
|
+
"durability": "indeterminate",
|
|
22
|
+
"error": {
|
|
23
|
+
"code": "POST_VERIFY_FAILED",
|
|
24
|
+
"message": "Rename committed, but the target identity could not be verified."
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|