instar 1.3.548 → 1.3.550

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +122 -5
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +29 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/CoherenceJournal.d.ts +1 -1
  8. package/dist/core/CoherenceJournal.d.ts.map +1 -1
  9. package/dist/core/CoherenceJournal.js +23 -2
  10. package/dist/core/CoherenceJournal.js.map +1 -1
  11. package/dist/core/CredentialRebalancerSnapshot.d.ts +17 -0
  12. package/dist/core/CredentialRebalancerSnapshot.d.ts.map +1 -1
  13. package/dist/core/CredentialRebalancerSnapshot.js +24 -0
  14. package/dist/core/CredentialRebalancerSnapshot.js.map +1 -1
  15. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  16. package/dist/core/PostUpdateMigrator.js +27 -1
  17. package/dist/core/PostUpdateMigrator.js.map +1 -1
  18. package/dist/core/TopicOperatorReplicatedStore.d.ts +250 -0
  19. package/dist/core/TopicOperatorReplicatedStore.d.ts.map +1 -0
  20. package/dist/core/TopicOperatorReplicatedStore.js +413 -0
  21. package/dist/core/TopicOperatorReplicatedStore.js.map +1 -0
  22. package/dist/core/UserRegistryReplicatedStore.d.ts +287 -0
  23. package/dist/core/UserRegistryReplicatedStore.d.ts.map +1 -0
  24. package/dist/core/UserRegistryReplicatedStore.js +527 -0
  25. package/dist/core/UserRegistryReplicatedStore.js.map +1 -0
  26. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  27. package/dist/core/devGatedFeatures.js +10 -0
  28. package/dist/core/devGatedFeatures.js.map +1 -1
  29. package/dist/scaffold/templates.d.ts.map +1 -1
  30. package/dist/scaffold/templates.js +3 -1
  31. package/dist/scaffold/templates.js.map +1 -1
  32. package/dist/users/TopicOperatorStore.d.ts +24 -0
  33. package/dist/users/TopicOperatorStore.d.ts.map +1 -1
  34. package/dist/users/TopicOperatorStore.js +28 -0
  35. package/dist/users/TopicOperatorStore.js.map +1 -1
  36. package/dist/users/UserManager.d.ts +27 -0
  37. package/dist/users/UserManager.d.ts.map +1 -1
  38. package/dist/users/UserManager.js +44 -0
  39. package/dist/users/UserManager.js.map +1 -1
  40. package/package.json +1 -1
  41. package/src/data/builtin-manifest.json +19 -19
  42. package/src/scaffold/templates.ts +3 -1
  43. package/upgrades/1.3.549.md +36 -0
  44. package/upgrades/1.3.550.md +23 -0
  45. package/upgrades/side-effects/multi-machine-replicated-store-ws26-user-topicop.md +123 -0
  46. package/upgrades/side-effects/ws52-busyness.md +38 -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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"}