@almadar/ui 2.46.1 → 2.47.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.
@@ -271,6 +271,64 @@ var ThemeProvider = ({
271
271
  );
272
272
  return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: contextValue2, children });
273
273
  };
274
+
275
+ // lib/logger.ts
276
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
277
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
278
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
279
+ function getViteEnv(key) {
280
+ try {
281
+ const meta = import.meta;
282
+ return meta?.env?.[key];
283
+ } catch {
284
+ return void 0;
285
+ }
286
+ }
287
+ function envGet(key, viteKey) {
288
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
289
+ }
290
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
291
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
292
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
293
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
294
+ function matchesNamespace(namespace) {
295
+ if (DEBUG_FILTER.length === 0) return true;
296
+ return DEBUG_FILTER.some((pattern) => {
297
+ if (pattern === "*" || pattern === "almadar:*") return true;
298
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
299
+ return namespace === pattern;
300
+ });
301
+ }
302
+ function createLogger(namespace) {
303
+ const nsAllowed = matchesNamespace(namespace);
304
+ const log4 = (level, message, data, correlationId) => {
305
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
306
+ if (level === "DEBUG" && !nsAllowed) return;
307
+ const prefix = `[${namespace}]`;
308
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
309
+ switch (level) {
310
+ case "DEBUG":
311
+ console.debug(prefix, message, logData ?? "");
312
+ break;
313
+ case "INFO":
314
+ console.info(prefix, message, logData ?? "");
315
+ break;
316
+ case "WARN":
317
+ console.warn(prefix, message, logData ?? "");
318
+ break;
319
+ case "ERROR":
320
+ console.error(prefix, message, logData ?? "");
321
+ break;
322
+ }
323
+ };
324
+ return {
325
+ debug: (msg, data, cid) => log4("DEBUG", msg, data, cid),
326
+ info: (msg, data, cid) => log4("INFO", msg, data, cid),
327
+ warn: (msg, data, cid) => log4("WARN", msg, data, cid),
328
+ error: (msg, data, cid) => log4("ERROR", msg, data, cid)
329
+ };
330
+ }
331
+ var storeLog = createLogger("almadar:entity:store");
274
332
  var store = /* @__PURE__ */ new Map();
275
333
  var storeListeners = /* @__PURE__ */ new Set();
276
334
  var watchCallbacks = /* @__PURE__ */ new Map();
@@ -310,7 +368,9 @@ function setAll(entityType, records) {
310
368
  }
311
369
  }
312
370
  const prev = store.get(entityType);
313
- store.set(entityType, { entities, ids, version: (prev?.version ?? 0) + 1 });
371
+ const newVersion = (prev?.version ?? 0) + 1;
372
+ store.set(entityType, { entities, ids, version: newVersion });
373
+ storeLog.debug("setAll", { entityType, recordCount: records.length, version: newVersion });
314
374
  notifyListeners(entityType, prev);
315
375
  }
316
376
  function upsertOne(entityType, record) {
@@ -322,6 +382,7 @@ function upsertOne(entityType, record) {
322
382
  if (!snapshot.ids.includes(id)) snapshot.ids.push(id);
323
383
  snapshot.version++;
324
384
  store.set(entityType, snapshot);
385
+ storeLog.debug("upsertOne", { entityType, id, version: snapshot.version });
325
386
  notifyListeners(entityType, prev);
326
387
  }
327
388
  function addOne(entityType, record) {
@@ -338,6 +399,7 @@ function updateOne(entityType, id, changes) {
338
399
  snapshot.entities.set(id, { ...snapshot.entities.get(id), ...changes });
339
400
  snapshot.version++;
340
401
  store.set(entityType, snapshot);
402
+ storeLog.debug("updateOne", { entityType, id, changedFields: Object.keys(changes), version: snapshot.version });
341
403
  notifyListeners(entityType, prev);
342
404
  }
343
405
  function removeOne(entityType, id) {
@@ -351,6 +413,7 @@ function removeOne(entityType, id) {
351
413
  snapshot.entities.delete(id);
352
414
  snapshot.version++;
353
415
  store.set(entityType, snapshot);
416
+ storeLog.debug("removeOne", { entityType, id, remainingCount: snapshot.ids.length, version: snapshot.version });
354
417
  notifyListeners(entityType, prev);
355
418
  }
356
419
  function getSnapshot(entityType) {
@@ -433,6 +496,8 @@ function useEntityStore() {
433
496
  function EntityStoreProvider({ children }) {
434
497
  return /* @__PURE__ */ jsx(EntityStoreContext.Provider, { value: contextValue, children });
435
498
  }
499
+ var log = createLogger("almadar:eventbus");
500
+ var subLog = createLogger("almadar:eventbus:subscribe");
436
501
  function setGlobalEventBus(bus) {
437
502
  if (typeof window !== "undefined") {
438
503
  window.__kflowEventBus = bus;
@@ -454,6 +519,7 @@ var fallbackEventBus = {
454
519
  timestamp: Date.now()
455
520
  };
456
521
  const handlers = fallbackListeners.get(type);
522
+ log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
457
523
  if (handlers) {
458
524
  handlers.forEach((handler) => {
459
525
  try {
@@ -476,6 +542,7 @@ var fallbackEventBus = {
476
542
  fallbackListeners.set(type, /* @__PURE__ */ new Set());
477
543
  }
478
544
  fallbackListeners.get(type).add(listener);
545
+ subLog.debug("subscribe", { type, totalListeners: fallbackListeners.get(type).size });
479
546
  return () => {
480
547
  const handlers = fallbackListeners.get(type);
481
548
  if (handlers) {
@@ -499,6 +566,7 @@ var fallbackEventBus = {
499
566
  },
500
567
  onAny: (listener) => {
501
568
  fallbackAnyListeners.add(listener);
569
+ subLog.debug("subscribe:any", { totalAnyListeners: fallbackAnyListeners.size });
502
570
  return () => {
503
571
  fallbackAnyListeners.delete(listener);
504
572
  };
@@ -508,6 +576,8 @@ function useEventBus() {
508
576
  const context = useContext(EventBusContext);
509
577
  return context ?? getGlobalEventBus() ?? fallbackEventBus;
510
578
  }
579
+ var busLog = createLogger("almadar:eventbus");
580
+ var subLog2 = createLogger("almadar:eventbus:subscribe");
511
581
  var EventBusContext2 = createContext(null);
512
582
  function EventBusProvider({ children, debug: debug2 = false }) {
513
583
  const listenersRef = useRef(/* @__PURE__ */ new Map());
@@ -537,7 +607,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
537
607
  timestamp: Date.now()
538
608
  };
539
609
  const listeners6 = listenersRef.current.get(type);
540
- const listenerCount = listeners6?.size ?? 0;
610
+ const listenerCount = (listeners6?.size ?? 0) + anyListenersRef.current.size;
611
+ busLog.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount });
541
612
  if (debug2) {
542
613
  if (listenerCount > 0) {
543
614
  console.log(`[EventBus] Emit: ${type} \u2192 ${listenerCount} listener(s)`, payload);
@@ -570,6 +641,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
570
641
  }
571
642
  const listeners6 = listenersRef.current.get(type);
572
643
  listeners6.add(listener);
644
+ subLog2.debug("subscribe", { type, totalListeners: listeners6.size });
573
645
  if (debug2) {
574
646
  console.log(`[EventBus] Subscribed to '${type}', total: ${listeners6.size}`);
575
647
  }
@@ -596,6 +668,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
596
668
  }, []);
597
669
  const onAny = useCallback((listener) => {
598
670
  anyListenersRef.current.add(listener);
671
+ subLog2.debug("subscribe:any", { totalAnyListeners: anyListenersRef.current.size });
599
672
  if (debug2) {
600
673
  console.log(`[EventBus] onAny subscribed, total: ${anyListenersRef.current.size}`);
601
674
  }
@@ -3080,6 +3153,7 @@ var defaultIcon = L.icon({
3080
3153
  L.Marker.prototype.options.icon = defaultIcon;
3081
3154
 
3082
3155
  // lib/verificationRegistry.ts
3156
+ var log2 = createLogger("almadar:bridge");
3083
3157
  var MAX_TRANSITIONS = 500;
3084
3158
  function getState() {
3085
3159
  if (typeof window !== "undefined") {
@@ -3112,6 +3186,7 @@ function recordTransition(trace) {
3112
3186
  ...trace,
3113
3187
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
3114
3188
  };
3189
+ log2.info("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
3115
3190
  getState().transitions.push(entry);
3116
3191
  if (getState().transitions.length > MAX_TRANSITIONS) {
3117
3192
  getState().transitions.shift();
@@ -3213,10 +3288,12 @@ function waitForTransition(event, timeoutMs = 1e4) {
3213
3288
  }
3214
3289
  function bindEventBus(eventBus) {
3215
3290
  if (typeof window === "undefined") return;
3291
+ log2.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
3216
3292
  exposeOnWindow();
3217
3293
  if (window.__orbitalVerification) {
3218
3294
  window.__orbitalVerification.sendEvent = (event, payload) => {
3219
3295
  const prefixed = event.startsWith("UI:") ? event : `UI:${event}`;
3296
+ log2.debug("sendEvent", { event: prefixed, payloadKeys: payload ? Object.keys(payload) : [] });
3220
3297
  eventBus.emit(prefixed, payload);
3221
3298
  };
3222
3299
  const eventLog = [];
@@ -3677,6 +3754,7 @@ function SuspenseConfigProvider({
3677
3754
  );
3678
3755
  }
3679
3756
  SuspenseConfigProvider.displayName = "SuspenseConfigProvider";
3757
+ var log3 = createLogger("almadar:verify");
3680
3758
  var DISPATCH_SUFFIX = ":DISPATCH";
3681
3759
  var SUCCESS_SUFFIX = ":SUCCESS";
3682
3760
  var ERROR_SUFFIX = ":ERROR";
@@ -3722,6 +3800,7 @@ function VerificationProvider({
3722
3800
  const unsub = eventBus.onAny((evt) => {
3723
3801
  const parsed = parseLifecycleEvent(evt.type);
3724
3802
  if (!parsed) return;
3803
+ log3.debug("lifecycle:event", { kind: parsed.kind, traitName: parsed.traitName, event: parsed.event, type: evt.type });
3725
3804
  const payload = evt.payload ?? {};
3726
3805
  if (parsed.kind === "dispatch") {
3727
3806
  const key = `${parsed.traitName}:${String(payload["event"] ?? "")}`;
@@ -3774,6 +3853,7 @@ function VerificationProvider({
3774
3853
  },
3775
3854
  timestamp: Date.now()
3776
3855
  });
3856
+ log3.info("transition:success", { trait: parsed.traitName, event: parsed.event, from: pending?.from, to: newState, effectCount: effects.length });
3777
3857
  } else if (parsed.kind === "error" && parsed.event) {
3778
3858
  const key = `${parsed.traitName}:${parsed.event}`;
3779
3859
  const pending = pendingRef.current.get(key);
@@ -3803,6 +3883,7 @@ function VerificationProvider({
3803
3883
  },
3804
3884
  timestamp: Date.now()
3805
3885
  });
3886
+ log3.warn("transition:error", { trait: parsed.traitName, event: parsed.event, from: fromState, error: errorMsg });
3806
3887
  }
3807
3888
  });
3808
3889
  registerCheck(
@@ -41,6 +41,7 @@ var langToml = require('react-syntax-highlighter/dist/esm/languages/prism/toml')
41
41
  var langGo = require('react-syntax-highlighter/dist/esm/languages/prism/go');
42
42
  var langGraphql = require('react-syntax-highlighter/dist/esm/languages/prism/graphql');
43
43
 
44
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
44
45
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
45
46
 
46
47
  function _interopNamespace(e) {
@@ -90,6 +91,67 @@ var langGraphql__default = /*#__PURE__*/_interopDefault(langGraphql);
90
91
  var __defProp = Object.defineProperty;
91
92
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
92
93
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
94
+
95
+ // lib/logger.ts
96
+ var LEVEL_PRIORITY = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3 };
97
+ var ENV = typeof process !== "undefined" && process.env ? process.env : {};
98
+ var VITE_ENV = typeof globalThis !== "undefined" && globalThis.__vite_env__ ? globalThis.__vite_env__ : {};
99
+ function getViteEnv(key) {
100
+ try {
101
+ const meta = ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)) });
102
+ return meta?.env?.[key];
103
+ } catch {
104
+ return void 0;
105
+ }
106
+ }
107
+ function envGet(key, viteKey) {
108
+ return ENV[key] ?? (viteKey ? getViteEnv(viteKey) : void 0) ?? VITE_ENV[viteKey ?? key];
109
+ }
110
+ var NODE_ENV = envGet("NODE_ENV", "VITE_NODE_ENV") ?? "development";
111
+ var CONFIGURED_LEVEL = (envGet("LOG_LEVEL", "VITE_LOG_LEVEL") ?? (NODE_ENV === "production" ? "info" : "debug")).toUpperCase();
112
+ var MIN_PRIORITY = LEVEL_PRIORITY[CONFIGURED_LEVEL] ?? 0;
113
+ var DEBUG_FILTER = (envGet("ALMADAR_DEBUG", "VITE_ALMADAR_DEBUG") ?? "").split(",").map((s) => s.trim()).filter(Boolean);
114
+ function matchesNamespace(namespace) {
115
+ if (DEBUG_FILTER.length === 0) return true;
116
+ return DEBUG_FILTER.some((pattern) => {
117
+ if (pattern === "*" || pattern === "almadar:*") return true;
118
+ if (pattern.endsWith(":*")) return namespace.startsWith(pattern.slice(0, -1));
119
+ return namespace === pattern;
120
+ });
121
+ }
122
+ function createLogger(namespace) {
123
+ const nsAllowed = matchesNamespace(namespace);
124
+ const log4 = (level, message, data, correlationId) => {
125
+ if (LEVEL_PRIORITY[level] < MIN_PRIORITY) return;
126
+ if (level === "DEBUG" && !nsAllowed) return;
127
+ const prefix = `[${namespace}]`;
128
+ const logData = correlationId ? { ...data, cid: correlationId } : data;
129
+ switch (level) {
130
+ case "DEBUG":
131
+ console.debug(prefix, message, logData ?? "");
132
+ break;
133
+ case "INFO":
134
+ console.info(prefix, message, logData ?? "");
135
+ break;
136
+ case "WARN":
137
+ console.warn(prefix, message, logData ?? "");
138
+ break;
139
+ case "ERROR":
140
+ console.error(prefix, message, logData ?? "");
141
+ break;
142
+ }
143
+ };
144
+ return {
145
+ debug: (msg, data, cid) => log4("DEBUG", msg, data, cid),
146
+ info: (msg, data, cid) => log4("INFO", msg, data, cid),
147
+ warn: (msg, data, cid) => log4("WARN", msg, data, cid),
148
+ error: (msg, data, cid) => log4("ERROR", msg, data, cid)
149
+ };
150
+ }
151
+
152
+ // hooks/useEventBus.ts
153
+ var log = createLogger("almadar:eventbus");
154
+ var subLog = createLogger("almadar:eventbus:subscribe");
93
155
  function setGlobalEventBus(bus) {
94
156
  if (typeof window !== "undefined") {
95
157
  window.__kflowEventBus = bus;
@@ -111,6 +173,7 @@ var fallbackEventBus = {
111
173
  timestamp: Date.now()
112
174
  };
113
175
  const handlers = fallbackListeners.get(type);
176
+ log.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount: (handlers?.size ?? 0) + fallbackAnyListeners.size });
114
177
  if (handlers) {
115
178
  handlers.forEach((handler) => {
116
179
  try {
@@ -133,6 +196,7 @@ var fallbackEventBus = {
133
196
  fallbackListeners.set(type, /* @__PURE__ */ new Set());
134
197
  }
135
198
  fallbackListeners.get(type).add(listener);
199
+ subLog.debug("subscribe", { type, totalListeners: fallbackListeners.get(type).size });
136
200
  return () => {
137
201
  const handlers = fallbackListeners.get(type);
138
202
  if (handlers) {
@@ -156,6 +220,7 @@ var fallbackEventBus = {
156
220
  },
157
221
  onAny: (listener) => {
158
222
  fallbackAnyListeners.add(listener);
223
+ subLog.debug("subscribe:any", { totalAnyListeners: fallbackAnyListeners.size });
159
224
  return () => {
160
225
  fallbackAnyListeners.delete(listener);
161
226
  };
@@ -814,6 +879,7 @@ function subscribeToTraitChanges(listener) {
814
879
  }
815
880
 
816
881
  // lib/verificationRegistry.ts
882
+ var log2 = createLogger("almadar:bridge");
817
883
  var MAX_TRANSITIONS = 500;
818
884
  function getState() {
819
885
  if (typeof window !== "undefined") {
@@ -846,6 +912,7 @@ function recordTransition(trace) {
846
912
  ...trace,
847
913
  id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
848
914
  };
915
+ log2.info("transition:recorded", { trait: trace.traitName, from: trace.from, to: trace.to, event: trace.event, effectCount: trace.effects.length });
849
916
  getState().transitions.push(entry);
850
917
  if (getState().transitions.length > MAX_TRANSITIONS) {
851
918
  getState().transitions.shift();
@@ -977,10 +1044,12 @@ function waitForTransition(event, timeoutMs = 1e4) {
977
1044
  }
978
1045
  function bindEventBus(eventBus) {
979
1046
  if (typeof window === "undefined") return;
1047
+ log2.info("bindEventBus", { hasOnAny: !!eventBus.onAny });
980
1048
  exposeOnWindow();
981
1049
  if (window.__orbitalVerification) {
982
1050
  window.__orbitalVerification.sendEvent = (event, payload) => {
983
1051
  const prefixed = event.startsWith("UI:") ? event : `UI:${event}`;
1052
+ log2.debug("sendEvent", { event: prefixed, payloadKeys: payload ? Object.keys(payload) : [] });
984
1053
  eventBus.emit(prefixed, payload);
985
1054
  };
986
1055
  const eventLog = [];
@@ -2132,6 +2201,7 @@ function useTheme() {
2132
2201
  }
2133
2202
  return context;
2134
2203
  }
2204
+ var storeLog = createLogger("almadar:entity:store");
2135
2205
  var store = /* @__PURE__ */ new Map();
2136
2206
  var storeListeners = /* @__PURE__ */ new Set();
2137
2207
  var watchCallbacks = /* @__PURE__ */ new Map();
@@ -2171,7 +2241,9 @@ function setAll(entityType, records) {
2171
2241
  }
2172
2242
  }
2173
2243
  const prev = store.get(entityType);
2174
- store.set(entityType, { entities, ids, version: (prev?.version ?? 0) + 1 });
2244
+ const newVersion = (prev?.version ?? 0) + 1;
2245
+ store.set(entityType, { entities, ids, version: newVersion });
2246
+ storeLog.debug("setAll", { entityType, recordCount: records.length, version: newVersion });
2175
2247
  notifyListeners3(entityType, prev);
2176
2248
  }
2177
2249
  function upsertOne(entityType, record) {
@@ -2183,6 +2255,7 @@ function upsertOne(entityType, record) {
2183
2255
  if (!snapshot.ids.includes(id)) snapshot.ids.push(id);
2184
2256
  snapshot.version++;
2185
2257
  store.set(entityType, snapshot);
2258
+ storeLog.debug("upsertOne", { entityType, id, version: snapshot.version });
2186
2259
  notifyListeners3(entityType, prev);
2187
2260
  }
2188
2261
  function addOne(entityType, record) {
@@ -2199,6 +2272,7 @@ function updateOne(entityType, id, changes) {
2199
2272
  snapshot.entities.set(id, { ...snapshot.entities.get(id), ...changes });
2200
2273
  snapshot.version++;
2201
2274
  store.set(entityType, snapshot);
2275
+ storeLog.debug("updateOne", { entityType, id, changedFields: Object.keys(changes), version: snapshot.version });
2202
2276
  notifyListeners3(entityType, prev);
2203
2277
  }
2204
2278
  function removeOne(entityType, id) {
@@ -2212,6 +2286,7 @@ function removeOne(entityType, id) {
2212
2286
  snapshot.entities.delete(id);
2213
2287
  snapshot.version++;
2214
2288
  store.set(entityType, snapshot);
2289
+ storeLog.debug("removeOne", { entityType, id, remainingCount: snapshot.ids.length, version: snapshot.version });
2215
2290
  notifyListeners3(entityType, prev);
2216
2291
  }
2217
2292
  function getSnapshot3(entityType) {
@@ -2260,6 +2335,8 @@ function useEntityStore() {
2260
2335
  function EntityStoreProvider({ children }) {
2261
2336
  return /* @__PURE__ */ jsxRuntime.jsx(EntityStoreContext.Provider, { value: contextValue, children });
2262
2337
  }
2338
+ var busLog = createLogger("almadar:eventbus");
2339
+ var subLog2 = createLogger("almadar:eventbus:subscribe");
2263
2340
  var EventBusContext2 = React117.createContext(null);
2264
2341
  function EventBusProvider({ children, debug: debug2 = false }) {
2265
2342
  const listenersRef = React117.useRef(/* @__PURE__ */ new Map());
@@ -2289,7 +2366,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
2289
2366
  timestamp: Date.now()
2290
2367
  };
2291
2368
  const listeners6 = listenersRef.current.get(type);
2292
- const listenerCount = listeners6?.size ?? 0;
2369
+ const listenerCount = (listeners6?.size ?? 0) + anyListenersRef.current.size;
2370
+ busLog.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount });
2293
2371
  if (debug2) {
2294
2372
  if (listenerCount > 0) {
2295
2373
  console.log(`[EventBus] Emit: ${type} \u2192 ${listenerCount} listener(s)`, payload);
@@ -2322,6 +2400,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
2322
2400
  }
2323
2401
  const listeners6 = listenersRef.current.get(type);
2324
2402
  listeners6.add(listener);
2403
+ subLog2.debug("subscribe", { type, totalListeners: listeners6.size });
2325
2404
  if (debug2) {
2326
2405
  console.log(`[EventBus] Subscribed to '${type}', total: ${listeners6.size}`);
2327
2406
  }
@@ -2348,6 +2427,7 @@ function EventBusProvider({ children, debug: debug2 = false }) {
2348
2427
  }, []);
2349
2428
  const onAny = React117.useCallback((listener) => {
2350
2429
  anyListenersRef.current.add(listener);
2430
+ subLog2.debug("subscribe:any", { totalAnyListeners: anyListenersRef.current.size });
2351
2431
  if (debug2) {
2352
2432
  console.log(`[EventBus] onAny subscribed, total: ${anyListenersRef.current.size}`);
2353
2433
  }
@@ -28492,7 +28572,7 @@ function getAllEvents(traits2) {
28492
28572
  }
28493
28573
  function EventDispatcherTab({ traits: traits2, schema }) {
28494
28574
  const eventBus = useEventBus();
28495
- const [log, setLog] = React117__namespace.useState([]);
28575
+ const [log4, setLog] = React117__namespace.useState([]);
28496
28576
  const prevStatesRef = React117__namespace.useRef(/* @__PURE__ */ new Map());
28497
28577
  React117__namespace.useEffect(() => {
28498
28578
  for (const trait of traits2) {
@@ -28556,9 +28636,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
28556
28636
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: "Other Events (not available from current state)" }),
28557
28637
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
28558
28638
  ] }),
28559
- log.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
28639
+ log4.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
28560
28640
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: "Recent Transitions" }),
28561
- /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
28641
+ /* @__PURE__ */ jsxRuntime.jsx(Stack, { gap: "xs", children: log4.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
28562
28642
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-400", children: entry.traitName }),
28563
28643
  " ",
28564
28644
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -33097,6 +33177,7 @@ function UISlotRenderer({
33097
33177
  return wrapped;
33098
33178
  }
33099
33179
  UISlotRenderer.displayName = "UISlotRenderer";
33180
+ var log3 = createLogger("almadar:verify");
33100
33181
  var DISPATCH_SUFFIX = ":DISPATCH";
33101
33182
  var SUCCESS_SUFFIX = ":SUCCESS";
33102
33183
  var ERROR_SUFFIX = ":ERROR";
@@ -33142,6 +33223,7 @@ function VerificationProvider({
33142
33223
  const unsub = eventBus.onAny((evt) => {
33143
33224
  const parsed = parseLifecycleEvent(evt.type);
33144
33225
  if (!parsed) return;
33226
+ log3.debug("lifecycle:event", { kind: parsed.kind, traitName: parsed.traitName, event: parsed.event, type: evt.type });
33145
33227
  const payload = evt.payload ?? {};
33146
33228
  if (parsed.kind === "dispatch") {
33147
33229
  const key = `${parsed.traitName}:${String(payload["event"] ?? "")}`;
@@ -33194,6 +33276,7 @@ function VerificationProvider({
33194
33276
  },
33195
33277
  timestamp: Date.now()
33196
33278
  });
33279
+ log3.info("transition:success", { trait: parsed.traitName, event: parsed.event, from: pending?.from, to: newState, effectCount: effects.length });
33197
33280
  } else if (parsed.kind === "error" && parsed.event) {
33198
33281
  const key = `${parsed.traitName}:${parsed.event}`;
33199
33282
  const pending = pendingRef.current.get(key);
@@ -33223,6 +33306,7 @@ function VerificationProvider({
33223
33306
  },
33224
33307
  timestamp: Date.now()
33225
33308
  });
33309
+ log3.warn("transition:error", { trait: parsed.traitName, event: parsed.event, from: fromState, error: errorMsg });
33226
33310
  }
33227
33311
  });
33228
33312
  registerCheck(