@vib3code/sdk 2.0.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 (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,417 @@
1
+ # Export formats
2
+
3
+ This reference documents the target export formats supported by the agentic pipelines and how they are validated.
4
+
5
+ ## Supported formats
6
+
7
+ | Format | Extension | Description | License Tier |
8
+ |--------|-----------|-------------|--------------|
9
+ | SVG Sprite Sheet | `.svg` | Vector sprites for web or design tooling | Community (3/day) |
10
+ | Lottie JSON | `.json` | Motion-friendly JSON payloads for animation pipelines | Indie+ |
11
+ | CSS Variables | `.css` | Theme-ready CSS custom properties | Indie+ |
12
+ | Scene Pack | `.vib3` | Full scene serialization with parameters | All |
13
+ | PNG Raster | `.png` | High-resolution raster export | All |
14
+
15
+ ## Format specifications
16
+
17
+ ### SVG Sprite Sheet (`svg-sprite`)
18
+
19
+ Exports the current visualization frame as optimized SVG.
20
+
21
+ **Features:**
22
+ - Preserves vector paths for infinite scaling
23
+ - Includes all 3D projected geometry as 2D paths
24
+ - Supports transparency and gradients
25
+ - Embeds color palette as CSS variables
26
+
27
+ **Schema:**
28
+ ```xml
29
+ <svg xmlns="http://www.w3.org/2000/svg"
30
+ viewBox="0 0 {width} {height}"
31
+ data-vib3-geometry="{geometryId}"
32
+ data-vib3-system="{system}">
33
+ <defs>
34
+ <style>
35
+ :root {
36
+ --vib3-hue: {hue};
37
+ --vib3-saturation: {saturation};
38
+ --vib3-intensity: {intensity};
39
+ }
40
+ </style>
41
+ </defs>
42
+ <g id="geometry-layer">
43
+ <!-- Projected geometry paths -->
44
+ </g>
45
+ <g id="vib3-watermark" opacity="0.3">
46
+ <!-- Community tier only -->
47
+ </g>
48
+ </svg>
49
+ ```
50
+
51
+ **CLI export:**
52
+ ```bash
53
+ vib3 export svg --geometry 12 --system quantum --output scene.svg
54
+ ```
55
+
56
+ ### Lottie JSON (`lottie-json`)
57
+
58
+ Exports animated visualization as Lottie-compatible JSON.
59
+
60
+ **Features:**
61
+ - Frame-by-frame keyframes for smooth animation
62
+ - Supports rotation animation curves
63
+ - Compatible with LottieFiles, After Effects, and web players
64
+ - Optimized for 60fps playback
65
+
66
+ **Schema (simplified):**
67
+ ```json
68
+ {
69
+ "v": "5.7.0",
70
+ "fr": 60,
71
+ "ip": 0,
72
+ "op": 300,
73
+ "w": 1920,
74
+ "h": 1080,
75
+ "nm": "VIB3+ Export",
76
+ "ddd": 0,
77
+ "assets": [],
78
+ "layers": [
79
+ {
80
+ "ty": 4,
81
+ "nm": "geometry",
82
+ "ks": {
83
+ "o": { "a": 0, "k": 100 },
84
+ "r": { "a": 1, "k": [/* rotation keyframes */] },
85
+ "p": { "a": 0, "k": [960, 540, 0] }
86
+ },
87
+ "shapes": [/* geometry shapes */]
88
+ }
89
+ ],
90
+ "meta": {
91
+ "generator": "@vib3code/sdk",
92
+ "version": "1.9.0",
93
+ "system": "quantum",
94
+ "geometry": 12
95
+ }
96
+ }
97
+ ```
98
+
99
+ **CLI export:**
100
+ ```bash
101
+ vib3 export lottie --duration 5s --fps 60 --output animation.json
102
+ ```
103
+
104
+ ### CSS Variables (`css-variables`)
105
+
106
+ Exports current color palette and parameters as CSS custom properties.
107
+
108
+ **Features:**
109
+ - Ready-to-use CSS variables
110
+ - Includes color, rotation, and dimension values
111
+ - Compatible with any CSS framework
112
+ - Supports light/dark theme variants
113
+
114
+ **Output:**
115
+ ```css
116
+ /* VIB3+ Theme Export - Generated 2026-01-23 */
117
+ :root {
118
+ /* Color palette */
119
+ --vib3-hue: 240;
120
+ --vib3-saturation: 0.8;
121
+ --vib3-intensity: 0.9;
122
+ --vib3-primary: hsl(240, 80%, 50%);
123
+ --vib3-secondary: hsl(240, 60%, 70%);
124
+ --vib3-accent: hsl(270, 80%, 60%);
125
+
126
+ /* Geometry parameters */
127
+ --vib3-geometry: 12;
128
+ --vib3-system: 'quantum';
129
+ --vib3-dimension: 3.5;
130
+
131
+ /* 6D rotation (radians) */
132
+ --vib3-rot-xy: 0.5;
133
+ --vib3-rot-xz: 0.3;
134
+ --vib3-rot-yz: 0.0;
135
+ --vib3-rot-xw: 1.2;
136
+ --vib3-rot-yw: 0.8;
137
+ --vib3-rot-zw: 0.4;
138
+
139
+ /* Animation timing */
140
+ --vib3-speed: 1.0;
141
+ --vib3-chaos: 0.2;
142
+ }
143
+
144
+ /* Dark mode variant */
145
+ @media (prefers-color-scheme: dark) {
146
+ :root {
147
+ --vib3-primary: hsl(240, 80%, 60%);
148
+ --vib3-secondary: hsl(240, 60%, 40%);
149
+ }
150
+ }
151
+ ```
152
+
153
+ **CLI export:**
154
+ ```bash
155
+ vib3 export css --include-dark-mode --output theme.css
156
+ ```
157
+
158
+ ### Scene Pack (`.vib3`)
159
+
160
+ Full scene serialization for sharing and restoring states.
161
+
162
+ **Features:**
163
+ - Complete parameter state
164
+ - Thumbnail preview
165
+ - Metadata and versioning
166
+ - Compatible with Gallery system
167
+
168
+ **Schema:**
169
+ ```json
170
+ {
171
+ "version": "1.0.0",
172
+ "meta": {
173
+ "name": "My Scene",
174
+ "author": "user@example.com",
175
+ "created": "2026-01-23T22:00:00Z",
176
+ "generator": "@vib3code/sdk@1.9.0"
177
+ },
178
+ "parameters": {
179
+ "system": "quantum",
180
+ "geometry": 12,
181
+ "rot4dXY": 0.5,
182
+ "rot4dXZ": 0.3,
183
+ "rot4dYZ": 0.0,
184
+ "rot4dXW": 1.2,
185
+ "rot4dYW": 0.8,
186
+ "rot4dZW": 0.4,
187
+ "hue": 240,
188
+ "saturation": 0.8,
189
+ "intensity": 0.9,
190
+ "gridDensity": 32,
191
+ "morphFactor": 1.0,
192
+ "chaos": 0.2,
193
+ "speed": 1.0,
194
+ "dimension": 3.5
195
+ },
196
+ "thumbnail": "data:image/png;base64,..."
197
+ }
198
+ ```
199
+
200
+ ## Golden snapshot validation
201
+
202
+ Golden snapshots ensure export fidelity across updates. Each export format has baseline snapshots stored in `tests/snapshots/exports/`.
203
+
204
+ ### Snapshot test implementation
205
+
206
+ ```javascript
207
+ // tests/exports/golden.test.js
208
+ import { describe, it, expect } from 'vitest';
209
+ import { exportSVG, exportLottie, exportCSS } from '../../src/export/index.js';
210
+ import { readFileSync } from 'fs';
211
+ import { join } from 'path';
212
+
213
+ const SNAPSHOT_DIR = 'tests/snapshots/exports';
214
+
215
+ // Standard test parameters for consistency
216
+ const TEST_PARAMS = {
217
+ system: 'quantum',
218
+ geometry: 8, // Hypersphere core tetrahedron
219
+ rot4dXY: 0.5,
220
+ rot4dXZ: 0.0,
221
+ rot4dYZ: 0.0,
222
+ rot4dXW: 1.0,
223
+ rot4dYW: 0.0,
224
+ rot4dZW: 0.0,
225
+ hue: 200,
226
+ saturation: 0.7,
227
+ intensity: 0.8,
228
+ gridDensity: 16,
229
+ dimension: 3.5
230
+ };
231
+
232
+ describe('export golden snapshots', () => {
233
+ describe('SVG export', () => {
234
+ it('matches golden snapshot for quantum system', async () => {
235
+ const result = await exportSVG(TEST_PARAMS, { width: 512, height: 512 });
236
+ const golden = readFileSync(join(SNAPSHOT_DIR, 'quantum-g8.svg'), 'utf-8');
237
+
238
+ // Normalize whitespace for comparison
239
+ const normalize = (s) => s.replace(/\s+/g, ' ').trim();
240
+ expect(normalize(result)).toBe(normalize(golden));
241
+ });
242
+
243
+ it('includes required metadata attributes', async () => {
244
+ const result = await exportSVG(TEST_PARAMS, { width: 512, height: 512 });
245
+
246
+ expect(result).toContain('data-vib3-geometry="8"');
247
+ expect(result).toContain('data-vib3-system="quantum"');
248
+ expect(result).toContain('viewBox="0 0 512 512"');
249
+ });
250
+ });
251
+
252
+ describe('Lottie export', () => {
253
+ it('matches golden snapshot structure', async () => {
254
+ const result = await exportLottie(TEST_PARAMS, { fps: 30, duration: 1 });
255
+ const golden = JSON.parse(readFileSync(join(SNAPSHOT_DIR, 'quantum-g8.json'), 'utf-8'));
256
+
257
+ // Compare structure (not exact values due to animation)
258
+ expect(result.v).toBe(golden.v);
259
+ expect(result.fr).toBe(golden.fr);
260
+ expect(result.layers.length).toBe(golden.layers.length);
261
+ expect(result.meta.system).toBe('quantum');
262
+ expect(result.meta.geometry).toBe(8);
263
+ });
264
+
265
+ it('produces valid Lottie schema', async () => {
266
+ const result = await exportLottie(TEST_PARAMS, { fps: 30, duration: 1 });
267
+
268
+ expect(result).toHaveProperty('v'); // version
269
+ expect(result).toHaveProperty('fr'); // frame rate
270
+ expect(result).toHaveProperty('ip'); // in point
271
+ expect(result).toHaveProperty('op'); // out point
272
+ expect(result).toHaveProperty('w'); // width
273
+ expect(result).toHaveProperty('h'); // height
274
+ expect(result).toHaveProperty('layers');
275
+ expect(Array.isArray(result.layers)).toBe(true);
276
+ });
277
+ });
278
+
279
+ describe('CSS export', () => {
280
+ it('matches golden snapshot', async () => {
281
+ const result = await exportCSS(TEST_PARAMS);
282
+ const golden = readFileSync(join(SNAPSHOT_DIR, 'quantum-g8.css'), 'utf-8');
283
+
284
+ expect(result).toBe(golden);
285
+ });
286
+
287
+ it('includes all required variables', async () => {
288
+ const result = await exportCSS(TEST_PARAMS);
289
+
290
+ expect(result).toContain('--vib3-hue: 200');
291
+ expect(result).toContain('--vib3-saturation: 0.7');
292
+ expect(result).toContain('--vib3-geometry: 8');
293
+ expect(result).toContain("--vib3-system: 'quantum'");
294
+ expect(result).toContain('--vib3-rot-xw: 1');
295
+ });
296
+ });
297
+ });
298
+ ```
299
+
300
+ ### Snapshot update workflow
301
+
302
+ ```bash
303
+ # Run tests and check for snapshot mismatches
304
+ pnpm test -- tests/exports/golden.test.js
305
+
306
+ # Update snapshots when changes are intentional
307
+ pnpm test -- tests/exports/golden.test.js --update
308
+
309
+ # Review snapshot changes in git
310
+ git diff tests/snapshots/exports/
311
+ ```
312
+
313
+ ### Snapshot coverage matrix
314
+
315
+ | System | Geometry | SVG | Lottie | CSS | Status |
316
+ |--------|----------|-----|--------|-----|--------|
317
+ | Quantum | 0 (tetra) | Yes | Yes | Yes | Baseline |
318
+ | Quantum | 8 (hyper-tetra) | Yes | Yes | Yes | Baseline |
319
+ | Quantum | 16 (hypertetra-tetra) | Yes | Yes | Yes | Baseline |
320
+ | Faceted | 0 | Yes | Yes | Yes | Baseline |
321
+ | Faceted | 8 | Yes | Yes | Yes | Baseline |
322
+ | Holographic | 0 | Yes | Yes | Yes | Baseline |
323
+ | Holographic | 8 | Yes | Yes | Yes | Baseline |
324
+
325
+ ### CI integration
326
+
327
+ ```yaml
328
+ # .github/workflows/exports.yml
329
+ name: Export Validation
330
+
331
+ on: [push, pull_request]
332
+
333
+ jobs:
334
+ golden-snapshots:
335
+ runs-on: ubuntu-latest
336
+ steps:
337
+ - uses: actions/checkout@v4
338
+ - uses: pnpm/action-setup@v2
339
+ - uses: actions/setup-node@v4
340
+ with:
341
+ node-version: '18'
342
+ cache: 'pnpm'
343
+ - run: pnpm install
344
+ - run: pnpm test -- tests/exports/golden.test.js
345
+
346
+ - name: Check for uncommitted snapshot changes
347
+ run: |
348
+ if [ -n "$(git status --porcelain tests/snapshots/)" ]; then
349
+ echo "Snapshot files have changed. Please update and commit."
350
+ git diff tests/snapshots/
351
+ exit 1
352
+ fi
353
+ ```
354
+
355
+ ## Export pipeline architecture
356
+
357
+ ```
358
+ ┌─────────────────────────────────────────────────────────────────┐
359
+ │ EXPORT PIPELINE │
360
+ └─────────────────────────────────────────────────────────────────┘
361
+
362
+ Parameters ExportManager Format Exporters
363
+ │ │ │
364
+ │ 1. Request export │ │
365
+ │───────────────────>│ │
366
+ │ │ 2. Validate license │
367
+ │ │ 3. Select exporter │
368
+ │ │───────────────────────>│
369
+ │ │ │
370
+ │ │ │ 4. Generate
371
+ │ │ │ output
372
+ │ │ │
373
+ │ │ 5. Apply watermark │
374
+ │ │ (if Community) │
375
+ │ │<───────────────────────│
376
+ │ │ │
377
+ │ │ 6. Validate against │
378
+ │ │ schema │
379
+ │ │ │
380
+ │ 7. Return result │ │
381
+ │<───────────────────│ │
382
+ ```
383
+
384
+ ## Implementation status
385
+
386
+ | Component | Status | Location |
387
+ |-----------|--------|----------|
388
+ | SVG exporter | Implemented | `src/export/SVGExporter.js` |
389
+ | Lottie exporter | TODO | `src/export/LottieExporter.js` |
390
+ | CSS exporter | TODO | `src/export/CSSExporter.js` |
391
+ | Scene pack | Implemented | `src/export/ScenePackExporter.js` |
392
+ | Golden snapshots | TODO | `tests/snapshots/exports/` |
393
+ | CI validation | TODO | `.github/workflows/exports.yml` |
394
+
395
+ ## CLI reference
396
+
397
+ ```bash
398
+ # List available export formats
399
+ vib3 export --list
400
+
401
+ # Export with specific format
402
+ vib3 export <format> [options]
403
+
404
+ # Common options
405
+ --output, -o Output file path
406
+ --system Visualization system (quantum, faceted, holographic)
407
+ --geometry Geometry index (0-23)
408
+ --width Output width in pixels
409
+ --height Output height in pixels
410
+ --quality Quality level (draft, normal, high)
411
+
412
+ # Examples
413
+ vib3 export svg -o scene.svg --geometry 12 --system quantum
414
+ vib3 export lottie -o anim.json --duration 5s --fps 60
415
+ vib3 export css -o theme.css --include-dark-mode
416
+ vib3 export pack -o scene.vib3 --include-thumbnail
417
+ ```
@@ -0,0 +1,21 @@
1
+ # GPU disposal patterns
2
+
3
+ This guide documents safe GPU resource disposal patterns to prevent memory leaks across rendering backends.
4
+
5
+ ## Resource lifecycle checklist
6
+ 1. Track GPU resources (buffers, textures, programs) with explicit IDs.
7
+ 2. Register resources in a central manager so you can dispose by scope.
8
+ 3. Dispose resources when:
9
+ - a scene is torn down
10
+ - a renderer is swapped
11
+ - a pack export completes
12
+
13
+ ## Suggested manager flow
14
+ - `registerResource(type, id, handle, bytes)`
15
+ - `releaseResource(type, id)`
16
+ - `disposeAll()` on shutdown or system change
17
+
18
+ ## Guardrails
19
+ - Do not rely on GC to release GPU memory.
20
+ - Always null references after deletion to prevent re-use.
21
+ - Track memory budgets and evict least-recently-used resources when needed.