@quo-systems/quo 0.2.15 → 0.2.17

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.
@@ -0,0 +1,345 @@
1
+ {
2
+ "corpus": "@quo-systems/quo",
3
+ "encoding": "hex",
4
+ "area": "door",
5
+ "note": "The door's thirteen cases as fixed bytes: what a ward answers to every arrival it will not answer, and what it writes while doing so. Each record is one arrival at one door: the ask exactly as it arrives, the reply exactly as it leaves, what that reply opens to where the hand holds the lid's secret, and the ward partition's digest before and after, so `nothing written` is a value a kit checks and not a sentence it reads. Every random is fixed. The world is two harbors linked as a wire, wards on the seeds A, B and P, and every byte of entropy any of them draws comes from SplitMix64 seeded at 20250901: the state starts at the seed, each draw adds 0x9e3779b97f4a7c15, mixes with two xor-shift-multiplies, and the sixty-four bit result is spent eight bytes at a time, least significant byte first. The stream is reset at the start of every record, so a record is reproduced without running the ones before it. D1 noise is the one record whose reply nobody can open: the door seals it to the first thirty-two bytes of the noise, and no one holds a secret for those. That is the case, not a gap in it. A word to a bound key is a different length from a silence to a stranger, on purpose. The law of one silence equalizes what strangers see and nothing else, so every record of kind `silence` is one length and every record of kind `word` or `object` is not. `ward` is the seed of the ward whose door judged the arrival. `state` says what that ward was in the middle of when it did, which is the only thing a kit needs beyond the bytes to stand a door in the same place.",
6
+ "vectors": [
7
+ {
8
+ "case": "D1",
9
+ "name": "wrong padlock",
10
+ "state": "a heir the door holds, sealed to another ward's padlock",
11
+ "ward": "B",
12
+ "kind": "silence",
13
+ "heard": false,
14
+ "ask": "d1fc81101fc0d82fb5c7298d598aadd7146299554890bd22c140350d5efabd3a17c7fe10142dec3537204579e051a006349247a4078cd3723d854b8ca07afd4a7b17fca2078eef5a624baa41381687774e11164b4a60ae5ecef6b93f6f793bc3445be287c45e83d8fd03e210637aeaa177a418ab6f21db665af8a03c7d2ccc390b3c90d8526a883f28acd478109f4b3691ad6f0e07d111fc1a2517899c3874219edf5f14b97801924296115153b18e9fdaf74ba9124e3e0ff2793189af09f25c6c0793f4241303b3ada7529eabb144c28c8545c7c8421d06cbb4fcdcdc18c682fd36462747cd6d1ae3f59de12b072d7357293f2e71c48af57bbecefb19df2439d99ae1233e20bf7d77fbc1dad12681913f2ee386c1fec9e836e3f1f5456ed4c53fb1dfff6a7689ab4929d46cd33532073eb545739b4efe216a1f46757c4ea0b1",
15
+ "reply": "84637ecbb7afd6785f3d54e8a1f8f03161d14cdadae513c3a0fd8524f8836220e2e9b1e962a94de7d12632b93c811f561f8cf7ab1071afe44abbd59d18272319624a3ad1c2630c1ea8f02f3364869642ed30f568d6885f42db8a68e14f77549098683dd5c826a5abf0c658eff571e2786d9f808bd613e4c7b580d1c19e933c6d",
16
+ "opens": {
17
+ "silence": true
18
+ },
19
+ "before": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
20
+ "after": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
21
+ "wrote": false
22
+ },
23
+ {
24
+ "case": "D1",
25
+ "name": "noise",
26
+ "state": "bytes that are not a sealed ask at all",
27
+ "ward": "B",
28
+ "kind": "silence",
29
+ "heard": false,
30
+ "ask": "01c0b7c9e315dc00c2913141db31df59a760f3cea15ad41d5c51eadb39d927b4035fe63be4f7794aa739a173fea2c4c0606717001e28c219b638bec66a9d299f9da2f1ef860034d7e23a6e203f8139996d912d084d4df8923d5745aa53cfce040b9b16cfb47ffb4dd79a9b391c116cd235",
31
+ "reply": "eea19c6ed20cc8562606ce2695bd54d5524a3b0cbf3a224fd5a944a920dba85440682158d87d5f046a69925d12015bac1416b51fe89e1fa7f10f69478f29234a0eda4ab1468d813c3f00562c2a740d187ecf7c11fb15857a3c8023fa991dbd59bd605dec985ae25631ce152bc3e2596e6e0481f78218ba2e27859d00dc3c0d8e",
32
+ "opens": null,
33
+ "before": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
34
+ "after": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
35
+ "wrote": false
36
+ },
37
+ {
38
+ "case": "D2",
39
+ "name": "method is not a string",
40
+ "state": "a bound key, one field of the wrong shape",
41
+ "ward": "B",
42
+ "kind": "silence",
43
+ "heard": false,
44
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c639ddf51cda073d6ace5734b0dabebbca1ae8b0bacf1cfe3a555ddcc7d497c9deb4b89ebc5ff0bcc14ed95d0c73f5fc98456e9daca100b9e68bbd19caec646792e270abb88105bc93c34ea5c08f44a3ddd29d2f3c016cc6239e158fa",
45
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
46
+ "opens": {
47
+ "silence": true
48
+ },
49
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
50
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
51
+ "wrote": false
52
+ },
53
+ {
54
+ "case": "D2",
55
+ "name": "args is not an object",
56
+ "state": "a bound key, one field of the wrong shape",
57
+ "ward": "B",
58
+ "kind": "silence",
59
+ "heard": false,
60
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d9985cd3a822d8b4ff7c51daef31e729c80716985e463fb7ba473e8e191954a84f44681e490edfc9f2998df9794c9136df18841541da782c9e49ccd859161e3d2ca93fdc1f5fa5160f8d578e54b2ee94318f415685278f49295cb4ea3da40eae",
61
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
62
+ "opens": {
63
+ "silence": true
64
+ },
65
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
66
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
67
+ "wrote": false
68
+ },
69
+ {
70
+ "case": "D2",
71
+ "name": "seq is zero",
72
+ "state": "a bound key, one field of the wrong shape",
73
+ "ward": "B",
74
+ "kind": "silence",
75
+ "heard": false,
76
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b34ed657218484803f2fe5c827ba406d909e7a27df418437687efd338dd921293e56186f1ed2c0cd2b0767052ead4c22c91120e7934a9e4a6846af69cfa849fba769e872443dfeaea6a42209de7ea7bf1b671312ed95d3d4b60024c2944b43d66c5cd8edd6a2398c6ff9f319ee5c5886d96111ad5b7d2216f8249",
77
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
78
+ "opens": {
79
+ "silence": true
80
+ },
81
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
82
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
83
+ "wrote": false
84
+ },
85
+ {
86
+ "case": "D2",
87
+ "name": "time is negative",
88
+ "state": "a bound key, one field of the wrong shape",
89
+ "ward": "B",
90
+ "kind": "silence",
91
+ "heard": false,
92
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8866a506d909e7a27df418437687efd338dd921293e56186f1ed2c0cd2b076d82048d224068df7986c2df5654e7121a0262e0a5b71110a8401cd9845c8ff6d34128fa6767a47b43a9aeaf3a28f194a98860a2b870e25e8d404df48144b0e92c707111060764444fdbfe6cfe8d52dd5",
93
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
94
+ "opens": {
95
+ "silence": true
96
+ },
97
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
98
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
99
+ "wrote": false
100
+ },
101
+ {
102
+ "case": "D2",
103
+ "name": "by is not a key",
104
+ "state": "a bound key, one field of the wrong shape",
105
+ "ward": "B",
106
+ "kind": "silence",
107
+ "heard": false,
108
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cd81a87f82978e703cd1af5e88c66f32e9a99a659a90ae5b351ad235d2971643caf163308c76d7ac09d1971f6e4a988881cf9d982ebfc6508bf7520eba44bce53ffb1338e6b8c4535b70444541a3fa4bf589b8ff6961343d221866eede55bb7497d0ad205966d315a04d0207d9bf4baa822cbf5c5d0946fb86b2e8bb3e29168f025f052078b09dfc6556ea5542afebb2c0bdf5ef0056",
109
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
110
+ "opens": {
111
+ "silence": true
112
+ },
113
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
114
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
115
+ "wrote": false
116
+ },
117
+ {
118
+ "case": "D2",
119
+ "name": "hops at zero",
120
+ "state": "a bound key, and a chain that has run out",
121
+ "ward": "B",
122
+ "kind": "silence",
123
+ "heard": false,
124
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d9985cd3a822d8b4ff7c51daef31ab29c03b7882cf8d868ab1391fcaf6e8cf7ea3c990d262268ea4d28fe61810e87190c30f41d68644d3511cf3a58cab78a278cca9229a50fbbeb2fb0e6607face7ecd82419c65ff2baa6607094e06eb80acb728fb3bd6b628be45a4b9",
125
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
126
+ "opens": {
127
+ "silence": true
128
+ },
129
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
130
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
131
+ "wrote": false
132
+ },
133
+ {
134
+ "case": "D3",
135
+ "name": "for nobody, nobody home",
136
+ "state": "a ward with no public being",
137
+ "ward": "B",
138
+ "kind": "silence",
139
+ "heard": false,
140
+ "ask": "84637ecbb7afd6785f3d54e8a1f8f03161d14cdadae513c3a0fd8524f8836220ba17e2a2e1fde39c1b7f215273348cf6d0e5e0bdf2045199fea841fcb99ae6842d14b40710c9e7f2a9ad106487cb41e16a1b8bc35ac660911cf7e35c3ae1c9a3e600dd40e8a85d32d1a78b05c185e12496169c6fefe493e9e631bf439f3314cb61ce8c5c2cf328ca15247763bed2a5c072e758578504aded3f75b8923939307aeb59eaf924a4e7ef1df23ad8eef50ad880b960185795b762f38b9bb7ea9629505c25296244b5665e9c0d1d9a2c1690c02d77c167882a2f1f9180ca8f2b11a37bbd263dc9fbff020b31812ca12b76930dfbb06e6ef00074ff05614bf62d14b22530d3",
141
+ "reply": "5f1426463a519ded7693446c34eb6751015d932d4d929557abf3ee32ecfdcc192baea2488556aacc13b62ccbb07b7888dc2af01a2a7e59152b9546b1e185e0c50b34a4c7e9665fc5592cdb61993f571bebc20a713c733b58acbd703408206c5a42f2b644ad19e79ce07ec8b51064c369635a3ce7353dc49a112788ef910aad10",
142
+ "opens": {
143
+ "silence": true
144
+ },
145
+ "before": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
146
+ "after": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
147
+ "wrote": false
148
+ },
149
+ {
150
+ "case": "D4",
151
+ "name": "for nobody, the signature fails",
152
+ "state": "a ward with a public being, a body signed by another key",
153
+ "ward": "P",
154
+ "kind": "silence",
155
+ "heard": false,
156
+ "ask": "5f1426463a519ded7693446c34eb6751015d932d4d929557abf3ee32ecfdcc19f7cb3d88928e737cc1502a253c5a301097cad7810345026dc168c010c0ae3e2e01ad94f6278407c1874cfea971c97e46d2adf623ca548ba6f972fcd20bdffa32b7a25faaf36f8f41053079df352547ca562be02c22e4ace975d9c4926e82152e0c24eb7de188b7ce11e81a2bed397363832c78ae09ad96e09e53b024eabf686c89ccb453cfb35fa368f46f31d321a67eb16a9c67788272def37a1dc55d6a5489d4aae9b132f446fffaa89d0e09f03f33e70cddfe1eb50e7254dd85821c9d3265d0c3362fb0499e7bde0a277b7d2021fd7aa970edc2cea02560bbaee91624d2f1d9ee",
157
+ "reply": "9f1bf06332529ed4df06d6000f037f02e2d822d0e8c6256842817e568383c372f50e74b15f3135af6b35a9b3776809dc400adf30b1fc380b2d77c40544424dd0fcb48c5808822b51a7260219bcda18d1321c626a71351958d941833ec7c62b9615a7120992ddddfeecc26276a833d3975021d2906a4ec771350770e925a01463",
158
+ "opens": {
159
+ "silence": true
160
+ },
161
+ "before": "cc8ba34d418b81459d6654b95f81ddd6f9a5296bb88d8a405614b1db45dd6ed9",
162
+ "after": "cc8ba34d418b81459d6654b95f81ddd6f9a5296bb88d8a405614b1db45dd6ed9",
163
+ "wrote": false
164
+ },
165
+ {
166
+ "case": "D5",
167
+ "name": "a heir not held",
168
+ "state": "a heir this ward never minted",
169
+ "ward": "B",
170
+ "kind": "silence",
171
+ "heard": false,
172
+ "ask": "84637ecbb7afd6785f3d54e8a1f8f03161d14cdadae513c3a0fd8524f8836220ba17e2a2e1fdaf8f11756b16772bc8aa94b7b6b8a55b54cfaeaf14fcbdc8b7db2f10ea584098e5a7f7a91430809517e63f49db9c0d9660c64ca3e30b38bfc9a6b0518944b7ad0c26c9e1db1d87dcf276c5578174e2b1ddfcf76db302c4665c8b2a92cb4972f12098463a342fe7def3d67eed5951d305b7fd3421a8c2303e2277fb53b6f67ffdf1a70df22cdcacb15381d1e6acc757bf4535f4c28e1283269e8139b10710ecd0648e63ef3aa6536a694eb28ef6662d14d7f9492015e9ef85734c6e420dc0eef0fbe560d2bf4029fb5d379660b94644eed49986ea9ad9642fb391dd4fca23035ffef81a2e5543ccf5dd2f0991e9e97fed86d0d86fba15b2c2026f2a5b04c96212583a38c9b1870bcf40cd2b64ed6c706c2a2415513e255f10869d",
173
+ "reply": "5f1426463a519ded7693446c34eb6751015d932d4d929557abf3ee32ecfdcc192baea2488556aacc13b62ccbb07b7888dc2af01a2a7e59152b9546b1e185e0c50b34a4c7e9665fc5592cdb61993f571bebc20a713c733b58acbd703408206c5a42f2b644ad19e79ce07ec8b51064c369635a3ce7353dc49a112788ef910aad10",
174
+ "opens": {
175
+ "silence": true
176
+ },
177
+ "before": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
178
+ "after": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
179
+ "wrote": false
180
+ },
181
+ {
182
+ "case": "D6",
183
+ "name": "a key not admitted",
184
+ "state": "a heir the door holds, a key nobody announced",
185
+ "ward": "B",
186
+ "kind": "silence",
187
+ "heard": false,
188
+ "ask": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a34b31ba0403a808d63af3f5b706095ed7def0893fe00e2fc7c2aabe76cea0b61af4c594718fb40c235b6a35696800ea29d4d9277fcd470671c7bcc5e18c79f9aa5c0afcd7f83274ec57f1730594ac30b836507c76e4b814465a7c0e1085d834389bdc1caeca09ce3c77137a4f46b54982cdcfe313c35ac39d9f44efd792103b87ba4c808383ed50f77534c9e4d801160d5ca2fc87a91e007aed7993d25ce4255c89372e3b5be9aa263f2bb34bf0f1732d0c7ca6be29b5c2737a888f480b3e86e83dd1ce923fc5954409cfedb9727d6db42ef81e7a22d571dbbf7e66221e161fb37305c424ea1bcf03686fc0cac293144c507a27a15b1f949f4268e13bf918f2fb0a84b5866c4658aeea297519181c4301b349fb79224575ed898dbf9ceac9f724e",
189
+ "reply": "dd9a4e87c36a6c2db4a3d6b33bd5a9d471d2ac9410cc2596cb769cb57407125051baef6786856eb312eaea0b6709252f32a9ea831eadc8fcad6d1d031f01484c70dcfe83061a57e421d9321ab846aa33a213e89dd8f6aa116af8d5bb447abcd04f4edd8edf63bf2b6a606f9f21a72181ab5555a4cd13ce7cb5224077254972e8",
190
+ "opens": {
191
+ "silence": true
192
+ },
193
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
194
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
195
+ "wrote": false
196
+ },
197
+ {
198
+ "case": "D7",
199
+ "name": "the signature fails under an admitted key",
200
+ "state": "a bound key named in by, a body signed by another",
201
+ "ward": "B",
202
+ "kind": "silence",
203
+ "heard": false,
204
+ "ask": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a34b31ba0403a808d63af3f5b706095ed7def0893fe00e2fc7c2aabe76cea0b61af4c594718fb40c235b6a35696800ea29d4d9277fcd470671c7bcc5e18c79f9aa5c0afcd7f83274ec57f1730594ac30b826751c16b4a8b4735aa94b25e0cd5128fbfc3c8e1a1cfe0c57f64f2a16a5cc82ddca9333735fd67daa94dfb2a720dee7bf39a026a36d40774074a984ed11b65d5ca2fc87a91e007aed7993d25ce4255c89372e3b5be9aa263f2bb34bf0f1732d0c7ca6be29b5c2737a888f480b3e86e83dd1ce923fc5954409cfedb9727d6db424d264e8cdcbd7dc8e2b6af09e8f2d7c189cf2d1f3dfd05ffa99e48d7d8e1d79f89a11e15fef1a8124bf13cd07a1036b806f46f16e87ad790496b579ac490db131979d762571fe600cba5a04f6a695b9c",
205
+ "reply": "dd9a4e87c36a6c2db4a3d6b33bd5a9d471d2ac9410cc2596cb769cb57407125051baef6786856eb312eaea0b6709252f32a9ea831eadc8fcad6d1d031f01484c70dcfe83061a57e421d9321ab846aa33a213e89dd8f6aa116af8d5bb447abcd04f4edd8edf63bf2b6a606f9f21a72181ab5555a4cd13ce7cb5224077254972e8",
206
+ "opens": {
207
+ "silence": true
208
+ },
209
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
210
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
211
+ "wrote": false
212
+ },
213
+ {
214
+ "case": "D8",
215
+ "name": "she is not there",
216
+ "state": "the ward restarted without her class: her heirs stand and she does not",
217
+ "ward": "B",
218
+ "kind": "word",
219
+ "heard": false,
220
+ "ask": "d1fc81101fc0d82fb5c7298d598aadd7146299554890bd22c140350d5efabd3af181a0bd75844672e9f707bb65dc951964f73a82e009ef628bcfed3bc81502e96dc21f4a8d206183b3613631a09475b93505b8e0d549a5e3c5c0172ec4a4bd79961dd1772ed0a49d4ff4b0524de8e7f35995367237ea4e8429089ef618f29f2bc7e59350d694cb7f1019a5e456c72ef608f0040461e8aff6acc8b3b934936d09655450287f7083e2f1ab2a8677ee52e7ecc97fdc0671fe65f0895685ce567091ab8888eeb8d37259c0efb78e4418839ea7f4f8c68909f0cdcacfc8669547c7524600d57180a97435ec91f033c05a8782bc1df6755f31770522eeff58a23da34ca3036797fa411083f210af546844ba40b640bd05383e4f4beeda12149741faaf2db903acdc81712c3c6c1bd1fd2ce5c049f84bbdd5d3eea4ac5e9180d62c913fbe6b48974783e08e6cbc5768adce3c753ac2058c5f00a06896c1e90acef9580a20c1d03b3e1a7260c52bba5194164a3d1a04c2cb4fde6d8b0265b7e1f28c",
221
+ "reply": "84637ecbb7afd6785f3d54e8a1f8f03161d14cdadae513c3a0fd8524f8836220e2e9b1e962a94de7d12632b93c811f561f8cf7ab1071afe44abbd59d18272319624a3ad1c2630c1ea8f02f3364869642ed30f568d6885f42db8a68e14f77549098683dd5c826a5abf0c658eff571e2786d9f808bd613e4c7b580d1c19e933c6d",
222
+ "opens": {
223
+ "silence": true
224
+ },
225
+ "before": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
226
+ "after": "0cef327059b38467e3f7bb2ccc494150ef80e690a31e633181ffd64534b2df32",
227
+ "wrote": false
228
+ },
229
+ {
230
+ "case": "D8",
231
+ "name": "she is there and the record is not",
232
+ "state": "the being is booted and the occupant her heir was opened for is gone",
233
+ "ward": "B",
234
+ "kind": "word",
235
+ "heard": true,
236
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d9985cd3a822d8b4ff7c51daef31ab2991225bfd71f871729fd0e6ec4fdc6d81cc0db739af5c768653bb2757b20dce0d210bbbacacb37779203717be35a85f937a266cbb9f563ef35ab6dfb2aa268b825f3f1d5ec5cc1a4e2bc03299c34149b180",
237
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74ee2dfde200e3e70c38b987a1e08811d4d79177fad4387bd22187dcfb6a0d200e61decd85bebb9a83822d7bfda170d83c5baada11f4787f46b41e998375e5e800bb3751a9a8a66a70172edc19447a3975841b33edd84d64f66952b6d0582c5",
238
+ "opens": {
239
+ "quo": "removed"
240
+ },
241
+ "before": "ac56803213dec9a818db15c7b0b946fad9b05ee6e81f7f9388450fbd8648958f",
242
+ "after": "ac56803213dec9a818db15c7b0b946fad9b05ee6e81f7f9388450fbd8648958f",
243
+ "wrote": false
244
+ },
245
+ {
246
+ "case": "D9",
247
+ "name": "a heir that announces nothing",
248
+ "state": "a fresh heir, and no next in the body",
249
+ "ward": "B",
250
+ "kind": "word",
251
+ "heard": true,
252
+ "ask": "84637ecbb7afd6785f3d54e8a1f8f03161d14cdadae513c3a0fd8524f8836220ba17e2a2e1fdafdd47703c49727d98adc1b7b2eaf40456cbf0f044adbf9de9df2b44ed06169fb0f5a7f6436080c247b23f1ed9c20d93369718a7bc0e69ef9ba4e4568b41e0ad0926c9e1db1d87dcf276c5578174e2b1ddfcf76db302c4665c8b2a92cb4972f12098463a342fe7def3d67eed5951d305b7fd3421a8c2303e2277fb53b6f67ffdf1a70df22cdcacb15381d1e6acc757bf4535f4c28e1283269e8139b10710ecd0648e63ef3aa6536a694eb28ef6662d14d7f9492015e9ef85734c6e420dc0eef0fbe560d2bf4029fb5d37e38972cbf17e9d9b7809b4d4200ad6098aba8fca967288509acc3c22056a7cef0da21ab8ac7fa279061d5b824464a21b63704485aead00bca83c724e4999b7c247130a027532de913cdd64ebf9b0ce3c",
253
+ "reply": "5f1426463a519ded7693446c34eb6751015d932d4d929557abf3ee32ecfdcc192baea0548611fe8d03fa77d1ac61689b8ba92c3370c3e2d832328ac1595d9d421c8d48e32b9a0b246bf24614a286d0df0ad99cdbd637102870d1e8e95c620498fac0bcd1ba582435b1327de076f8d2e22679b9c1e0a1e14527e1bed1941a6f582141b7b5b5",
254
+ "opens": {
255
+ "quo": "unannounced"
256
+ },
257
+ "before": "d0eef8ac1466acb55969bc26b3abe1efc7da1536279b8f5579429308a5ce0367",
258
+ "after": "d0eef8ac1466acb55969bc26b3abe1efc7da1536279b8f5579429308a5ce0367",
259
+ "wrote": false
260
+ },
261
+ {
262
+ "case": "D9",
263
+ "name": "a bound key that announces nothing",
264
+ "state": "a key the door already vouched for, and no next in the body",
265
+ "ward": "B",
266
+ "kind": "object",
267
+ "heard": true,
268
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d9985cd3a822d8b4ff7c51daef31ab2991225bfd71f871729fd0e6ec4fdc6d81cc0db739af5c768653bb2757b20dce0d210bbbacacb37779203717be35a85f937a266cbb9f563ef35ab6dfb2aa268b825f3f1d5ec5cc1a4e2bc03299c34149b180",
269
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a750f5da9979586e2fd5c686765810de652eae81f6d65bb704d6820eb59123f51202a9f7b952bfe24eaa05da66b584ad9697dd8c5f86f18e8124a50d54b06a30061bc9a8e219ec0dd8fac9d312991f9b5c12240d44f14f84d6bb8fa3daf822b9dbc48ca9552a86d8bf1b12a22468ca6fcd43192b26040e9b78b8b7a17532c7c9775ce18a7c26b0a3f8af2d65b15682c82cb3a804c77072bbe1a14562af60fdfe99204e7cab5271fbf3edeb1d3ffc71",
270
+ "opens": {
271
+ "object": {
272
+ "hi": "g1"
273
+ },
274
+ "seen": "b51674a53e5fa1e707b2cf1f322ffaefa54bde51436f12b5853741570771618f"
275
+ },
276
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
277
+ "after": "eb0d99882afb6353165fdad8799f31414f8f9fba268bd077993b096654588f31",
278
+ "wrote": true
279
+ },
280
+ {
281
+ "case": "D10",
282
+ "name": "a number already spent",
283
+ "state": "a bound key, a seq at or below the mark",
284
+ "ward": "B",
285
+ "kind": "word",
286
+ "heard": true,
287
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35ed657218484803f2fe5c827ba406d909e7a27df418437687efd338dd921293e56186f1ed2c0cd2b07648aacadc56034e397a15c8399fed53930390d4119cdd52312169f1ece0b84c02aaa408ccdd1acb079879ea0f2d2ebb15a15394e7a0e22ded4fe77d6879f23a982d28bef4aee07a2241e7fab279af3254",
288
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74ee2dfde200e3e70de818f6b1f4ede7fc3dd501392b9f23dfff145b7d1fd60c8dbb0ab26ff7dd66f6363e24d2c6a2efa26e468654c0ee8cfe8f033fd70096bad181116f4d9af00e1f81746a28b31fd67038b4536107326ff221138148bc59727",
289
+ "opens": {
290
+ "quo": "repeated"
291
+ },
292
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
293
+ "after": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
294
+ "wrote": false
295
+ },
296
+ {
297
+ "case": "D11",
298
+ "name": "she threw",
299
+ "state": "a bound key on an ask that raises",
300
+ "ward": "B",
301
+ "kind": "word",
302
+ "heard": true,
303
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d3925fd2e52cd6f7ec69458bf770ad295d490ae9cb2baaeb0e491098845f38d60f1801811937181f651667622b8f02054378fb442a71e81bf80b4255a068975b7f6a0e95bb906d7ced6000349b06859a29f516bd2070aec3d53bc9c42747cf62",
304
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74ee2dfde200e387ddc81993d07f5ad7025106aae5e4741c9be9d82f9e9ad5d90b806f1d8303ee0c75f106f7652a73c6a1312d11b7947537198eeca32946be853e37d96a62ce2d2b95f54519faef2dc35227d4becd78da6cb5d940ca1e4",
305
+ "opens": {
306
+ "quo": "threw"
307
+ },
308
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
309
+ "after": "0af31511f1fb9f98fc84fd817efa847e6be922f7e537f83f60b9a7298306ebd0",
310
+ "wrote": true
311
+ },
312
+ {
313
+ "case": "D12",
314
+ "name": "she said silence",
315
+ "state": "a bound key on an ask that answers the value silence",
316
+ "ward": "B",
317
+ "kind": "silence",
318
+ "heard": true,
319
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76c08859dab322d8b4ff7c51daef31ab29915344dccc90cf697d08ea0b2bb00e6776c286ab75b4da33844f177a096a0d955fb83096bbb748bb099b0eb1b1f6ae519aa3f1d93795c190ecee293e03ec3ef159bd0ce64ea70728540a68ed570e031c24",
320
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74cfedc99744f293794909c6a1f57c8e4a787dbe3591c2f543539f1013d8a86f6810e7f24e485766763b2db3642dedf361f92900101a4e9a8cdded78fe397e952f7e7f446149cbb238ab3596b772ee9767b9f8d2ecb1dfa3ba33d75cad543",
321
+ "opens": {
322
+ "silence": true
323
+ },
324
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
325
+ "after": "0af31511f1fb9f98fc84fd817efa847e6be922f7e537f83f60b9a7298306ebd0",
326
+ "wrote": true
327
+ },
328
+ {
329
+ "case": "D13",
330
+ "name": "a word out of her",
331
+ "state": "a bound key on an ask that returns a shape only a ward may make",
332
+ "ward": "B",
333
+ "kind": "word",
334
+ "heard": true,
335
+ "ask": "3f43ed1fa30e3cfa3b4fd56b428e3d3c9f8561a11a6a20c76c38332f468ead0124c1b80f327342ce552b30a7ace0af22f5bb02737198288e8342a5bcfb41321c078f47c0f4c288681e134f1aa1c6262ce862b0a391196060d3107054933b5794d3c099133add19e1532fed4f8609cdd6f13d83d492606286e34bcccb6523b0f2d02188ccef483c4fd53283d8570ec0f837248276d7fe5fd7df0a361aded88bc98bc735b39b0adffd1410ac10acbb79fb0561f5a04e1990f3cedc9b13352805c8038b1b35f177345d075948a5a84e8878a41acb54aef478fe080923c1a58c76d39c549deb2295e4f97d1493b676adbc9ac462bc76aeca060a3dfb5b547dde4b43504507eaceb2ea2829389ec62c359df96cf6e0fbf0c5edb96ffc5f254994cce731764d7cf5adc66ef71afb41b3d29788ef4b6c2803ae9627306220e5ffeb",
336
+ "reply": "a8cf51bfc797db309b9d1d0ff388ab9681f00d6d96c4a32fc5c4f2c71b130a3402a74ee2dfde200e387ddc81993d07f5ad7025106aae5e4741c9be9d82f9e9ad5d90b806f1d8303ee0c75f106f7652a73c6a1312d11b7947537198eeca32946be853e37d96a62ce2d2b95f54519faef2dc35227d4becd78da6cb5d940ca1e4",
337
+ "opens": {
338
+ "quo": "threw"
339
+ },
340
+ "before": "d2330d40c0e9dc0cba9f5f6a5a1a6a79cb02d3b93f91642d1f19225e1c53a743",
341
+ "after": "0af31511f1fb9f98fc84fd817efa847e6be922f7e537f83f60b9a7298306ebd0",
342
+ "wrote": true
343
+ }
344
+ ]
345
+ }
package/quo-kit.md CHANGED
@@ -33,24 +33,67 @@ which is how a consumer does. `test/package.test.ts` is the one
33
33
  suite that meets the package as a stranger: it packs the tarball,
34
34
  installs it into an empty folder, and imports every entry point under
35
35
  plain Node. `npm pack --dry-run` shows what ships: `dist/`, the four
36
- source folders, the vectors, the papers, the README, the licence and
37
- the notice, and nothing else. Two papers ship, `SPEC.md` and `quo-kit.md`,
38
- both copied in by the build: the protocol is the truth the source and the
39
- vectors are read against, and a kit in another language is written against it
40
- and nothing else, while this paper says which of what it sees here was a
41
- choice. Publishing runs both
42
- gates first, `npm run check` and `npm run check:terrain`, and refuses on a
36
+ source folders, the protocol shelf, this paper, the README, the licence and
37
+ the notice, and nothing else. Two papers ship and the build copies both in,
38
+ each to where it belongs: the spec into `protocol/`, beside the vectors it
39
+ is read against and away from every line of TypeScript, because that folder
40
+ is what a kit in another language is written against and nothing else; this
41
+ paper to the package root, where it says which of what a reader sees here
42
+ was a choice. Publishing runs both
43
+ gates first, `npm run check` and `npm run deep`, and refuses on a
43
44
  failure.
44
45
 
45
46
  ```
47
+ protocol/ the shelf a second kit reads. SPEC.md, copied in by the build, and the vectors beside it.
48
+ protocol/vectors/ fixed inputs and outputs: the arithmetic, Quo's own framing, the frames on the wire, the door's thirteen cases.
46
49
  src/being/ the Being side. types, the base class, silence, the digest.
47
50
  src/ward/ the ward. the Ground contract, door, seal, arithmetic, heirs, stance, owner, partition, cells, allowance.
48
51
  src/harbor/ the memory harbor, the store, the reach, the dialer and the harbor core.
49
52
  src/conformance/ the behaviours any ward must show, and the fixed beings they are shown with.
50
53
  test/ the suites.
51
- vectors/ fixed inputs and outputs: the arithmetic, Quo's own framing, the frames on the wire.
52
54
  ```
53
55
 
56
+ ## The three shelves
57
+
58
+ The package holds three kinds of thing and they are not interchangeable.
59
+ Knowing which shelf a file is on decides whether a kit in another language
60
+ may read it, whether this paper or the spec governs it, and whether it
61
+ travels the day a second kit exists.
62
+
63
+ | shelf | what stands there | language |
64
+ | -------- | ---------------------------------------------------- | ----------------------- |
65
+ | protocol | `protocol/`: `SPEC.md` and the vectors | none, prose and bytes |
66
+ | kit | `src/being/`, `src/ward/`, `src/harbor/`, this paper | TypeScript, chosen here |
67
+ | harness | `src/conformance/`, `test/` | TypeScript, ours |
68
+
69
+ The protocol shelf is the only one a kit in Rust or Go reads. It is a
70
+ document that assumes nothing and four files of fixed bytes, and it is
71
+ written so that folder alone, lifted into an empty repository, is the whole
72
+ protocol. Nothing on it imports anything, because nothing on it is code.
73
+
74
+ The kit shelf is this interpretation and another kit may refuse every line
75
+ of it: a base class, a spelling for silence, a store interface, a reach, a
76
+ dialer, a file layout.
77
+
78
+ The harness shelf proves the kit shelf, and it is not the protocol however
79
+ much it reads like it. `src/conformance/` imports `Being`, `silence.ts`,
80
+ `digest.ts` and the kit's own `Store` and `Reach`, so a kit in another
81
+ language cannot run one line of it. It is exported all the same, as
82
+ `@quo-systems/quo/conformance`, because every harbor the dock stands on is
83
+ a TypeScript harbor and the suite is how one is accepted. The day a second
84
+ kit exists, the conformance suite does not run there. It is ported: a kit
85
+ writes the six obligations of the probe, carries the suite and its beings
86
+ into its own language, and reads them beside its own tests.
87
+
88
+ The hand to that kit is two things of two kinds, as the spec has it. The
89
+ vectors are the byte-level hand and the ported checklist is the
90
+ behavioural one. The suite does not become data, because the beings it is
91
+ shown with run only in the ward its kit wrote. The four areas are the
92
+ whole byte-level hand: `arithmetic.json`, `framing.json`, `wire.json` and
93
+ `door.json`, the last being the door's thirteen cases, each an arrival with
94
+ the bytes in, the bytes out and the partition's digest on both sides of the
95
+ judgement. The shelf owes nothing beyond them.
96
+
54
97
  Entry points: `@quo-systems/quo` is the Being side, `@quo-systems/quo/ward`
55
98
  is `Ward`, `@quo-systems/quo/harbor` is `MemoryHarbor`, `Harbor`, the
56
99
  store, the reach and the dialer, and `@quo-systems/quo/conformance` is
@@ -246,7 +289,7 @@ ground
246
289
  instantiate (class name, stance) -> object | null
247
290
  carry (ward pk, bytes) -> bytes | undefined undefined: no door was reached. a throw is read the same.
248
291
  random (n) -> n bytes of entropy
249
- wrote () -> nothing. said after every write to the partition. left out by a harbor that keeps nothing.
292
+ wrote (row) -> nothing. said after every write, naming the row: a being by her key, or HEAD. left out by a harbor that keeps nothing.
250
293
  lend lend(name, take) -> taken. left out by a harbor that lends nothing.
251
294
  ```
252
295
 
@@ -295,6 +338,19 @@ The seal is `src/ward/seal.ts` and the arithmetic is `src/ward/arithmetic.ts`.
295
338
  before a reply is. `test/ward.test.ts` reads every byte string that crossed,
296
339
  so that nothing inner is readable in the bytes.
297
340
 
341
+ An ask over two wards on two harbors spends thirty-four calls into
342
+ `crypto.subtle`, fourteen of them key imports, and `test/cost.test.ts` holds
343
+ it to forty and sixteen. Importing a key is the most expensive thing on that
344
+ path and most of the imports are the same key again: a ward signs every reply
345
+ with one key, opens every ask with one padlock, and verifies a relation under
346
+ the key it verified it under last time. So the arithmetic keeps an imported
347
+ key by the bytes it was imported from, and the public half beside the key it
348
+ was read from. The cache is bounded at `KEYS`, five hundred and twelve, least
349
+ recently used out, because a relation mints a fresh key on every ask and one
350
+ that only grew would hold a key for every ask a ward ever made. None of it is
351
+ a decision a peer can see: a kit that caches nothing speaks the same bytes,
352
+ which is why this is the kit's paper and not the protocol's.
353
+
298
354
  ## The harbor side
299
355
 
300
356
  The **store** is `src/harbor/store.ts`, the **reach** is
@@ -306,6 +362,17 @@ each have theirs, outside this tree, and every one of them passes
306
362
  `src/conformance/store.ts` untouched, as every reach passes
307
363
  `src/conformance/reach.ts`.
308
364
 
365
+ A store keeps a ward in rows. A being's cells are the one part of a partition
366
+ that grows without limit, so she is a row of her own, her cells and her bind
367
+ table under her key; everything else is one head row, and every part of that
368
+ is bounded already. `wrote` names the row, the harbor gathers the names into
369
+ the burst it saves, and `save` is handed them beside the partition. What a
370
+ store does with them is its own: `rowsOf` in `src/harbor/store.ts` is what
371
+ one writing the few uses, and one writing all of it every time is correct and
372
+ slower. The split itself is `src/ward/partition.ts`, where the shape is, so
373
+ that a harbor keeps what it is given and reads none of it, and a field that
374
+ file grows later needs no line in any store to survive a round trip.
375
+
309
376
  The dialer's wait doubles from a second to thirty when a line drops, and
310
377
  returns to that first second where the far side announced and was taken.
311
378
  Those are this harbor's numbers: what a far side sees is only that a dialer
@@ -378,7 +445,15 @@ passes the same suite. Those tests are the checklist, not the mock.
378
445
  by its numbers: the five cases and two unreacheds of her ward, the thirteen
379
446
  cases of the door with a partition snapshot under each, seven strangers
380
447
  met with one silence and six bound keys hearing their word, hops refused
381
- at zero, and the six lines of the law of one silence.
448
+ at zero, and the six lines of the law of one silence. The world it runs in
449
+ and the thirteen cases as records are `test/door.ts`, which draws no
450
+ entropy from the device: every byte comes from one SplitMix64 stream, so
451
+ the cases are the same bytes twice. The suite reads
452
+ `protocol/vectors/door.json` and holds the tree to it, and the two laws it
453
+ states over the whole list, one length for every stranger and one
454
+ plaintext under the box, run over the corpus rather than a table beside
455
+ it. `test/write-door-vectors.ts` writes that corpus, by a hand and never
456
+ by the gate: a diff in it is a protocol change.
382
457
  - `test/blueprint.test.ts`: blueprints and instantiation through a real
383
458
  ward. What a boot leaves behind, what a restart brings back when the code
384
459
  moved under the cells, the gate and the door, the reserved ids.
@@ -393,9 +468,9 @@ passes the same suite. Those tests are the checklist, not the mock.
393
468
  again under the same id; a taker that will not take leaves the faculty no
394
469
  occupant and no key, and the next lend stands; and a being taken out of her
395
470
  ward lends nothing.
396
- - `test/seal.test.ts`: the arithmetic against `vectors/arithmetic.json`,
471
+ - `test/seal.test.ts`: the arithmetic against `protocol/vectors/arithmetic.json`,
397
472
  then the seal, round trip, and what it refuses; then the framing against
398
- `vectors/framing.json`. The arithmetic is standard and any language has
473
+ `protocol/vectors/framing.json`. The arithmetic is standard and any language has
399
474
  it. The framing is Quo's own, and a kit that reproduces the hashes and
400
475
  not the ward pk, the digest, the signed ask body, the two sealed shapes,
401
476
  the invitation or the knock is not this protocol. Every seed in that file
@@ -441,7 +516,7 @@ passes the same suite. Those tests are the checklist, not the mock.
441
516
  the store with the hints; the dialer over a stubbed line, announce, a claim proven
442
517
  at a real door before it binds and a claim nobody there holds left
443
518
  unbound, fallback, unbind and the wait before it dials again; and the frames against
444
- `vectors/wire.json`, the ask, the reply, nothing delivered and the
519
+ `protocol/vectors/wire.json`, the ask, the reply, nothing delivered and the
445
520
  announce, so a kit reproduces the bytes on a socket; and the request
446
521
  reach against the request record in the same file, over a fetch that
447
522
  sees what a listener would, one POST with the suite in its header, the
@@ -461,6 +536,14 @@ passes the same suite. Those tests are the checklist, not the mock.
461
536
  one by one; that the arithmetic spends every one of them; and the two ways
462
537
  a terrain can be short -- no `crypto.subtle` at all, and a subtle without
463
538
  the curves -- each failing at the first call, in one sentence.
539
+ - `test/cost.test.ts`: what an ask costs. Every other suite is blind to it:
540
+ a change that doubles the work per ask leaves all of them green. The
541
+ assertion is the count of calls into `crypto.subtle`, which is the same
542
+ number on every terrain and does not move because another lane of the gate
543
+ is running; a regression in it is somebody deriving again what the ward
544
+ already holds. Beside it, that the kept keys stay under their bound however
545
+ long a ward talks, and one wall clock set an order of magnitude wide, which
546
+ is a smoke alarm and not a measurement.
464
547
  - `test/package.test.ts`: the package as a stranger meets it. The tarball
465
548
  is packed, installed into an empty folder with nothing but Node, and
466
549
  every entry point the exports map names is imported. Every other suite
@@ -480,7 +563,7 @@ passes the same suite. Those tests are the checklist, not the mock.
480
563
  nowhere else in this repository. A terrain whose binary is absent skips and
481
564
  names the command that installs it; it never passes quietly.
482
565
  `test/terrain/engine.ts` runs the bundle in another engine on this machine.
483
- Behind `npm run check:terrain`. `test/terrain/bundle.ts` is the
566
+ Behind `npm run deep:quo`. `test/terrain/bundle.ts` is the
484
567
  bundler and the reference run, `test/terrain/exercise.ts` is what every
485
568
  terrain runs, `test/terrain/floor.ts` is the floor -- each written once, so
486
569
  no terrain can be probed for less than another.
@@ -516,7 +599,7 @@ is no CI; the gate runs in seconds and is run before every commit. Nothing
516
599
  red is committed except a test marked todo, which is a claim the tree does
517
600
  not yet meet and says so.
518
601
 
519
- `npm run check` is Node alone, and stays fast. `npm run check:terrain` is
602
+ `npm run check` is Node alone, and stays fast. `npm run deep:quo` is
520
603
  every other terrain, the browser, workerd, Deno and Bun, kept apart because
521
604
  each is a binary of its own and the browser is a download and not a
522
605
  package: a fresh clone needs `npx playwright install chromium` first, and is