@reicek/neataptic-ts 0.1.24 → 0.1.26

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 (215) hide show
  1. package/.github/copilot-instructions.md +11 -0
  2. package/.github/skills/trace-analyzer-extension/SKILL.md +3 -3
  3. package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +1 -1
  4. package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +1 -1
  5. package/.github/skills/trace-audit-reporting/SKILL.md +3 -3
  6. package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +1 -1
  7. package/.github/workflows/ci.yml +3 -3
  8. package/.github/workflows/deploy-pages.yml +6 -6
  9. package/.github/workflows/manual_release_pipeline.yml +3 -3
  10. package/.github/workflows/publish.yml +18 -19
  11. package/.github/workflows/release_dispatch.yml +3 -3
  12. package/package.json +26 -20
  13. package/plans/Flappy_Bird_Folder_Documentation_Pass.md +4 -4
  14. package/plans/README.md +24 -0
  15. package/plans/Roadmap.md +62 -40
  16. package/plans/analyze-trace-solid-split.plans.md +66 -0
  17. package/plans/architecture-solid-split.plans.md +9 -15
  18. package/plans/asciiMaze-typescript-repair.plans.md +1 -1
  19. package/plans/generate-docs-solid-split.plans.md +87 -0
  20. package/plans/methods-docs.plans.md +25 -1
  21. package/plans/methods-solid-split.plans.md +14 -14
  22. package/plans/neat-docs.plans.md +9 -1
  23. package/plans/neat-test-surface-repair.plans.md +1 -1
  24. package/plans/render-docs-html-solid-split.plans.md +68 -0
  25. package/plans/src-no-explicit-any-cleanup.plans.md +1 -1
  26. package/plans/utils-docs.plans.md +6 -1
  27. package/scripts/analyze-trace/analyze-trace.analysis.ts +479 -0
  28. package/scripts/analyze-trace/analyze-trace.constants.ts +35 -0
  29. package/scripts/analyze-trace/analyze-trace.io.ts +69 -0
  30. package/scripts/analyze-trace/analyze-trace.report.ts +100 -0
  31. package/scripts/analyze-trace/analyze-trace.shared.ts +116 -0
  32. package/scripts/analyze-trace/analyze-trace.ts +45 -0
  33. package/scripts/analyze-trace/analyze-trace.types.ts +72 -0
  34. package/scripts/assets/theme.css +80 -23
  35. package/scripts/copy-examples.ts +239 -0
  36. package/scripts/export-onnx.ts +223 -0
  37. package/scripts/generate-bench-tables.ts +378 -37
  38. package/scripts/generate-docs/generate-docs.constants.ts +107 -0
  39. package/scripts/generate-docs/generate-docs.order.ts +355 -0
  40. package/scripts/generate-docs/generate-docs.state.ts +31 -0
  41. package/scripts/generate-docs/generate-docs.targets.ts +165 -0
  42. package/scripts/generate-docs/generate-docs.ts +63 -0
  43. package/scripts/generate-docs/generate-docs.types.ts +112 -0
  44. package/scripts/generate-docs/output/generate-docs.output.folder-index.utils.ts +167 -0
  45. package/scripts/generate-docs/output/generate-docs.output.ordering.utils.ts +353 -0
  46. package/scripts/generate-docs/output/generate-docs.output.readme.utils.ts +420 -0
  47. package/scripts/generate-docs/output/generate-docs.output.ts +123 -0
  48. package/scripts/generate-docs/output/generate-docs.output.warnings.utils.ts +219 -0
  49. package/scripts/generate-docs/symbols/generate-docs.symbols.collection.utils.ts +365 -0
  50. package/scripts/generate-docs/symbols/generate-docs.symbols.jsdoc.utils.ts +373 -0
  51. package/scripts/generate-docs/symbols/generate-docs.symbols.normalize.utils.ts +155 -0
  52. package/scripts/generate-docs/symbols/generate-docs.symbols.render.utils.ts +149 -0
  53. package/scripts/generate-docs/symbols/generate-docs.symbols.signature.utils.ts +289 -0
  54. package/scripts/generate-docs/symbols/generate-docs.symbols.ts +11 -0
  55. package/scripts/mermaid-cli.mjs +102 -22
  56. package/scripts/mermaid-cli.ts +736 -0
  57. package/scripts/render-docs-html/render-docs-html.assets.ts +54 -0
  58. package/scripts/render-docs-html/render-docs-html.mermaid.ts +245 -0
  59. package/scripts/{render-docs-html.sidebar.ts → render-docs-html/render-docs-html.navigation.ts} +141 -144
  60. package/scripts/render-docs-html/render-docs-html.pages.ts +333 -0
  61. package/scripts/render-docs-html/render-docs-html.shared.ts +333 -0
  62. package/scripts/render-docs-html/render-docs-html.types.ts +42 -0
  63. package/scripts/render-docs-html.ts +23 -587
  64. package/scripts/run-docs.ts +238 -0
  65. package/scripts/write-dist-docs-pkg.ts +40 -0
  66. package/src/README.md +75 -75
  67. package/src/architecture/connection/README.md +5 -5
  68. package/src/architecture/layer/README.md +508 -508
  69. package/src/architecture/network/README.md +1458 -1458
  70. package/src/architecture/network/activate/README.md +694 -694
  71. package/src/architecture/network/bootstrap/README.md +77 -77
  72. package/src/architecture/network/connect/README.md +74 -74
  73. package/src/architecture/network/deterministic/README.md +135 -135
  74. package/src/architecture/network/evolve/README.md +364 -364
  75. package/src/architecture/network/gating/README.md +130 -130
  76. package/src/architecture/network/genetic/README.md +399 -399
  77. package/src/architecture/network/mutate/README.md +897 -897
  78. package/src/architecture/network/onnx/README.md +720 -720
  79. package/src/architecture/network/onnx/export/README.md +728 -728
  80. package/src/architecture/network/onnx/export/layers/README.md +450 -450
  81. package/src/architecture/network/onnx/import/README.md +618 -618
  82. package/src/architecture/network/onnx/schema/README.md +32 -32
  83. package/src/architecture/network/prune/README.md +245 -245
  84. package/src/architecture/network/remove/README.md +135 -135
  85. package/src/architecture/network/runtime/README.md +106 -106
  86. package/src/architecture/network/serialize/README.md +542 -542
  87. package/src/architecture/network/slab/README.md +608 -608
  88. package/src/architecture/network/standalone/README.md +212 -212
  89. package/src/architecture/network/stats/README.md +84 -84
  90. package/src/architecture/network/topology/README.md +465 -465
  91. package/src/architecture/network/training/README.md +200 -200
  92. package/src/architecture/node/README.md +5 -5
  93. package/src/architecture/nodePool/README.md +14 -14
  94. package/src/methods/README.md +99 -99
  95. package/src/methods/activation/README.md +189 -189
  96. package/src/methods/cost/README.md +131 -131
  97. package/src/methods/rate/README.md +86 -86
  98. package/src/multithreading/README.md +77 -77
  99. package/src/multithreading/workers/browser/README.md +8 -8
  100. package/src/multithreading/workers/node/README.md +8 -8
  101. package/src/neat/README.md +148 -148
  102. package/src/neat/adaptive/README.md +120 -120
  103. package/src/neat/adaptive/acceptance/README.md +40 -40
  104. package/src/neat/adaptive/complexity/README.md +137 -137
  105. package/src/neat/adaptive/core/README.md +197 -197
  106. package/src/neat/adaptive/lineage/README.md +90 -90
  107. package/src/neat/adaptive/mutation/README.md +284 -284
  108. package/src/neat/compat/README.md +43 -43
  109. package/src/neat/compat/core/README.md +90 -90
  110. package/src/neat/diversity/README.md +35 -35
  111. package/src/neat/diversity/core/README.md +88 -88
  112. package/src/neat/evaluate/README.md +85 -85
  113. package/src/neat/evaluate/auto-distance/README.md +75 -75
  114. package/src/neat/evaluate/entropy-compat/README.md +37 -37
  115. package/src/neat/evaluate/entropy-sharing/README.md +43 -43
  116. package/src/neat/evaluate/fitness/README.md +23 -23
  117. package/src/neat/evaluate/novelty/README.md +120 -120
  118. package/src/neat/evaluate/objectives/README.md +17 -17
  119. package/src/neat/evaluate/shared/README.md +94 -94
  120. package/src/neat/evolve/README.md +96 -96
  121. package/src/neat/evolve/adaptive/README.md +60 -60
  122. package/src/neat/evolve/objectives/README.md +63 -63
  123. package/src/neat/evolve/offspring/README.md +56 -56
  124. package/src/neat/evolve/population/README.md +171 -171
  125. package/src/neat/evolve/runtime/README.md +79 -79
  126. package/src/neat/evolve/speciation/README.md +74 -74
  127. package/src/neat/evolve/warnings/README.md +10 -10
  128. package/src/neat/export/README.md +114 -114
  129. package/src/neat/helpers/README.md +50 -50
  130. package/src/neat/init/README.md +9 -9
  131. package/src/neat/lineage/core/README.md +101 -101
  132. package/src/neat/multiobjective/category/README.md +74 -74
  133. package/src/neat/multiobjective/crowding/README.md +272 -272
  134. package/src/neat/multiobjective/dominance/README.md +171 -171
  135. package/src/neat/multiobjective/fronts/README.md +68 -68
  136. package/src/neat/multiobjective/metrics/README.md +43 -43
  137. package/src/neat/multiobjective/objectives/README.md +31 -31
  138. package/src/neat/multiobjective/shared/README.md +27 -27
  139. package/src/neat/mutation/README.md +97 -97
  140. package/src/neat/mutation/add-conn/README.md +115 -115
  141. package/src/neat/mutation/add-node/README.md +126 -126
  142. package/src/neat/mutation/flow/README.md +149 -149
  143. package/src/neat/mutation/repair/README.md +185 -185
  144. package/src/neat/mutation/select/README.md +117 -117
  145. package/src/neat/mutation/shared/README.md +32 -32
  146. package/src/neat/objectives/README.md +25 -25
  147. package/src/neat/objectives/core/README.md +67 -67
  148. package/src/neat/pruning/README.md +40 -40
  149. package/src/neat/pruning/core/README.md +171 -171
  150. package/src/neat/pruning/facade/README.md +32 -32
  151. package/src/neat/rng/README.md +104 -104
  152. package/src/neat/rng/core/README.md +137 -137
  153. package/src/neat/rng/facade/README.md +50 -50
  154. package/src/neat/selection/README.md +111 -111
  155. package/src/neat/selection/core/README.md +227 -227
  156. package/src/neat/selection/facade/README.md +61 -61
  157. package/src/neat/shared/README.md +163 -163
  158. package/src/neat/speciation/README.md +31 -31
  159. package/src/neat/speciation/threshold/README.md +35 -35
  160. package/src/neat/species/README.md +25 -25
  161. package/src/neat/species/core/README.md +20 -20
  162. package/src/neat/species/core/shared/README.md +18 -18
  163. package/src/neat/species/history/context/README.md +22 -22
  164. package/src/neat/telemetry/accessors/README.md +58 -58
  165. package/src/neat/telemetry/exports/README.md +233 -233
  166. package/src/neat/telemetry/facade/README.md +252 -252
  167. package/src/neat/telemetry/facade/archive/README.md +57 -57
  168. package/src/neat/telemetry/facade/buffer/README.md +43 -43
  169. package/src/neat/telemetry/facade/lineage/README.md +12 -12
  170. package/src/neat/telemetry/facade/objectives/README.md +44 -44
  171. package/src/neat/telemetry/facade/runtime/README.md +26 -26
  172. package/src/neat/telemetry/facade/species/README.md +27 -27
  173. package/src/neat/telemetry/metrics/README.md +696 -696
  174. package/src/neat/telemetry/recorder/README.md +57 -57
  175. package/src/neat/telemetry/types/README.md +32 -32
  176. package/src/neat/topology-intent/README.md +75 -75
  177. package/src/utils/README.md +193 -193
  178. package/test/examples/asciiMaze/browser-entry/README.md +92 -92
  179. package/test/examples/asciiMaze/dashboardManager/README.md +109 -109
  180. package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +28 -28
  181. package/test/examples/asciiMaze/evolutionEngine/README.md +1527 -1527
  182. package/test/examples/asciiMaze/mazeMovement/README.md +105 -105
  183. package/test/examples/asciiMaze/mazeMovement/finalization/README.md +16 -16
  184. package/test/examples/asciiMaze/mazeMovement/policy/README.md +57 -57
  185. package/test/examples/asciiMaze/mazeMovement/runtime/README.md +52 -52
  186. package/test/examples/asciiMaze/mazeMovement/shaping/README.md +46 -46
  187. package/test/examples/flappy_bird/browser-entry/README.md +508 -508
  188. package/test/examples/flappy_bird/browser-entry/host/README.md +101 -101
  189. package/test/examples/flappy_bird/browser-entry/host/resize/README.md +144 -144
  190. package/test/examples/flappy_bird/browser-entry/network-view/README.md +194 -194
  191. package/test/examples/flappy_bird/browser-entry/playback/README.md +278 -278
  192. package/test/examples/flappy_bird/browser-entry/playback/background/README.md +129 -129
  193. package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +502 -502
  194. package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +139 -139
  195. package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +10 -10
  196. package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +43 -43
  197. package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +30 -30
  198. package/test/examples/flappy_bird/browser-entry/runtime/README.md +59 -59
  199. package/test/examples/flappy_bird/browser-entry/visualization/README.md +276 -276
  200. package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +16 -16
  201. package/test/examples/flappy_bird/constants/README.md +1070 -1070
  202. package/test/examples/flappy_bird/environment/README.md +22 -22
  203. package/test/examples/flappy_bird/evaluation/README.md +32 -32
  204. package/test/examples/flappy_bird/evaluation/rollout/README.md +141 -141
  205. package/test/examples/flappy_bird/flappy-evolution-worker/README.md +425 -425
  206. package/test/examples/flappy_bird/simulation-shared/README.md +170 -170
  207. package/test/examples/flappy_bird/simulation-shared/observation/README.md +109 -109
  208. package/test/examples/flappy_bird/trainer/README.md +325 -325
  209. package/test/examples/flappy_bird/trainer/evaluation/README.md +74 -74
  210. package/scripts/analyze-trace.ts +0 -590
  211. package/scripts/copy-examples.mjs +0 -114
  212. package/scripts/export-onnx.mjs +0 -86
  213. package/scripts/generate-bench-tables.mjs +0 -182
  214. package/scripts/generate-docs.ts +0 -2900
  215. package/scripts/write-dist-docs-pkg.mjs +0 -16
@@ -80,13 +80,6 @@ boundary.
80
80
  Together they describe the inputs and intermediate state needed to paint one
81
81
  world-space frame on the browser canvas.
82
82
 
83
- ### PlaybackFrameSceneContext
84
-
85
- Shared scene contract used by one playback frame render pass.
86
-
87
- This collects the camera, viewport, and champion metadata that multiple frame
88
- render helpers need during the same paint pass.
89
-
90
83
  ### PlaybackBirdGeometry
91
84
 
92
85
  Pixel-aligned square geometry used by bird paint helpers.
@@ -94,12 +87,12 @@ Pixel-aligned square geometry used by bird paint helpers.
94
87
  Bird geometry is resolved once so the detailed bird renderer can reuse a
95
88
  stable square body box across glow and fill passes.
96
89
 
97
- ### PlaybackTrailRenderStyle
90
+ ### PlaybackBirdPaintInput
98
91
 
99
- Resolved opacity and color for one bird trail render pass.
92
+ Bird-paint input shared by the bird render helper module.
100
93
 
101
- Trails use a lighter-weight style record than birds because they only need a
102
- base opacity plus stroke color.
94
+ This combines geometry and style into one small input object for lower-level
95
+ drawing helpers.
103
96
 
104
97
  ### PlaybackBirdRenderer
105
98
 
@@ -117,19 +110,12 @@ Bird body renderer contract used by frame-render orchestration helpers.
117
110
  Keeping the renderer as an injected function makes the high-level frame pass
118
111
  independent from the detailed bird-paint implementation.
119
112
 
120
- ### PlaybackTrailStyleResolver
121
-
122
- ```ts
123
- PlaybackTrailStyleResolver(
124
- birdIndex: number,
125
- championBirdIndex: number,
126
- ): PlaybackTrailRenderStyle
127
- ```
113
+ ### PlaybackFrameSceneContext
128
114
 
129
- Trail style resolver used by frame-render orchestration helpers.
115
+ Shared scene contract used by one playback frame render pass.
130
116
 
131
- This lets orchestration ask for champion-vs-non-champion trail styling
132
- without embedding color policy directly in the frame pass.
117
+ This collects the camera, viewport, and champion metadata that multiple frame
118
+ render helpers need during the same paint pass.
133
119
 
134
120
  ### PlaybackTrailRenderer
135
121
 
@@ -149,12 +135,26 @@ Trail segment renderer used by frame-render orchestration helpers.
149
135
  The detailed trail painter owns edge fading and stepped segments; the frame
150
136
  orchestration only decides when to call it.
151
137
 
152
- ### PlaybackBirdPaintInput
138
+ ### PlaybackTrailRenderStyle
153
139
 
154
- Bird-paint input shared by the bird render helper module.
140
+ Resolved opacity and color for one bird trail render pass.
155
141
 
156
- This combines geometry and style into one small input object for lower-level
157
- drawing helpers.
142
+ Trails use a lighter-weight style record than birds because they only need a
143
+ base opacity plus stroke color.
144
+
145
+ ### PlaybackTrailStyleResolver
146
+
147
+ ```ts
148
+ PlaybackTrailStyleResolver(
149
+ birdIndex: number,
150
+ championBirdIndex: number,
151
+ ): PlaybackTrailRenderStyle
152
+ ```
153
+
154
+ Trail style resolver used by frame-render orchestration helpers.
155
+
156
+ This lets orchestration ask for champion-vs-non-champion trail styling
157
+ without embedding color policy directly in the frame pass.
158
158
 
159
159
  ## browser-entry/playback/frame-render/playback.frame-render.services.ts
160
160
 
@@ -366,56 +366,56 @@ Canvas-state helpers for playback frame rendering.
366
366
  These functions isolate the mutable canvas setup and teardown needed for one
367
367
  frame so the orchestration layer can read as declarative world rendering.
368
368
 
369
- ### preparePlaybackFrameCanvas
369
+ ### beginPlaybackFrameViewportTransform
370
370
 
371
371
  ```ts
372
- preparePlaybackFrameCanvas(
372
+ beginPlaybackFrameViewportTransform(
373
373
  context: CanvasRenderingContext2D,
374
+ sceneContext: PlaybackFrameSceneContext,
374
375
  ): void
375
376
  ```
376
377
 
377
- Resets the target canvas and base paint state before frame drawing begins.
378
+ Applies the viewport transform used for world-space frame rendering.
378
379
 
379
- This establishes a predictable baseline before world-space transforms and glow
380
- effects are applied.
380
+ After this transform, draw calls can work in simulation coordinates instead of
381
+ raw canvas pixel coordinates.
381
382
 
382
383
  Parameters:
383
384
  - `context` - - Canvas 2D drawing context.
385
+ - `sceneContext` - - Shared scene geometry for the frame.
384
386
 
385
387
  Returns: Nothing.
386
388
 
387
- ### beginPlaybackFrameViewportTransform
389
+ ### finalizePlaybackFrameCanvas
388
390
 
389
391
  ```ts
390
- beginPlaybackFrameViewportTransform(
392
+ finalizePlaybackFrameCanvas(
391
393
  context: CanvasRenderingContext2D,
392
- sceneContext: PlaybackFrameSceneContext,
393
394
  ): void
394
395
  ```
395
396
 
396
- Applies the viewport transform used for world-space frame rendering.
397
+ Restores the caller canvas state after viewport-space frame drawing.
397
398
 
398
- After this transform, draw calls can work in simulation coordinates instead of
399
- raw canvas pixel coordinates.
399
+ This ensures later canvas users do not inherit playback-specific transform or
400
+ alpha state.
400
401
 
401
402
  Parameters:
402
403
  - `context` - - Canvas 2D drawing context.
403
- - `sceneContext` - - Shared scene geometry for the frame.
404
404
 
405
405
  Returns: Nothing.
406
406
 
407
- ### finalizePlaybackFrameCanvas
407
+ ### preparePlaybackFrameCanvas
408
408
 
409
409
  ```ts
410
- finalizePlaybackFrameCanvas(
410
+ preparePlaybackFrameCanvas(
411
411
  context: CanvasRenderingContext2D,
412
412
  ): void
413
413
  ```
414
414
 
415
- Restores the caller canvas state after viewport-space frame drawing.
415
+ Resets the target canvas and base paint state before frame drawing begins.
416
416
 
417
- This ensures later canvas users do not inherit playback-specific transform or
418
- alpha state.
417
+ This establishes a predictable baseline before world-space transforms and glow
418
+ effects are applied.
419
419
 
420
420
  Parameters:
421
421
  - `context` - - Canvas 2D drawing context.
@@ -451,49 +451,49 @@ Parameters:
451
451
 
452
452
  Returns: Nothing.
453
453
 
454
- ### renderPlaybackFramePipes
454
+ ### renderPlaybackFrameBirds
455
455
 
456
456
  ```ts
457
- renderPlaybackFramePipes(
457
+ renderPlaybackFrameBirds(
458
458
  context: CanvasRenderingContext2D,
459
459
  renderState: PopulationRenderState,
460
460
  sceneContext: PlaybackFrameSceneContext,
461
+ renderBird: PlaybackBirdRenderer,
461
462
  ): void
462
463
  ```
463
464
 
464
- Draws all visible pipe segments and their neon outlines for the frame.
465
+ Draws all active birds for the current frame.
465
466
 
466
- Pipes are rendered as upper and lower segments connected to the projected
467
- floor profile used by the background grid.
467
+ Only live birds are painted so the playback frame reflects the active
468
+ population rather than leaving ghost bodies behind.
468
469
 
469
470
  Parameters:
470
471
  - `context` - - Canvas 2D drawing context.
471
472
  - `renderState` - - Mutable simulation state snapshot.
472
473
  - `sceneContext` - - Shared scene geometry for the frame.
474
+ - `renderBird` - - Bird body renderer owned by the detailed utility layer.
473
475
 
474
476
  Returns: Nothing.
475
477
 
476
- ### renderPlaybackFrameBirds
478
+ ### renderPlaybackFramePipes
477
479
 
478
480
  ```ts
479
- renderPlaybackFrameBirds(
481
+ renderPlaybackFramePipes(
480
482
  context: CanvasRenderingContext2D,
481
483
  renderState: PopulationRenderState,
482
484
  sceneContext: PlaybackFrameSceneContext,
483
- renderBird: PlaybackBirdRenderer,
484
485
  ): void
485
486
  ```
486
487
 
487
- Draws all active birds for the current frame.
488
+ Draws all visible pipe segments and their neon outlines for the frame.
488
489
 
489
- Only live birds are painted so the playback frame reflects the active
490
- population rather than leaving ghost bodies behind.
490
+ Pipes are rendered as upper and lower segments connected to the projected
491
+ floor profile used by the background grid.
491
492
 
492
493
  Parameters:
493
494
  - `context` - - Canvas 2D drawing context.
494
495
  - `renderState` - - Mutable simulation state snapshot.
495
496
  - `sceneContext` - - Shared scene geometry for the frame.
496
- - `renderBird` - - Bird body renderer owned by the detailed utility layer.
497
497
 
498
498
  Returns: Nothing.
499
499
 
@@ -571,6 +571,34 @@ Parameters:
571
571
 
572
572
  Returns: Nothing.
573
573
 
574
+ ### drawTrail
575
+
576
+ ```ts
577
+ drawTrail(
578
+ context: CanvasRenderingContext2D,
579
+ trailPoints: TrailPoint[],
580
+ color: string,
581
+ anchorX: number,
582
+ baseOpacity: number,
583
+ edgeBounds: PlaybackEdgeBounds,
584
+ ): void
585
+ ```
586
+
587
+ Draws the stepped trail history for one active bird.
588
+
589
+ The stepped shape makes the trajectory feel more schematic and readable than a
590
+ perfectly smooth spline, which fits the overall instrument-panel aesthetic.
591
+
592
+ Parameters:
593
+ - `context` - - Canvas 2D drawing context.
594
+ - `trailPoints` - - Cached per-frame trail points for one bird.
595
+ - `color` - - Stroke color for the trail.
596
+ - `anchorX` - - Bird anchor x-position in world space.
597
+ - `baseOpacity` - - Base opacity before edge and lifetime fading.
598
+ - `edgeBounds` - - Visible world bounds used for edge fading.
599
+
600
+ Returns: Nothing.
601
+
574
602
  ### renderPlaybackBird
575
603
 
576
604
  ```ts
@@ -631,34 +659,6 @@ Parameters:
631
659
 
632
660
  Returns: Pixel-aligned square geometry for the bird body.
633
661
 
634
- ### drawTrail
635
-
636
- ```ts
637
- drawTrail(
638
- context: CanvasRenderingContext2D,
639
- trailPoints: TrailPoint[],
640
- color: string,
641
- anchorX: number,
642
- baseOpacity: number,
643
- edgeBounds: PlaybackEdgeBounds,
644
- ): void
645
- ```
646
-
647
- Draws the stepped trail history for one active bird.
648
-
649
- The stepped shape makes the trajectory feel more schematic and readable than a
650
- perfectly smooth spline, which fits the overall instrument-panel aesthetic.
651
-
652
- Parameters:
653
- - `context` - - Canvas 2D drawing context.
654
- - `trailPoints` - - Cached per-frame trail points for one bird.
655
- - `color` - - Stroke color for the trail.
656
- - `anchorX` - - Bird anchor x-position in world space.
657
- - `baseOpacity` - - Base opacity before edge and lifetime fading.
658
- - `edgeBounds` - - Visible world bounds used for edge fading.
659
-
660
- Returns: Nothing.
661
-
662
662
  ### resolvePlaybackTrailStyle
663
663
 
664
664
  ```ts
@@ -687,48 +687,28 @@ The bird renderer keeps the body intentionally simple and geometric: a neon
687
687
  square with optional champion glow passes. That makes the population readable
688
688
  at a glance even when many birds overlap.
689
689
 
690
- ### renderPlaybackBird
690
+ ### drawChampionPlaybackBirdGlow
691
691
 
692
692
  ```ts
693
- renderPlaybackBird(
693
+ drawChampionPlaybackBirdGlow(
694
694
  context: CanvasRenderingContext2D,
695
- birdYPx: number,
696
- birdIndex: number,
697
- championBirdIndex: number,
695
+ birdGeometry: PlaybackBirdGeometry,
696
+ birdRenderStyle: PlaybackBirdRenderStyle,
698
697
  ): void
699
698
  ```
700
699
 
701
- Draws one active bird body and champion-only highlight passes.
700
+ Draws the champion bird using the same two-pass additive outline glow method as pipes.
702
701
 
703
- The champion receives an extra additive-outline treatment so viewers can spot
704
- the leading bird quickly during playback.
702
+ Reusing the pipe-style glow language helps the whole playback scene feel like
703
+ one visual system instead of unrelated rendering effects.
705
704
 
706
705
  Parameters:
707
706
  - `context` - - Canvas 2D drawing context.
708
- - `birdYPx` - - Bird vertical position in world pixels.
709
- - `birdIndex` - - Index of the bird being rendered.
710
- - `championBirdIndex` - - Champion index for the current frame.
707
+ - `birdGeometry` - - Pixel-aligned bird geometry.
708
+ - `birdRenderStyle` - - Resolved bird style payload.
711
709
 
712
710
  Returns: Nothing.
713
711
 
714
- ### resolvePlaybackBirdGeometry
715
-
716
- ```ts
717
- resolvePlaybackBirdGeometry(
718
- birdYPx: number,
719
- ): PlaybackBirdGeometry
720
- ```
721
-
722
- Resolves the fixed bird geometry used by all body rendering passes.
723
-
724
- Geometry is snapped to integer pixels so the square body stays crisp instead
725
- of blurring across subpixel boundaries.
726
-
727
- Parameters:
728
- - `birdYPx` - - Bird vertical position in world pixels.
729
-
730
- Returns: Pixel-aligned square geometry for the bird body.
731
-
732
712
  ### drawPlaybackBirdBody
733
713
 
734
714
  ```ts
@@ -750,25 +730,27 @@ Parameters:
750
730
 
751
731
  Returns: Nothing.
752
732
 
753
- ### drawChampionPlaybackBirdGlow
733
+ ### renderPlaybackBird
754
734
 
755
735
  ```ts
756
- drawChampionPlaybackBirdGlow(
736
+ renderPlaybackBird(
757
737
  context: CanvasRenderingContext2D,
758
- birdGeometry: PlaybackBirdGeometry,
759
- birdRenderStyle: PlaybackBirdRenderStyle,
738
+ birdYPx: number,
739
+ birdIndex: number,
740
+ championBirdIndex: number,
760
741
  ): void
761
742
  ```
762
743
 
763
- Draws the champion bird using the same two-pass additive outline glow method as pipes.
744
+ Draws one active bird body and champion-only highlight passes.
764
745
 
765
- Reusing the pipe-style glow language helps the whole playback scene feel like
766
- one visual system instead of unrelated rendering effects.
746
+ The champion receives an extra additive-outline treatment so viewers can spot
747
+ the leading bird quickly during playback.
767
748
 
768
749
  Parameters:
769
750
  - `context` - - Canvas 2D drawing context.
770
- - `birdGeometry` - - Pixel-aligned bird geometry.
771
- - `birdRenderStyle` - - Resolved bird style payload.
751
+ - `birdYPx` - - Bird vertical position in world pixels.
752
+ - `birdIndex` - - Index of the bird being rendered.
753
+ - `championBirdIndex` - - Champion index for the current frame.
772
754
 
773
755
  Returns: Nothing.
774
756
 
@@ -790,32 +772,30 @@ Parameters:
790
772
 
791
773
  Returns: Blur radius used behind the square bird body.
792
774
 
793
- ## browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts
794
-
795
- Detailed trail-painting helpers for playback frames.
796
-
797
- Trails are rendered as stepped segments with both lifetime fading and edge
798
- fading so motion remains legible without overwhelming the scene.
799
-
800
- ### resolvePlaybackTrailStyle
775
+ ### resolvePlaybackBirdGeometry
801
776
 
802
777
  ```ts
803
- resolvePlaybackTrailStyle(
804
- birdIndex: number,
805
- championBirdIndex: number,
806
- ): PlaybackTrailRenderStyle
778
+ resolvePlaybackBirdGeometry(
779
+ birdYPx: number,
780
+ ): PlaybackBirdGeometry
807
781
  ```
808
782
 
809
- Resolves the trail style used for one bird's stepped trail.
783
+ Resolves the fixed bird geometry used by all body rendering passes.
810
784
 
811
- Champion trails are emphasized while non-champion trails, when present, are
812
- intentionally subdued.
785
+ Geometry is snapped to integer pixels so the square body stays crisp instead
786
+ of blurring across subpixel boundaries.
813
787
 
814
788
  Parameters:
815
- - `birdIndex` - - Index of the bird being rendered.
816
- - `championBirdIndex` - - Champion index for the current frame.
789
+ - `birdYPx` - - Bird vertical position in world pixels.
817
790
 
818
- Returns: Base opacity and color for the bird trail.
791
+ Returns: Pixel-aligned square geometry for the bird body.
792
+
793
+ ## browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts
794
+
795
+ Detailed trail-painting helpers for playback frames.
796
+
797
+ Trails are rendered as stepped segments with both lifetime fading and edge
798
+ fading so motion remains legible without overwhelming the scene.
819
799
 
820
800
  ### drawTrail
821
801
 
@@ -880,3 +860,23 @@ Parameters:
880
860
  - `maximumTrailFrameOffset` - - Oldest visible trail age.
881
861
 
882
862
  Returns: Nothing.
863
+
864
+ ### resolvePlaybackTrailStyle
865
+
866
+ ```ts
867
+ resolvePlaybackTrailStyle(
868
+ birdIndex: number,
869
+ championBirdIndex: number,
870
+ ): PlaybackTrailRenderStyle
871
+ ```
872
+
873
+ Resolves the trail style used for one bird's stepped trail.
874
+
875
+ Champion trails are emphasized while non-champion trails, when present, are
876
+ intentionally subdued.
877
+
878
+ Parameters:
879
+ - `birdIndex` - - Index of the bird being rendered.
880
+ - `championBirdIndex` - - Champion index for the current frame.
881
+
882
+ Returns: Base opacity and color for the bird trail.
@@ -47,19 +47,19 @@ Parameters:
47
47
 
48
48
  Returns: Nothing.
49
49
 
50
- ### syncPlaybackSnapshotPipes
50
+ ### syncPlaybackSnapshotBirds
51
51
 
52
52
  ```ts
53
- syncPlaybackSnapshotPipes(
53
+ syncPlaybackSnapshotBirds(
54
54
  renderState: PopulationRenderState,
55
55
  snapshot: EvolutionPlaybackStepSnapshot,
56
56
  ): void
57
57
  ```
58
58
 
59
- Synchronizes packed pipe snapshot fields into the reusable render-state pipe array.
59
+ Synchronizes packed bird snapshot fields into the reusable render-state bird array.
60
60
 
61
- Instead of recreating pipe objects every frame, the browser grows the array as
62
- needed and then mutates the existing records in place.
61
+ This mirrors the pipe strategy: keep a stable array shape when possible and
62
+ update fields in place from the packed worker buffers.
63
63
 
64
64
  Parameters:
65
65
  - `renderState` - - Mutable render state mirror used by the browser.
@@ -67,19 +67,19 @@ Parameters:
67
67
 
68
68
  Returns: Nothing.
69
69
 
70
- ### syncPlaybackSnapshotBirds
70
+ ### syncPlaybackSnapshotPipes
71
71
 
72
72
  ```ts
73
- syncPlaybackSnapshotBirds(
73
+ syncPlaybackSnapshotPipes(
74
74
  renderState: PopulationRenderState,
75
75
  snapshot: EvolutionPlaybackStepSnapshot,
76
76
  ): void
77
77
  ```
78
78
 
79
- Synchronizes packed bird snapshot fields into the reusable render-state bird array.
79
+ Synchronizes packed pipe snapshot fields into the reusable render-state pipe array.
80
80
 
81
- This mirrors the pipe strategy: keep a stable array shape when possible and
82
- update fields in place from the packed worker buffers.
81
+ Instead of recreating pipe objects every frame, the browser grows the array as
82
+ needed and then mutates the existing records in place.
83
83
 
84
84
  Parameters:
85
85
  - `renderState` - - Mutable render state mirror used by the browser.
@@ -14,6 +14,30 @@ pushTrailPoint(trailPoints, 11, 136, 2);
14
14
 
15
15
  ## browser-entry/playback/trail/playback.trail.history.services.ts
16
16
 
17
+ ### pushChampionTrailPoint
18
+
19
+ ```ts
20
+ pushChampionTrailPoint(
21
+ trailPoints: TrailPoint[],
22
+ frameIndex: number,
23
+ yPosition: number,
24
+ ): void
25
+ ```
26
+
27
+ Appends one point to the champion-only short trail history.
28
+
29
+ The browser highlights the current leader with a shorter, denser trail than
30
+ the rest of the flock. Using a dedicated helper keeps that policy explicit in
31
+ the call site instead of scattering champion-specific retention numbers
32
+ through the playback renderer.
33
+
34
+ Parameters:
35
+ - `trailPoints` - - Mutable champion trail collection.
36
+ - `frameIndex` - - Source frame index.
37
+ - `yPosition` - - Bird y position.
38
+
39
+ Returns: Nothing.
40
+
17
41
  ### pushTrailPoint
18
42
 
19
43
  ```ts
@@ -47,30 +71,6 @@ const trailPoints = [{ frameIndex: 10, yPx: 140 }];
47
71
  pushTrailPoint(trailPoints, 11, 136, 2);
48
72
  ```
49
73
 
50
- ### pushChampionTrailPoint
51
-
52
- ```ts
53
- pushChampionTrailPoint(
54
- trailPoints: TrailPoint[],
55
- frameIndex: number,
56
- yPosition: number,
57
- ): void
58
- ```
59
-
60
- Appends one point to the champion-only short trail history.
61
-
62
- The browser highlights the current leader with a shorter, denser trail than
63
- the rest of the flock. Using a dedicated helper keeps that policy explicit in
64
- the call site instead of scattering champion-specific retention numbers
65
- through the playback renderer.
66
-
67
- Parameters:
68
- - `trailPoints` - - Mutable champion trail collection.
69
- - `frameIndex` - - Source frame index.
70
- - `yPosition` - - Bird y position.
71
-
72
- Returns: Nothing.
73
-
74
74
  ## browser-entry/playback/trail/playback.trail.opacity.utils.ts
75
75
 
76
76
  Opacity helpers for playback trail fading.
@@ -86,6 +86,25 @@ const ageOpacity = resolveTrailLifetimeOpacityFactor(3, 12);
86
86
  const alpha = edgeOpacity * ageOpacity;
87
87
  ```
88
88
 
89
+ ### clamp01
90
+
91
+ ```ts
92
+ clamp01(
93
+ value: number,
94
+ ): number
95
+ ```
96
+
97
+ Clamps a number to the inclusive [0, 1] range.
98
+
99
+ The trail renderer combines several normalized fade factors, so keeping this
100
+ utility local to the module makes the intent obvious: every opacity channel
101
+ must remain safe for direct canvas alpha use.
102
+
103
+ Parameters:
104
+ - `value` - - Candidate value.
105
+
106
+ Returns: Clamped value.
107
+
89
108
  ### resolveEdgeOpacityFactor
90
109
 
91
110
  ```ts
@@ -142,22 +161,3 @@ Parameters:
142
161
  - `maxTrailFrameOffset` - - Oldest age offset currently retained by trail.
143
162
 
144
163
  Returns: Opacity multiplier in [0, 1].
145
-
146
- ### clamp01
147
-
148
- ```ts
149
- clamp01(
150
- value: number,
151
- ): number
152
- ```
153
-
154
- Clamps a number to the inclusive [0, 1] range.
155
-
156
- The trail renderer combines several normalized fade factors, so keeping this
157
- utility local to the module makes the intent obvious: every opacity channel
158
- must remain safe for direct canvas alpha use.
159
-
160
- Parameters:
161
- - `value` - - Candidate value.
162
-
163
- Returns: Clamped value.