instar 1.3.338 → 1.3.340

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 (61) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +166 -10
  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 +17 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/AutonomousSessions.d.ts +17 -2
  8. package/dist/core/AutonomousSessions.d.ts.map +1 -1
  9. package/dist/core/AutonomousSessions.js +30 -4
  10. package/dist/core/AutonomousSessions.js.map +1 -1
  11. package/dist/core/CoherenceJournal.d.ts +326 -0
  12. package/dist/core/CoherenceJournal.d.ts.map +1 -0
  13. package/dist/core/CoherenceJournal.js +999 -0
  14. package/dist/core/CoherenceJournal.js.map +1 -0
  15. package/dist/core/CoherenceJournalReader.d.ts +158 -0
  16. package/dist/core/CoherenceJournalReader.d.ts.map +1 -0
  17. package/dist/core/CoherenceJournalReader.js +450 -0
  18. package/dist/core/CoherenceJournalReader.js.map +1 -0
  19. package/dist/core/JournalSyncApplier.d.ts +272 -0
  20. package/dist/core/JournalSyncApplier.d.ts.map +1 -0
  21. package/dist/core/JournalSyncApplier.js +835 -0
  22. package/dist/core/JournalSyncApplier.js.map +1 -0
  23. package/dist/core/LearningVelocityScorer.d.ts +40 -0
  24. package/dist/core/LearningVelocityScorer.d.ts.map +1 -0
  25. package/dist/core/LearningVelocityScorer.js +67 -0
  26. package/dist/core/LearningVelocityScorer.js.map +1 -0
  27. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  28. package/dist/core/PostUpdateMigrator.js +17 -0
  29. package/dist/core/PostUpdateMigrator.js.map +1 -1
  30. package/dist/core/StateManager.d.ts +41 -0
  31. package/dist/core/StateManager.d.ts.map +1 -1
  32. package/dist/core/StateManager.js +100 -0
  33. package/dist/core/StateManager.js.map +1 -1
  34. package/dist/core/types.d.ts +35 -0
  35. package/dist/core/types.d.ts.map +1 -1
  36. package/dist/core/types.js.map +1 -1
  37. package/dist/messaging/TelegramAdapter.d.ts +14 -0
  38. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  39. package/dist/messaging/TelegramAdapter.js +16 -1
  40. package/dist/messaging/TelegramAdapter.js.map +1 -1
  41. package/dist/scaffold/templates.d.ts.map +1 -1
  42. package/dist/scaffold/templates.js +11 -0
  43. package/dist/scaffold/templates.js.map +1 -1
  44. package/dist/server/routes.d.ts.map +1 -1
  45. package/dist/server/routes.js +116 -3
  46. package/dist/server/routes.js.map +1 -1
  47. package/package.json +2 -2
  48. package/scripts/lint-cas-emit-placement.js +87 -0
  49. package/scripts/lint-journal-actuation-ban.js +63 -0
  50. package/scripts/lint-state-registry.js +313 -0
  51. package/src/data/builtin-manifest.json +63 -63
  52. package/src/data/state-coherence-registry.json +880 -0
  53. package/src/scaffold/templates.ts +11 -0
  54. package/upgrades/1.3.340.md +132 -0
  55. package/upgrades/coherence-journal-p1-1.eli16.md +11 -0
  56. package/upgrades/coherence-journal-p1-2.eli16.md +11 -0
  57. package/upgrades/coherence-journal-p1-3.eli16.md +13 -0
  58. package/upgrades/side-effects/coherence-journal-p1-1.md +68 -0
  59. package/upgrades/side-effects/coherence-journal-p1-2.md +54 -0
  60. package/upgrades/side-effects/coherence-journal-p1-3.md +49 -0
  61. package/upgrades/side-effects/exo3-g5-ci-greening.md +29 -0
@@ -0,0 +1,272 @@
1
+ /**
2
+ * JournalSyncApplier — the RECEIVE (and own-stream SERVE) side of coherence
3
+ * journal replication (P1.3 of multi-machine coherence).
4
+ *
5
+ * Spec: docs/specs/COHERENCE-JOURNAL-SPEC.md §3.4 (replication trust model —
6
+ * ALL seven rules), §3.1 (stream/meta layout), §5 (trust model).
7
+ *
8
+ * This class is PURE and MESH-INDEPENDENT. It owns disk state only; another
9
+ * workstream wires the `journal-sync` MeshRpc verb, the `session-status`
10
+ * advert, and the delta-request loop on top of it. It NEVER imports MeshRpc,
11
+ * the server, or the mesh dispatcher — it is the engine those call.
12
+ *
13
+ * Replica layout (§3.1): peer copies of machine M's stream of kind K live at
14
+ * <stateDir>/state/coherence-journal/peers/<safeMachineId(M)>.<kind>.jsonl
15
+ * with one sidecar
16
+ * <stateDir>/state/coherence-journal/peers/<safeMachineId(M)>.meta.json
17
+ * holding the stream-set incarnation token (top-level, mirroring the writer's
18
+ * own meta so `CoherenceJournalReader.readIncarnation` parses it) plus per-kind
19
+ * apply bookkeeping (lastHeldSeq, status, suspect/flap counters, gap sentinels)
20
+ * and the bounded quarantine record.
21
+ *
22
+ * The receive-side §4.1 durability rule lives HERE: a replica append fsyncs
23
+ * BEFORE the entries are reported `applied`, so a journal-sync ack is an
24
+ * ack-after-durable-commit. Author-side durability is the writer's separate
25
+ * best-effort flush window — this is the receiver's contract.
26
+ *
27
+ * Trust model enforced (§3.4):
28
+ * 1. FIRST-HOP SENDER BINDING — every entry's `machine` must === the
29
+ * authenticated sender; the target file derives from the sender, NEVER a
30
+ * payload field. Forged entries are rejected + counted, never appended.
31
+ * 2. SCHEMA-VALIDATED APPLY — per entry: parseable + size-cap, seq exactly
32
+ * lastHeldSeq+1, ts parses, kind known-or-ignorable, data passes the kind's
33
+ * typed schema. ANY failure marks the stream `suspect` and STOPS the batch
34
+ * at the last valid line. `suspect` self-clears after K=20 consecutive
35
+ * valid in-order applies.
36
+ * 3. INCARNATION FENCING — a known stream arriving with a NEW incarnation
37
+ * quarantines the old replica (rename aside, ≤2 kept per stream), starts
38
+ * fresh, and surfaces a coalesced divergence signal (per-machine 10min
39
+ * window); >3 flips in the window → status `reset-flapping`, surfaced once.
40
+ * 4. TRUNCATION SIGNALS — a batch may carry `oldestRetainedSeq`; when
41
+ * lastHeldSeq+1 < oldestRetainedSeq the receiver records a gap sentinel in
42
+ * the replica meta (NOT a fake journal line), fast-forwards lastHeldSeq to
43
+ * oldestRetainedSeq-1, and marks the stream `gapped` until the next clean
44
+ * apply. (Gap re-request PACING is the caller's job; this exposes status.)
45
+ *
46
+ * All replica writes go through the injected guardWrite seam (same seam as the
47
+ * writer) and O_APPEND single-line writes. The applier is tolerant + bounded
48
+ * everywhere and NEVER throws into its caller; degradation is surfaced via
49
+ * counters and per-stream status.
50
+ */
51
+ import { type JournalEntry, type JournalKind, type JournalFs } from './CoherenceJournal.js';
52
+ /** Per-entry size cap on the receive side (§3.4 rule 2). Mirrors the writer's
53
+ * DEFAULT_MAX_ENTRY_BYTES (source of truth: CoherenceJournal.ts). */
54
+ export declare const APPLIER_MAX_ENTRY_BYTES: number;
55
+ /** Consecutive valid in-order applies that self-clear `suspect` (§3.4 rule 2). */
56
+ export declare const SUSPECT_CLEAR_THRESHOLD = 20;
57
+ /** Quarantined replica files kept per stream before evicting the oldest (rule 3). */
58
+ export declare const MAX_QUARANTINE_PER_STREAM = 2;
59
+ /** Incarnation-flap coalescing window per machine (rule 3). */
60
+ export declare const FLAP_WINDOW_MS: number;
61
+ /** Flips within the window past this → `reset-flapping`, surfaced once (rule 3). */
62
+ export declare const FLAP_RESET_THRESHOLD = 3;
63
+ /** Default serve-batch size cap (§3.4 rule 5 — journalSyncMaxBatchBytes). */
64
+ export declare const DEFAULT_MAX_BATCH_BYTES = 262144;
65
+ /** Per-stream replication status surfaced to the caller (§3.4 rule 4). */
66
+ export type StreamReplStatus = 'current' | 'behind' | 'gapped' | 'suspect' | 'reset-flapping';
67
+ /** One stream's apply bookkeeping, persisted in the peer meta sidecar. */
68
+ export interface PeerKindState {
69
+ /** Highest contiguously-applied seq held locally for this peer+kind. */
70
+ lastHeldSeq: number;
71
+ status: StreamReplStatus;
72
+ /** Consecutive valid in-order applies since the stream last went `suspect`. */
73
+ consecutiveValid: number;
74
+ /** Gap sentinels recorded by truncation fast-forwards (§3.4 rule 4). */
75
+ gaps: GapSentinel[];
76
+ }
77
+ /** A recorded hole in a replica stream (rule 4) — meta bookkeeping, NOT a line. */
78
+ export interface GapSentinel {
79
+ /** First seq known-missing (the old lastHeldSeq+1). */
80
+ fromSeq: number;
81
+ /** Last seq known-missing (oldestRetainedSeq-1). */
82
+ toSeq: number;
83
+ /** When this machine recorded the gap. */
84
+ recordedAt: string;
85
+ }
86
+ /** The peer meta sidecar (§3.1) — incarnation top-level (reader-compatible). */
87
+ export interface PeerMeta {
88
+ incarnation: string;
89
+ /** Per-kind apply bookkeeping. */
90
+ kinds: Partial<Record<JournalKind, PeerKindState>>;
91
+ /** Incarnation flips observed (timestamps ms) for the flap window. */
92
+ flipsMs: number[];
93
+ /** Sticky once a machine has been flagged reset-flapping (surfaced once). */
94
+ resetFlapping: boolean;
95
+ }
96
+ /** A divergence signal coalesced per machine within FLAP_WINDOW_MS (rule 3). */
97
+ export interface DivergenceSignal {
98
+ machineId: string;
99
+ kind: JournalKind;
100
+ oldIncarnation: string;
101
+ newIncarnation: string;
102
+ at: string;
103
+ }
104
+ /** One stream's slice of an inbound batch. */
105
+ export interface ApplyBatchStream {
106
+ kind: JournalKind;
107
+ incarnation: string;
108
+ entries: JournalEntry[];
109
+ /** Optional truncation watermark (§3.4 rule 4). */
110
+ oldestRetainedSeq?: number;
111
+ }
112
+ /** Result of an apply() call — never thrown, fully observable. */
113
+ export interface ApplyResult {
114
+ /** Total entries durably appended across all streams in this call. */
115
+ applied: number;
116
+ /** Entries rejected by first-hop sender binding (rule 1). */
117
+ forgedEntries: number;
118
+ /** Entries dropped as duplicates (seq <= lastHeldSeq) — silent (rule 2). */
119
+ duplicates: number;
120
+ /** Entries failing schema/seq/size/ts validation (rule 2). */
121
+ invalidEntries: number;
122
+ /** Streams marked suspect in this call (rule 2). */
123
+ suspectStreams: number;
124
+ /** Streams quarantined for a new incarnation in this call (rule 3). */
125
+ quarantined: number;
126
+ /** Truncation gaps recorded in this call (rule 4). */
127
+ gapsRecorded: number;
128
+ /** Append batches skipped because guardWrite refused (never thrown). */
129
+ guardSkips: number;
130
+ /** Divergence signals emitted (coalesced) in this call (rule 3). */
131
+ signals: DivergenceSignal[];
132
+ /** Per-stream final status after this call. */
133
+ statuses: Record<string, StreamReplStatus>;
134
+ }
135
+ /** Aggregate degradation counters (lifetime). */
136
+ export interface ApplierDegradation {
137
+ applied: number;
138
+ forgedEntries: number;
139
+ duplicates: number;
140
+ invalidEntries: number;
141
+ suspectMarks: number;
142
+ quarantines: number;
143
+ gapsRecorded: number;
144
+ guardSkips: number;
145
+ appendErrors: number;
146
+ signals: number;
147
+ }
148
+ export interface JournalSyncApplierConfig {
149
+ /** Absolute path to the agent's `.instar/` directory (the stateDir). */
150
+ stateDir: string;
151
+ /**
152
+ * Injected standby read-only guard (§3.1). Called with the target replica
153
+ * file path before each append batch; throwing skips the batch + counts.
154
+ * Same seam the writer uses (`StateManager.guardJournalWrite`).
155
+ */
156
+ guardWrite?: (filePath: string) => void;
157
+ /** Optional clock override (tests). */
158
+ now?: () => Date;
159
+ /** Optional logger; called once per failure class. */
160
+ logger?: (msg: string) => void;
161
+ /** Optional fs seam for fault-injection tests. Defaults to node:fs. */
162
+ fsImpl?: JournalFs;
163
+ /** Per-entry size cap override. Default APPLIER_MAX_ENTRY_BYTES. */
164
+ maxEntryBytes?: number;
165
+ }
166
+ export declare class JournalSyncApplier {
167
+ private readonly stateDir;
168
+ private readonly guardWrite?;
169
+ private readonly now;
170
+ private readonly logger?;
171
+ private readonly io;
172
+ private readonly maxEntryBytes;
173
+ /** In-memory meta cache per peer machine (keyed by RAW machineId). */
174
+ private metaCache;
175
+ private degradation;
176
+ private loggedClasses;
177
+ constructor(config: JournalSyncApplierConfig);
178
+ getDegradation(): Readonly<ApplierDegradation>;
179
+ /**
180
+ * What this machine holds per peer stream — `{ machineId → { kind →
181
+ * { incarnation, lastSeq } } }` — so the caller can compare against a peer's
182
+ * advert and request only the missing ranges (§3.4 rule 5). Sourced from the
183
+ * persisted peer meta (incarnation + per-kind lastHeldSeq).
184
+ */
185
+ getAdvertState(): Record<string, Record<string, {
186
+ incarnation: string;
187
+ lastSeq: number;
188
+ }>>;
189
+ /** Per-stream replication status (§3.4 rule 4 — caller drives gap pacing). */
190
+ getStreamStatus(): Record<string, StreamReplStatus>;
191
+ /**
192
+ * Apply an inbound batch from `senderMachineId` (the AUTHENTICATED envelope
193
+ * identity). Implements §3.4 rules 1-4. Never throws; the result is fully
194
+ * observable. The target replica files derive from `senderMachineId` only —
195
+ * NEVER from any payload field.
196
+ */
197
+ apply(senderMachineId: string, batch: ApplyBatchStream[]): ApplyResult;
198
+ private applyStream;
199
+ /**
200
+ * Per-entry verdict (§3.4 rules 1 + 2). `expectedSeq` is lastHeldSeq + count
201
+ * already queued this batch, so seq must be exactly contiguous.
202
+ */
203
+ private validateEntry;
204
+ /**
205
+ * §3.2 typed schema validation — MIRRORED from CoherenceJournal.validate()
206
+ * (source of truth: src/core/CoherenceJournal.ts). The applier validates
207
+ * STRICTLY (reject on unknown/extra fields too) so a peer's buggy/forged
208
+ * writer cannot smuggle free text past the receiver. Returns true if the
209
+ * data is a well-formed instance of the kind's schema.
210
+ */
211
+ private validateData;
212
+ private handleIncarnationFlip;
213
+ /**
214
+ * Rename a peer replica file aside as `<file>.quarantine.<stamp>`, keeping at
215
+ * most MAX_QUARANTINE_PER_STREAM per stream (oldest evicted). Bounded disk.
216
+ */
217
+ private quarantineReplica;
218
+ private pruneQuarantine;
219
+ /**
220
+ * Append validated lines to the peer replica file with O_APPEND single-line
221
+ * writes, then fdatasync BEFORE returning the applied count (§4.1 — the
222
+ * receiver's durability-before-ack rule lives HERE). Returns the number of
223
+ * lines durably committed (0 if the guard refused or the open/write failed
224
+ * before any byte landed). Never throws.
225
+ */
226
+ private durablyAppend;
227
+ /**
228
+ * Build a delta batch from THIS machine's OWN stream for a peer that is
229
+ * behind (§3.4 rule 5). Reads the FILE (never any queue) so only
230
+ * durably-flushed entries are served — a §3.4-rule-3 corollary the writer
231
+ * guarantees by advertising only flushed seqs. First-hop only: this serves
232
+ * exactly one own stream of one kind.
233
+ *
234
+ * @param kind which own stream to serve.
235
+ * @param fromSeq serve entries with seq > fromSeq (the peer's lastSeq).
236
+ * @param maxBatchBytes total serialized byte cap (default DEFAULT_MAX_BATCH_BYTES).
237
+ * @param ownMachineId this machine's id (the producer of the served stream).
238
+ */
239
+ buildServeBatch(kind: JournalKind, fromSeq: number, ownMachineId: string, maxBatchBytes?: number): {
240
+ kind: JournalKind;
241
+ incarnation: string;
242
+ entries: JournalEntry[];
243
+ oldestRetainedSeq?: number;
244
+ };
245
+ private ensureKind;
246
+ private markSuspect;
247
+ private loadMeta;
248
+ private normalizeKinds;
249
+ private persistMeta;
250
+ private mintIncarnation;
251
+ /** Discover peer machine ids from the peers/ meta sidecars + replica files. */
252
+ private discoverPeerMachines;
253
+ /**
254
+ * The peer file grammar uses the SANITIZED machine id as the literal. The raw
255
+ * id is only needed for first-hop binding (which uses the sender id directly,
256
+ * not a derived one) — for advert/status keys we surface the on-disk literal
257
+ * (already sanitized + injective), so reverse-mapping is unnecessary and we
258
+ * keep the literal as the machine key. (sanitizeMachineId is injective, so
259
+ * the literal is a faithful, stable handle.)
260
+ */
261
+ private unsanitizeBestEffort;
262
+ /** Own current + archive stream files (newest-first) for serve reads. */
263
+ private ownStreamFilesNewestFirst;
264
+ private readOwnIncarnation;
265
+ private dirPath;
266
+ private peersDirPath;
267
+ private replicaFilePath;
268
+ private metaPath;
269
+ private ensurePeersDir;
270
+ private log;
271
+ }
272
+ //# sourceMappingURL=JournalSyncApplier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JournalSyncApplier.d.ts","sourceRoot":"","sources":["../../src/core/JournalSyncApplier.ts"],"names":[],"mappings":"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"}