@its-not-rocket-science/ananke 0.1.69 → 0.5.1

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 (165) hide show
  1. package/CHANGELOG.md +254 -0
  2. package/README.md +150 -432
  3. package/STABLE_API.md +113 -490
  4. package/conformance/README.md +46 -44
  5. package/conformance/lockstep-sequence.json +395 -395
  6. package/conformance/phase-order.json +21 -0
  7. package/conformance/replay-parity.json +65 -65
  8. package/conformance/state-hash-regression.json +39 -0
  9. package/conformance/state-hash.json +23 -22
  10. package/dist/src/conformance.d.ts +8 -2
  11. package/dist/src/content/index.d.ts +3 -0
  12. package/dist/src/content/index.js +2 -0
  13. package/dist/src/content/injector.d.ts +19 -0
  14. package/dist/src/content/injector.js +61 -0
  15. package/dist/src/content/loader.d.ts +3 -0
  16. package/dist/src/content/loader.js +170 -0
  17. package/dist/src/content/types.d.ts +56 -0
  18. package/dist/src/content/types.js +1 -0
  19. package/dist/src/content/validator.d.ts +6 -0
  20. package/dist/src/content/validator.js +14 -0
  21. package/dist/src/content-pack.d.ts +3 -2
  22. package/dist/src/content-pack.js +205 -10
  23. package/dist/src/data-governance.d.ts +73 -0
  24. package/dist/src/data-governance.js +188 -0
  25. package/dist/src/debug.d.ts +6 -0
  26. package/dist/src/debug.js +9 -0
  27. package/dist/src/determinism.d.ts +12 -0
  28. package/dist/src/determinism.js +93 -0
  29. package/dist/src/dialogue.d.ts +41 -0
  30. package/dist/src/dialogue.js +113 -2
  31. package/dist/src/economy.d.ts +97 -3
  32. package/dist/src/economy.js +191 -37
  33. package/dist/src/history/autosave.d.ts +19 -0
  34. package/dist/src/history/autosave.js +98 -0
  35. package/dist/src/history/timetravel.d.ts +28 -0
  36. package/dist/src/history/timetravel.js +61 -0
  37. package/dist/src/index.d.ts +19 -31
  38. package/dist/src/index.js +20 -38
  39. package/dist/src/model3d.js +63 -2
  40. package/dist/src/narrative/combat-logger.d.ts +25 -0
  41. package/dist/src/narrative/combat-logger.js +97 -0
  42. package/dist/src/narrative/plausibility.d.ts +30 -0
  43. package/dist/src/narrative/plausibility.js +70 -0
  44. package/dist/src/narrative-layer.d.ts +2 -0
  45. package/dist/src/narrative-layer.js +2 -0
  46. package/dist/src/navigation/causal-chain.d.ts +26 -0
  47. package/dist/src/navigation/causal-chain.js +74 -0
  48. package/dist/src/netcode.d.ts +1 -1
  49. package/dist/src/netcode.js +1 -1
  50. package/dist/src/performance/adaptive-tick.d.ts +23 -0
  51. package/dist/src/performance/adaptive-tick.js +50 -0
  52. package/dist/src/plugins/loader.d.ts +23 -0
  53. package/dist/src/plugins/loader.js +86 -0
  54. package/dist/src/plugins/registry.d.ts +11 -0
  55. package/dist/src/plugins/registry.js +28 -0
  56. package/dist/src/plugins/types.d.ts +31 -0
  57. package/dist/src/plugins/types.js +7 -0
  58. package/dist/src/replay.js +5 -2
  59. package/dist/src/scenario.js +2 -1
  60. package/dist/src/serialization/binary.d.ts +5 -0
  61. package/dist/src/serialization/binary.js +193 -0
  62. package/dist/src/session.d.ts +115 -0
  63. package/dist/src/session.js +228 -0
  64. package/dist/src/sim/ai/decide.js +1 -1
  65. package/dist/src/sim/ai/personality.js +2 -2
  66. package/dist/src/sim/bodyplan.d.ts +30 -0
  67. package/dist/src/sim/context.d.ts +2 -0
  68. package/dist/src/sim/kernel.js +80 -1294
  69. package/dist/src/sim/normalization.d.ts +12 -0
  70. package/dist/src/sim/normalization.js +92 -0
  71. package/dist/src/sim/resolvers/attack-resolver.d.ts +30 -0
  72. package/dist/src/sim/resolvers/attack-resolver.js +310 -0
  73. package/dist/src/sim/resolvers/capability-resolver.d.ts +15 -0
  74. package/dist/src/sim/resolvers/capability-resolver.js +270 -0
  75. package/dist/src/sim/resolvers/grapple-resolver.d.ts +28 -0
  76. package/dist/src/sim/resolvers/grapple-resolver.js +70 -0
  77. package/dist/src/sim/resolvers/shoot-resolver.d.ts +27 -0
  78. package/dist/src/sim/resolvers/shoot-resolver.js +212 -0
  79. package/dist/src/sim/resolvers/treat-resolver.d.ts +16 -0
  80. package/dist/src/sim/resolvers/treat-resolver.js +77 -0
  81. package/dist/src/sim/step/apply/intents.d.ts +6 -0
  82. package/dist/src/sim/step/apply/intents.js +83 -0
  83. package/dist/src/sim/step/kernel-pipeline.d.ts +9 -0
  84. package/dist/src/sim/step/kernel-pipeline.js +15 -0
  85. package/dist/src/sim/step/phases/capability-phase.d.ts +8 -0
  86. package/dist/src/sim/step/phases/capability-phase.js +65 -0
  87. package/dist/src/sim/step/phases/cooldowns-phase.d.ts +3 -0
  88. package/dist/src/sim/step/phases/cooldowns-phase.js +37 -0
  89. package/dist/src/sim/step/phases/prepare-phase.d.ts +10 -0
  90. package/dist/src/sim/step/phases/prepare-phase.js +33 -0
  91. package/dist/src/sim/step/pipeline.d.ts +2 -0
  92. package/dist/src/sim/step/pipeline.js +15 -0
  93. package/dist/src/sim/step/resolvers/impact-resolver.d.ts +9 -0
  94. package/dist/src/sim/step/resolvers/impact-resolver.js +55 -0
  95. package/dist/src/sim/step/world-phases.d.ts +7 -0
  96. package/dist/src/sim/step/world-phases.js +15 -0
  97. package/dist/src/sim/step/world-step-context.d.ts +23 -0
  98. package/dist/src/sim/step/world-step-context.js +1 -0
  99. package/dist/src/sim/systemic-toxicology.js +1 -1
  100. package/dist/src/sim/team.js +2 -2
  101. package/dist/src/sim/testing.js +4 -3
  102. package/dist/src/sim/toxicology.d.ts +1 -1
  103. package/dist/src/sim/toxicology.js +1 -1
  104. package/dist/src/sim/world.d.ts +17 -24
  105. package/dist/src/snapshot.js +3 -6
  106. package/dist/src/tier2.d.ts +19 -0
  107. package/dist/src/tier2.js +21 -0
  108. package/dist/src/tier3.d.ts +10 -0
  109. package/dist/src/tier3.js +12 -0
  110. package/dist/src/version.d.ts +6 -0
  111. package/dist/src/version.js +8 -0
  112. package/dist/src/wasm/bridge.d.ts +14 -0
  113. package/dist/src/wasm/bridge.js +84 -0
  114. package/dist/src/wasm-kernel.d.ts +2 -0
  115. package/dist/src/wasm-kernel.js +1 -0
  116. package/dist/src/world-evolution-backend/engine.d.ts +4 -0
  117. package/dist/src/world-evolution-backend/engine.js +347 -0
  118. package/dist/src/world-evolution-backend/host-schema.d.ts +145 -0
  119. package/dist/src/world-evolution-backend/host-schema.js +375 -0
  120. package/dist/src/world-evolution-backend/index.d.ts +1 -0
  121. package/dist/src/world-evolution-backend/index.js +1 -0
  122. package/dist/src/world-evolution-backend/open-world-host-adapter.d.ts +96 -0
  123. package/dist/src/world-evolution-backend/open-world-host-adapter.js +208 -0
  124. package/dist/src/world-evolution-backend/profiles.d.ts +4 -0
  125. package/dist/src/world-evolution-backend/profiles.js +136 -0
  126. package/dist/src/world-evolution-backend/public.d.ts +11 -0
  127. package/dist/src/world-evolution-backend/public.js +7 -0
  128. package/dist/src/world-evolution-backend/reproducibility.d.ts +8 -0
  129. package/dist/src/world-evolution-backend/reproducibility.js +35 -0
  130. package/dist/src/world-evolution-backend/timeline.d.ts +6 -0
  131. package/dist/src/world-evolution-backend/timeline.js +337 -0
  132. package/dist/src/world-evolution-backend/types.d.ts +138 -0
  133. package/dist/src/world-evolution-backend/types.js +1 -0
  134. package/dist/src/world-evolution-host-backend.d.ts +51 -0
  135. package/dist/src/world-evolution-host-backend.js +97 -0
  136. package/dist/src/world-evolution.d.ts +201 -0
  137. package/dist/src/world-evolution.js +543 -0
  138. package/dist/src/world-factory.js +2 -1
  139. package/dist/tools/pack-cli.js +55 -2
  140. package/docs/bridge-contract.md +140 -332
  141. package/docs/completion-evidence-dashboard.md +63 -0
  142. package/docs/host-contract.md +86 -310
  143. package/docs/host-world-evolution-schema.md +155 -0
  144. package/docs/integration-primer.md +29 -22
  145. package/docs/migration-monolith-to-modular.md +102 -120
  146. package/docs/package-architecture.md +116 -323
  147. package/docs/plugins/README.md +42 -0
  148. package/docs/plugins/hooks.md +22 -0
  149. package/docs/plugins/publishing.md +29 -0
  150. package/docs/plugins/security-model.md +273 -0
  151. package/docs/project-overview.md +30 -30
  152. package/docs/release-dashboard.md +47 -0
  153. package/docs/session-api.md +127 -0
  154. package/docs/stable-api-manifest.json +52 -0
  155. package/docs/trust-dashboard.md +37 -0
  156. package/docs/versioning.md +256 -245
  157. package/docs/wire-protocol.md +140 -209
  158. package/docs/world-evolution-backend.md +200 -0
  159. package/docs/world-evolution-engine.md +150 -0
  160. package/docs/world-evolution-host-backend.md +70 -0
  161. package/docs/world-evolution-orchestration.md +248 -0
  162. package/package.json +125 -6
  163. package/schema/content-pack.schema.json +85 -0
  164. package/schema/plugin.schema.json +57 -0
  165. package/schema/world-evolution-input.schema.json +196 -0
@@ -1,396 +1,396 @@
1
- {
2
- "version": "conformance/v1",
3
- "id": "lockstep-sequence-01",
4
- "description": "Stepping the simulation must produce identical entity state at each tick.",
5
- "kind": "lockstep-sequence",
6
- "notes": [
7
- "seed=42; 2 entities (lineInfantry AI); 20 ticks.",
8
- "tractionCoeff = q(0.90) = 9000.",
9
- "At each tick: verify hashWorldState === hashHex and entity fields match.",
10
- "x_m values are rounded to 3 decimal places for cross-language comparison.",
11
- "shock_Q is raw fixed-point (SCALE.Q = 10000); 10000 = 100% shock."
12
- ],
13
- "context": {
14
- "tractionCoeff_Q": 9000
15
- },
16
- "snapshots": [
17
- {
18
- "tick": 0,
19
- "hashHex": "0xec578e005fcbef34",
20
- "entities": [
21
- {
22
- "id": 1,
23
- "x_m": -0.5,
24
- "dead": false,
25
- "shock_Q": 0
26
- },
27
- {
28
- "id": 2,
29
- "x_m": 0.5,
30
- "dead": false,
31
- "shock_Q": 0
32
- }
33
- ]
34
- },
35
- {
36
- "tick": 1,
37
- "hashHex": "0x94e31245fae65074",
38
- "entities": [
39
- {
40
- "id": 1,
41
- "x_m": -0.478,
42
- "dead": false,
43
- "shock_Q": 0
44
- },
45
- {
46
- "id": 2,
47
- "x_m": 0.479,
48
- "dead": false,
49
- "shock_Q": 0
50
- }
51
- ]
52
- },
53
- {
54
- "tick": 2,
55
- "hashHex": "0x5f433b5815b27103",
56
- "entities": [
57
- {
58
- "id": 1,
59
- "x_m": -0.433,
60
- "dead": false,
61
- "shock_Q": 0
62
- },
63
- {
64
- "id": 2,
65
- "x_m": 0.437,
66
- "dead": false,
67
- "shock_Q": 0
68
- }
69
- ]
70
- },
71
- {
72
- "tick": 3,
73
- "hashHex": "0xacb3ed02702144c4",
74
- "entities": [
75
- {
76
- "id": 1,
77
- "x_m": -0.366,
78
- "dead": false,
79
- "shock_Q": 0
80
- },
81
- {
82
- "id": 2,
83
- "x_m": 0.373,
84
- "dead": false,
85
- "shock_Q": 0
86
- }
87
- ]
88
- },
89
- {
90
- "tick": 4,
91
- "hashHex": "0xd8cd8894e32b5d24",
92
- "entities": [
93
- {
94
- "id": 1,
95
- "x_m": -0.276,
96
- "dead": false,
97
- "shock_Q": 0
98
- },
99
- {
100
- "id": 2,
101
- "x_m": 0.289,
102
- "dead": false,
103
- "shock_Q": 0
104
- }
105
- ]
106
- },
107
- {
108
- "tick": 5,
109
- "hashHex": "0xd5e1600766daf978",
110
- "entities": [
111
- {
112
- "id": 1,
113
- "x_m": -0.164,
114
- "dead": false,
115
- "shock_Q": 0
116
- },
117
- {
118
- "id": 2,
119
- "x_m": 0.183,
120
- "dead": false,
121
- "shock_Q": 0
122
- }
123
- ]
124
- },
125
- {
126
- "tick": 6,
127
- "hashHex": "0xf775238c6b6c2339",
128
- "entities": [
129
- {
130
- "id": 1,
131
- "x_m": -0.049,
132
- "dead": false,
133
- "shock_Q": 0
134
- },
135
- {
136
- "id": 2,
137
- "x_m": 0.076,
138
- "dead": false,
139
- "shock_Q": 0
140
- }
141
- ]
142
- },
143
- {
144
- "tick": 7,
145
- "hashHex": "0xa4adf7d41c67f090",
146
- "entities": [
147
- {
148
- "id": 1,
149
- "x_m": 0.031,
150
- "dead": false,
151
- "shock_Q": 0
152
- },
153
- {
154
- "id": 2,
155
- "x_m": 0.004,
156
- "dead": false,
157
- "shock_Q": 0
158
- }
159
- ]
160
- },
161
- {
162
- "tick": 8,
163
- "hashHex": "0x5f39532dfa0cf053",
164
- "entities": [
165
- {
166
- "id": 1,
167
- "x_m": 0.168,
168
- "dead": false,
169
- "shock_Q": 0
170
- },
171
- {
172
- "id": 2,
173
- "x_m": -0.131,
174
- "dead": false,
175
- "shock_Q": 0
176
- }
177
- ]
178
- },
179
- {
180
- "tick": 9,
181
- "hashHex": "0xa87941a6b840c6d7",
182
- "entities": [
183
- {
184
- "id": 1,
185
- "x_m": 0.309,
186
- "dead": false,
187
- "shock_Q": 0
188
- },
189
- {
190
- "id": 2,
191
- "x_m": -0.272,
192
- "dead": false,
193
- "shock_Q": 0
194
- }
195
- ]
196
- },
197
- {
198
- "tick": 10,
199
- "hashHex": "0x49d767bfed374445",
200
- "entities": [
201
- {
202
- "id": 1,
203
- "x_m": 0.429,
204
- "dead": false,
205
- "shock_Q": 0
206
- },
207
- {
208
- "id": 2,
209
- "x_m": -0.391,
210
- "dead": false,
211
- "shock_Q": 0
212
- }
213
- ]
214
- },
215
- {
216
- "tick": 11,
217
- "hashHex": "0xce74d9688b813796",
218
- "entities": [
219
- {
220
- "id": 1,
221
- "x_m": 0.526,
222
- "dead": false,
223
- "shock_Q": 0
224
- },
225
- {
226
- "id": 2,
227
- "x_m": -0.49,
228
- "dead": false,
229
- "shock_Q": 0
230
- }
231
- ]
232
- },
233
- {
234
- "tick": 12,
235
- "hashHex": "0x1efbc95cd539db56",
236
- "entities": [
237
- {
238
- "id": 1,
239
- "x_m": 0.6,
240
- "dead": false,
241
- "shock_Q": 0
242
- },
243
- {
244
- "id": 2,
245
- "x_m": -0.567,
246
- "dead": false,
247
- "shock_Q": 0
248
- }
249
- ]
250
- },
251
- {
252
- "tick": 13,
253
- "hashHex": "0xd4f1d44a8c11b01e",
254
- "entities": [
255
- {
256
- "id": 1,
257
- "x_m": 0.652,
258
- "dead": false,
259
- "shock_Q": 0
260
- },
261
- {
262
- "id": 2,
263
- "x_m": -0.623,
264
- "dead": false,
265
- "shock_Q": 0
266
- }
267
- ]
268
- },
269
- {
270
- "tick": 14,
271
- "hashHex": "0xc9fd237324abe444",
272
- "entities": [
273
- {
274
- "id": 1,
275
- "x_m": 0.682,
276
- "dead": false,
277
- "shock_Q": 0
278
- },
279
- {
280
- "id": 2,
281
- "x_m": -0.659,
282
- "dead": false,
283
- "shock_Q": 0
284
- }
285
- ]
286
- },
287
- {
288
- "tick": 15,
289
- "hashHex": "0xaf66c06fb25eac2d",
290
- "entities": [
291
- {
292
- "id": 1,
293
- "x_m": 0.689,
294
- "dead": false,
295
- "shock_Q": 0
296
- },
297
- {
298
- "id": 2,
299
- "x_m": -0.672,
300
- "dead": false,
301
- "shock_Q": 0
302
- }
303
- ]
304
- },
305
- {
306
- "tick": 16,
307
- "hashHex": "0xc6a0cb965ff544d1",
308
- "entities": [
309
- {
310
- "id": 1,
311
- "x_m": 0.689,
312
- "dead": false,
313
- "shock_Q": 0
314
- },
315
- {
316
- "id": 2,
317
- "x_m": -0.672,
318
- "dead": false,
319
- "shock_Q": 0
320
- }
321
- ]
322
- },
323
- {
324
- "tick": 17,
325
- "hashHex": "0xc067905d49583c8a",
326
- "entities": [
327
- {
328
- "id": 1,
329
- "x_m": 0.689,
330
- "dead": false,
331
- "shock_Q": 0
332
- },
333
- {
334
- "id": 2,
335
- "x_m": -0.672,
336
- "dead": false,
337
- "shock_Q": 0
338
- }
339
- ]
340
- },
341
- {
342
- "tick": 18,
343
- "hashHex": "0x8e104127ec08a2c7",
344
- "entities": [
345
- {
346
- "id": 1,
347
- "x_m": 0.689,
348
- "dead": false,
349
- "shock_Q": 0
350
- },
351
- {
352
- "id": 2,
353
- "x_m": -0.672,
354
- "dead": false,
355
- "shock_Q": 0
356
- }
357
- ]
358
- },
359
- {
360
- "tick": 19,
361
- "hashHex": "0xb3468a0cce37d1ea",
362
- "entities": [
363
- {
364
- "id": 1,
365
- "x_m": 0.667,
366
- "dead": false,
367
- "shock_Q": 0
368
- },
369
- {
370
- "id": 2,
371
- "x_m": -0.651,
372
- "dead": false,
373
- "shock_Q": 0
374
- }
375
- ]
376
- },
377
- {
378
- "tick": 20,
379
- "hashHex": "0xacb04548fd68a7fb",
380
- "entities": [
381
- {
382
- "id": 1,
383
- "x_m": 0.622,
384
- "dead": false,
385
- "shock_Q": 0
386
- },
387
- {
388
- "id": 2,
389
- "x_m": -0.609,
390
- "dead": false,
391
- "shock_Q": 0
392
- }
393
- ]
394
- }
395
- ]
1
+ {
2
+ "version": "conformance/v1",
3
+ "id": "lockstep-sequence-01",
4
+ "description": "Stepping the simulation must produce identical entity state at each tick.",
5
+ "kind": "lockstep-sequence",
6
+ "notes": [
7
+ "seed=42; 2 entities (lineInfantry AI); 20 ticks.",
8
+ "tractionCoeff = q(0.90) = 9000.",
9
+ "At each tick: verify hashWorldState === hashHex and entity fields match.",
10
+ "x_m values are rounded to 3 decimal places for cross-language comparison.",
11
+ "shock_Q is raw fixed-point (SCALE.Q = 10000); 10000 = 100% shock."
12
+ ],
13
+ "context": {
14
+ "tractionCoeff_Q": 9000
15
+ },
16
+ "snapshots": [
17
+ {
18
+ "tick": 0,
19
+ "hashHex": "0xfdf82f148d0b2364",
20
+ "entities": [
21
+ {
22
+ "id": 1,
23
+ "x_m": -0.5,
24
+ "dead": false,
25
+ "shock_Q": 0
26
+ },
27
+ {
28
+ "id": 2,
29
+ "x_m": 0.5,
30
+ "dead": false,
31
+ "shock_Q": 0
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "tick": 1,
37
+ "hashHex": "0x94e31245fae65074",
38
+ "entities": [
39
+ {
40
+ "id": 1,
41
+ "x_m": -0.478,
42
+ "dead": false,
43
+ "shock_Q": 0
44
+ },
45
+ {
46
+ "id": 2,
47
+ "x_m": 0.479,
48
+ "dead": false,
49
+ "shock_Q": 0
50
+ }
51
+ ]
52
+ },
53
+ {
54
+ "tick": 2,
55
+ "hashHex": "0x5f433b5815b27103",
56
+ "entities": [
57
+ {
58
+ "id": 1,
59
+ "x_m": -0.433,
60
+ "dead": false,
61
+ "shock_Q": 0
62
+ },
63
+ {
64
+ "id": 2,
65
+ "x_m": 0.437,
66
+ "dead": false,
67
+ "shock_Q": 0
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "tick": 3,
73
+ "hashHex": "0xacb3ed02702144c4",
74
+ "entities": [
75
+ {
76
+ "id": 1,
77
+ "x_m": -0.366,
78
+ "dead": false,
79
+ "shock_Q": 0
80
+ },
81
+ {
82
+ "id": 2,
83
+ "x_m": 0.373,
84
+ "dead": false,
85
+ "shock_Q": 0
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "tick": 4,
91
+ "hashHex": "0xd8cd8894e32b5d24",
92
+ "entities": [
93
+ {
94
+ "id": 1,
95
+ "x_m": -0.276,
96
+ "dead": false,
97
+ "shock_Q": 0
98
+ },
99
+ {
100
+ "id": 2,
101
+ "x_m": 0.289,
102
+ "dead": false,
103
+ "shock_Q": 0
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "tick": 5,
109
+ "hashHex": "0xd5e1600766daf978",
110
+ "entities": [
111
+ {
112
+ "id": 1,
113
+ "x_m": -0.164,
114
+ "dead": false,
115
+ "shock_Q": 0
116
+ },
117
+ {
118
+ "id": 2,
119
+ "x_m": 0.183,
120
+ "dead": false,
121
+ "shock_Q": 0
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ "tick": 6,
127
+ "hashHex": "0xf775238c6b6c2339",
128
+ "entities": [
129
+ {
130
+ "id": 1,
131
+ "x_m": -0.049,
132
+ "dead": false,
133
+ "shock_Q": 0
134
+ },
135
+ {
136
+ "id": 2,
137
+ "x_m": 0.076,
138
+ "dead": false,
139
+ "shock_Q": 0
140
+ }
141
+ ]
142
+ },
143
+ {
144
+ "tick": 7,
145
+ "hashHex": "0xa4adf7d41c67f090",
146
+ "entities": [
147
+ {
148
+ "id": 1,
149
+ "x_m": 0.031,
150
+ "dead": false,
151
+ "shock_Q": 0
152
+ },
153
+ {
154
+ "id": 2,
155
+ "x_m": 0.004,
156
+ "dead": false,
157
+ "shock_Q": 0
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "tick": 8,
163
+ "hashHex": "0x5f39532dfa0cf053",
164
+ "entities": [
165
+ {
166
+ "id": 1,
167
+ "x_m": 0.168,
168
+ "dead": false,
169
+ "shock_Q": 0
170
+ },
171
+ {
172
+ "id": 2,
173
+ "x_m": -0.131,
174
+ "dead": false,
175
+ "shock_Q": 0
176
+ }
177
+ ]
178
+ },
179
+ {
180
+ "tick": 9,
181
+ "hashHex": "0xa87941a6b840c6d7",
182
+ "entities": [
183
+ {
184
+ "id": 1,
185
+ "x_m": 0.309,
186
+ "dead": false,
187
+ "shock_Q": 0
188
+ },
189
+ {
190
+ "id": 2,
191
+ "x_m": -0.272,
192
+ "dead": false,
193
+ "shock_Q": 0
194
+ }
195
+ ]
196
+ },
197
+ {
198
+ "tick": 10,
199
+ "hashHex": "0x49d767bfed374445",
200
+ "entities": [
201
+ {
202
+ "id": 1,
203
+ "x_m": 0.429,
204
+ "dead": false,
205
+ "shock_Q": 0
206
+ },
207
+ {
208
+ "id": 2,
209
+ "x_m": -0.391,
210
+ "dead": false,
211
+ "shock_Q": 0
212
+ }
213
+ ]
214
+ },
215
+ {
216
+ "tick": 11,
217
+ "hashHex": "0xce74d9688b813796",
218
+ "entities": [
219
+ {
220
+ "id": 1,
221
+ "x_m": 0.526,
222
+ "dead": false,
223
+ "shock_Q": 0
224
+ },
225
+ {
226
+ "id": 2,
227
+ "x_m": -0.49,
228
+ "dead": false,
229
+ "shock_Q": 0
230
+ }
231
+ ]
232
+ },
233
+ {
234
+ "tick": 12,
235
+ "hashHex": "0x1efbc95cd539db56",
236
+ "entities": [
237
+ {
238
+ "id": 1,
239
+ "x_m": 0.6,
240
+ "dead": false,
241
+ "shock_Q": 0
242
+ },
243
+ {
244
+ "id": 2,
245
+ "x_m": -0.567,
246
+ "dead": false,
247
+ "shock_Q": 0
248
+ }
249
+ ]
250
+ },
251
+ {
252
+ "tick": 13,
253
+ "hashHex": "0xd4f1d44a8c11b01e",
254
+ "entities": [
255
+ {
256
+ "id": 1,
257
+ "x_m": 0.652,
258
+ "dead": false,
259
+ "shock_Q": 0
260
+ },
261
+ {
262
+ "id": 2,
263
+ "x_m": -0.623,
264
+ "dead": false,
265
+ "shock_Q": 0
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "tick": 14,
271
+ "hashHex": "0xc9fd237324abe444",
272
+ "entities": [
273
+ {
274
+ "id": 1,
275
+ "x_m": 0.682,
276
+ "dead": false,
277
+ "shock_Q": 0
278
+ },
279
+ {
280
+ "id": 2,
281
+ "x_m": -0.659,
282
+ "dead": false,
283
+ "shock_Q": 0
284
+ }
285
+ ]
286
+ },
287
+ {
288
+ "tick": 15,
289
+ "hashHex": "0xaf66c06fb25eac2d",
290
+ "entities": [
291
+ {
292
+ "id": 1,
293
+ "x_m": 0.689,
294
+ "dead": false,
295
+ "shock_Q": 0
296
+ },
297
+ {
298
+ "id": 2,
299
+ "x_m": -0.672,
300
+ "dead": false,
301
+ "shock_Q": 0
302
+ }
303
+ ]
304
+ },
305
+ {
306
+ "tick": 16,
307
+ "hashHex": "0xc6a0cb965ff544d1",
308
+ "entities": [
309
+ {
310
+ "id": 1,
311
+ "x_m": 0.689,
312
+ "dead": false,
313
+ "shock_Q": 0
314
+ },
315
+ {
316
+ "id": 2,
317
+ "x_m": -0.672,
318
+ "dead": false,
319
+ "shock_Q": 0
320
+ }
321
+ ]
322
+ },
323
+ {
324
+ "tick": 17,
325
+ "hashHex": "0xc067905d49583c8a",
326
+ "entities": [
327
+ {
328
+ "id": 1,
329
+ "x_m": 0.689,
330
+ "dead": false,
331
+ "shock_Q": 0
332
+ },
333
+ {
334
+ "id": 2,
335
+ "x_m": -0.672,
336
+ "dead": false,
337
+ "shock_Q": 0
338
+ }
339
+ ]
340
+ },
341
+ {
342
+ "tick": 18,
343
+ "hashHex": "0x8e104127ec08a2c7",
344
+ "entities": [
345
+ {
346
+ "id": 1,
347
+ "x_m": 0.689,
348
+ "dead": false,
349
+ "shock_Q": 0
350
+ },
351
+ {
352
+ "id": 2,
353
+ "x_m": -0.672,
354
+ "dead": false,
355
+ "shock_Q": 0
356
+ }
357
+ ]
358
+ },
359
+ {
360
+ "tick": 19,
361
+ "hashHex": "0xb3468a0cce37d1ea",
362
+ "entities": [
363
+ {
364
+ "id": 1,
365
+ "x_m": 0.667,
366
+ "dead": false,
367
+ "shock_Q": 0
368
+ },
369
+ {
370
+ "id": 2,
371
+ "x_m": -0.651,
372
+ "dead": false,
373
+ "shock_Q": 0
374
+ }
375
+ ]
376
+ },
377
+ {
378
+ "tick": 20,
379
+ "hashHex": "0xacb04548fd68a7fb",
380
+ "entities": [
381
+ {
382
+ "id": 1,
383
+ "x_m": 0.622,
384
+ "dead": false,
385
+ "shock_Q": 0
386
+ },
387
+ {
388
+ "id": 2,
389
+ "x_m": -0.609,
390
+ "dead": false,
391
+ "shock_Q": 0
392
+ }
393
+ ]
394
+ }
395
+ ]
396
396
  }