@entrorove/skill 0.1.24 → 0.1.28

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.
Files changed (50) hide show
  1. package/CAPABILITY-MAP.md +73 -15
  2. package/CHANGELOG.md +20 -0
  3. package/SKILL.md +11 -1
  4. package/calctool-runtime-entry.mjs +2 -2
  5. package/cli.mjs +18 -1
  6. package/local-archguard-checkpoint.mjs +5 -2
  7. package/local-archguard-snapshot.mjs +18 -13
  8. package/local-autocoord17-authority.mjs +36 -0
  9. package/local-autocoord17-controller.mjs +164 -0
  10. package/local-autocoord17-peers.mjs +111 -0
  11. package/local-autocoord17-store.mjs +110 -0
  12. package/local-autocoord17-tasks.mjs +68 -0
  13. package/local-autocoord17-waits.mjs +118 -0
  14. package/local-calctool-cli.mjs +3 -1
  15. package/local-calctool-composition17.mjs +50 -0
  16. package/local-calctool-runtime.mjs +1 -1
  17. package/local-calctool.mjs +1 -1
  18. package/local-chain-bindings.mjs +93 -0
  19. package/local-chain-broker.mjs +61 -0
  20. package/local-chain-contracts.mjs +21 -0
  21. package/local-chain-controller.mjs +321 -0
  22. package/local-chain-human.mjs +48 -0
  23. package/local-chain-lock.mjs +54 -0
  24. package/local-chain-operations.mjs +7 -0
  25. package/local-chain-plan.mjs +232 -0
  26. package/local-chain-release-labels.mjs +12 -0
  27. package/local-chain-results.mjs +75 -0
  28. package/local-cli.mjs +23 -15
  29. package/local-contract-types.mjs +1 -1
  30. package/local-contracts.mjs +2 -0
  31. package/local-error.mjs +23 -0
  32. package/local-execution.mjs +1 -1
  33. package/local-final-gate16-bundle.mjs +2 -2
  34. package/local-formula-ast.mjs +23 -14
  35. package/local-formula-engine.mjs +17 -3
  36. package/local-formula.mjs +1 -1
  37. package/local-invocations.mjs +35 -0
  38. package/local-ledger.mjs +13 -2
  39. package/local-mutation-authority.mjs +13 -6
  40. package/local-mutation-binding.mjs +5 -2
  41. package/local-mutation-files.mjs +29 -4
  42. package/local-task-handoff-observation.mjs +4 -1
  43. package/local-validator-isolation17.mjs +256 -0
  44. package/manifest.json +1 -1
  45. package/package.json +22 -2
  46. package/release-state.json +48 -29
  47. package/release.mjs +22 -1
  48. package/releases.json +24 -0
  49. package/runtime/calctool-runtime-v7.0.43.mjs +40 -17
  50. package/workflow-local-request.mjs +3 -1
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": "entrorove.release-state/1.0",
3
- "version": "0.1.24",
4
- "digest": "48ec31da93f81d541551d5168e946e2fcd0516e9a19970d994199d9e9ab42ba4",
3
+ "version": "0.1.28",
4
+ "digest": "45cbb490c5d7fc99eb1ee6d4d852f9695e614ea3fd0c9923e30a6d24e777401e",
5
5
  "files": {
6
6
  "local-final-gate16.mjs": "b30caab08441449ad556a6e9a3cefbf91190f0b3f7370f46d2a21156375aa8e3",
7
7
  "local-final-gate16-checks.mjs": "1dd30e9666d458d8b12ca6e4975f6f0ac8450c3ea9cbecc7401ae037f66b589a",
8
8
  "local-final-gate16-worker.mjs": "344d64b6c1c5552b96960e0d8514a876a3dbfa9762ab9eb749038e8351727121",
9
9
  "local-final-gate16-plan.mjs": "9d34c51fa239376e552abc312409a7f3258519efe0b29d88a5054680cdda483c",
10
- "local-final-gate16-bundle.mjs": "92cc4008676abff816c8ca9244d06e5a2c16eed7e0e22b8c3a4e886417bf2b9c",
10
+ "local-final-gate16-bundle.mjs": "08cff47892199a0b1c08196e151770075ee09a9036e9aea4906fdb619edf7499",
11
11
  "local-final-gate16-state.mjs": "a8cf6ac28183fb2274772774d52418a82343485271f78b4d304d0dae7c8a642d",
12
12
  "local-final-gate16-proof.mjs": "5f7d5be29b1ce5fbb1a05fd2204969215ec5d0297ad84dcb7b29abb3ef285f56",
13
13
  "local-final-gate16-contract.mjs": "cffa9b0d89eab360ce6c27c73400b8b377adbdc32813b244f754423d10061fe0",
@@ -36,24 +36,43 @@
36
36
  "local-swarm-state.mjs": "ff84c5f35ef3e4a0ad9887d145e404f5786ae0dc92496116699d031b98e90c6a",
37
37
  "local-swarm-storage.mjs": "4b506481913fe22769f47a14a024a2cc4c0f1e986bb52ef606d14c7844226086",
38
38
  "local-swarm.mjs": "94b5adde0239cc21bada288886482934d409f4383d31076025437ed621ef43b6",
39
- "cli.mjs": "f85f2583e657a8120666bf559d6d6fa39c3401f95f258f7d149c7d43b7ec80cd",
39
+ "local-autocoord17-authority.mjs": "86b79798f6019523b1260b819622070a5b0d39670f607da930fb6923259dff1d",
40
+ "local-autocoord17-controller.mjs": "1307c4decf8dc98a447e4072d27f69caec64149f8d48545c84ef7cc50a561777",
41
+ "local-autocoord17-peers.mjs": "103d6a6634bbd3b4b850c5db7b571e3f05736b94e59a8fd7da63741281c903a4",
42
+ "local-autocoord17-store.mjs": "b48847a4a40c3aeb16bc1431b6a16221fb5ffdc0a6ba5c263acf196279d80ed1",
43
+ "local-autocoord17-tasks.mjs": "44b9f2d326ab3060c36657685b48b50a98711644e5baf47d4e8cb72c4c45f2a7",
44
+ "local-autocoord17-waits.mjs": "2b0a713987822548a94e1ed3a9a891532db45383797dfc5d5bc8d1e35593cf25",
45
+ "local-validator-isolation17.mjs": "48e94604e28b8fddd567dfb35ff60b73fd094a5803bd49f076388b7f310f92aa",
46
+ "local-calctool-composition17.mjs": "ac89fcb41ab0d0d9b47c1b5696945281b0894eb064820775e36a011c76314e6a",
47
+ "cli.mjs": "c85289b1cbe0ea469a57e67edb1fc475dc9c626c2beae00f5e0954c00757481d",
40
48
  "review-client.mjs": "3491eef68ed533174b31db3c53febb6519b8f088f71a9964644714a9a4c03c77",
41
49
  "version.mjs": "1f392147d72c40af4b03b307ea607075fb815af5174fa07e254b95fe12dbf3e7",
42
- "SKILL.md": "e4deb2f0a82829d156ddcf804cd593645c95ef1b1da0ded54b41e11ac7cf4ba3",
43
- "CAPABILITY-MAP.md": "276426da6b76820b3a502fe4cd80ca246ccab2d6c70036f89793b63fbced1552",
50
+ "SKILL.md": "87c5e85b0c767c85660ebb9958bccaeb69f3f8c2f122f210f5b38e30df891014",
51
+ "CAPABILITY-MAP.md": "128ecc8d90b2c17846ce6f0c650eada9e7fa7240f5d3c03b31e3ee01135557b8",
44
52
  "AGREEMENT.md": "f93a68e92c457200dd024610e65f74e478b8f60860f951da818b70561f1b9bf8",
45
- "package.json": "8f12e62ea09b1fa70e9fd1c7fb59e199f150a1b5bd8d8148f2b0a1b5c85462b4",
53
+ "package.json": "cb54098a13e05f22ef09bcb6a35a47995415bb14732791b61c0334ec7c7d1403",
46
54
  "manifest.json": "ab06e307795bc9da5add926752b6c4dbdaf18625090261a035aa356a679c504f",
47
- "release.mjs": "94f221b47049ccf19d887d06376a52b3668e56674eb95f55e21507461c4ba166",
48
- "local-cli.mjs": "17146679dd2c7236bf37e6a1d5549a6b32372e6f9925adcd57fc60849c00abc9",
55
+ "release.mjs": "607f63013ed2cdf9448d451c7e5a4e130715be5bae70e8905fb15d874ea7b93a",
56
+ "local-cli.mjs": "ecc85bc5f36a5663fef004e59525374dc7883d3889f5a0cfe219ae5e84b2d3ea",
49
57
  "local-state-lock.mjs": "1dbf64264642a0851faf043e07ee9f66d2ad0508e9f799b0626246e42fae893e",
50
- "local-execution.mjs": "bb3efe6c7e19343aed2d542a74fc949c4dd8a22c412f8ef8b2a4c9612f6bb045",
58
+ "local-execution.mjs": "97dfad5e889e679e9cc34434005342526502795abba21078fa40673788073153",
51
59
  "local-integrity.mjs": "4f325376e536999c3b00245f66aac9ef1ae762c33012b363c231622008f72805",
52
60
  "local-evidence-verification.mjs": "9b7dea31777505272f63616fd62af7603338f703bb1285fc565d6451715c7ce0",
53
- "local-formula.mjs": "64d19bd08798f21be3a67b0ce9d0965416131e576374cd6672b2cef0d01ad967",
54
- "local-ledger.mjs": "d393dee5fb64c94afd32a235649b3793ef490b1091fbc8ada04b2298c711ec03",
61
+ "local-formula.mjs": "706d5ec0cb2caf95a547531a81ca746fe246d4c53d902e03595a3b360e8c85af",
62
+ "local-ledger.mjs": "2009fb68aadcd7292b72f1d0d99f378d03644be1c5b4b4150d9f6a0b3f7c15ce",
63
+ "local-error.mjs": "66484e2e27c9870a17dc0f1cf64d108ea384ad9fb41b7adc3aacb243ae65fe2e",
55
64
  "blueprint-criterion-wire.mjs": "fb6b7dcce0b97a699e3e8968372767a3fddd83fedc750998573f789177243072",
56
65
  "blueprint-criterion-runner.mjs": "761c0e670b4b20c6bed53e5ca5d0178759505c3977ea2ed1b7223383c534bc4c",
66
+ "local-chain-bindings.mjs": "b8eff999ccd17b53c614a3c9f5376da78fcaa8632bb3e07bc1adcceda2e75f6c",
67
+ "local-chain-broker.mjs": "0f43ae3d5e713a344d94c3f67891b0d5f6ed0b70a8d237a54d06c0fa36e4c6d8",
68
+ "local-chain-contracts.mjs": "d4d2be4e5c6980f2dda8ff598c7333a75e0bbf2f656aa7fe327af7c9fe73da07",
69
+ "local-chain-controller.mjs": "dd80d8001a11d8433b615a017a34c30dd130ff5cd9c5b58731314a8f93c9571b",
70
+ "local-chain-human.mjs": "9d5dbaef13ebbbe0cfdd1146cd9c48cefcca30f33ccc0b1566e67cbd730d3499",
71
+ "local-chain-lock.mjs": "e0bc9dccc3c152007f4d67eff0b48de40516ce991b6868f513bc88b53a9b41b2",
72
+ "local-chain-operations.mjs": "78ba550f374b3b7fd03abfc88ae773e1189795d498929a13089fbf50a5611d9f",
73
+ "local-chain-plan.mjs": "e45a9170f569c80f7e5532bbc109dbae3c24b696815316e503cb3779135be648",
74
+ "local-chain-release-labels.mjs": "7ce5350d1062d5236f57f10e7e81713c1101463d5e7f252604ef0c2a30840bfe",
75
+ "local-chain-results.mjs": "0455f72cad574cfef87c2c6c0928d6432bba7e5dbaff521a2b62a9575299ca10",
57
76
  "local-approved-plan.mjs": "bb31bf0f826ce22d1e57c6d9cda5314cbbb1fc04e6c0778eb319045ab23a3193",
58
77
  "local-budget-renewal.mjs": "6b436358066fe33b2f6d871fc90d8e7c551edd6255efd73c0d255d0fd35d5ef8",
59
78
  "local-probe.mjs": "9b948db1de1e34c7605c4c454cd4aced66d2b57d2cf4471adbb80bcc76dee635",
@@ -101,14 +120,14 @@
101
120
  "remote-client.mjs": "dabbcc7bd0fd16ba029163f407edb85e914df83cd5914221eb2ce0d061ca8f28",
102
121
  "remote-transport.mjs": "5e5a8c0b490371f7f5a052cffbeee6202d4cf713dff1c43b6d910fe944f8429c",
103
122
  "local-credential.mjs": "2a302a7f67b5ea8dc73453fc96ab33db349b59ca11fa9456e48ca1d9669d877c",
104
- "local-invocations.mjs": "c7cc4a2d8fbe271865c12ff0cfb89b8db3bbd07e28f26854cd4df18698d31f94",
123
+ "local-invocations.mjs": "f6ac4c41c1a5ec34de358c4cca210ca8e403b3a913150a43bb55ec9be55d9998",
105
124
  "local-task-handoff-fence.mjs": "5532a359ee29b885f7ce0cf7178f76dba0fc9245bdd92ef460982275baf0d557",
106
125
  "local-task-handoff-storage.mjs": "f4d5046d54658e8092e035b31fdaeaed6fdbef55a6953827417c857f2e9e6638",
107
126
  "local-task-handoff-overlay-wire.mjs": "4fbe3f9d1ed8b6ddf839e9525cdc52c930a22e9d4f4ad562c6f193f621ee6527",
108
127
  "local-task-handoff-completion-wire.mjs": "2f3708b162d2d7524dde8c276bb0ad2328c17eefa597e50f30a2cd2ca1fa7fba",
109
128
  "local-task-handoff-contracts.mjs": "c03094185fd05308c8a968a719b121e04e2b86201cc0408f3656e7f81f1840ad",
110
129
  "local-task-handoff-write-constraints.mjs": "19cba9330dddd170d1cb8707405574f888292acea2dc3f48bc71f6b3c61065cc",
111
- "local-task-handoff-observation.mjs": "1bb0d6fb42825f64c5fc3975be7fe3306992a98450382c7fde73d2571a860e91",
130
+ "local-task-handoff-observation.mjs": "d17c75dba647a1ce01681feeb9109c2f51927309255452166a2c2f7758c5ab50",
112
131
  "local-task-handoff-write-wire.mjs": "7b49b66de8ecc33c1c92e9dd50118528972f00e1c7748cb3a230a58eefa9ff3f",
113
132
  "local-task-handoff-read-authority.mjs": "7d2991cfac4562039232566d25441aa98106ce27bc9b7bcf6df4ff28d738e167",
114
133
  "local-task-handoff-write-archive.mjs": "3668f39d8ab5664ed717994cf1b4bcc7ea23e146a0e06291f851d30337faeb77",
@@ -116,13 +135,13 @@
116
135
  "workflow-local-runner.mjs": "9fa899a11da2b6b7a436bf9b561641856adcbc5f8b914f6ba89a64dae224900d",
117
136
  "workflow-local-contracts.mjs": "604afa9e97c6dfc3d07b01509ef2476887a2fc219c9e827bcac5d563ab4719e7",
118
137
  "workflow-local-client.mjs": "45c954f694d96bf0ea87ee2dc6902a6763dac2cb1df713b6a5e749632054e9af",
119
- "workflow-local-request.mjs": "e8cce489ecadc756e27bf8686556a830e9e789df03a56e034f7b741e6455d3ae",
138
+ "workflow-local-request.mjs": "4e24c543ce386292a87dc9cd41f90d23375f12079cacffc515c8cd01fd571780",
120
139
  "task-message-entry.mjs": "31d10056cb905237cd5649e8eb067009ff1612ec5dc1061e0373209fbc0b646a",
121
140
  "task-message-cli.mjs": "3ca65e96c28129b3bd5cac962d106e0859a1f17df1f6a66ee543c6efc22f918d",
122
- "local-contracts.mjs": "805bf53e3ba9f83f7c0e889f605308f74ff981ff6606a92422e2cda25c33dc0b",
123
- "local-contract-types.mjs": "b338b623ea8085dc04536795e4a01c208189cf430e12ef8c08aaa5e21b01b0b9",
141
+ "local-contracts.mjs": "43715cd73460ccea734501a3dd5667184da0f6a5b0189e038319a439ba52fc76",
142
+ "local-contract-types.mjs": "5d244237fc69052b2fa83098022761bae929e8b75a0683883b620711bc132050",
124
143
  "local-archguard-ast.mjs": "cefd835312a623e83bf48e4d8e1f76ac6a8adc56c35843705c16967d16bec4e6",
125
- "local-archguard-checkpoint.mjs": "beaedc6992f0d9b36b6e881abf4ea5798f678d7b5dd00e1cc15feb254edeefc7",
144
+ "local-archguard-checkpoint.mjs": "37896902520cc995720c96288e4a5ed3585952b55c9c35be281f91fa754c71ec",
126
145
  "local-archguard-components.mjs": "a8fb3d0fd787f9160905013fd333cc0b9e8cf624cce797461f36f4ab31d170ad",
127
146
  "local-archguard-contract.mjs": "cfc397a1ce171ab84f8bf1db152e6d8d280b7ca041da56a7a4cd62b02c2e2e89",
128
147
  "local-archguard-contracts.mjs": "29e9b86f14dc086aa0b791c874d6efc50d849f806b3f2b8725481114f01ba8ba",
@@ -132,31 +151,31 @@
132
151
  "local-archguard-operations.mjs": "1a35268b857b86eab54dd4efa78fc54bf08b39dfab4fa980c7dd63b8959206b0",
133
152
  "local-archguard-scope.mjs": "afbd23a79c175f198892ddb2026ecac219a1650ee6115763736d9b1ee5a07ee0",
134
153
  "local-archguard-signing.mjs": "7de0fe4b8f6f5a92d043ad8976054faaa76b7b37556ed582e5e012c6f0facc87",
135
- "local-archguard-snapshot.mjs": "9c47d68ebfd3b05fc0c2acd04f6c69f5c10b7676a5c3ecceee786d72e0505d4b",
154
+ "local-archguard-snapshot.mjs": "81282fa7d0e3bbf879fc5a3c6a9e4f44fb15dee36029bb0ce2a5e4f1710cf4c9",
136
155
  "local-archguard-state.mjs": "1d3c74c4ec222646e82120be4aa6a00c52d2867fb8c20323420d6ab0bf2cd46c",
137
156
  "local-archguard.mjs": "4c8ec5d569d728b15161eb88e49371c77def7d1fe511aa16694581a2c1d59433",
138
157
  "archguard-runtime-build.mjs": "45bf31764763973bd8de32b3e16d194162407e7cb74802df3ab363f0fd30e866",
139
158
  "runtime/archguard-runtime-v7.0.44.mjs": "836f20b270139371bef43e3934fa7232371e42d46371c513db2a5e3c5622b215",
140
159
  "local-decimal.mjs": "93580b0cbdac2e881942658c1cd10394b432219f8657afaaaf4cb1c35c91d644",
141
- "local-formula-ast.mjs": "e7475176409f146f46eb8565be8df4108c88f12b46c9b600915834f9843089d7",
142
- "local-formula-engine.mjs": "3b6ed599575b17d3da738e0c798804264540cbff87c58459e2ef3fa6072cd003",
160
+ "local-formula-ast.mjs": "768ec4aa88a127588035d5b94aa2721df00e3e0576dc7e341baaead44795f314",
161
+ "local-formula-engine.mjs": "cfc44f03bb8dc4797f9f9e859a64a2dd5e4dd316db45624c03f7f8fad3202ede",
143
162
  "local-formula-tests.mjs": "d6d2809572c46955e6b556023ed6a12362c8acd0ad0d5be3b1b2dd64439215c0",
144
- "local-calctool.mjs": "52c5a53a4c2dda5b62bfc00dfd0f027cbc6ec0c601f10c848842a06ffd5ee93a",
145
- "local-calctool-cli.mjs": "75eb8916efbb9049e382a25a312fb0e1fc8bbad6f051e4f024a7e0a2b1588953",
163
+ "local-calctool.mjs": "9398e642250b38b2831ec58e490fbbef761455ce9ae49af033baa8c3ba8d778e",
164
+ "local-calctool-cli.mjs": "a6b46e2aa9a91dfb73fc0dc415b2281a0343e22e317ff1bfcf58cadbb8093122",
146
165
  "local-calctool-contracts.mjs": "d8fccf662b2dd7aefd5cc6770b2473014af7a28855074fcf294937ca5a49eae8",
147
- "local-calctool-runtime.mjs": "a8ec5bc77925a6f43cf4a1bae666d46d109e90b59b1064e4832e6c5bb209f187",
166
+ "local-calctool-runtime.mjs": "9070b6900d1782bf77357fea1cc522bf796898d56929f96d7cb935b3036ac82f",
148
167
  "local-calctool-storage.mjs": "4c3f352847aeb368dea1247759a1055beeab25534adf25b6e7323196d76fd684",
149
- "local-mutation-files.mjs": "2de96efc1def554a7fca062e1e605c3dbb60aecd0942b19eb4d179100f0e258f",
168
+ "local-mutation-files.mjs": "b99a1987e0884cee1f0f04552300fbf61853ea2547d74c77b77c71fc3ebb89ad",
150
169
  "local-mutation-snapshot.mjs": "a2f5f1df1fa0ecb40bdd4776e319c5244508ed04a2aa4493aebcec926fc61148",
151
170
  "local-mutation-audit.mjs": "5a30ee3446f632e032ffcfe46bcd97d6dfc0f099a76ea5185c3f9a9118c4f6cb",
152
171
  "local-mutation-wire.mjs": "dc79992422254d876bec94c621407bede94c9f43c95367a2c9f16a2a64b15576",
153
- "local-mutation-binding.mjs": "a4d91da2a7199c8c74adf53c67ae8ccdb2912cb96401c59c7b6c72d36c4e9241",
172
+ "local-mutation-binding.mjs": "a1756642dd758701b476d332a48799b4af56fdd8f67aba6d46ca9bb2341b6327",
154
173
  "local-mutation-pass-store.mjs": "8d6b57c6d1ea3df15a794e6a4cd39497f4412a5f911b9a30b0437498f51f92c0",
155
- "local-mutation-authority.mjs": "3a8c275218129afe2674391771d32f7041fe31925431d7e6b73c16a2f664d61e",
174
+ "local-mutation-authority.mjs": "28561b5b672838a46fa13b0044b5d9302630d073aa5893a7e0990e6567336499",
156
175
  "local-mutation-batch.mjs": "80293d8111203687e2527cd23b771447cc44ff58c0b0155c368bcbfa05aa3bb8",
157
176
  "local-mutation-batch-receipt.mjs": "b0e6a8522867255d899e60b66677885933f6a1c4c771cbb52f84dbbbdcf5e5c2",
158
- "calctool-runtime-entry.mjs": "ae0c678c5b81edb20b5e947548b57c69737659c71fa1c012e4efa5b2153ac261",
177
+ "calctool-runtime-entry.mjs": "98d2bc8df38d16131fc56db0a3d4d260531ba4df412baa5ddc4b8b5c5ca99fe9",
159
178
  "calctool-runtime-build.mjs": "3c5a9bd40bc1abe02e3b6e307809eea4eaaf198e8f0db6f5d6b2583dd68a59d2",
160
- "runtime/calctool-runtime-v7.0.43.mjs": "5d3506320d6baba4a8ca42cf55d062ae2b10f186741896c8cc93e536734f961f"
179
+ "runtime/calctool-runtime-v7.0.43.mjs": "5473427c350411f62c16ac5239fa0db7b96e7b2c19458f9046768dcb4ada87d1"
161
180
  }
162
181
  }
package/release.mjs CHANGED
@@ -3,6 +3,7 @@ import { createHash } from 'node:crypto'
3
3
  import { readFile, writeFile, rename, rm } from 'node:fs/promises'
4
4
  import path from 'node:path'
5
5
  import { fileURLToPath } from 'node:url'
6
+ import { chainReleaseLabels } from './local-chain-release-labels.mjs'
6
7
 
7
8
  const directory = path.dirname(fileURLToPath(import.meta.url))
8
9
  const swarmSourceFiles = Object.freeze([
@@ -16,6 +17,16 @@ const swarmSourceFiles = Object.freeze([
16
17
  'local-swarm-storage.mjs',
17
18
  'local-swarm.mjs',
18
19
  ])
20
+ const coordination17SourceFiles = Object.freeze([
21
+ 'local-autocoord17-authority.mjs',
22
+ 'local-autocoord17-controller.mjs',
23
+ 'local-autocoord17-peers.mjs',
24
+ 'local-autocoord17-store.mjs',
25
+ 'local-autocoord17-tasks.mjs',
26
+ 'local-autocoord17-waits.mjs',
27
+ 'local-validator-isolation17.mjs',
28
+ 'local-calctool-composition17.mjs',
29
+ ])
19
30
  const sourceFiles = [
20
31
  ...FINAL_GATE16_PACKAGE_FILES,
21
32
  'local-merge-archguard-verification.d.mts',
@@ -34,10 +45,15 @@ const sourceFiles = [
34
45
  'local-merge-targets.mjs',
35
46
  'local-merge-transaction.mjs',
36
47
  ...swarmSourceFiles,
48
+ ...coordination17SourceFiles,
37
49
  'cli.mjs', 'review-client.mjs', 'version.mjs', 'SKILL.md', 'CAPABILITY-MAP.md', 'AGREEMENT.md',
38
50
  'package.json', 'manifest.json', 'release.mjs',
39
51
  'local-cli.mjs', 'local-state-lock.mjs', 'local-execution.mjs', 'local-integrity.mjs', 'local-evidence-verification.mjs', 'local-formula.mjs', 'local-ledger.mjs',
52
+ 'local-error.mjs',
40
53
  'blueprint-criterion-wire.mjs', 'blueprint-criterion-runner.mjs',
54
+ 'local-chain-bindings.mjs', 'local-chain-broker.mjs', 'local-chain-contracts.mjs', 'local-chain-controller.mjs',
55
+ 'local-chain-human.mjs', 'local-chain-lock.mjs', 'local-chain-operations.mjs', 'local-chain-plan.mjs',
56
+ 'local-chain-release-labels.mjs', 'local-chain-results.mjs',
41
57
  'local-approved-plan.mjs', 'local-budget-renewal.mjs', 'local-probe.mjs',
42
58
  'local-budget-grants.mjs', 'local-budget-handoff.mjs', 'local-budget-handoff-contracts.mjs', 'local-budget-lock.mjs',
43
59
  'local-budget-handoff-completion.mjs',
@@ -192,6 +208,10 @@ const swarmReleaseLabels = Object.freeze(Object.fromEntries(swarmSourceFiles.map
192
208
  zh: 'Swarm 原授权协作调度与实际执行守卫', en: 'Swarm original-authority coordination and actual execution guard',
193
209
  }])))
194
210
 
211
+ const coordination17ReleaseLabels = Object.freeze(Object.fromEntries(coordination17SourceFiles.map(name => [name, {
212
+ zh: '协同执行与验证隔离能力', en: 'coordination execution and validator isolation capabilities',
213
+ }])))
214
+
195
215
  const nativeReadReleaseLabels = {
196
216
  'local-budget-git-attributes.mjs': { zh: '固定Git实际源读取与预算记账', en: 'fixed Git actual source reads and budget accounting' },
197
217
  'local-budget-git-native-attributes.mjs': { zh: '固定Git实际源读取与预算记账', en: 'fixed Git actual source reads and budget accounting' },
@@ -227,7 +247,7 @@ function releaseNote(changed) {
227
247
  if (suppliedZh && suppliedEn) return {
228
248
  zh: suppliedZh.replaceAll(/\s+/g, ' '), en: suppliedEn.replaceAll(/\s+/g, ' '),
229
249
  }
230
- const labels = withFinalGate16ReleaseLabels({ ...calctoolReleaseLabels, ...mutationReleaseLabels, ...swarmReleaseLabels, ...nativeReadReleaseLabels, ...feedbackReleaseLabels, ...invocationReleaseLabels,
250
+ const labels = withFinalGate16ReleaseLabels({ ...calctoolReleaseLabels, ...mutationReleaseLabels, ...swarmReleaseLabels, ...coordination17ReleaseLabels, ...nativeReadReleaseLabels, ...feedbackReleaseLabels, ...invocationReleaseLabels, ...chainReleaseLabels,
231
251
  'blueprint-criterion-wire.mjs': { zh: '蓝图验收标准执行授权', en: 'Blueprint criterion execution authority' },
232
252
  'blueprint-criterion-runner.mjs': { zh: '蓝图验收标准实际执行器', en: 'Blueprint criterion process runner' },
233
253
  'local-archguard-ast.mjs': { zh: 'Archguard 架构合同与执行守卫', en: 'Archguard architecture contract and execution guard' },
@@ -261,6 +281,7 @@ function releaseNote(changed) {
261
281
  'local-execution.mjs': { zh: '本地执行闸门与预算', en: 'local execution gates and budgets' },
262
282
  'local-integrity.mjs': { zh: '证据与回执验签', en: 'evidence and receipt verification' },
263
283
  'local-evidence-verification.mjs': { zh: 'Validator 独立证据验证与执行结果绑定', en: 'Validator independent evidence verification and execution result binding' },
284
+ 'local-error.mjs': { zh: '统一本地错误信封', en: 'unified local error envelopes' },
264
285
  'local-formula.mjs': { zh: '确定性公式引擎', en: 'deterministic formula engine' },
265
286
  'local-ledger.mjs': { zh: '执行与链路台账', en: 'execution and chain ledger' },
266
287
  'local-approved-plan.mjs': { zh: '冻结计划执行器', en: 'frozen plan runner' },
package/releases.json CHANGED
@@ -1,4 +1,28 @@
1
1
  [
2
+ {
3
+ "version": "0.1.28",
4
+ "date": "2026-10-09",
5
+ "zh": "更新了协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、协同执行与验证隔离能力、安装包配置、自动版本与更新日志、统一本地错误信封。",
6
+ "en": "Updated coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, coordination execution and validator isolation capabilities, package configuration, automatic versioning and changelog, unified local error envelopes."
7
+ },
8
+ {
9
+ "version": "0.1.27",
10
+ "date": "2026-10-08",
11
+ "zh": "更新了IDE 工作流程说明、能力覆盖映射、Archguard 架构合同与执行守卫、工作流原执行请求恢复。",
12
+ "en": "Updated IDE workflow instructions, capability coverage map, Archguard architecture contract and execution guard, workflow original execution request recovery."
13
+ },
14
+ {
15
+ "version": "0.1.26",
16
+ "date": "2026-10-07",
17
+ "zh": "更新了能力覆盖映射、安装包配置。",
18
+ "en": "Updated capability coverage map, package configuration."
19
+ },
20
+ {
21
+ "version": "0.1.25",
22
+ "date": "2026-10-07",
23
+ "zh": "原链本地执行与固定Git计费收口,补齐macOS路径和发布夹具",
24
+ "en": "Close original-chain local execution and fixed Git accounting, with macOS path and release fixture coverage"
25
+ },
2
26
  {
3
27
  "version": "0.1.24",
4
28
  "date": "2026-10-07",
@@ -1528,7 +1528,8 @@ class Decimal {
1528
1528
  const Decimal28 = Decimal;
1529
1529
 
1530
1530
  const FORMULA_OPERATORS = Object.freeze(['add', 'sub', 'mul', 'div', 'safeDivide', 'percentOf', 'round', 'if']);
1531
- const ARITY = { add: [0, 1000], mul: [0, 1000], sub: [2, 2], div: [2, 2], safeDivide: [2, 2], percentOf: [2, 2], round: [1, 1], if: [3, 3] };
1531
+ const FORMULA_ROUNDING_POLICY = Object.freeze({ decimalPlaces: 2, mode: 'half-away-from-zero' });
1532
+ const ARITY = { add: [1, 1000], mul: [1, 1000], sub: [2, 2], div: [2, 2], safeDivide: [2, 2], percentOf: [2, 2], round: [1, 1], if: [3, 3] };
1532
1533
  function formulaKey(value) {
1533
1534
  if (typeof value !== 'string' || !value.trim() || value.length > 128 || /[\u0000-\u001f\u007f]/.test(value)) throw formulaError('FORMULA_KEY_INVALID', 'formula and field keys must be non-empty strings of at most 128 characters');
1534
1535
  return value;
@@ -1557,28 +1558,35 @@ function formulaRefs(node, output = new Set()) {
1557
1558
  if (node.args) for (const item of node.args) formulaRefs(item, output);
1558
1559
  return [...output].sort();
1559
1560
  }
1560
- function evaluateNode(node, resolve) {
1561
+ function roundPlaces(policy) {
1562
+ const value = policy?.decimalPlaces;
1563
+ if (!Number.isInteger(value) || value < 0 || value > 28) throw formulaError('ROUND_POLICY_INVALID', 'rounding policy decimalPlaces must be an integer from 0 to 28');
1564
+ if (policy.mode !== 'half-away-from-zero') throw formulaError('ROUND_POLICY_INVALID', 'rounding policy mode must be half-away-from-zero');
1565
+ return value;
1566
+ }
1567
+ function evaluateNode(node, resolve, policy) {
1561
1568
  if (Object.hasOwn(node, 'lit')) return Decimal.from(node.lit);
1562
1569
  if (Object.hasOwn(node, 'ref')) return Decimal.from(resolve(node.ref));
1563
1570
  const [left, right, alternate] = node.args;
1564
1571
  switch (node.op) {
1565
- case 'add': return node.args.reduce((total, item) => total.plus(evaluateNode(item, resolve)), Decimal.from('0'));
1566
- case 'mul': return node.args.reduce((total, item) => total.times(evaluateNode(item, resolve)), Decimal.from('1'));
1567
- case 'sub': return evaluateNode(left, resolve).minus(evaluateNode(right, resolve));
1568
- case 'div': return evaluateNode(left, resolve).div(evaluateNode(right, resolve));
1569
- case 'safeDivide': { const denominator = evaluateNode(right, resolve); return denominator.isZero() ? Decimal.from('0') : evaluateNode(left, resolve).div(denominator); }
1570
- case 'percentOf': return evaluateNode(left, resolve).div(evaluateNode(right, resolve)).times('100');
1571
- case 'round': return evaluateNode(left, resolve).rounded(2);
1572
- case 'if': return evaluateNode(left, resolve).isZero() ? evaluateNode(alternate, resolve) : evaluateNode(right, resolve);
1572
+ case 'add': return node.args.reduce((total, item) => total.plus(evaluateNode(item, resolve, policy)), Decimal.from('0'));
1573
+ case 'mul': return node.args.reduce((total, item) => total.times(evaluateNode(item, resolve, policy)), Decimal.from('1'));
1574
+ case 'sub': return evaluateNode(left, resolve, policy).minus(evaluateNode(right, resolve, policy));
1575
+ case 'div': return evaluateNode(left, resolve, policy).div(evaluateNode(right, resolve, policy));
1576
+ case 'safeDivide': { const denominator = evaluateNode(right, resolve, policy); if (denominator.isZero()) throw formulaError('DIV_ZERO', 'division by zero', { nodeId: 'safeDivide' }); return evaluateNode(left, resolve, policy).div(denominator); }
1577
+ case 'percentOf': return evaluateNode(left, resolve, policy).div(evaluateNode(right, resolve, policy)).times('100');
1578
+ case 'round': return evaluateNode(left, resolve, policy).rounded(roundPlaces(policy));
1579
+ case 'if': return evaluateNode(left, resolve, policy).isZero() ? evaluateNode(alternate, resolve, policy) : evaluateNode(right, resolve, policy);
1573
1580
  default: throw formulaError('UNSUPPORTED_OPERATOR', 'unsupported normalized formula operator');
1574
1581
  }
1575
1582
  }
1576
- function evaluateFormula(node, values = {}) {
1583
+ function evaluateFormula(node, values = {}, options = {}) {
1577
1584
  formulaObject(values, 'formula values');
1585
+ const policy = options.roundingPolicy ?? FORMULA_ROUNDING_POLICY;
1578
1586
  return evaluateNode(normalizeFormula(node), key => {
1579
1587
  if (!Object.hasOwn(values, key) || values[key] === null || values[key] === undefined || values[key] === '') throw formulaError('MISSING_INPUT', `missing input: ${key}`, { fieldId: key });
1580
1588
  return values[key];
1581
- });
1589
+ }, policy);
1582
1590
  }
1583
1591
  function compileFormulaGraph(formulas, fieldKeys) {
1584
1592
  if (!Array.isArray(formulas) || formulas.length > 1000) throw formulaError('FORMULA_GRAPH_INVALID', 'formulas must be an array of at most 1000 definitions');
@@ -1605,8 +1613,9 @@ function compileFormulaGraph(formulas, fieldKeys) {
1605
1613
  for (const key of [...definitions.keys()].sort()) visit(key);
1606
1614
  return { formulas: [...definitions.values()].sort((a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0), dependencies, order };
1607
1615
  }
1608
- function evaluateFormulaGraph(formulas, inputs = {}) {
1616
+ function evaluateFormulaGraph(formulas, inputs = {}, options = {}) {
1609
1617
  formulaObject(inputs, 'formula inputs');
1618
+ const policy = options.roundingPolicy ?? FORMULA_ROUNDING_POLICY;
1610
1619
  const values = new Map(Object.entries(inputs).map(([key, value]) => [key, Decimal.from(value)]));
1611
1620
  const graph = compileFormulaGraph(formulas);
1612
1621
  const definitions = new Map(graph.formulas.map(item => [item.key, item.expression]));
@@ -1618,13 +1627,14 @@ function evaluateFormulaGraph(formulas, inputs = {}) {
1618
1627
  return values.get(key);
1619
1628
  }
1620
1629
  if (visiting.has(key)) throw formulaError('FORMULA_CYCLE', `formula cycle at ${key}`);
1621
- visiting.add(key); const value = evaluateNode(definitions.get(key), resolve); visiting.delete(key); results.set(key, value); return value;
1630
+ visiting.add(key); const value = evaluateNode(definitions.get(key), resolve, policy); visiting.delete(key); results.set(key, value); return value;
1622
1631
  };
1623
1632
  return Object.fromEntries(graph.formulas.map(item => [item.key, resolve(item.key).toString()]));
1624
1633
  }
1625
1634
 
1626
1635
  const FORMULA_SCHEMA = 'entrorove.formula-engine/1.0';
1627
1636
  const FORMULA_RUNTIME_VERSION = 'decimal28-ast/1.0';
1637
+ { FORMULA_ROUNDING_POLICY };
1628
1638
  const TYPES = ['number', 'integer', 'money', 'percent', 'text', 'date', 'enum'];
1629
1639
  const NUMERIC = TYPES.slice(0, 4);
1630
1640
  const ID = /^[a-z0-9][a-z0-9._-]{0,127}$/;
@@ -1642,6 +1652,14 @@ function cloned(value) { return JSON.parse(formulaCanonical(value)); }
1642
1652
  function requiredText(value, field) {
1643
1653
  if (typeof value !== 'string' || !value.trim()) throw formulaError('ENGINE_REQUIRED_FIELD', `${field} is required`);
1644
1654
  }
1655
+ function normalizeRoundingPolicy(value) {
1656
+ const policy = value ?? FORMULA_ROUNDING_POLICY;
1657
+ formulaObject(policy, 'roundingPolicy');
1658
+ if (Object.keys(policy).sort().join(',') !== 'decimalPlaces,mode'
1659
+ || !Number.isInteger(policy.decimalPlaces) || policy.decimalPlaces < 0 || policy.decimalPlaces > 28
1660
+ || policy.mode !== 'half-away-from-zero') throw formulaError('ROUND_POLICY_INVALID', 'roundingPolicy must declare decimalPlaces 0..28 and half-away-from-zero mode');
1661
+ return { decimalPlaces: policy.decimalPlaces, mode: policy.mode };
1662
+ }
1645
1663
  function normalizeEngine(engine) {
1646
1664
  formulaObject(engine, 'engine');
1647
1665
  if (engine.schemaVersion !== 'engine.spec/1') throw formulaError('ENGINE_SCHEMA_VERSION', 'Expected engine.spec/1');
@@ -1662,12 +1680,14 @@ function normalizeEngine(engine) {
1662
1680
  if (NUMERIC.includes(field.type) && typeof field.unit !== 'string') throw formulaError('FIELD_UNIT_MISSING', 'numeric fields require an explicit unit');
1663
1681
  if (field.required !== undefined && typeof field.required !== 'boolean') throw formulaError('FIELD_REQUIRED_INVALID', 'field required must be boolean');
1664
1682
  }
1683
+ const roundingPolicy = normalizeRoundingPolicy(engine.roundingPolicy);
1665
1684
  const graph = compileFormulaGraph(engine.formulas, [...keys]);
1666
1685
  for (const item of graph.formulas) for (const ref of graph.dependencies[item.key]) {
1667
1686
  const field = engine.fields.find(entry => entry.key === ref);
1668
1687
  if (field && !NUMERIC.includes(field.type)) throw formulaError('FORMULA_REF_TYPE', `formula reference ${ref} must be numeric`);
1669
1688
  }
1670
1689
  const normalized = cloned(engine);
1690
+ normalized.roundingPolicy = roundingPolicy;
1671
1691
  normalized.formulas = engine.formulas.map(item => ({ ...cloned(item), expression: graph.formulas.find(entry => entry.key === item.key).expression }));
1672
1692
  return { engine: normalized, graph };
1673
1693
  }
@@ -1683,7 +1703,8 @@ function buildFormulaEngine(requirements) {
1683
1703
  semanticVersion: requirements.semanticVersion ?? '1.0.0', status: 'draft', compatibilityProfile: 'legacy-compatible',
1684
1704
  decimalPolicy: requirements.decimalPolicy ?? 'decimal-string', defaultLocale: requirements.defaultLocale ?? 'zh-CN',
1685
1705
  category: requirements.category ?? 'general', inputMethod: requirements.inputMethod ?? 'manual', output: requirements.output ?? ['metric-cards'],
1686
- constraints: requirements.constraints ?? '', fields: requirements.inputs, formulas: requirements.formulas,
1706
+ constraints: requirements.constraints ?? '', roundingPolicy: requirements.roundingPolicy ?? FORMULA_ROUNDING_POLICY,
1707
+ fields: requirements.inputs, formulas: requirements.formulas,
1687
1708
  rules: requirements.rules ?? [], views: requirements.views ?? [], importProfiles: requirements.importProfiles ?? [],
1688
1709
  reports: requirements.reports ?? [], testSuites: requirements.testSuites ?? [], acceptance: requirements.acceptance ?? '',
1689
1710
  };
@@ -1692,6 +1713,7 @@ function buildFormulaEngine(requirements) {
1692
1713
  function compileFormulaEngine(engine) {
1693
1714
  const normalized = normalizeEngine(engine);
1694
1715
  const program = { schemaVersion: FORMULA_SCHEMA, runtimeVersion: FORMULA_RUNTIME_VERSION, decimalPolicy: DECIMAL_POLICY,
1716
+ roundingPolicy: normalized.engine.roundingPolicy,
1695
1717
  engineId: normalized.engine.engineId, engineVersion: normalized.engine.semanticVersion,
1696
1718
  engineDigest: formulaDigest(normalized.engine), engine: normalized.engine,
1697
1719
  formulas: normalized.graph.formulas, dependencies: normalized.graph.dependencies, order: normalized.graph.order };
@@ -1719,7 +1741,8 @@ function evaluateFormulaProgram(program, inputs = {}, expected = {}) {
1719
1741
  } else if (typeof value !== 'string') throw formulaError('ENGINE_INPUT_TYPE', `${key} must be text`);
1720
1742
  }
1721
1743
  for (const field of fields.values()) if (field.required && (!Object.hasOwn(inputs, field.key) || inputs[field.key] === '' || inputs[field.key] === null)) throw formulaError('MISSING_INPUT', `missing input: ${field.key}`, { fieldId: field.key });
1722
- return evaluateFormulaGraph(verified.formulas, Object.fromEntries(Object.entries(inputs).filter(([key]) => NUMERIC.includes(fields.get(key).type))));
1744
+ return evaluateFormulaGraph(verified.formulas, Object.fromEntries(Object.entries(inputs).filter(([key]) => NUMERIC.includes(fields.get(key).type))),
1745
+ { roundingPolicy: verified.roundingPolicy });
1723
1746
  }
1724
1747
  function formulaImpact(program, changedKeys) {
1725
1748
  const verified = verifyFormulaProgram(program);
@@ -1818,7 +1841,7 @@ function createCalctoolEntrypoint(core) {
1818
1841
  const output = await core.run(request, options);
1819
1842
  return { ...output, capabilities: { ...output.capabilities, operations: CLOUD_OPERATIONS, localRunnerOperations: LOCAL_OPERATIONS,
1820
1843
  formulaOperators: FORMULA_OPERATORS, engineSchema: 'engine.spec/1', formulaRuntime: 'decimal28-ast/1.0',
1821
- decimalPolicy: { precision: 28, rounding: 'half-away-from-zero', representation: 'decimal-string' } },
1844
+ decimalPolicy: { precision: 28, rounding: 'half-away-from-zero', representation: 'decimal-string' }, roundingPolicy: FORMULA_ROUNDING_POLICY },
1822
1845
  localRunner: { command: 'entrorove local calctool-<operation>', requiredFor: LOCAL_OPERATIONS } };
1823
1846
  }
1824
1847
  if (request.operation === 'validate') {
@@ -46,7 +46,9 @@ export async function managedExecutionAuthority(input, task, client) {
46
46
  try { output = await client.invoke('handoff-execution-authority', attempt); }
47
47
  catch (error) {
48
48
  if (!error?.outcomeUnknown || error.requestId !== requestId) throw error;
49
- output = await client.status(requestId);
49
+ // The committed authority's own status read was lost too, so its outcome stays unknown.
50
+ try { output = await client.status(requestId); }
51
+ catch { throw new Error(`Original execution authority is unavailable; reconcile requestId=${requestId} without a new attempt`); }
50
52
  }
51
53
  return { attempt, output: original(output, requestId) };
52
54
  });