@entrorove/skill 0.1.82 → 0.1.83
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 +5 -0
- package/SKILL.md +1 -1
- package/calctool-runtime-build.mjs +5 -0
- package/local-calctool-runtime.mjs +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
- package/release-state.json +6 -6
- package/releases.json +6 -0
- package/remote-client.mjs +3 -0
- package/workflow-local-contracts.mjs +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.83 — 2026-10-23
|
|
4
|
+
|
|
5
|
+
- 补齐 Blueprint 验收申请、查询与报告的 SDK 调用入口,修复只读查询的反馈回执判定;兼容原冻结计划的时间戳格式,修正 Calctool 打包与加载的完整性绑定。
|
|
6
|
+
- Expose Blueprint criterion attempt, read, and report SDK operations and correct read-only feedback handling; accept original frozen-plan timestamp formats and align Calctool packaging and loader integrity pins.
|
|
7
|
+
|
|
3
8
|
## 0.1.82 — 2026-10-23
|
|
4
9
|
|
|
5
10
|
- 修复 Calctool 原生调用的合同解析,统一标准输入声明、数值单位和精度策略必填项;补齐任务入口语言参数与云沙箱标识的依赖校验。原签名、范围、回执和合并权限检查保持。
|
package/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: Route a task selected for Entrorove among its eight skills, approve
|
|
|
5
5
|
|
|
6
6
|
# entrorove · 熵巡
|
|
7
7
|
|
|
8
|
-
Version: 0.1.
|
|
8
|
+
Version: 0.1.83.
|
|
9
9
|
|
|
10
10
|
Entrorove applies only to the task for which it is selected; reading these instructions, discovering capabilities or installing the package never selects or governs another task. Hooks are optional. Reading this document or calling an entry once does not execute the task. On every later turn, including after compaction, continue the original task and its required next operation before dependent work. Keep the original goal, scope, account, flow, cloud task and failure records. Never describe planning, a reported step or model output as verified delivery.
|
|
11
11
|
|
|
@@ -40,6 +40,11 @@ export async function buildCalctoolRuntime({ outputPath = resolve(directory, 'ru
|
|
|
40
40
|
const destination = resolve(outputPath);
|
|
41
41
|
if (destination === resolve(directory, '../../assets/runtime-source', file) || destination === fileURLToPath(import.meta.url)) throw new Error('Calctool generator cannot overwrite its pinned source');
|
|
42
42
|
const content = await sourceContent(); isolated(content);
|
|
43
|
+
if (destination === resolve(directory, 'runtime', file)) {
|
|
44
|
+
const loader = await readFile(resolve(directory, 'local-calctool-runtime.mjs'), 'utf8');
|
|
45
|
+
const pins = [...loader.matchAll(/\bconst expectedSha256\s*=\s*(['"])([0-9a-f]{64})\1\s*;/g)];
|
|
46
|
+
if (pins.length !== 1 || pins[0][2] !== sha(content)) throw new Error('Calctool loader integrity pin does not match its generated runtime');
|
|
47
|
+
}
|
|
43
48
|
if (checkOnly) {
|
|
44
49
|
const current = await readFile(destination);
|
|
45
50
|
if (!current.equals(Buffer.from(content))) throw new Error('Generated Calctool runtime is stale');
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
const runtimeUrl = new URL('./runtime/calctool-runtime-v7.0.43.mjs', import.meta.url);
|
|
4
|
-
const expectedSha256 = '
|
|
4
|
+
const expectedSha256 = '9c17b2e1b58c2174f5ad45e30de6ef2d63f622a1588a7673b1a7e3f277527759';
|
|
5
5
|
export async function calctoolRuntimeBytes() {
|
|
6
6
|
const bytes = await readFile(runtimeUrl);
|
|
7
7
|
if (createHash('sha256').update(bytes).digest('hex') !== expectedSha256) throw Object.assign(new Error('Calctool packaged runtime digest mismatch'), { code: 'FORMULA_RUNTIME_INTEGRITY' });
|
package/manifest.json
CHANGED
package/package.json
CHANGED
package/release-state.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "entrorove.release-state/1.0",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"digest": "
|
|
3
|
+
"version": "0.1.83",
|
|
4
|
+
"digest": "2a81190915dd2751aabaca0cf73018081e26a30c24d2bbacb8c6ace10968213e",
|
|
5
5
|
"files": {
|
|
6
6
|
"local-recovery-budget.mjs": "be3af07db8e4cc96782edb130e827039c7a99bbe8275a92f0f741533716017f3",
|
|
7
7
|
"remote-capability-cache.mjs": "9c22067e1a21eb2a209747a8ab2f27c0496b14a22a7e0f5654840e2035148df0",
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
"local-scope-state.mjs": "7a6d275d6267a4d0bb55582e1bcc7654c502ecba9221b84b2149a98f0ee7518f",
|
|
258
258
|
"local-scope-workspaces.mjs": "8a75ce7b6639b5682370b5738c5c2a90408e3130729608e008f03053cd50351f",
|
|
259
259
|
"local-task-routing.mjs": "6e2e506b2fb0e2e8d8c5147d7df32849b57a4e94a23634f01a355d45735858e4",
|
|
260
|
-
"remote-client.mjs": "
|
|
260
|
+
"remote-client.mjs": "218843be687c147f60b2a231f678faac66d5e675336b860873e682daf77f08d9",
|
|
261
261
|
"service-prerequisite.mjs": "2361168ea12ca95faee75c79657a486af5e7edaf1ec8182f8f1afdf59f15c9a5",
|
|
262
262
|
"local-source-execution.mjs": "88f6ce1ea50d0a7b92e0cb47d535f8140491c52d9c6c0dfddf91ea90397a36f5",
|
|
263
263
|
"fs-request-trace.mjs": "972eacbe21537bc102047127327449a6a4b0f0c65d75e3472370de91dedf4d2f",
|
|
@@ -295,7 +295,7 @@
|
|
|
295
295
|
"local-task-handoff-write-archive.mjs": "3668f39d8ab5664ed717994cf1b4bcc7ea23e146a0e06291f851d30337faeb77",
|
|
296
296
|
"local-task-handoff-write-receipts.mjs": "e1321127bd6fcad7840e185639f81ae68a8722a0ee4264a7b504a02b27887647",
|
|
297
297
|
"workflow-local-runner.mjs": "3183c15650e605cc9a8c1531cc3651f5a7d2f61b099554d334713d78a9aae62b",
|
|
298
|
-
"workflow-local-contracts.mjs": "
|
|
298
|
+
"workflow-local-contracts.mjs": "ad208f054a7f03c790896248e735add1383775e774dce34e81b61e6f47d238c1",
|
|
299
299
|
"workflow-local-client.mjs": "45c954f694d96bf0ea87ee2dc6902a6763dac2cb1df713b6a5e749632054e9af",
|
|
300
300
|
"workflow-local-request.mjs": "4e24c543ce386292a87dc9cd41f90d23375f12079cacffc515c8cd01fd571780",
|
|
301
301
|
"task-message-entry.mjs": "31d10056cb905237cd5649e8eb067009ff1612ec5dc1061e0373209fbc0b646a",
|
|
@@ -325,7 +325,7 @@
|
|
|
325
325
|
"local-calctool.mjs": "9398e642250b38b2831ec58e490fbbef761455ce9ae49af033baa8c3ba8d778e",
|
|
326
326
|
"local-calctool-cli.mjs": "a6b46e2aa9a91dfb73fc0dc415b2281a0343e22e317ff1bfcf58cadbb8093122",
|
|
327
327
|
"local-calctool-contracts.mjs": "d8fccf662b2dd7aefd5cc6770b2473014af7a28855074fcf294937ca5a49eae8",
|
|
328
|
-
"local-calctool-runtime.mjs": "
|
|
328
|
+
"local-calctool-runtime.mjs": "eccb3425ce8b71223263ddfe4b65be31468c926998646ccb4f609b554f079ffa",
|
|
329
329
|
"local-calctool-storage.mjs": "4c3f352847aeb368dea1247759a1055beeab25534adf25b6e7323196d76fd684",
|
|
330
330
|
"local-mutation-files.mjs": "cd27197fd25cb3ec3d0733e932c2ff2394b0665ad4afb771edc3e4a49526e428",
|
|
331
331
|
"local-mutation-snapshot.mjs": "69c0ff0b67b2e6913b1d9f8247bf48c31d62f4f5ae1668c573a0ade06c01d105",
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
"local-mutation-batch.mjs": "de27686b5f99a99b02f0218a3fa159e9469d6b19c595117287d6dd37a6efcb3b",
|
|
338
338
|
"local-mutation-batch-receipt.mjs": "b0e6a8522867255d899e60b66677885933f6a1c4c771cbb52f84dbbbdcf5e5c2",
|
|
339
339
|
"calctool-runtime-entry.mjs": "c3a59f8984e592ceae02382061e4e890862843b26b6b219b0e37aeee56a6ac45",
|
|
340
|
-
"calctool-runtime-build.mjs": "
|
|
340
|
+
"calctool-runtime-build.mjs": "29d29fa733be74a8274238eaba9431dea6cd189699b23973335ddfe644069fee",
|
|
341
341
|
"runtime/calctool-runtime-v7.0.43.mjs": "9c17b2e1b58c2174f5ad45e30de6ef2d63f622a1588a7673b1a7e3f277527759"
|
|
342
342
|
}
|
|
343
343
|
}
|
package/releases.json
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"version": "0.1.83",
|
|
4
|
+
"date": "2026-10-23",
|
|
5
|
+
"zh": "补齐 Blueprint 验收申请、查询与报告的 SDK 调用入口,修复只读查询的反馈回执判定;兼容原冻结计划的时间戳格式,修正 Calctool 打包与加载的完整性绑定。",
|
|
6
|
+
"en": "Expose Blueprint criterion attempt, read, and report SDK operations and correct read-only feedback handling; accept original frozen-plan timestamp formats and align Calctool packaging and loader integrity pins."
|
|
7
|
+
},
|
|
2
8
|
{
|
|
3
9
|
"version": "0.1.82",
|
|
4
10
|
"date": "2026-10-23",
|
package/remote-client.mjs
CHANGED
|
@@ -43,6 +43,7 @@ export function buildInvocation(operation, input) {
|
|
|
43
43
|
'member-observation-admit', 'member-observation-report', 'member-observation-status',
|
|
44
44
|
'scope-runner-prepare', 'scope-runner-register', 'scope-runner-challenge', 'scope-runner-attest', 'scope-evidence-prepare',
|
|
45
45
|
'scope-runner-context-review', 'scope-runner-context-status', 'scope-runner-context-challenge', 'scope-runner-context-apply',
|
|
46
|
+
'blueprint-criterion-attempt', 'blueprint-criterion-read', 'blueprint-criterion-report',
|
|
46
47
|
'start', 'continue'].includes(operation)) throw new Error('Invalid entrorove operation');
|
|
47
48
|
if (!input || typeof input !== 'object' || Array.isArray(input)) throw new Error('Input must be a JSON object');
|
|
48
49
|
const id = requestId(operation, input);
|
|
@@ -50,6 +51,8 @@ export function buildInvocation(operation, input) {
|
|
|
50
51
|
}
|
|
51
52
|
function requiresAutomaticFeedback(operation, input, capabilities) {
|
|
52
53
|
const actual = operation === 'continue' ? input.operation : operation;
|
|
54
|
+
// Criterion reads return stored state without creating a feedback receipt.
|
|
55
|
+
if (actual === 'blueprint-criterion-read') return false;
|
|
53
56
|
return capabilities?.responseExtensions?.automaticFeedback === 'entrorove.automatic-feedback/1.0'
|
|
54
57
|
&& !capabilities.responseExtensions.automaticFeedbackObservations?.includes(actual);
|
|
55
58
|
}
|
|
@@ -21,7 +21,8 @@ const executionPolicy = exact({ executable: absolutePath, executableSha256: sha2
|
|
|
21
21
|
executionPolicy.properties.discipline = DISCIPLINE_POLICY_SCHEMA;
|
|
22
22
|
const baseline = exact({ schemaVersion: { const: 'validator.golden-baseline/1.0' }, baselineId: id,
|
|
23
23
|
source: exact({ kind: enumeration(['repository-commit', 'artifact', 'approved-record']), locator: shortText, digestSha256: sha256 }),
|
|
24
|
-
version: id, frozen: { const: true }, frozenAt:
|
|
24
|
+
version: id, frozen: { const: true }, frozenAt: { type: 'string',
|
|
25
|
+
pattern: '^\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d{1,9})?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)$' }, frozenBy: id, testsSha256: sha256,
|
|
25
26
|
});
|
|
26
27
|
const brainFields = ['planSha256', 'reportSha256', 'checksSha256', 'scopeContractSha256', 'snapshotSha256', 'adapterSha256'];
|
|
27
28
|
const contracts = object({
|