skill-family-engineering-kit 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ <!-- release-skill:changelog:start version=0.19.0 locale=en baseline=sha256:d3b79ce1564df3e0dc0f0abc1af616817550044de73f9b05b57a5dd65fd47dae -->
4
+ ## [0.19.0] - 2026-09-07
5
+
6
+ Engineering Kit 0.19.0 projects the new batch transport into the official offline Bundle and registers the mechanism-batch capability in the built-in catalog.
7
+
8
+ ### Added
9
+
10
+ - The official Bundle projection now carries runMechanismCliBatch, the --batch CLI mode, the two mechanism-batch Schemas, and the frozen batch capacity policy with unchanged source identity, digest, and integrity handling.
11
+ - The capability catalog adds foundation.harness.mechanism-batch with since 0.19.0 and stability candidate, together with intent, failure semantics, and direct test references.
12
+
13
+ ### Changed
14
+
15
+ - Adoption guidance documents batch selection rules: same-process calls keep the existing object entry; independent cross-process canonical-json requests within capacity are batch candidates; dependent or oversized requests keep the original path.
16
+
17
+ ### Upgrade Notes
18
+
19
+ Pin all three Foundation packages to exactly 0.19.0 and rebuild official Bundles after upgrading per the existing package identity and provenance rules. The catalog entry is candidate: a catalog match is not a stable adoption declaration.
20
+ <!-- release-skill:changelog:end version=0.19.0 locale=en -->
21
+
22
+
3
23
  <!-- release-skill:changelog:start version=0.18.0 locale=en baseline=sha256:9c6fe9859fb75316937790054ae7d45bfc21d38ce97d8e650d7da18757a462c5 -->
4
24
  ## [0.18.0] - 2026-09-05
5
25
 
@@ -1,5 +1,25 @@
1
1
  # 变更日志
2
2
 
3
+ <!-- release-skill:changelog:start version=0.19.0 locale=zh-CN baseline=sha256:f000b13d13ce11660aaa4c5a1b450af39f99cb62a5177467783d863e7f411296 -->
4
+ ## [0.19.0] - 2026-09-07
5
+
6
+ Engineering Kit 0.19.0 把新批量传输投影进官方离线 Bundle,并在内置能力目录登记 mechanism-batch 能力。
7
+
8
+ ### 新增
9
+
10
+ - 官方 Bundle 投影携带 runMechanismCliBatch、--batch CLI 模式、两个机制批量 Schema 与冻结的批量容量政策,来源身份、摘要与完整性处理不变。
11
+ - 能力目录新增 foundation.harness.mechanism-batch:since 0.19.0、stability candidate,并登记意图、失败语义与直接测试引用。
12
+
13
+ ### 变更
14
+
15
+ - 采用指导补充批量选择规则:同进程调用保留既有对象入口;跨进程、相互独立且容量允许的 canonical-json 请求可作为批量候选;有依赖或超限请求保留原路径。
16
+
17
+ ### 升级说明
18
+
19
+ 三个 Foundation 包须一起精确锁定到 0.19.0,升级后按既有包身份与 provenance 规则重建官方 Bundle。该目录条目为候选能力:目录命中不构成稳定采用声明。
20
+ <!-- release-skill:changelog:end version=0.19.0 locale=zh-CN -->
21
+
22
+
3
23
  <!-- release-skill:changelog:start version=0.18.0 locale=zh-CN baseline=sha256:c8c2891b64fc31e1fb3754715da04d6ec0727b31e36e011d38735e45795cdd53 -->
4
24
  ## [0.18.0] - 2026-09-05
5
25
 
package/README.md CHANGED
@@ -4,26 +4,27 @@
4
4
 
5
5
  # skill-family-engineering-kit
6
6
 
7
- <!-- release-skill:release-version: 0.18.0 -->
7
+ <!-- release-skill:release-version: 0.19.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.18.0** (2026-09-05)
12
+ **0.19.0** (2026-09-07)
13
13
 
14
- Engineering Kit 0.18.0 projects the stable Harness replaceFixedSetAtomic export into the existing offline Quickstart Bundle.
14
+ Engineering Kit 0.19.0 projects the new batch transport into the official offline Bundle and registers the mechanism-batch capability in the built-in catalog.
15
15
 
16
16
  **Added**
17
17
 
18
- - The existing candidate Bundle now carries the stable fixed-set replacement source, loader, native closure, and replaceFixedSetAtomic export without adding a parallel implementation or a new Kit command.
18
+ - The official Bundle projection now carries runMechanismCliBatch, the --batch CLI mode, the two mechanism-batch Schemas, and the frozen batch capacity policy with unchanged source identity, digest, and integrity handling.
19
+ - The capability catalog adds foundation.harness.mechanism-batch with since 0.19.0 and stability candidate, together with intent, failure semantics, and direct test references.
19
20
 
20
21
  **Changed**
21
22
 
22
- - Moves the package version to 0.18.0 together with Contracts and Harness while preserving runProjection as the Bundle write and authorization boundary.
23
+ - Adoption guidance documents batch selection rules: same-process calls keep the existing object entry; independent cross-process canonical-json requests within capacity are batch candidates; dependent or oversized requests keep the original path.
23
24
 
24
25
  **Upgrade Notes**
25
26
 
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.
27
+ Pin all three Foundation packages to exactly 0.19.0 and rebuild official Bundles after upgrading per the existing package identity and provenance rules. The catalog entry is candidate: a catalog match is not a stable adoption declaration.
27
28
  <!-- release-skill:managed:end id=latest-release -->
28
29
 
29
30
  ### Foundation 0.15.0 candidate qualification entries
@@ -67,15 +68,15 @@ mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
67
68
  After publication, use the registry coordinate:
68
69
 
69
70
  ```sh
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>
71
+ npm install --save-dev skill-family-engineering-kit@0.19.0
72
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit --help
73
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
74
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale en --uses ./uses.json
75
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit projection --root <repo>
76
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit check --root <repo>
76
77
  ```
77
78
 
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`.
79
+ 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.19.0 -- skill-family-kit --help`.
79
80
 
80
81
  ### Three adoption journeys
81
82
 
package/README.zh-CN.md CHANGED
@@ -5,26 +5,27 @@
5
5
 
6
6
  # skill-family-engineering-kit
7
7
 
8
- <!-- release-skill:release-version: 0.18.0 -->
8
+ <!-- release-skill:release-version: 0.19.0 -->
9
9
 
10
10
  开发与 CI 阶段使用的工程工具包。**恰好四个**顶层命令,没有第五个:
11
11
 
12
12
  <!-- release-skill:managed:start id=latest-release -->
13
- **0.18.0** (2026-09-05)
13
+ **0.19.0** (2026-09-07)
14
14
 
15
- Engineering Kit 0.18.0 Harness 稳定的 replaceFixedSetAtomic 导出投影到既有离线 Quickstart Bundle。
15
+ Engineering Kit 0.19.0 把新批量传输投影进官方离线 Bundle,并在内置能力目录登记 mechanism-batch 能力。
16
16
 
17
17
  **新增**
18
18
 
19
- - 既有 candidate Bundle 携带稳定的固定集合替换源码、加载器、原生闭包与 replaceFixedSetAtomic 导出;不新增平行实现,也不增加 Kit 命令。
19
+ - 官方 Bundle 投影携带 runMechanismCliBatch、--batch CLI 模式、两个机制批量 Schema 与冻结的批量容量政策,来源身份、摘要与完整性处理不变。
20
+ - 能力目录新增 foundation.harness.mechanism-batch:since 0.19.0、stability candidate,并登记意图、失败语义与直接测试引用。
20
21
 
21
22
  **变更**
22
23
 
23
- - 包版本与 Contracts、Harness 一同升至 0.18.0,runProjection 继续作为 Bundle 的写入与授权边界。
24
+ - 采用指导补充批量选择规则:同进程调用保留既有对象入口;跨进程、相互独立且容量允许的 canonical-json 请求可作为批量候选;有依赖或超限请求保留原路径。
24
25
 
25
26
  **升级说明**
26
27
 
27
- 三个 Foundation 包须一起精确锁定到 0.18.0,并从这些已安装包的精确字节重建受管 Bundle。Bundle 消费者获得相同的非幂等替换语义,不得盲目重试提交后或不确定结果。
28
+ 三个 Foundation 包须一起精确锁定到 0.19.0,升级后按既有包身份与 provenance 规则重建官方 Bundle。该目录条目为候选能力:目录命中不构成稳定采用声明。
28
29
  <!-- release-skill:managed:end id=latest-release -->
29
30
 
30
31
  ### Foundation 0.15.0 candidate 资格入口
@@ -68,15 +69,15 @@ mkdir "$pack_dir/consumer" && (cd "$pack_dir/consumer" && npm init -y)
68
69
  发布后再使用 registry 坐标:
69
70
 
70
71
  ```sh
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>
72
+ npm install --save-dev skill-family-engineering-kit@0.19.0
73
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit --help
74
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit scaffold --root <empty-dir> --project-id my-project
75
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit adopt-plan --root <repo> --list-capabilities --all --scope all --locale zh-CN --uses ./uses.json
76
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit projection --root <repo>
77
+ npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit check --root <repo>
77
78
  ```
78
79
 
79
- 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.18.0 -- skill-family-kit --help`。
80
+ 以上四条命令分别覆盖生成骨架、只读盘点、受管投影与诊断;零安装形式可用 `npm exec --package=skill-family-engineering-kit@0.19.0 -- skill-family-kit --help`。
80
81
 
81
82
  ### 三条采用旅程
82
83
 
@@ -76,6 +76,16 @@ const ADDITIONAL_FOUNDATION_SCHEMA_FILES = Object.freeze([
76
76
  ["fixed-set-publication-receipt.schema.json", "src/schemas/fixed-set-publication-receipt.schema.json", "schemas/foundation/fixed-set-publication-receipt.schema.json"],
77
77
  ["schema-validation-batch-request.schema.json", "candidate/foundation-mechanisms/schema-validation-batch-request.schema.json", "schemas/foundation/schema-validation-batch-request.schema.json"],
78
78
  ["schema-validation-batch-result.schema.json", "candidate/foundation-mechanisms/schema-validation-batch-result.schema.json", "schemas/foundation/schema-validation-batch-result.schema.json"],
79
+ ["mechanism-batch-request.schema.json", "candidate/foundation-mechanisms/mechanism-batch-request.schema.json", "schemas/foundation/mechanism-batch-request.schema.json"],
80
+ ["mechanism-batch-result.schema.json", "candidate/foundation-mechanisms/mechanism-batch-result.schema.json", "schemas/foundation/mechanism-batch-result.schema.json"],
81
+ ]);
82
+
83
+ // Non-Schema Foundation assets projected verbatim. They are deliberately kept
84
+ // out of ADDITIONAL_FOUNDATION_SCHEMA_FILES: the schema graph claims a
85
+ // document.$id for every schema row, while the capacity policy is a plain
86
+ // JSON authority with no Schema identity.
87
+ const ADDITIONAL_FOUNDATION_ASSET_FILES = Object.freeze([
88
+ ["mechanism-batch-policy.json", "candidate/foundation-mechanisms/mechanism-batch-policy.json", "schemas/foundation/mechanism-batch-policy.json"],
79
89
  ]);
80
90
 
81
91
  const HARNESS_IMPORT_MAP = new Map([
@@ -96,6 +106,7 @@ const HARNESS_STRICT_READ_IMPORT_MAP = new Map([
96
106
 
97
107
  const HARNESS_CLI_IMPORT_MAP = new Map([
98
108
  ["./quickstart-profile.mjs", "./runner.mjs"],
109
+ ["skill-family-contracts/quickstart-profile", "./runtime/contracts-candidate/index.mjs"],
99
110
  ]);
100
111
 
101
112
  const HARNESS_ATOMIC_IMPORT_MAP = new Map([
@@ -980,13 +991,22 @@ function projectContractsCandidateIndex(sourceText) {
980
991
  `schema load path ${fileName}`,
981
992
  );
982
993
  }
983
- for (const [fileName] of ADDITIONAL_FOUNDATION_SCHEMA_FILES.filter(([name]) => name.startsWith("schema-validation-batch-"))) {
994
+ for (const [fileName] of ADDITIONAL_FOUNDATION_SCHEMA_FILES.filter(
995
+ ([name]) => name.startsWith("schema-validation-batch-") || name.startsWith("mechanism-batch-"),
996
+ )) {
984
997
  applyOnce(
985
998
  `load(new URL("../foundation-mechanisms/${fileName}", import.meta.url))`,
986
999
  `load(new URL("../../schemas/foundation/${fileName}", import.meta.url))`,
987
1000
  `schema load path ${fileName}`,
988
1001
  );
989
1002
  }
1003
+ for (const [fileName] of ADDITIONAL_FOUNDATION_ASSET_FILES) {
1004
+ applyOnce(
1005
+ `load(new URL("../foundation-mechanisms/${fileName}", import.meta.url))`,
1006
+ `load(new URL("../../schemas/foundation/${fileName}", import.meta.url))`,
1007
+ `asset load path ${fileName}`,
1008
+ );
1009
+ }
990
1010
 
991
1011
  const getCollectionMarker = "function getCollection(";
992
1012
  const getCollectionHits = projected.split(getCollectionMarker).length - 1;
@@ -1238,6 +1258,10 @@ export async function buildQuickstartProfileProjection({
1238
1258
  for (const [fileName, sourcePath] of ADDITIONAL_FOUNDATION_SCHEMA_FILES) {
1239
1259
  additionalSchemaTexts[fileName] = await readSourceText(contractsRoot, sourcePath);
1240
1260
  }
1261
+ const additionalAssetTexts = {};
1262
+ for (const [fileName, sourcePath] of ADDITIONAL_FOUNDATION_ASSET_FILES) {
1263
+ additionalAssetTexts[fileName] = await readSourceText(contractsRoot, sourcePath);
1264
+ }
1241
1265
  sources.harnessIndex = await readSourceText(harnessRoot, "src/index.mjs");
1242
1266
  sources.harnessCandidate = await readSourceText(harnessRoot, "candidate/quickstart-profile.mjs");
1243
1267
  sources.harnessMechanismsCli = await readSourceText(harnessRoot, "candidate/mechanisms-cli.mjs");
@@ -1453,6 +1477,9 @@ export async function buildQuickstartProfileProjection({
1453
1477
  for (const [fileName, , bundlePath] of ADDITIONAL_FOUNDATION_SCHEMA_FILES) {
1454
1478
  setText(bundlePath, additionalSchemaTexts[fileName]);
1455
1479
  }
1480
+ for (const [fileName, , bundlePath] of ADDITIONAL_FOUNDATION_ASSET_FILES) {
1481
+ setText(bundlePath, additionalAssetTexts[fileName]);
1482
+ }
1456
1483
  setText("schemas/foundation/operation-request.schema.json", sources.operationRequest);
1457
1484
  setText("schemas/foundation/operation-result.schema.json", sources.operationResult);
1458
1485
  setText("schemas/foundation/migration-manifest.schema.json", sources.migrationManifestSchema);
@@ -1591,6 +1618,11 @@ export async function buildQuickstartProfileProjection({
1591
1618
  additionalSchemaTexts[fileName],
1592
1619
  "projected",
1593
1620
  ]),
1621
+ ...ADDITIONAL_FOUNDATION_ASSET_FILES.map(([fileName, sourcePath]) => [
1622
+ `packages/skill-family-contracts/${sourcePath}`,
1623
+ additionalAssetTexts[fileName],
1624
+ "projected",
1625
+ ]),
1594
1626
  ["packages/skill-family-contracts/candidate/quickstart-profile/index.mjs", sources.candidateIndex, "extraction-input"],
1595
1627
  ["packages/skill-family-harness-node/package.json", harnessPackageJsonText, "identity"],
1596
1628
  ["packages/skill-family-harness-node/src/index.mjs", sources.harnessIndex, "imported-surface"],
@@ -2217,6 +2217,49 @@
2217
2217
  "Malicious-concurrency, kernel-image or signature-proof gaps return to Foundation; do not copy a walker, native addon, Harness, schema, Registry, runner or receipt chain locally"
2218
2218
  ]
2219
2219
  },
2220
+ {
2221
+ "id": "foundation.harness.mechanism-batch",
2222
+ "intent": "Combine mutually independent canonical-json requests that would otherwise need one cross-process invocation each into a single bounded, same-operation, ordered batch transport, reducing repeated process starts and transfer overhead",
2223
+ "useWhen": [
2224
+ "Multiple mutually independent canonical-json requests need per-item cross-process invocation (one process start and transfer each) and item count plus request/response bytes fit the capacity recorded in the capability catalog",
2225
+ "The caller has the same-version official Bundle with a verified source and takes on the caller responsibility of domain grouping and batch splitting"
2226
+ ],
2227
+ "doNotUseWhen": [
2228
+ "Requests already live in the same Node process (reuse the existing invokeFoundationMechanism object entry point; do not introduce a wrapper with no benefit)",
2229
+ "A later item depends on an earlier item's result, or concurrency, caching, retry, automatic splitting, or cross-item references are needed",
2230
+ "The request exceeds the batch capacity, or contains operations outside this batch (such as schema batch validation, self-check, or fixed-set publication writes)"
2231
+ ],
2232
+ "prerequisites": [
2233
+ "Contracts, Harness, and Engineering Kit are pinned to exactly the same version; the official Bundle is generated from same-version packages and keeps source identity, digest, and integrity checks",
2234
+ "The caller supplies the input/output/error streams (process standard streams by default); domain grouping, capacity splitting, and stream acceptance stay with the caller"
2235
+ ],
2236
+ "inputs": [
2237
+ "One JSON document with exactly operation (canonical-json) and inputs (non-empty ordered array; each item is {document}); NDJSON, session protocols, and automatic array detection are unsupported"
2238
+ ],
2239
+ "outputs": [
2240
+ "{results:[{inputIndex,exitCode,response}]}; successful items carry the original mechanism response and failed items the original CLI error object, in input order"
2241
+ ],
2242
+ "sideEffects": [
2243
+ "None (items execute through the existing pure-function dispatcher; only the caller-provided output/error streams are written; no file, network, process, or residual-state side effects)"
2244
+ ],
2245
+ "failureSemantics": [
2246
+ "Whole-batch shape or capacity refusals write one batch error object to the error stream and exit 2 (TypeError projection; details.kind is closed to batch-structure-invalid, batch-item-limit, batch-input-limit, batch-output-limit)",
2247
+ "Per-item mechanism failures are projected into that item's response and later items still run; at least one failure exits 2; partial batch results are never delivered"
2248
+ ],
2249
+ "invariants": [
2250
+ "Outer shape checks for every item complete before the first item runs; item order, duplicates, and the per-item invocation count stay unchanged",
2251
+ "The complete response bytes are not sent until confirmed within the output limit; error objects are neither reordered nor normalized"
2252
+ ],
2253
+ "ownedByCaller": [
2254
+ "Domain grouping and capacity splitting, and judging dependencies between requests",
2255
+ "Version availability and maturity judgment (since 0.19.0 and candidate status live in the catalog and API documentation), the exact pin, and source-identity binding",
2256
+ "Batch adoption completion and domain acceptance judgment"
2257
+ ],
2258
+ "routeElsewhere": [
2259
+ "Concurrency, caching, retry, cross-item references, or automatic splitting: keep them on the original consumer path, or return a real common gap to Foundation as a minimal capability contract",
2260
+ "Mechanisms outside this batch (schema batch validation, self-check, fixed-set publication writes, and so on) keep their existing public entry points"
2261
+ ]
2262
+ },
2220
2263
  {
2221
2264
  "id": "foundation.kit.plugin-verification",
2222
2265
  "intent": "Preserve the complete plugin layout and add dedicated Qoder and WorkBuddy production lifecycle drivers while keeping structure and host semantics separate",
@@ -1444,6 +1444,39 @@
1444
1444
  "migration": "none",
1445
1445
  "promotionPolicy": "consumer-transparent"
1446
1446
  },
1447
+ {
1448
+ "id": "foundation.harness.mechanism-batch",
1449
+ "package": "skill-family-harness-node",
1450
+ "layer": "harness",
1451
+ "since": "0.19.0",
1452
+ "stability": "candidate",
1453
+ "adoptionScopes": ["harness"],
1454
+ "entrypoints": [
1455
+ "runMechanismCliBatch (packages/skill-family-harness-node/candidate/mechanisms-cli.mjs)",
1456
+ "mechanisms-cli.mjs --batch (packages/skill-family-harness-node/candidate/mechanisms-cli.mjs)"
1457
+ ],
1458
+ "sourceRefs": [
1459
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-policy.json",
1460
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-request.schema.json",
1461
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-result.schema.json",
1462
+ "packages/skill-family-harness-node/candidate/mechanisms-cli.mjs",
1463
+ "packages/skill-family-engineering-kit/candidate/profile-bundle.mjs"
1464
+ ],
1465
+ "positiveTestRefs": [
1466
+ "packages/skill-family-contracts/test/quickstart-profile.test.mjs",
1467
+ "packages/skill-family-harness-node/test/quickstart-profile.test.mjs",
1468
+ "packages/skill-family-engineering-kit/test/candidate-mechanisms-cli.test.mjs",
1469
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1470
+ ],
1471
+ "negativeTestRefs": [
1472
+ "packages/skill-family-contracts/test/quickstart-profile.test.mjs",
1473
+ "packages/skill-family-harness-node/test/quickstart-profile.test.mjs",
1474
+ "packages/skill-family-engineering-kit/test/candidate-mechanisms-cli.test.mjs",
1475
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1476
+ ],
1477
+ "migration": "none",
1478
+ "promotionPolicy": "consumer-transparent"
1479
+ },
1447
1480
  {
1448
1481
  "id": "foundation.kit.plugin-verification",
1449
1482
  "package": "skill-family-engineering-kit",
@@ -2216,6 +2216,49 @@
2216
2216
  "恶意并发、内核映像或签名证明缺口交回 Foundation;不得复制 walker、native addon、Harness、schema、Registry、runner 或 receipt 链"
2217
2217
  ]
2218
2218
  },
2219
+ {
2220
+ "id": "foundation.harness.mechanism-batch",
2221
+ "intent": "把相互独立、需逐项跨进程调用的 canonical-json 请求合并为一次有界、同操作、顺序执行的批量传输,减少重复进程启动与传输开销",
2222
+ "useWhen": [
2223
+ "多个相互独立的 canonical-json 请求需要逐项跨进程调用(每项一次进程启动与传输),且项数与请求/响应字节落在能力目录登记的容量内",
2224
+ "调用方已安装来源明确的同版本官方 Bundle,并承担领域分组与批次切分的调用方责任"
2225
+ ],
2226
+ "doNotUseWhen": [
2227
+ "请求已位于同一 Node 进程内(优先复用既有 invokeFoundationMechanism 对象入口,不引入无收益的流包装)",
2228
+ "后项输入依赖前项结果,或需要并发、缓存、重试、自动拆批或跨项引用",
2229
+ "请求超过批次容量,或包含本批未支持的操作(如 schema 批量校验、self-check、固定集合写入)"
2230
+ ],
2231
+ "prerequisites": [
2232
+ "Contracts、Harness 与 Engineering Kit 精确锁定同一版本;官方 Bundle 由同版本三包生成并保留来源身份、摘要与完整性检查",
2233
+ "调用方提供 input/output/error 流(默认进程标准流);领域分组、容量切分与流接收责任归调用方"
2234
+ ],
2235
+ "inputs": [
2236
+ "恰好包含 operation(canonical-json)与 inputs(非空有序数组,每项 {document})的一个 JSON 文档;不支持 NDJSON、会话协议或数组自动探测"
2237
+ ],
2238
+ "outputs": [
2239
+ "{results:[{inputIndex,exitCode,response}]};成功项 response 为原机制结果,失败项为原 CLI 错误对象,顺序与输入一致"
2240
+ ],
2241
+ "sideEffects": [
2242
+ "无(逐项经既有纯函数分派器执行;只写调用方提供的 output/error 流;无文件、网络、进程或残余状态副作用)"
2243
+ ],
2244
+ "failureSemantics": [
2245
+ "整批结构或容量拒绝向 error 流写一个批次错误对象并整体退出 2(TypeError 投影;details.kind 封闭为 batch-structure-invalid、batch-item-limit、batch-input-limit、batch-output-limit)",
2246
+ "单项机制失败按原 CLI 错误投影写入该项 response 并继续执行后续项;至少一项失败整体退出 2;不交付部分批次结果"
2247
+ ],
2248
+ "invariants": [
2249
+ "全部项的外层形状检查先于第一项执行;项顺序、重复项与逐项调用次数保持不变",
2250
+ "完整响应字节在确认未超输出上限前不发送;错误对象不重新排序或规范化"
2251
+ ],
2252
+ "ownedByCaller": [
2253
+ "领域分组与容量切分、请求间依赖关系的判断",
2254
+ "版本可用性与成熟度判断(since 0.19.0、candidate 由目录与 API 文档携带)、精确 pin 与来源身份绑定",
2255
+ "批次采用完成与领域验收判定"
2256
+ ],
2257
+ "routeElsewhere": [
2258
+ "需要并发、缓存、重试、跨项引用或自动拆分:由消费者保留原路径处理,或把真实共性缺口交回 Foundation 形成最小能力合同",
2259
+ "本批未支持的机制(schema 批量校验、self-check、固定集合写入等)保留各自既有公共入口"
2260
+ ]
2261
+ },
2219
2262
  {
2220
2263
  "id": "foundation.kit.plugin-verification",
2221
2264
  "intent": "保留完整插件布局,增加 Qoder 与 WorkBuddy 专属生产生命周期 driver,并把结构合同与宿主语义分开",
@@ -2217,6 +2217,49 @@
2217
2217
  "Malicious-concurrency, kernel-image or signature-proof gaps return to Foundation; do not copy a walker, native addon, Harness, schema, Registry, runner or receipt chain locally"
2218
2218
  ]
2219
2219
  },
2220
+ {
2221
+ "id": "foundation.harness.mechanism-batch",
2222
+ "intent": "Combine mutually independent canonical-json requests that would otherwise need one cross-process invocation each into a single bounded, same-operation, ordered batch transport, reducing repeated process starts and transfer overhead",
2223
+ "useWhen": [
2224
+ "Multiple mutually independent canonical-json requests need per-item cross-process invocation (one process start and transfer each) and item count plus request/response bytes fit the capacity recorded in the capability catalog",
2225
+ "The caller has the same-version official Bundle with a verified source and takes on the caller responsibility of domain grouping and batch splitting"
2226
+ ],
2227
+ "doNotUseWhen": [
2228
+ "Requests already live in the same Node process (reuse the existing invokeFoundationMechanism object entry point; do not introduce a wrapper with no benefit)",
2229
+ "A later item depends on an earlier item's result, or concurrency, caching, retry, automatic splitting, or cross-item references are needed",
2230
+ "The request exceeds the batch capacity, or contains operations outside this batch (such as schema batch validation, self-check, or fixed-set publication writes)"
2231
+ ],
2232
+ "prerequisites": [
2233
+ "Contracts, Harness, and Engineering Kit are pinned to exactly the same version; the official Bundle is generated from same-version packages and keeps source identity, digest, and integrity checks",
2234
+ "The caller supplies the input/output/error streams (process standard streams by default); domain grouping, capacity splitting, and stream acceptance stay with the caller"
2235
+ ],
2236
+ "inputs": [
2237
+ "One JSON document with exactly operation (canonical-json) and inputs (non-empty ordered array; each item is {document}); NDJSON, session protocols, and automatic array detection are unsupported"
2238
+ ],
2239
+ "outputs": [
2240
+ "{results:[{inputIndex,exitCode,response}]}; successful items carry the original mechanism response and failed items the original CLI error object, in input order"
2241
+ ],
2242
+ "sideEffects": [
2243
+ "None (items execute through the existing pure-function dispatcher; only the caller-provided output/error streams are written; no file, network, process, or residual-state side effects)"
2244
+ ],
2245
+ "failureSemantics": [
2246
+ "Whole-batch shape or capacity refusals write one batch error object to the error stream and exit 2 (TypeError projection; details.kind is closed to batch-structure-invalid, batch-item-limit, batch-input-limit, batch-output-limit)",
2247
+ "Per-item mechanism failures are projected into that item's response and later items still run; at least one failure exits 2; partial batch results are never delivered"
2248
+ ],
2249
+ "invariants": [
2250
+ "Outer shape checks for every item complete before the first item runs; item order, duplicates, and the per-item invocation count stay unchanged",
2251
+ "The complete response bytes are not sent until confirmed within the output limit; error objects are neither reordered nor normalized"
2252
+ ],
2253
+ "ownedByCaller": [
2254
+ "Domain grouping and capacity splitting, and judging dependencies between requests",
2255
+ "Version availability and maturity judgment (since 0.19.0 and candidate status live in the catalog and API documentation), the exact pin, and source-identity binding",
2256
+ "Batch adoption completion and domain acceptance judgment"
2257
+ ],
2258
+ "routeElsewhere": [
2259
+ "Concurrency, caching, retry, cross-item references, or automatic splitting: keep them on the original consumer path, or return a real common gap to Foundation as a minimal capability contract",
2260
+ "Mechanisms outside this batch (schema batch validation, self-check, fixed-set publication writes, and so on) keep their existing public entry points"
2261
+ ]
2262
+ },
2220
2263
  {
2221
2264
  "id": "foundation.kit.plugin-verification",
2222
2265
  "intent": "Preserve the complete plugin layout and add dedicated Qoder and WorkBuddy production lifecycle drivers while keeping structure and host semantics separate",
@@ -1444,6 +1444,39 @@
1444
1444
  "migration": "none",
1445
1445
  "promotionPolicy": "consumer-transparent"
1446
1446
  },
1447
+ {
1448
+ "id": "foundation.harness.mechanism-batch",
1449
+ "package": "skill-family-harness-node",
1450
+ "layer": "harness",
1451
+ "since": "0.19.0",
1452
+ "stability": "candidate",
1453
+ "adoptionScopes": ["harness"],
1454
+ "entrypoints": [
1455
+ "runMechanismCliBatch (packages/skill-family-harness-node/candidate/mechanisms-cli.mjs)",
1456
+ "mechanisms-cli.mjs --batch (packages/skill-family-harness-node/candidate/mechanisms-cli.mjs)"
1457
+ ],
1458
+ "sourceRefs": [
1459
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-policy.json",
1460
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-request.schema.json",
1461
+ "packages/skill-family-contracts/candidate/foundation-mechanisms/mechanism-batch-result.schema.json",
1462
+ "packages/skill-family-harness-node/candidate/mechanisms-cli.mjs",
1463
+ "packages/skill-family-engineering-kit/candidate/profile-bundle.mjs"
1464
+ ],
1465
+ "positiveTestRefs": [
1466
+ "packages/skill-family-contracts/test/quickstart-profile.test.mjs",
1467
+ "packages/skill-family-harness-node/test/quickstart-profile.test.mjs",
1468
+ "packages/skill-family-engineering-kit/test/candidate-mechanisms-cli.test.mjs",
1469
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1470
+ ],
1471
+ "negativeTestRefs": [
1472
+ "packages/skill-family-contracts/test/quickstart-profile.test.mjs",
1473
+ "packages/skill-family-harness-node/test/quickstart-profile.test.mjs",
1474
+ "packages/skill-family-engineering-kit/test/candidate-mechanisms-cli.test.mjs",
1475
+ "packages/skill-family-engineering-kit/test/candidate-profile-bundle.test.mjs"
1476
+ ],
1477
+ "migration": "none",
1478
+ "promotionPolicy": "consumer-transparent"
1479
+ },
1447
1480
  {
1448
1481
  "id": "foundation.kit.plugin-verification",
1449
1482
  "package": "skill-family-engineering-kit",
@@ -2216,6 +2216,49 @@
2216
2216
  "恶意并发、内核映像或签名证明缺口交回 Foundation;不得复制 walker、native addon、Harness、schema、Registry、runner 或 receipt 链"
2217
2217
  ]
2218
2218
  },
2219
+ {
2220
+ "id": "foundation.harness.mechanism-batch",
2221
+ "intent": "把相互独立、需逐项跨进程调用的 canonical-json 请求合并为一次有界、同操作、顺序执行的批量传输,减少重复进程启动与传输开销",
2222
+ "useWhen": [
2223
+ "多个相互独立的 canonical-json 请求需要逐项跨进程调用(每项一次进程启动与传输),且项数与请求/响应字节落在能力目录登记的容量内",
2224
+ "调用方已安装来源明确的同版本官方 Bundle,并承担领域分组与批次切分的调用方责任"
2225
+ ],
2226
+ "doNotUseWhen": [
2227
+ "请求已位于同一 Node 进程内(优先复用既有 invokeFoundationMechanism 对象入口,不引入无收益的流包装)",
2228
+ "后项输入依赖前项结果,或需要并发、缓存、重试、自动拆批或跨项引用",
2229
+ "请求超过批次容量,或包含本批未支持的操作(如 schema 批量校验、self-check、固定集合写入)"
2230
+ ],
2231
+ "prerequisites": [
2232
+ "Contracts、Harness 与 Engineering Kit 精确锁定同一版本;官方 Bundle 由同版本三包生成并保留来源身份、摘要与完整性检查",
2233
+ "调用方提供 input/output/error 流(默认进程标准流);领域分组、容量切分与流接收责任归调用方"
2234
+ ],
2235
+ "inputs": [
2236
+ "恰好包含 operation(canonical-json)与 inputs(非空有序数组,每项 {document})的一个 JSON 文档;不支持 NDJSON、会话协议或数组自动探测"
2237
+ ],
2238
+ "outputs": [
2239
+ "{results:[{inputIndex,exitCode,response}]};成功项 response 为原机制结果,失败项为原 CLI 错误对象,顺序与输入一致"
2240
+ ],
2241
+ "sideEffects": [
2242
+ "无(逐项经既有纯函数分派器执行;只写调用方提供的 output/error 流;无文件、网络、进程或残余状态副作用)"
2243
+ ],
2244
+ "failureSemantics": [
2245
+ "整批结构或容量拒绝向 error 流写一个批次错误对象并整体退出 2(TypeError 投影;details.kind 封闭为 batch-structure-invalid、batch-item-limit、batch-input-limit、batch-output-limit)",
2246
+ "单项机制失败按原 CLI 错误投影写入该项 response 并继续执行后续项;至少一项失败整体退出 2;不交付部分批次结果"
2247
+ ],
2248
+ "invariants": [
2249
+ "全部项的外层形状检查先于第一项执行;项顺序、重复项与逐项调用次数保持不变",
2250
+ "完整响应字节在确认未超输出上限前不发送;错误对象不重新排序或规范化"
2251
+ ],
2252
+ "ownedByCaller": [
2253
+ "领域分组与容量切分、请求间依赖关系的判断",
2254
+ "版本可用性与成熟度判断(since 0.19.0、candidate 由目录与 API 文档携带)、精确 pin 与来源身份绑定",
2255
+ "批次采用完成与领域验收判定"
2256
+ ],
2257
+ "routeElsewhere": [
2258
+ "需要并发、缓存、重试、跨项引用或自动拆分:由消费者保留原路径处理,或把真实共性缺口交回 Foundation 形成最小能力合同",
2259
+ "本批未支持的机制(schema 批量校验、self-check、固定集合写入等)保留各自既有公共入口"
2260
+ ]
2261
+ },
2219
2262
  {
2220
2263
  "id": "foundation.kit.plugin-verification",
2221
2264
  "intent": "保留完整插件布局,增加 Qoder 与 WorkBuddy 专属生产生命周期 driver,并把结构合同与宿主语义分开",
@@ -2031,6 +2031,16 @@
2031
2031
  <td>lock file (monotonic fencing)</td>
2032
2032
  <td><code>SFC2004</code></td>
2033
2033
  </tr>
2034
+ <tr>
2035
+ <td><code>runMechanismCliBatch</code> / <code>mechanisms-cli.mjs --batch</code> (0.19.0 candidate)</td>
2036
+ <td>no</td>
2037
+ <td>no</td>
2038
+ <td>no</td>
2039
+ <td>no</td>
2040
+ <td>no</td>
2041
+ <td>none (only the caller-provided output/error streams are written)</td>
2042
+ <td>exit code 0 (all succeeded) / 2 (at least one item failed or whole batch refused); <code>details.kind</code> closed to <code>batch-structure-invalid</code>/<code>batch-item-limit</code>/<code>batch-input-limit</code>/<code>batch-output-limit</code></td>
2043
+ </tr>
2034
2044
  </tbody>
2035
2045
  </table>
2036
2046
  <p>Harness's <code>HARNESS_EXCLUSIONS</code> explicitly excludes release-state, remote-network-access, business-semantics, workflow-orchestration, model-calls, git-writes.</p>
@@ -1792,17 +1792,17 @@
1792
1792
  <tbody>
1793
1793
  <tr>
1794
1794
  <td><code>skill-family-contracts</code></td>
1795
- <td>0.18.0</td>
1795
+ <td>0.19.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.18.0</td>
1800
+ <td>0.19.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.18.0</td>
1805
+ <td>0.19.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>