@smoothbricks/lmao 0.1.3 → 0.2.0

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 (181) hide show
  1. package/dist/allocator.wasm +0 -0
  2. package/dist/cloudflare.d.ts +15 -0
  3. package/dist/cloudflare.d.ts.map +1 -0
  4. package/dist/cloudflare.js +14 -0
  5. package/dist/es.d.ts.map +1 -1
  6. package/dist/es.js +1 -0
  7. package/dist/lib/archive/chunkCompaction.d.ts.map +1 -1
  8. package/dist/lib/archive/chunkCompaction.js +2 -0
  9. package/dist/lib/archive/chunkEnvelope.d.ts.map +1 -1
  10. package/dist/lib/archive/chunkRouting.d.ts.map +1 -1
  11. package/dist/lib/archive/chunkRouting.js +3 -0
  12. package/dist/lib/archive/chunkStats.d.ts.map +1 -1
  13. package/dist/lib/archive/chunkStats.js +1 -0
  14. package/dist/lib/arrow/capacityStats.d.ts.map +1 -1
  15. package/dist/lib/arrow/capacityStats.js +1 -0
  16. package/dist/lib/bufferStrategy.d.ts.map +1 -1
  17. package/dist/lib/capacityTuning.d.ts.map +1 -1
  18. package/dist/lib/capacityTuning.js +1 -0
  19. package/dist/lib/cloudflare/classSplit.d.ts +73 -0
  20. package/dist/lib/cloudflare/classSplit.d.ts.map +1 -0
  21. package/dist/lib/cloudflare/classSplit.js +82 -0
  22. package/dist/lib/cloudflare/collectorClient.d.ts +69 -0
  23. package/dist/lib/cloudflare/collectorClient.d.ts.map +1 -0
  24. package/dist/lib/cloudflare/collectorClient.js +82 -0
  25. package/dist/lib/cloudflare/diagnosticDrain.d.ts +78 -0
  26. package/dist/lib/cloudflare/diagnosticDrain.d.ts.map +1 -0
  27. package/dist/lib/cloudflare/diagnosticDrain.js +120 -0
  28. package/dist/lib/cloudflare/traceRows.d.ts +19 -0
  29. package/dist/lib/cloudflare/traceRows.d.ts.map +1 -0
  30. package/dist/lib/cloudflare/traceRows.js +51 -0
  31. package/dist/lib/codegen/evaluatorGenerator.d.ts.map +1 -1
  32. package/dist/lib/codegen/evaluatorGenerator.js +1 -0
  33. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts +8 -0
  34. package/dist/lib/codegen/fixedPositionWriterGenerator.d.ts.map +1 -1
  35. package/dist/lib/codegen/fixedPositionWriterGenerator.js +18 -1
  36. package/dist/lib/codegen/spanLoggerGenerator.d.ts.map +1 -1
  37. package/dist/lib/codegen/spanLoggerGenerator.js +3 -0
  38. package/dist/lib/convertToArrow.d.ts.map +1 -1
  39. package/dist/lib/convertToArrow.js +6 -0
  40. package/dist/lib/defineOpContext.d.ts +5 -0
  41. package/dist/lib/defineOpContext.d.ts.map +1 -1
  42. package/dist/lib/defineOpContext.js +11 -1
  43. package/dist/lib/errors/Blocked.d.ts.map +1 -1
  44. package/dist/lib/errors/Transient.d.ts.map +1 -1
  45. package/dist/lib/errors/retry-policy.d.ts.map +1 -1
  46. package/dist/lib/flushScheduler.d.ts.map +1 -1
  47. package/dist/lib/flushScheduler.js +2 -0
  48. package/dist/lib/library.d.ts +5 -0
  49. package/dist/lib/library.d.ts.map +1 -1
  50. package/dist/lib/library.js +6 -0
  51. package/dist/lib/op.d.ts.map +1 -1
  52. package/dist/lib/op.js +2 -0
  53. package/dist/lib/opContext/createOpGroup.d.ts.map +1 -1
  54. package/dist/lib/opContext/createOpGroup.js +5 -0
  55. package/dist/lib/opContext/defineOp.d.ts.map +1 -1
  56. package/dist/lib/opContext/defineOp.js +5 -0
  57. package/dist/lib/result.d.ts.map +1 -1
  58. package/dist/lib/result.js +3 -0
  59. package/dist/lib/schema/builder.d.ts.map +1 -1
  60. package/dist/lib/schema/builder.js +1 -0
  61. package/dist/lib/schema/defineFeatureFlags.d.ts.map +1 -1
  62. package/dist/lib/schema/defineLogSchema.d.ts.map +1 -1
  63. package/dist/lib/schema/defineLogSchema.js +1 -0
  64. package/dist/lib/schema/evaluator.d.ts.map +1 -1
  65. package/dist/lib/schema/systemSchema.d.ts.map +1 -1
  66. package/dist/lib/schema/systemSchema.js +1 -0
  67. package/dist/lib/spanBuffer.d.ts.map +1 -1
  68. package/dist/lib/spanBuffer.js +8 -0
  69. package/dist/lib/spanBufferHelpers.d.ts.map +1 -1
  70. package/dist/lib/spanBufferHelpers.js +1 -0
  71. package/dist/lib/spanBufferStats.d.ts.map +1 -1
  72. package/dist/lib/spanContext.d.ts +8 -0
  73. package/dist/lib/spanContext.d.ts.map +1 -1
  74. package/dist/lib/spanContext.js +35 -0
  75. package/dist/lib/sqlite/index.d.ts +1 -0
  76. package/dist/lib/sqlite/index.d.ts.map +1 -1
  77. package/dist/lib/sqlite/sqlite-common.d.ts +2 -0
  78. package/dist/lib/sqlite/sqlite-common.d.ts.map +1 -1
  79. package/dist/lib/sqlite/sqlite-common.js +9 -1
  80. package/dist/lib/threadId.d.ts.map +1 -1
  81. package/dist/lib/threadId.js +2 -0
  82. package/dist/lib/traceId.d.ts.map +1 -1
  83. package/dist/lib/traceId.js +1 -0
  84. package/dist/lib/traceRoot.d.ts +5 -5
  85. package/dist/lib/traceRoot.d.ts.map +1 -1
  86. package/dist/lib/traceRoot.es.d.ts.map +1 -1
  87. package/dist/lib/traceRoot.es.js +3 -0
  88. package/dist/lib/traceRoot.js +3 -1
  89. package/dist/lib/traceRoot.node.d.ts +2 -2
  90. package/dist/lib/traceRoot.node.d.ts.map +1 -1
  91. package/dist/lib/traceRoot.node.js +4 -3
  92. package/dist/lib/tracer.d.ts.map +1 -1
  93. package/dist/lib/tracer.js +2 -0
  94. package/dist/lib/tracers/ArrayQueueTracer.d.ts.map +1 -1
  95. package/dist/lib/tracers/CompositeTracer.d.ts.map +1 -1
  96. package/dist/lib/tracers/CompositeTracer.js +1 -0
  97. package/dist/lib/tracers/NoOpTracer.d.ts.map +1 -1
  98. package/dist/lib/tracers/NoOpTracer.js +1 -0
  99. package/dist/lib/tracers/SQLiteTracer.d.ts.map +1 -1
  100. package/dist/lib/tracers/SQLiteTracer.js +2 -0
  101. package/dist/lib/tracers/StdioTracer.d.ts.map +1 -1
  102. package/dist/lib/tracers/StdioTracer.js +1 -0
  103. package/dist/lib/tracers/TestTracer.d.ts.map +1 -1
  104. package/dist/lib/tracers/TestTracer.js +1 -0
  105. package/dist/lib/types.d.ts.map +1 -1
  106. package/dist/lib/utf8Cache.d.ts.map +1 -1
  107. package/dist/lib/utf8Cache.js +1 -0
  108. package/dist/lib/wasm/WasmBufferStrategy.d.ts.map +1 -1
  109. package/dist/lib/wasm/WasmBufferStrategy.js +2 -0
  110. package/dist/lib/wasm/wasmAllocator.d.ts +2 -0
  111. package/dist/lib/wasm/wasmAllocator.d.ts.map +1 -1
  112. package/dist/lib/wasm/wasmSpanBuffer.d.ts.map +1 -1
  113. package/dist/lib/wasm/wasmTraceRoot.d.ts.map +1 -1
  114. package/dist/node.d.ts.map +1 -1
  115. package/dist/node.js +1 -0
  116. package/package.json +10 -4
  117. package/src/cloudflare.ts +35 -0
  118. package/src/es.ts +2 -0
  119. package/src/lib/archive/chunkCompaction.ts +2 -0
  120. package/src/lib/archive/chunkEnvelope.ts +2 -0
  121. package/src/lib/archive/chunkRouting.ts +4 -0
  122. package/src/lib/archive/chunkStats.ts +2 -0
  123. package/src/lib/arrow/capacityStats.ts +2 -0
  124. package/src/lib/bufferStrategy.ts +2 -0
  125. package/src/lib/capacityTuning.ts +2 -0
  126. package/src/lib/cloudflare/__tests__/classSplit.test.ts +171 -0
  127. package/src/lib/cloudflare/__tests__/collectorClient.test.ts +104 -0
  128. package/src/lib/cloudflare/__tests__/diagnosticDrain.test.ts +165 -0
  129. package/src/lib/cloudflare/classSplit.ts +139 -0
  130. package/src/lib/cloudflare/collectorClient.ts +117 -0
  131. package/src/lib/cloudflare/diagnosticDrain.ts +152 -0
  132. package/src/lib/cloudflare/traceRows.ts +60 -0
  133. package/src/lib/codegen/__tests__/fixedPositionWriter-uint64.test.ts +304 -0
  134. package/src/lib/codegen/evaluatorGenerator.ts +2 -0
  135. package/src/lib/codegen/fixedPositionWriterGenerator.ts +28 -1
  136. package/src/lib/codegen/spanLoggerGenerator.ts +4 -0
  137. package/src/lib/convertToArrow.ts +6 -0
  138. package/src/lib/defineOpContext.ts +17 -1
  139. package/src/lib/errors/Blocked.ts +2 -0
  140. package/src/lib/errors/Transient.ts +2 -0
  141. package/src/lib/errors/retry-policy.ts +2 -0
  142. package/src/lib/flushScheduler.ts +2 -0
  143. package/src/lib/library.ts +7 -0
  144. package/src/lib/op.ts +8 -0
  145. package/src/lib/opContext/createOpGroup.ts +6 -0
  146. package/src/lib/opContext/defineOp.ts +6 -0
  147. package/src/lib/result.ts +4 -0
  148. package/src/lib/schema/builder.ts +2 -0
  149. package/src/lib/schema/defineFeatureFlags.ts +2 -0
  150. package/src/lib/schema/defineLogSchema.ts +2 -0
  151. package/src/lib/schema/evaluator.ts +2 -0
  152. package/src/lib/schema/systemSchema.ts +2 -0
  153. package/src/lib/spanBuffer.ts +10 -0
  154. package/src/lib/spanBufferHelpers.ts +2 -0
  155. package/src/lib/spanBufferStats.ts +2 -0
  156. package/src/lib/spanContext.ts +48 -1
  157. package/src/lib/sqlite/__tests__/sqlite-common.test.ts +40 -1
  158. package/src/lib/sqlite/index.ts +1 -0
  159. package/src/lib/sqlite/sqlite-common.ts +10 -1
  160. package/src/lib/testing/__tests__/facts.test.ts +6 -6
  161. package/src/lib/threadId.ts +2 -0
  162. package/src/lib/traceId.ts +4 -0
  163. package/src/lib/traceRoot.es.ts +4 -0
  164. package/src/lib/traceRoot.node.ts +5 -3
  165. package/src/lib/traceRoot.ts +9 -5
  166. package/src/lib/tracer.ts +4 -0
  167. package/src/lib/tracers/ArrayQueueTracer.ts +2 -0
  168. package/src/lib/tracers/CompositeTracer.ts +2 -0
  169. package/src/lib/tracers/NoOpTracer.ts +2 -0
  170. package/src/lib/tracers/SQLiteTracer.ts +2 -0
  171. package/src/lib/tracers/StdioTracer.ts +2 -0
  172. package/src/lib/tracers/TestTracer.ts +2 -0
  173. package/src/lib/types.ts +2 -0
  174. package/src/lib/utf8Cache.ts +2 -0
  175. package/src/lib/wasm/WasmBufferStrategy.ts +4 -0
  176. package/src/lib/wasm/allocator.zig +4 -1
  177. package/src/lib/wasm/wasmAllocator.ts +5 -0
  178. package/src/lib/wasm/wasmSpanBuffer.ts +4 -0
  179. package/src/lib/wasm/wasmTraceRoot.ts +4 -0
  180. package/src/node.ts +2 -0
  181. package/src/lib/codegen/__tests__/__snapshots__/spanLoggerGenerator.test.ts.snap +0 -1965
@@ -286,10 +286,10 @@ describe('trace-testing example', () => {
286
286
  // Simulate facts collected from a trace
287
287
  const facts = createFactArray([
288
288
  spanStarted('execute-loop'),
289
- spanStarted('reduce'),
289
+ spanStarted('prepare'),
290
290
  tagFact('event_count', 5),
291
- spanOk('reduce'),
292
- spanStarted('decide'),
291
+ spanOk('prepare'),
292
+ spanStarted('plan'),
293
293
  spanStarted('op:reserveInventory'),
294
294
  tagFact('sku', 'SKU-A'),
295
295
  tagFact('quantity', 2),
@@ -297,7 +297,7 @@ describe('trace-testing example', () => {
297
297
  spanStarted('op:chargePayment'),
298
298
  logInfo('Charging $49.99'),
299
299
  spanOk('op:chargePayment'),
300
- spanOk('decide'),
300
+ spanOk('plan'),
301
301
  spanOk('execute-loop'),
302
302
  ]);
303
303
 
@@ -307,8 +307,8 @@ describe('trace-testing example', () => {
307
307
  // The execution completed successfully
308
308
  expect(facts.has(spanOk('execute-loop'))).toBe(true);
309
309
 
310
- // Reduce happened before decide
311
- expect(facts.hasInOrder([spanOk('reduce'), spanStarted('decide')])).toBe(true);
310
+ // Preparation happened before planning
311
+ expect(facts.hasInOrder([spanOk('prepare'), spanStarted('plan')])).toBe(true);
312
312
 
313
313
  // Inventory was reserved before payment was charged
314
314
  expect(facts.hasInOrder([spanOk('op:reserveInventory'), spanStarted('op:chargePayment')])).toBe(true);
@@ -22,6 +22,7 @@
22
22
  * @module threadId
23
23
  */
24
24
 
25
+ //#region smoo/lmao!n/spanbuffer-layout.thread-id
25
26
  /** Thread ID size in bytes */
26
27
  export const THREAD_ID_BYTES = 8;
27
28
 
@@ -120,6 +121,7 @@ export function writeThreadIdToUint64Array(dest: BigUint64Array, index: number):
120
121
  const byteView = new Uint8Array(dest.buffer, dest.byteOffset + index * 8, 8);
121
122
  byteView.set(threadIdBytes);
122
123
  }
124
+ //#endregion smoo/lmao!n/spanbuffer-layout.thread-id
123
125
 
124
126
  /**
125
127
  * Reset thread ID for testing purposes only.
@@ -12,6 +12,7 @@
12
12
  * @module traceId
13
13
  */
14
14
 
15
+ //#region smoo/lmao!n/span-identity.trace-id
15
16
  /** Maximum length for a trace ID */
16
17
  export const MAX_TRACE_ID_LENGTH = 128;
17
18
 
@@ -85,10 +86,12 @@ export function generateTraceId(): TraceId {
85
86
 
86
87
  return brandTraceId(hex);
87
88
  }
89
+ //#endregion smoo/lmao!n/span-identity.trace-id
88
90
 
89
91
  // ============================================================================
90
92
  // SpanIdentity - Span identification for external systems
91
93
  // ============================================================================
94
+ //#region smoo/lmao!n/span-identity.external-correlation
92
95
 
93
96
  /**
94
97
  * SpanIdentity - Identifies a specific span for external correlation.
@@ -140,3 +143,4 @@ export function extractSpanIdentity(buffer: { trace_id: TraceId; span_id: number
140
143
  thread_id: buffer.thread_id,
141
144
  };
142
145
  }
146
+ //#endregion smoo/lmao!n/span-identity.external-correlation
@@ -1,3 +1,4 @@
1
+ //#region smoo/lmao!n/es-trace-root
1
2
  /**
2
3
  * TraceRoot - Browser/ES implementation.
3
4
  *
@@ -94,6 +95,7 @@ export class TraceRoot implements ITraceRoot {
94
95
  return createTraceId(textDecoder.decode(new Uint8Array(this._system, TRACE_ROOT_TRACE_ID_OFFSET, len)));
95
96
  }
96
97
 
98
+ //#region smoo/lmao!n/trace-root-timestamps #es
97
99
  /**
98
100
  * Get current timestamp in nanoseconds since Unix epoch.
99
101
  * Uses performance.now() - microsecond precision (last 3 digits = 000).
@@ -104,6 +106,7 @@ export class TraceRoot implements ITraceRoot {
104
106
  const elapsedNanos = BigInt(Math.floor(elapsedMs * 1000)) * 1000n;
105
107
  return Nanoseconds.unsafe(this._epochView[0] + elapsedNanos);
106
108
  }
109
+ //#endregion smoo/lmao!n/trace-root-timestamps
107
110
 
108
111
  /**
109
112
  * Write span-start entry to buffer at row 0.
@@ -155,3 +158,4 @@ export function createTraceRoot(trace_id: string, tracer: TracerLifecycleHooks):
155
158
  const anchorPerfNow = performance.now();
156
159
  return new TraceRoot(createTraceId(trace_id), anchorEpochNanos, anchorPerfNow, tracer);
157
160
  }
161
+ //#endregion smoo/lmao!n/es-trace-root
@@ -28,6 +28,7 @@ const textEncoder = new TextEncoder();
28
28
  /** Shared TextDecoder for trace_id decoding (stateless, reusable) */
29
29
  const textDecoder = new TextDecoder();
30
30
 
31
+ //#region smoo/lmao!n/trace-root-timestamps #node
31
32
  /**
32
33
  * TraceRoot - Node.js implementation.
33
34
  *
@@ -51,8 +52,8 @@ export class TraceRoot implements ITraceRoot {
51
52
  private readonly _perfView: Float64Array;
52
53
 
53
54
  /**
54
- * Cached anchor hrtime as BigInt for JS timestamp fallback.
55
- * Only used if NAPI addon is not available.
55
+ * Cached anchor hrtime as the exact BigInt, so the JS timestamp delta stays
56
+ * correct after the f64 `anchorPerfNow` loses integer precision (~104 days uptime).
56
57
  */
57
58
  private readonly _anchorHrtimeBigInt: bigint;
58
59
 
@@ -164,7 +165,8 @@ export class TraceRoot implements ITraceRoot {
164
165
  export function createTraceRoot(trace_id: string, tracer: TracerLifecycleHooks): TraceRoot {
165
166
  const anchorEpochNanos = BigInt(Date.now()) * 1_000_000n;
166
167
  const anchorHrtimeBigInt = process.hrtime.bigint();
167
- // Store as number for NAPI to read as f64
168
+ // Also store as f64 in the shared _system layout (WASM reads it without BigInt extraction)
168
169
  const anchorPerfNow = Number(anchorHrtimeBigInt);
169
170
  return new TraceRoot(createTraceId(trace_id), anchorEpochNanos, anchorPerfNow, anchorHrtimeBigInt, tracer);
170
171
  }
172
+ //#endregion smoo/lmao!n/trace-root-timestamps
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * Platform-specific implementations:
10
10
  * - TraceRoot.es.ts: Browser - uses performance.now() for timing
11
- * - TraceRoot.node.ts: Node.js - delegates to NAPI addon for optimized writes
11
+ * - TraceRoot.node.ts: Node.js - process.hrtime.bigint(), pure-JS writes to SpanBuffer state
12
12
  *
13
13
  * @module traceRoot
14
14
  */
@@ -24,6 +24,7 @@ export { createTraceId, extractSpanIdentity, generateTraceId, isValidTraceId, MA
24
24
  * Tracer lifecycle hooks interface.
25
25
  * Extracted to avoid circular dependency - Tracer implements this.
26
26
  */
27
+ //#region smoo/lmao!n/buffer-tuning-observability
27
28
  export interface TracerLifecycleHooks {
28
29
  onTraceStart(buffer: unknown): void;
29
30
  onTraceEnd(buffer: unknown): void;
@@ -47,6 +48,7 @@ export interface TracerLifecycleHooks {
47
48
  createOverflowBuffer(buffer: AnySpanBuffer): AnySpanBuffer;
48
49
  };
49
50
  }
51
+ //#endregion smoo/lmao!n/buffer-tuning-observability
50
52
 
51
53
  /**
52
54
  * TraceRoot._system memory layout (little-endian):
@@ -59,8 +61,9 @@ export interface TracerLifecycleHooks {
59
61
  *
60
62
  * Total: 17 + trace_id.length bytes
61
63
  *
62
- * This layout enables NAPI/WASM to read anchors directly without BigInt extraction.
64
+ * This layout enables the WASM path to read anchors directly without BigInt extraction.
63
65
  */
66
+ //#region smoo/lmao!n/trace-root-timestamps #contract
64
67
  export const TRACE_ROOT_ANCHOR_EPOCH_OFFSET = 0;
65
68
  export const TRACE_ROOT_ANCHOR_PERF_OFFSET = 8;
66
69
  export const TRACE_ROOT_TRACE_ID_LEN_OFFSET = 16;
@@ -71,7 +74,7 @@ export const TRACE_ROOT_TRACE_ID_OFFSET = 17;
71
74
  *
72
75
  * Each implementation handles timestamp calculation and span writes differently:
73
76
  * - Browser: Pure JS with performance.now()
74
- * - Node.js: NAPI addon with mach_absolute_time() / clock_gettime()
77
+ * - Node.js: process.hrtime.bigint() (pure JS; a NAPI addon was benchmarked slower than WASM and removed)
75
78
  */
76
79
  /**
77
80
  * Factory function type for creating platform-specific TraceRoot instances.
@@ -84,7 +87,7 @@ export type TraceRootFactory = (trace_id: string, tracer: TracerLifecycleHooks)
84
87
  export interface ITraceRoot {
85
88
  /**
86
89
  * Raw backing buffer containing anchor timestamps and trace_id.
87
- * NAPI/WASM can read this directly without BigInt extraction.
90
+ * The WASM path can read this directly without BigInt extraction.
88
91
  */
89
92
  readonly _system: ArrayBuffer;
90
93
 
@@ -107,7 +110,7 @@ export interface ITraceRoot {
107
110
  /**
108
111
  * High-resolution timer anchor when trace was created.
109
112
  * Browser: performance.now() value (number)
110
- * Node.js: stored as number for NAPI compatibility, but represents hrtime
113
+ * Node.js: stored as number in the shared layout (WASM-readable), but represents hrtime
111
114
  */
112
115
  readonly anchorPerfNow: number;
113
116
 
@@ -152,3 +155,4 @@ export interface ITraceRoot {
152
155
  */
153
156
  writeLogEntry(buffer: AnySpanBuffer, entryType: number): number;
154
157
  }
158
+ //#endregion smoo/lmao!n/trace-root-timestamps
package/src/lib/tracer.ts CHANGED
@@ -239,6 +239,7 @@ export type TraceFn<Ctx extends OpContext> = {
239
239
  // Tracer Class
240
240
  // =============================================================================
241
241
 
242
+ //#region smoo/lmao!n/tracer-architecture #contract
242
243
  /**
243
244
  * Tracer - Abstract base class for trace collection
244
245
  *
@@ -357,6 +358,7 @@ export abstract class Tracer<B extends OpContextBinding = OpContextBinding> {
357
358
  // trace() - Polymorphic dispatcher (like span())
358
359
  // ===========================================================================
359
360
 
361
+ //#region smoo/lmao!n/tracer-architecture.trace-overloads
360
362
  /**
361
363
  * Polymorphic trace dispatcher.
362
364
  *
@@ -547,6 +549,7 @@ export abstract class Tracer<B extends OpContextBinding = OpContextBinding> {
547
549
  }
548
550
  return this._trace_unknown_fn(line, name, overrides, fnOrOp);
549
551
  }
552
+ //#endregion smoo/lmao!n/tracer-architecture.trace-overloads
550
553
 
551
554
  // ===========================================================================
552
555
  // Monomorphic trace methods (for transformer optimization)
@@ -894,3 +897,4 @@ export abstract class Tracer<B extends OpContextBinding = OpContextBinding> {
894
897
  }
895
898
  }
896
899
  }
900
+ //#endregion smoo/lmao!n/tracer-architecture
@@ -1,3 +1,4 @@
1
+ //#region smoo/lmao!n/array-queue-tracer
1
2
  import type { OpContextBinding } from '../opContext/types.js';
2
3
  import { Tracer } from '../tracer.js';
3
4
  import type { SpanBuffer } from '../types.js';
@@ -74,3 +75,4 @@ export class ArrayQueueTracer<B extends OpContextBinding = OpContextBinding> ext
74
75
  return buffers;
75
76
  }
76
77
  }
78
+ //#endregion smoo/lmao!n/array-queue-tracer
@@ -20,6 +20,7 @@ export interface CompositeTracerOptions<B extends OpContextBinding = OpContextBi
20
20
  * Useful when you want multiple outputs from a single trace run,
21
21
  * for example Stdio + SQLite.
22
22
  */
23
+ //#region smoo/lmao!n/tracer-implementations.composite
23
24
  export class CompositeTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
24
25
  private readonly delegates: Tracer<B>[];
25
26
 
@@ -79,3 +80,4 @@ export class CompositeTracer<B extends OpContextBinding = OpContextBinding> exte
79
80
  }
80
81
  }
81
82
  }
83
+ //#endregion smoo/lmao!n/tracer-implementations.composite
@@ -35,6 +35,7 @@ import type { SpanBuffer } from '../types.js';
35
35
  *
36
36
  * @typeParam B - OpContextBinding type
37
37
  */
38
+ //#region smoo/lmao!n/tracer-implementations.noop
38
39
  export class NoOpTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
39
40
  /**
40
41
  * No-op hook for trace start.
@@ -71,3 +72,4 @@ export class NoOpTracer<B extends OpContextBinding = OpContextBinding> extends T
71
72
  // No-op
72
73
  }
73
74
  }
75
+ //#endregion smoo/lmao!n/tracer-implementations.noop
@@ -21,6 +21,7 @@ export interface SQLiteAsyncTracerOptions<
21
21
  /**
22
22
  * Tracer that persists completed root traces to SQLite synchronously.
23
23
  */
24
+ //#region smoo/lmao!n/tracer-implementations.sqlite
24
25
  export class SQLiteTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
25
26
  private readonly writer: SQLiteTraceWriter;
26
27
 
@@ -57,6 +58,7 @@ export class SQLiteTracer<B extends OpContextBinding = OpContextBinding> extends
57
58
  cleanupDebug('sqliteTracer.close:end');
58
59
  }
59
60
  }
61
+ //#endregion smoo/lmao!n/tracer-implementations.sqlite
60
62
 
61
63
  /**
62
64
  * Tracer that persists completed root traces to SQLite asynchronously.
@@ -204,6 +204,7 @@ export interface StdioTracerOptions<
204
204
  * - Human-readable timestamps and durations
205
205
  * - Exceptions go to stderr
206
206
  */
207
+ //#region smoo/lmao!n/tracer-implementations.stdio
207
208
  export class StdioTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
208
209
  /**
209
210
  * Per-trace indent levels for concurrent-safe nesting.
@@ -378,3 +379,4 @@ export class StdioTracer<B extends OpContextBinding = OpContextBinding> extends
378
379
  );
379
380
  }
380
381
  }
382
+ //#endregion smoo/lmao!n/tracer-implementations.stdio
@@ -81,6 +81,7 @@ export interface StatsSnapshot<T extends LogSchema = LogSchema> {
81
81
  * expect(tracer.statsSnapshots.length).toBeGreaterThan(0);
82
82
  * ```
83
83
  */
84
+ //#region smoo/lmao!n/tracer-implementations.test
84
85
  export class TestTracer<B extends OpContextBinding = OpContextBinding> extends Tracer<B> {
85
86
  /**
86
87
  * All completed root trace buffers.
@@ -144,3 +145,4 @@ export class TestTracer<B extends OpContextBinding = OpContextBinding> extends T
144
145
  }
145
146
  }
146
147
  }
148
+ //#endregion smoo/lmao!n/tracer-implementations.test
package/src/lib/types.ts CHANGED
@@ -74,6 +74,7 @@ export type { AnyColumnBuffer, ColumnBuffer, ColumnValueType, TypedArray };
74
74
  *
75
75
  * @see SpanBuffer<T> for schema-typed version with index signatures
76
76
  */
77
+ //#region smoo/lmao!n/spanbuffer-layout.interface
77
78
  export interface AnySpanBuffer extends AnyColumnBuffer {
78
79
  // ===========================================================================
79
80
  // System Memory (cache-aligned, per specs/lmao/01b1)
@@ -414,6 +415,7 @@ export interface AnySpanBuffer extends AnyColumnBuffer {
414
415
  */
415
416
  copyParentThreadIdTo(dest: Uint8Array, offset: number): void;
416
417
  }
418
+ //#endregion smoo/lmao!n/spanbuffer-layout.interface
417
419
 
418
420
  // ============================================================================
419
421
  // Schema Type Helpers
@@ -39,6 +39,7 @@ type Utf8CacheStats = { hits: number; misses: number; hitRate: number; size: num
39
39
  * The cache is safe to use in async contexts since JS awaits don't
40
40
  * allow concurrent access to the same cache instance.
41
41
  */
42
+ //#region smoo/lmao!n/buffer-perf-utf8-cache
42
43
  export class Utf8Cache implements Utf8Encoder {
43
44
  private readonly cache: SieveCache<string, Uint8Array>;
44
45
  private readonly encoder = new TextEncoder();
@@ -199,3 +200,4 @@ export const globalUtf8Cache = new Utf8Cache();
199
200
  export function createUtf8Cache(maxSize?: number): Utf8Cache {
200
201
  return new Utf8Cache(maxSize);
201
202
  }
203
+ //#endregion smoo/lmao!n/buffer-perf-utf8-cache
@@ -30,6 +30,9 @@ import {
30
30
  type WasmSpanBufferInstance,
31
31
  } from './wasmSpanBuffer.js';
32
32
 
33
+ // Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (OpContext integration + trace completion).
34
+ //#region smoo/lmao!n/wasm-mem.strategy
35
+
33
36
  function requireWasmSpanBuffer(buffer: AnySpanBuffer): WasmSpanBufferInstance {
34
37
  if (!isWasmSpanBufferInstance(buffer)) {
35
38
  throw new Error('Expected WASM-backed span buffer');
@@ -217,3 +220,4 @@ export class WasmBufferStrategy<T extends LogSchema = LogSchema> implements Buff
217
220
  };
218
221
  }
219
222
  }
223
+ //#endregion smoo/lmao!n/wasm-mem.strategy
@@ -6,7 +6,7 @@
6
6
  //
7
7
  // Memory Layout:
8
8
  // ┌─────────────────────────────────────────────────────────────────────────────┐
9
- // │ Header (64 bytes, cache-aligned)
9
+ // │ Header (192 bytes, 3 cache lines)
10
10
  // ├─────────────────────────────────────────────────────────────────────────────┤
11
11
  // │ Allocated Blocks (spans + columns) │
12
12
  // ├─────────────────────────────────────────────────────────────────────────────┤
@@ -22,7 +22,9 @@
22
22
  //
23
23
  // Freelist: Zero-overhead, uses block's memory for next pointer + cascading stats when free.
24
24
  //
25
+ // Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (the Zig allocator region).
25
26
 
27
+ //#region smoo/lmao!n/wasm-mem.allocator
26
28
  const std = @import("std");
27
29
 
28
30
  // =============================================================================
@@ -943,3 +945,4 @@ export fn read_col_is_valid(col_offset: u32, row_idx: u32) u8 {
943
945
  const bit: u8 = @as(u8, 1) << @intCast(row_idx & 7);
944
946
  return if ((byte & bit) != 0) 1 else 0;
945
947
  }
948
+ //#endregion smoo/lmao!n/wasm-mem.allocator
@@ -10,8 +10,12 @@
10
10
  * - Blocks are organized by tier (capacity 8, 16, 32, 64, 128, 256, 512)
11
11
  * - When freelist is empty, splits from larger tier
12
12
  * - When freeing, merges with adjacent blocks if both are free (address-based buddy merge)
13
+ *
14
+ * Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (TS allocator wrapper).
13
15
  */
14
16
 
17
+ //#region smoo/lmao!n/wasm-mem.ts-allocator
18
+
15
19
  // =============================================================================
16
20
  // Types
17
21
  // =============================================================================
@@ -467,3 +471,4 @@ export function createWasmAllocatorSync(wasmModule: WebAssembly.Module, options?
467
471
 
468
472
  return wrapWasmInstance(instance, memory, capacity);
469
473
  }
474
+ //#endregion smoo/lmao!n/wasm-mem.ts-allocator
@@ -20,6 +20,9 @@ import type { ITraceRoot } from '../traceRoot.js';
20
20
  import type { AnySpanBuffer } from '../types.js';
21
21
  import type { WasmAllocator } from './wasmAllocator.js';
22
22
 
23
+ // Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (SpanBuffer + SpanLogger codegen).
24
+ //#region smoo/lmao!n/wasm-mem.spanbuffer
25
+
23
26
  // =============================================================================
24
27
  // Types
25
28
  // =============================================================================
@@ -1012,3 +1015,4 @@ export function createWasmOverflowBuffer(
1012
1015
 
1013
1016
  return overflow;
1014
1017
  }
1018
+ //#endregion smoo/lmao!n/wasm-mem.spanbuffer
@@ -16,6 +16,9 @@ import type { ITraceRoot, TracerLifecycleHooks } from '../traceRoot.js';
16
16
  import type { AnySpanBuffer } from '../types.js';
17
17
  import type { WasmAllocator } from './wasmAllocator.js';
18
18
 
19
+ // Spec link (88): realizes specs/lmao/01q_wasm_memory_architecture.md#smoo/lmao!n/wasm-mem (span lifecycle writer).
20
+ //#region smoo/lmao!n/wasm-mem.trace-root
21
+
19
22
  // =============================================================================
20
23
  // WASM Buffer Detection
21
24
  // =============================================================================
@@ -313,3 +316,4 @@ export function createWasmTraceRootFactory(allocator: WasmAllocator) {
313
316
  return new WasmTraceRoot(allocator, createTraceId(trace_id), tracer);
314
317
  };
315
318
  }
319
+ //#endregion smoo/lmao!n/wasm-mem.trace-root
package/src/node.ts CHANGED
@@ -7,4 +7,6 @@
7
7
  export * from './index.js';
8
8
 
9
9
  // Export Node.js-specific TraceRoot factory for Tracer construction
10
+ //#region smoo/lmao!n/trace-root-timestamps.entry-points #node
10
11
  export { createTraceRoot } from './lib/traceRoot.node.js';
12
+ //#endregion smoo/lmao!n/trace-root-timestamps.entry-points