@smoothbricks/lmao 0.2.2 → 0.2.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 (276) hide show
  1. package/dist/allocator.wasm +0 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/lib/JsBufferStrategy.d.ts +4 -3
  6. package/dist/lib/JsBufferStrategy.d.ts.map +1 -1
  7. package/dist/lib/JsBufferStrategy.js +18 -11
  8. package/dist/lib/arrow/lease.d.ts +10 -0
  9. package/dist/lib/arrow/lease.d.ts.map +1 -0
  10. package/dist/lib/arrow/lease.js +33 -0
  11. package/dist/lib/arrow/utils.d.ts +3 -4
  12. package/dist/lib/arrow/utils.d.ts.map +1 -1
  13. package/dist/lib/arrow/utils.js +12 -13
  14. package/dist/lib/arrow/vocabularyDictionary.d.ts +21 -0
  15. package/dist/lib/arrow/vocabularyDictionary.d.ts.map +1 -0
  16. package/dist/lib/arrow/vocabularyDictionary.js +95 -0
  17. package/dist/lib/bufferStrategy.d.ts +3 -2
  18. package/dist/lib/bufferStrategy.d.ts.map +1 -1
  19. package/dist/lib/cloudflare/traceRows.d.ts.map +1 -1
  20. package/dist/lib/cloudflare/traceRows.js +3 -2
  21. package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -1
  22. package/dist/lib/codegen/evaluatorGenerator.js +12 -11
  23. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +44 -82
  24. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -1
  25. package/dist/lib/codegen/fixedPositionWriterGenerator.js +223 -162
  26. package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts +63 -0
  27. package/dist/lib/codegen/spanLoggerClosureMaterializer.d.ts.map +1 -0
  28. package/dist/lib/codegen/spanLoggerClosureMaterializer.js +447 -0
  29. package/dist/lib/codegen/spanLoggerGenerator.d.ts +36 -19
  30. package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -1
  31. package/dist/lib/codegen/spanLoggerGenerator.js +164 -158
  32. package/dist/lib/convertToArrow.d.ts +7 -2
  33. package/dist/lib/convertToArrow.d.ts.map +1 -1
  34. package/dist/lib/convertToArrow.js +499 -285
  35. package/dist/lib/defineOpContext.js +1 -1
  36. package/dist/lib/enumMetadata.d.ts +19 -0
  37. package/dist/lib/enumMetadata.d.ts.map +1 -0
  38. package/dist/lib/enumMetadata.js +86 -0
  39. package/dist/lib/flushScheduler.d.ts.map +1 -1
  40. package/dist/lib/flushScheduler.js +13 -4
  41. package/dist/lib/library.d.ts +16 -98
  42. package/dist/lib/library.d.ts.map +1 -1
  43. package/dist/lib/library.js +32 -525
  44. package/dist/lib/logBinding.d.ts +21 -27
  45. package/dist/lib/logBinding.d.ts.map +1 -1
  46. package/dist/lib/op.d.ts +30 -30
  47. package/dist/lib/op.d.ts.map +1 -1
  48. package/dist/lib/op.js +15 -22
  49. package/dist/lib/opContext/createOpGroup.d.ts +1 -1
  50. package/dist/lib/opContext/createOpGroup.d.ts.map +1 -1
  51. package/dist/lib/opContext/createOpGroup.js +22 -29
  52. package/dist/lib/opContext/defineOp.d.ts +4 -4
  53. package/dist/lib/opContext/defineOp.d.ts.map +1 -1
  54. package/dist/lib/opContext/defineOp.js +53 -10
  55. package/dist/lib/opContext/opGroupTypes.d.ts +2 -2
  56. package/dist/lib/opContext/opTypes.d.ts +1 -1
  57. package/dist/lib/opContext/opTypes.d.ts.map +1 -1
  58. package/dist/lib/opContext/spanContextTypes.d.ts +29 -14
  59. package/dist/lib/opContext/spanContextTypes.d.ts.map +1 -1
  60. package/dist/lib/opContext/types.d.ts +4 -4
  61. package/dist/lib/opContext/types.d.ts.map +1 -1
  62. package/dist/lib/physicalLayoutPlan.d.ts +89 -0
  63. package/dist/lib/physicalLayoutPlan.d.ts.map +1 -0
  64. package/dist/lib/physicalLayoutPlan.js +442 -0
  65. package/dist/lib/resolveMessage.d.ts +9 -0
  66. package/dist/lib/resolveMessage.d.ts.map +1 -0
  67. package/dist/lib/resolveMessage.js +63 -0
  68. package/dist/lib/result.d.ts +5 -7
  69. package/dist/lib/result.d.ts.map +1 -1
  70. package/dist/lib/result.js +19 -26
  71. package/dist/lib/runtimeHint.d.ts +35 -0
  72. package/dist/lib/runtimeHint.d.ts.map +1 -0
  73. package/dist/lib/runtimeHint.js +79 -0
  74. package/dist/lib/schema/types.d.ts +1 -1
  75. package/dist/lib/schema/types.d.ts.map +1 -1
  76. package/dist/lib/span-buffer/aot/v1.d.ts +2 -0
  77. package/dist/lib/span-buffer/aot/v1.d.ts.map +1 -0
  78. package/dist/lib/span-buffer/aot/v1.js +24 -0
  79. package/dist/lib/spanBuffer.d.ts +33 -4
  80. package/dist/lib/spanBuffer.d.ts.map +1 -1
  81. package/dist/lib/spanBuffer.js +583 -91
  82. package/dist/lib/spanBufferStats.d.ts +1 -1
  83. package/dist/lib/spanBufferStats.d.ts.map +1 -1
  84. package/dist/lib/spanContext.d.ts +27 -51
  85. package/dist/lib/spanContext.d.ts.map +1 -1
  86. package/dist/lib/spanContext.js +822 -344
  87. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -1
  88. package/dist/lib/sqlite/sqlite-common.js +20 -21
  89. package/dist/lib/testing/bun-harness.d.ts +8 -3
  90. package/dist/lib/testing/bun-harness.d.ts.map +1 -1
  91. package/dist/lib/testing/bun-harness.js +30 -18
  92. package/dist/lib/testing/extractFacts.d.ts +1 -1
  93. package/dist/lib/testing/extractFacts.d.ts.map +1 -1
  94. package/dist/lib/testing/extractFacts.js +55 -63
  95. package/dist/lib/testing/facts.d.ts +1 -1
  96. package/dist/lib/testing/facts.d.ts.map +1 -1
  97. package/dist/lib/testing/queryable-span.d.ts +1 -1
  98. package/dist/lib/testing/queryable-span.d.ts.map +1 -1
  99. package/dist/lib/testing/queryable-span.js +26 -28
  100. package/dist/lib/testing/span-query.d.ts.map +1 -1
  101. package/dist/lib/testing/span-query.js +19 -22
  102. package/dist/lib/testing/stdio-replay.d.ts.map +1 -1
  103. package/dist/lib/testing/stdio-replay.js +19 -8
  104. package/dist/lib/threadId.d.ts.map +1 -1
  105. package/dist/lib/threadId.js +6 -3
  106. package/dist/lib/traceRoot.d.ts +30 -8
  107. package/dist/lib/traceRoot.d.ts.map +1 -1
  108. package/dist/lib/traceRoot.es.d.ts +17 -15
  109. package/dist/lib/traceRoot.es.d.ts.map +1 -1
  110. package/dist/lib/traceRoot.es.js +68 -34
  111. package/dist/lib/traceRoot.js +11 -0
  112. package/dist/lib/traceRoot.node.d.ts +17 -19
  113. package/dist/lib/traceRoot.node.d.ts.map +1 -1
  114. package/dist/lib/traceRoot.node.js +66 -38
  115. package/dist/lib/traceTopology.d.ts +42 -0
  116. package/dist/lib/traceTopology.d.ts.map +1 -0
  117. package/dist/lib/traceTopology.js +260 -0
  118. package/dist/lib/tracer.d.ts +9 -5
  119. package/dist/lib/tracer.d.ts.map +1 -1
  120. package/dist/lib/tracer.js +65 -71
  121. package/dist/lib/tracers/ArrayQueueTracer.d.ts +1 -1
  122. package/dist/lib/tracers/ArrayQueueTracer.js +1 -1
  123. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -1
  124. package/dist/lib/tracers/StdioTracer.js +15 -13
  125. package/dist/lib/tracers/TestTracer.d.ts +4 -6
  126. package/dist/lib/tracers/TestTracer.d.ts.map +1 -1
  127. package/dist/lib/tracers/TestTracer.js +6 -8
  128. package/dist/lib/types.d.ts +49 -32
  129. package/dist/lib/types.d.ts.map +1 -1
  130. package/dist/lib/vocabularyRegistry.d.ts +25 -0
  131. package/dist/lib/vocabularyRegistry.d.ts.map +1 -0
  132. package/dist/lib/vocabularyRegistry.js +372 -0
  133. package/dist/lib/wasm/WasmBufferStrategy.d.ts +6 -10
  134. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -1
  135. package/dist/lib/wasm/WasmBufferStrategy.js +44 -37
  136. package/dist/lib/wasm/wasmAllocator.d.ts +27 -22
  137. package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -1
  138. package/dist/lib/wasm/wasmAllocator.js +66 -44
  139. package/dist/lib/wasm/wasmPhysicalLayout.d.ts +67 -0
  140. package/dist/lib/wasm/wasmPhysicalLayout.d.ts.map +1 -0
  141. package/dist/lib/wasm/wasmPhysicalLayout.js +179 -0
  142. package/dist/lib/wasm/wasmSpanBuffer.d.ts +79 -31
  143. package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -1
  144. package/dist/lib/wasm/wasmSpanBuffer.js +442 -272
  145. package/dist/lib/wasm/wasmTraceRoot.d.ts +24 -22
  146. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -1
  147. package/dist/lib/wasm/wasmTraceRoot.js +110 -71
  148. package/dist/vocabulary/register/v1.d.ts +2 -0
  149. package/dist/vocabulary/register/v1.d.ts.map +1 -0
  150. package/dist/vocabulary/register/v1.js +1 -0
  151. package/dist/wasm.d.ts +5 -0
  152. package/dist/wasm.d.ts.map +1 -0
  153. package/dist/wasm.js +4 -0
  154. package/package.json +54 -6
  155. package/src/index.ts +1 -0
  156. package/src/lib/JsBufferStrategy.ts +27 -9
  157. package/src/lib/__tests__/arrow-builder-integration/arrow-conversion.test.ts +335 -37
  158. package/src/lib/__tests__/arrow-builder-integration/binary-arrow-conversion.test.ts +97 -26
  159. package/src/lib/__tests__/arrow-builder-integration/binary-comparison.test.ts +75 -15
  160. package/src/lib/__tests__/arrow-builder-integration/binary-format-compliance.test.ts +30 -6
  161. package/src/lib/__tests__/arrow-builder-integration/buffer-chaining.test.ts +18 -21
  162. package/src/lib/__tests__/arrow-builder-integration/foundation.test.ts +5 -2
  163. package/src/lib/__tests__/arrow-builder-integration/integration.test.ts +25 -7
  164. package/src/lib/__tests__/arrow-builder-integration/lazy-columns.test.ts +3 -2
  165. package/src/lib/__tests__/buffer-overflow.test.ts +24 -18
  166. package/src/lib/__tests__/capability-span-context.test.ts +505 -0
  167. package/src/lib/__tests__/capacity-tuning.test.ts +5 -3
  168. package/src/lib/__tests__/eager-columns.test.ts +345 -0
  169. package/src/lib/__tests__/enum-metadata-aot.test.ts +153 -0
  170. package/src/lib/__tests__/enum-metadata.test.ts +177 -0
  171. package/src/lib/__tests__/fixtures/empty-vocabulary-runtime.fixture.ts +15 -0
  172. package/src/lib/__tests__/flushScheduler.test.ts +5 -1
  173. package/src/lib/__tests__/identity-view.property.test.ts +179 -0
  174. package/src/lib/__tests__/library.test.ts +19 -235
  175. package/src/lib/__tests__/message-buffer-families.test.ts +878 -0
  176. package/src/lib/__tests__/nested-library-tasks.test.ts +14 -15
  177. package/src/lib/__tests__/op-metadata.test.ts +1 -1
  178. package/src/lib/__tests__/op-type-safety.test.ts +5 -16
  179. package/src/lib/__tests__/physical-layout-plan.test.ts +333 -0
  180. package/src/lib/__tests__/remap-descriptor-integration.test.ts +381 -0
  181. package/src/lib/__tests__/root-context-construction.test.ts +414 -0
  182. package/src/lib/__tests__/span-auto-runtime.test.ts +386 -0
  183. package/src/lib/__tests__/span-buffer-segment-stats.test.ts +221 -0
  184. package/src/lib/__tests__/span-lifecycle.test.ts +53 -25
  185. package/src/lib/__tests__/spanbuffer-materializer-parity.test.ts +266 -0
  186. package/src/lib/__tests__/sync-async-trace.test.ts +24 -23
  187. package/src/lib/__tests__/tag-writer-aot.test.ts +214 -0
  188. package/src/lib/__tests__/test-helpers.ts +67 -12
  189. package/src/lib/__tests__/threadId.test.ts +62 -0
  190. package/src/lib/__tests__/timestamp.test.ts +221 -93
  191. package/src/lib/__tests__/traceTopology.property.test.ts +383 -0
  192. package/src/lib/__tests__/type-narrowing.test.ts +63 -0
  193. package/src/lib/__tests__/vocabulary-dense-decoding.test.ts +405 -0
  194. package/src/lib/__tests__/vocabularyRegistry.test.ts +313 -0
  195. package/src/lib/arrow/lease.ts +43 -0
  196. package/src/lib/arrow/utils.ts +10 -14
  197. package/src/lib/arrow/vocabularyDictionary.ts +123 -0
  198. package/src/lib/bufferStrategy.ts +9 -1
  199. package/src/lib/cloudflare/traceRows.ts +3 -2
  200. package/src/lib/codegen/__tests__/evaluatorGenerator.test.ts +21 -141
  201. package/src/lib/codegen/__tests__/fixedPositionWriter-parity.test.ts +273 -0
  202. package/src/lib/codegen/__tests__/fixedPositionWriter-uint64.test.ts +61 -34
  203. package/src/lib/codegen/__tests__/nullBitmap.test.ts +33 -37
  204. package/src/lib/codegen/__tests__/spanLoggerGenerator.test.ts +34 -18
  205. package/src/lib/codegen/__tests__/spanLoggerMaterializerParity.test.ts +503 -0
  206. package/src/lib/codegen/evaluatorGenerator.ts +18 -13
  207. package/src/lib/codegen/fixedPositionWriterGenerator.ts +329 -245
  208. package/src/lib/codegen/spanLoggerClosureMaterializer.ts +598 -0
  209. package/src/lib/codegen/spanLoggerGenerator.ts +241 -177
  210. package/src/lib/convertToArrow.ts +598 -311
  211. package/src/lib/defineOpContext.ts +1 -1
  212. package/src/lib/enumMetadata.ts +121 -0
  213. package/src/lib/flushScheduler.ts +11 -5
  214. package/src/lib/library.ts +37 -595
  215. package/src/lib/logBinding.ts +21 -27
  216. package/src/lib/op.ts +75 -18
  217. package/src/lib/opContext/__tests__/retry.test.ts +27 -21
  218. package/src/lib/opContext/createOpGroup.ts +33 -31
  219. package/src/lib/opContext/defineOp.ts +88 -11
  220. package/src/lib/opContext/opGroupTypes.ts +2 -2
  221. package/src/lib/opContext/opTypes.ts +1 -1
  222. package/src/lib/opContext/spanContextTypes.ts +98 -17
  223. package/src/lib/opContext/types.ts +7 -3
  224. package/src/lib/physicalLayoutPlan.ts +598 -0
  225. package/src/lib/resolveMessage.ts +67 -0
  226. package/src/lib/result.ts +20 -33
  227. package/src/lib/runtimeHint.ts +98 -0
  228. package/src/lib/schema/__tests__/featureFlags.test.ts +2 -1
  229. package/src/lib/schema/builder.ts +1 -1
  230. package/src/lib/schema/types.ts +1 -1
  231. package/src/lib/span-buffer/aot/v1.ts +26 -0
  232. package/src/lib/spanBuffer.ts +658 -92
  233. package/src/lib/spanBufferStats.ts +1 -1
  234. package/src/lib/spanContext.ts +1350 -861
  235. package/src/lib/sqlite/sqlite-common.ts +20 -31
  236. package/src/lib/testing/__tests__/topology-traversal.test.ts +174 -0
  237. package/src/lib/testing/__tests__/vitest-harness.test.ts +2 -1
  238. package/src/lib/testing/bun-harness.ts +94 -43
  239. package/src/lib/testing/extractFacts.ts +64 -78
  240. package/src/lib/testing/facts.ts +1 -1
  241. package/src/lib/testing/queryable-span.ts +23 -30
  242. package/src/lib/testing/span-query.ts +16 -20
  243. package/src/lib/testing/stdio-replay.ts +25 -8
  244. package/src/lib/testing/vitest-harness.ts +1 -1
  245. package/src/lib/threadId.ts +6 -3
  246. package/src/lib/traceRoot.es.ts +77 -42
  247. package/src/lib/traceRoot.node.ts +75 -46
  248. package/src/lib/traceRoot.ts +41 -14
  249. package/src/lib/traceTopology.ts +279 -0
  250. package/src/lib/tracer.ts +109 -98
  251. package/src/lib/tracers/ArrayQueueTracer.ts +1 -1
  252. package/src/lib/tracers/StdioTracer.ts +15 -13
  253. package/src/lib/tracers/TestTracer.ts +6 -8
  254. package/src/lib/tracers/__tests__/ArrayQueueTracer.test.ts +15 -10
  255. package/src/lib/tracers/__tests__/TestTracer.test.ts +23 -13
  256. package/src/lib/types.ts +64 -33
  257. package/src/lib/vocabularyRegistry.ts +439 -0
  258. package/src/lib/wasm/WasmBufferStrategy.ts +56 -48
  259. package/src/lib/wasm/__tests__/WasmBufferStrategy.test.ts +215 -11
  260. package/src/lib/wasm/__tests__/allocatorFreeBlockClamp.test.ts +86 -0
  261. package/src/lib/wasm/__tests__/wasm-identity-view.test.ts +311 -0
  262. package/src/lib/wasm/__tests__/wasm-integration.test.ts +417 -44
  263. package/src/lib/wasm/__tests__/wasm-message-buffer-families.test.ts +588 -0
  264. package/src/lib/wasm/__tests__/wasmAllocator.test.ts +100 -668
  265. package/src/lib/wasm/__tests__/wasmSpanBuffer.test.ts +419 -63
  266. package/src/lib/wasm/__tests__/wasmTraceRoot.test.ts +24 -29
  267. package/src/lib/wasm/__tests__/wasmTracer.test.ts.disabled +2 -2
  268. package/src/lib/wasm/wasmAllocator.ts +131 -96
  269. package/src/lib/wasm/wasmPhysicalLayout.ts +309 -0
  270. package/src/lib/wasm/wasmSpanBuffer.ts +597 -341
  271. package/src/lib/wasm/wasmTraceRoot.ts +140 -78
  272. package/src/vocabulary/register/v1.ts +1 -0
  273. package/src/wasm.ts +19 -0
  274. package/src/lib/__tests__/remapped-buffer-view-integration.test.ts +0 -319
  275. package/src/lib/__tests__/remapped-buffer-view.test.ts +0 -635
  276. package/src/lib/wasm/allocator.zig +0 -948
@@ -5,6 +5,8 @@ import { describe, expect, it } from 'bun:test';
5
5
  import { createTestTracerOptions } from '../../__tests__/test-helpers.js';
6
6
  import { convertSpanTreeToArrowTable } from '../../convertToArrow.js';
7
7
  import { defineLogSchema, defineOpContext, S } from '../../defineOpContext.js';
8
+ import { resolveMessage } from '../../resolveMessage.js';
9
+ import { iterateSpanChildren } from '../../traceTopology.js';
8
10
  import { ArrayQueueTracer } from '../ArrayQueueTracer.js';
9
11
 
10
12
  describe('ArrayQueueTracer', () => {
@@ -31,7 +33,7 @@ describe('ArrayQueueTracer', () => {
31
33
  await trace('queued-trace', testOp);
32
34
 
33
35
  expect(tracer.queue).toHaveLength(1);
34
- expect(tracer.queue[0].message_values[0]).toBe('queued-trace');
36
+ expect(resolveMessage(tracer.queue[0], 0)).toBe('queued-trace');
35
37
  });
36
38
 
37
39
  it('should queue multiple traces in order', async () => {
@@ -45,9 +47,9 @@ describe('ArrayQueueTracer', () => {
45
47
  await trace('third', testOp);
46
48
 
47
49
  expect(tracer.queue).toHaveLength(3);
48
- expect(tracer.queue[0].message_values[0]).toBe('first');
49
- expect(tracer.queue[1].message_values[0]).toBe('second');
50
- expect(tracer.queue[2].message_values[0]).toBe('third');
50
+ expect(resolveMessage(tracer.queue[0], 0)).toBe('first');
51
+ expect(resolveMessage(tracer.queue[1], 0)).toBe('second');
52
+ expect(resolveMessage(tracer.queue[2], 0)).toBe('third');
51
53
  });
52
54
 
53
55
  it('should queue buffer even if trace throws', async () => {
@@ -61,7 +63,7 @@ describe('ArrayQueueTracer', () => {
61
63
  await expect(trace('failing', failOp)).rejects.toThrow('boom');
62
64
 
63
65
  expect(tracer.queue).toHaveLength(1);
64
- expect(tracer.queue[0].message_values[0]).toBe('failing');
66
+ expect(resolveMessage(tracer.queue[0], 0)).toBe('failing');
65
67
  });
66
68
  });
67
69
 
@@ -78,8 +80,8 @@ describe('ArrayQueueTracer', () => {
78
80
  const drained = tracer.drain();
79
81
 
80
82
  expect(drained).toHaveLength(2);
81
- expect(drained[0].message_values[0]).toBe('a');
82
- expect(drained[1].message_values[0]).toBe('b');
83
+ expect(resolveMessage(drained[0], 0)).toBe('a');
84
+ expect(resolveMessage(drained[1], 0)).toBe('b');
83
85
  });
84
86
 
85
87
  it('should clear queue after drain', async () => {
@@ -116,7 +118,7 @@ describe('ArrayQueueTracer', () => {
116
118
  await trace('after', testOp);
117
119
 
118
120
  expect(tracer.queue).toHaveLength(1);
119
- expect(tracer.queue[0].message_values[0]).toBe('after');
121
+ expect(resolveMessage(tracer.queue[0], 0)).toBe('after');
120
122
  });
121
123
 
122
124
  it('should return independent array (not reference to internal queue)', async () => {
@@ -177,8 +179,11 @@ describe('ArrayQueueTracer', () => {
177
179
  await trace('root', parentOp);
178
180
 
179
181
  const [buffer] = tracer.drain();
180
- expect(buffer._children).toHaveLength(1);
181
- expect(buffer._children[0].message_values[0]).toBe('child-span');
182
+ const children = Array.from(iterateSpanChildren(buffer));
183
+ expect(children).toHaveLength(1);
184
+ const [child] = children;
185
+ if (!child) throw new Error('expected queued child span');
186
+ expect(resolveMessage(child, 0)).toBe('child-span');
182
187
  });
183
188
  });
184
189
  });
@@ -10,8 +10,10 @@ import '../../__tests__/test-helpers.js';
10
10
  import { createTestTracerOptions } from '../../__tests__/test-helpers.js';
11
11
  import { convertSpanTreeToArrowTable } from '../../convertToArrow.js';
12
12
  import { defineOpContext } from '../../defineOpContext.js';
13
+ import { resolveMessage } from '../../resolveMessage.js';
13
14
  import { S } from '../../schema/builder.js';
14
15
  import { defineLogSchema } from '../../schema/defineLogSchema.js';
16
+ import { iterateSpanChildren } from '../../traceTopology.js';
15
17
  import { TestTracer } from '../TestTracer.js';
16
18
 
17
19
  describe('TestTracer', () => {
@@ -37,7 +39,7 @@ describe('TestTracer', () => {
37
39
  await trace('my-trace', async (ctx) => ctx.ok('done'));
38
40
 
39
41
  expect(tracer.rootBuffers).toHaveLength(1);
40
- expect(tracer.rootBuffers[0].message_values[0]).toBe('my-trace');
42
+ expect(resolveMessage(tracer.rootBuffers[0], 0)).toBe('my-trace');
41
43
  });
42
44
 
43
45
  it('should accumulate multiple traces', async () => {
@@ -49,9 +51,9 @@ describe('TestTracer', () => {
49
51
  await trace('trace-3', async (ctx) => ctx.ok('done'));
50
52
 
51
53
  expect(tracer.rootBuffers).toHaveLength(3);
52
- expect(tracer.rootBuffers[0].message_values[0]).toBe('trace-1');
53
- expect(tracer.rootBuffers[1].message_values[0]).toBe('trace-2');
54
- expect(tracer.rootBuffers[2].message_values[0]).toBe('trace-3');
54
+ expect(resolveMessage(tracer.rootBuffers[0], 0)).toBe('trace-1');
55
+ expect(resolveMessage(tracer.rootBuffers[1], 0)).toBe('trace-2');
56
+ expect(resolveMessage(tracer.rootBuffers[2], 0)).toBe('trace-3');
55
57
  });
56
58
 
57
59
  it('should accumulate buffer even if trace throws', async () => {
@@ -66,7 +68,7 @@ describe('TestTracer', () => {
66
68
 
67
69
  // Buffer should still be collected
68
70
  expect(tracer.rootBuffers).toHaveLength(1);
69
- expect(tracer.rootBuffers[0].message_values[0]).toBe('failing-trace');
71
+ expect(resolveMessage(tracer.rootBuffers[0], 0)).toBe('failing-trace');
70
72
  });
71
73
  });
72
74
 
@@ -85,9 +87,11 @@ describe('TestTracer', () => {
85
87
  expect(tracer.rootBuffers).toHaveLength(1);
86
88
  const rootBuffer = tracer.rootBuffers[0];
87
89
 
88
- // Child spans are in _children array
89
- expect(rootBuffer._children).toHaveLength(1);
90
- expect(rootBuffer._children[0].message_values[0]).toBe('child-span');
90
+ const children = Array.from(iterateSpanChildren(rootBuffer));
91
+ expect(children).toHaveLength(1);
92
+ const [child] = children;
93
+ if (!child) throw new Error('expected child span');
94
+ expect(resolveMessage(child, 0)).toBe('child-span');
91
95
  });
92
96
 
93
97
  it('should support deeply nested spans', async () => {
@@ -105,10 +109,16 @@ describe('TestTracer', () => {
105
109
  });
106
110
 
107
111
  const root = tracer.rootBuffers[0];
108
- expect(root._children).toHaveLength(1);
109
- expect(root._children[0].message_values[0]).toBe('span-l2');
110
- expect(root._children[0]._children).toHaveLength(1);
111
- expect(root._children[0]._children[0].message_values[0]).toBe('span-l3');
112
+ const level2Children = Array.from(iterateSpanChildren(root));
113
+ expect(level2Children).toHaveLength(1);
114
+ const [level2] = level2Children;
115
+ if (!level2) throw new Error('expected level-2 span');
116
+ expect(resolveMessage(level2, 0)).toBe('span-l2');
117
+ const level3Children = Array.from(iterateSpanChildren(level2));
118
+ expect(level3Children).toHaveLength(1);
119
+ const [level3] = level3Children;
120
+ if (!level3) throw new Error('expected level-3 span');
121
+ expect(resolveMessage(level3, 0)).toBe('span-l3');
112
122
  });
113
123
  });
114
124
 
@@ -136,7 +146,7 @@ describe('TestTracer', () => {
136
146
  await trace('after-clear', async (ctx) => ctx.ok('done'));
137
147
 
138
148
  expect(tracer.rootBuffers).toHaveLength(1);
139
- expect(tracer.rootBuffers[0].message_values[0]).toBe('after-clear');
149
+ expect(resolveMessage(tracer.rootBuffers[0], 0)).toBe('after-clear');
140
150
  });
141
151
  });
142
152
 
package/src/lib/types.ts CHANGED
@@ -19,14 +19,16 @@ import type {
19
19
  TypedArray,
20
20
  } from '@smoothbricks/arrow-builder';
21
21
  import type { OpMetadata } from './opContext/opTypes.js';
22
+ import type { MessageLayoutFamily, MessagePhysicalLayout } from './runtimeHint.js';
22
23
  import type { LogSchema } from './schema/LogSchema.js';
23
24
  import type { InferSchema } from './schema/types.js';
24
25
  import type { SpanBufferStats } from './spanBufferStats.js';
25
26
  import type { TraceId } from './traceId.js';
26
27
  import type { ITraceRoot } from './traceRoot.js';
28
+ import type { VocabularyGeneration } from './vocabularyRegistry.js';
27
29
 
28
30
  // Re-export infrastructure types
29
- export type { LogBinding, RemappedViewConstructor } from './logBinding.js';
31
+ export type { LogBinding, RemapDescriptor, RemappedColumn } from './logBinding.js';
30
32
  export type { OpMetadata } from './opContext/opTypes.js';
31
33
  export type { extractSpanIdentity, SpanIdentity } from './traceId.js';
32
34
  export type { TracerLifecycleHooks } from './traceRoot.js';
@@ -107,13 +109,35 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
107
109
  */
108
110
  readonly timestamp: BigInt64Array;
109
111
 
112
+ /** Current and specialized layouts expose this direct lane; packed uses `resolveEntryType`. */
113
+ readonly entry_type?: Uint8Array;
114
+
115
+ /** Current-mode buffer-local template IDs. Zero selects the raw reference lane. */
116
+ readonly _messageIds?: Uint16Array;
117
+
118
+ /** Specialized 1-based global dense message identities. Zero selects the raw/null sidecar sentinel. */
119
+ readonly _logHeaders?: Uint32Array;
120
+
121
+ /** Packed row headers: low 8 bits entry type, high 24 bits dense message index plus one. */
122
+ readonly _rowHeaders?: Uint32Array;
123
+
124
+ /** Immutable vocabulary generation against which packed message indices resolve. */
125
+ readonly _vocabularyGeneration: VocabularyGeneration;
126
+ /** Concrete semantic message family selected once for this buffer constructor. */
127
+ readonly _messageLayoutFamily: MessageLayoutFamily;
110
128
  /**
111
- * Entry type enum for each row (Uint8Array, 1 byte per entry).
112
- *
113
- * Per specs/lmao/01h_entry_types_and_logging_primitives.md:
114
- * Values are ENTRY_TYPE_* constants (span-start=1, span-ok=2, etc.)
129
+ * One-shot token set by WASM constructors whose allocation export already
130
+ * initialized row 0, row 1, and the shared write index.
115
131
  */
116
- readonly entry_type: Uint8Array;
132
+ _spanStartedAtAllocation?: boolean;
133
+ /** Concrete physical row layout selected once for this buffer constructor. */
134
+ readonly _messagePhysicalLayout: MessagePhysicalLayout;
135
+
136
+ /** Dedicated row-0 span name used when the selected capacity lane cannot represent it. */
137
+ _spanName?: string | number;
138
+
139
+ /** Dedicated row-1 raw result/exception text for static-only buffers. */
140
+ _terminalMessage?: string;
117
141
 
118
142
  /**
119
143
  * Timestamp of span start (row 0).
@@ -152,6 +176,12 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
152
176
  */
153
177
  _overflow?: AnySpanBuffer;
154
178
 
179
+ /** Whether this physical segment has contributed its rows to shared stats. */
180
+ _statsSealed: boolean;
181
+
182
+ /** Lifecycle rows excluded when this physical segment is sealed (2 for first segment, 0 for overflow). */
183
+ _statsReservedRows: number;
184
+
155
185
  // ===========================================================================
156
186
  // Identity Getters (read from _identity bytes)
157
187
  // ===========================================================================
@@ -201,15 +231,15 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
201
231
  readonly _logSchema: LogSchema;
202
232
 
203
233
  /**
204
- * Column entries for Arrow conversion iteration.
205
- * For SpanBuffer: delegates to _logSchema._columns (unprefixed names)
206
- * For RemappedBufferView: built in constructor with prefixed names from mapping
207
- *
208
- * This enables Arrow conversion to iterate column names correctly regardless of
209
- * whether the buffer is wrapped in a RemappedBufferView.
234
+ * Canonical schema column entries for this buffer.
235
+ * Output remapping lives separately in `_remapDescriptor` and is interpreted
236
+ * only by cold Arrow traversal.
210
237
  */
211
238
  readonly _columns: ReadonlyArray<[string, unknown]>;
212
239
 
240
+ /** Immutable cold-path output remapping attached to canonical child buffers. */
241
+ _remapDescriptor?: import('./logBinding.js').RemapDescriptor;
242
+
213
243
  /**
214
244
  * Shared stats for all buffers from same defineOpContext (accessed via constructor.stats).
215
245
  * Enables self-tuning capacity learning across all ops in the same context.
@@ -221,16 +251,13 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
221
251
  // Tree Structure (for span hierarchy)
222
252
  // ===========================================================================
223
253
 
224
- /**
225
- * Child spans created via ctx.span().
226
- * Per specs/lmao/01c: Parent-child relationship for trace tree.
227
- */
228
- _children: AnySpanBuffer[];
254
+ /** Stable trace-owned logical node index. Overflow segments share the same index. */
255
+ _nodeIndex: number;
229
256
 
230
- /**
231
- * Parent span buffer (undefined for root).
232
- * Set during createChildSpanBuffer().
233
- */
257
+ /** Trace-topology generation used to reject released or reset handles. */
258
+ _topologyGeneration: number;
259
+
260
+ /** Parent span buffer (undefined for root). Preserved for identity access and parent ascent. */
234
261
  _parent?: AnySpanBuffer;
235
262
 
236
263
  // ===========================================================================
@@ -275,12 +302,8 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
275
302
  // These are explicitly typed here since they're always present from systemSchema.
276
303
  // ===========================================================================
277
304
 
278
- /**
279
- * Message column values - category strings (eager, always allocated).
280
- * Contains span names, log messages, exception messages, etc.
281
- */
282
- readonly message_values: string[];
283
- readonly message_nulls: Uint8Array;
305
+ /** Raw per-row message lane. Omitted by static-only; `undefined` is the null sentinel. */
306
+ readonly message_values?: (string | undefined)[];
284
307
 
285
308
  /**
286
309
  * Line number column values - Float64Array (lazy but always present).
@@ -391,6 +414,12 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
391
414
  */
392
415
  getOrCreateOverflow(): AnySpanBuffer;
393
416
 
417
+ /** Account this physical segment's completed rows exactly once. */
418
+ _sealStats(): void;
419
+
420
+ /** Account every physical segment in this logical span's overflow chain exactly once. */
421
+ _sealStatsChain(): void;
422
+
394
423
  /**
395
424
  * Check if this span is a parent of another span.
396
425
  * Used for tree traversal and validation.
@@ -468,13 +497,13 @@ type FilterSchemaFields<T> = {
468
497
  * T is REQUIRED - there is no default. Use AnySpanBuffer for generic processing.
469
498
  */
470
499
  export type SpanBuffer<T extends LogSchema> = AnySpanBuffer & {
471
- // Override tree structure with typed versions
472
- _children: SpanBuffer<T>[];
500
+ // Preserve typed parent and overflow links.
473
501
  _parent?: SpanBuffer<T>;
474
502
  _overflow?: SpanBuffer<T>;
475
503
 
476
504
  // Override schema access with the concrete schema for this buffer family
477
505
  readonly _logSchema: T;
506
+ _traceRoot: ITraceRoot<T>;
478
507
  _scopeValues: Readonly<Partial<InferSchema<T>>>;
479
508
 
480
509
  // Override methods with typed versions
@@ -486,11 +515,13 @@ export type SpanBuffer<T extends LogSchema> = AnySpanBuffer & {
486
515
  [key: `${string}_nulls`]: Uint8Array | undefined;
487
516
  } & {
488
517
  // Schema-specific column data
489
- readonly [K in keyof FilterSchemaFields<T['fields']> as `${K & string}_values`]: ValuesArrayType<
490
- FilterSchemaFields<T['fields']>[K]
491
- >;
518
+ readonly [K in keyof FilterSchemaFields<T['fields']> as K extends 'message'
519
+ ? never
520
+ : `${K & string}_values`]: ValuesArrayType<FilterSchemaFields<T['fields']>[K]>;
492
521
  } & {
493
- readonly [K in keyof FilterSchemaFields<T['fields']> as `${K & string}_nulls`]: Uint8Array;
522
+ readonly [K in keyof FilterSchemaFields<T['fields']> as K extends 'message'
523
+ ? never
524
+ : `${K & string}_nulls`]: Uint8Array;
494
525
  } & {
495
526
  // Schema-specific setter methods (return this for method chaining)
496
527
  [K in keyof FilterSchemaFields<T['fields']>]: (