instar 1.3.548 → 1.3.549
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/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +112 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +29 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CoherenceJournal.d.ts +1 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +23 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +27 -1
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/TopicOperatorReplicatedStore.d.ts +250 -0
- package/dist/core/TopicOperatorReplicatedStore.d.ts.map +1 -0
- package/dist/core/TopicOperatorReplicatedStore.js +413 -0
- package/dist/core/TopicOperatorReplicatedStore.js.map +1 -0
- package/dist/core/UserRegistryReplicatedStore.d.ts +287 -0
- package/dist/core/UserRegistryReplicatedStore.d.ts.map +1 -0
- package/dist/core/UserRegistryReplicatedStore.js +527 -0
- package/dist/core/UserRegistryReplicatedStore.js.map +1 -0
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +10 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +3 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/users/TopicOperatorStore.d.ts +24 -0
- package/dist/users/TopicOperatorStore.d.ts.map +1 -1
- package/dist/users/TopicOperatorStore.js +28 -0
- package/dist/users/TopicOperatorStore.js.map +1 -1
- package/dist/users/UserManager.d.ts +27 -0
- package/dist/users/UserManager.d.ts.map +1 -1
- package/dist/users/UserManager.js +44 -0
- package/dist/users/UserManager.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +19 -19
- package/src/scaffold/templates.ts +3 -1
- package/upgrades/1.3.549.md +36 -0
- package/upgrades/side-effects/multi-machine-replicated-store-ws26-user-topicop.md +123 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TopicOperatorReplicatedStore — the SEVENTH concrete consumer of the HLC replicated-store
|
|
3
|
+
* foundation (WS2.6b) and the THIRD PII kind (after WS2.3 relationships + WS2.6a user
|
|
4
|
+
* registry). It layers the `topic-operator-record` replicated kind onto the generic substrate
|
|
5
|
+
* (ReplicatedRecordEnvelope / UnionReader / ConflictStore / RollbackUnmerge / ReplicationBudget
|
|
6
|
+
* / StoreSnapshot) so that the agent knows, across machines, which VERIFIED operator a topic
|
|
7
|
+
* was bound to on its OTHER machines — ONE view of the binding history, not one-per-machine.
|
|
8
|
+
*
|
|
9
|
+
* ═══════════════════════════════════════════════════════════════════════════════════════════
|
|
10
|
+
* THE LOAD-BEARING SAFETY INVARIANT (the WHOLE point of this kind — Know Your Principal):
|
|
11
|
+
* A replicated topic-operator record is UNTRUSTED PEER DATA. It must NEVER become this
|
|
12
|
+
* machine's authoritative answer to "who is my verified operator?". The LOCAL auth-derived
|
|
13
|
+
* binding (TopicOperatorStore.setOperator from an AUTHENTICATED sender) is ALWAYS
|
|
14
|
+
* authoritative; the replicated record is ADVISORY CONTEXT ONLY — rendered as quoted
|
|
15
|
+
* untrusted data — and a replicated record can NEVER establish or override an operator. This
|
|
16
|
+
* store deliberately exposes NO setter/applier into TopicOperatorStore; it only produces a
|
|
17
|
+
* merged READ for context, wrapped in `<replicated-untrusted-data>`. This is the mechanical
|
|
18
|
+
* arm of the constitution's "Know Your Principal — An Unverified Identity Is a Guess": the
|
|
19
|
+
* operator is auth-sender-derived, never a record reach across a machine boundary.
|
|
20
|
+
* ═══════════════════════════════════════════════════════════════════════════════════════════
|
|
21
|
+
*
|
|
22
|
+
* THIS IS PURE LOGIC. No fs, no Date directly, no network. It defines:
|
|
23
|
+
*
|
|
24
|
+
* A. The `topic-operator-record` store schema — a STRICT typed validator that TYPE-CLAMPS
|
|
25
|
+
* every known field (`boundAt` ISO-8601-or-absent, `platform`/`uid` short slugs jailed,
|
|
26
|
+
* `names[]` length-bounded). DISCRIMINATED UNION on `op` (value + tombstone).
|
|
27
|
+
*
|
|
28
|
+
* B. The disclosure-minimized PROJECTION — `buildTopicOperatorRecordData` emits ONLY
|
|
29
|
+
* `{platform, uid, names, boundAt}` (fork #4), NEVER a content-name and never an extra
|
|
30
|
+
* local internal field. `recordKey` = `sha256(topicId + ":" + verified-uid)` (fork #1) —
|
|
31
|
+
* Know-Your-Principal: the binding is keyed on the topic + the AUTHENTICATED uid, never a
|
|
32
|
+
* content name.
|
|
33
|
+
*
|
|
34
|
+
* C. The TOMBSTONE builder — `buildTopicOperatorTombstoneData` emits an `op:'delete'` record
|
|
35
|
+
* so an UNBIND (a topic's operator cleared) propagates as a positive signal across an
|
|
36
|
+
* offline-then-rejoining peer instead of a record absence.
|
|
37
|
+
*
|
|
38
|
+
* D. The union-aware read — `mergeUnionToTopicOperators` collapses a `Map<recordKey,
|
|
39
|
+
* UnionResult>` into the merged view. HIGH-impact at the REPLICATION layer (append-both-
|
|
40
|
+
* and-flag — two divergent operator records for the same topic+uid never silently clobber)
|
|
41
|
+
* / ADVISORY at the READ layer (a replicated operator record is context, NEVER the
|
|
42
|
+
* authoritative principal — see the invariant above).
|
|
43
|
+
*
|
|
44
|
+
* E. Foreign-record render safety — `renderForeignTopicOperatorContext` wraps a replicated
|
|
45
|
+
* record in an explicit `<replicated-untrusted-data origin="…">` envelope that EXPLICITLY
|
|
46
|
+
* states the record is NOT the verified operator and sanitizes EVERY rendered field.
|
|
47
|
+
*
|
|
48
|
+
* DECIDED FORKS (build prompt, recorded verbatim in the PR ELI16):
|
|
49
|
+
* 1. recordKey = `sha256(topicId + ":" + verified-uid)`, NEVER a content-name
|
|
50
|
+
* (Know-Your-Principal: the binding is auth-sender-derived).
|
|
51
|
+
* 2. Impact tier = HIGH at the REPLICATION layer (append-both-and-flag), ADVISORY at the
|
|
52
|
+
* READ layer (a replicated topic-operator record is a HINT, never the authoritative
|
|
53
|
+
* principal — the UNTRUSTED-REPLICATED-OPERATOR invariant).
|
|
54
|
+
* 3. (= the invariant) a replicated record NEVER establishes/overrides the local
|
|
55
|
+
* authoritative binding; only a local authenticated setOperator does.
|
|
56
|
+
* 4. disclosure-min projection = `{platform, uid, names, boundAt}` (no extra local internal
|
|
57
|
+
* fields).
|
|
58
|
+
*
|
|
59
|
+
* SAFETY POSTURE: MECHANISM, dark by default. Nothing here blocks a user-initiated action and
|
|
60
|
+
* nothing here can change the local principal authority.
|
|
61
|
+
*/
|
|
62
|
+
import type { TopicOperator } from '../users/TopicOperatorStore.js';
|
|
63
|
+
import type { StoreFieldSchema, ReplicatedEnvelope } from './ReplicatedRecordEnvelope.js';
|
|
64
|
+
import type { ImpactTier, OriginRecord, UnionResult } from './UnionReader.js';
|
|
65
|
+
import type { ReplicatedKindBounds } from './ReplicationBudget.js';
|
|
66
|
+
import type { HlcTimestamp } from './HybridLogicalClock.js';
|
|
67
|
+
/** The stateSync config sub-key + advert suffix for this store (e.g.
|
|
68
|
+
* `multiMachine.stateSync.topicOperator.enabled`). Equal to the advert flag key
|
|
69
|
+
* `stateSyncReceive['topicOperator']`. */
|
|
70
|
+
export declare const TOPIC_OPERATOR_STORE_KEY = "topicOperator";
|
|
71
|
+
/** The JournalKind string this store rides — the DUAL-REGISTRY's dynamic half. MUST also be
|
|
72
|
+
* present in CoherenceJournal.JOURNAL_KINDS (the static half), or the store advertises
|
|
73
|
+
* receive=true yet serves/applies/pulls nothing. */
|
|
74
|
+
export declare const TOPIC_OPERATOR_RECORD_KIND = "topic-operator-record";
|
|
75
|
+
/**
|
|
76
|
+
* Topic-operator records are HIGH-impact at the REPLICATION layer (fork #2): a concurrent
|
|
77
|
+
* divergent VALUE edit to the SAME (topic, uid) identity surface from different origins goes
|
|
78
|
+
* through APPEND-BOTH-AND-FLAG — both versions preserved, ONE deduped conflict, never a silent
|
|
79
|
+
* overwrite. The READ path (mergeUnionToTopicOperators) is ADVISORY — a replicated operator
|
|
80
|
+
* record is a HINT about what a peer machine bound, NEVER this machine's authoritative principal
|
|
81
|
+
* (the UNTRUSTED-REPLICATED-OPERATOR invariant).
|
|
82
|
+
*/
|
|
83
|
+
export declare const TOPIC_OPERATOR_IMPACT_TIER: ImpactTier;
|
|
84
|
+
/** A platform / uid is a short slug. */
|
|
85
|
+
export declare const MAX_SLUG_LENGTH = 128;
|
|
86
|
+
/** A display name is short free text. */
|
|
87
|
+
export declare const MAX_NAME_LENGTH = 256;
|
|
88
|
+
/** Names array cap (the lowercased display-name variants). */
|
|
89
|
+
export declare const MAX_NAMES = 16;
|
|
90
|
+
/**
|
|
91
|
+
* Per-kind replication bounds. The topic-operator store is FEW + bounded (one binding per
|
|
92
|
+
* topic), so the per-store retention mirrors the pref-record / user-record siblings (a small
|
|
93
|
+
* window with a few archives). NEVER `rotateKeep: 0` (rotate-but-never-delete would be a
|
|
94
|
+
* compliance defect for any PII kind). The rate cap COALESCES (latest state per recordKey per
|
|
95
|
+
* interval) so a per-message re-bind loop does not flood the stream.
|
|
96
|
+
*/
|
|
97
|
+
export declare const TOPIC_OPERATOR_RECORD_BOUNDS: ReplicatedKindBounds;
|
|
98
|
+
/**
|
|
99
|
+
* Per-entry size cap RAISED to 64KB for this PII kind (consistency with the other PII kinds).
|
|
100
|
+
* A topic-operator record is tiny in practice; this is the belt-and-suspenders ceiling — a
|
|
101
|
+
* record that STILL exceeds 64KB after projection is REJECTED with a named error (never
|
|
102
|
+
* silent-truncate, never suspect-wedge). See assertProjectionUnderCap.
|
|
103
|
+
*/
|
|
104
|
+
export declare const TOPIC_OPERATOR_MAX_ENTRY_BYTES: number;
|
|
105
|
+
/**
|
|
106
|
+
* The store-specific field names the `topic-operator-record` VALUE schema OWNS (fork #4
|
|
107
|
+
* disclosure-min projection). NO extra local internal field. `recordKey`/`hlc`/`op`/`origin`/
|
|
108
|
+
* `observed` are reserved envelope fields, never store fields.
|
|
109
|
+
*/
|
|
110
|
+
export declare const TOPIC_OPERATOR_STORE_KNOWN_FIELDS: ReadonlyArray<string>;
|
|
111
|
+
/** The tombstone's store-owned fields beyond the reserved envelope set. `deletedAt` is the
|
|
112
|
+
* only store field a delete carries. */
|
|
113
|
+
export declare const TOPIC_OPERATOR_TOMBSTONE_KNOWN_FIELDS: ReadonlyArray<string>;
|
|
114
|
+
/** Is `v` a valid ISO-8601 date string (and ONLY a date — no smuggled markup)? */
|
|
115
|
+
export declare function isIso8601(v: unknown): v is string;
|
|
116
|
+
/**
|
|
117
|
+
* The `topic-operator-record` store schema — a DISCRIMINATED UNION on `op`. Strict typed
|
|
118
|
+
* validation on top of the envelope: reject free text beyond the known fields, TYPE-CLAMP every
|
|
119
|
+
* known field (`platform`/`uid` short slugs jailed, `names[]` length-bounded, `boundAt`
|
|
120
|
+
* ISO-8601-or-absent). Returns the validated store-specific object (known fields only), or null
|
|
121
|
+
* to reject the WHOLE record. PURE.
|
|
122
|
+
*
|
|
123
|
+
* The envelope validator has ALREADY validated `op` ∈ {put,delete} before calling this. We
|
|
124
|
+
* branch on it so a tombstone passes (only `deletedAt` is a legal store field for a delete)
|
|
125
|
+
* WITHOUT being marked invalid by the rich VALUE schema.
|
|
126
|
+
*/
|
|
127
|
+
export declare const topicOperatorRecordStoreSchema: StoreFieldSchema;
|
|
128
|
+
/**
|
|
129
|
+
* Derive the cross-machine-stable recordKey for a topic-operator binding (fork #1).
|
|
130
|
+
* `sha256(topicId + "\x1f" + verified-uid)`, hex-truncated to 32 chars. Know-Your-Principal:
|
|
131
|
+
* the binding is keyed on the topic + the AUTHENTICATED uid, NEVER a content name (a name in a
|
|
132
|
+
* message body can never become part of the identity surface by construction). The `\x1f`
|
|
133
|
+
* (unit separator) is an un-typeable delimiter so two bindings cannot collide by straddling
|
|
134
|
+
* the field boundary. Returns null when topicId OR uid is empty (a degenerate record with no
|
|
135
|
+
* stable identity surface — the caller skips emission).
|
|
136
|
+
*
|
|
137
|
+
* COLLISION SAFETY: two DIFFERENT bindings share a key ONLY if they share the EXACT same topic
|
|
138
|
+
* AND verified uid — which IS the definition of "the same binding". A different uid on the same
|
|
139
|
+
* topic (a re-bind to a NEW operator) is a DIFFERENT record (a different key), so it does not
|
|
140
|
+
* silently overwrite the prior operator's record — the union surfaces both as history.
|
|
141
|
+
*/
|
|
142
|
+
export declare function deriveTopicOperatorRecordKey(topicId: number | string, uid: string): string | null;
|
|
143
|
+
/** The `data` object a `topic-operator-record` journal entry carries. */
|
|
144
|
+
export type TopicOperatorRecordData = Record<string, unknown>;
|
|
145
|
+
/** Input to buildTopicOperatorRecordData: the bound topic id, the stored operator record, the
|
|
146
|
+
* freshly-ticked hlc, this machine's origin id, and the observed-witness. */
|
|
147
|
+
export interface BuildTopicOperatorRecordInput {
|
|
148
|
+
topicId: number | string;
|
|
149
|
+
record: TopicOperator;
|
|
150
|
+
hlc: HlcTimestamp;
|
|
151
|
+
origin: string;
|
|
152
|
+
observed?: HlcTimestamp;
|
|
153
|
+
}
|
|
154
|
+
/** The named error a record-over-cap surfaces: not silent-truncate, not suspect-wedge. */
|
|
155
|
+
export declare class TopicOperatorRecordTooLargeError extends Error {
|
|
156
|
+
readonly recordKey: string;
|
|
157
|
+
readonly bytes: number;
|
|
158
|
+
constructor(recordKey: string, bytes: number);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Build the disclosure-minimized `topic-operator-record` envelope `data` for an `op:'put'`
|
|
162
|
+
* (fork #4 — `{platform, uid, names, boundAt}` ONLY). recordKey = `sha256(topicId + ":" + uid)`
|
|
163
|
+
* (fork #1). Returns null when topicId/uid yield no identity surface. Throws
|
|
164
|
+
* TopicOperatorRecordTooLargeError when the projection STILL exceeds the 64KB per-entry cap.
|
|
165
|
+
*/
|
|
166
|
+
export declare function buildTopicOperatorRecordData(input: BuildTopicOperatorRecordInput): TopicOperatorRecordData | null;
|
|
167
|
+
/** Throw TopicOperatorRecordTooLargeError if the projected data serializes over the per-entry
|
|
168
|
+
* cap. The cap is set so a legal disclosure-minimized record can never reach it. */
|
|
169
|
+
export declare function assertProjectionUnderCap(recordKey: string, data: TopicOperatorRecordData): void;
|
|
170
|
+
/** Input to buildTopicOperatorTombstoneData: the topic id + verified uid of the unbound
|
|
171
|
+
* operator (to derive the recordKey identity surface), the freshly-ticked hlc, the origin, and
|
|
172
|
+
* the deletedAt timestamp. */
|
|
173
|
+
export interface BuildTopicOperatorTombstoneInput {
|
|
174
|
+
topicId: number | string;
|
|
175
|
+
uid: string;
|
|
176
|
+
hlc: HlcTimestamp;
|
|
177
|
+
origin: string;
|
|
178
|
+
deletedAt: string;
|
|
179
|
+
observed?: HlcTimestamp;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Build an `op:'delete'` TOMBSTONE `data` for a topic-operator UNBIND. recordKey = the SAME
|
|
183
|
+
* (topic, uid) identity surface the value records key on. Returns null when topicId/uid are
|
|
184
|
+
* empty (no identity surface to tombstone). The delete-resurrection guard lives in the merge
|
|
185
|
+
* (a later `delete` hlc wins over an earlier `put`).
|
|
186
|
+
*/
|
|
187
|
+
export declare function buildTopicOperatorTombstoneData(input: BuildTopicOperatorTombstoneInput): TopicOperatorRecordData | null;
|
|
188
|
+
/** A merged topic-operator view entry: the projected record fields PLUS its origin machine id.
|
|
189
|
+
* READ-ONLY — NEVER written back into the local store, and NEVER the authoritative principal
|
|
190
|
+
* (the UNTRUSTED-REPLICATED-OPERATOR invariant). */
|
|
191
|
+
export interface MergedTopicOperatorView {
|
|
192
|
+
recordKey: string;
|
|
193
|
+
origin: string;
|
|
194
|
+
/** The validated, type-clamped projection fields (the receive-side schema already ran on
|
|
195
|
+
* apply; here `data` is that validated portion). */
|
|
196
|
+
data: Record<string, unknown>;
|
|
197
|
+
/** True when this view entry is one of ≥2 concurrent variants of an OPEN conflict. */
|
|
198
|
+
conflicted: boolean;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Collapse a `Map<recordKey, UnionResult>` into the merged topic-operator view.
|
|
202
|
+
* HIGH-impact-at-replication / ADVISORY-at-read contract (fork #2):
|
|
203
|
+
* - A resolved single value ⇒ that one view entry.
|
|
204
|
+
* - An OPEN concurrent conflict ⇒ BOTH (all) `put` variants as separate entries (append-both
|
|
205
|
+
* — both surface as ADVISORY hints; the read NEVER suppresses a usable view AND NEVER
|
|
206
|
+
* BLOCKS — a replicated operator record is a hint, NEVER the authoritative principal).
|
|
207
|
+
* - A delete-resolved key (every origin's latest is a tombstone) ⇒ nothing.
|
|
208
|
+
* The read is READ-ONLY: a replicated record NEVER clobbers a divergent local record AND NEVER
|
|
209
|
+
* establishes/overrides the local authoritative binding (the load-bearing invariant).
|
|
210
|
+
*/
|
|
211
|
+
export declare function mergeUnionToTopicOperators(union: Map<string, UnionResult>): MergedTopicOperatorView[];
|
|
212
|
+
/**
|
|
213
|
+
* Render a FOREIGN (replicated) topic-operator record into a session-context block, wrapped in
|
|
214
|
+
* an explicit `<replicated-untrusted-data origin="…">` envelope that EXPLICITLY states the
|
|
215
|
+
* record is NOT the verified operator of this topic on THIS machine. EVERY rendered field is
|
|
216
|
+
* escaped — there is no "trusted because machine-set" slot. A null `data.uid` (a malformed
|
|
217
|
+
* view) yields null.
|
|
218
|
+
*
|
|
219
|
+
* THE INVARIANT IN PROSE: the block tells the session model that a peer machine bound this
|
|
220
|
+
* topic to this operator — context only. The authoritative operator of THIS topic on THIS
|
|
221
|
+
* machine is still ONLY the local auth-derived binding (TopicOperatorStore.getOperator); a
|
|
222
|
+
* replicated record can never establish or override it.
|
|
223
|
+
*/
|
|
224
|
+
export declare function renderForeignTopicOperatorContext(view: MergedTopicOperatorView): string | null;
|
|
225
|
+
/**
|
|
226
|
+
* Build an OriginRecord for the OWN topic-operator store (the single-origin materialization the
|
|
227
|
+
* union reader merges against peer replicas). recordKey = derived (topic, uid) identity
|
|
228
|
+
* surface; the envelope carries a SYNTHETIC own-origin HLC stamp derived deterministically from
|
|
229
|
+
* the record's boundAt (physical) so the own record has a well-formed, stable position relative
|
|
230
|
+
* to peer records. Returns null for a degenerate record (no identity surface).
|
|
231
|
+
*/
|
|
232
|
+
export declare function topicOperatorToOriginRecord(topicId: number | string, record: TopicOperator, origin: string): OriginRecord | null;
|
|
233
|
+
/** The ReplicatedKindRegistry registration for the `topic-operator-record` store. server.ts
|
|
234
|
+
* registers this onto the shared registry; the dual-registry coupling test asserts `kind` is
|
|
235
|
+
* also present in JOURNAL_KINDS. */
|
|
236
|
+
export declare const TOPIC_OPERATOR_KIND_REGISTRATION: {
|
|
237
|
+
readonly kind: "topic-operator-record";
|
|
238
|
+
readonly store: "topicOperator";
|
|
239
|
+
readonly schema: StoreFieldSchema;
|
|
240
|
+
};
|
|
241
|
+
/** Convenience: the store's contributing journal kinds (for rollback-unmerge's
|
|
242
|
+
* kindsForStore('topicOperator') wiring). */
|
|
243
|
+
export declare function topicOperatorContributingKinds(): string[];
|
|
244
|
+
/** The store's impact tier resolver, for ReplicatedStoreReader.tierOf. Returns HIGH for the
|
|
245
|
+
* `topicOperator` store (and HIGH for any unknown store — the conservative append-both-and-flag
|
|
246
|
+
* direction, never a silent clobber). */
|
|
247
|
+
export declare function topicOperatorTierOf(_store: string): ImpactTier;
|
|
248
|
+
/** Re-export the envelope type for callers building/applying topic-operator-record envelopes. */
|
|
249
|
+
export type { ReplicatedEnvelope };
|
|
250
|
+
//# sourceMappingURL=TopicOperatorReplicatedStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TopicOperatorReplicatedStore.d.ts","sourceRoot":"","sources":["../../src/core/TopicOperatorReplicatedStore.ts"],"names":[],"mappings":"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"}
|