@lapxo/bound 0.2.4 → 0.2.6

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 (333) hide show
  1. package/CITATION.cff +1 -1
  2. package/README.md +20 -3
  3. package/TARGET.bound +85 -47
  4. package/dist/cli/accept.js +61 -590
  5. package/dist/cli/act-result.js +3 -103
  6. package/dist/cli/args.js +3 -44
  7. package/dist/cli/custodian.js +2 -29
  8. package/dist/cli/host.js +4 -32
  9. package/dist/cli/names.js +1 -12
  10. package/dist/cli/native-descendant.js +1 -19
  11. package/dist/cli/native.js +3 -60
  12. package/dist/cli/observe.js +1 -13
  13. package/dist/cli/owner.js +3 -139
  14. package/dist/cli/pass.js +22 -321
  15. package/dist/cli/place.js +6 -282
  16. package/dist/cli/release-result.js +3 -80
  17. package/dist/cli/retained-judgment.js +1 -25
  18. package/dist/cli/standing-result.js +4 -19
  19. package/dist/cli/takes.js +10 -112
  20. package/dist/cli/verb.d.ts +1 -2
  21. package/dist/cli/verb.js +85 -684
  22. package/dist/engine/computation.js +2 -0
  23. package/dist/engine/conformance.js +4 -0
  24. package/dist/engine/encoding.js +1 -2
  25. package/dist/engine/index.d.ts +1 -13
  26. package/dist/engine/index.js +2 -11
  27. package/dist/engine/object.js +1 -38
  28. package/dist/engine/ports.js +2 -117
  29. package/dist/fold/admission-history.js +1 -17
  30. package/dist/fold/bootstrap-anchor.js +1 -28
  31. package/dist/fold/ceilings.js +1 -142
  32. package/dist/fold/claims.js +2 -132
  33. package/dist/fold/closed.js +24 -235
  34. package/dist/fold/configures.js +1 -25
  35. package/dist/fold/digests.js +10 -226
  36. package/dist/fold/evidence.js +1 -22
  37. package/dist/fold/fold-worker.js +1 -13
  38. package/dist/fold/kept.js +12 -173
  39. package/dist/fold/keys.js +3 -91
  40. package/dist/fold/laid.js +3 -90
  41. package/dist/fold/nos.js +1 -48
  42. package/dist/fold/object.js +1 -2
  43. package/dist/fold/observed.js +28 -534
  44. package/dist/fold/opened.js +1 -33
  45. package/dist/fold/own.js +3 -217
  46. package/dist/fold/paid.js +1 -92
  47. package/dist/fold/place-inputs.js +1 -70
  48. package/dist/fold/places.js +3 -100
  49. package/dist/fold/rank.js +1 -9
  50. package/dist/fold/reach.js +1 -83
  51. package/dist/fold/readers.js +6 -142
  52. package/dist/fold/receipts.js +1 -47
  53. package/dist/fold/region-declarations.js +1 -13
  54. package/dist/fold/region.js +8 -286
  55. package/dist/fold/release-policy.js +1 -101
  56. package/dist/fold/resolved.js +6 -145
  57. package/dist/fold/roles.js +2 -59
  58. package/dist/fold/second.js +4 -71
  59. package/dist/fold/shards.js +12 -100
  60. package/dist/fold/signed.js +3 -81
  61. package/dist/fold/signers.js +1 -54
  62. package/dist/fold/stranger.js +6 -24
  63. package/dist/fold/views.js +1 -66
  64. package/dist/fold/wire.js +1 -46
  65. package/dist/fold/zoom.js +3 -81
  66. package/dist/host/act-cost.js +1 -25
  67. package/dist/host/adapters/keys/ed25519.js +1 -30
  68. package/dist/host/adapters/modules/javascript.js +1 -50
  69. package/dist/host/adapters/transport/http.js +1 -28
  70. package/dist/host/admitted-place.js +1 -35
  71. package/dist/host/archive.js +1 -152
  72. package/dist/host/call-context.js +1 -14
  73. package/dist/host/capsule-process.js +2 -62
  74. package/dist/host/capsule.js +9 -171
  75. package/dist/host/cell-receipts.js +12 -128
  76. package/dist/host/command-server.js +4 -0
  77. package/dist/host/commit-result.js +1 -5
  78. package/dist/host/content-needed.js +1 -8
  79. package/dist/host/content-store.js +1 -31
  80. package/dist/host/contextual-place.js +2 -72
  81. package/dist/host/digest.js +2 -15
  82. package/dist/host/hash.js +1 -9
  83. package/dist/host/host-controls.js +1 -19
  84. package/dist/host/in-process-act.js +3 -84
  85. package/dist/host/in-process-context.js +3 -91
  86. package/dist/host/in-process-root.js +6 -84
  87. package/dist/host/in-process.js +4 -55
  88. package/dist/host/index.d.ts +1 -15
  89. package/dist/host/index.js +1 -7
  90. package/dist/host/io.js +1 -11
  91. package/dist/host/lifetime.js +1 -79
  92. package/dist/host/located.js +6 -105
  93. package/dist/host/native/authority-card-view.js +5 -0
  94. package/dist/host/native/authority-card.js +1 -0
  95. package/dist/host/native/bounded-file.js +1 -32
  96. package/dist/host/native/command.js +1 -91
  97. package/dist/host/native/control-bridge-worker.js +2 -88
  98. package/dist/host/native/control-bridge.js +1 -110
  99. package/dist/host/native/control-selection.js +1 -32
  100. package/dist/host/native/custody.js +1 -91
  101. package/dist/host/native/deadline.js +1 -28
  102. package/dist/host/native/descendants.js +1 -528
  103. package/dist/host/native/generated-custodian.js +5 -267
  104. package/dist/host/native/generated.js +1 -379
  105. package/dist/host/native/image.js +1 -45
  106. package/dist/host/native/installed-package.d.ts +1 -0
  107. package/dist/host/native/installed-package.js +5 -0
  108. package/dist/host/native/jobs.js +2 -148
  109. package/dist/host/native/loader.js +1 -269
  110. package/dist/host/native/materialize.js +1 -175
  111. package/dist/host/native/module-closure.js +1 -130
  112. package/dist/host/native/module-delivery.d.ts +1 -62
  113. package/dist/host/native/module-delivery.js +1 -151
  114. package/dist/host/native/module-inventory.js +2 -0
  115. package/dist/host/native/module-syntax.js +1 -69
  116. package/dist/host/native/native-binary.js +1 -115
  117. package/dist/host/native/native-program.js +1 -72
  118. package/dist/host/native/node-jobs.js +3 -187
  119. package/dist/host/native/node-launch.js +1 -159
  120. package/dist/host/native/preload.js +1 -45
  121. package/dist/host/native/probes.js +1 -0
  122. package/dist/host/native/reading-witness-admission.js +5 -0
  123. package/dist/host/native/reading.js +1 -249
  124. package/dist/host/native/receipt-environment.js +1 -41
  125. package/dist/host/native/references.js +1 -30
  126. package/dist/host/native/root.js +1 -37
  127. package/dist/host/native/route.js +1 -216
  128. package/dist/host/native/runtime.js +1 -9
  129. package/dist/host/native-place-state.js +1 -0
  130. package/dist/host/native-reader-context.js +1 -8
  131. package/dist/host/native-receiver.js +1 -25
  132. package/dist/host/objects.js +1 -38
  133. package/dist/host/order.js +1 -2
  134. package/dist/host/persistent-host.js +1 -0
  135. package/dist/host/physical-lines.d.ts +1 -0
  136. package/dist/host/physical-lines.js +1 -0
  137. package/dist/host/place-act-transaction.js +4 -78
  138. package/dist/host/place-clock-selection.js +5 -124
  139. package/dist/host/ports/ingress.js +2 -57
  140. package/dist/host/ports/local-act.js +5 -183
  141. package/dist/host/ports/place-act.js +1 -134
  142. package/dist/host/ports/publication.js +1 -56
  143. package/dist/host/ports/signing.js +1 -74
  144. package/dist/host/ports/store.js +1 -18
  145. package/dist/host/ports/transport.js +1 -48
  146. package/dist/host/process-lifetime.js +1 -17
  147. package/dist/host/profile-composition.d.ts +1 -0
  148. package/dist/host/profile-composition.js +2 -0
  149. package/dist/host/provide.js +1 -183
  150. package/dist/host/read-only.js +1 -9
  151. package/dist/host/reading-closures.js +7 -227
  152. package/dist/host/reading-context.js +1 -53
  153. package/dist/host/reading-identity-types.js +0 -0
  154. package/dist/host/reading-identity.js +3 -0
  155. package/dist/host/reading-preparation.js +6 -0
  156. package/dist/host/reference-authenticated.d.ts +1 -40
  157. package/dist/host/reference-authenticated.js +3 -100
  158. package/dist/host/reference-contracts.js +1 -6
  159. package/dist/host/reference-export.js +6 -81
  160. package/dist/host/reference-native-api.d.ts +1 -3
  161. package/dist/host/reference-native-api.js +1 -3
  162. package/dist/host/reference-native.js +1 -74
  163. package/dist/host/reference-profile.js +1 -63
  164. package/dist/host/reference-standing.js +2 -18
  165. package/dist/host/reference.js +1 -24
  166. package/dist/host/refusals.js +2 -43
  167. package/dist/host/release.js +4 -256
  168. package/dist/host/root-clock-source.js +1 -307
  169. package/dist/host/selected-capsules.js +1 -50
  170. package/dist/host/selected-topos.js +1 -80
  171. package/dist/host/signature-era.js +1 -12
  172. package/dist/host/signing.js +2 -48
  173. package/dist/host/source-content.js +2 -111
  174. package/dist/host/standing-carrier.js +1 -18
  175. package/dist/host/standing-projection.js +1 -50
  176. package/dist/host/timing.js +1 -7
  177. package/dist/host/walk.js +20 -193
  178. package/dist/host/work-trace.js +1 -0
  179. package/dist/judge/late.js +1 -33
  180. package/dist/judge/take.js +2 -75
  181. package/dist/judge/widening.js +1 -25
  182. package/dist/land/act.js +8 -336
  183. package/dist/land/alias.js +1 -41
  184. package/dist/land/held.js +1 -23
  185. package/dist/land/inert.js +1 -33
  186. package/dist/land/leaving.js +1 -55
  187. package/dist/land/ledger.js +6 -188
  188. package/dist/land/owned.js +4 -66
  189. package/dist/land/sign.js +1 -53
  190. package/dist/land/standing-pin.js +1 -49
  191. package/dist/land/vouched.js +1 -112
  192. package/dist/land/withdraw.js +1 -24
  193. package/dist/observe/files.js +1 -88
  194. package/dist/observe/identity.js +1 -61
  195. package/dist/observe/match.js +1 -8
  196. package/dist/observe/regions.js +7 -306
  197. package/dist/observe/run.js +1 -41
  198. package/dist/observe/runner.js +4 -101
  199. package/dist/public-types.d.ts +2019 -0
  200. package/dist/render/capsule.js +1 -30
  201. package/dist/render/field.js +1 -40
  202. package/dist/render/names.js +1 -4
  203. package/dist/render/open.js +1 -61
  204. package/dist/render/page.js +1 -7
  205. package/dist/render/receipt-projection.js +1 -0
  206. package/dist/render/receipts.js +1 -47
  207. package/dist/render/shape.js +1 -74
  208. package/dist/render/target.js +4 -52
  209. package/dist/render/view.js +7 -197
  210. package/dist/vendor/bundle.json +1 -0
  211. package/dist/vendor/library14.js +1 -0
  212. package/dist/vendor/object-provider.js +42 -0
  213. package/dist/vendor/runtime.js +61 -0
  214. package/dist/wasm/adapter.d.ts +1 -51
  215. package/dist/wasm/adapter.js +1 -180
  216. package/dist/wasm/node-worker.js +1 -13
  217. package/dist/wasm/object.js +1 -76
  218. package/dist/wasm/worker.js +1 -7
  219. package/docs/contracts/authenticated-reference.publication.json +1 -1
  220. package/docs/contracts/authority-preflight.md +17 -0
  221. package/docs/contracts/authority-preflight.publication.json +25 -0
  222. package/docs/contracts/closure-delivery.md +1 -1
  223. package/docs/contracts/closure-delivery.publication.json +1 -1
  224. package/docs/contracts/conformance.json +142 -0
  225. package/docs/contracts/determinism.bound +9 -0
  226. package/docs/contracts/engine-object-projection.publication.json +1 -1
  227. package/docs/contracts/engine.md +21 -1
  228. package/docs/contracts/installed-package.md +21 -0
  229. package/docs/contracts/installed-package.publication.json +25 -0
  230. package/docs/contracts/materialized-leaf-sequence.md +15 -0
  231. package/docs/contracts/materialized-leaf-sequence.publication.json +25 -0
  232. package/docs/contracts/module-inventory.md +15 -0
  233. package/docs/contracts/module-inventory.publication.json +25 -0
  234. package/docs/contracts/native-host.md +29 -1
  235. package/docs/contracts/native-host.publication.json +4 -4
  236. package/docs/contracts/native-probes.md +13 -0
  237. package/docs/contracts/native-probes.publication.json +25 -0
  238. package/docs/contracts/native-publication.inventory.json +10 -1
  239. package/docs/contracts/native-view-batch.md +17 -0
  240. package/docs/contracts/native-view-batch.publication.json +25 -0
  241. package/docs/contracts/optional-wasm-adapter.publication.json +1 -1
  242. package/docs/contracts/physical-lines.md +19 -0
  243. package/docs/contracts/physical-lines.publication.json +25 -0
  244. package/docs/contracts/profile-composition.md +17 -0
  245. package/docs/contracts/profile-composition.publication.json +25 -0
  246. package/docs/contracts/profile-preparation-native-meaning.md +9 -0
  247. package/docs/contracts/publication.md +12 -0
  248. package/docs/contracts/reading-identity.md +61 -0
  249. package/docs/contracts/reading-identity.publication.json +25 -0
  250. package/docs/contracts/reading-witness-admission.md +49 -0
  251. package/docs/contracts/readme.publication.json +1 -1
  252. package/docs/contracts/reference-port.md +11 -0
  253. package/docs/contracts/reference-port.publication.json +1 -1
  254. package/docs/contracts/refusals.bound +346 -94
  255. package/docs/contracts/refusals.md +119 -39
  256. package/docs/contracts/refusals.publication.json +2 -2
  257. package/docs/contracts/views.md +8 -0
  258. package/docs/reference.md +9 -0
  259. package/licenses/wasm/{fast-text-encoding.txt → NOTICE.txt} +111 -0
  260. package/package.json +84 -34
  261. package/receipts.bound +12952 -10449
  262. package/samples/authority-preflight/no.json +6 -0
  263. package/samples/authority-preflight/yes.json +30 -0
  264. package/samples/engine-alphabet/reader.js +3 -1457
  265. package/samples/engine-alphabet/receipts.bound +7 -7
  266. package/samples/engine-interval/reader.js +3 -1457
  267. package/samples/engine-interval/receipts.bound +7 -7
  268. package/samples/installed-package/consumer.mjs +29 -0
  269. package/samples/installed-package/fixture.json +48 -0
  270. package/samples/installed-package/no.json +10 -0
  271. package/samples/installed-package/yes.json +52 -0
  272. package/samples/materialized-leaf-sequence/no.json +11 -0
  273. package/samples/materialized-leaf-sequence/yes.json +10 -0
  274. package/samples/module-inventory/yes.json +28 -0
  275. package/samples/native/physical-line-reader.mjs +1 -0
  276. package/samples/native/physical-line-reader.source.mjs +13 -0
  277. package/samples/native-host/no.json +6 -1
  278. package/samples/native-host/yes.json +18 -1
  279. package/samples/native-probes/inputs/inspection.json +28 -0
  280. package/samples/native-probes/no.json +7 -0
  281. package/samples/native-probes/yes.json +28 -0
  282. package/samples/native-view-batch/no.json +14 -0
  283. package/samples/native-view-batch/yes.json +10 -0
  284. package/samples/no/engine-order/reader.js +3 -1457
  285. package/samples/no/module-inventory/no.json +10 -0
  286. package/samples/physical-lines/no.json +5 -0
  287. package/samples/physical-lines/yes.json +9 -0
  288. package/samples/profile-composition/no.json +6 -0
  289. package/samples/profile-composition/yes.json +14 -0
  290. package/samples/reading-identity/no.json +26 -0
  291. package/samples/reading-identity/yes.json +69 -0
  292. package/vectors/native/authority-preflight.vector.json +55 -0
  293. package/vectors/native/installed-package.vector.json +31 -0
  294. package/vectors/native/materialized-leaf-sequence.vector.json +31 -0
  295. package/vectors/native/module-inventory.vector.json +56 -0
  296. package/vectors/native/native-host.vector.json +214 -0
  297. package/vectors/native/native-probes.vector.json +31 -0
  298. package/vectors/native/native-view-batch.vector.json +31 -0
  299. package/vectors/native/physical-lines.vector.json +105 -0
  300. package/vectors/native/profile-composition.vector.json +53 -0
  301. package/vectors/native/reading-identity.vector.json +139 -0
  302. package/vectors/native/refusals.vector.json +138 -0
  303. package/vendor/syntax/LICENSE.md +7 -0
  304. package/vendor/syntax/parser.js +1 -0
  305. package/.github/workflows/release.yml +0 -67
  306. package/.github/workflows/test.yml +0 -35
  307. package/dist/engine/object.d.ts +0 -17
  308. package/dist/engine/ports.d.ts +0 -37
  309. package/dist/fold/claims.d.ts +0 -29
  310. package/dist/host/call-context.d.ts +0 -20
  311. package/dist/host/commit-result.d.ts +0 -6
  312. package/dist/host/in-process-act.d.ts +0 -82
  313. package/dist/host/in-process-context.d.ts +0 -46
  314. package/dist/host/in-process-root.d.ts +0 -117
  315. package/dist/host/in-process.d.ts +0 -41
  316. package/dist/host/native/module-closure.d.ts +0 -35
  317. package/dist/host/native-receiver.d.ts +0 -19
  318. package/dist/host/place-act-transaction.d.ts +0 -24
  319. package/dist/host/place-clock-selection.d.ts +0 -55
  320. package/dist/host/ports/local-act.d.ts +0 -44
  321. package/dist/host/ports/place-act.d.ts +0 -49
  322. package/dist/host/ports/publication.d.ts +0 -10
  323. package/dist/host/reference-export.d.ts +0 -33
  324. package/dist/host/reference-native.d.ts +0 -30
  325. package/dist/host/reference-profile.d.ts +0 -23
  326. package/dist/host/refusals.d.ts +0 -14
  327. package/dist/host/root-clock-source.d.ts +0 -86
  328. package/licenses/wasm/jitl-quickjs-ffi-types.txt +0 -21
  329. package/licenses/wasm/jitl-quickjs-wasmfile-release-sync.txt +0 -47
  330. package/licenses/wasm/quickjs-emscripten-core.txt +0 -21
  331. package/licenses/wasm/topos.txt +0 -21
  332. /package/{licenses/wasm/bound.txt → dist/vendor/28cba430228db1c04f446c93f81b09a2705d6bf3e222d35adbe5a4cee4061884.LICENSE} +0 -0
  333. /package/{licenses/wasm/obligations.txt → dist/vendor/7aca161279d14bc0e054dcc281cd110aeb95be2e026b42fdf527a260e58b2aae.LICENSE} +0 -0
@@ -1,12 +1,12 @@
1
- bound-lock/1 at=place:sha256:ef476bda8c15b4967a88dc27a188ab25cfac42bdf381fb82f4e57a482d2fd27d by=reader:facdea234873 form=alphabet measure=observed role=writes scope=inputs/sample.json value=ef476bda8c15b496
2
- bound-lock/1 at=place:sha256:ef476bda8c15b4967a88dc27a188ab25cfac42bdf381fb82f4e57a482d2fd27d by=reader:facdea234873 form=interval measure=count role=writes scope=conformance/engine-object/interval value=0..0
3
- bound-lock/1 at=place:sha256:ec8b038a495f5fbf0bdc27bbb87187a9493860eb2cd6f0eff4f28fe40558246b by=bound form=alphabet measure=digest role=writes scope=instrument/implementation value=sha256:ec8b038a495f5fbf0bdc27bbb87187a9493860eb2cd6f0eff4f28fe40558246b
1
+ bound-lock/1 at=place:sha256:ef476bda8c15b4967a88dc27a188ab25cfac42bdf381fb82f4e57a482d2fd27d by=reader:1b7891c8e7ba form=alphabet measure=observed role=writes scope=inputs/sample.json value=ef476bda8c15b496
2
+ bound-lock/1 at=place:sha256:ef476bda8c15b4967a88dc27a188ab25cfac42bdf381fb82f4e57a482d2fd27d by=reader:1b7891c8e7ba form=interval measure=count role=writes scope=conformance/engine-object/interval value=0..0
3
+ bound-lock/1 at=place:sha256:bcfa69682734d98ae1aeb8fe60f57006f7080cd6e020c0180e20d3b0f755d901 by=bound form=alphabet measure=digest role=writes scope=instrument/implementation value=sha256:bcfa69682734d98ae1aeb8fe60f57006f7080cd6e020c0180e20d3b0f755d901
4
4
 
5
- bound-lock/1 at=place:sha256:349ccabca01171a7c5d5ba2479290e1c3b58835e3e1509b3a4474158c7c0eda7 by=bound form=alphabet measure=digest role=writes scope=receipts value=sha256:d06eecd9af3029f29b8ddd2b7a3609ff01472aa66169f2fc4e491dc89837b193
5
+ bound-lock/1 at=place:sha256:df943b9602382b70f85595ac8e10a8093b786f8843bdb6dba51d6aee3d09c883 by=bound form=alphabet measure=digest role=writes scope=receipts value=sha256:376e9e55c2236e303178e0c4666508320263f8a1d8e02184089f1c1841fcff49
6
6
 
7
- bound-lock/1 at=place:sha256:5f806bb6af3d433c2e91894c5de9e55afc833ac4038570ea39644e71fc4dee14 by=bound form=interval measure=count role=writes scope=receipts/conformance value=1..1
7
+ bound-lock/1 at=place:sha256:6ecce77379245a0216e376b945c7bbc4a7383b67b91cb7699f6c196ba75e154a by=bound form=interval measure=count role=writes scope=receipts/conformance value=1..1
8
8
  bound-lock/1 at=place:sha256:9d15c34a3540e0baa6bc6f6486a255668e82675a17f7f2a66179d8be1911782d by=bound form=alphabet measure=bytes role=writes scope=receipts/conformance value=sha256:9d15c34a3540e0baa6bc6f6486a255668e82675a17f7f2a66179d8be1911782d
9
- bound-lock/1 at=place:sha256:00e0bf01baa49755473dc3d8df2af1e4eaaec8eae96d6475e7222329788f9556 by=bound form=interval measure=count role=writes scope=receipts/inputs value=1..1
9
+ bound-lock/1 at=place:sha256:125a4dd819dc5bd8079b9cd97e7161b9df98cb3d6325d3fd54198bd58bd34697 by=bound form=interval measure=count role=writes scope=receipts/inputs value=1..1
10
10
  bound-lock/1 at=place:sha256:1df9c3a47226191b49c489df107a4dec2a23584e5ae7c23ef72b7ff8d71318d1 by=bound form=alphabet measure=bytes role=writes scope=receipts/inputs value=sha256:1df9c3a47226191b49c489df107a4dec2a23584e5ae7c23ef72b7ff8d71318d1
11
- bound-lock/1 at=place:sha256:496fc1a40cdb9b48b96f534e5477b4fda6c803a7feb43409561384469bdf256b by=bound form=interval measure=count role=writes scope=receipts/instrument value=1..1
11
+ bound-lock/1 at=place:sha256:cc3b4bab82e8730dab531193571c9ae617432aa053e535b10107ac96958beb48 by=bound form=interval measure=count role=writes scope=receipts/instrument value=1..1
12
12
  bound-lock/1 at=place:sha256:9d15c34a3540e0baa6bc6f6486a255668e82675a17f7f2a66179d8be1911782d by=bound form=alphabet measure=bytes role=writes scope=receipts/instrument value=sha256:9d15c34a3540e0baa6bc6f6486a255668e82675a17f7f2a66179d8be1911782d
@@ -0,0 +1,29 @@
1
+ import assert from 'node:assert/strict';
2
+ import {readFileSync,mkdtempSync,mkdirSync,writeFileSync,rmSync,cpSync,symlinkSync} from 'node:fs';
3
+ import {join} from 'node:path';
4
+ import {tmpdir} from 'node:os';
5
+ const {installedPackageIdentity}=await import(process.env.BOUND_PACKAGE_API??'@lapxo/bound/package/native');
6
+ const fixture=JSON.parse(readFileSync(new URL('./fixture.json',import.meta.url),'utf8'));
7
+ const temporary=mkdtempSync(join(tmpdir(),'bound-installed-consumer-'));
8
+ const limits={members:40,bytes:200000,responseBytes:400000};
9
+ const library=fixture.library;
10
+ const pin={parent:'self',specifier:'fixture-math',snapshot:library.identity,source:library.sourceName,version:library.version,module:{identity:library.identity,entry:library.entry,members:new Map([[library.entry,{source:library.source,digest:library.digest}]])}};
11
+ const request={shape:'package',members:fixture.files.map(({coordinate,digest})=>({coordinate,digest})),exports:fixture.exports,pins:[pin],limits};
12
+ const refuses=code=>error=>error.code===code;
13
+ try{
14
+ const first=join(temporary,'garden'),second=join(temporary,'harbor');mkdirSync(first);for(const file of fixture.files)writeFileSync(join(first,file.coordinate),file.source);cpSync(first,second,{recursive:true});
15
+ const left=installedPackageIdentity({...request,directory:first}),right=installedPackageIdentity({...request,directory:second});
16
+ assert.equal(left.digest,right.digest);assert.equal(left.lines,right.lines);assert.equal(left.modules.modules.length,3);assert.equal(left.consumedPins.length,1);
17
+ assert.ok(left.lines.includes('file/unreachable.js'));assert.ok(!left.modules.modules.some(row=>row.module==='unreachable.js'));
18
+ assert.ok(left.delivery.files.some(row=>row.source.includes('unusedSymbol')));assert.ok(left.delivery.files.some(row=>row.source.includes('unusedLibrarySymbol')));assert.ok(!('archiveDigest' in left));
19
+ for(const directory of [first,second]){
20
+ const reset=()=>{rmSync(directory,{recursive:true,force:true});mkdirSync(directory);for(const file of fixture.files)writeFileSync(join(directory,file.coordinate),file.source)};
21
+ const mutation=fixture.mutation;writeFileSync(join(directory,mutation.coordinate),mutation.source);assert.throws(()=>installedPackageIdentity({...request,directory}),refuses('installed/member-integrity'));
22
+ const changed=installedPackageIdentity({...request,directory,members:request.members.map(row=>row.coordinate===mutation.coordinate?{...row,digest:mutation.digest}:row)});assert.notEqual(changed.digest,left.digest);assert.equal(changed.modules.modules.length,3);reset();
23
+ rmSync(join(directory,'leaf.js'));assert.throws(()=>installedPackageIdentity({...request,directory}),refuses('installed/missing-member'));reset();
24
+ writeFileSync(join(directory,'extra.js'),'export const extra=1;');assert.throws(()=>installedPackageIdentity({...request,directory}),refuses('installed/uninventoried-member'));reset();
25
+ const outside=join(temporary,'outside.js');writeFileSync(outside,'export const leaf=2;');rmSync(join(directory,'leaf.js'));symlinkSync(outside,join(directory,'leaf.js'));assert.throws(()=>installedPackageIdentity({...request,directory}),refuses('installed/external-member'));reset();
26
+ assert.throws(()=>installedPackageIdentity({...request,directory,pins:[]}),/unpinned library fixture-math/);
27
+ }
28
+ console.log('INSTALLED PACKAGE · two copies agree · exact members manifest and consumed pins · changed missing extra external and unpinned refused · modules retain unused symbols');
29
+ }finally{rmSync(temporary,{recursive:true,force:true})}
@@ -0,0 +1,48 @@
1
+ {
2
+ "files": [
3
+ {
4
+ "coordinate": "package.json",
5
+ "source": "{\"name\":\"fixture-installed\",\"version\":\"1.0.0\",\"type\":\"module\",\"exports\":{\".\":\"./index.js\"}}",
6
+ "digest": "sha256:6fbb4840c2bd58a173a96aeac13083d2ce62ce735fbfd88545bb35d9ec1a6bcc"
7
+ },
8
+ {
9
+ "coordinate": "index.js",
10
+ "source": "import {n} from 'fixture-math';import {leaf} from './leaf.js';export const visible=n+leaf;export const unusedSymbol='kept';\n",
11
+ "digest": "sha256:3b73434097f0e207f0c0a82ef17f4eebec9e5d0218b1c4f41205f62e9b7beec7"
12
+ },
13
+ {
14
+ "coordinate": "leaf.js",
15
+ "source": "export const leaf=2;\n",
16
+ "digest": "sha256:5a23b35ac6e9b1a5145160808971135a2490a1cdea3093f3dfa35f071e44c771"
17
+ },
18
+ {
19
+ "coordinate": "unreachable.js",
20
+ "source": "export const unreachable=41;\n",
21
+ "digest": "sha256:f4ead11fa0d9683e45b3993b2b961792a9b180bf2d31fb953e358a0041d58073"
22
+ },
23
+ {
24
+ "coordinate": "NOTICE",
25
+ "source": "A complete package also carries non-module bytes.\n",
26
+ "digest": "sha256:48278ab65f9a9040938b07e0b1b5a6054ed5ab22779778506bfe916eea01f709"
27
+ }
28
+ ],
29
+ "exports": [
30
+ [
31
+ "exports",
32
+ "."
33
+ ]
34
+ ],
35
+ "library": {
36
+ "identity": "sha256:fcdf73da58275a7ac691352309dea09ed8b31c63d7724a1f94e73084de029410",
37
+ "entry": "lib.js",
38
+ "sourceName": "fixture-math",
39
+ "version": "2.0.0",
40
+ "source": "export const n=5;export const unusedLibrarySymbol=99;\n",
41
+ "digest": "sha256:c6e5fc9a46fee273cca1b079767064eda69b790f9164e62c77c28ea90181c0cd"
42
+ },
43
+ "mutation": {
44
+ "coordinate": "unreachable.js",
45
+ "source": "export const unreachable=42;\n",
46
+ "digest": "sha256:8d7dfda12330e2cf0a7d1b9ff8919f7c0b89fd1a086c637a3c3c874a598c6d79"
47
+ }
48
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "alteredLeaf": "export const leaf=9;",
3
+ "extraSource": "export const extra=1;",
4
+ "changedLibrary": "export const n=99;",
5
+ "badExport": "private",
6
+ "wrongShape": "other",
7
+ "invalidUtf8Bytes": [
8
+ 255
9
+ ]
10
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "files": [
3
+ {
4
+ "coordinate": "package.json",
5
+ "source": "{\"name\":\"fixture-installed\",\"version\":\"1.0.0\",\"type\":\"module\",\"exports\":{\".\":\"./index.js\"}}",
6
+ "digest": "sha256:6fbb4840c2bd58a173a96aeac13083d2ce62ce735fbfd88545bb35d9ec1a6bcc"
7
+ },
8
+ {
9
+ "coordinate": "index.js",
10
+ "source": "import {n} from 'fixture-math';import {leaf} from './leaf.js';export const visible=n+leaf;export const unusedSymbol='kept';\n",
11
+ "digest": "sha256:3b73434097f0e207f0c0a82ef17f4eebec9e5d0218b1c4f41205f62e9b7beec7"
12
+ },
13
+ {
14
+ "coordinate": "leaf.js",
15
+ "source": "export const leaf=2;\n",
16
+ "digest": "sha256:5a23b35ac6e9b1a5145160808971135a2490a1cdea3093f3dfa35f071e44c771"
17
+ },
18
+ {
19
+ "coordinate": "unreachable.js",
20
+ "source": "export const unreachable=41;\n",
21
+ "digest": "sha256:f4ead11fa0d9683e45b3993b2b961792a9b180bf2d31fb953e358a0041d58073"
22
+ },
23
+ {
24
+ "coordinate": "NOTICE",
25
+ "source": "A complete package also carries non-module bytes.\n",
26
+ "digest": "sha256:48278ab65f9a9040938b07e0b1b5a6054ed5ab22779778506bfe916eea01f709"
27
+ }
28
+ ],
29
+ "exports": [
30
+ [
31
+ "exports",
32
+ "."
33
+ ]
34
+ ],
35
+ "library": {
36
+ "identity": "sha256:fcdf73da58275a7ac691352309dea09ed8b31c63d7724a1f94e73084de029410",
37
+ "entry": "lib.js",
38
+ "sourceName": "fixture-math",
39
+ "version": "2.0.0",
40
+ "source": "export const n=5;export const unusedLibrarySymbol=99;\n",
41
+ "digest": "sha256:c6e5fc9a46fee273cca1b079767064eda69b790f9164e62c77c28ea90181c0cd"
42
+ },
43
+ "mutation": {
44
+ "coordinate": "unreachable.js",
45
+ "source": "export const unreachable=42;\n",
46
+ "digest": "sha256:8d7dfda12330e2cf0a7d1b9ff8919f7c0b89fd1a086c637a3c3c874a598c6d79"
47
+ },
48
+ "places": [
49
+ "garden",
50
+ "harbor"
51
+ ]
52
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "outputNames": [
3
+ "README.md",
4
+ "manifest.json"
5
+ ],
6
+ "states": [
7
+ "altered",
8
+ "absent"
9
+ ],
10
+ "alteredOutput": "altered output\n"
11
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "places": [
3
+ "field-notes",
4
+ "stock-register"
5
+ ],
6
+ "originalVersion": "1.0.0",
7
+ "revisedVersion": "1.0.1",
8
+ "originalProsePrefix": "Original prose for ",
9
+ "revisedProsePrefix": "Revised prose for "
10
+ }
@@ -0,0 +1,28 @@
1
+ [
2
+ {
3
+ "name": "field-notes",
4
+ "pin": "sha256:c7a9596995cf3bc965a36f3a43987c5688567a08d838f3d92a3f182c9317d500",
5
+ "sources": [
6
+ {
7
+ "snapshot": "sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae",
8
+ "source": "example/field-notes",
9
+ "version": "1.0.0"
10
+ }
11
+ ],
12
+ "carrier": "{\"manifest\":{\"format\":\"esm-file-closure/1\",\"needs\":[{\"name\":\"field-notes\",\"snapshot\":\"sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae\",\"entry\":\"entry.js\"}],\"modules\":[{\"snapshot\":\"sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae\",\"coordinate\":\"entry.js\",\"digest\":\"sha256:d84c44d507454c3ade89f362e3acc06281b5a283a4ed0f0a15d032f39a7abd74\",\"path\":\"modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/entry.js\"},{\"snapshot\":\"sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae\",\"coordinate\":\"value.js\",\"digest\":\"sha256:f1670f52eabccbb1f1c1c047ccee88965a894854b9717d470835475b7f7920b1\",\"path\":\"modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/value.js\"}],\"libraries\":[],\"notices\":[]},\"files\":[{\"path\":\"modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/entry.js\",\"source\":\"import './value.js'; export const result=7;\"},{\"path\":\"modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/value.js\",\"source\":\"export const value=7;\"}]}",
13
+ "expected": "bound-lock/1 about=\"{\\\"format\\\":\\\"module-inventory-record/1\\\",\\\"unit\\\":\\\"module\\\",\\\"source\\\":\\\"example/field-notes\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"snapshot\\\":\\\"sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae\\\",\\\"module\\\":\\\"entry.js\\\",\\\"digest\\\":\\\"sha256:d84c44d507454c3ade89f362e3acc06281b5a283a4ed0f0a15d032f39a7abd74\\\",\\\"reachedFrom\\\":\\\"sha256:b3e341847a3c885b096be462305af81f09198f426f02d9e3f086f489ca3cbc9f\\\"}\" at=policy:module-inventory by=consumer form=alphabet measure=digest role=writes scope=consumer/modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/entry.js value=sha256:d84c44d507454c3ade89f362e3acc06281b5a283a4ed0f0a15d032f39a7abd74\nbound-lock/1 about=\"{\\\"format\\\":\\\"module-inventory-record/1\\\",\\\"unit\\\":\\\"module\\\",\\\"source\\\":\\\"example/field-notes\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"snapshot\\\":\\\"sha256:73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae\\\",\\\"module\\\":\\\"value.js\\\",\\\"digest\\\":\\\"sha256:f1670f52eabccbb1f1c1c047ccee88965a894854b9717d470835475b7f7920b1\\\",\\\"reachedFrom\\\":\\\"sha256:b3e341847a3c885b096be462305af81f09198f426f02d9e3f086f489ca3cbc9f\\\"}\" at=policy:module-inventory by=consumer form=alphabet measure=digest role=writes scope=consumer/modules/73d7146ce6e337d89811c94fd4848e24d3a9431b01eaf56e422833e31e0a78ae/value.js value=sha256:f1670f52eabccbb1f1c1c047ccee88965a894854b9717d470835475b7f7920b1\n"
14
+ },
15
+ {
16
+ "name": "water-level",
17
+ "pin": "sha256:bed572b9b006223ca3dd2db63842ce1a146b16bd0373e89c5ab13ee927bf99b3",
18
+ "sources": [
19
+ {
20
+ "snapshot": "sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b",
21
+ "source": "example/water-level",
22
+ "version": "1.0.0"
23
+ }
24
+ ],
25
+ "carrier": "{\"manifest\":{\"format\":\"esm-file-closure/1\",\"needs\":[{\"name\":\"water-level\",\"snapshot\":\"sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b\",\"entry\":\"entry.js\"}],\"modules\":[{\"snapshot\":\"sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b\",\"coordinate\":\"entry.js\",\"digest\":\"sha256:c1a18cc4b86617ffd1af205d37745d9250f218e026ebb47da08f15c476281b5a\",\"path\":\"modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/entry.js\"},{\"snapshot\":\"sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b\",\"coordinate\":\"value.js\",\"digest\":\"sha256:ca83bd49a1d3b94db4076def1fdd98150b73b240ed6293a68ffaa2b4ff306825\",\"path\":\"modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/value.js\"}],\"libraries\":[],\"notices\":[]},\"files\":[{\"path\":\"modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/entry.js\",\"source\":\"import './value.js'; export const result=13;\"},{\"path\":\"modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/value.js\",\"source\":\"export const value=13;\"}]}",
26
+ "expected": "bound-lock/1 about=\"{\\\"format\\\":\\\"module-inventory-record/1\\\",\\\"unit\\\":\\\"module\\\",\\\"source\\\":\\\"example/water-level\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"snapshot\\\":\\\"sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b\\\",\\\"module\\\":\\\"entry.js\\\",\\\"digest\\\":\\\"sha256:c1a18cc4b86617ffd1af205d37745d9250f218e026ebb47da08f15c476281b5a\\\",\\\"reachedFrom\\\":\\\"sha256:3947c3b370018282e54f674ef35fdea7300679bd7ed2a8fb51df831b28198203\\\"}\" at=policy:module-inventory by=consumer form=alphabet measure=digest role=writes scope=consumer/modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/entry.js value=sha256:c1a18cc4b86617ffd1af205d37745d9250f218e026ebb47da08f15c476281b5a\nbound-lock/1 about=\"{\\\"format\\\":\\\"module-inventory-record/1\\\",\\\"unit\\\":\\\"module\\\",\\\"source\\\":\\\"example/water-level\\\",\\\"version\\\":\\\"1.0.0\\\",\\\"snapshot\\\":\\\"sha256:d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b\\\",\\\"module\\\":\\\"value.js\\\",\\\"digest\\\":\\\"sha256:ca83bd49a1d3b94db4076def1fdd98150b73b240ed6293a68ffaa2b4ff306825\\\",\\\"reachedFrom\\\":\\\"sha256:3947c3b370018282e54f674ef35fdea7300679bd7ed2a8fb51df831b28198203\\\"}\" at=policy:module-inventory by=consumer form=alphabet measure=digest role=writes scope=consumer/modules/d99ba0cf723d36c49ca5da30d9e1d1fb1afb52159372dd14ea6c1bb3c8dfd60b/value.js value=sha256:ca83bd49a1d3b94db4076def1fdd98150b73b240ed6293a68ffaa2b4ff306825\n"
27
+ }
28
+ ]
@@ -0,0 +1 @@
1
+ var B=new TextEncoder;function y(e,t){let o=B.encode(e),s=B.encode(t);for(let a=0;a<o.length&&a<s.length;a++)if(o[a]!==s[a])return o[a]-s[a];return o.length-s.length}function k(e,t){if(!e.includes("*"))return e===t;let o=e.split("*");if(!t.startsWith(o[0]))return!1;let s=o[0].length;for(let a=1;a<o.length;a++){let c=o[a];if(c==="")return a===o.length-1||k(o.slice(a).join("*"),t.slice(s));let l=t.indexOf(c,s);if(l<0)return!1;s=l+c.length}return s===t.length||e.endsWith("*")}function O(e,t,o,s){if(t===e.length)return s===o.length;if(e[t]==="**"){if(t+1===e.length)return!0;for(let a=s;a<=o.length;a++)if(O(e,t+1,o,a))return!0;return!1}return s===o.length||!k(e[t],o[s])?!1:O(e,t+1,o,s+1)}function F(e,t){return O(e.split("/"),0,t.split("/"),0)}var S=[0n,1n];var w=e=>{throw new Error("REFUSE\xB7model/M3 "+e)},W=(e,t)=>{for(e=e<0n?-e:e;t;){let o=e%t;e=t,t=o}return e};function h(e,t=1n){t===0n&&w("zero rational denominator"),t<0n&&(e=-e,t=-t);let o=W(e,t);return[e/o,t/o]}function C(e){if(typeof e=="string"){if(/^-?\d+\/\d+$/.test(e)){let[c,l]=e.split("/");return h(BigInt(c),BigInt(l))}/^-?\d+(\.\d+)?$/.test(e)||w("invalid exact probability");let t=e.startsWith("-")?-1n:1n,o=e.replace(/^-/,""),[s,a=""]=o.split(".");return h(t*BigInt(s+a),10n**BigInt(a.length))}return(!e||typeof e.numerator!="string"||typeof e.denominator!="string"||!/^[-]?\d+$/.test(e.numerator)||!/^\d+$/.test(e.denominator))&&w("invalid rational"),h(BigInt(e.numerator),BigInt(e.denominator))}var _=(e,t)=>h(e[0]*t[1]+t[0]*e[1],e[1]*t[1]),T=(e,t)=>h(e[0]*t[1]-t[0]*e[1],e[1]*t[1]);var N=(e,t)=>e[0]===t[0]&&e[1]===t[1],R=e=>({numerator:String(e[0]),denominator:String(e[1])});var f=e=>{throw Error("REFUSE\xB7region-measure/"+e)},x=e=>typeof e=="string"&&e.length>0&&!/[\u0000-\u001f\u007f]/.test(e);function P(e,t){if(!e||e.model!=="finite-nonnegative-atomic-valuation@1"||!x(e.unit))return f("model-and-unit");if(Object.keys(e).some(n=>!["model","unit","atoms","regions"].includes(n))||!Array.isArray(e.atoms)||!Array.isArray(e.regions))return f("domain");if(!t||typeof t.budget!="string"||!/^(0|[1-9][0-9]*)$/.test(t.budget))return f("budget");let o=BigInt(e.atoms.length)+BigInt(e.regions.length);for(let n of e.regions){if(!n||!x(n.id)||!Array.isArray(n.members)||!n.members.every(x)||Object.keys(n).some(i=>!["id","members"].includes(i)))return f("region");o+=BigInt(n.members.length)}if(o>BigInt(t.budget))return{status:"unmeasured",cause:"region-measure/budget",required:String(o),workUnit:"declared-input-rows"};let s=new Map;for(let n of e.atoms){if(!n||!x(n.id)||Object.keys(n).some(m=>!["id","value"].includes(m)))return f("atom");let i;try{i=C(n.value)}catch{return f("weight")}if(i[0]<0n)return f("negative-weight");let d=s.get(n.id);if(d!==void 0&&!N(d,i))return f("conflicting-atom");s.set(n.id,i)}let a=new Set,c=new Map,l=n=>n.reduce((i,d)=>_(i,s.get(d)),S),b=e.regions.map(n=>{if(a.has(n.id))return f("duplicate-region");a.add(n.id);let i=[...new Set(n.members)].sort();for(let d of i){if(!x(d)||!s.has(d))return f("unknown-atom");let m=c.get(d)??[];m.push(n.id),c.set(d,m)}return{region:n.id,members:i,value:R(l(i))}}).sort((n,i)=>n.region<i.region?-1:n.region>i.region?1:0),g=[...c.keys()].sort(),p=l(g),r=b.reduce((n,i)=>_(n,C(i.value)),S);return{status:"measured",model:e.model,unit:e.unit,arithmetic:"exact-rational",readings:b,union:{members:g,value:R(p)},sumOfRegions:R(r),overlapExcess:R(T(r,p)),disjointBySupport:[...c.values()].every(n=>n.length===1),overlaps:[...c].filter(([,n])=>n.length>1).map(([n,i])=>({atom:n,regions:[...i].sort()})).sort((n,i)=>n.atom<i.atom?-1:n.atom>i.atom?1:0),unassigned:[...s.keys()].filter(n=>!c.has(n)).sort(),work:{unit:"declared-input-rows",required:String(o)}}}var E="topos-physical-lines/1",D={name:"finite-nonnegative-atomic-valuation@1",contract:"sha256:636ace16eeaa46eafb7b07c28d1d57916bc9108b188e96b5a8bf7bed6dc15707",implementation:"sha256:ef7e39d0ac44b0dd3d4b68220d3c381f737eb2729d0017ed3271ce119d408b13"},u=e=>{throw Error("REFUSE\xB7physical-lines/"+e)},M=e=>typeof e=="string"&&/^sha256:[0-9a-f]{64}$/.test(e),j=e=>typeof e=="string"&&e.length>0&&!/[\u0000-\u001f\u007f]/.test(e),$=e=>j(e)&&!e.includes("\\")&&e.split("/").every(t=>t!==""&&t!=="."&&t!==".."),U=e=>typeof e=="string"&&/^(0|[1-9][0-9]*)$/.test(e),I=(e,t)=>Object.keys(e).every(o=>t.includes(o));function L(e,t){if(typeof t!="function")return u("digest-port");if(!e||e.profile!==E||!I(e,["profile","snapshot","files","regions","policy"])||!M(e.snapshot))return u("profile");if(!Array.isArray(e.files)||!Array.isArray(e.regions)||!e.policy||!I(e.policy,["byteBudget","rowBudget"])||!U(e.policy.byteBudget)||!U(e.policy.rowBudget))return u("policy");let o=0n,s=new Set,a=new Set;for(let r of e.files){if(!r||!I(r,["name","digest","bytes"])||!$(r.name)||r.name.includes("*")||!M(r.digest)||!(r.bytes instanceof Uint8Array))return u("file");if(s.has(r.name))return u("duplicate-file");s.add(r.name),o+=BigInt(r.bytes.length)}for(let r of e.regions){if(!r||!I(r,["scope","selectors"])||!j(r.scope)||!Array.isArray(r.selectors)||!r.selectors.length||!r.selectors.every(n=>$(n)&&n.split("/").every(i=>!i.includes("**")||i==="**")))return u("selector");if(a.has(r.scope))return u("duplicate-region");a.add(r.scope)}if(o>BigInt(e.policy.byteBudget))return{status:"unmeasured",cause:"physical-lines/byte-budget",required:String(o),workUnit:"input-bytes"};let c=e.regions.reduce((r,n)=>r+n.selectors.reduce((i,d)=>i+BigInt(d.length),0n)*BigInt(e.files.length+1),0n);if(c>BigInt(e.policy.rowBudget))return{status:"unmeasured",cause:"physical-lines/selection-budget",required:String(c),workUnit:"selector-code-units-times-candidates"};let l=[...e.files].sort((r,n)=>y(r.name,n.name)),b=l.map(r=>{if(t(r.bytes)!==r.digest)return u("integrity");try{new TextDecoder("utf-8",{fatal:!0}).decode(r.bytes)}catch{return u("utf8")}let n=0n;for(let i=0;i<r.bytes.length;i++){if(r.bytes[i]===13&&r.bytes[i+1]!==10)return u("isolated-cr");r.bytes[i]===10&&n++}return r.bytes.length&&r.bytes[r.bytes.length-1]!==10&&n++,{id:r.name,value:String(n)}}),g=[...e.regions].sort((r,n)=>y(r.scope,n.scope)).map(r=>{let n=[...new Set(r.selectors)].sort(y),i=n.map(d=>{let m=l.filter(v=>F(d,v.name)).map(v=>v.name);return m.length?{selector:d,members:m,status:"selected"}:{selector:d,members:m,status:"unmeasured",cause:"selector-no-match"}});return{scope:r.scope,selectors:n,selections:i,members:[...new Set(i.flatMap(d=>d.members))].sort(y)}}),p=P({model:"finite-nonnegative-atomic-valuation@1",unit:"physical-lines/utf8-lf@1",atoms:b,regions:g.filter(r=>r.members.length).map(r=>({id:r.scope,members:r.members}))},{budget:e.policy.rowBudget});return p.status==="unmeasured"?p:{status:"read",profile:E,snapshot:e.snapshot,model:D,policy:{...e.policy},textDomain:"utf8-lf-crlf-reject-isolated-cr@1",inputFiles:l.map(r=>({name:r.name,digest:r.digest})),regions:g.map(r=>r.members.length?{...r,status:"measured",value:p.readings.find(n=>n.region===r.scope).value}:{...r,status:"unmeasured",cause:"selector-no-match"}),valuation:p,work:{inputBytes:String(o),selectionUnits:String(c)},verification:"supplied inventory and snapshot; authority and completeness are consumer obligations"}}var A="sha256:"+"1".repeat(64),re=()=>["bound-lock/1 at=receipt:1 by=world form=alphabet measure=reads role=reads scope=physical value=src/input.txt"],oe=e=>{let t=e.lines.find(c=>c.scope==="src/input.txt");if(!t)throw Error("actual handed input absent");let o=new TextEncoder().encode(t.about),s=L({profile:E,snapshot:A,files:[{name:"src/input.txt",digest:A,bytes:o}],regions:[{scope:"core/lines",selectors:["src/*.txt"]}],policy:{byteBudget:"65536",rowBudget:"65536"}},()=>A);if(s.status!=="read"||s.regions[0].status!=="measured")throw Error("actual physical input unmeasured");let a=Number(s.regions[0].value.numerator);return[{scope:"core/lines",measure:"lines",role:"reads",bound:{kind:"interval",lo:a,hi:a}}]};export{oe as receipt,re as render};
@@ -0,0 +1,13 @@
1
+ import {readPhysicalLines,PHYSICAL_LINES_PROFILE} from '@lapxo/topos/contract';
2
+ const fixtureDigest='sha256:'+'1'.repeat(64);
3
+ // The native host owns real input digests. This pure count projection delegates text/count semantics to Topos.
4
+ export const render=()=>['bound-lock/1 at=receipt:1 by=world form=alphabet measure=reads role=reads scope=physical value=src/input.txt'];
5
+ export const receipt=asked=>{
6
+ const file=asked.lines.find(line=>line.scope==='src/input.txt');
7
+ if(!file)throw Error('actual handed input absent');
8
+ const bytes=new TextEncoder().encode(file.about);
9
+ const read=readPhysicalLines({profile:PHYSICAL_LINES_PROFILE,snapshot:fixtureDigest,files:[{name:'src/input.txt',digest:fixtureDigest,bytes}],regions:[{scope:'core/lines',selectors:['src/*.txt']}],policy:{byteBudget:'65536',rowBudget:'65536'}},()=>fixtureDigest);
10
+ if(read.status!=='read'||read.regions[0].status!=='measured')throw Error('actual physical input unmeasured');
11
+ const n=Number(read.regions[0].value.numerator);
12
+ return [{scope:'core/lines',measure:'lines',role:'reads',bound:{kind:'interval',lo:n,hi:n}}];
13
+ };
@@ -6,5 +6,10 @@
6
6
  "cancelled before commit",
7
7
  "noncanonical unsigned Root lot"
8
8
  ],
9
- "expected": "refuse without a visible act or an additional signature"
9
+ "expected": "refuse without a visible act or an additional signature",
10
+ "persistent": {
11
+ "unsupportedView": "unknown",
12
+ "unboundKey": "lane",
13
+ "startupTimeoutMs": 1
14
+ }
10
15
  }
@@ -16,5 +16,22 @@
16
16
  "landed",
17
17
  "historical recovery",
18
18
  "already-held without signing"
19
- ]
19
+ ],
20
+ "persistent": {
21
+ "places": [
22
+ "catalog",
23
+ "weather"
24
+ ],
25
+ "views": [
26
+ "lines",
27
+ "evidence"
28
+ ],
29
+ "limits": {
30
+ "requestBytes": 16777216,
31
+ "responseBytes": 33554432,
32
+ "timeoutMs": 15000,
33
+ "heapMiB": 256,
34
+ "queuedRequests": 8
35
+ }
36
+ }
20
37
  }
@@ -0,0 +1,28 @@
1
+ {
2
+ "forms": [
3
+ "lines",
4
+ "evidence"
5
+ ],
6
+ "repetitions": 6,
7
+ "port": {
8
+ "coordinate": "port/public-inspection",
9
+ "probes": 6,
10
+ "responseBytes": 16777216
11
+ },
12
+ "declaredIdentityLimits": {
13
+ "bytes": 16777216,
14
+ "files": 2048,
15
+ "readings": 16,
16
+ "probes": 8
17
+ },
18
+ "places": [
19
+ "harbor-log",
20
+ "library-index"
21
+ ],
22
+ "expected": {
23
+ "newPersistentBytes": 0,
24
+ "newPersistentLines": 0,
25
+ "identitiesUnchanged": true,
26
+ "textMatchesNativeView": true
27
+ }
28
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "unsupportedView": "rank",
3
+ "responseBytes": 1,
4
+ "expectedIdentity": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
5
+ "askedProbes": 9,
6
+ "invalidPort": ""
7
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "forms": [
3
+ "lines",
4
+ "evidence"
5
+ ],
6
+ "repetitions": 6,
7
+ "port": {
8
+ "coordinate": "port/public-inspection",
9
+ "probes": 6,
10
+ "responseBytes": 16777216
11
+ },
12
+ "declaredIdentityLimits": {
13
+ "bytes": 16777216,
14
+ "files": 2048,
15
+ "readings": 16,
16
+ "probes": 8
17
+ },
18
+ "places": [
19
+ "harbor-log",
20
+ "library-index"
21
+ ],
22
+ "expected": {
23
+ "newPersistentBytes": 0,
24
+ "newPersistentLines": 0,
25
+ "identitiesUnchanged": true,
26
+ "textMatchesNativeView": true
27
+ }
28
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "staleDigest": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
3
+ "selections": [
4
+ [],
5
+ [
6
+ "lines",
7
+ "lines"
8
+ ],
9
+ [
10
+ "lines",
11
+ "unknown"
12
+ ]
13
+ ]
14
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "places": [
3
+ "field-catalogue",
4
+ "reservoir-log"
5
+ ],
6
+ "views": [
7
+ "lines",
8
+ "evidence"
9
+ ]
10
+ }