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.
- package/AUTHORING.md +741 -0
- package/KIT-SPEC.md +286 -0
- package/LICENSE +1 -1
- package/NOTICE +6 -2
- package/README.md +97 -424
- package/dist/app/app-ground.d.ts +18 -0
- package/dist/app/app-ground.js +25 -0
- package/dist/app/index.d.ts +2 -0
- package/dist/app/index.js +5 -0
- package/dist/app/native.d.ts +46 -0
- package/dist/app/native.js +101 -0
- package/dist/being/being.d.ts +229 -0
- package/dist/being/being.js +20 -0
- package/dist/being/covers.d.ts +9 -0
- package/dist/being/covers.js +21 -0
- package/dist/being/index.d.ts +3 -0
- package/dist/being/index.js +5 -0
- package/dist/being/need.d.ts +49 -0
- package/dist/being/need.js +33 -0
- package/dist/being/schema.d.ts +100 -0
- package/dist/being/schema.js +132 -0
- package/dist/being/table.d.ts +42 -0
- package/dist/being/table.js +288 -0
- package/dist/bench/bench-ground.d.ts +55 -0
- package/dist/bench/bench-ground.js +101 -0
- package/dist/bench/bench.d.ts +87 -0
- package/dist/bench/bench.js +260 -0
- package/dist/bench/fake-carry.d.ts +32 -0
- package/dist/bench/fake-carry.js +56 -0
- package/dist/bench/fake-clock.d.ts +17 -0
- package/dist/bench/fake-clock.js +34 -0
- package/dist/bench/fake-custody.d.ts +9 -0
- package/dist/bench/fake-custody.js +10 -0
- package/dist/bench/fake-faculty.d.ts +25 -0
- package/dist/bench/fake-faculty.js +48 -0
- package/dist/bench/fake-keys.d.ts +5 -0
- package/dist/bench/fake-keys.js +9 -0
- package/dist/bench/fake-memory.d.ts +14 -0
- package/dist/bench/fake-memory.js +46 -0
- package/dist/bench/fake-network.d.ts +57 -0
- package/dist/bench/fake-network.js +169 -0
- package/dist/bench/index.d.ts +11 -0
- package/dist/bench/index.js +13 -0
- package/dist/bench/seeded.d.ts +11 -0
- package/dist/bench/seeded.js +37 -0
- package/dist/bench/settle.d.ts +2 -0
- package/dist/bench/settle.js +49 -0
- package/dist/bench/stewards.d.ts +17 -0
- package/dist/bench/stewards.js +20 -0
- package/dist/bodies/class-list.d.ts +14 -0
- package/dist/bodies/class-list.js +33 -0
- package/dist/bodies/joined-carry.d.ts +23 -0
- package/dist/bodies/joined-carry.js +42 -0
- package/dist/bodies/noble-crypto.d.ts +22 -0
- package/dist/bodies/noble-crypto.js +88 -0
- package/dist/bodies/seed-keys.d.ts +10 -0
- package/dist/bodies/seed-keys.js +42 -0
- package/dist/bodies/strict-tools.d.ts +10 -0
- package/dist/bodies/strict-tools.js +306 -0
- package/dist/bodies/web-carry.d.ts +65 -0
- package/dist/bodies/web-carry.js +224 -0
- package/dist/bodies/web-clock.d.ts +12 -0
- package/dist/bodies/web-clock.js +33 -0
- package/dist/browser/browser-ground.d.ts +69 -0
- package/dist/browser/browser-ground.js +219 -0
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.js +7 -0
- package/dist/browser/indexeddb-memory.d.ts +17 -0
- package/dist/browser/indexeddb-memory.js +97 -0
- package/dist/browser/locked-custody.d.ts +25 -0
- package/dist/browser/locked-custody.js +89 -0
- package/dist/browser/origin-classes.d.ts +7 -0
- package/dist/browser/origin-classes.js +31 -0
- package/dist/foundation.d.ts +150 -0
- package/dist/foundation.js +4 -0
- package/dist/ground/ground.d.ts +177 -0
- package/dist/ground/ground.js +363 -0
- package/dist/house/crossing.d.ts +37 -0
- package/dist/house/crossing.js +131 -0
- package/dist/house/house.d.ts +80 -0
- package/dist/house/house.js +1753 -0
- package/dist/house/rows-shape.d.ts +103 -0
- package/dist/house/rows-shape.js +12 -0
- package/dist/house/rows.d.ts +27 -0
- package/dist/house/rows.js +168 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.js +25 -14
- package/dist/node/bridge.d.ts +17 -0
- package/dist/node/bridge.js +188 -0
- package/dist/node/cli.js +170 -0
- package/dist/node/custody.d.ts +20 -0
- package/dist/node/custody.js +34 -0
- package/dist/node/file-keys.d.ts +7 -0
- package/dist/node/file-keys.js +30 -0
- package/dist/node/file-memory.d.ts +13 -0
- package/dist/node/file-memory.js +91 -0
- package/dist/node/folder-classes.d.ts +5 -0
- package/dist/node/folder-classes.js +40 -0
- package/dist/node/gone.d.ts +2 -0
- package/dist/node/gone.js +7 -0
- package/dist/node/hand.d.ts +29 -0
- package/dist/node/hand.js +85 -0
- package/dist/node/held-keys.d.ts +14 -0
- package/dist/node/held-keys.js +36 -0
- package/dist/node/http.d.ts +11 -0
- package/dist/node/http.js +90 -0
- package/dist/node/index.d.ts +13 -0
- package/dist/node/index.js +15 -0
- package/dist/node/keychain-keys.d.ts +10 -0
- package/dist/node/keychain-keys.js +51 -0
- package/dist/node/ledger-memory.d.ts +17 -0
- package/dist/node/ledger-memory.js +151 -0
- package/dist/node/lock.d.ts +10 -0
- package/dist/node/lock.js +78 -0
- package/dist/node/node-ground.d.ts +33 -0
- package/dist/node/node-ground.js +147 -0
- package/dist/node/notify.d.ts +1 -0
- package/dist/node/notify.js +18 -0
- package/dist/node/tcp-carry.d.ts +39 -0
- package/dist/node/tcp-carry.js +216 -0
- package/dist/node/websocket.d.ts +6 -0
- package/dist/node/websocket.js +118 -0
- package/dist/quo/frame.d.ts +20 -0
- package/dist/quo/frame.js +48 -0
- package/dist/quo/room.d.ts +154 -0
- package/dist/quo/room.js +362 -0
- package/dist/serve/index.d.ts +27 -0
- package/dist/serve/index.js +55 -0
- package/package.json +49 -47
- package/dist/browser.d.ts +0 -1
- package/dist/browser.js +0 -8
- package/dist/cli.js +0 -16
- package/dist/core/being/being.d.ts +0 -17
- package/dist/core/being/being.js +0 -72
- package/dist/core/being/digest.d.ts +0 -3
- package/dist/core/being/digest.js +0 -17
- package/dist/core/being/faculty.d.ts +0 -10
- package/dist/core/being/faculty.js +0 -77
- package/dist/core/being/index.d.ts +0 -6
- package/dist/core/being/index.js +0 -8
- package/dist/core/being/kind.d.ts +0 -6
- package/dist/core/being/kind.js +0 -34
- package/dist/core/being/types.d.ts +0 -61
- package/dist/core/being/types.js +0 -4
- package/dist/core/being/words.d.ts +0 -13
- package/dist/core/being/words.js +0 -14
- package/dist/core/browser/index.d.ts +0 -37
- package/dist/core/browser/index.js +0 -196
- package/dist/core/browser/worker.d.ts +0 -11
- package/dist/core/browser/worker.js +0 -37
- package/dist/core/cli/command.d.ts +0 -13
- package/dist/core/cli/command.js +0 -330
- package/dist/core/cli/edge.d.ts +0 -7
- package/dist/core/cli/edge.js +0 -79
- package/dist/core/cli/harbor.d.ts +0 -25
- package/dist/core/cli/harbor.js +0 -115
- package/dist/core/contract/index.d.ts +0 -42
- package/dist/core/contract/index.js +0 -34
- package/dist/core/contract/link.d.ts +0 -4
- package/dist/core/contract/link.js +0 -45
- package/dist/core/crypto/aes.d.ts +0 -3
- package/dist/core/crypto/aes.js +0 -24
- package/dist/core/crypto/bytes.d.ts +0 -6
- package/dist/core/crypto/bytes.js +0 -33
- package/dist/core/crypto/ed25519.d.ts +0 -3
- package/dist/core/crypto/ed25519.js +0 -93
- package/dist/core/crypto/hash.d.ts +0 -2
- package/dist/core/crypto/hash.js +0 -11
- package/dist/core/crypto/index.d.ts +0 -7
- package/dist/core/crypto/index.js +0 -10
- package/dist/core/crypto/json.d.ts +0 -8
- package/dist/core/crypto/json.js +0 -250
- package/dist/core/crypto/mlkem.d.ts +0 -12
- package/dist/core/crypto/mlkem.js +0 -36
- package/dist/core/crypto/subtle.d.ts +0 -3
- package/dist/core/crypto/subtle.js +0 -11
- package/dist/core/crypto/x25519.d.ts +0 -2
- package/dist/core/crypto/x25519.js +0 -24
- package/dist/core/edge/index.d.ts +0 -164
- package/dist/core/edge/index.js +0 -739
- package/dist/core/edge/kit.d.ts +0 -2
- package/dist/core/edge/kit.js +0 -2
- package/dist/core/folder/index.d.ts +0 -18
- package/dist/core/folder/index.js +0 -130
- package/dist/core/git/http.d.ts +0 -6
- package/dist/core/git/http.js +0 -102
- package/dist/core/git/index.d.ts +0 -5
- package/dist/core/git/index.js +0 -10
- package/dist/core/git/object.d.ts +0 -40
- package/dist/core/git/object.js +0 -103
- package/dist/core/git/pack.d.ts +0 -9
- package/dist/core/git/pack.js +0 -171
- package/dist/core/git/store.d.ts +0 -23
- package/dist/core/git/store.js +0 -120
- package/dist/core/git/zlib.d.ts +0 -6
- package/dist/core/git/zlib.js +0 -210
- package/dist/core/harbor/carrying.d.ts +0 -51
- package/dist/core/harbor/carrying.js +0 -69
- package/dist/core/harbor/catalogue.d.ts +0 -33
- package/dist/core/harbor/catalogue.js +0 -365
- package/dist/core/harbor/dna.d.ts +0 -13
- package/dist/core/harbor/dna.js +0 -120
- package/dist/core/harbor/dock.d.ts +0 -62
- package/dist/core/harbor/dock.js +0 -381
- package/dist/core/harbor/harbor.d.ts +0 -16
- package/dist/core/harbor/harbor.js +0 -438
- package/dist/core/harbor/index.d.ts +0 -11
- package/dist/core/harbor/index.js +0 -14
- package/dist/core/harbor/memory.d.ts +0 -10
- package/dist/core/harbor/memory.js +0 -25
- package/dist/core/harbor/package.d.ts +0 -20
- package/dist/core/harbor/package.js +0 -172
- package/dist/core/harbor/probe.d.ts +0 -22
- package/dist/core/harbor/probe.js +0 -15
- package/dist/core/harbor/registry.d.ts +0 -15
- package/dist/core/harbor/registry.js +0 -110
- package/dist/core/harbor/root-line.d.ts +0 -7
- package/dist/core/harbor/root-line.js +0 -9
- package/dist/core/harbor/terrain.d.ts +0 -25
- package/dist/core/harbor/terrain.js +0 -28
- package/dist/core/http/index.d.ts +0 -2
- package/dist/core/http/index.js +0 -154
- package/dist/core/http/websocket.d.ts +0 -29
- package/dist/core/http/websocket.js +0 -133
- package/dist/core/line/answer.d.ts +0 -8
- package/dist/core/line/answer.js +0 -60
- package/dist/core/line/frame.d.ts +0 -29
- package/dist/core/line/frame.js +0 -77
- package/dist/core/line/ground.d.ts +0 -3
- package/dist/core/line/ground.js +0 -7
- package/dist/core/line/index.d.ts +0 -4
- package/dist/core/line/index.js +0 -8
- package/dist/core/line/web.d.ts +0 -12
- package/dist/core/line/web.js +0 -117
- package/dist/core/node/index.d.ts +0 -23
- package/dist/core/node/index.js +0 -124
- package/dist/core/pointer/bodies.d.ts +0 -31
- package/dist/core/pointer/bodies.js +0 -118
- package/dist/core/pointer/index.d.ts +0 -2
- package/dist/core/pointer/index.js +0 -4
- package/dist/core/pointer/world.d.ts +0 -45
- package/dist/core/pointer/world.js +0 -106
- package/dist/core/proof/contracts.d.ts +0 -19
- package/dist/core/proof/contracts.js +0 -116
- package/dist/core/proof/expect.d.ts +0 -6
- package/dist/core/proof/expect.js +0 -18
- package/dist/core/proof/index.d.ts +0 -3
- package/dist/core/proof/index.js +0 -14
- package/dist/core/proof/law.d.ts +0 -25
- package/dist/core/proof/law.js +0 -715
- package/dist/core/quo/address.d.ts +0 -19
- package/dist/core/quo/address.js +0 -84
- package/dist/core/quo/door.d.ts +0 -34
- package/dist/core/quo/door.js +0 -174
- package/dist/core/quo/index.d.ts +0 -9
- package/dist/core/quo/index.js +0 -12
- package/dist/core/quo/invitation.d.ts +0 -8
- package/dist/core/quo/invitation.js +0 -19
- package/dist/core/quo/keys.d.ts +0 -40
- package/dist/core/quo/keys.js +0 -79
- package/dist/core/quo/payload.d.ts +0 -15
- package/dist/core/quo/payload.js +0 -55
- package/dist/core/quo/relations.d.ts +0 -40
- package/dist/core/quo/relations.js +0 -33
- package/dist/core/quo/reply.d.ts +0 -13
- package/dist/core/quo/reply.js +0 -35
- package/dist/core/quo/seal.d.ts +0 -42
- package/dist/core/quo/seal.js +0 -78
- package/dist/core/quo/standing.d.ts +0 -39
- package/dist/core/quo/standing.js +0 -90
- package/dist/core/tcp/index.d.ts +0 -27
- package/dist/core/tcp/index.js +0 -209
- package/dist/core/ward/allowance.d.ts +0 -14
- package/dist/core/ward/allowance.js +0 -32
- package/dist/core/ward/cells.d.ts +0 -7
- package/dist/core/ward/cells.js +0 -74
- package/dist/core/ward/house.d.ts +0 -67
- package/dist/core/ward/house.js +0 -473
- package/dist/core/ward/index.d.ts +0 -5
- package/dist/core/ward/index.js +0 -7
- package/dist/core/ward/partition.d.ts +0 -50
- package/dist/core/ward/partition.js +0 -66
- package/dist/core/ward/stance.d.ts +0 -29
- package/dist/core/ward/stance.js +0 -186
- package/dist/core/ward/ward.d.ts +0 -44
- package/dist/core/ward/ward.js +0 -140
- package/dist/core.d.ts +0 -10
- package/dist/core.js +0 -19
- package/dist/defaults/dock/index.d.ts +0 -4
- package/dist/defaults/dock/index.js +0 -11
- package/dist/defaults/index.d.ts +0 -5
- package/dist/defaults/index.js +0 -10
- package/dist/defaults/memory/index.d.ts +0 -12
- package/dist/defaults/memory/index.js +0 -39
- package/dist/defaults/tcp/index.d.ts +0 -16
- package/dist/defaults/tcp/index.js +0 -82
- package/dist/defaults/ward/index.d.ts +0 -4
- package/dist/defaults/ward/index.js +0 -11
- package/dist/defaults/web/index.d.ts +0 -15
- package/dist/defaults/web/index.js +0 -90
- package/dist/edge.d.ts +0 -1
- package/dist/edge.js +0 -9
- package/dist/kit.d.ts +0 -4
- package/dist/kit.js +0 -12
- package/dist/node.d.ts +0 -1
- package/dist/node.js +0 -8
- package/src/browser.ts +0 -10
- package/src/cli.ts +0 -15
- package/src/core/being/being.ts +0 -84
- package/src/core/being/digest.ts +0 -18
- package/src/core/being/faculty.ts +0 -76
- package/src/core/being/index.ts +0 -8
- package/src/core/being/kind.ts +0 -37
- package/src/core/being/types.ts +0 -74
- package/src/core/being/words.ts +0 -31
- package/src/core/browser/index.ts +0 -219
- package/src/core/browser/worker.ts +0 -63
- package/src/core/cli/command.ts +0 -311
- package/src/core/cli/edge.ts +0 -86
- package/src/core/cli/harbor.ts +0 -120
- package/src/core/contract/index.ts +0 -82
- package/src/core/contract/link.ts +0 -58
- package/src/core/crypto/aes.ts +0 -26
- package/src/core/crypto/bytes.ts +0 -37
- package/src/core/crypto/ed25519.ts +0 -92
- package/src/core/crypto/hash.ts +0 -14
- package/src/core/crypto/index.ts +0 -10
- package/src/core/crypto/json.ts +0 -241
- package/src/core/crypto/mlkem.ts +0 -38
- package/src/core/crypto/subtle.ts +0 -13
- package/src/core/crypto/x25519.ts +0 -23
- package/src/core/edge/index.ts +0 -865
- package/src/core/folder/index.ts +0 -137
- package/src/core/git/http.ts +0 -103
- package/src/core/git/index.ts +0 -10
- package/src/core/git/object.ts +0 -116
- package/src/core/git/pack.ts +0 -147
- package/src/core/git/store.ts +0 -122
- package/src/core/git/zlib.ts +0 -197
- package/src/core/harbor/carrying.ts +0 -124
- package/src/core/harbor/catalogue.ts +0 -386
- package/src/core/harbor/dna.ts +0 -116
- package/src/core/harbor/dock.ts +0 -420
- package/src/core/harbor/harbor.ts +0 -433
- package/src/core/harbor/index.ts +0 -14
- package/src/core/harbor/memory.ts +0 -31
- package/src/core/harbor/package.ts +0 -195
- package/src/core/harbor/probe.ts +0 -39
- package/src/core/harbor/registry.ts +0 -107
- package/src/core/harbor/root-line.ts +0 -19
- package/src/core/harbor/terrain.ts +0 -54
- package/src/core/http/index.ts +0 -147
- package/src/core/http/websocket.ts +0 -124
- package/src/core/line/answer.ts +0 -60
- package/src/core/line/frame.ts +0 -83
- package/src/core/line/ground.ts +0 -18
- package/src/core/line/index.ts +0 -8
- package/src/core/line/web.ts +0 -123
- package/src/core/node/index.ts +0 -139
- package/src/core/pointer/bodies.ts +0 -122
- package/src/core/pointer/index.ts +0 -4
- package/src/core/pointer/world.ts +0 -134
- package/src/core/proof/contracts.ts +0 -134
- package/src/core/proof/expect.ts +0 -25
- package/src/core/proof/index.ts +0 -14
- package/src/core/proof/law.ts +0 -742
- package/src/core/quo/address.ts +0 -87
- package/src/core/quo/door.ts +0 -180
- package/src/core/quo/index.ts +0 -12
- package/src/core/quo/invitation.ts +0 -19
- package/src/core/quo/keys.ts +0 -91
- package/src/core/quo/payload.ts +0 -61
- package/src/core/quo/relations.ts +0 -62
- package/src/core/quo/reply.ts +0 -38
- package/src/core/quo/seal.ts +0 -101
- package/src/core/quo/standing.ts +0 -111
- package/src/core/stand/main.ts +0 -20
- package/src/core/stand/stand.ts +0 -259
- package/src/core/tcp/index.ts +0 -227
- package/src/core/ward/allowance.ts +0 -47
- package/src/core/ward/cells.ts +0 -77
- package/src/core/ward/house.ts +0 -524
- package/src/core/ward/index.ts +0 -7
- package/src/core/ward/partition.ts +0 -117
- package/src/core/ward/stance.ts +0 -207
- package/src/core/ward/ward.ts +0 -166
- package/src/core.ts +0 -55
- package/src/defaults/dock/index.ts +0 -12
- package/src/defaults/index.ts +0 -10
- package/src/defaults/memory/index.ts +0 -50
- package/src/defaults/tcp/index.ts +0 -89
- package/src/defaults/ward/index.ts +0 -12
- package/src/defaults/web/index.ts +0 -97
- package/src/edge.ts +0 -11
- package/src/index.ts +0 -18
- package/src/kit.ts +0 -15
- package/src/node.ts +0 -10
- /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
|
|
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
|
|
2
|
+
Copyright 2026 Bookarest Digital SRL
|
|
3
3
|
|
|
4
|
-
This product includes software developed by
|
|
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.
|