@agentplat/mesh-sim 0.3.0-alpha.1 → 0.3.0-alpha.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/README.md +73 -2
- package/dist/index.d.ts +119 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1817 -44
- package/dist/index.js.map +1 -1
- package/dist/reducer-scenario.d.ts +129 -0
- package/dist/reducer-scenario.d.ts.map +1 -0
- package/dist/reducer-scenario.js +774 -0
- package/dist/reducer-scenario.js.map +1 -0
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ The kernel uses the production `reduceMeshPeer` function for local commands and
|
|
|
6
6
|
the production `processMeshEnvelope` boundary for every remote delivery. There
|
|
7
7
|
is no simulation-only accepted-message path.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The deterministic kernel provides:
|
|
10
10
|
|
|
11
11
|
- integer logical time and a total-order priority queue;
|
|
12
12
|
- versioned `xorshift32-v1` random substreams scoped by caller-defined names;
|
|
@@ -14,9 +14,80 @@ Alpha 1 provides:
|
|
|
14
14
|
- signed message preparation and delivery across configured topology links;
|
|
15
15
|
- immutable SHA-256 state and chained trace digests;
|
|
16
16
|
- invariant monitors evaluated after every event;
|
|
17
|
-
-
|
|
17
|
+
- restorable snapshots containing queue, PRNG and outbound allocator state; and
|
|
18
18
|
- replay comparison reporting the first semantic divergence.
|
|
19
19
|
|
|
20
|
+
Alpha 2 adds a closed, bounded fault-plan schema (`schemaVersion: 1`). Faults
|
|
21
|
+
are ordinary serialized simulation events, participate in the configuration
|
|
22
|
+
digest and are retained in the trace. The catalog covers peer crash/resume,
|
|
23
|
+
named-delivery drop/duplicate/delay/reorder, directed partition/heal and
|
|
24
|
+
peer-local wall-clock offsets. They are interpreted only at driver and
|
|
25
|
+
transport boundaries: production reducers contain no fault branches, retries
|
|
26
|
+
and healing are never implicit, and a crash drops later volatile deliveries.
|
|
27
|
+
|
|
28
|
+
`peer.resume` means that the same configured peer instance becomes available
|
|
29
|
+
again with its retained reducer state and outbound allocator. It is not a fresh
|
|
30
|
+
instance restart. A new `instanceId`, reset allocator, key/admission lifecycle,
|
|
31
|
+
or durable-state recovery must be supplied as a new explicit configuration;
|
|
32
|
+
those production readmission and durable-storage policies remain outside Alpha
|
|
33
|
+
2 and are never inferred by the simulator.
|
|
34
|
+
|
|
35
|
+
## Coordination reducer scenarios
|
|
36
|
+
|
|
37
|
+
`runMeshReducerScenario()` drives any closed, JSON-serializable event schedule
|
|
38
|
+
through a version-identified reducer adapter. This is the Alpha 2 harness for
|
|
39
|
+
`MeshAllocationRuntimeState`: adapters dispatch directly to the public
|
|
40
|
+
coordination, allocation, execution, timer, and recovery reducers.
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
const trace = await runMeshReducerScenario(config, {
|
|
44
|
+
driverId: 'my-coordination-driver-v1',
|
|
45
|
+
projectionId: 'my-safety-projection-v1',
|
|
46
|
+
reduce({ state, action, logicalTime }) {
|
|
47
|
+
return dispatchToPublicMeshReducer(state, action, logicalTime);
|
|
48
|
+
},
|
|
49
|
+
project(state) {
|
|
50
|
+
return safetyProjection(state);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The configuration digest binds the schema, seed, initial states, topology,
|
|
56
|
+
events, bounds, complete fault plan, driver ID, projection ID, and invariant
|
|
57
|
+
names. Runtime callbacks are handles and are excluded. State, effects, and
|
|
58
|
+
semantic projections are converted to deeply frozen data before invariant
|
|
59
|
+
evaluation and hashing. `replayMeshReducerScenario()` compares chained
|
|
60
|
+
semantic records and reports the first divergent record.
|
|
61
|
+
|
|
62
|
+
The canonical resilience suite covers all nine Alpha 2 cases: partial-view
|
|
63
|
+
capability allocation; an untrusted false claim followed by reallocation;
|
|
64
|
+
lost bid and acceptance deadlines; duplicate/reorder equivalence; checkpointed
|
|
65
|
+
crash recovery; minority partition fencing; no quorum; owner-unavailable
|
|
66
|
+
fencing; and identical replay plus controlled divergence. Every case reports a
|
|
67
|
+
fixed seed, configuration/fault/chain digests, explicit bounds, and serialized
|
|
68
|
+
faults.
|
|
69
|
+
|
|
70
|
+
`snapshot()` now emits strict schema version 2 with the ordered queue, retained
|
|
71
|
+
event IDs, PRNG substreams, fault cursor, current directed topology, peer
|
|
72
|
+
availability, wall-clock offsets, peer states, outbound allocators, metrics,
|
|
73
|
+
records and configuration/fault/trace digests. Restore is explicit:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
const snapshot = kernel.snapshot();
|
|
77
|
+
const resumed = await restoreMeshSimulationKernel(config, snapshot);
|
|
78
|
+
const trace = await resumed.runUntilIdle();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Restore rejects unknown fields, wrong schemas or configuration/fault digests,
|
|
82
|
+
over-limit queues and records, malformed topology/peer indexes, inconsistent
|
|
83
|
+
metrics and broken trace chains. The original runtime configuration supplies
|
|
84
|
+
cryptographic handles; no key material is serialized.
|
|
85
|
+
|
|
86
|
+
Fault metrics distinguish applied fault events, crash/resume, drops,
|
|
87
|
+
duplicates, delays, reorders, partition/heal operations, clock-offset changes
|
|
88
|
+
and events suppressed by crashes or partitions. Full traces include the
|
|
89
|
+
normalized fault plan and an applied-fault ledger.
|
|
90
|
+
|
|
20
91
|
Cryptographic handles, private keys and callbacks are runtime dependencies and
|
|
21
92
|
are excluded from configuration digests, snapshots and traces. Replays within
|
|
22
93
|
one test or process may reuse the same generated key handles; private material
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,53 @@ import type { MeshCryptoPolicy, MeshEnvelopeSigner, MeshEnvelopeVerifier, MeshKe
|
|
|
3
3
|
import { type MeshProtocolOptions, type SignedMeshEnvelope } from '@agentplat/mesh-protocol';
|
|
4
4
|
export type MeshSimulationPrngVersion = 'xorshift32-v1';
|
|
5
5
|
export type MeshSimulationRecordingMode = 'full' | 'digest' | 'metrics';
|
|
6
|
+
export type MeshSimulationFaultKind = 'peer.crash' | 'peer.resume' | 'message.drop' | 'message.duplicate' | 'message.delay' | 'message.reorder' | 'network.partition' | 'network.heal' | 'clock.offset';
|
|
7
|
+
interface MeshSimulationFaultBase {
|
|
8
|
+
readonly faultId: string;
|
|
9
|
+
readonly logicalTime: MeshLogicalTime;
|
|
10
|
+
readonly priority: number;
|
|
11
|
+
}
|
|
12
|
+
export type MeshSimulationFault = (MeshSimulationFaultBase & {
|
|
13
|
+
readonly kind: 'peer.crash' | 'peer.resume';
|
|
14
|
+
readonly peerId: string;
|
|
15
|
+
}) | (MeshSimulationFaultBase & {
|
|
16
|
+
readonly kind: 'message.drop';
|
|
17
|
+
readonly deliveryEventId: string;
|
|
18
|
+
}) | (MeshSimulationFaultBase & {
|
|
19
|
+
readonly kind: 'message.duplicate';
|
|
20
|
+
readonly deliveryEventId: string;
|
|
21
|
+
readonly copies: number;
|
|
22
|
+
}) | (MeshSimulationFaultBase & {
|
|
23
|
+
readonly kind: 'message.delay';
|
|
24
|
+
readonly deliveryEventId: string;
|
|
25
|
+
readonly delay: MeshLogicalTime;
|
|
26
|
+
}) | (MeshSimulationFaultBase & {
|
|
27
|
+
readonly kind: 'message.reorder';
|
|
28
|
+
readonly deliveryEventId: string;
|
|
29
|
+
readonly newLogicalTime: MeshLogicalTime;
|
|
30
|
+
readonly newPriority: number;
|
|
31
|
+
}) | (MeshSimulationFaultBase & {
|
|
32
|
+
readonly kind: 'network.partition' | 'network.heal';
|
|
33
|
+
readonly links: readonly {
|
|
34
|
+
readonly fromPeerId: string;
|
|
35
|
+
readonly toPeerId: string;
|
|
36
|
+
}[];
|
|
37
|
+
}) | (MeshSimulationFaultBase & {
|
|
38
|
+
readonly kind: 'clock.offset';
|
|
39
|
+
readonly peerId: string;
|
|
40
|
+
readonly offset: number;
|
|
41
|
+
});
|
|
42
|
+
/** Closed, serialized fault schedule interpreted only at driver boundaries. */
|
|
43
|
+
export interface MeshSimulationFaultPlan {
|
|
44
|
+
readonly schemaVersion: 1;
|
|
45
|
+
readonly faults: readonly MeshSimulationFault[];
|
|
46
|
+
}
|
|
47
|
+
export declare const MESH_SIMULATION_FAULT_LIMITS: Readonly<{
|
|
48
|
+
maximumFaults: 4096;
|
|
49
|
+
maximumDuplicateCopies: 16;
|
|
50
|
+
maximumClockOffset: number;
|
|
51
|
+
maximumLinksPerFault: 4096;
|
|
52
|
+
}>;
|
|
6
53
|
/** Runtime handles are excluded from configuration and trace digests. */
|
|
7
54
|
export interface MeshSimulationPeer {
|
|
8
55
|
readonly peerId: string;
|
|
@@ -37,6 +84,7 @@ export interface MeshSimulationConfig {
|
|
|
37
84
|
readonly peers: readonly MeshSimulationPeer[];
|
|
38
85
|
readonly links: readonly MeshSimulationLink[];
|
|
39
86
|
readonly limits: MeshSimulationLimits;
|
|
87
|
+
readonly faultPlan?: MeshSimulationFaultPlan;
|
|
40
88
|
readonly invariants?: readonly MeshSimulationInvariant[];
|
|
41
89
|
}
|
|
42
90
|
export type MeshSimulationAction = {
|
|
@@ -47,13 +95,18 @@ export type MeshSimulationAction = {
|
|
|
47
95
|
} | {
|
|
48
96
|
readonly kind: 'message.delivery';
|
|
49
97
|
readonly envelope: SignedMeshEnvelope;
|
|
98
|
+
} | {
|
|
99
|
+
readonly kind: 'fault.apply';
|
|
100
|
+
readonly fault: MeshSimulationFault;
|
|
50
101
|
};
|
|
51
102
|
export interface MeshSimulationEventInput {
|
|
52
103
|
readonly eventId: string;
|
|
53
104
|
readonly targetPeerId: string;
|
|
54
105
|
readonly logicalTime: MeshLogicalTime;
|
|
55
106
|
readonly priority: number;
|
|
56
|
-
readonly action: MeshSimulationAction
|
|
107
|
+
readonly action: Exclude<MeshSimulationAction, {
|
|
108
|
+
readonly kind: 'fault.apply';
|
|
109
|
+
}>;
|
|
57
110
|
}
|
|
58
111
|
export interface MeshSimulationOrder {
|
|
59
112
|
readonly logicalTime: MeshLogicalTime;
|
|
@@ -71,27 +124,78 @@ export interface MeshSimulationRecord {
|
|
|
71
124
|
readonly peerId: string;
|
|
72
125
|
readonly order: MeshSimulationOrder;
|
|
73
126
|
readonly inputKind: MeshSimulationAction['kind'];
|
|
127
|
+
readonly inputDeliverySourcePeerId?: string;
|
|
74
128
|
readonly actionDigest: string;
|
|
75
129
|
readonly accepted?: boolean;
|
|
76
130
|
readonly rejectionCode?: string;
|
|
131
|
+
readonly faultId?: string;
|
|
132
|
+
readonly faultKind?: MeshSimulationFaultKind;
|
|
133
|
+
readonly faultApplied?: boolean;
|
|
77
134
|
readonly effectKinds: readonly MeshPeerEffect['kind'][];
|
|
135
|
+
readonly metricsDelta: MeshSimulationMetricsDelta;
|
|
136
|
+
readonly transportOutcome: MeshSimulationTransportOutcome;
|
|
78
137
|
readonly effectsDigest: string;
|
|
79
138
|
readonly stateDigest: string;
|
|
80
139
|
readonly chainDigest: string;
|
|
81
140
|
}
|
|
141
|
+
export type MeshSimulationMetricsDelta = Readonly<Omit<MeshSimulationMetrics, 'finalLogicalTime'>>;
|
|
142
|
+
export interface MeshSimulationTransportOutcome {
|
|
143
|
+
readonly delivered: number;
|
|
144
|
+
readonly droppedByCrash: number;
|
|
145
|
+
readonly droppedByPartition: number;
|
|
146
|
+
readonly droppedByCrashAndPartition: number;
|
|
147
|
+
readonly droppedByDestinationMissing: number;
|
|
148
|
+
readonly deliveries: readonly MeshSimulationTransportDeliveryOutcome[];
|
|
149
|
+
}
|
|
150
|
+
export interface MeshSimulationTransportDeliveryOutcome {
|
|
151
|
+
readonly eventId: string;
|
|
152
|
+
readonly fromPeerId: string;
|
|
153
|
+
readonly toPeerId: string;
|
|
154
|
+
readonly outcome: 'delivered' | 'crash' | 'partition' | 'crash_partition' | 'destination_missing';
|
|
155
|
+
}
|
|
82
156
|
export interface MeshSimulationMetrics {
|
|
83
157
|
readonly processedEvents: number;
|
|
84
158
|
readonly emittedEffects: number;
|
|
85
159
|
readonly deliveredMessages: number;
|
|
86
160
|
readonly rejectedMessages: number;
|
|
161
|
+
readonly faultEvents: number;
|
|
162
|
+
readonly peerCrashes: number;
|
|
163
|
+
readonly peerResumes: number;
|
|
164
|
+
readonly droppedMessages: number;
|
|
165
|
+
readonly duplicatedMessages: number;
|
|
166
|
+
readonly delayedMessages: number;
|
|
167
|
+
readonly reorderedMessages: number;
|
|
168
|
+
readonly partitions: number;
|
|
169
|
+
readonly heals: number;
|
|
170
|
+
readonly clockOffsetChanges: number;
|
|
171
|
+
readonly crashSuppressedEvents: number;
|
|
172
|
+
readonly partitionSuppressedMessages: number;
|
|
87
173
|
readonly finalLogicalTime: MeshLogicalTime;
|
|
88
174
|
}
|
|
175
|
+
export interface MeshSimulationFaultRecord {
|
|
176
|
+
readonly faultId: string;
|
|
177
|
+
readonly kind: MeshSimulationFaultKind;
|
|
178
|
+
readonly order: MeshSimulationOrder;
|
|
179
|
+
readonly applied: boolean;
|
|
180
|
+
readonly affectedEventIds: readonly string[];
|
|
181
|
+
readonly affectedLinkIds: readonly string[];
|
|
182
|
+
readonly affectedDeliveries: readonly MeshSimulationAffectedDelivery[];
|
|
183
|
+
}
|
|
184
|
+
export interface MeshSimulationAffectedDelivery {
|
|
185
|
+
readonly eventId: string;
|
|
186
|
+
readonly fromPeerId: string;
|
|
187
|
+
readonly toPeerId: string;
|
|
188
|
+
readonly order: MeshSimulationOrder;
|
|
189
|
+
}
|
|
89
190
|
export interface MeshSimulationTrace {
|
|
90
191
|
readonly seed: number;
|
|
91
192
|
readonly prngVersion: MeshSimulationPrngVersion;
|
|
92
193
|
readonly configurationDigest: string;
|
|
194
|
+
readonly faultPlanDigest: string;
|
|
195
|
+
readonly faultPlan: MeshSimulationFaultPlan;
|
|
93
196
|
readonly chainDigest: string;
|
|
94
197
|
readonly metrics: MeshSimulationMetrics;
|
|
198
|
+
readonly faults: readonly MeshSimulationFaultRecord[];
|
|
95
199
|
readonly records?: readonly MeshSimulationRecord[];
|
|
96
200
|
readonly peerStates: Readonly<Record<string, MeshPeerState>>;
|
|
97
201
|
}
|
|
@@ -104,13 +208,23 @@ export interface MeshSimulationInvariant {
|
|
|
104
208
|
}): void;
|
|
105
209
|
}
|
|
106
210
|
export interface MeshSimulationSnapshot {
|
|
107
|
-
readonly schemaVersion:
|
|
211
|
+
readonly schemaVersion: 2;
|
|
212
|
+
readonly configurationDigest: string;
|
|
213
|
+
readonly faultPlanDigest: string;
|
|
108
214
|
readonly logicalTime: MeshLogicalTime;
|
|
109
215
|
readonly insertionSequence: number;
|
|
216
|
+
readonly faultCursor: number;
|
|
110
217
|
readonly peerStates: Readonly<Record<string, MeshPeerState>>;
|
|
111
218
|
readonly outboundSequences: Readonly<Record<string, number>>;
|
|
112
219
|
readonly prngStates: Readonly<Record<string, number>>;
|
|
220
|
+
readonly peerAvailability: Readonly<Record<string, boolean>>;
|
|
221
|
+
readonly clockOffsets: Readonly<Record<string, number>>;
|
|
222
|
+
readonly topology: readonly MeshSimulationLink[];
|
|
113
223
|
readonly queuedEvents: readonly MeshSimulationEvent[];
|
|
224
|
+
readonly eventIds: readonly string[];
|
|
225
|
+
readonly metrics: MeshSimulationMetrics;
|
|
226
|
+
readonly records: readonly MeshSimulationRecord[];
|
|
227
|
+
readonly faults: readonly MeshSimulationFaultRecord[];
|
|
114
228
|
readonly chainDigest: string;
|
|
115
229
|
}
|
|
116
230
|
export interface MeshSimulationReplayResult {
|
|
@@ -130,7 +244,10 @@ export interface MeshSimulationKernel {
|
|
|
130
244
|
}
|
|
131
245
|
/** Creates a bounded kernel after hashing its serializable configuration. */
|
|
132
246
|
export declare function createMeshSimulationKernel(config: MeshSimulationConfig): Promise<MeshSimulationKernel>;
|
|
247
|
+
/** Restores a strict v2 snapshot using the runtime handles from the same config. */
|
|
248
|
+
export declare function restoreMeshSimulationKernel(config: MeshSimulationConfig, snapshot: unknown): Promise<MeshSimulationKernel>;
|
|
133
249
|
export declare function runMeshSimulation(config: MeshSimulationConfig, events: readonly MeshSimulationEventInput[]): Promise<MeshSimulationTrace>;
|
|
134
250
|
export declare function replayMeshSimulation(config: MeshSimulationConfig, events: readonly MeshSimulationEventInput[], expected: MeshSimulationTrace): Promise<MeshSimulationReplayResult>;
|
|
135
251
|
export declare const THREE_PEER_SCENARIO_IDS: readonly ["peer-a", "peer-b", "peer-c"];
|
|
252
|
+
export * from './reducer-scenario.js';
|
|
136
253
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|