nervur 0.22.0 → 0.22.2-3

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 (398) hide show
  1. package/AUTHORING.md +741 -0
  2. package/KIT-SPEC.md +286 -0
  3. package/LICENSE +1 -1
  4. package/NOTICE +6 -2
  5. package/README.md +97 -424
  6. package/dist/app/app-ground.d.ts +18 -0
  7. package/dist/app/app-ground.js +25 -0
  8. package/dist/app/index.d.ts +2 -0
  9. package/dist/app/index.js +5 -0
  10. package/dist/app/native.d.ts +46 -0
  11. package/dist/app/native.js +101 -0
  12. package/dist/being/being.d.ts +229 -0
  13. package/dist/being/being.js +20 -0
  14. package/dist/being/covers.d.ts +9 -0
  15. package/dist/being/covers.js +21 -0
  16. package/dist/being/index.d.ts +3 -0
  17. package/dist/being/index.js +5 -0
  18. package/dist/being/need.d.ts +49 -0
  19. package/dist/being/need.js +33 -0
  20. package/dist/being/schema.d.ts +100 -0
  21. package/dist/being/schema.js +132 -0
  22. package/dist/being/table.d.ts +42 -0
  23. package/dist/being/table.js +288 -0
  24. package/dist/bench/bench-ground.d.ts +55 -0
  25. package/dist/bench/bench-ground.js +101 -0
  26. package/dist/bench/bench.d.ts +87 -0
  27. package/dist/bench/bench.js +260 -0
  28. package/dist/bench/fake-carry.d.ts +32 -0
  29. package/dist/bench/fake-carry.js +56 -0
  30. package/dist/bench/fake-clock.d.ts +17 -0
  31. package/dist/bench/fake-clock.js +34 -0
  32. package/dist/bench/fake-custody.d.ts +9 -0
  33. package/dist/bench/fake-custody.js +10 -0
  34. package/dist/bench/fake-faculty.d.ts +25 -0
  35. package/dist/bench/fake-faculty.js +48 -0
  36. package/dist/bench/fake-keys.d.ts +5 -0
  37. package/dist/bench/fake-keys.js +9 -0
  38. package/dist/bench/fake-memory.d.ts +14 -0
  39. package/dist/bench/fake-memory.js +46 -0
  40. package/dist/bench/fake-network.d.ts +57 -0
  41. package/dist/bench/fake-network.js +169 -0
  42. package/dist/bench/index.d.ts +11 -0
  43. package/dist/bench/index.js +13 -0
  44. package/dist/bench/seeded.d.ts +11 -0
  45. package/dist/bench/seeded.js +37 -0
  46. package/dist/bench/settle.d.ts +2 -0
  47. package/dist/bench/settle.js +49 -0
  48. package/dist/bench/stewards.d.ts +17 -0
  49. package/dist/bench/stewards.js +20 -0
  50. package/dist/bodies/class-list.d.ts +14 -0
  51. package/dist/bodies/class-list.js +33 -0
  52. package/dist/bodies/joined-carry.d.ts +23 -0
  53. package/dist/bodies/joined-carry.js +42 -0
  54. package/dist/bodies/noble-crypto.d.ts +22 -0
  55. package/dist/bodies/noble-crypto.js +88 -0
  56. package/dist/bodies/seed-keys.d.ts +10 -0
  57. package/dist/bodies/seed-keys.js +42 -0
  58. package/dist/bodies/strict-tools.d.ts +10 -0
  59. package/dist/bodies/strict-tools.js +306 -0
  60. package/dist/bodies/web-carry.d.ts +65 -0
  61. package/dist/bodies/web-carry.js +224 -0
  62. package/dist/bodies/web-clock.d.ts +12 -0
  63. package/dist/bodies/web-clock.js +33 -0
  64. package/dist/browser/browser-ground.d.ts +69 -0
  65. package/dist/browser/browser-ground.js +219 -0
  66. package/dist/browser/index.d.ts +4 -0
  67. package/dist/browser/index.js +7 -0
  68. package/dist/browser/indexeddb-memory.d.ts +17 -0
  69. package/dist/browser/indexeddb-memory.js +97 -0
  70. package/dist/browser/locked-custody.d.ts +25 -0
  71. package/dist/browser/locked-custody.js +89 -0
  72. package/dist/browser/origin-classes.d.ts +7 -0
  73. package/dist/browser/origin-classes.js +31 -0
  74. package/dist/foundation.d.ts +150 -0
  75. package/dist/foundation.js +4 -0
  76. package/dist/ground/ground.d.ts +177 -0
  77. package/dist/ground/ground.js +363 -0
  78. package/dist/house/crossing.d.ts +37 -0
  79. package/dist/house/crossing.js +131 -0
  80. package/dist/house/house.d.ts +80 -0
  81. package/dist/house/house.js +1753 -0
  82. package/dist/house/rows-shape.d.ts +103 -0
  83. package/dist/house/rows-shape.js +12 -0
  84. package/dist/house/rows.d.ts +27 -0
  85. package/dist/house/rows.js +168 -0
  86. package/dist/index.d.ts +29 -1
  87. package/dist/index.js +25 -14
  88. package/dist/node/bridge.d.ts +17 -0
  89. package/dist/node/bridge.js +188 -0
  90. package/dist/node/cli.js +170 -0
  91. package/dist/node/custody.d.ts +20 -0
  92. package/dist/node/custody.js +34 -0
  93. package/dist/node/file-keys.d.ts +7 -0
  94. package/dist/node/file-keys.js +30 -0
  95. package/dist/node/file-memory.d.ts +13 -0
  96. package/dist/node/file-memory.js +91 -0
  97. package/dist/node/folder-classes.d.ts +5 -0
  98. package/dist/node/folder-classes.js +40 -0
  99. package/dist/node/gone.d.ts +2 -0
  100. package/dist/node/gone.js +7 -0
  101. package/dist/node/hand.d.ts +29 -0
  102. package/dist/node/hand.js +85 -0
  103. package/dist/node/held-keys.d.ts +14 -0
  104. package/dist/node/held-keys.js +36 -0
  105. package/dist/node/http.d.ts +11 -0
  106. package/dist/node/http.js +90 -0
  107. package/dist/node/index.d.ts +13 -0
  108. package/dist/node/index.js +15 -0
  109. package/dist/node/keychain-keys.d.ts +10 -0
  110. package/dist/node/keychain-keys.js +51 -0
  111. package/dist/node/ledger-memory.d.ts +17 -0
  112. package/dist/node/ledger-memory.js +151 -0
  113. package/dist/node/lock.d.ts +10 -0
  114. package/dist/node/lock.js +78 -0
  115. package/dist/node/node-ground.d.ts +33 -0
  116. package/dist/node/node-ground.js +147 -0
  117. package/dist/node/notify.d.ts +1 -0
  118. package/dist/node/notify.js +18 -0
  119. package/dist/node/tcp-carry.d.ts +39 -0
  120. package/dist/node/tcp-carry.js +216 -0
  121. package/dist/node/websocket.d.ts +6 -0
  122. package/dist/node/websocket.js +118 -0
  123. package/dist/quo/frame.d.ts +20 -0
  124. package/dist/quo/frame.js +48 -0
  125. package/dist/quo/room.d.ts +154 -0
  126. package/dist/quo/room.js +362 -0
  127. package/dist/serve/index.d.ts +27 -0
  128. package/dist/serve/index.js +55 -0
  129. package/package.json +49 -47
  130. package/dist/browser.d.ts +0 -1
  131. package/dist/browser.js +0 -8
  132. package/dist/cli.js +0 -16
  133. package/dist/core/being/being.d.ts +0 -17
  134. package/dist/core/being/being.js +0 -72
  135. package/dist/core/being/digest.d.ts +0 -3
  136. package/dist/core/being/digest.js +0 -17
  137. package/dist/core/being/faculty.d.ts +0 -10
  138. package/dist/core/being/faculty.js +0 -77
  139. package/dist/core/being/index.d.ts +0 -6
  140. package/dist/core/being/index.js +0 -8
  141. package/dist/core/being/kind.d.ts +0 -6
  142. package/dist/core/being/kind.js +0 -34
  143. package/dist/core/being/types.d.ts +0 -61
  144. package/dist/core/being/types.js +0 -4
  145. package/dist/core/being/words.d.ts +0 -13
  146. package/dist/core/being/words.js +0 -14
  147. package/dist/core/browser/index.d.ts +0 -37
  148. package/dist/core/browser/index.js +0 -196
  149. package/dist/core/browser/worker.d.ts +0 -11
  150. package/dist/core/browser/worker.js +0 -37
  151. package/dist/core/cli/command.d.ts +0 -13
  152. package/dist/core/cli/command.js +0 -330
  153. package/dist/core/cli/edge.d.ts +0 -7
  154. package/dist/core/cli/edge.js +0 -79
  155. package/dist/core/cli/harbor.d.ts +0 -25
  156. package/dist/core/cli/harbor.js +0 -115
  157. package/dist/core/contract/index.d.ts +0 -42
  158. package/dist/core/contract/index.js +0 -34
  159. package/dist/core/contract/link.d.ts +0 -4
  160. package/dist/core/contract/link.js +0 -45
  161. package/dist/core/crypto/aes.d.ts +0 -3
  162. package/dist/core/crypto/aes.js +0 -24
  163. package/dist/core/crypto/bytes.d.ts +0 -6
  164. package/dist/core/crypto/bytes.js +0 -33
  165. package/dist/core/crypto/ed25519.d.ts +0 -3
  166. package/dist/core/crypto/ed25519.js +0 -93
  167. package/dist/core/crypto/hash.d.ts +0 -2
  168. package/dist/core/crypto/hash.js +0 -11
  169. package/dist/core/crypto/index.d.ts +0 -7
  170. package/dist/core/crypto/index.js +0 -10
  171. package/dist/core/crypto/json.d.ts +0 -8
  172. package/dist/core/crypto/json.js +0 -250
  173. package/dist/core/crypto/mlkem.d.ts +0 -12
  174. package/dist/core/crypto/mlkem.js +0 -36
  175. package/dist/core/crypto/subtle.d.ts +0 -3
  176. package/dist/core/crypto/subtle.js +0 -11
  177. package/dist/core/crypto/x25519.d.ts +0 -2
  178. package/dist/core/crypto/x25519.js +0 -24
  179. package/dist/core/edge/index.d.ts +0 -164
  180. package/dist/core/edge/index.js +0 -739
  181. package/dist/core/edge/kit.d.ts +0 -2
  182. package/dist/core/edge/kit.js +0 -2
  183. package/dist/core/folder/index.d.ts +0 -18
  184. package/dist/core/folder/index.js +0 -130
  185. package/dist/core/git/http.d.ts +0 -6
  186. package/dist/core/git/http.js +0 -102
  187. package/dist/core/git/index.d.ts +0 -5
  188. package/dist/core/git/index.js +0 -10
  189. package/dist/core/git/object.d.ts +0 -40
  190. package/dist/core/git/object.js +0 -103
  191. package/dist/core/git/pack.d.ts +0 -9
  192. package/dist/core/git/pack.js +0 -171
  193. package/dist/core/git/store.d.ts +0 -23
  194. package/dist/core/git/store.js +0 -120
  195. package/dist/core/git/zlib.d.ts +0 -6
  196. package/dist/core/git/zlib.js +0 -210
  197. package/dist/core/harbor/carrying.d.ts +0 -51
  198. package/dist/core/harbor/carrying.js +0 -69
  199. package/dist/core/harbor/catalogue.d.ts +0 -33
  200. package/dist/core/harbor/catalogue.js +0 -365
  201. package/dist/core/harbor/dna.d.ts +0 -13
  202. package/dist/core/harbor/dna.js +0 -120
  203. package/dist/core/harbor/dock.d.ts +0 -62
  204. package/dist/core/harbor/dock.js +0 -381
  205. package/dist/core/harbor/harbor.d.ts +0 -16
  206. package/dist/core/harbor/harbor.js +0 -438
  207. package/dist/core/harbor/index.d.ts +0 -11
  208. package/dist/core/harbor/index.js +0 -14
  209. package/dist/core/harbor/memory.d.ts +0 -10
  210. package/dist/core/harbor/memory.js +0 -25
  211. package/dist/core/harbor/package.d.ts +0 -20
  212. package/dist/core/harbor/package.js +0 -172
  213. package/dist/core/harbor/probe.d.ts +0 -22
  214. package/dist/core/harbor/probe.js +0 -15
  215. package/dist/core/harbor/registry.d.ts +0 -15
  216. package/dist/core/harbor/registry.js +0 -110
  217. package/dist/core/harbor/root-line.d.ts +0 -7
  218. package/dist/core/harbor/root-line.js +0 -9
  219. package/dist/core/harbor/terrain.d.ts +0 -25
  220. package/dist/core/harbor/terrain.js +0 -28
  221. package/dist/core/http/index.d.ts +0 -2
  222. package/dist/core/http/index.js +0 -154
  223. package/dist/core/http/websocket.d.ts +0 -29
  224. package/dist/core/http/websocket.js +0 -133
  225. package/dist/core/line/answer.d.ts +0 -8
  226. package/dist/core/line/answer.js +0 -60
  227. package/dist/core/line/frame.d.ts +0 -29
  228. package/dist/core/line/frame.js +0 -77
  229. package/dist/core/line/ground.d.ts +0 -3
  230. package/dist/core/line/ground.js +0 -7
  231. package/dist/core/line/index.d.ts +0 -4
  232. package/dist/core/line/index.js +0 -8
  233. package/dist/core/line/web.d.ts +0 -12
  234. package/dist/core/line/web.js +0 -117
  235. package/dist/core/node/index.d.ts +0 -23
  236. package/dist/core/node/index.js +0 -124
  237. package/dist/core/pointer/bodies.d.ts +0 -31
  238. package/dist/core/pointer/bodies.js +0 -118
  239. package/dist/core/pointer/index.d.ts +0 -2
  240. package/dist/core/pointer/index.js +0 -4
  241. package/dist/core/pointer/world.d.ts +0 -45
  242. package/dist/core/pointer/world.js +0 -106
  243. package/dist/core/proof/contracts.d.ts +0 -19
  244. package/dist/core/proof/contracts.js +0 -116
  245. package/dist/core/proof/expect.d.ts +0 -6
  246. package/dist/core/proof/expect.js +0 -18
  247. package/dist/core/proof/index.d.ts +0 -3
  248. package/dist/core/proof/index.js +0 -14
  249. package/dist/core/proof/law.d.ts +0 -25
  250. package/dist/core/proof/law.js +0 -715
  251. package/dist/core/quo/address.d.ts +0 -19
  252. package/dist/core/quo/address.js +0 -84
  253. package/dist/core/quo/door.d.ts +0 -34
  254. package/dist/core/quo/door.js +0 -174
  255. package/dist/core/quo/index.d.ts +0 -9
  256. package/dist/core/quo/index.js +0 -12
  257. package/dist/core/quo/invitation.d.ts +0 -8
  258. package/dist/core/quo/invitation.js +0 -19
  259. package/dist/core/quo/keys.d.ts +0 -40
  260. package/dist/core/quo/keys.js +0 -79
  261. package/dist/core/quo/payload.d.ts +0 -15
  262. package/dist/core/quo/payload.js +0 -55
  263. package/dist/core/quo/relations.d.ts +0 -40
  264. package/dist/core/quo/relations.js +0 -33
  265. package/dist/core/quo/reply.d.ts +0 -13
  266. package/dist/core/quo/reply.js +0 -35
  267. package/dist/core/quo/seal.d.ts +0 -42
  268. package/dist/core/quo/seal.js +0 -78
  269. package/dist/core/quo/standing.d.ts +0 -39
  270. package/dist/core/quo/standing.js +0 -90
  271. package/dist/core/tcp/index.d.ts +0 -27
  272. package/dist/core/tcp/index.js +0 -209
  273. package/dist/core/ward/allowance.d.ts +0 -14
  274. package/dist/core/ward/allowance.js +0 -32
  275. package/dist/core/ward/cells.d.ts +0 -7
  276. package/dist/core/ward/cells.js +0 -74
  277. package/dist/core/ward/house.d.ts +0 -67
  278. package/dist/core/ward/house.js +0 -473
  279. package/dist/core/ward/index.d.ts +0 -5
  280. package/dist/core/ward/index.js +0 -7
  281. package/dist/core/ward/partition.d.ts +0 -50
  282. package/dist/core/ward/partition.js +0 -66
  283. package/dist/core/ward/stance.d.ts +0 -29
  284. package/dist/core/ward/stance.js +0 -186
  285. package/dist/core/ward/ward.d.ts +0 -44
  286. package/dist/core/ward/ward.js +0 -140
  287. package/dist/core.d.ts +0 -10
  288. package/dist/core.js +0 -19
  289. package/dist/defaults/dock/index.d.ts +0 -4
  290. package/dist/defaults/dock/index.js +0 -11
  291. package/dist/defaults/index.d.ts +0 -5
  292. package/dist/defaults/index.js +0 -10
  293. package/dist/defaults/memory/index.d.ts +0 -12
  294. package/dist/defaults/memory/index.js +0 -39
  295. package/dist/defaults/tcp/index.d.ts +0 -16
  296. package/dist/defaults/tcp/index.js +0 -82
  297. package/dist/defaults/ward/index.d.ts +0 -4
  298. package/dist/defaults/ward/index.js +0 -11
  299. package/dist/defaults/web/index.d.ts +0 -15
  300. package/dist/defaults/web/index.js +0 -90
  301. package/dist/edge.d.ts +0 -1
  302. package/dist/edge.js +0 -9
  303. package/dist/kit.d.ts +0 -4
  304. package/dist/kit.js +0 -12
  305. package/dist/node.d.ts +0 -1
  306. package/dist/node.js +0 -8
  307. package/src/browser.ts +0 -10
  308. package/src/cli.ts +0 -15
  309. package/src/core/being/being.ts +0 -84
  310. package/src/core/being/digest.ts +0 -18
  311. package/src/core/being/faculty.ts +0 -76
  312. package/src/core/being/index.ts +0 -8
  313. package/src/core/being/kind.ts +0 -37
  314. package/src/core/being/types.ts +0 -74
  315. package/src/core/being/words.ts +0 -31
  316. package/src/core/browser/index.ts +0 -219
  317. package/src/core/browser/worker.ts +0 -63
  318. package/src/core/cli/command.ts +0 -311
  319. package/src/core/cli/edge.ts +0 -86
  320. package/src/core/cli/harbor.ts +0 -120
  321. package/src/core/contract/index.ts +0 -82
  322. package/src/core/contract/link.ts +0 -58
  323. package/src/core/crypto/aes.ts +0 -26
  324. package/src/core/crypto/bytes.ts +0 -37
  325. package/src/core/crypto/ed25519.ts +0 -92
  326. package/src/core/crypto/hash.ts +0 -14
  327. package/src/core/crypto/index.ts +0 -10
  328. package/src/core/crypto/json.ts +0 -241
  329. package/src/core/crypto/mlkem.ts +0 -38
  330. package/src/core/crypto/subtle.ts +0 -13
  331. package/src/core/crypto/x25519.ts +0 -23
  332. package/src/core/edge/index.ts +0 -865
  333. package/src/core/folder/index.ts +0 -137
  334. package/src/core/git/http.ts +0 -103
  335. package/src/core/git/index.ts +0 -10
  336. package/src/core/git/object.ts +0 -116
  337. package/src/core/git/pack.ts +0 -147
  338. package/src/core/git/store.ts +0 -122
  339. package/src/core/git/zlib.ts +0 -197
  340. package/src/core/harbor/carrying.ts +0 -124
  341. package/src/core/harbor/catalogue.ts +0 -386
  342. package/src/core/harbor/dna.ts +0 -116
  343. package/src/core/harbor/dock.ts +0 -420
  344. package/src/core/harbor/harbor.ts +0 -433
  345. package/src/core/harbor/index.ts +0 -14
  346. package/src/core/harbor/memory.ts +0 -31
  347. package/src/core/harbor/package.ts +0 -195
  348. package/src/core/harbor/probe.ts +0 -39
  349. package/src/core/harbor/registry.ts +0 -107
  350. package/src/core/harbor/root-line.ts +0 -19
  351. package/src/core/harbor/terrain.ts +0 -54
  352. package/src/core/http/index.ts +0 -147
  353. package/src/core/http/websocket.ts +0 -124
  354. package/src/core/line/answer.ts +0 -60
  355. package/src/core/line/frame.ts +0 -83
  356. package/src/core/line/ground.ts +0 -18
  357. package/src/core/line/index.ts +0 -8
  358. package/src/core/line/web.ts +0 -123
  359. package/src/core/node/index.ts +0 -139
  360. package/src/core/pointer/bodies.ts +0 -122
  361. package/src/core/pointer/index.ts +0 -4
  362. package/src/core/pointer/world.ts +0 -134
  363. package/src/core/proof/contracts.ts +0 -134
  364. package/src/core/proof/expect.ts +0 -25
  365. package/src/core/proof/index.ts +0 -14
  366. package/src/core/proof/law.ts +0 -742
  367. package/src/core/quo/address.ts +0 -87
  368. package/src/core/quo/door.ts +0 -180
  369. package/src/core/quo/index.ts +0 -12
  370. package/src/core/quo/invitation.ts +0 -19
  371. package/src/core/quo/keys.ts +0 -91
  372. package/src/core/quo/payload.ts +0 -61
  373. package/src/core/quo/relations.ts +0 -62
  374. package/src/core/quo/reply.ts +0 -38
  375. package/src/core/quo/seal.ts +0 -101
  376. package/src/core/quo/standing.ts +0 -111
  377. package/src/core/stand/main.ts +0 -20
  378. package/src/core/stand/stand.ts +0 -259
  379. package/src/core/tcp/index.ts +0 -227
  380. package/src/core/ward/allowance.ts +0 -47
  381. package/src/core/ward/cells.ts +0 -77
  382. package/src/core/ward/house.ts +0 -524
  383. package/src/core/ward/index.ts +0 -7
  384. package/src/core/ward/partition.ts +0 -117
  385. package/src/core/ward/stance.ts +0 -207
  386. package/src/core/ward/ward.ts +0 -166
  387. package/src/core.ts +0 -55
  388. package/src/defaults/dock/index.ts +0 -12
  389. package/src/defaults/index.ts +0 -10
  390. package/src/defaults/memory/index.ts +0 -50
  391. package/src/defaults/tcp/index.ts +0 -89
  392. package/src/defaults/ward/index.ts +0 -12
  393. package/src/defaults/web/index.ts +0 -97
  394. package/src/edge.ts +0 -11
  395. package/src/index.ts +0 -18
  396. package/src/kit.ts +0 -15
  397. package/src/node.ts +0 -10
  398. /package/dist/{cli.d.ts → node/cli.d.ts} +0 -0
package/KIT-SPEC.md ADDED
@@ -0,0 +1,286 @@
1
+ # nervur's answers to KIT-SPEC
2
+
3
+ This document answers, for `nervur`, every question that Quo's `KIT-SPEC.md`
4
+ asks of a kit. Quo's spec, `SPEC.md`, and `KIT-SPEC.md` stand in
5
+ [razvangherghina/quo](https://github.com/razvangherghina/quo), and every
6
+ term below is the term they define. Quo's verifier judges nervur's Quo
7
+ layer as a door, an asker, a TCP listener and a TCP dialer. It passes all
8
+ four. Each answer states what the code of this version does.
9
+
10
+ ## What stands behind a door
11
+
12
+ **Question 1.** A house stands behind each door, and holds one ward. A
13
+ house holds beings. A being is an instance of a class a developer writes,
14
+ with JSON cells and named asks. A ground is the script that opens a house.
15
+ It hands each arrival to the house's `door(box)` function. The door finds
16
+ the relation by its heir, and the heir names one being and one of her
17
+ occupants. An occupant is a being's name for the door's end of a relation.
18
+ Asks to one being run one at a time, in the order they arrive. An ask
19
+ marked `readOnly`, and the empty ask, run beside them. Asks to two beings
20
+ run side by side.
21
+
22
+ **Question 2.** The ground that runs the house holds its seed, in a
23
+ custody of one seed for each house. A keys body gives signatures and
24
+ agreements from it, and never the seed itself. `House.open`
25
+ hands the ground a hand, `ask({ id, method, args })`, which asks the being
26
+ `id`, or the steward where none is named, as the occupant `root`. The
27
+ steward places and removes every other being. Every other being holds the
28
+ standing `steward`, which she cannot drop. The steward cannot dismiss
29
+ `root`. So no path inside a house removes the edge back to what made it.
30
+ `root` never arrives through a door. The ground serves the hands of all
31
+ its houses in one place. On Node, that is a local socket only the
32
+ ground's user may open.
33
+
34
+ **Question 3.** The public being answers the zero head, where the ground's
35
+ classes name one. A house with no public being answers every ask on the
36
+ zero head with silence, as case 4. The public being reads each such asker
37
+ as the occupant `stranger`, with the key its ask was signed by. A stranger
38
+ reaches only her asks that are safe to repeat. The house keeps each
39
+ zero-head choice by the box's signature for ten minutes. The same sealed
40
+ bytes arriving again within that window hear the same choice, and nothing
41
+ runs twice. That cache lives in the process, so a restart empties it.
42
+
43
+ **Question 4.** The door opens any number of boxes at once, and judges
44
+ one at a time on each relation. A box whose relation has another box in
45
+ flight waits for it, and is judged again on the record it left. A box
46
+ opened on a record that moved meanwhile is judged again too. So each box
47
+ is admitted by what holds when the door chooses, and the highest number
48
+ honoured never goes down. An admitted ask waits its turn among its
49
+ being's asks, and its move lands in the ask's own write.
50
+
51
+ **Question 5.** nervur calls what stands behind a door a house, and what
52
+ it holds beings. The door's end of a relation is an occupant, named by an
53
+ id its being chooses. The asking end keeps Quo's name, a standing. A
54
+ standing that arrives by invitation is named `standing:` and sixteen hex
55
+ digits drawn from its heir, so the same invitation taken again gives the
56
+ same standing. The ids `root`, `stranger` and `steward` are reserved, with every
57
+ id beginning `handle:` or `being:`. The process that opens a house is its
58
+ ground. None of these names crosses a door.
59
+
60
+ ## What a kit keeps
61
+
62
+ **Question 6.** A ward's seed is sixty-four lowercase hex digits, and
63
+ anything else opens no house. `SeedKeys` takes it as a string. `FileKeys`
64
+ reads it from a file only its owner may read, and `KeychainKeys` from the
65
+ macOS keychain. Both make a fresh seed where none is kept. The house never
66
+ holds the seed, and asks its keys body for operations alone. The lock is
67
+ derived, not drawn. It is the ML-KEM-768 key pair from 64 bytes of
68
+ HKDF-SHA-256 over the seed, under the label `nervur-lock`. It is made on
69
+ first use and is the same every time. So a ward holds one lock, and its
70
+ seed alone restores it whole. The ward keeps no heir's secret after it
71
+ gives the invitation.
72
+
73
+ **Question 7.** Every drawn byte comes from `crypto.getRandomValues`, the
74
+ platform's Web Crypto source. The default crypto body, `NobleCrypto`, draws
75
+ there for heir secrets, ephemeral secrets, announced keys and ids. Its
76
+ ML-KEM encapsulation, from the noble library, draws from the same source.
77
+ The lock draws nothing, since it derives from the seed. A ground may hand
78
+ its own crypto body, and then the source is that body's.
79
+
80
+ **Question 8.** For each heir, the door keeps whether it is spent, the key
81
+ it holds, the key it vouches for, and the open and offered edge keys. It
82
+ keeps the highest number it honoured as well. That record sits in the
83
+ place of the being the heir reaches, beside her other relations. The house
84
+ keeps it in the memory its ground hands it, sealed under a key derived
85
+ from the seed. `FileMemory` and `LedgerMemory` write to disk, and the
86
+ record survives a restart with them. A standing's record is kept the same
87
+ way. Its number and its knock are written before a box leaves.
88
+
89
+ **Question 9.** A door stops holding an heir when its being dismisses the
90
+ occupant the heir reaches. It stops when a handle made for one use has its
91
+ first ask land. It stops when the steward removes the being. An invitation
92
+ taken by a standing of the same house binds inside the house, and its heir
93
+ leaves the door then. An heir minted with a time to be spent in, and
94
+ still unspent past it, is one the door never held. The door lets it go
95
+ at the next mint or binding knock. A spent heir never expires, nor one
96
+ minted without a time.
97
+
98
+ **Question 10.** The door keeps no keys at removal, for any time.
99
+ Dismissal deletes the heir from the door's index. So an ask signed by any
100
+ of the relation's keys hears silence at once, and the door never answers
101
+ `removed` in this version.
102
+
103
+ **Question 11.** None. A door honours no number below the highest it
104
+ honoured on a relation, and a number at or below it hears `repeated`. A
105
+ nervur standing numbers each ask above every number it sent. So a retry
106
+ never meets `repeated` for a box that arrived.
107
+
108
+ ## What a kit answers
109
+
110
+ **Question 12.** The door answers every box it refuses with silence or
111
+ with one of Quo's words. It answers every admitted ask with a choice. The
112
+ choice is the being's object, or silence where the being is absent or does
113
+ not hold that asker. The door gives nothing where the memory refuses the
114
+ write that holds the ask's move. Over TCP, the listener also answers
115
+ nothing for a ward it does not hold, and for a door that fails with an
116
+ error.
117
+
118
+ **Question 13.** `seen` is sixteen lowercase hex digits. They are the first
119
+ eight bytes of the SHA-256 of the canonical JSON of the describe that asker
120
+ would hear. So `seen` changes exactly when that describe changes: the
121
+ being's state, the asks shown to that asker, or their entries. Every
122
+ object carries it, an answer and a describe alike, a refusal of `args`
123
+ that repeat a key among them.
124
+
125
+ **Question 14.** The empty ask answers a describe to any asker the door
126
+ admits, a stranger on the zero head among them. A being that is absent
127
+ answers silence instead. A describe holds the being's current state and
128
+ every entry shown to the roles its asker holds, in every state. So two
129
+ askers with different roles hear two describes. Its `lang` is
130
+ `org.nervur.asks/1`, nervur's language above Quo, whose shapes are below.
131
+ An entry's `description` is the class author's text. Its `args` and
132
+ `result` are JSON Schema 2020-12, in a closed subset. A named ask that no
133
+ entry shown to that asker names hears `{"error":{"message":"no such ask"}}`.
134
+
135
+ ```text
136
+ describe = { lang: "org.nervur.asks/1", kind, description?, state, asks }
137
+ entry = { method, in, to, description?, args, result?, hints, wait }
138
+ answer = { result } | { error: { message } }
139
+ ```
140
+
141
+ **Question 15.** A reply text holds no whitespace between tokens. An
142
+ object reply writes `object` first and `seen` second. Its object is
143
+ canonical JSON, with every object's keys sorted by UTF-16 code units. A
144
+ word is written `{"quo":"removed"}`, and silence `{"silence":true}`.
145
+
146
+ **Question 16.** No. nervur seals every payload and every reply text with
147
+ no padding. It reads padding wherever padding arrives.
148
+
149
+ **Question 17.** No. Each refusal returns as soon as its case is found.
150
+ So a box refused at its head returns sooner than one refused at its
151
+ signature.
152
+
153
+ **Question 18.** The Quo layer names the case that refused each arrival,
154
+ and the house discards it. Nothing in this version logs a refusal, or a
155
+ reply that breaks a rule. A standing reads a reply that breaks a rule as
156
+ silence, and keeps no record of why.
157
+
158
+ ## What a kit asks
159
+
160
+ **Question 19.** An invitation leaves a house as a handle. A being puts a
161
+ handle in her answer, or in the `args` of a call outward. The house writes
162
+ it as the hex of the invitation's canonical JSON. From there it travels
163
+ however its receiver carries it. The minting house keeps no copy. It keeps
164
+ the heir's public key and the record of the relation, never the heir's
165
+ secret.
166
+
167
+ **Question 20.** A standing whose knock surely reached no door sends the
168
+ knock again, as the same bytes, until it may have. Its carry says so: no
169
+ address took the box. A standing whose knock may have been heard, and
170
+ brought no object back, recovers it in turns. Its next send is an ask
171
+ with a new number, under the key its knock announced and the knock's edge
172
+ key. The send after that is the knock again, as the same bytes. The two
173
+ take turns until an object comes back, or a word to an ask. An awaited
174
+ call makes one send within its wait, and the next call on the relation
175
+ takes the next turn. An effect is sent again after a wait that starts at
176
+ one second and doubles, never past five minutes. It stops at its
177
+ deadline, which is seven days for a standing.
178
+
179
+ **Question 21.** Over TCP and the web, a dialer waits thirty seconds for
180
+ each address, unless the ground sets `wait` on its carry. An awaited call
181
+ waits as long as the method it calls names. That is thirty seconds by
182
+ default, never past five minutes, and never past the ground's `wait` on
183
+ the house. It never waits past what is left of the ask that makes it. An
184
+ awaited call to a far ward carries that time in the payload field
185
+ `within`, in milliseconds. The ask it starts waits that long at most, and
186
+ an ask whose time is spent runs nothing and hears silence. A being waits
187
+ on no effect, and an effect's answer returns to her as an ask.
188
+
189
+ **Question 22.** A standing numbers its asks from 1, each one above the
190
+ last it sent. Every ask announces a fresh random key in `next`. The house
191
+ sends one ask at a time on each relation, and the next waits for the reply
192
+ to the last. The number and any knock are written before a box leaves.
193
+ The standing moves only on an object answering an ask above every ask it
194
+ has moved on. It then signs with the key that ask announced, and keeps no
195
+ key it moved from. After a move, an ask that meets silence moves nothing.
196
+ The next ask signs with the same key under the same edge key, with a new
197
+ number and a new announced key.
198
+
199
+ **Question 23.** The Quo layer reads a reply as one of four: an object
200
+ with its `seen`, silence, one of Quo's three words, or nothing. The house
201
+ treats silence, a word and nothing alike, as transient, and names no
202
+ cause for any of them. An address that never answered, a spent heir and
203
+ a reply that came late read the same. An awaited call fails with the
204
+ method's name followed by `answered nothing`. An effect is sent again.
205
+ Past its deadline, its reply ask reads `the call gave up at its
206
+ deadline`. A being never reads silence, a word or nothing as such.
207
+
208
+ ## What a kit carries
209
+
210
+ **Question 24.** nervur stands Quo over TCP, as a listener and as a
211
+ dialer, in `TcpCarry` from `nervur/node`. It carries plain TCP, with no TLS
212
+ and no check beyond Quo's own. The listener binds `0.0.0.0` by default, on
213
+ the port the ground names or one the system picks. One listener answers
214
+ for every ward whose house listens on it, routed by the ward each ask
215
+ names.
216
+
217
+ nervur stands Quo over the web in `WebCarry`, both its post and its held
218
+ line, as a listener and as a dialer. The listener is a handler on the
219
+ ground's own HTTP listener, at the path `/quo` unless the ground names
220
+ another. It answers a reply with status 200 and nothing with 204. It
221
+ answers a request that is not a `POST` with 405, a body of the wrong size
222
+ with 400, and a ward pk it holds no door for with 404. It answers the
223
+ CORS protocol only for the origins its ground names, and no origin
224
+ otherwise. A held line that does not offer the subprotocol `quo` is
225
+ refused at its handshake with 400. TLS is the ground's listener's, and
226
+ this carry adds none.
227
+
228
+ **Question 25.** A standing learns where a ward is reached from the `at` of
229
+ its invitation, and from which address answered. A house writes `at` in
230
+ every invitation it mints. It writes the addresses the ground hands its
231
+ carry, the same toward every holder. A carry that joins several lists
232
+ every one's addresses. Where the ground hands none, `TcpCarry` writes the
233
+ listener's own address, with `0.0.0.0` written as `127.0.0.1`.
234
+
235
+ A carry keeps the door of every ward it listens for. A box to one of those
236
+ wards goes to its door in the same process, before any address, and no
237
+ connection is made. So the houses of one ground reach each other by the
238
+ carry they share, whatever their invitations' `at` holds.
239
+
240
+ A standing keeps its route: the address that last answered with an
241
+ object or a word, which only a reply that opened as the ward's carries.
242
+ Silence pins nothing. Each ask tries the route first, then the addresses
243
+ of `at` in their order, one after another. The route is kept with the
244
+ standing's record and survives a restart.
245
+
246
+ A door writes `at` in an object reply when the ground's addresses differ
247
+ from the ones that holder last heard, in its invitation or in a reply.
248
+ It writes them once, and a later reply carries none until they change
249
+ again. A reply lost after it carried them leaves that holder with the
250
+ old addresses until the next change. A standing takes `at` from an
251
+ object reply alone. It replaces the addresses it held, and a later reply
252
+ with none leaves them as they stand. The dialer skips an
253
+ address its carry does not speak. It looks a name up and takes its first
254
+ address. One connection to each address carries many asks at once.
255
+
256
+ The dialer refuses a loopback, private, link-local, shared or unspecified
257
+ address, unless the ground sets `allowPrivate`. Over the web it reads
258
+ the host as the URL writes it, and refuses `localhost` too. It moves to
259
+ the next address after a refused address, a failed connection, a
260
+ nothing frame, or a post answered with any status but 200 and a body. It
261
+ carries the box no further after a wait that runs out, a connection that
262
+ closes with the ask in flight, or a post that failed after it was sent.
263
+ That ask may have been heard, and the send answers nothing.
264
+
265
+ ## What is not the kit's either
266
+
267
+ **Question 26.** `method` names an entry of the being's describe, and
268
+ `args` are that entry's arguments. The house holds `args` to the entry's
269
+ schema before the method runs, and answers a mismatch as an error. The
270
+ `lang` `org.nervur.asks/1` names nervur's language, whose shapes Question
271
+ 14 gives. A field `call` beside `method` carries a call id, and a field
272
+ `within` the milliseconds its chain has left, as Question 21 gives. An ask whose
273
+ call id that occupant already used hears the stored answer, and runs
274
+ nothing. A call id is kept seven days.
275
+
276
+ ## What a kit reads
277
+
278
+ **Question 27.** nervur's JSON reader is iterative. It reads any nesting
279
+ depth that a box of at most 1 MiB holds, and sets no length below that
280
+ size. It takes lone surrogates written as escapes, and noncharacters, as
281
+ they stand. Repeated keys anywhere inside `args` are answered
282
+ `{"error":{"message":"the args repeat a key"}}`, and the method never runs.
283
+ Numbers are read as IEEE 754 doubles. So an integer beyond 2^53 loses
284
+ precision before the schema holds it. Fields of the payload that the spec
285
+ does not name, `call` and `within` apart, are ignored. Inside a reply's
286
+ `object`, a standing takes a repeated key and keeps its last value.
package/LICENSE CHANGED
@@ -187,7 +187,7 @@
187
187
  same "printed page" as the copyright notice for easier
188
188
  identification within third-party archives.
189
189
 
190
- Copyright 2026 Razvan Gherghina
190
+ Copyright 2026 Bookarest Digital SRL
191
191
 
192
192
  Licensed under the Apache License, Version 2.0 (the "License");
193
193
  you may not use this file except in compliance with the License.
package/NOTICE CHANGED
@@ -1,6 +1,10 @@
1
1
  Nervur
2
- Copyright 2026 Razvan Gherghina
2
+ Copyright 2026 Bookarest Digital SRL
3
3
 
4
- This product includes software developed by Razvan Gherghina.
4
+ This product includes software developed by Bookarest Digital SRL.
5
+
6
+ Nervur is a kit of Quo, the protocol at https://quo.systems, which is
7
+ Razvan Gherghina's and licensed separately under the Apache License,
8
+ Version 2.0. Quo is not this product.
5
9
 
6
10
  Licensed under the Apache License, Version 2.0. See LICENSE for the terms.