Implement durable typed journals, subscriptions, and Reader document connections

Add checked native journal/subscription bindings, managed-reference retention,
bounded history and backpressure, atomic delivery receipts, and fenced hosting.
Preserve source publication prediction and replica reconciliation; subscription
attachment, controls, and delivery remain authoritative in this initial version.

Connect independent manual/Gutenberg document producers to Reader bookshelves
through typed adapters. Add connection inspection, shared provider selection,
authoring documentation, and restart/rejection/fan-out integration coverage.

Verified compiler suite (287 passed, two existing skips), Nix runtime and
PostgreSQL qualification, five example assemblies, headless Reader integration,
Chromium Reader integration, resource pins, formatting, and lint.
No pinned workspace runtime was deployed.
This commit is contained in:
Timothy J. Aveni
2026-09-28 19:35:51 -07:00
parent 0ace71eae6
commit 1e72713ae2
30 changed files with 2949 additions and 2033 deletions
File diff suppressed because one or more lines are too long
@@ -81,79 +81,81 @@ REVISION=80
SEMANTIC_MAJOR=81
ON_DELETE=82
LIFECYCLE=83
RETAIN_OTHER=84
KEYED=85
PUBLIC_TRAVERSAL=86
ID=87
DOC=88
MODE=89
EMITS=90
RECEIVER=91
REQUIRES=92
ANY=93
GET=94
SET=95
WATCH=96
START=97
STOP=98
READ=99
WRITE=100
RESOLVE=101
CONNECT=102
DISCONNECT=103
CALL=104
WATCH_START=105
WATCH_STOP=106
SUBSCRIBE=107
UNSUBSCRIBE=108
REGISTER=109
CRDT=110
OPTIONAL_ONE=111
EXACTLY_ONE=112
MANY_UNIQUE=113
MANY=114
ORDERED=115
UNIT=116
WATCH_HANDLE=117
MESSAGE=118
ATOM_REF=119
INTERFACE_REF=120
OPTIONAL=121
LIST=122
RECORD=123
BOOL=124
BYTES=125
DOUBLE=126
INT32=127
INT64=128
STRING=129
UINT32=130
UINT64=131
TRUE=132
FALSE=133
NULL=134
ARROW=135
COLON=136
SEMI=137
COMMA=138
DOT=139
LBRACE=140
RBRACE=141
LBRACK=142
RBRACK=143
LPAREN=144
RPAREN=145
LT=146
GT=147
AMP=148
EQUAL=149
INTEGER=150
JSON_NUMBER=151
IDENTIFIER=152
STRING_LITERAL=153
LINE_COMMENT=154
BLOCK_COMMENT=155
WS=156
JOURNAL=84
SUBSCRIPTION=85
RETAIN_OTHER=86
KEYED=87
PUBLIC_TRAVERSAL=88
ID=89
DOC=90
MODE=91
EMITS=92
RECEIVER=93
REQUIRES=94
ANY=95
GET=96
SET=97
WATCH=98
START=99
STOP=100
READ=101
WRITE=102
RESOLVE=103
CONNECT=104
DISCONNECT=105
CALL=106
WATCH_START=107
WATCH_STOP=108
SUBSCRIBE=109
UNSUBSCRIBE=110
REGISTER=111
CRDT=112
OPTIONAL_ONE=113
EXACTLY_ONE=114
MANY_UNIQUE=115
MANY=116
ORDERED=117
UNIT=118
WATCH_HANDLE=119
MESSAGE=120
ATOM_REF=121
INTERFACE_REF=122
OPTIONAL=123
LIST=124
RECORD=125
BOOL=126
BYTES=127
DOUBLE=128
INT32=129
INT64=130
STRING=131
UINT32=132
UINT64=133
TRUE=134
FALSE=135
NULL=136
ARROW=137
COLON=138
SEMI=139
COMMA=140
DOT=141
LBRACE=142
RBRACE=143
LBRACK=144
RBRACK=145
LPAREN=146
RPAREN=147
LT=148
GT=149
AMP=150
EQUAL=151
INTEGER=152
JSON_NUMBER=153
IDENTIFIER=154
STRING_LITERAL=155
LINE_COMMENT=156
BLOCK_COMMENT=157
WS=158
'edit'=1
'module'=2
'contract'=3
@@ -237,69 +239,71 @@ WS=156
'semantic-major'=81
'on-delete'=82
'lifecycle'=83
'retain-other'=84
'keyed'=85
'public-traversal'=86
'id'=87
'doc'=88
'mode'=89
'emits'=90
'receiver'=91
'requires'=92
'any'=93
'get'=94
'set'=95
'watch'=96
'start'=97
'stop'=98
'read'=99
'write'=100
'resolve'=101
'connect'=102
'disconnect'=103
'call'=104
'watch-start'=105
'watch-stop'=106
'subscribe'=107
'unsubscribe'=108
'register'=109
'crdt'=110
'optional-one'=111
'exactly-one'=112
'many-unique'=113
'many'=114
'ordered'=115
'unit'=116
'watch-handle'=117
'message'=118
'atom-ref'=119
'interface-ref'=120
'optional'=121
'list'=122
'record'=123
'bool'=124
'bytes'=125
'double'=126
'int32'=127
'int64'=128
'string'=129
'uint32'=130
'uint64'=131
'true'=132
'false'=133
'null'=134
'->'=135
':'=136
';'=137
','=138
'.'=139
'{'=140
'}'=141
'['=142
']'=143
'('=144
')'=145
'<'=146
'>'=147
'&'=148
'='=149
'journal'=84
'subscription'=85
'retain-other'=86
'keyed'=87
'public-traversal'=88
'id'=89
'doc'=90
'mode'=91
'emits'=92
'receiver'=93
'requires'=94
'any'=95
'get'=96
'set'=97
'watch'=98
'start'=99
'stop'=100
'read'=101
'write'=102
'resolve'=103
'connect'=104
'disconnect'=105
'call'=106
'watch-start'=107
'watch-stop'=108
'subscribe'=109
'unsubscribe'=110
'register'=111
'crdt'=112
'optional-one'=113
'exactly-one'=114
'many-unique'=115
'many'=116
'ordered'=117
'unit'=118
'watch-handle'=119
'message'=120
'atom-ref'=121
'interface-ref'=122
'optional'=123
'list'=124
'record'=125
'bool'=126
'bytes'=127
'double'=128
'int32'=129
'int64'=130
'string'=131
'uint32'=132
'uint64'=133
'true'=134
'false'=135
'null'=136
'->'=137
':'=138
';'=139
','=140
'.'=141
'{'=142
'}'=143
'['=144
']'=145
'('=146
')'=147
'<'=148
'>'=149
'&'=150
'='=151
File diff suppressed because one or more lines are too long
@@ -81,79 +81,81 @@ REVISION=80
SEMANTIC_MAJOR=81
ON_DELETE=82
LIFECYCLE=83
RETAIN_OTHER=84
KEYED=85
PUBLIC_TRAVERSAL=86
ID=87
DOC=88
MODE=89
EMITS=90
RECEIVER=91
REQUIRES=92
ANY=93
GET=94
SET=95
WATCH=96
START=97
STOP=98
READ=99
WRITE=100
RESOLVE=101
CONNECT=102
DISCONNECT=103
CALL=104
WATCH_START=105
WATCH_STOP=106
SUBSCRIBE=107
UNSUBSCRIBE=108
REGISTER=109
CRDT=110
OPTIONAL_ONE=111
EXACTLY_ONE=112
MANY_UNIQUE=113
MANY=114
ORDERED=115
UNIT=116
WATCH_HANDLE=117
MESSAGE=118
ATOM_REF=119
INTERFACE_REF=120
OPTIONAL=121
LIST=122
RECORD=123
BOOL=124
BYTES=125
DOUBLE=126
INT32=127
INT64=128
STRING=129
UINT32=130
UINT64=131
TRUE=132
FALSE=133
NULL=134
ARROW=135
COLON=136
SEMI=137
COMMA=138
DOT=139
LBRACE=140
RBRACE=141
LBRACK=142
RBRACK=143
LPAREN=144
RPAREN=145
LT=146
GT=147
AMP=148
EQUAL=149
INTEGER=150
JSON_NUMBER=151
IDENTIFIER=152
STRING_LITERAL=153
LINE_COMMENT=154
BLOCK_COMMENT=155
WS=156
JOURNAL=84
SUBSCRIPTION=85
RETAIN_OTHER=86
KEYED=87
PUBLIC_TRAVERSAL=88
ID=89
DOC=90
MODE=91
EMITS=92
RECEIVER=93
REQUIRES=94
ANY=95
GET=96
SET=97
WATCH=98
START=99
STOP=100
READ=101
WRITE=102
RESOLVE=103
CONNECT=104
DISCONNECT=105
CALL=106
WATCH_START=107
WATCH_STOP=108
SUBSCRIBE=109
UNSUBSCRIBE=110
REGISTER=111
CRDT=112
OPTIONAL_ONE=113
EXACTLY_ONE=114
MANY_UNIQUE=115
MANY=116
ORDERED=117
UNIT=118
WATCH_HANDLE=119
MESSAGE=120
ATOM_REF=121
INTERFACE_REF=122
OPTIONAL=123
LIST=124
RECORD=125
BOOL=126
BYTES=127
DOUBLE=128
INT32=129
INT64=130
STRING=131
UINT32=132
UINT64=133
TRUE=134
FALSE=135
NULL=136
ARROW=137
COLON=138
SEMI=139
COMMA=140
DOT=141
LBRACE=142
RBRACE=143
LBRACK=144
RBRACK=145
LPAREN=146
RPAREN=147
LT=148
GT=149
AMP=150
EQUAL=151
INTEGER=152
JSON_NUMBER=153
IDENTIFIER=154
STRING_LITERAL=155
LINE_COMMENT=156
BLOCK_COMMENT=157
WS=158
'edit'=1
'module'=2
'contract'=3
@@ -237,69 +239,71 @@ WS=156
'semantic-major'=81
'on-delete'=82
'lifecycle'=83
'retain-other'=84
'keyed'=85
'public-traversal'=86
'id'=87
'doc'=88
'mode'=89
'emits'=90
'receiver'=91
'requires'=92
'any'=93
'get'=94
'set'=95
'watch'=96
'start'=97
'stop'=98
'read'=99
'write'=100
'resolve'=101
'connect'=102
'disconnect'=103
'call'=104
'watch-start'=105
'watch-stop'=106
'subscribe'=107
'unsubscribe'=108
'register'=109
'crdt'=110
'optional-one'=111
'exactly-one'=112
'many-unique'=113
'many'=114
'ordered'=115
'unit'=116
'watch-handle'=117
'message'=118
'atom-ref'=119
'interface-ref'=120
'optional'=121
'list'=122
'record'=123
'bool'=124
'bytes'=125
'double'=126
'int32'=127
'int64'=128
'string'=129
'uint32'=130
'uint64'=131
'true'=132
'false'=133
'null'=134
'->'=135
':'=136
';'=137
','=138
'.'=139
'{'=140
'}'=141
'['=142
']'=143
'('=144
')'=145
'<'=146
'>'=147
'&'=148
'='=149
'journal'=84
'subscription'=85
'retain-other'=86
'keyed'=87
'public-traversal'=88
'id'=89
'doc'=90
'mode'=91
'emits'=92
'receiver'=93
'requires'=94
'any'=95
'get'=96
'set'=97
'watch'=98
'start'=99
'stop'=100
'read'=101
'write'=102
'resolve'=103
'connect'=104
'disconnect'=105
'call'=106
'watch-start'=107
'watch-stop'=108
'subscribe'=109
'unsubscribe'=110
'register'=111
'crdt'=112
'optional-one'=113
'exactly-one'=114
'many-unique'=115
'many'=116
'ordered'=117
'unit'=118
'watch-handle'=119
'message'=120
'atom-ref'=121
'interface-ref'=122
'optional'=123
'list'=124
'record'=125
'bool'=126
'bytes'=127
'double'=128
'int32'=129
'int64'=130
'string'=131
'uint32'=132
'uint64'=133
'true'=134
'false'=135
'null'=136
'->'=137
':'=138
';'=139
','=140
'.'=141
'{'=142
'}'=143
'['=144
']'=145
'('=146
')'=147
'<'=148
'>'=149
'&'=150
'='=151
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff