@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
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/installed-package",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/installed-package.md",
7
+ "digest": "sha256:b7fd04fc1318f405fce1c785047cf59a2185216452f83ea86774d7416b7b92b4"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/installed-package/yes.json",
12
+ "digest": "sha256:2563ba668607ea7166dcdcd7c8c5f0f61c981cf4c4bfbb45c701fd7a0ea62459"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/installed-package.vector.json",
17
+ "digest": "sha256:1c971130a6c718dbdbb023caada2623123ebcef7d364f18df3b36ed62bb6edad"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/installed-package/no.json",
22
+ "digest": "sha256:de51ebb969b78bc278daf27443cf699a377e18a391bab248ce92f022f30a5606"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,15 @@
1
+ # Materialized leaf receipt sequence
2
+
3
+ A consumer may admit a version or prose change, request only `fold --as receipts`, then request `fold --check`. Receipt-only rendering must not certify a previously rendered README or manifest against the newly admitted source. The existing native receipt renderer checks each required ordinary view against its current semantic render before issuing region counts and byte seals. A valid byte digest alone does not establish semantic freshness.
4
+
5
+ The focal vector `test/materialized-leaf-sequence.test.ts` runs that exact sequence in two unrelated disposable places. It installs an actual content-addressed capsule that renders Markdown and a JSON manifest from admitted version and prose claims. Bootstrap and edits use the existing real file signing port with disposable fixture authority. No normal fold, fresh leaf renderer invocation, output copy or byte reseal is inserted between the admitted edit and the receipt-only/check sequence.
6
+
7
+ The stale outputs remain unchanged during the receipt-only request, and the immediately following check refuses closure. A normal subsequent fold renders the updated leaves and recovers closure. An altered or absent README or manifest also cannot pass closure after a receipt-only request.
8
+
9
+ The delivery scope is explicit. The default receipt guard requires all ordinary outputs declared for the source. A delivery explicitly selecting only README may omit an unrelated source-only manifest; absence never chooses that subset implicitly. Removing a selected README refuses the selected seal as well. The focal vector checks this binding once per place and leaves the broader delivery mutation matrix to the existing `pass-receipt-order` vector.
10
+
11
+ This is a consumer conformance vector for the existing materialized-output guard. It adds no evaluator, rendering implementation, admission authority or runtime exemption. Passing the vector establishes the tested native behavior, not owner authorization, publication or final release closure.
12
+
13
+ ## Declared native case inputs and outputs
14
+
15
+ The published yes/no JSON files are actual parameters read by `test/materialized-leaf-sequence.test.ts`. Each native procedure retains its semantic assertions and unrelated disposable places. The vector invokes that procedure through the existing Node test reader. The input JSON declares exact case source strings and negative argument values; generated source, output and receipt bytes are read and checked by that same procedure. These public parameter fixtures contain no retained private authority history. Passing test output is not a real Root receipt or permission to admit a lot.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/materialized-leaf-sequence",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/materialized-leaf-sequence.md",
7
+ "digest": "sha256:02cc03bb02c3f8d4f9ffabc1d18109fb1f05a65fecc613f75211a5a396f1d1fa"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/materialized-leaf-sequence/yes.json",
12
+ "digest": "sha256:7180af00a4df73b33edfe9a84a840916859dbf19226afbe156563ed16641f6e2"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/materialized-leaf-sequence.vector.json",
17
+ "digest": "sha256:64f8e08343b68d926d340058d41350a4d39396e5fb30ea1742655fa1911ca5c2"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/materialized-leaf-sequence/no.json",
22
+ "digest": "sha256:3a487c275e646287ccab47a217ada65db7abc05c2e0b97af5d6d8ee87a70859f"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,15 @@
1
+ # Verified module inventory
2
+
3
+ `moduleInventory` from `@lapxo/bound/closure/native` projects the already verified executable delivery through the existing closure verifier. Its unit is a module, not a symbol. It neither compiles nor executes the offered code and introduces no second traversal or dependency parser.
4
+
5
+ The receiver supplies exact delivery bytes, their expected SHA-256 digest, the existing finite member/source/response-byte limits, declaration context (`scope`, `by`, `at`) and exactly one source/version declaration for each reached snapshot. Source and version are receiver declarations; the snapshot identifies bytes and does not authenticate a publisher's version claim.
6
+
7
+ Each reached module becomes an existing canonical wire line. Its digest is `value`; `about` contains the `module-inventory-record/1` profile: `unit`, `source`, `version`, `snapshot`, `module`, `digest`, and `reachedFrom`. `reachedFrom` identifies the verified closure which reached the module, not an immediate importing module. The output also names the exact delivery and closure identities. No new wire fields or fixed application regions are introduced.
8
+
9
+ An unreachable module does not enter the executable closure. A different source-envelope identity may change provenance and the inventory receipt even if the executable sources remain equal. Missing or altered module digests and changed carrier bytes refuse through the existing delivery verifier; they are integrity failures, not forks. Incomplete or duplicate source declarations refuse without a partial inventory.
10
+
11
+ ## Native quartet
12
+
13
+ Two unrelated carriers, field notes and water levels, contain two reached modules and one excluded module. The native publication process vector imports the compiled public API, compares the exact canonical inventory with its captured `.bound` sample, verifies repetition and rejects changed carrier bytes, missing module digests and absent source declarations. Declared case inputs commit the positive carrier, expected inventory and negative carrier. The two cases run under the existing publication instrument and its unchanged budgets.
14
+
15
+ The contract is rendered by the existing selected text renderer from a prospective public text declaration. Owner admission, final Root receipts, the release archive and another-machine portability remain separate obligations.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/module-inventory",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/module-inventory.md",
7
+ "digest": "sha256:78a59399c1cc34dde341a163db30341695c1a8a731a051ae8c9086549cf60c6c"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/module-inventory/yes.json",
12
+ "digest": "sha256:fd65eb40a9478266afc4503dabb3cf9162791c6eb7576e4579ed86f29b41f41a"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/module-inventory.vector.json",
17
+ "digest": "sha256:b030fd7821ef69a3aa0cd36f15497074bbb55b6a614e27d5995ff20bb44922fe"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/no/module-inventory/no.json",
22
+ "digest": "sha256:530195b262a957949ed0b6448fbd962f03456eaa6851f130c15b657560060303"
23
+ }
24
+ ]
25
+ }
@@ -18,4 +18,32 @@ The host selects context explicitly on every call. Calls do not interpret consum
18
18
 
19
19
  The two positive places are a seed accession library and a coastal tide survey. Each installs the public host boundary, bootstraps disposable fixture authority through the real CLI, admits a domain-specific Root lot, compares native result recovery and repeats the held lot without signing again. Negatives alter bytes, remove signer coverage, cancel before commit and offer a noncanonical lot; no negative may create a visible act. Test keys are created only for the disposable fixture, never shipped.
20
20
 
21
- The executable vector captures the instrument output. The quartet proves this declared public boundary; it does not certify all remaining host views, another machine, a release policy or an owner admission. Head, browser hosts, algebra, wire and ceilings are outside this change.
21
+ The executable vector captures the instrument output. The quartet proves this declared public boundary; it does not certify all remaining host views, another machine, a release policy or an owner admission. Algebra, wire and ceilings retain their existing contracts.
22
+
23
+ ## Consumer-owned persistent native host
24
+
25
+ `await startNativeHost({place, instrument, expectedInstrument, limits, environment, signers?, scratchParent?})` starts one native dispatcher for one explicit place. `request({verb, args, signer?, inputs?}, signal?)` accepts `fold`, `sign` and `land`. It calls the same dispatcher, signer protocol, admission judges, exclusion and atomic publication as the CLI. A carrier never supplies a verifier, trust anchor or capability registry. `close()` aborts the active request and waits for cleanup. IPC disconnect also closes the host when the consumer dies; no daemon is installed.
26
+
27
+ The queue is finite. `requestBytes` bounds the aggregate queued request data, `queuedRequests` bounds request count, `responseBytes` bounds each response and `timeoutMs` bounds startup and triggers request cancellation. `heapMiB` selects Node's old-generation heap limit; it is not a claim about total operating-system RSS. Native file, capture and execution bounds remain those already declared by the place. The host refuses another instance for the same canonical place in one consumer; every act retains the existing cross-process CLI exclusion protocol. Calls never change the consumer's environment, cwd, arguments, console or exit status.
28
+
29
+ `nativeHostEnvironment` removes all `NODE_` and `UV_` controls from the explicitly supplied environment. The fixed memory flag and actual sanitized environment belong to reading identity. CLI comparisons use that same boundary, rather than pretending that different execution environments have one identity. The host starts once; a query does not start another dispatcher.
30
+
31
+ An injected signer is selected by receiver key and declared mechanism name. Its callback remains in the consumer, receives only the canonical signing lot and cancellation signal, and uses the existing bounded signing port and signature verification. Signing never grants admission. Lost application responses are recovered by the original committed act identity; redelivery does not create another act.
32
+
33
+ `inputs` contains uniquely named UTF-8 request files. Arguments name these files as `@input/<name>`. They are staged only in an owned request directory and removed after success, refusal or cancellation. Caller-owned places and arbitrary caller files are never deleted as scratch. Shutdown removes the owned host scratch directory. Before visibility, cancellation publishes no partial act; after visibility, the committed native identity remains historical evidence and is never represented as a rollback.
34
+
35
+ The response retains raw stdout, stderr and exit status. Identity/text, signatures, refusal catalog records and recovered canonical act records are compared byte for byte with CLI vectors. Independently measured elapsed-time diagnostics are retained as operational evidence, not normalized or presented as byte-identical measurements. Fresh verification is proportional to consumed bytes. The separate consumer acceptance measurement reports 1x, 10x and 100x, ten samples plus one warm-up, real clock/load, elapsed milliseconds per decimal MB and persistent growth; no constant-time property is claimed.
36
+
37
+ Every persistent request rereads current file and ledger bytes, including externally edited bytes with unchanged size and timestamps. The receiver-selected public instrument lock is checked again before dispatch; retained parsing never grants authority to a later request.
38
+
39
+ ## Installed pin, signer registry and foundation
40
+
41
+ `installedHostInstrument(request, entry)` reuses `installedPackageIdentity` and returns the instrument with its installed-byte digest. Startup requires `expectedInstrument`, selected by the receiver from its admitted package pin. It verifies those bytes before and after child startup. Neither the archive digest nor a physical pathname substitutes for the installed identity; identical installations have the same digest.
42
+
43
+ `signers` is a receiver-owned map indexed by key ID, with no fixed key count. Every signing request explicitly names its `signer`. The selected binding must match the lot key: a mismatch refuses with `host/signer-mismatch`, while a missing binding refuses with `host/unbound-signer`. Neither acquires another key or admits any record. The former single-binding option only registers that binding; it never selects a signer implicitly and does not limit the registry.
44
+
45
+ Cross-process land semantics are `serialize`: admitted-place requests acquire the existing native tree exclusion before preparing a lot. Two consumer processes commit in that order with consecutive epochs. There is no automatic rebase or retry, and the CLI uses the same native exclusion protocol.
46
+
47
+ A birth directory containing only its public birth lock may be founded through `land`, using the classic bootstrap implementation and injected signer. Other operations refuse with `host/foundation-required` until foundation. An existing empty or unauthenticated store refuses with `host/foundation-state`; it is never overwritten or founded again. The executable vectors use two unrelated disposable places and compare signatures, founder ledgers and subsequent native closure with the CLI.
48
+
49
+ Act-cost accounting starts separately for each request and includes all work in that request. Client idle time and earlier requests do not accumulate into a later act; no declared execution or observation is omitted from its own accounting.
@@ -4,22 +4,22 @@
4
4
  {
5
5
  "role": "contract",
6
6
  "path": "docs/contracts/native-host.md",
7
- "digest": "sha256:e7821cd2641caa4725aa20095027d903693756a8568a2163a79d7bb665b7643b"
7
+ "digest": "sha256:bb2aa48641c28e95d8dab39690ee6228ae6a2078e38e3a55add6a92a99958109"
8
8
  },
9
9
  {
10
10
  "role": "yes",
11
11
  "path": "samples/native-host/yes.json",
12
- "digest": "sha256:6c02edaea00db315e20b15f96b281cf605db2c7499f3d1b9839096a704492c44"
12
+ "digest": "sha256:f8838fc73551746b71e3afa8fe3d25fb2a33ac20d163fd2b5024552209ec47eb"
13
13
  },
14
14
  {
15
15
  "role": "vector",
16
16
  "path": "vectors/native/native-host.vector.json",
17
- "digest": "sha256:b62d77a3de11d960657fa9e7b58d4e88c68d0c389d683937bba4fa6c04a9d952"
17
+ "digest": "sha256:13d0d8a9f1cda39e861a36d835f5af683579c9d3a0b60eefe7fee71e3094ddc4"
18
18
  },
19
19
  {
20
20
  "role": "no",
21
21
  "path": "samples/native-host/no.json",
22
- "digest": "sha256:27f323ca2a0d1547197e6beab3427bdcda45c0318fac52bc58b2b0164a2df38d"
22
+ "digest": "sha256:80c8d868158514e3e44273570dccb553c28daf591061f343c3c0b7e32352d49b"
23
23
  }
24
24
  ]
25
25
  }
@@ -0,0 +1,13 @@
1
+ # Native probes
2
+
3
+ `prepareNativeProbe` reads an explicit local `lines` or `evidence` form. Its result names the same identity and returns the same captured text as `prepareNativeViewIdentity`; it never falls back to folding an unsupported form. Expected identities use the existing native view identity contract. Foreign evidence without a transport snapshot refuses.
4
+
5
+ The consumer supplies a port coordinate, finite `probes` and `responseBytes` limits, an optional cancellation signal, and a counter `{used: new Map()}`. The consumer owns that counter and keeps it for the entire operation, sharing it across calls on the same port. Different ports have independent counts. Bound persists no counter, receipt, cache, memo or other probe state. Resetting a counter begins a new consumer operation; the counter is operational accounting, not a grant of authority.
6
+
7
+ Each attempted captured reading consumes one probe even if identity validation or response size later refuses. Invalid forms, invalid limits, exhausted counters and already cancelled calls consume none. The place's admitted `reading-identity/probes` limit further reduces each port's available probes; the existing admitted byte and file budgets constrain the capture. The response byte limit covers the complete JSON fact. Cancellation is checked before capture and before returning its result. Capture is synchronous; cancellation from another event-loop task cannot preempt a synchronous capture.
8
+
9
+ Repeated probes with unchanged committed inputs preserve the native view identity and every persisted byte. A consumer can verify this without deriving another identity: compare the supplied public native identity before and after its operation, and compare persisted byte inventories. Newly admitted evidence remains subject to the existing identity contract.
10
+
11
+ ## Declared native case inputs and outputs
12
+
13
+ The published yes/no JSON files are actual parameters read by `test/native-probes.test.ts`. Each native procedure retains its semantic assertions and unrelated disposable places. The vector invokes that procedure through the existing Node test reader. The input JSON declares exact case source strings and negative argument values; generated source, output and receipt bytes are read and checked by that same procedure. These public parameter fixtures contain no retained private authority history. Passing test output is not a real Root receipt or permission to admit a lot.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/native-probes",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/native-probes.md",
7
+ "digest": "sha256:c2d62182203539ed42a5833fe6d528309f43207286600559a387eaec6cccf545"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/native-probes/yes.json",
12
+ "digest": "sha256:4d32c55b4d14a85b6231eb017fac96f95453db5b35bb1eaa4cb8213aa9744a09"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/native-probes.vector.json",
17
+ "digest": "sha256:14788a562ba51c8bfb3bfd3d2b9abfca67f4236f748ff724ad528917b77574ef"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/native-probes/no.json",
22
+ "digest": "sha256:72ff9a3c323836e1fcb814afebe7dbb5d196db505138b2a80a0e9e34a8c3128f"
23
+ }
24
+ ]
25
+ }
@@ -10,6 +10,15 @@
10
10
  "contract/published/refusals",
11
11
  "contract/published/host-ports",
12
12
  "contract/published/readme",
13
- "contract/published/native-host"
13
+ "contract/published/native-host",
14
+ "contract/published/reading-identity",
15
+ "contract/published/module-inventory",
16
+ "contract/published/native-view-batch",
17
+ "contract/published/native-probes",
18
+ "contract/published/physical-lines",
19
+ "contract/published/profile-composition",
20
+ "contract/published/installed-package",
21
+ "contract/published/materialized-leaf-sequence",
22
+ "contract/published/authority-preflight"
14
23
  ]
15
24
  }
@@ -0,0 +1,17 @@
1
+ # Native view identities in one observation
2
+
3
+ `prepareNativeViewIdentities` from `@lapxo/bound/host` accepts an explicit place, receiver-selected native instrument, distinct supported view names and optional expected identities. It returns each view's identity and text together. The CLI exposes the same operation as `bound fold --as reading-identities@lines+evidence`.
4
+
5
+ The native projections currently supported are `lines` and `evidence`. An empty, repeated or unsupported selection refuses by name. This is a finite implementation capability, not a list of possible application regions. Executable and foreign-transport views retain their separate contracts.
6
+
7
+ Each identity names that view's consumed inputs, current committed inventory, selected implementation, instrument configuration, environment and day boundary. The existing `native-view-inputs@1` framing is retained. Request order and the presence of another selected view do not alter a view's identity. A different execution environment can produce a different identity even when the text is identical.
8
+
9
+ Within one synchronous call, native preparations share captured source bytes and independently retain each view's input membership and admitted byte/file budgets. Every source is freshly verified before return. The admitted reading count bounds the selection. A batch does not persist a cache, execute an observed reader, call the general fold or acquire Root exclusion. Later calls capture their sources again.
10
+
11
+ An unsupported selection, exceeded budget, changed input, changed committed inventory or mismatched expected identity returns one typed refusal and no partial view results. Identity and text belong to the same successful observation. Existing single-view host and CLI routes remain available.
12
+
13
+ The native vector checks two unrelated admitted places, both public projections, request reordering, stable repetition, expected-identity refusal, source invalidation, writer exclusion and a complete persisted-byte inventory. A changed source during shared capture refuses before return. Performance is measured separately; this contract promises no constant-time query or unmeasured speed ratio.
14
+
15
+ ## Declared native case inputs and outputs
16
+
17
+ The published yes/no JSON files are actual parameters read by `test/native-view-batch.test.ts`. Each native procedure retains its semantic assertions and unrelated disposable places. The vector invokes that procedure through the existing Node test reader. The input JSON declares exact case source strings and negative argument values; generated source, output and receipt bytes are read and checked by that same procedure. These public parameter fixtures contain no retained private authority history. Passing test output is not a real Root receipt or permission to admit a lot.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/native-view-batch",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/native-view-batch.md",
7
+ "digest": "sha256:8ca692baadda00de217f8b8b0fc4f20d60fdc478ec6d330fdd8e22ca94e1b78d"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/native-view-batch/yes.json",
12
+ "digest": "sha256:608d00c4a39b987b435560dddf6aa8e72f69aedbd8541c6798913504b4be01d1"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/native-view-batch.vector.json",
17
+ "digest": "sha256:bd5c598929ec1ed65d273f9ea1d271e79401fa7aea8467e48a7fc72de0bde381"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/native-view-batch/no.json",
22
+ "digest": "sha256:6228f650501222593f46a9015a6e73908b3d302b8671348b54bd9c80f66c8bdc"
23
+ }
24
+ ]
25
+ }
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "role": "contract",
6
6
  "path": "docs/contracts/engine.md",
7
- "digest": "sha256:2d54ddc75386a0706a3bc500e36deedc85ca9e7dc965eff5c795f02b1a716078"
7
+ "digest": "sha256:7097713afcfb5859850d96b66aced8ea6ea09f738b34f79a87bb77938fa1c6e6"
8
8
  },
9
9
  {
10
10
  "role": "yes",
@@ -0,0 +1,19 @@
1
+ # Physical lines and reading witnesses
2
+
3
+ The host adapter `readPlacePhysicalLines` reads every regular file inside explicitly named inventory boundaries. It has no implicit exclusions. Files outside every selected region are returned by name in `stray`. Missing selectors remain unmeasured by scope and selector, including a missing selector beside another selector that matched. Links, special files, incomplete inventories and exhausted resources cannot produce a complete reading.
4
+
5
+ Counts, selectors and finite region valuation delegate to Topos `readPhysicalLines`. Empty files contain zero physical lines. Blank and comment lines count; LF and CRLF delimit lines; an unterminated final line counts. Isolated carriage returns and invalid UTF-8 refuse. Overlapping regions retain Topos overlap evidence and are never certified disjoint by this adapter.
6
+
7
+ `physicalLinesRegions` projects selectors from the consuming place's already admitted standing. A `core/lines` interval reads the `region/core` coordinates declaration. Other region names follow the same rule. No application or directory family is built into the adapter. The caller must choose and authorize the finite inventory boundaries and resource policy.
8
+
9
+ `judgePhysicalLines` delegates interval thresholds to the existing Bound `foldCeilings` and policy widening to `widenedWithoutWitness`. It accepts `lines` and `file-lines`; file observations retain their actual coordinate. Over-ceiling observations or unauthenticated widening produce `BLOCK`. Missing selection or stray files produce `UNMEASURED`. No declared line ceiling produces `UNMEASURED`.
10
+
11
+ Reading witness syntax is Topos `topos-reading-witness/1`. Every reading, model, input, selection, unit, scale, resolution, reader, implementation, context, run and result field must match this actual reading. Actual reading handles are immutable and local to the host process; parsing a serialized reading cannot recreate a trusted handle.
12
+
13
+ The consuming host supplies `PhysicalLinesWitnessAuthority` from its admitted current producer policy and evidence verifier. Key evidence must match the declared key and coverage. CI evidence must match repository, commit, workflow, run and attempt before proof verification is invoked. The proof port must authenticate evidence over the exact Topos statement bytes. Neither a URL nor valid syntax establishes authority. The adapter supplies no default trust rule, key store, network provenance lookup, admission, persistence, signing or publication.
14
+
15
+ After successful proof verification, `authenticatePhysicalLinesWitness` returns the exact `attest:sha256:...` coordinate that a proposed widening must name. A coordinate with the right prefix, without verified matching evidence, remains blocked. Integrating the adapter into an owner-authorized landing transaction remains the consuming host's responsibility; `READY` is a native judgment, not a persisted landing or admission.
16
+
17
+ ## Declared native case inputs and outputs
18
+
19
+ The published yes/no JSON files are actual parameters read by `test/physical-lines-place.test.ts`. Each native procedure retains its semantic assertions and unrelated disposable places. The vector invokes that procedure through the existing Node test reader. The input JSON declares exact case source strings and negative argument values; generated source, output and receipt bytes are read and checked by that same procedure. These public parameter fixtures contain no retained private authority history. Passing test output is not a real Root receipt or permission to admit a lot.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/physical-lines",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/physical-lines.md",
7
+ "digest": "sha256:d0b780a4573cee69ec6f68305c2b196340aa73dbc48114af003816333fdffb1a"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/physical-lines/yes.json",
12
+ "digest": "sha256:3d54c37d2010cc3baf7f6eef0781b6b22eb004ecdccf9f91a59b354038151dd1"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/physical-lines.vector.json",
17
+ "digest": "sha256:2626860abd968214a57f1ec54162c74890ea76476156984f8a5c7d6da90a8ffb"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/physical-lines/no.json",
22
+ "digest": "sha256:faab4bdc0339583cab3b62e5ddb1d5a4c0b115df4bbd4455edb09cf878cd742b"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,17 @@
1
+ # Profile composition and release categories
2
+
3
+ `composeProfile` prepares an authenticated lot without admission or persistence. It reads Topos `topos-profile-composition/1` records, resolves every parent from its exact SHA-256 digest and delegates form composition to Topos. The digest preimage is the canonical profile line followed by one newline.
4
+
5
+ A parent record supplies declarations, never authority. Each inherited and local field requires exactly one original signed statement whose scope, role, form, measure and value match its selected binding and whose `restsOn` names the exact profile digest containing it. The current consumer lock supplies admitted signers, signature algorithms, windows and region coverage through Bound's existing authority evaluator. No parent can grant a signer coverage.
6
+
7
+ Narrowing and additions require those signatures. Interval and alphabet widening use Bound's existing widening judge: the authorized statement must carry the witness-class `at` selected by the consumer's wire. A parsed Topos reading-witness record alone does not satisfy this rule. This is the existing admission witness convention, not independent verification of scientific provenance. Preparation does not pay inertness, observations, admission gates or owner receipts; ordinary admission remains required.
8
+
9
+ `releaseCategoryPins` selects exact artifact lines by declared category, class, scope, role and digest measure. It accepts only alphabet digest bindings. It never selects a numeric code ceiling, and has no package-family prefix list. `composeProfile` selects category lines from the same authenticated statement set. Callers of the standalone selector must supply already authenticated standing. Dependency, vocabulary and source archive categories can each declare their own exact scopes.
10
+
11
+ Missing and ambiguous categories refuse as `release/category-missing` and `release/category-ambiguous`; absent, ambiguous and mismatched artifact bindings refuse as `release/pin-missing`, `release/pin-ambiguous` and `release/pin-integrity`. A class mismatch refuses as `release/category-class`. Profile authority, widening and unresolved parents refuse as `profile/authority-required`, `profile/widening-witness-required` and `profile/missing-parent`. Topos record/integrity refusals preserve their existing named causes.
12
+
13
+ The returned lines retain inherited evidence and local statements; they are a preparation result, not a claim that an authorized widening erased an ancestor's meet constraint. Topos' declared composition remains authoritative for the effective intersection. Applications that intend a revision must use the ordinary admission flow to revise standing explicitly.
14
+
15
+ ## Declared native case inputs and outputs
16
+
17
+ The published yes/no JSON files are actual parameters read by `test/profile-composition.test.ts`. Each native procedure retains its semantic assertions and unrelated disposable places. The vector invokes that procedure through the existing Node test reader. The input JSON declares exact case source strings and negative argument values; generated source, output and receipt bytes are read and checked by that same procedure. These public parameter fixtures contain no retained private authority history. Passing test output is not a real Root receipt or permission to admit a lot.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/profile-composition",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/profile-composition.md",
7
+ "digest": "sha256:19b8a7d8b08590e39d23aa3775116e96c787d9bc22d9cd53b911b8f5a3c49314"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/profile-composition/yes.json",
12
+ "digest": "sha256:48a5524520182e7e64fb0aa3b27e7931f4a2a3dbe096589dbaa3caaa0dde556a"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/profile-composition.vector.json",
17
+ "digest": "sha256:ce43584069b3957fd6c2967975367cf398aa77e54b137c7ccb312fa5a5625252"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/profile-composition/no.json",
22
+ "digest": "sha256:13b00555d7e00a1c2d05cae2aaa42e7c4301ca74cf60f9ca3428f623a1358948"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,9 @@
1
+ # Profile preparation and native meaning
2
+
3
+ A `prepared` profile is not a native act receipt. Its inherited and local statements remain evidence for composition. For a field declared with mode `meet`, the effective value is the selected Topos lattice meet of every inherited and local constraint.
4
+
5
+ The installed native consumer vector checks this distinction for interval and alphabet fields in two unrelated places. Narrowing prepares and lands through the actual CLI. Witnessed widening also prepares and lands its authenticated statements, while the actual effective native standing remains the ancestor/local meet. In particular, a witnessed local interval `0..9` over an inherited `0..5` still composes to `0..5`; the witness does not erase the ancestor. Additions have no ancestor and receive their own actual act receipt.
6
+
7
+ The vector compares both prepared composition and effective admitted standing with `composePolicy` and the selected lattice's `meet` and `leq` operations. It defines no alternative interval or alphabet arithmetic. Claims that a raw prepared lot necessarily forks were removed after the actual native implementation demonstrated compatible distributive composition. That test correction changes no runtime semantics.
8
+
9
+ An application intending to revise an ancestor must explicitly withdraw or revise the prior native inscription under the existing admission rules. Returning `prepared`, accepting a witness-shaped context, and actually persisting an authorized revision are separate events and must be reported separately.
@@ -15,3 +15,15 @@ Each declared reading and each host invocation is measured separately. The total
15
15
  Full-resolution native reading receipts carry the verified canonical UTF-8 input closure in the bytes row and the verified output in the count row, through the wire’s existing about field. Count, digest and measured duration keep their existing meanings. The host verifies the supplied bytes against those digests before reuse; an altered supplied carrier is not replaced by a cached copy. Historical local-only receipts still require their authentic CAS bytes. No private ledger or store is needed to verify a complete public receipt.
16
16
 
17
17
  File-region seals hash configuration through Topos’s existing publication projection. Admission envelopes and retired history stay in the authority ledger; live declarations and ordinary file bytes remain inputs. Object history uses its own contract. A public checkout must carry receipts made for its actual files and compiled reader, not seals copied from a different tree. Verification does not run readers, fetch dependencies, refresh receipts or grant authority.
18
+
19
+ ## Current rendered leaves
20
+
21
+ A native file receipt cannot certify an obsolete declared rendered output after its admitted source changes. Receipt projection uses the existing declared view renderer to compare each applicable non-receipt output with its current expected bytes. Until they agree, resolution 1 withholds both file-region counts and byte seals; the byte-only sealer cannot turn that incomplete semantic projection into a closed receipt. Receipt views do not recursively certify themselves.
22
+
23
+ The normal render pass writes ordinary outputs before asking that same receipt renderer to seal them, including outputs prepared by workers. A receipt-only command may leave the region open; `fold --check` must refuse an obsolete output without repairing it. The next ordinary fold renders and closes it. This rule is shared by the native renderer and CLI, does not impose an external render-first workaround and does not authorize any write or admission. Two unrelated executable places cover admitted declaration changes, unchanged reuse, a clean public checkout and changed-input refusal.
24
+
25
+ ## Materialized delivery boundary
26
+
27
+ A declared view is also a capability: its shape need not be materialized in every distribution. An ordinary place checks every applicable non-receipt rendered output. During a delivery projection only, the trusted formation recipe passes the manifest-selected coordinates captured before copying an already closed source to the existing native receipt renderer. The kernel does not parse the package manifest, infer selection from missing files or name application-specific regions. A carrier cannot choose this projection scope or change authority.
28
+
29
+ The guard checks each selected output against the same view renderer. Missing or altered selected bytes withhold both region counts and byte seals. An omitted source-only output is not certified as present. With no explicit delivery scope, the original full-place rule applies. The source must close before forming a distribution, and the resulting public tree must pass native `fold --check` before packing.
@@ -0,0 +1,61 @@
1
+ # Public reading identity
2
+
3
+ `prepareNativeReadingIdentity` from `@lapxo/bound/host` prepares the adopted input-projection readings of an authenticated place. `fold --as reading-identity` calls that same operation. This contract covers adopted input-projection readings; other reading forms refuse.
4
+
5
+ The receiver supplies the place, explicit native instrument, optional adopted reader selector, finite resource limits and cancellation signal. The place must declare one interval `0..N` for each of `reading-identity/bytes`, `/files`, `/readings` and `/probes`. Caller limits can reduce these bounds. They count handed UTF-8 input bytes, handed files, projected reading plans and input-projection requests across the selected readers; native image, response and execution limits also remain in force. The projection request is a probe, even when its implementation reuses a valid result. It is separate from final reading execution.
6
+
7
+ A fact contains preparations with ready reading identities or named unpaid receipt dependencies. Each ready entry gives its scope, canonical `reading-context@1` and digest. When a verified existing carrier is available it also gives the `reading-receipt@1` digest. A missing physical input produces `needs`; a dependent reading without its predecessor's verified receipt stays open. No complete digest is invented for an unpaid dependency. These names are supplied by the selected world's projection; application region names are not built into Bound.
8
+
9
+ Preparation uses the same projection, dependency order, contextual framing, transitive instrument inputs, policy, effective environment and carrier verification as execution. It can run the declared input projection under its native port. It never runs the final reading, signs, admits an act, renders public receipts or renews a reading receipt. Operational image/cache maintenance is separate. A subsequent execution under identical inputs and context commits the same identity; preparation does not reserve that identity or authorize a future answer.
10
+
11
+ Instrument, implementation, policy, transitive inputs and the actual environment participate under the existing Topos contracts. Current-answer authorization also retains the existing principal, grant, snapshot and freshness checks when that profile is selected. Retained evidence grants no current authority. Environment values are committed by digest, not exposed as secret strings. Receipt identity and typed-content identity remain distinct.
12
+
13
+ Relevant input or dependency changes produce another identity. Unconsumed maintenance does not. Bytes stored under a digest must verify; altered selected bytes or carriers refuse rather than becoming an alternative identity. The existing execution path may recompute an invalid retained answer; public inspection refuses a corrupt carrier. Missing bytes and failed integrity are different outcomes.
14
+
15
+ Refusals are typed data from the public API: `reading-identity/context`, `/budget`, `/selection`, `/projection`, `/integrity`, `/failed`, and the existing `host/context`, `/budget`, `/cancelled`. A non-projection reader is unsupported, not silently executed. Cancellation and handed-input budgets are checked before the projection; native process budgets remain authoritative during execution. Synchronous projection cannot observe a JavaScript abort callback while it occupies the host thread; its declared native timeout still bounds that work.
16
+
17
+ ## Quartet
18
+
19
+ The native test forms two unrelated disposable admitted places, counts and catalogue. Counts reads a physical file. Catalogue adds a dependent aggregate. Both use receiver-selected native images and the real CLI; a separate consumer imports the compiled public `/host` export. Preparation leaves final reading receipts absent; execution commits the same identity; subsequent preparation verifies existing receipts without changing the public receipt file. Catalogue's aggregate is open until the leaf receipt exists.
20
+
21
+ The negative places retain a receipt but withdraw the current native grant, and alter the archive bytes under their selected digest. Both refuse. Focused vectors also cover missing physical input, changed dependency, stale handed bytes, cancellation, resource exhaustion and unrelated maintenance. Existing environment, authority and descendant-receipt vectors remain applicable and are reused.
22
+
23
+ Two local places do not establish cross-machine conformance. This quartet neither admits Root reader bindings nor certifies a complete release.
24
+
25
+ ## Native lines and evidence
26
+
27
+ `prepareNativeViewIdentity({place, instrument, view, expectedIdentity?})` from `@lapxo/bound/host` prepares the local native `lines` or `evidence` projection. `fold --as reading-identity@lines` and `fold --as reading-identity@evidence` print its identity without the result text. `fold --as reading-identity@lines@<digest>` (or `reading-identity@evidence@<digest>`) returns JSON with `kind`, `view`, `identity` and `text`. The text and identity use the same captured inputs; an obsolete expected identity returns no result. Ordinary views keep their existing output and require no reading-identity budgets.
28
+
29
+ This operation performs configuration authentication and projection, not the region fold, executable readings or source resolution. It takes no Root exclusion and performs no persistent writes. One synchronous committed-journal observation fixes native acts; selected legacy sources are captured by exact bytes and checked again. Changed committed inputs, selected bytes, effective environment or expiration day refuse rather than publishing a mixed result. No lease reserves a later answer: the caller supplies the expected identity when requesting the result.
30
+
31
+ Identity commits the native view, local place, authenticated configuration, selected authority/evidence histories and source bytes (including selected receipt inputs), exact implementation closure and instrument lock, effective runtime/environment, and UTC expiration-policy day. Input names and values are framed; no consumer directory fingerprint is accepted. Unconsumed fold caches, stamp memos and exclusion bookkeeping do not participate. The local execution identity is distinct from portable semantic standing identity.
32
+
33
+ ### Writes and derived storage
34
+
35
+ The following classification applies to the declared native `lines` and `evidence` views. A path is not an authority boundary: selected bytes still participate wherever they are stored.
36
+
37
+ | Write | Participates in the next identity | Reason |
38
+ | --- | --- | --- |
39
+ | Admitted declarations and authority changes | Yes | Authentication and effective declarations consume them. |
40
+ | Admitted evidence, including consumed receipt or blob bytes | Yes when consumed by the selected view | A new observation changes what that view reads. |
41
+ | Unconsumed maintenance: `.bound/cas/memo/`, `.bound/ledger/fold.bound`, `.bound/locks/` | No | These are derived caches or exclusion bookkeeping, not selected inputs. |
42
+
43
+ The CAS blob directory is not excluded as a whole. A selected blob or receipt must verify against its committed digest; corruption refuses. A probe that adds no evidence preserves identity. Executing a reading that admits evidence may change it. Consumers request the public identity instead of reconstructing it from this table or scanning directories.
44
+
45
+ Identity inspection is not promised constant-time over arbitrary mutable storage. Its measurement separates process startup, authentication, input capture, identity framing and result projection; a reused identity must still verify the inputs committed by its contract.
46
+
47
+ The existing admitted preparation limits remain required for identity requests; inputs and implementation sources count against their byte/file budgets. Preparation does not execute projection probes or final readings. Only unqualified local native lines and a single unshaped native evidence view are supported. Foreign evidence needing an asynchronous transport snapshot and unsupported views refuse by name. No fallback executes their fold.
48
+
49
+ Existing catalog codes apply: `reading-identity/selection` for unsupported selections, `reading-identity/context` for changed or mismatched snapshots, `reading-identity/budget` for missing/exhausted limits, and `reading-identity/failed` for unavailable implementation inputs. Public CLI machine records carry those codes.
50
+
51
+ Seven native vectors cover repeated identity, added evidence, changed configuration, unchanged fold maintenance, distinct places, unsupported selections and identity-to-result binding with a stale refusal. Both unrelated places also answer while a Root writer holds exclusion; complete store comparison verifies no writes. Existing view/landing behavior without identity budgets is retained. These vectors do not establish cross-machine conformance.
52
+
53
+ ## Repeated unchanged queries
54
+
55
+ For the declared local native `lines` and `evidence` projections, repeated queries without changed consumed inputs preserve both identity and exact result text and write no persistent files or bytes. This includes the first query and every CAS/memo and ledger file, without exclusions, garbage collection or a consumer-maintained cache key. This guarantee does not cover final reading execution, other view forms or storage written by an embedding application. The consumer retains its own query counter.
56
+
57
+ The executable protocol queries each view eight times in two unrelated admitted places, compares the complete persisted tree after every query and reports file/byte counts. A deliberately writing stub is rejected by the same tree comparison. The fixtures use disposable authority, and this protocol does not inspect unrelated consumer stores or claim to resolve their storage incidents. No GC, LRU, storage-size policy or constant-time claim is introduced.
58
+
59
+ The quartet also checks that receipt-only projection and the byte-only sealer cannot close an obsolete declared output after an admitted source change. The normal native fold renders current bytes before sealing, as specified in the publication contract. This applies to every declared output shape, without application-specific selectors.
60
+
61
+ The rendered-leaf vector also projects two manifest-selected public subsets. Each keeps the declared view capabilities while omitting one source-only output. The same native renderer accepts those subsets, refuses a missing or altered selected leaf and preserves the default full-place refusal. Selection is captured before copying a closed source; it is never inferred from file absence.
@@ -0,0 +1,25 @@
1
+ {
2
+ "scope": "contract/published/reading-identity",
3
+ "members": [
4
+ {
5
+ "role": "contract",
6
+ "path": "docs/contracts/reading-identity.md",
7
+ "digest": "sha256:7a561c902daacc69beb256ed20b04e2b840b7af47c9e64596e1b8d1ebea06b1c"
8
+ },
9
+ {
10
+ "role": "yes",
11
+ "path": "samples/reading-identity/yes.json",
12
+ "digest": "sha256:660c07bcca7237dcdec5c0db294e8d164c1ff89c0061a3b4c1f0c2d3813b2cc2"
13
+ },
14
+ {
15
+ "role": "vector",
16
+ "path": "vectors/native/reading-identity.vector.json",
17
+ "digest": "sha256:e9a5f2b0318c1495e951edf05c99c7403f438e8b0bce66cc55749237fc2b4865"
18
+ },
19
+ {
20
+ "role": "no",
21
+ "path": "samples/reading-identity/no.json",
22
+ "digest": "sha256:1775647462c2a933173be57269cbf21a8ac33b54e579539536543386a085ecff"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,49 @@
1
+ # Reading witness admission
2
+
3
+ `readingWitnessAdmission(root, proposed, selectedStanding, vocabulary, place)` is an admission hook for explicitly selected reading-witness policy. It returns `allow` with verified evidence identities, `ask` with `reading-witness/<scope>` needs, or `refuse` with the public `reading-witness` code and a diagnostic cause. The shared native admission path consumes this result before its existing widening rule. The hook neither signs nor lands a lot.
4
+
5
+ Selection is opt-in. The current admitted Root vocabulary selects `wire/reading-witness-admission = bound-reading-witness-admission@1`. Policy records have role `writes`, measure `reading-witness`, value `lock`, and canonical JSON in `about`. A policy has these fields:
6
+
7
+ ```json
8
+ {
9
+ "profile": "bound-reading-witness-policy@1",
10
+ "scope": "core/lines",
11
+ "place": ".",
12
+ "unit": "physical-lines/utf8-lf@1",
13
+ "inventory": ["src"],
14
+ "selectors": ["src/*.txt"],
15
+ "producer": "device",
16
+ "port": "port/physical",
17
+ "readerMapping": "reader/capsule/physical/port",
18
+ "byteBudget": "65536",
19
+ "rowBudget": "65536",
20
+ "entryBudget": 32,
21
+ "evidenceBytes": 4194304,
22
+ "receiptRows": 512,
23
+ "authorityBytes": 1048576,
24
+ "authorityLines": 2048
25
+ }
26
+ ```
27
+
28
+ The scope, place, inventory, selectors, producer and port are declarations, not application names compiled into the runtime. `place` is `.` for Root or a relative child place. Shared admission supplies the actual selected place separately, so a Root `core/lines` policy cannot apply to a child merely because its local scope has the same spelling. Other readings and ceilings retain their existing rules. A matching policy never falls back to prefix-only witnessing.
29
+
30
+ A selected widening names `at=witness:sha256:...`. The digest addresses a bounded local CAS blob containing canonical JSON followed by one LF:
31
+
32
+ ```json
33
+ {
34
+ "profile": "bound-reading-witness-proof@1",
35
+ "witness": "topos-reading-witness/1 ...",
36
+ "authorization": "bound-lock/1 ...",
37
+ "receipts": ["bound-lock/1 ..."]
38
+ }
39
+ ```
40
+
41
+ The Topos witness uses `authentication=key-covered`. The authorization is an original signed Bound record at the policy scope, with role `writes`, form `alphabet`, measure `reading-witness`, value equal to the SHA-256 of `readingWitnessStatementBytes(witness)`, and `restsOn` equal to the digest of the canonical policy JSON plus LF. The witness evidence digest names the exact signed authorization line plus LF. Its coverage digest names the current producer's declared coverage array. Existing Bound authority evaluation verifies signature, admitted algorithm, window, scope coverage and current producer eligibility. No caller-supplied success callback establishes this authority.
42
+
43
+ The current native port and signed reader mapping must remain admitted. Their selected archive and native member references must match the retained canonical reading context. Inline native receipt carriers are checked by the existing `verifiedReadingReceipts` path, including canonical `reading-context@1` identity and reading receipt identity. The witness `run` names that exact receipt unit scope. All file inputs must match the explicit inventory by name and digest.
44
+
45
+ The physical reading is then made again from the declared local inventory by the existing Topos physical reader through Bound's adapter. The exact model, parameters, selection, unit, scale, resolution, reader, implementation, context, result and reading identities must agree with the signed witness. The native output must contain the same measured line count at the policy scope. Missing selectors, stray files, links, incomplete inventories, altered inputs, withdrawn ports, old mappings and invalid evidence cannot authorize widening. Proof processing reads only its declared local CAS blob and inventory; it does not resolve arbitrary foreign evidence paths or CI URLs.
46
+
47
+ The native consumer vector first enables the optional selector and policy through an ordinary act on an existing native place. It records an actual over-ceiling physical reading, refuses absent and forged proof, then attempts a real widening transaction with a signed authorization and retained native evidence. The prior inscription is explicitly withdrawn in the same batch, so a successful act must leave exactly the new effective ceiling. This tests admission and its real act receipt, rather than interpreting a local judge result as a landing.
48
+
49
+ The previous native preflight root-lock refusal remains preserved in the evidence packet. Native evidence inspection requires the existing Root authority lease; the shared prospective admission and authority-card paths acquire that real lease. This contract adds no bypass flag and does not weaken current protection.
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "role": "contract",
6
6
  "path": "README.md",
7
- "digest": "sha256:bc8277eaef68f8ab8a049607003502a1979fb58a36f9468d6224ec14df7e131f"
7
+ "digest": "sha256:1ee7dba6bcdb7fad0280271ea8cf3657719b6aa88efcebe585f8ca9c76664a39"
8
8
  },
9
9
  {
10
10
  "role": "yes",