@fundamental-engine/core 0.9.1 → 0.9.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.
Files changed (124) hide show
  1. package/README.md +12 -11
  2. package/dist/agents/event-agent.d.ts.map +1 -1
  3. package/dist/agents/event-agent.js +13 -9
  4. package/dist/agents/event-agent.js.map +1 -1
  5. package/dist/config/forces.config.js +2 -2
  6. package/dist/config/forces.config.js.map +1 -1
  7. package/dist/conformance/run.d.ts +2 -2
  8. package/dist/conformance/run.d.ts.map +1 -1
  9. package/dist/conformance/run.js +30 -27
  10. package/dist/conformance/run.js.map +1 -1
  11. package/dist/conformance/types.d.ts +3 -0
  12. package/dist/conformance/types.d.ts.map +1 -1
  13. package/dist/contracts/guards.d.ts +3 -1
  14. package/dist/contracts/guards.d.ts.map +1 -1
  15. package/dist/contracts/guards.js.map +1 -1
  16. package/dist/contracts/passport.d.ts +6 -0
  17. package/dist/contracts/passport.d.ts.map +1 -1
  18. package/dist/contracts/passport.js +12 -3
  19. package/dist/contracts/passport.js.map +1 -1
  20. package/dist/core/accretion.d.ts +1 -1
  21. package/dist/core/accretion.d.ts.map +1 -1
  22. package/dist/core/accretion.js +1 -1
  23. package/dist/core/accretion.js.map +1 -1
  24. package/dist/core/events.d.ts +3 -3
  25. package/dist/core/events.d.ts.map +1 -1
  26. package/dist/core/events.js +1 -1
  27. package/dist/core/feedback-sink.d.ts +1 -1
  28. package/dist/core/feedback-sink.d.ts.map +1 -1
  29. package/dist/core/feedback-sink.js +1 -2
  30. package/dist/core/feedback-sink.js.map +1 -1
  31. package/dist/core/field-snapshot.d.ts +21 -0
  32. package/dist/core/field-snapshot.d.ts.map +1 -0
  33. package/dist/core/field-snapshot.js +0 -0
  34. package/dist/core/field-snapshot.js.map +1 -0
  35. package/dist/core/field.d.ts.map +1 -1
  36. package/dist/core/field.js +1006 -58
  37. package/dist/core/field.js.map +1 -1
  38. package/dist/core/frame-harness.d.ts +2 -2
  39. package/dist/core/frame-harness.d.ts.map +1 -1
  40. package/dist/core/frame-harness.js +2 -2
  41. package/dist/core/frame-harness.js.map +1 -1
  42. package/dist/core/geometry.d.ts +9 -0
  43. package/dist/core/geometry.d.ts.map +1 -1
  44. package/dist/core/geometry.js +16 -0
  45. package/dist/core/geometry.js.map +1 -1
  46. package/dist/core/governance.d.ts +20 -0
  47. package/dist/core/governance.d.ts.map +1 -0
  48. package/dist/core/governance.js +77 -0
  49. package/dist/core/governance.js.map +1 -0
  50. package/dist/core/host.d.ts +95 -21
  51. package/dist/core/host.d.ts.map +1 -1
  52. package/dist/core/host.js +53 -1
  53. package/dist/core/host.js.map +1 -1
  54. package/dist/core/integrator.d.ts +42 -1
  55. package/dist/core/integrator.d.ts.map +1 -1
  56. package/dist/core/integrator.js +229 -27
  57. package/dist/core/integrator.js.map +1 -1
  58. package/dist/core/lane-registry.d.ts +14 -0
  59. package/dist/core/lane-registry.d.ts.map +1 -0
  60. package/dist/core/lane-registry.js +64 -0
  61. package/dist/core/lane-registry.js.map +1 -0
  62. package/dist/core/projection-agent-json.d.ts +12 -0
  63. package/dist/core/projection-agent-json.d.ts.map +1 -0
  64. package/dist/core/projection-agent-json.js +37 -0
  65. package/dist/core/projection-agent-json.js.map +1 -0
  66. package/dist/core/query-lens.d.ts +6 -0
  67. package/dist/core/query-lens.d.ts.map +1 -0
  68. package/dist/core/query-lens.js +24 -0
  69. package/dist/core/query-lens.js.map +1 -0
  70. package/dist/core/reactions.d.ts +7 -0
  71. package/dist/core/reactions.d.ts.map +1 -1
  72. package/dist/core/reactions.js +7 -0
  73. package/dist/core/reactions.js.map +1 -1
  74. package/dist/core/render-modes.d.ts +64 -0
  75. package/dist/core/render-modes.d.ts.map +1 -1
  76. package/dist/core/render-modes.js +165 -0
  77. package/dist/core/render-modes.js.map +1 -1
  78. package/dist/core/scanner.d.ts +29 -3
  79. package/dist/core/scanner.d.ts.map +1 -1
  80. package/dist/core/scanner.js +46 -3
  81. package/dist/core/scanner.js.map +1 -1
  82. package/dist/core/spatial-hash.d.ts +8 -0
  83. package/dist/core/spatial-hash.d.ts.map +1 -1
  84. package/dist/core/spatial-hash.js +26 -3
  85. package/dist/core/spatial-hash.js.map +1 -1
  86. package/dist/core/types.d.ts +762 -8
  87. package/dist/core/types.d.ts.map +1 -1
  88. package/dist/diagnostics/probes.d.ts +11 -1
  89. package/dist/diagnostics/probes.d.ts.map +1 -1
  90. package/dist/diagnostics/probes.js +48 -8
  91. package/dist/diagnostics/probes.js.map +1 -1
  92. package/dist/forces/extended.d.ts.map +1 -1
  93. package/dist/forces/extended.js +8 -2
  94. package/dist/forces/extended.js.map +1 -1
  95. package/dist/forces/natural.d.ts.map +1 -1
  96. package/dist/forces/natural.js +11 -12
  97. package/dist/forces/natural.js.map +1 -1
  98. package/dist/index.d.ts +6 -1
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +6 -1
  101. package/dist/index.js.map +1 -1
  102. package/dist/recipes/compile.d.ts.map +1 -1
  103. package/dist/recipes/compile.js +3 -1
  104. package/dist/recipes/compile.js.map +1 -1
  105. package/dist/recipes/schema.d.ts +1 -1
  106. package/dist/recipes/schema.d.ts.map +1 -1
  107. package/dist/recipes/schema.js +1 -0
  108. package/dist/recipes/schema.js.map +1 -1
  109. package/dist/record/record.d.ts +1 -1
  110. package/dist/record/record.d.ts.map +1 -1
  111. package/dist/semantic/layers.d.ts +16 -2
  112. package/dist/semantic/layers.d.ts.map +1 -1
  113. package/dist/semantic/layers.js +20 -3
  114. package/dist/semantic/layers.js.map +1 -1
  115. package/dist/semantic/materials.js +3 -3
  116. package/dist/semantic/materials.js.map +1 -1
  117. package/dist/semantic/states.js +1 -1
  118. package/dist/semantic/states.js.map +1 -1
  119. package/dist/version.d.ts +1 -1
  120. package/dist/version.js +1 -1
  121. package/dist/visual/visualization.d.ts.map +1 -1
  122. package/dist/visual/visualization.js +4 -0
  123. package/dist/visual/visualization.js.map +1 -1
  124. package/package.json +3 -2
@@ -5,6 +5,28 @@
5
5
  * then integrate and damp. Under first-class mass (§21.3) each additive body force is
6
6
  * scaled by `1/m` as it applies, while velocity-replacing (`kinematic`) forces are left
7
7
  * untouched. Reduced motion (`dt = 0`) freezes the sim (§18).
8
+ *
9
+ * INTEGRATION SCHEMES (`Env.integrator`): the default `'legacy'` is semi-implicit Euler
10
+ * (forces update v, then `x += v·dt`, then a per-frame decay); `'fixed'` keeps the same order
11
+ * but dt-scales the decays (doc 04 §Step 3). `'velocity-verlet'` (#659) is the opt-in
12
+ * second-order scheme, in the stored-acceleration form:
13
+ *
14
+ * x(t+dt) = x(t) + v(t)·dt + ½·a(t)·dt² (position full-step, BEFORE the force pass)
15
+ * a′ = Δv/dt from the force pass (forces evaluated at x(t+dt))
16
+ * v(t+dt) = v(t) + ½·(a(t) + a′)·dt (velocity half-step average)
17
+ *
18
+ * Approximations, deliberate and documented (physics caveat canon): (1) the engine's force model
19
+ * is impulse-based and velocity-dependent (drag-like forces read the CURRENT v), so a′ is taken
20
+ * as the pass's net Δv/dt rather than re-evaluating forces at the averaged velocity — the
21
+ * standard stored-acceleration treatment; (2) the per-step `FRICTION`/`HEAT_DECAY` decays stay
22
+ * outside the scheme (dt-scaled, like `'fixed'`), which alone makes it NON-symplectic — this
23
+ * buys positional accuracy, it does NOT make energy/momentum conserved (they are non-conserved
24
+ * by design; particle COUNT remains the invariant); (3) a *kinematic* (velocity-REPLACING)
25
+ * force — `jet`/`wall`/`lens`/`gate`/`warp` — is a discontinuity, not an acceleration: when one
26
+ * fires, the replaced velocity stands un-averaged and the stored acceleration resets, so the
27
+ * next position step doesn't extrapolate across the break; (4) a pair force's equal-and-opposite
28
+ * leg on the NEIGHBOUR (`collide`/`link`) folds into that neighbour's own v(t) or Δv whenever
29
+ * its turn comes — same class of caveat the fixed-timestep note below already carries.
8
30
  */
9
31
  import { accretionTarget } from "./formations.js";
10
32
  import { waveYat, waveSlope, waveDistance } from "./currents.js";
@@ -38,31 +60,132 @@ function classified(b) {
38
60
  * scaled identically so depth-enabled fields keep `a = F/m` on all three axes (a heavy particle
39
61
  * pushed off-plane accelerates as little along z as it does in x/y).
40
62
  */
41
- function applyForce(f, b, p, env, inv) {
42
- if (inv === 1 || f.kinematic) {
43
- f.apply(b, p, env);
44
- return;
45
- }
63
+ /**
64
+ * Apply one force to a particle AND, when `env.accum` is present, record its net per-force Δv into
65
+ * the accumulator (doc 04). The single canonical capture path: the integrator's hot loop, the
66
+ * diagnostics (`accumulateAt`/causality), and any Field-Query probe all run a force through here, so
67
+ * "what did this force contribute?" is computed in exactly one place. The velocity update is unchanged
68
+ * from the pre-accumulator engine — `accum` is a read-only inspection sink. `inv` is the mass factor
69
+ * (1 = unit mass); kinematic forces are left unscaled.
70
+ */
71
+ export function applyAndRecord(f, b, p, env, inv = 1) {
46
72
  const bvx = p.vx;
47
73
  const bvy = p.vy;
48
74
  const bvz = p.vz ?? 0;
75
+ const bvh = p.heat;
76
+ const bvs = p.spin ?? 0;
77
+ const bage = p.age;
49
78
  f.apply(b, p, env);
50
- p.vx = bvx + (p.vx - bvx) * inv;
51
- p.vy = bvy + (p.vy - bvy) * inv;
52
- // only rescale z when the force actually engaged the lane — never materialize a spurious 0
53
- // on a flat (z-less) particle.
54
- if (p.vz !== undefined)
55
- p.vz = bvz + (p.vz - bvz) * inv;
79
+ if (!(inv === 1 || f.kinematic)) {
80
+ p.vx = bvx + (p.vx - bvx) * inv;
81
+ p.vy = bvy + (p.vy - bvy) * inv;
82
+ if (p.vz !== undefined)
83
+ p.vz = bvz + (p.vz - bvz) * inv;
84
+ }
85
+ // velocity-Verlet (#659): mirror the fast path's discontinuity mark on the capture path too.
86
+ if (f.kinematic && env.integrator === 'velocity-verlet' && (p.vx !== bvx || p.vy !== bvy || (p.vz ?? 0) !== bvz))
87
+ env.kinTouch = true;
88
+ const acc = env.accum;
89
+ if (acc !== undefined) {
90
+ const dvx = p.vx - bvx;
91
+ const dvy = p.vy - bvy;
92
+ const dvz = (p.vz ?? 0) - bvz;
93
+ if (dvx !== 0 || dvy !== 0 || dvz !== 0) {
94
+ acc.linear.x += dvx;
95
+ acc.linear.y += dvy;
96
+ acc.linear.z += dvz;
97
+ acc.attribution.push({ force: f.token, channel: 'linear', contribution: { x: dvx, y: dvy, z: dvz } });
98
+ }
99
+ // thermal channel (doc 04 §Step 6): capture the per-force heat change too, so attribution answers
100
+ // "which force *heated* matter here", not only "which moved it". Capture-only — the heat mutation
101
+ // is the force's own; recording it changes nothing.
102
+ const dh = p.heat - bvh;
103
+ if (dh !== 0) {
104
+ acc.thermal = (acc.thermal ?? 0) + dh;
105
+ acc.attribution.push({ force: f.token, channel: 'thermal', contribution: dh });
106
+ }
107
+ // angular channel (doc 04 §Step 6): capture the per-force change in angular velocity (spin about
108
+ // the z axis). Like thermal, capture-only — a `torque` force writes `p.spin`; recording the delta
109
+ // changes nothing. The accumulator's angular lane is 3D; 2D spin lives in its z component.
110
+ const ds = (p.spin ?? 0) - bvs;
111
+ if (ds !== 0) {
112
+ const ang = (acc.angular ??= { x: 0, y: 0, z: 0 });
113
+ ang.z += ds;
114
+ acc.attribution.push({ force: f.token, channel: 'angular', contribution: ds });
115
+ }
116
+ // temporal channel (doc 04 §Step 6): capture a per-force change in `age` (frames-to-live) for MORTAL
117
+ // matter — "which force aged / extended this particle's life here". Δage lands in `temporal.decay`
118
+ // (life lost when negative). Only mortal particles carry `age`; immortal ones (age undefined) never
119
+ // engage the lane, so this is byte-identical for the conserved base field. Capture-only.
120
+ if (bage !== undefined && p.age !== undefined) {
121
+ const da = p.age - bage;
122
+ if (da !== 0) {
123
+ const tmp = (acc.temporal ??= {});
124
+ tmp.decay = (tmp.decay ?? 0) + da;
125
+ acc.attribution.push({ force: f.token, channel: 'temporal', contribution: da });
126
+ }
127
+ }
128
+ // semantic channel (doc 04 §Step 6): annotate the contribution with the body's conserved-attention
129
+ // multiplier in effect (`b.attn` scales this body's effective force strength — integrator §2.4). This
130
+ // is body-level metadata — "this force's influence here was attention-scaled to X" — not a particle
131
+ // delta. Only when attention is active (attn defined and ≠ 1), so the neutral field is byte-identical.
132
+ if (b.attn !== undefined && b.attn !== 1) {
133
+ (acc.semantic ??= {}).attention = b.attn;
134
+ acc.attribution.push({ force: f.token, channel: 'semantic', contribution: b.attn });
135
+ }
136
+ }
56
137
  }
57
- export function step(input) {
58
- const { store, bodies, env, forces, conditions, waves, separation } = input;
59
- const dt = env.dt;
60
- if (dt === 0)
138
+ function applyForce(f, b, p, env, inv) {
139
+ // NOTE (doc 04 §Step 3): the fixed-timestep integrator does NOT dt-scale force impulses here. The
140
+ // single-particle capture trick (rescale `p`'s Δv) is unsound for forces that also mutate a
141
+ // neighbour in the same pass — `collide`/`link` apply an equal-and-opposite impulse to `q`, which
142
+ // this path can't see, so scaling only `p` would break momentum conservation. Frame-rate-correct
143
+ // force impulses wait for the force-contract change, where every contribution (including a pair's
144
+ // `q` leg) flows through the accumulator. Fixed mode currently corrects only the per-step decays.
145
+ // Default hot path: byte-identical to the pre-accumulator engine (zero overhead — no capture).
146
+ if (env.accum === undefined) {
147
+ if (inv === 1 || f.kinematic) {
148
+ // velocity-Verlet (#659): a kinematic force that actually changes velocity marks the
149
+ // particle's pass as a discontinuity (env.kinTouch) — the half-step average is skipped.
150
+ // One boolean test on the default path; the capture only runs under the opt-in mode.
151
+ if (f.kinematic && env.integrator === 'velocity-verlet') {
152
+ const bvx = p.vx;
153
+ const bvy = p.vy;
154
+ const bvz = p.vz ?? 0;
155
+ f.apply(b, p, env);
156
+ if (p.vx !== bvx || p.vy !== bvy || (p.vz ?? 0) !== bvz)
157
+ env.kinTouch = true;
158
+ return;
159
+ }
160
+ f.apply(b, p, env);
161
+ return;
162
+ }
163
+ const bvx = p.vx;
164
+ const bvy = p.vy;
165
+ const bvz = p.vz ?? 0;
166
+ f.apply(b, p, env);
167
+ p.vx = bvx + (p.vx - bvx) * inv;
168
+ p.vy = bvy + (p.vy - bvy) * inv;
169
+ // only rescale z when the force actually engaged the lane — never materialize a spurious 0
170
+ // on a flat (z-less) particle.
171
+ if (p.vz !== undefined)
172
+ p.vz = bvz + (p.vz - bvz) * inv;
61
173
  return;
62
- const { W, H, form } = env;
63
- // expose the net structure field so field-following forces (`fieldflow`) can read the
64
- // superposition of every body's field() — the same vector the streamlines view draws.
65
- env.fieldAt = (x, y) => netField(bodies, forces, x, y);
174
+ }
175
+ // Attribution requested: delegate to the shared capture path.
176
+ applyAndRecord(f, b, p, env, inv);
177
+ }
178
+ /** A fresh, empty impulse accumulator (dimension-aware shape; only `linear` is populated today). */
179
+ export function makeAccumulator() {
180
+ return { linear: { x: 0, y: 0, z: 0 }, attribution: [] };
181
+ }
182
+ /**
183
+ * Zero the per-frame density + thermodynamic accumulators on every body. Runs at the top of
184
+ * every step — including the frozen (`dt === 0`) path (#967) — so `b.count` never carries a
185
+ * stale value into `writeFeedback()`. The subsequent particle pass re-accumulates when the sim
186
+ * is live; when frozen, the counts stay at 0 and `--d` drains to the engagement-only baseline.
187
+ */
188
+ function resetDensity(bodies) {
66
189
  for (const b of bodies) {
67
190
  b.count = 0;
68
191
  // thermodynamic accumulators (workover v0.3 §"Metrics") share the density window/cadence.
@@ -76,6 +199,29 @@ export function step(input) {
76
199
  th.sh = 0;
77
200
  }
78
201
  }
202
+ }
203
+ export function step(input) {
204
+ const { store, bodies, env, forces, conditions, waves, separation } = input;
205
+ const dt = env.dt;
206
+ if (dt === 0) {
207
+ // Motion is frozen (reduced-motion / maxMotionBudget 0): skip integration, but the
208
+ // density/thermo bookkeeping MUST still drain. `writeFeedback()` runs unconditionally
209
+ // every frame, easing `b.d` toward `feedbackTarget(b.count, b.on)`. If we returned before
210
+ // zeroing the counts, `b.count` would hold its last live value forever — `--d`/`--field-density`
211
+ // (and the font-weight channel) would report particle presence from a sim that is no longer
212
+ // running (#967). The doctrine is "motion freezes; the signals stay honest": engagement
213
+ // (`b.on`, dt-independent) still reads truthfully, so `b.d` eases to `feedbackTarget(0, b.on)`
214
+ // — the engagement-only baseline — instead of lying about frozen density.
215
+ resetDensity(bodies);
216
+ return;
217
+ }
218
+ // the opt-in second-order scheme (#659) — see the header doc for the math + approximations.
219
+ const verlet = env.integrator === 'velocity-verlet';
220
+ const { W, H, form } = env;
221
+ // expose the net structure field so field-following forces (`fieldflow`) can read the
222
+ // superposition of every body's field() — the same vector the streamlines view draws.
223
+ env.fieldAt = (x, y) => netField(bodies, forces, x, y);
224
+ resetDensity(bodies);
79
225
  // visible `screen` bodies (workover v0.3): each damps OTHER bodies' forces on matter inside
80
226
  // its range (quiet zones / text shielding). No screens on the page (the common case) ⇒ this
81
227
  // stays null and the whole pass is skipped — zero cost and zero behavior change.
@@ -101,6 +247,10 @@ export function step(input) {
101
247
  p.y += (p.cap.cy - p.y) * 0.18;
102
248
  if (p.z)
103
249
  p.z += -p.z * 0.18;
250
+ // held matter has no acceleration of its own — drop any stored Verlet lane so a later
251
+ // release doesn't extrapolate a stale a(t). Only ever defined under the opt-in mode.
252
+ if (p.ax !== undefined)
253
+ p.ax = p.ay = p.az = 0;
104
254
  continue;
105
255
  }
106
256
  // normalize the optional lane once: after this the lane is concrete numbers for
@@ -109,6 +259,22 @@ export function step(input) {
109
259
  p.z = 0;
110
260
  if (p.vz === undefined)
111
261
  p.vz = 0;
262
+ // velocity-Verlet (#659): the position FULL-STEP runs first, from last step's velocity and
263
+ // stored acceleration — x(t+dt) = x(t) + v(t)·dt + ½·a(t)·dt² — so the force pass below
264
+ // evaluates a′ at x(t+dt). v0 keeps v(t) for the half-step average after the pass.
265
+ let v0x = 0;
266
+ let v0y = 0;
267
+ let v0z = 0;
268
+ if (verlet) {
269
+ const h = 0.5 * dt * dt;
270
+ p.x += p.vx * dt + (p.ax ?? 0) * h;
271
+ p.y += p.vy * dt + (p.ay ?? 0) * h;
272
+ p.z += p.vz * dt + (p.az ?? 0) * h;
273
+ v0x = p.vx;
274
+ v0y = p.vy;
275
+ v0z = p.vz;
276
+ env.kinTouch = false;
277
+ }
112
278
  const pz = p.z;
113
279
  // wave current (§2.3): near a wave line, drift along its slope like debris.
114
280
  if (hasWaves) {
@@ -352,6 +518,28 @@ export function step(input) {
352
518
  }
353
519
  }
354
520
  }
521
+ // velocity-Verlet second half (#659): fold this step's impulse into the half-step average.
522
+ if (verlet) {
523
+ // the pass's net Δv is a′·dt — every force above evaluated at the updated position.
524
+ const dvx = p.vx - v0x;
525
+ const dvy = p.vy - v0y;
526
+ const dvz = p.vz - v0z;
527
+ if (env.kinTouch) {
528
+ // a kinematic (velocity-REPLACING) force fired: a discontinuity, not an acceleration.
529
+ // The replaced velocity stands as-is; the stored acceleration resets so the next
530
+ // position step doesn't extrapolate across the break.
531
+ p.ax = p.ay = p.az = 0;
532
+ }
533
+ else {
534
+ // v(t+dt) = v(t) + ½·(a(t) + a′)·dt — ½·a(t)·dt from the stored lane, ½·Δv for a′.
535
+ p.vx = v0x + 0.5 * ((p.ax ?? 0) * dt + dvx);
536
+ p.vy = v0y + 0.5 * ((p.ay ?? 0) * dt + dvy);
537
+ p.vz = v0z + 0.5 * ((p.az ?? 0) * dt + dvz);
538
+ p.ax = dvx / dt;
539
+ p.ay = dvy / dt;
540
+ p.az = dvz / dt;
541
+ }
542
+ }
355
543
  // global safety cap (§20.10): no token or composite may drive a free particle past
356
544
  // c (the unit system's "speed of light"). The natural primitives self-clamp; this
357
545
  // enforces it for *every* force. A non-finite velocity slips the `> c²` test — the
@@ -376,13 +564,27 @@ export function step(input) {
376
564
  p.vz *= k;
377
565
  }
378
566
  }
379
- // integrate, then damp (§2.2). The z lane integrates identically — inert at 0.
380
- p.x += p.vx * dt;
381
- p.y += p.vy * dt;
382
- p.z += p.vz * dt;
383
- p.vx *= FRICTION;
384
- p.vy *= FRICTION;
385
- p.vz *= FRICTION;
567
+ // integrate, then damp (§2.2). The z lane integrates identically — inert at 0. Under the opt-in
568
+ // fixed-timestep integrator (doc 04 §Step 3) the per-step damping scales with `dt` (`FRICTION^dt`)
569
+ // so it is frame-rate independent; at `dt === 1` `Math.pow(FRICTION, 1) === FRICTION`, so the
570
+ // default path is byte-identical. Velocity-Verlet already took its position full-step before
571
+ // the force pass (its decays are dt-scaled like fixed's).
572
+ if (!verlet) {
573
+ p.x += p.vx * dt;
574
+ p.y += p.vy * dt;
575
+ p.z += p.vz * dt;
576
+ }
577
+ const fr = env.integrator === 'fixed' || verlet ? Math.pow(FRICTION, dt) : FRICTION;
578
+ p.vx *= fr;
579
+ p.vy *= fr;
580
+ p.vz *= fr;
581
+ // optional orientation lane (doc 04 §Step 6): advance angle by spin and damp the spin, ONLY when a
582
+ // force gave this particle angular velocity — undefined ⇒ inert ⇒ byte-identical to the spin-less
583
+ // engine. Mirrors the position integrate + FRICTION damp above.
584
+ if (p.spin !== undefined) {
585
+ p.orient = (p.orient ?? 0) + p.spin * dt;
586
+ p.spin *= fr;
587
+ }
386
588
  // wander (after damping, so it stays lively): a periodic brownian jitter every 40 frames, plus
387
589
  // a smooth curl-noise eddy (§7). Agents (report defined) opt out — their motion is force- and
388
590
  // steering-driven, not the ambient swarm drift.
@@ -402,7 +604,7 @@ export function step(input) {
402
604
  p.vy += Math.sin(cn) * 0.013 * form.wander;
403
605
  }
404
606
  }
405
- p.heat *= HEAT_DECAY;
607
+ p.heat *= env.integrator === 'fixed' || verlet ? Math.pow(HEAT_DECAY, dt) : HEAT_DECAY;
406
608
  // mortal matter ages (the class-[S] sink): spawned particles carry a finite `age`
407
609
  // and despawn at ≤ 0, so a continuous source stays budgeted. Immortal base-field
408
610
  // matter (age undefined) is untouched — the conserved field is unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"integrator.js","sourceRoot":"","sources":["../../src/core/integrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrator.js","sourceRoot":"","sources":["../../src/core/integrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { GovernanceWarning } from './types.ts';
2
+ /** The vocabulary lanes this registry indexes (a conservative subset of the full naming canon — see the
3
+ * design notes above for why `render`/`diagnostic` are merged and `metric` is deferred). */
4
+ export type WordLane = 'force' | 'formation' | 'condition' | 'visualization';
5
+ /** The shipped vocabulary, indexed by lane, drawn from each lane's source-of-truth catalog. */
6
+ export declare const LANE_WORDS: Readonly<Record<WordLane, readonly string[]>>;
7
+ /** Look up the lane a word belongs to, or undefined if it is not a known engine word. */
8
+ export declare function laneOf(word: string): WordLane | undefined;
9
+ /** Lint the registry for the canon's "no word lives in two lanes" rule: report every word that appears
10
+ * in more than one lane (substrate governance 05 — `field/no-word-in-two-lanes`). Pure; runs in CI,
11
+ * devtools, or a docs check with no live field. With the shipped catalogs it returns `[]` — the lane
12
+ * separation holds — so a non-empty result is a real regression. */
13
+ export declare function lintWordLanes(words?: Readonly<Record<string, readonly string[]>>): GovernanceWarning[];
14
+ //# sourceMappingURL=lane-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane-registry.d.ts","sourceRoot":"","sources":["../../src/core/lane-registry.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;6FAC6F;AAC7F,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,CAAC;AAE7E,+FAA+F;AAC/F,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC,CAKnE,CAAC;AAEH,yFAAyF;AACzF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAKzD;AAED;;;qEAGqE;AACrE,wBAAgB,aAAa,CAAC,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAc,GAAG,iBAAiB,EAAE,CAqBlH"}
@@ -0,0 +1,64 @@
1
+ // Canonical word→lane registry + the `field/no-word-in-two-lanes` lint (substrate governance 05; the
2
+ // governance module names this as a planned rule). The naming canon's core invariant — "Concepts
3
+ // describe. Tokens execute. Metrics measure. Diagnostics explain. Conditions activate. … No word lives
4
+ // in two lanes." — is, until now, enforced only by review. This indexes the engine's *shipped* vocabulary
5
+ // by lane, drawn straight from the source-of-truth catalogs (not a hand-written list), and the lint
6
+ // reports any word that appears in two lanes.
7
+ //
8
+ // DESIGN NOTES (flagged for review — these are the judgment calls):
9
+ // - Lanes covered: `force` (the 36 force tokens), `formation` (the 5 field-shape modes), `condition`
10
+ // (the data-when keywords), `visualization` (the 16 render+diagnostic modes). These four have clean,
11
+ // single source-of-truth catalogs and are disjoint by construction, so the lint reports nothing today
12
+ // — its job is to guard future drift (a new force token that collides with a formation id, etc.).
13
+ // - `render` and `diagnostic` are kept as ONE `visualization` lane on purpose: the canon splits them
14
+ // ("Diagnostics explain"), but there is no clean catalog boundary — `heatmap`/`contours`/`energy`
15
+ // straddle the README's render-vs-diagnostic line — so splitting here would invent a contested rule.
16
+ // - `metric` is NOT yet a lane: the engine has no single catalog of metric names (they are `--field-*`
17
+ // vars scattered across feedback/atoms). Indexing it cleanly is a follow-up. This is why a word like
18
+ // `memory` (a force token AND a relationship-warmth metric) does not yet trip the lint.
19
+ import { PASSPORTS } from "../contracts/passport.js";
20
+ import { FORMATIONS, CONDITIONS } from "../config/forces.config.js";
21
+ import { RENDER_MODES } from "../visual/visualization.js";
22
+ /** The shipped vocabulary, indexed by lane, drawn from each lane's source-of-truth catalog. */
23
+ export const LANE_WORDS = Object.freeze({
24
+ force: Object.keys(PASSPORTS),
25
+ formation: FORMATIONS.map((f) => f.id),
26
+ condition: CONDITIONS.map((c) => c.id).filter((id) => id !== ''), // '' = "Always" (no keyword)
27
+ visualization: RENDER_MODES.map((m) => m.mode),
28
+ });
29
+ /** Look up the lane a word belongs to, or undefined if it is not a known engine word. */
30
+ export function laneOf(word) {
31
+ for (const lane of Object.keys(LANE_WORDS)) {
32
+ if (LANE_WORDS[lane].includes(word))
33
+ return lane;
34
+ }
35
+ return undefined;
36
+ }
37
+ /** Lint the registry for the canon's "no word lives in two lanes" rule: report every word that appears
38
+ * in more than one lane (substrate governance 05 — `field/no-word-in-two-lanes`). Pure; runs in CI,
39
+ * devtools, or a docs check with no live field. With the shipped catalogs it returns `[]` — the lane
40
+ * separation holds — so a non-empty result is a real regression. */
41
+ export function lintWordLanes(words = LANE_WORDS) {
42
+ const seen = new Map(); // word → lanes it appears in
43
+ for (const [lane, list] of Object.entries(words)) {
44
+ for (const word of list) {
45
+ const lanes = seen.get(word) ?? [];
46
+ if (!lanes.includes(lane))
47
+ lanes.push(lane);
48
+ seen.set(word, lanes);
49
+ }
50
+ }
51
+ const out = [];
52
+ for (const [word, lanes] of seen) {
53
+ if (lanes.length > 1) {
54
+ out.push({
55
+ rule: 'field/no-word-in-two-lanes',
56
+ severity: 'error',
57
+ subject: word,
58
+ message: `"${word}" appears in ${lanes.length} lanes (${lanes.join(', ')}); a word must live in exactly one lane.`,
59
+ });
60
+ }
61
+ }
62
+ return out;
63
+ }
64
+ //# sourceMappingURL=lane-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lane-registry.js","sourceRoot":"","sources":["../../src/core/lane-registry.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,0GAA0G;AAC1G,oGAAoG;AACpG,8CAA8C;AAC9C,EAAE;AACF,oEAAoE;AACpE,uGAAuG;AACvG,yGAAyG;AACzG,0GAA0G;AAC1G,sGAAsG;AACtG,uGAAuG;AACvG,sGAAsG;AACtG,yGAAyG;AACzG,yGAAyG;AACzG,yGAAyG;AACzG,4FAA4F;AAE5F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAO1D,+FAA+F;AAC/F,MAAM,CAAC,MAAM,UAAU,GAAkD,MAAM,CAAC,MAAM,CAAC;IACrF,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7B,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,6BAA6B;IAC/F,aAAa,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;CAC/C,CAAC,CAAC;AAEH,yFAAyF;AACzF,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAe,EAAE,CAAC;QACzD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;qEAGqE;AACrE,MAAM,UAAU,aAAa,CAAC,QAAqD,UAAU;IAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC,CAAC,6BAA6B;IACvE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,4BAA4B;gBAClC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI,IAAI,gBAAgB,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0CAA0C;aACnH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AgentJsonTarget, FieldProjection } from './types.ts';
2
+ /** Create an {@link AgentJsonTarget} — the sink an `agent-json` projection writes into. It captures the
3
+ * last reading as a plain object and serializes it on demand. */
4
+ export declare function agentJsonTarget(): AgentJsonTarget;
5
+ /** Create a projection that targets the `agent-json` surface: its `apply` hands the reading to an
6
+ * {@link AgentJsonTarget} (via `receive`). Pass `accessibilityEquivalent` if this projection IS the
7
+ * alternate surface for a visual one (it usually is — agent-json is inherently non-visual). */
8
+ export declare function agentJsonProjection(id: string, channels: string[], opts?: {
9
+ label?: string;
10
+ accessibilityEquivalent?: string;
11
+ }): FieldProjection;
12
+ //# sourceMappingURL=projection-agent-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-agent-json.d.ts","sourceRoot":"","sources":["../../src/core/projection-agent-json.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE;kEACkE;AAClE,wBAAgB,eAAe,IAAI,eAAe,CAajD;AAED;;gGAEgG;AAChG,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9D,eAAe,CAWjB"}
@@ -0,0 +1,37 @@
1
+ // The `agent-json` projection surface (substrate doc 05): a field projection whose output is a plain,
2
+ // serializable reading object rather than a visual/DOM write — the surface an agent or tool consumes.
3
+ // `agentJsonProjection` is the projection; `agentJsonTarget` is the sink it writes into. Pair them and
4
+ // `bind` them on the registry to get a live, JSON-serializable view of any field channels. Read-only
5
+ // w.r.t. the field — like every projection, this never changes how matter moves. EXPERIMENTAL.
6
+ /** Create an {@link AgentJsonTarget} — the sink an `agent-json` projection writes into. It captures the
7
+ * last reading as a plain object and serializes it on demand. */
8
+ export function agentJsonTarget() {
9
+ let last = null;
10
+ return {
11
+ receive(reading) {
12
+ last = { ...reading };
13
+ },
14
+ value() {
15
+ return last;
16
+ },
17
+ json() {
18
+ return JSON.stringify(last);
19
+ },
20
+ };
21
+ }
22
+ /** Create a projection that targets the `agent-json` surface: its `apply` hands the reading to an
23
+ * {@link AgentJsonTarget} (via `receive`). Pass `accessibilityEquivalent` if this projection IS the
24
+ * alternate surface for a visual one (it usually is — agent-json is inherently non-visual). */
25
+ export function agentJsonProjection(id, channels, opts = {}) {
26
+ return {
27
+ id,
28
+ label: opts.label ?? id,
29
+ channels: channels.slice(),
30
+ surfaces: ['agent-json'],
31
+ ...(opts.accessibilityEquivalent !== undefined ? { accessibilityEquivalent: opts.accessibilityEquivalent } : {}),
32
+ apply(reading, target) {
33
+ target.receive?.(reading);
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=projection-agent-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection-agent-json.js","sourceRoot":"","sources":["../../src/core/projection-agent-json.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,sGAAsG;AACtG,uGAAuG;AACvG,qGAAqG;AACrG,+FAA+F;AAI/F;kEACkE;AAClE,MAAM,UAAU,eAAe;IAC7B,IAAI,IAAI,GAAkC,IAAI,CAAC;IAC/C,OAAO;QACL,OAAO,CAAC,OAAO;YACb,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,KAAK;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;gGAEgG;AAChG,MAAM,UAAU,mBAAmB,CACjC,EAAU,EACV,QAAkB,EAClB,OAA6D,EAAE;IAE/D,OAAO;QACL,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QACvB,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE;QAC1B,QAAQ,EAAE,CAAC,YAAY,CAAC;QACxB,GAAG,CAAC,IAAI,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChH,KAAK,CAAC,OAAO,EAAE,MAAM;YAClB,MAAmC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { FieldLens, FieldQueryResult } from './types.ts';
2
+ /** Scope a query result through a lens — keep only the lens's metrics / influence channels / body
3
+ * tokens (each clause is an allow-list; an omitted clause keeps everything in that dimension). Returns
4
+ * a new result tagged with `lens: lens.id`; the input is not mutated. */
5
+ export declare function applyLens(result: FieldQueryResult, lens: FieldLens): FieldQueryResult;
6
+ //# sourceMappingURL=query-lens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-lens.d.ts","sourceRoot":"","sources":["../../src/core/query-lens.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9D;;0EAE0E;AAC1E,wBAAgB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,GAAG,gBAAgB,CAarF"}
@@ -0,0 +1,24 @@
1
+ // Query lenses (substrate query phase 2): a lens is a user-defined, declarative scope over a query
2
+ // reading — it filters which metrics, influence channels, and bodies are reported, and tags the result
3
+ // with the lens id. It is NOT an opinionated preset catalog; the caller supplies the lens. `applyLens`
4
+ // is pure (returns a new result; never mutates), so it composes over a live `query()` answer or any
5
+ // FieldQueryResult-shaped value. Read-only w.r.t. the field. EXPERIMENTAL.
6
+ const pick = (m, keep) => keep ? Object.fromEntries(Object.entries(m).filter(([k]) => keep.has(k))) : m;
7
+ /** Scope a query result through a lens — keep only the lens's metrics / influence channels / body
8
+ * tokens (each clause is an allow-list; an omitted clause keeps everything in that dimension). Returns
9
+ * a new result tagged with `lens: lens.id`; the input is not mutated. */
10
+ export function applyLens(result, lens) {
11
+ const metricKeys = lens.metrics ? new Set(lens.metrics) : null;
12
+ const channelKeys = lens.channels ? new Set(lens.channels) : null;
13
+ const tokenKeys = lens.tokens ? new Set(lens.tokens) : null;
14
+ return {
15
+ ...result,
16
+ metrics: pick(result.metrics, metricKeys),
17
+ bodies: result.bodies
18
+ .filter((b) => !tokenKeys || b.tokens.some((t) => tokenKeys.has(t)))
19
+ .map((b) => ({ ...b, metrics: pick(b.metrics, metricKeys), dimensions: pick(b.dimensions, metricKeys) })),
20
+ influences: channelKeys ? result.influences.filter((i) => channelKeys.has(i.channel ?? 'linear')) : result.influences,
21
+ lens: lens.id,
22
+ };
23
+ }
24
+ //# sourceMappingURL=query-lens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-lens.js","sourceRoot":"","sources":["../../src/core/query-lens.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,uGAAuG;AACvG,uGAAuG;AACvG,oGAAoG;AACpG,2EAA2E;AAI3E,MAAM,IAAI,GAAG,CAAC,CAAyB,EAAE,IAAgC,EAA0B,EAAE,CACnG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhF;;0EAE0E;AAC1E,MAAM,UAAU,SAAS,CAAC,MAAwB,EAAE,IAAe;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAS,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,MAAM;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACnE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3G,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU;QACrH,IAAI,EAAE,IAAI,CAAC,EAAE;KACd,CAAC;AACJ,CAAC"}