@cadenza.io/service 2.17.79 → 2.18.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.
@@ -38,6 +38,8 @@ __export(index_exports, {
38
38
  EphemeralTask: () => import_core6.EphemeralTask,
39
39
  GraphMetadataController: () => GraphMetadataController,
40
40
  GraphRoutine: () => import_core6.GraphRoutine,
41
+ RUNTIME_VALIDATION_INTENTS: () => RUNTIME_VALIDATION_INTENTS,
42
+ RUNTIME_VALIDATION_SIGNALS: () => RUNTIME_VALIDATION_SIGNALS,
41
43
  RestController: () => RestController,
42
44
  ServiceRegistry: () => ServiceRegistry,
43
45
  SignalController: () => SignalController,
@@ -271,6 +273,13 @@ var DatabaseTask = class extends DeputyTask {
271
273
  const metadata = context.getMetadata();
272
274
  const dynamicQueryData = ctx.queryData ?? {};
273
275
  delete ctx.queryData;
276
+ const nextQueryData = {
277
+ ...this.queryData,
278
+ data: {
279
+ ...ctx.data
280
+ },
281
+ ...dynamicQueryData
282
+ };
274
283
  const deputyContext = {
275
284
  ...ctx,
276
285
  __localTaskName: this.name,
@@ -287,13 +296,13 @@ var DatabaseTask = class extends DeputyTask {
287
296
  __blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
288
297
  __deputyTaskName: this.name
289
298
  },
290
- queryData: {
291
- ...this.queryData,
292
- data: {
293
- ...ctx.data
294
- },
295
- ...dynamicQueryData
296
- }
299
+ data: nextQueryData.data ?? ctx.data,
300
+ batch: nextQueryData.batch ?? ctx.batch,
301
+ transaction: nextQueryData.transaction ?? ctx.transaction,
302
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
303
+ filter: nextQueryData.filter ?? ctx.filter,
304
+ fields: nextQueryData.fields ?? ctx.fields,
305
+ queryData: nextQueryData
297
306
  };
298
307
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
299
308
  }
@@ -726,6 +735,8 @@ function hasSignificantRuntimeStatusChange(previous, next) {
726
735
 
727
736
  // src/registry/ServiceRegistry.ts
728
737
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
738
+ var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
739
+ var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
729
740
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
730
741
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
731
742
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -813,18 +824,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
813
824
  }
814
825
  return result;
815
826
  }
816
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
817
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
818
- }
819
- function summarizeTransportDescriptors(transports) {
820
- return transports.map((transport) => ({
821
- uuid: transport.uuid,
822
- serviceInstanceId: transport.serviceInstanceId,
823
- role: transport.role,
824
- origin: transport.origin,
825
- protocols: transport.protocols
826
- }));
827
- }
828
827
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
829
828
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
830
829
  tableName,
@@ -841,6 +840,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
841
840
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
842
841
  const delegationContext = ensureDelegationContextMetadata({
843
842
  ...ctx,
843
+ data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
844
+ batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
845
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
846
+ transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
844
847
  queryData: nextQueryData
845
848
  });
846
849
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -964,6 +967,7 @@ var ServiceRegistry = class _ServiceRegistry {
964
967
  this.deputies = /* @__PURE__ */ new Map();
965
968
  this.remoteSignals = /* @__PURE__ */ new Map();
966
969
  this.remoteIntents = /* @__PURE__ */ new Map();
970
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
967
971
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
968
972
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
969
973
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1215,21 +1219,6 @@ var ServiceRegistry = class _ServiceRegistry {
1215
1219
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1216
1220
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1217
1221
  }
1218
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1219
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1220
- localServiceName: this.serviceName,
1221
- localServiceInstanceId: this.serviceInstanceId,
1222
- targetServiceName: serviceName,
1223
- targetServiceInstanceId: uuid7,
1224
- existingInstance: !!existing,
1225
- deleted,
1226
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1227
- hasDeputies: this.deputies.has(serviceName),
1228
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1229
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1230
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1231
- });
1232
- }
1233
1222
  if (!serviceInstance.isBootstrapPlaceholder) {
1234
1223
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid7, emit);
1235
1224
  }
@@ -1242,7 +1231,8 @@ var ServiceRegistry = class _ServiceRegistry {
1242
1231
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1243
1232
  const connected = this.ensureDependeeClientForInstance(
1244
1233
  trackedInstance,
1245
- emit
1234
+ emit,
1235
+ ctx
1246
1236
  );
1247
1237
  if (!connected) {
1248
1238
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1285,27 +1275,6 @@ var ServiceRegistry = class _ServiceRegistry {
1285
1275
  break;
1286
1276
  }
1287
1277
  }
1288
- if (shouldTraceIotDbRegistryPath(
1289
- this.serviceName,
1290
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1291
- )) {
1292
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1293
- localServiceName: this.serviceName,
1294
- localServiceInstanceId: this.serviceInstanceId,
1295
- transport: {
1296
- uuid: transport.uuid,
1297
- serviceInstanceId: transport.serviceInstanceId,
1298
- role: transport.role,
1299
- origin: transport.origin,
1300
- protocols: transport.protocols,
1301
- deleted: transport.deleted
1302
- },
1303
- ownerFound: !!ownerInstance,
1304
- ownerServiceName: ownerInstance?.serviceName,
1305
- ownerInstanceId: ownerInstance?.uuid,
1306
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1307
- });
1308
- }
1309
1278
  if (!ownerInstance) {
1310
1279
  return false;
1311
1280
  }
@@ -1331,7 +1300,7 @@ var ServiceRegistry = class _ServiceRegistry {
1331
1300
  if (!hasRemoteInterest) {
1332
1301
  return true;
1333
1302
  }
1334
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1303
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1335
1304
  return true;
1336
1305
  },
1337
1306
  "Handles service transport updates independently from instance rows."
@@ -1361,29 +1330,12 @@ var ServiceRegistry = class _ServiceRegistry {
1361
1330
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1362
1331
  ).doOn("meta.service_registry.dependee_registered");
1363
1332
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1364
- const getLocalTraceContext = () => ({
1365
- localServiceName: this.serviceName,
1366
- localServiceInstanceId: this.serviceInstanceId
1367
- });
1368
1333
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1369
1334
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1370
1335
  if (serviceInstances.length === 0) {
1371
1336
  return;
1372
1337
  }
1373
1338
  for (const serviceInstance of serviceInstances) {
1374
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1375
- if (shouldTraceIotDbRegistryPath(
1376
- localServiceName,
1377
- serviceInstance.serviceName
1378
- )) {
1379
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1380
- localServiceName,
1381
- localServiceInstanceId,
1382
- targetServiceName: serviceInstance.serviceName,
1383
- targetServiceInstanceId: serviceInstance.uuid,
1384
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1385
- });
1386
- }
1387
1339
  yield { serviceInstance };
1388
1340
  }
1389
1341
  }).doOn(
@@ -1429,6 +1381,15 @@ var ServiceRegistry = class _ServiceRegistry {
1429
1381
  },
1430
1382
  "Handles registration of remote signals"
1431
1383
  ).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
1384
+ this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
1385
+ "Reconcile gathered sync signal transmissions",
1386
+ (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
1387
+ "Keeps gathered sync transmitters aligned with known remote service instances."
1388
+ ).doOn(
1389
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
1390
+ META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
1391
+ "meta.service_registry.service_discovered"
1392
+ );
1432
1393
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1433
1394
  "Handle global intent registration",
1434
1395
  (ctx, emit) => {
@@ -1439,15 +1400,19 @@ var ServiceRegistry = class _ServiceRegistry {
1439
1400
  return 0;
1440
1401
  });
1441
1402
  for (const map of sorted) {
1442
- if (map.deleted) {
1443
- this.unregisterRemoteIntentDeputy(map);
1444
- continue;
1403
+ try {
1404
+ if (map.deleted) {
1405
+ this.unregisterRemoteIntentDeputy(map);
1406
+ continue;
1407
+ }
1408
+ CadenzaService.inquiryBroker.addIntent({
1409
+ name: map.intentName
1410
+ });
1411
+ this.registerRemoteIntentDeputy(map);
1412
+ this.ensureDependeeClientsForService(map.serviceName, emit);
1413
+ } catch (error) {
1414
+ throw error;
1445
1415
  }
1446
- CadenzaService.inquiryBroker.addIntent({
1447
- name: map.intentName
1448
- });
1449
- this.registerRemoteIntentDeputy(map);
1450
- this.ensureDependeeClientsForService(map.serviceName, emit);
1451
1416
  }
1452
1417
  return true;
1453
1418
  },
@@ -1599,7 +1564,7 @@ var ServiceRegistry = class _ServiceRegistry {
1599
1564
  {
1600
1565
  uuid: report.transportId,
1601
1566
  serviceInstanceId: report.serviceInstanceId,
1602
- role: this.getRoutingTransportRole(),
1567
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1603
1568
  origin: report.transportOrigin,
1604
1569
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1605
1570
  securityProfile: null,
@@ -1641,21 +1606,6 @@ var ServiceRegistry = class _ServiceRegistry {
1641
1606
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1642
1607
  inquiryResult
1643
1608
  );
1644
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1645
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1646
- uuid: instance.uuid,
1647
- isActive: instance.isActive,
1648
- isNonResponsive: instance.isNonResponsive,
1649
- isBlocked: instance.isBlocked,
1650
- transports: summarizeTransportDescriptors(instance.transports)
1651
- }));
1652
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1653
- localServiceName: this.serviceName,
1654
- localServiceInstanceId: this.serviceInstanceId,
1655
- totalServiceInstances: serviceInstances.length,
1656
- tracedInstances
1657
- });
1658
- }
1659
1609
  return {
1660
1610
  ...ctx,
1661
1611
  signalToTaskMaps,
@@ -1752,44 +1702,6 @@ var ServiceRegistry = class _ServiceRegistry {
1752
1702
  let retries = __retries ?? 0;
1753
1703
  let triedInstances = __triedInstances ?? [];
1754
1704
  const preferredRole = this.getRoutingTransportRole();
1755
- const allInstances = this.instances.get(__serviceName) ?? [];
1756
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1757
- this.serviceName,
1758
- __serviceName ?? void 0
1759
- ) ? allInstances.map((instance) => ({
1760
- uuid: instance.uuid,
1761
- isActive: instance.isActive,
1762
- isNonResponsive: instance.isNonResponsive,
1763
- isBlocked: instance.isBlocked,
1764
- isFrontend: instance.isFrontend,
1765
- transports: summarizeTransportDescriptors(instance.transports),
1766
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1767
- instance,
1768
- context,
1769
- preferredRole
1770
- ) ? {
1771
- uuid: this.selectTransportForInstance(
1772
- instance,
1773
- context,
1774
- preferredRole
1775
- ).uuid,
1776
- role: this.selectTransportForInstance(
1777
- instance,
1778
- context,
1779
- preferredRole
1780
- ).role,
1781
- origin: this.selectTransportForInstance(
1782
- instance,
1783
- context,
1784
- preferredRole
1785
- ).origin,
1786
- protocols: this.selectTransportForInstance(
1787
- instance,
1788
- context,
1789
- preferredRole
1790
- ).protocols
1791
- } : null
1792
- })) : void 0;
1793
1705
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1794
1706
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1795
1707
  return false;
@@ -1822,20 +1734,6 @@ var ServiceRegistry = class _ServiceRegistry {
1822
1734
  }
1823
1735
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1824
1736
  });
1825
- if (candidateDiagnostics) {
1826
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1827
- localServiceName: this.serviceName,
1828
- localServiceInstanceId: this.serviceInstanceId,
1829
- targetServiceName: __serviceName,
1830
- preferredRole,
1831
- useSocket: this.useSocket,
1832
- targetServiceInstanceId,
1833
- retries,
1834
- triedInstances,
1835
- candidateDiagnostics,
1836
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1837
- });
1838
- }
1839
1737
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1840
1738
  context.errored = true;
1841
1739
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2093,6 +1991,7 @@ var ServiceRegistry = class _ServiceRegistry {
2093
1991
  serviceName: report.serviceName,
2094
1992
  serviceInstanceId: report.serviceInstanceId,
2095
1993
  transportId: report.transportId,
1994
+ transportRole: report.transportRole,
2096
1995
  transportOrigin: report.transportOrigin,
2097
1996
  transportProtocols: report.transportProtocols,
2098
1997
  isFrontend: report.isFrontend,
@@ -2709,6 +2608,64 @@ var ServiceRegistry = class _ServiceRegistry {
2709
2608
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2710
2609
  );
2711
2610
  }
2611
+ shouldReconcileGatheredSyncTransmissions() {
2612
+ return this.serviceName === "CadenzaDB";
2613
+ }
2614
+ collectGatheredSyncTransmissionRecipients(ctx) {
2615
+ const recipients = /* @__PURE__ */ new Set();
2616
+ const addRecipient = (serviceName) => {
2617
+ const normalizedServiceName = String(serviceName ?? "").trim();
2618
+ if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
2619
+ return;
2620
+ }
2621
+ recipients.add(normalizedServiceName);
2622
+ };
2623
+ addRecipient(ctx.serviceName ?? ctx.__serviceName);
2624
+ for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
2625
+ addRecipient(instance.serviceName);
2626
+ }
2627
+ for (const [serviceName, instances] of this.instances.entries()) {
2628
+ if (!instances?.length) {
2629
+ continue;
2630
+ }
2631
+ addRecipient(serviceName);
2632
+ }
2633
+ return recipients;
2634
+ }
2635
+ reconcileGatheredSyncTransmissions(ctx, emit) {
2636
+ if (!this.shouldReconcileGatheredSyncTransmissions()) {
2637
+ return false;
2638
+ }
2639
+ const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
2640
+ const createdRecipients = [];
2641
+ for (const serviceName of desiredRecipients) {
2642
+ if (this.gatheredSyncTransmissionServices.has(serviceName)) {
2643
+ continue;
2644
+ }
2645
+ CadenzaService.createSignalTransmissionTask(
2646
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
2647
+ serviceName
2648
+ );
2649
+ this.gatheredSyncTransmissionServices.add(serviceName);
2650
+ createdRecipients.push(serviceName);
2651
+ }
2652
+ for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
2653
+ if (desiredRecipients.has(serviceName)) {
2654
+ continue;
2655
+ }
2656
+ CadenzaService.get(
2657
+ `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
2658
+ )?.destroy();
2659
+ this.gatheredSyncTransmissionServices.delete(serviceName);
2660
+ }
2661
+ if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
2662
+ emit("meta.cadenza_db.sync_tick", {
2663
+ __syncing: true,
2664
+ __reason: "gathered_sync_transmissions_reconciled"
2665
+ });
2666
+ }
2667
+ return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
2668
+ }
2712
2669
  registerRemoteIntentDeputy(map) {
2713
2670
  if (!this.serviceName || map.serviceName === this.serviceName) {
2714
2671
  return;
@@ -2951,38 +2908,18 @@ var ServiceRegistry = class _ServiceRegistry {
2951
2908
  }
2952
2909
  return communicationTypes;
2953
2910
  }
2954
- ensureDependeeClientForInstance(instance, emit) {
2911
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2955
2912
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2956
2913
  return false;
2957
2914
  }
2958
2915
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2959
2916
  return false;
2960
2917
  }
2961
- const transport = this.getRouteableTransport(
2918
+ const transport = this.selectTransportForInstance(
2962
2919
  instance,
2963
- this.useSocket ? "socket" : "rest"
2964
- );
2965
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2966
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2967
- localServiceName: this.serviceName,
2968
- localServiceInstanceId: this.serviceInstanceId,
2969
- targetServiceName: instance.serviceName,
2970
- targetServiceInstanceId: instance.uuid,
2971
- useSocket: this.useSocket,
2972
- routeableRole: this.getRoutingTransportRole(),
2973
- hasDeputies: this.deputies.has(instance.serviceName),
2974
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2975
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2976
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2977
- transports: summarizeTransportDescriptors(instance.transports),
2978
- selectedTransport: transport ? {
2979
- uuid: transport.uuid,
2980
- role: transport.role,
2981
- origin: transport.origin,
2982
- protocols: transport.protocols
2983
- } : null
2984
- });
2985
- }
2920
+ ctx ?? {},
2921
+ this.getRoutingTransportRole()
2922
+ );
2986
2923
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
2987
2924
  return false;
2988
2925
  }
@@ -2999,9 +2936,9 @@ var ServiceRegistry = class _ServiceRegistry {
2999
2936
  this.markTransportClientCreated(instance, transport.uuid);
3000
2937
  return true;
3001
2938
  }
3002
- ensureDependeeClientsForService(serviceName, emit) {
2939
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
3003
2940
  for (const instance of this.instances.get(serviceName) ?? []) {
3004
- this.ensureDependeeClientForInstance(instance, emit);
2941
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
3005
2942
  }
3006
2943
  }
3007
2944
  hasTransportClientCreated(instance, transportId) {
@@ -3060,6 +2997,10 @@ var ServiceRegistry = class _ServiceRegistry {
3060
2997
  if (!instances?.length) {
3061
2998
  return;
3062
2999
  }
3000
+ const resolvedInstance = instances.find(
3001
+ (instance) => instance.uuid === resolvedInstanceId
3002
+ );
3003
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3063
3004
  const placeholders = instances.filter(
3064
3005
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3065
3006
  );
@@ -3071,7 +3012,33 @@ var ServiceRegistry = class _ServiceRegistry {
3071
3012
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3072
3013
  placeholder.uuid
3073
3014
  );
3015
+ const preservedTransportIds = /* @__PURE__ */ new Set();
3016
+ if (resolvedInstance && frontendRoutingRole) {
3017
+ const resolvedHasFrontendRoute = resolvedInstance.transports.some(
3018
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
3019
+ );
3020
+ if (!resolvedHasFrontendRoute) {
3021
+ const transportsToPreserve = placeholder.transports.filter(
3022
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
3023
+ );
3024
+ for (const transport of transportsToPreserve) {
3025
+ if (resolvedInstance.transports.some(
3026
+ (existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
3027
+ )) {
3028
+ continue;
3029
+ }
3030
+ resolvedInstance.transports.push({
3031
+ ...transport,
3032
+ serviceInstanceId: resolvedInstanceId
3033
+ });
3034
+ preservedTransportIds.add(transport.uuid);
3035
+ }
3036
+ }
3037
+ }
3074
3038
  for (const transport of placeholder.transports) {
3039
+ if (preservedTransportIds.has(transport.uuid)) {
3040
+ continue;
3041
+ }
3075
3042
  const transportKey = buildTransportClientKey(transport);
3076
3043
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3077
3044
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3192,6 +3159,7 @@ var ServiceRegistry = class _ServiceRegistry {
3192
3159
  return null;
3193
3160
  }
3194
3161
  const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
3162
+ const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
3195
3163
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3196
3164
  const transportProtocols = Array.isArray(
3197
3165
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3217,6 +3185,7 @@ var ServiceRegistry = class _ServiceRegistry {
3217
3185
  serviceName,
3218
3186
  serviceInstanceId,
3219
3187
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3188
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3220
3189
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3221
3190
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3222
3191
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3239,13 +3208,16 @@ var ServiceRegistry = class _ServiceRegistry {
3239
3208
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3240
3209
  const existingTransport = this.getTransportById(instance, report.transportId);
3241
3210
  if (existingTransport) {
3211
+ if (report.transportRole) {
3212
+ existingTransport.role = report.transportRole;
3213
+ }
3242
3214
  existingTransport.origin = report.transportOrigin;
3243
3215
  existingTransport.protocols = protocols;
3244
3216
  } else {
3245
3217
  instance.transports.push({
3246
3218
  uuid: report.transportId,
3247
3219
  serviceInstanceId: report.serviceInstanceId,
3248
- role: this.getRoutingTransportRole(),
3220
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3249
3221
  origin: report.transportOrigin,
3250
3222
  protocols,
3251
3223
  securityProfile: null,
@@ -3291,24 +3263,18 @@ var ServiceRegistry = class _ServiceRegistry {
3291
3263
  localInstance.isBlocked
3292
3264
  );
3293
3265
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3266
+ const transport = this.getRouteableTransport(
3267
+ localInstance,
3268
+ this.useSocket ? "socket" : "rest",
3269
+ "internal"
3270
+ );
3294
3271
  const report = {
3295
3272
  serviceName: this.serviceName,
3296
3273
  serviceInstanceId: this.serviceInstanceId,
3297
- transportId: this.getRouteableTransport(
3298
- localInstance,
3299
- this.useSocket ? "socket" : "rest",
3300
- "internal"
3301
- )?.uuid ?? void 0,
3302
- transportOrigin: this.getRouteableTransport(
3303
- localInstance,
3304
- this.useSocket ? "socket" : "rest",
3305
- "internal"
3306
- )?.origin ?? void 0,
3307
- transportProtocols: this.getRouteableTransport(
3308
- localInstance,
3309
- this.useSocket ? "socket" : "rest",
3310
- "internal"
3311
- )?.protocols ?? void 0,
3274
+ transportId: transport?.uuid ?? void 0,
3275
+ transportRole: transport?.role ?? void 0,
3276
+ transportOrigin: transport?.origin ?? void 0,
3277
+ transportProtocols: transport?.protocols ?? void 0,
3312
3278
  isFrontend: localInstance.isFrontend,
3313
3279
  reportedAt,
3314
3280
  state: snapshot.state,
@@ -3672,6 +3638,7 @@ var ServiceRegistry = class _ServiceRegistry {
3672
3638
  this.deputies.clear();
3673
3639
  this.remoteSignals.clear();
3674
3640
  this.remoteIntents.clear();
3641
+ this.gatheredSyncTransmissionServices.clear();
3675
3642
  this.remoteIntentDeputiesByKey.clear();
3676
3643
  this.remoteIntentDeputiesByTask.clear();
3677
3644
  this.dependeesByService.clear();
@@ -4923,10 +4890,14 @@ var SocketController = class _SocketController {
4923
4890
  const communicationTypes = this.normalizeCommunicationTypes(
4924
4891
  input.communicationTypes
4925
4892
  );
4893
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
4926
4894
  const serviceName = String(input.serviceName ?? "");
4927
4895
  const serviceTransportId = String(input.serviceTransportId ?? "");
4928
4896
  const serviceOrigin = String(input.serviceOrigin ?? "");
4929
4897
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
4898
+ if (!transportProtocols.includes("socket")) {
4899
+ return false;
4900
+ }
4930
4901
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
4931
4902
  CadenzaService.log(
4932
4903
  "Socket client setup skipped due to missing transport origin",
@@ -4952,7 +4923,7 @@ var SocketController = class _SocketController {
4952
4923
  serviceName,
4953
4924
  serviceTransportId,
4954
4925
  serviceOrigin,
4955
- transportProtocols: input.transportProtocols,
4926
+ transportProtocols,
4956
4927
  url
4957
4928
  });
4958
4929
  };
@@ -4973,7 +4944,7 @@ var SocketController = class _SocketController {
4973
4944
  serviceName,
4974
4945
  serviceTransportId,
4975
4946
  serviceOrigin,
4976
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
4947
+ transportProtocols,
4977
4948
  url,
4978
4949
  destroyed: false,
4979
4950
  updatedAt: Date.now()
@@ -5552,7 +5523,7 @@ var SocketController = class _SocketController {
5552
5523
  communicationTypes,
5553
5524
  serviceTransportId,
5554
5525
  serviceOrigin,
5555
- transportProtocols: input.transportProtocols,
5526
+ transportProtocols,
5556
5527
  handshakeData: {
5557
5528
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5558
5529
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -5912,6 +5883,209 @@ var SignalController = class _SignalController {
5912
5883
  }
5913
5884
  };
5914
5885
 
5886
+ // src/runtime/RuntimeValidationController.ts
5887
+ var RUNTIME_VALIDATION_INTENTS = {
5888
+ getPolicy: "meta-runtime-validation-policy-get",
5889
+ setPolicy: "meta-runtime-validation-policy-set",
5890
+ replacePolicy: "meta-runtime-validation-policy-replace",
5891
+ clearPolicy: "meta-runtime-validation-policy-clear",
5892
+ listScopes: "meta-runtime-validation-scope-list",
5893
+ upsertScope: "meta-runtime-validation-scope-upsert",
5894
+ removeScope: "meta-runtime-validation-scope-remove",
5895
+ clearScopes: "meta-runtime-validation-scope-clear"
5896
+ };
5897
+ var RUNTIME_VALIDATION_SIGNALS = {
5898
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
5899
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
5900
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
5901
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
5902
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
5903
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
5904
+ policyUpdated: "meta.runtime_validation.policy_updated",
5905
+ policyCleared: "meta.runtime_validation.policy_cleared",
5906
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
5907
+ scopeRemoved: "meta.runtime_validation.scope_removed",
5908
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
5909
+ };
5910
+ function normalizePolicyContext(ctx) {
5911
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
5912
+ const policy = {};
5913
+ for (const key of [
5914
+ "metaInput",
5915
+ "metaOutput",
5916
+ "businessInput",
5917
+ "businessOutput",
5918
+ "warnOnMissingMetaInputSchema",
5919
+ "warnOnMissingMetaOutputSchema",
5920
+ "warnOnMissingBusinessInputSchema",
5921
+ "warnOnMissingBusinessOutputSchema"
5922
+ ]) {
5923
+ if (source[key] !== void 0) {
5924
+ policy[key] = source[key];
5925
+ }
5926
+ }
5927
+ return policy;
5928
+ }
5929
+ function normalizeScopeContext(ctx) {
5930
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
5931
+ return {
5932
+ id: source.id,
5933
+ active: source.active,
5934
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
5935
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
5936
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
5937
+ };
5938
+ }
5939
+ var RuntimeValidationController = class _RuntimeValidationController {
5940
+ static get instance() {
5941
+ if (!this._instance) {
5942
+ this._instance = new _RuntimeValidationController();
5943
+ }
5944
+ return this._instance;
5945
+ }
5946
+ constructor() {
5947
+ CadenzaService.defineIntent({
5948
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
5949
+ description: "Get the active runtime validation policy.",
5950
+ input: { type: "object" },
5951
+ output: { type: "object" }
5952
+ });
5953
+ CadenzaService.defineIntent({
5954
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
5955
+ description: "Merge fields into the active runtime validation policy.",
5956
+ input: { type: "object" },
5957
+ output: { type: "object" }
5958
+ });
5959
+ CadenzaService.defineIntent({
5960
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
5961
+ description: "Replace the active runtime validation policy.",
5962
+ input: { type: "object" },
5963
+ output: { type: "object" }
5964
+ });
5965
+ CadenzaService.defineIntent({
5966
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
5967
+ description: "Clear the active runtime validation policy.",
5968
+ input: { type: "object" },
5969
+ output: { type: "object" }
5970
+ });
5971
+ CadenzaService.defineIntent({
5972
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
5973
+ description: "List active runtime validation scopes.",
5974
+ input: { type: "object" },
5975
+ output: { type: "object" }
5976
+ });
5977
+ CadenzaService.defineIntent({
5978
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
5979
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
5980
+ input: { type: "object" },
5981
+ output: { type: "object" }
5982
+ });
5983
+ CadenzaService.defineIntent({
5984
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
5985
+ description: "Remove a runtime validation scope by id.",
5986
+ input: { type: "object" },
5987
+ output: { type: "object" }
5988
+ });
5989
+ CadenzaService.defineIntent({
5990
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
5991
+ description: "Clear all runtime validation scopes.",
5992
+ input: { type: "object" },
5993
+ output: { type: "object" }
5994
+ });
5995
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
5996
+ return {
5997
+ policy: CadenzaService.getRuntimeValidationPolicy()
5998
+ };
5999
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
6000
+ CadenzaService.createMetaTask(
6001
+ "Set runtime validation policy",
6002
+ (ctx, emit) => {
6003
+ const policy = normalizePolicyContext(ctx);
6004
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
6005
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6006
+ policy: nextPolicy
6007
+ });
6008
+ return {
6009
+ policy: nextPolicy
6010
+ };
6011
+ },
6012
+ "Merges runtime validation policy fields at runtime."
6013
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
6014
+ CadenzaService.createMetaTask(
6015
+ "Replace runtime validation policy",
6016
+ (ctx, emit) => {
6017
+ const policy = normalizePolicyContext(ctx);
6018
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
6019
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6020
+ policy: nextPolicy
6021
+ });
6022
+ return {
6023
+ policy: nextPolicy
6024
+ };
6025
+ },
6026
+ "Replaces runtime validation policy fields at runtime."
6027
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
6028
+ CadenzaService.createMetaTask(
6029
+ "Clear runtime validation policy",
6030
+ (_ctx, emit) => {
6031
+ CadenzaService.clearRuntimeValidationPolicy();
6032
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
6033
+ return {
6034
+ policy: CadenzaService.getRuntimeValidationPolicy()
6035
+ };
6036
+ },
6037
+ "Clears the runtime validation policy."
6038
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
6039
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
6040
+ return {
6041
+ scopes: CadenzaService.getRuntimeValidationScopes()
6042
+ };
6043
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
6044
+ CadenzaService.createMetaTask(
6045
+ "Upsert runtime validation scope",
6046
+ (ctx, emit) => {
6047
+ const scope = normalizeScopeContext(ctx);
6048
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
6049
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
6050
+ scope: nextScope
6051
+ });
6052
+ return {
6053
+ scope: nextScope
6054
+ };
6055
+ },
6056
+ "Upserts a runtime validation scope for targeted debugging."
6057
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6058
+ CadenzaService.createMetaTask(
6059
+ "Remove runtime validation scope",
6060
+ (ctx, emit) => {
6061
+ if (!ctx.id) {
6062
+ throw new Error("Runtime validation scope id is required");
6063
+ }
6064
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6065
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6066
+ id: ctx.id
6067
+ });
6068
+ return {
6069
+ id: ctx.id,
6070
+ scopes: CadenzaService.getRuntimeValidationScopes()
6071
+ };
6072
+ },
6073
+ "Removes a runtime validation scope."
6074
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6075
+ CadenzaService.createMetaTask(
6076
+ "Clear runtime validation scopes",
6077
+ (_ctx, emit) => {
6078
+ CadenzaService.clearRuntimeValidationScopes();
6079
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6080
+ return {
6081
+ scopes: CadenzaService.getRuntimeValidationScopes()
6082
+ };
6083
+ },
6084
+ "Clears all runtime validation scopes."
6085
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6086
+ }
6087
+ };
6088
+
5915
6089
  // src/graph/controllers/registerActorSessionPersistence.ts
5916
6090
  var import_core3 = require("@cadenza.io/core");
5917
6091
  function registerActorSessionPersistenceTasks() {
@@ -6526,7 +6700,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
6526
6700
  }
6527
6701
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
6528
6702
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
6529
- const debugTable = shouldDebugSyncTable(tableName);
6530
6703
  if (!localInsertTask && !isCadenzaDBReady) {
6531
6704
  return void 0;
6532
6705
  }
@@ -6539,16 +6712,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6539
6712
  register: false,
6540
6713
  isHidden: true
6541
6714
  });
6542
- if (debugTable) {
6543
- logSyncDebug("insert_task_resolved", {
6544
- tableName,
6545
- localInsertTaskName: localInsertTask?.name ?? null,
6546
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
6547
- targetTaskName: targetTask.name,
6548
- queryData,
6549
- options
6550
- });
6551
- }
6552
6715
  const prepareExecutionTask = CadenzaService.createMetaTask(
6553
6716
  `Prepare graph sync insert for ${tableName}`,
6554
6717
  (ctx) => {
@@ -6559,12 +6722,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6559
6722
  if ((tableName === "signal_registry" || tableName === "directional_task_graph_map") && originalQueryData.data && typeof originalQueryData.data === "object" && !Array.isArray(originalQueryData.data) && Object.keys(originalQueryData.data).length === 0) {
6560
6723
  console.warn(
6561
6724
  "[CADENZA_SYNC_EMPTY_INSERT]",
6562
- summarizeSyncDebugValue({
6725
+ {
6563
6726
  tableName,
6564
6727
  queryData: originalQueryData,
6565
6728
  ctx,
6566
6729
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
6567
- })
6730
+ }
6568
6731
  );
6569
6732
  }
6570
6733
  return buildSyncExecutionEnvelope(
@@ -6578,37 +6741,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6578
6741
  isHidden: true
6579
6742
  }
6580
6743
  );
6581
- if (debugTable) {
6582
- prepareExecutionTask.then(
6583
- CadenzaService.createMetaTask(
6584
- `Log prepared graph sync insert execution for ${tableName}`,
6585
- (ctx) => {
6586
- if (tableName === "task") {
6587
- if (!shouldDebugTaskSyncPayload(ctx)) {
6588
- return ctx;
6589
- }
6590
- logSyncDebug("insert_prepare", {
6591
- tableName,
6592
- targetTaskName: targetTask.name,
6593
- payload: buildTaskSyncDebugPayload(ctx)
6594
- });
6595
- return ctx;
6596
- }
6597
- logSyncDebug("insert_prepare", {
6598
- tableName,
6599
- targetTaskName: targetTask.name,
6600
- ctx
6601
- });
6602
- return ctx;
6603
- },
6604
- `Logs prepared ${tableName} sync insert payloads.`,
6605
- {
6606
- register: false,
6607
- isHidden: true
6608
- }
6609
- )
6610
- );
6611
- }
6612
6744
  const finalizeExecutionTask = CadenzaService.createMetaTask(
6613
6745
  `Finalize graph sync insert for ${tableName}`,
6614
6746
  (ctx) => {
@@ -6619,25 +6751,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6619
6751
  ...ctx,
6620
6752
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
6621
6753
  };
6622
- if (debugTable) {
6623
- if (tableName === "task") {
6624
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
6625
- logSyncDebug("insert_finalize", {
6626
- tableName,
6627
- targetTaskName: targetTask.name,
6628
- success: didSyncInsertSucceed(normalizedContext),
6629
- payload: buildTaskSyncDebugPayload(normalizedContext)
6630
- });
6631
- }
6632
- } else {
6633
- logSyncDebug("insert_finalize", {
6634
- tableName,
6635
- targetTaskName: targetTask.name,
6636
- success: didSyncInsertSucceed(normalizedContext),
6637
- ctx: normalizedContext
6638
- });
6639
- }
6640
- }
6641
6754
  return normalizedContext;
6642
6755
  },
6643
6756
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -6672,139 +6785,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
6672
6785
  intent_registry: "intentRegistrys"
6673
6786
  };
6674
6787
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
6675
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
6676
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
6677
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
6678
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
6679
- "Query service_instance",
6680
- "Query service_instance_transport",
6681
- "Query intent_to_task_map",
6682
- "Query signal_to_task_map",
6683
- "Prepare for signal sync",
6684
- "Compile sync data and broadcast",
6685
- "Forward service instance sync",
6686
- "Forward service transport sync",
6687
- "Forward intent to task map sync",
6688
- "Forward signal to task map sync",
6689
- "Normalize telemetry ingest payload",
6690
- "Get telemetry session state",
6691
- "Normalize anomaly detect input",
6692
- "Read anomaly runtime session",
6693
- "Normalize prediction compute input",
6694
- "Normalize telemetry insert queryData"
6695
- ]);
6696
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
6697
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
6698
- "meta-service-registry-full-sync",
6699
- "runner-traffic-runtime-get",
6700
- "iot-telemetry-ingest",
6701
- "iot-telemetry-session-get",
6702
- "iot-anomaly-detect",
6703
- "iot-anomaly-runtime-get",
6704
- "iot-prediction-compute",
6705
- "iot-db-telemetry-insert",
6706
- "query-pg-cadenza-db-postgres-actor-service_instance",
6707
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
6708
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
6709
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
6710
- ]);
6711
- function shouldDebugSyncTable(tableName) {
6712
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
6713
- }
6714
- function shouldDebugSyncTaskName(taskName) {
6715
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
6716
- }
6717
- function shouldDebugSyncRoutineName(routineName) {
6718
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
6719
- }
6720
- function shouldDebugSyncIntentName(intentName) {
6721
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
6722
- }
6723
- function summarizeSyncDebugValue(value, depth = 0) {
6724
- if (value === null || value === void 0) {
6725
- return value;
6726
- }
6727
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
6728
- return value;
6729
- }
6730
- if (value instanceof Set) {
6731
- return {
6732
- __type: "Set",
6733
- size: value.size,
6734
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
6735
- };
6736
- }
6737
- if (value instanceof Map) {
6738
- return {
6739
- __type: "Map",
6740
- size: value.size
6741
- };
6742
- }
6743
- if (Array.isArray(value)) {
6744
- return {
6745
- __type: "Array",
6746
- length: value.length,
6747
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
6748
- };
6749
- }
6750
- if (typeof value === "object") {
6751
- if (depth >= 2) {
6752
- return "[object]";
6753
- }
6754
- const output = {};
6755
- const entries = Object.entries(value).filter(
6756
- ([key]) => ![
6757
- "functionString",
6758
- "tagIdGetter",
6759
- "__functionString",
6760
- "__getTagCallback",
6761
- "joinedContexts",
6762
- "task",
6763
- "taskInstance",
6764
- "tasks"
6765
- ].includes(key)
6766
- ).slice(0, 12);
6767
- for (const [key, nestedValue] of entries) {
6768
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
6769
- }
6770
- return output;
6771
- }
6772
- return String(value);
6773
- }
6774
- function logSyncDebug(event, payload) {
6775
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
6776
- }
6777
- function buildTaskSyncDebugPayload(ctx) {
6778
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
6779
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
6780
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
6781
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
6782
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
6783
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
6784
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
6785
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
6786
- return {
6787
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
6788
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
6789
- functionStringLength: functionString?.length ?? null,
6790
- tagIdGetterLength: tagIdGetter?.length ?? null,
6791
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
6792
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
6793
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
6794
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
6795
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
6796
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
6797
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
6798
- rowCount: ctx.rowCount ?? null,
6799
- errored: ctx.errored ?? false,
6800
- success: ctx.__success ?? null,
6801
- error: ctx.__error ?? null
6802
- };
6803
- }
6804
- function shouldDebugTaskSyncPayload(ctx) {
6805
- const payload = buildTaskSyncDebugPayload(ctx);
6806
- return shouldDebugSyncTaskName(payload.taskName);
6807
- }
6808
6788
  function resolveSyncQueryRows(ctx, tableName) {
6809
6789
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
6810
6790
  const rows = ctx?.[resultKey];
@@ -7251,16 +7231,6 @@ var GraphSyncController = class _GraphSyncController {
7251
7231
  if (!nextTask?.registered) {
7252
7232
  continue;
7253
7233
  }
7254
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
7255
- logSyncDebug("task_to_routine_split", {
7256
- routineName: routine.name,
7257
- routineVersion: routine.version,
7258
- taskName: nextTask.name,
7259
- taskVersion: nextTask.version,
7260
- serviceName: serviceName2,
7261
- registered: nextTask.registered
7262
- });
7263
- }
7264
7234
  yield {
7265
7235
  __syncing: ctx.__syncing,
7266
7236
  data: {
@@ -7406,20 +7376,6 @@ var GraphSyncController = class _GraphSyncController {
7406
7376
  if (task.registered) continue;
7407
7377
  const { __functionString, __getTagCallback } = task.export();
7408
7378
  this.tasksSynced = false;
7409
- if (shouldDebugSyncTaskName(task.name)) {
7410
- logSyncDebug("task_registration_split", {
7411
- taskName: task.name,
7412
- taskVersion: task.version,
7413
- serviceName: serviceName2,
7414
- register: task.register,
7415
- registered: task.registered,
7416
- hidden: task.hidden,
7417
- exportFunctionLength: __functionString?.length ?? null,
7418
- exportTagGetterLength: __getTagCallback?.length ?? null,
7419
- observedSignals: Array.from(task.observedSignals),
7420
- handledIntents: Array.from(task.handlesIntents)
7421
- });
7422
- }
7423
7379
  yield {
7424
7380
  __syncing: ctx.__syncing,
7425
7381
  data: {
@@ -7474,13 +7430,6 @@ var GraphSyncController = class _GraphSyncController {
7474
7430
  const registerTaskTask = CadenzaService.createMetaTask(
7475
7431
  "Record registration",
7476
7432
  (ctx, emit) => {
7477
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
7478
- logSyncDebug("task_registration_result", {
7479
- taskName: ctx.__taskName,
7480
- success: didSyncInsertSucceed(ctx),
7481
- ctx
7482
- });
7483
- }
7484
7433
  if (!didSyncInsertSucceed(ctx)) {
7485
7434
  return;
7486
7435
  }
@@ -7506,16 +7455,6 @@ var GraphSyncController = class _GraphSyncController {
7506
7455
  "Prepare created task for immediate sync",
7507
7456
  (ctx) => {
7508
7457
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
7509
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
7510
- logSyncDebug("task_created_for_immediate_sync", {
7511
- incomingTaskName: ctx?.data?.name ?? null,
7512
- resolvedTaskName: task?.name ?? null,
7513
- exists: Boolean(task),
7514
- hidden: task?.hidden ?? null,
7515
- register: task?.register ?? null,
7516
- registered: task?.registered ?? null
7517
- });
7518
- }
7519
7458
  if (!task || task.hidden || !task.register || task.registered) {
7520
7459
  return false;
7521
7460
  }
@@ -7702,17 +7641,6 @@ var GraphSyncController = class _GraphSyncController {
7702
7641
  if (!isGlobal) {
7703
7642
  continue;
7704
7643
  }
7705
- if (shouldDebugSyncTaskName(task.name)) {
7706
- logSyncDebug("signal_to_task_map_split", {
7707
- taskName: task.name,
7708
- signalName: _signal,
7709
- rawSignal: signal,
7710
- serviceName: serviceName2,
7711
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
7712
- _signal
7713
- )?.registered
7714
- });
7715
- }
7716
7644
  yield {
7717
7645
  __syncing: ctx.__syncing,
7718
7646
  data: {
@@ -7823,21 +7751,6 @@ var GraphSyncController = class _GraphSyncController {
7823
7751
  }
7824
7752
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
7825
7753
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
7826
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
7827
- if (shouldDebugTask) {
7828
- logSyncDebug("intent_map_task_state", {
7829
- taskName: task.name,
7830
- taskVersion: task.version,
7831
- serviceName: serviceName2,
7832
- registered: task.registered,
7833
- register: task.register,
7834
- hidden: task.hidden,
7835
- handledIntents: Array.from(task.handlesIntents),
7836
- registeredIntents: Array.from(task.__registeredIntents),
7837
- tasksSynced: this.tasksSynced,
7838
- intentsSynced: this.intentsSynced
7839
- });
7840
- }
7841
7754
  let emittedCount = 0;
7842
7755
  for (const intent of task.handlesIntents) {
7843
7756
  if (task.__registeredIntents.has(intent)) continue;
@@ -7863,15 +7776,6 @@ var GraphSyncController = class _GraphSyncController {
7863
7776
  if (!intentDefinition) {
7864
7777
  continue;
7865
7778
  }
7866
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
7867
- logSyncDebug("intent_to_task_map_split", {
7868
- taskName: task.name,
7869
- taskVersion: task.version,
7870
- intentName: intent,
7871
- serviceName: serviceName2,
7872
- intentDefinition
7873
- });
7874
- }
7875
7779
  yield {
7876
7780
  __syncing: ctx.__syncing,
7877
7781
  data: {
@@ -7892,15 +7796,6 @@ var GraphSyncController = class _GraphSyncController {
7892
7796
  };
7893
7797
  emittedCount += 1;
7894
7798
  }
7895
- if (shouldDebugTask && emittedCount === 0) {
7896
- logSyncDebug("intent_map_task_noop", {
7897
- taskName: task.name,
7898
- taskVersion: task.version,
7899
- serviceName: serviceName2,
7900
- handledIntents: Array.from(task.handlesIntents),
7901
- registeredIntents: Array.from(task.__registeredIntents)
7902
- });
7903
- }
7904
7799
  return emittedCount > 0;
7905
7800
  }.bind(this)
7906
7801
  );
@@ -7910,13 +7805,6 @@ var GraphSyncController = class _GraphSyncController {
7910
7805
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
7911
7806
  return false;
7912
7807
  }
7913
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7914
- logSyncDebug("intent_definition_prepare", {
7915
- taskName: ctx.__taskName,
7916
- intentName: ctx.__intent,
7917
- intentDefinition: ctx.__intentDefinition
7918
- });
7919
- }
7920
7808
  return {
7921
7809
  ...ctx,
7922
7810
  data: ctx.__intentDefinition
@@ -7929,13 +7817,6 @@ var GraphSyncController = class _GraphSyncController {
7929
7817
  if (!ctx.__intentMapData) {
7930
7818
  return false;
7931
7819
  }
7932
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7933
- logSyncDebug("intent_map_payload_restore", {
7934
- taskName: ctx.__taskName,
7935
- intentName: ctx.__intent,
7936
- intentMapData: ctx.__intentMapData
7937
- });
7938
- }
7939
7820
  return {
7940
7821
  ...ctx,
7941
7822
  data: ctx.__intentMapData
@@ -8757,6 +8638,13 @@ var CadenzaService = class {
8757
8638
  if (this.isBootstrapped) return;
8758
8639
  this.isBootstrapped = true;
8759
8640
  import_core5.default.bootstrap();
8641
+ import_core5.default.setRuntimeInquiryDelegate(
8642
+ (inquiry, context, options) => this.inquire(
8643
+ inquiry,
8644
+ context,
8645
+ options ?? {}
8646
+ )
8647
+ );
8760
8648
  this.signalBroker = import_core5.default.signalBroker;
8761
8649
  this.inquiryBroker = import_core5.default.inquiryBroker;
8762
8650
  this.runner = import_core5.default.runner;
@@ -8765,7 +8653,7 @@ var CadenzaService = class {
8765
8653
  this.serviceRegistry = ServiceRegistry.instance;
8766
8654
  RestController.instance;
8767
8655
  SocketController.instance;
8768
- console.log("BOOTSTRAPPED");
8656
+ RuntimeValidationController.instance;
8769
8657
  }
8770
8658
  static ensureTransportControllers(isFrontend) {
8771
8659
  if (!isFrontend) {
@@ -8904,6 +8792,38 @@ var CadenzaService = class {
8904
8792
  this.inquiryBroker?.addIntent(intent);
8905
8793
  return intent;
8906
8794
  }
8795
+ static getRuntimeValidationPolicy() {
8796
+ this.bootstrap();
8797
+ return import_core5.default.getRuntimeValidationPolicy();
8798
+ }
8799
+ static setRuntimeValidationPolicy(policy = {}) {
8800
+ this.bootstrap();
8801
+ return import_core5.default.setRuntimeValidationPolicy(policy);
8802
+ }
8803
+ static replaceRuntimeValidationPolicy(policy = {}) {
8804
+ this.bootstrap();
8805
+ return import_core5.default.replaceRuntimeValidationPolicy(policy);
8806
+ }
8807
+ static clearRuntimeValidationPolicy() {
8808
+ this.bootstrap();
8809
+ import_core5.default.clearRuntimeValidationPolicy();
8810
+ }
8811
+ static getRuntimeValidationScopes() {
8812
+ this.bootstrap();
8813
+ return import_core5.default.getRuntimeValidationScopes();
8814
+ }
8815
+ static upsertRuntimeValidationScope(scope) {
8816
+ this.bootstrap();
8817
+ return import_core5.default.upsertRuntimeValidationScope(scope);
8818
+ }
8819
+ static removeRuntimeValidationScope(id) {
8820
+ this.bootstrap();
8821
+ import_core5.default.removeRuntimeValidationScope(id);
8822
+ }
8823
+ static clearRuntimeValidationScopes() {
8824
+ this.bootstrap();
8825
+ import_core5.default.clearRuntimeValidationScopes();
8826
+ }
8907
8827
  static getInquiryResponderDescriptor(task) {
8908
8828
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
8909
8829
  }
@@ -9664,7 +9584,6 @@ var CadenzaService = class {
9664
9584
  }
9665
9585
  });
9666
9586
  });
9667
- console.log("Creating service...");
9668
9587
  const initContext = {
9669
9588
  data: {
9670
9589
  name: serviceName,
@@ -9697,10 +9616,13 @@ var CadenzaService = class {
9697
9616
  }).doOn("meta.fetch.handshake_complete");
9698
9617
  } else {
9699
9618
  this.emit("meta.create_service_requested", initContext);
9700
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
9701
- this.createSignalTransmissionTask(
9702
- "global.meta.cadenza_db.gathered_sync_data",
9703
- ctx.serviceName
9619
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
9620
+ emit(
9621
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
9622
+ {
9623
+ serviceName: ctx.serviceName,
9624
+ __reason: "handshake"
9625
+ }
9704
9626
  );
9705
9627
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
9706
9628
  }