@cadenza.io/service 2.17.80 → 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.
@@ -220,6 +220,13 @@ var DatabaseTask = class extends DeputyTask {
220
220
  const metadata = context.getMetadata();
221
221
  const dynamicQueryData = ctx.queryData ?? {};
222
222
  delete ctx.queryData;
223
+ const nextQueryData = {
224
+ ...this.queryData,
225
+ data: {
226
+ ...ctx.data
227
+ },
228
+ ...dynamicQueryData
229
+ };
223
230
  const deputyContext = {
224
231
  ...ctx,
225
232
  __localTaskName: this.name,
@@ -236,13 +243,13 @@ var DatabaseTask = class extends DeputyTask {
236
243
  __blockRemoteExecution: metadata.__blockRemoteExecution ?? ctx.__blockRemoteExecution ?? false,
237
244
  __deputyTaskName: this.name
238
245
  },
239
- queryData: {
240
- ...this.queryData,
241
- data: {
242
- ...ctx.data
243
- },
244
- ...dynamicQueryData
245
- }
246
+ data: nextQueryData.data ?? ctx.data,
247
+ batch: nextQueryData.batch ?? ctx.batch,
248
+ transaction: nextQueryData.transaction ?? ctx.transaction,
249
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
250
+ filter: nextQueryData.filter ?? ctx.filter,
251
+ fields: nextQueryData.fields ?? ctx.fields,
252
+ queryData: nextQueryData
246
253
  };
247
254
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
248
255
  }
@@ -676,6 +683,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
676
683
  // src/registry/ServiceRegistry.ts
677
684
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
678
685
  var CADENZA_DB_GATHERED_SYNC_SIGNAL = "global.meta.cadenza_db.gathered_sync_data";
686
+ var META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL = "meta.service_registry.gathered_sync_transmission_reconcile_requested";
679
687
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
680
688
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
681
689
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -763,18 +771,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
763
771
  }
764
772
  return result;
765
773
  }
766
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
767
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
768
- }
769
- function summarizeTransportDescriptors(transports) {
770
- return transports.map((transport) => ({
771
- uuid: transport.uuid,
772
- serviceInstanceId: transport.serviceInstanceId,
773
- role: transport.role,
774
- origin: transport.origin,
775
- protocols: transport.protocols
776
- }));
777
- }
778
774
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
779
775
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
780
776
  tableName,
@@ -791,6 +787,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
791
787
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
792
788
  const delegationContext = ensureDelegationContextMetadata({
793
789
  ...ctx,
790
+ data: nextQueryData.data !== void 0 ? nextQueryData.data : ctx.data,
791
+ batch: nextQueryData.batch !== void 0 ? nextQueryData.batch : ctx.batch,
792
+ onConflict: Object.prototype.hasOwnProperty.call(nextQueryData, "onConflict") ? nextQueryData.onConflict : void 0,
793
+ transaction: nextQueryData.transaction !== void 0 ? nextQueryData.transaction : ctx.transaction,
794
794
  queryData: nextQueryData
795
795
  });
796
796
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -914,6 +914,7 @@ var ServiceRegistry = class _ServiceRegistry {
914
914
  this.deputies = /* @__PURE__ */ new Map();
915
915
  this.remoteSignals = /* @__PURE__ */ new Map();
916
916
  this.remoteIntents = /* @__PURE__ */ new Map();
917
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
917
918
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
918
919
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
919
920
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1165,21 +1166,6 @@ var ServiceRegistry = class _ServiceRegistry {
1165
1166
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1166
1167
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1167
1168
  }
1168
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1169
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1170
- localServiceName: this.serviceName,
1171
- localServiceInstanceId: this.serviceInstanceId,
1172
- targetServiceName: serviceName,
1173
- targetServiceInstanceId: uuid7,
1174
- existingInstance: !!existing,
1175
- deleted,
1176
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1177
- hasDeputies: this.deputies.has(serviceName),
1178
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1179
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1180
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1181
- });
1182
- }
1183
1169
  if (!serviceInstance.isBootstrapPlaceholder) {
1184
1170
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid7, emit);
1185
1171
  }
@@ -1192,7 +1178,8 @@ var ServiceRegistry = class _ServiceRegistry {
1192
1178
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1193
1179
  const connected = this.ensureDependeeClientForInstance(
1194
1180
  trackedInstance,
1195
- emit
1181
+ emit,
1182
+ ctx
1196
1183
  );
1197
1184
  if (!connected) {
1198
1185
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1235,27 +1222,6 @@ var ServiceRegistry = class _ServiceRegistry {
1235
1222
  break;
1236
1223
  }
1237
1224
  }
1238
- if (shouldTraceIotDbRegistryPath(
1239
- this.serviceName,
1240
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1241
- )) {
1242
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1243
- localServiceName: this.serviceName,
1244
- localServiceInstanceId: this.serviceInstanceId,
1245
- transport: {
1246
- uuid: transport.uuid,
1247
- serviceInstanceId: transport.serviceInstanceId,
1248
- role: transport.role,
1249
- origin: transport.origin,
1250
- protocols: transport.protocols,
1251
- deleted: transport.deleted
1252
- },
1253
- ownerFound: !!ownerInstance,
1254
- ownerServiceName: ownerInstance?.serviceName,
1255
- ownerInstanceId: ownerInstance?.uuid,
1256
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1257
- });
1258
- }
1259
1225
  if (!ownerInstance) {
1260
1226
  return false;
1261
1227
  }
@@ -1281,7 +1247,7 @@ var ServiceRegistry = class _ServiceRegistry {
1281
1247
  if (!hasRemoteInterest) {
1282
1248
  return true;
1283
1249
  }
1284
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1250
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1285
1251
  return true;
1286
1252
  },
1287
1253
  "Handles service transport updates independently from instance rows."
@@ -1311,29 +1277,12 @@ var ServiceRegistry = class _ServiceRegistry {
1311
1277
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1312
1278
  ).doOn("meta.service_registry.dependee_registered");
1313
1279
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1314
- const getLocalTraceContext = () => ({
1315
- localServiceName: this.serviceName,
1316
- localServiceInstanceId: this.serviceInstanceId
1317
- });
1318
1280
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1319
1281
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1320
1282
  if (serviceInstances.length === 0) {
1321
1283
  return;
1322
1284
  }
1323
1285
  for (const serviceInstance of serviceInstances) {
1324
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1325
- if (shouldTraceIotDbRegistryPath(
1326
- localServiceName,
1327
- serviceInstance.serviceName
1328
- )) {
1329
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1330
- localServiceName,
1331
- localServiceInstanceId,
1332
- targetServiceName: serviceInstance.serviceName,
1333
- targetServiceInstanceId: serviceInstance.uuid,
1334
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1335
- });
1336
- }
1337
1286
  yield { serviceInstance };
1338
1287
  }
1339
1288
  }).doOn(
@@ -1379,6 +1328,15 @@ var ServiceRegistry = class _ServiceRegistry {
1379
1328
  },
1380
1329
  "Handles registration of remote signals"
1381
1330
  ).emits("meta.service_registry.registered_global_signals").doOn("global.meta.cadenza_db.gathered_sync_data");
1331
+ this.reconcileGatheredSyncTransmissionsTask = CadenzaService.createMetaTask(
1332
+ "Reconcile gathered sync signal transmissions",
1333
+ (ctx, emit) => this.reconcileGatheredSyncTransmissions(ctx, emit),
1334
+ "Keeps gathered sync transmitters aligned with known remote service instances."
1335
+ ).doOn(
1336
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
1337
+ META_GATHERED_SYNC_TRANSMISSION_RECONCILE_SIGNAL,
1338
+ "meta.service_registry.service_discovered"
1339
+ );
1382
1340
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1383
1341
  "Handle global intent registration",
1384
1342
  (ctx, emit) => {
@@ -1388,34 +1346,20 @@ var ServiceRegistry = class _ServiceRegistry {
1388
1346
  if (!a.deleted && b.deleted) return 1;
1389
1347
  return 0;
1390
1348
  });
1391
- if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
1392
- const relevantIntentNames = sorted.filter(
1393
- (map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
1394
- ).map((map) => ({
1395
- intentName: map.intentName,
1396
- serviceName: map.serviceName,
1397
- taskName: map.taskName,
1398
- taskVersion: map.taskVersion,
1399
- deleted: !!map.deleted
1400
- }));
1401
- console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
1402
- localServiceName: this.serviceName,
1403
- localServiceInstanceId: this.serviceInstanceId,
1404
- signalName: ctx.__signalName,
1405
- totalIntentMaps: sorted.length,
1406
- relevantIntentNames
1407
- });
1408
- }
1409
1349
  for (const map of sorted) {
1410
- if (map.deleted) {
1411
- this.unregisterRemoteIntentDeputy(map);
1412
- continue;
1350
+ try {
1351
+ if (map.deleted) {
1352
+ this.unregisterRemoteIntentDeputy(map);
1353
+ continue;
1354
+ }
1355
+ CadenzaService.inquiryBroker.addIntent({
1356
+ name: map.intentName
1357
+ });
1358
+ this.registerRemoteIntentDeputy(map);
1359
+ this.ensureDependeeClientsForService(map.serviceName, emit);
1360
+ } catch (error) {
1361
+ throw error;
1413
1362
  }
1414
- CadenzaService.inquiryBroker.addIntent({
1415
- name: map.intentName
1416
- });
1417
- this.registerRemoteIntentDeputy(map);
1418
- this.ensureDependeeClientsForService(map.serviceName, emit);
1419
1363
  }
1420
1364
  return true;
1421
1365
  },
@@ -1567,7 +1511,7 @@ var ServiceRegistry = class _ServiceRegistry {
1567
1511
  {
1568
1512
  uuid: report.transportId,
1569
1513
  serviceInstanceId: report.serviceInstanceId,
1570
- role: this.getRoutingTransportRole(),
1514
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1571
1515
  origin: report.transportOrigin,
1572
1516
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1573
1517
  securityProfile: null,
@@ -1609,21 +1553,6 @@ var ServiceRegistry = class _ServiceRegistry {
1609
1553
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1610
1554
  inquiryResult
1611
1555
  );
1612
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1613
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1614
- uuid: instance.uuid,
1615
- isActive: instance.isActive,
1616
- isNonResponsive: instance.isNonResponsive,
1617
- isBlocked: instance.isBlocked,
1618
- transports: summarizeTransportDescriptors(instance.transports)
1619
- }));
1620
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1621
- localServiceName: this.serviceName,
1622
- localServiceInstanceId: this.serviceInstanceId,
1623
- totalServiceInstances: serviceInstances.length,
1624
- tracedInstances
1625
- });
1626
- }
1627
1556
  return {
1628
1557
  ...ctx,
1629
1558
  signalToTaskMaps,
@@ -1720,44 +1649,6 @@ var ServiceRegistry = class _ServiceRegistry {
1720
1649
  let retries = __retries ?? 0;
1721
1650
  let triedInstances = __triedInstances ?? [];
1722
1651
  const preferredRole = this.getRoutingTransportRole();
1723
- const allInstances = this.instances.get(__serviceName) ?? [];
1724
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1725
- this.serviceName,
1726
- __serviceName ?? void 0
1727
- ) ? allInstances.map((instance) => ({
1728
- uuid: instance.uuid,
1729
- isActive: instance.isActive,
1730
- isNonResponsive: instance.isNonResponsive,
1731
- isBlocked: instance.isBlocked,
1732
- isFrontend: instance.isFrontend,
1733
- transports: summarizeTransportDescriptors(instance.transports),
1734
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1735
- instance,
1736
- context,
1737
- preferredRole
1738
- ) ? {
1739
- uuid: this.selectTransportForInstance(
1740
- instance,
1741
- context,
1742
- preferredRole
1743
- ).uuid,
1744
- role: this.selectTransportForInstance(
1745
- instance,
1746
- context,
1747
- preferredRole
1748
- ).role,
1749
- origin: this.selectTransportForInstance(
1750
- instance,
1751
- context,
1752
- preferredRole
1753
- ).origin,
1754
- protocols: this.selectTransportForInstance(
1755
- instance,
1756
- context,
1757
- preferredRole
1758
- ).protocols
1759
- } : null
1760
- })) : void 0;
1761
1652
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1762
1653
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1763
1654
  return false;
@@ -1790,20 +1681,6 @@ var ServiceRegistry = class _ServiceRegistry {
1790
1681
  }
1791
1682
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1792
1683
  });
1793
- if (candidateDiagnostics) {
1794
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1795
- localServiceName: this.serviceName,
1796
- localServiceInstanceId: this.serviceInstanceId,
1797
- targetServiceName: __serviceName,
1798
- preferredRole,
1799
- useSocket: this.useSocket,
1800
- targetServiceInstanceId,
1801
- retries,
1802
- triedInstances,
1803
- candidateDiagnostics,
1804
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1805
- });
1806
- }
1807
1684
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1808
1685
  context.errored = true;
1809
1686
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2061,6 +1938,7 @@ var ServiceRegistry = class _ServiceRegistry {
2061
1938
  serviceName: report.serviceName,
2062
1939
  serviceInstanceId: report.serviceInstanceId,
2063
1940
  transportId: report.transportId,
1941
+ transportRole: report.transportRole,
2064
1942
  transportOrigin: report.transportOrigin,
2065
1943
  transportProtocols: report.transportProtocols,
2066
1944
  isFrontend: report.isFrontend,
@@ -2677,6 +2555,64 @@ var ServiceRegistry = class _ServiceRegistry {
2677
2555
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2678
2556
  );
2679
2557
  }
2558
+ shouldReconcileGatheredSyncTransmissions() {
2559
+ return this.serviceName === "CadenzaDB";
2560
+ }
2561
+ collectGatheredSyncTransmissionRecipients(ctx) {
2562
+ const recipients = /* @__PURE__ */ new Set();
2563
+ const addRecipient = (serviceName) => {
2564
+ const normalizedServiceName = String(serviceName ?? "").trim();
2565
+ if (!normalizedServiceName || normalizedServiceName === this.serviceName) {
2566
+ return;
2567
+ }
2568
+ recipients.add(normalizedServiceName);
2569
+ };
2570
+ addRecipient(ctx.serviceName ?? ctx.__serviceName);
2571
+ for (const instance of this.normalizeServiceInstancesFromSync(ctx)) {
2572
+ addRecipient(instance.serviceName);
2573
+ }
2574
+ for (const [serviceName, instances] of this.instances.entries()) {
2575
+ if (!instances?.length) {
2576
+ continue;
2577
+ }
2578
+ addRecipient(serviceName);
2579
+ }
2580
+ return recipients;
2581
+ }
2582
+ reconcileGatheredSyncTransmissions(ctx, emit) {
2583
+ if (!this.shouldReconcileGatheredSyncTransmissions()) {
2584
+ return false;
2585
+ }
2586
+ const desiredRecipients = this.collectGatheredSyncTransmissionRecipients(ctx);
2587
+ const createdRecipients = [];
2588
+ for (const serviceName of desiredRecipients) {
2589
+ if (this.gatheredSyncTransmissionServices.has(serviceName)) {
2590
+ continue;
2591
+ }
2592
+ CadenzaService.createSignalTransmissionTask(
2593
+ CADENZA_DB_GATHERED_SYNC_SIGNAL,
2594
+ serviceName
2595
+ );
2596
+ this.gatheredSyncTransmissionServices.add(serviceName);
2597
+ createdRecipients.push(serviceName);
2598
+ }
2599
+ for (const serviceName of Array.from(this.gatheredSyncTransmissionServices)) {
2600
+ if (desiredRecipients.has(serviceName)) {
2601
+ continue;
2602
+ }
2603
+ CadenzaService.get(
2604
+ `Transmit signal: ${CADENZA_DB_GATHERED_SYNC_SIGNAL} to ${serviceName}`
2605
+ )?.destroy();
2606
+ this.gatheredSyncTransmissionServices.delete(serviceName);
2607
+ }
2608
+ if (createdRecipients.length > 0 && ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
2609
+ emit("meta.cadenza_db.sync_tick", {
2610
+ __syncing: true,
2611
+ __reason: "gathered_sync_transmissions_reconciled"
2612
+ });
2613
+ }
2614
+ return createdRecipients.length > 0 || this.gatheredSyncTransmissionServices.size > 0;
2615
+ }
2680
2616
  registerRemoteIntentDeputy(map) {
2681
2617
  if (!this.serviceName || map.serviceName === this.serviceName) {
2682
2618
  return;
@@ -2919,38 +2855,18 @@ var ServiceRegistry = class _ServiceRegistry {
2919
2855
  }
2920
2856
  return communicationTypes;
2921
2857
  }
2922
- ensureDependeeClientForInstance(instance, emit) {
2858
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2923
2859
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2924
2860
  return false;
2925
2861
  }
2926
2862
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2927
2863
  return false;
2928
2864
  }
2929
- const transport = this.getRouteableTransport(
2865
+ const transport = this.selectTransportForInstance(
2930
2866
  instance,
2931
- this.useSocket ? "socket" : "rest"
2932
- );
2933
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2934
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2935
- localServiceName: this.serviceName,
2936
- localServiceInstanceId: this.serviceInstanceId,
2937
- targetServiceName: instance.serviceName,
2938
- targetServiceInstanceId: instance.uuid,
2939
- useSocket: this.useSocket,
2940
- routeableRole: this.getRoutingTransportRole(),
2941
- hasDeputies: this.deputies.has(instance.serviceName),
2942
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2943
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2944
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2945
- transports: summarizeTransportDescriptors(instance.transports),
2946
- selectedTransport: transport ? {
2947
- uuid: transport.uuid,
2948
- role: transport.role,
2949
- origin: transport.origin,
2950
- protocols: transport.protocols
2951
- } : null
2952
- });
2953
- }
2867
+ ctx ?? {},
2868
+ this.getRoutingTransportRole()
2869
+ );
2954
2870
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
2955
2871
  return false;
2956
2872
  }
@@ -2967,9 +2883,9 @@ var ServiceRegistry = class _ServiceRegistry {
2967
2883
  this.markTransportClientCreated(instance, transport.uuid);
2968
2884
  return true;
2969
2885
  }
2970
- ensureDependeeClientsForService(serviceName, emit) {
2886
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
2971
2887
  for (const instance of this.instances.get(serviceName) ?? []) {
2972
- this.ensureDependeeClientForInstance(instance, emit);
2888
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
2973
2889
  }
2974
2890
  }
2975
2891
  hasTransportClientCreated(instance, transportId) {
@@ -3028,6 +2944,10 @@ var ServiceRegistry = class _ServiceRegistry {
3028
2944
  if (!instances?.length) {
3029
2945
  return;
3030
2946
  }
2947
+ const resolvedInstance = instances.find(
2948
+ (instance) => instance.uuid === resolvedInstanceId
2949
+ );
2950
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3031
2951
  const placeholders = instances.filter(
3032
2952
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3033
2953
  );
@@ -3039,7 +2959,33 @@ var ServiceRegistry = class _ServiceRegistry {
3039
2959
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3040
2960
  placeholder.uuid
3041
2961
  );
2962
+ const preservedTransportIds = /* @__PURE__ */ new Set();
2963
+ if (resolvedInstance && frontendRoutingRole) {
2964
+ const resolvedHasFrontendRoute = resolvedInstance.transports.some(
2965
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
2966
+ );
2967
+ if (!resolvedHasFrontendRoute) {
2968
+ const transportsToPreserve = placeholder.transports.filter(
2969
+ (transport) => transport.role === frontendRoutingRole && !transport.deleted
2970
+ );
2971
+ for (const transport of transportsToPreserve) {
2972
+ if (resolvedInstance.transports.some(
2973
+ (existingTransport) => existingTransport.role === transport.role && existingTransport.origin === transport.origin
2974
+ )) {
2975
+ continue;
2976
+ }
2977
+ resolvedInstance.transports.push({
2978
+ ...transport,
2979
+ serviceInstanceId: resolvedInstanceId
2980
+ });
2981
+ preservedTransportIds.add(transport.uuid);
2982
+ }
2983
+ }
2984
+ }
3042
2985
  for (const transport of placeholder.transports) {
2986
+ if (preservedTransportIds.has(transport.uuid)) {
2987
+ continue;
2988
+ }
3043
2989
  const transportKey = buildTransportClientKey(transport);
3044
2990
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3045
2991
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3160,6 +3106,7 @@ var ServiceRegistry = class _ServiceRegistry {
3160
3106
  return null;
3161
3107
  }
3162
3108
  const transportId = ctx.transportId ?? ctx.serviceTransportId ?? ctx.serviceTransport?.uuid ?? void 0;
3109
+ const transportRole = ctx.transportRole ?? ctx.transport_role ?? ctx.serviceTransport?.role ?? void 0;
3163
3110
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3164
3111
  const transportProtocols = Array.isArray(
3165
3112
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3185,6 +3132,7 @@ var ServiceRegistry = class _ServiceRegistry {
3185
3132
  serviceName,
3186
3133
  serviceInstanceId,
3187
3134
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3135
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3188
3136
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3189
3137
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3190
3138
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3207,13 +3155,16 @@ var ServiceRegistry = class _ServiceRegistry {
3207
3155
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3208
3156
  const existingTransport = this.getTransportById(instance, report.transportId);
3209
3157
  if (existingTransport) {
3158
+ if (report.transportRole) {
3159
+ existingTransport.role = report.transportRole;
3160
+ }
3210
3161
  existingTransport.origin = report.transportOrigin;
3211
3162
  existingTransport.protocols = protocols;
3212
3163
  } else {
3213
3164
  instance.transports.push({
3214
3165
  uuid: report.transportId,
3215
3166
  serviceInstanceId: report.serviceInstanceId,
3216
- role: this.getRoutingTransportRole(),
3167
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3217
3168
  origin: report.transportOrigin,
3218
3169
  protocols,
3219
3170
  securityProfile: null,
@@ -3259,24 +3210,18 @@ var ServiceRegistry = class _ServiceRegistry {
3259
3210
  localInstance.isBlocked
3260
3211
  );
3261
3212
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3213
+ const transport = this.getRouteableTransport(
3214
+ localInstance,
3215
+ this.useSocket ? "socket" : "rest",
3216
+ "internal"
3217
+ );
3262
3218
  const report = {
3263
3219
  serviceName: this.serviceName,
3264
3220
  serviceInstanceId: this.serviceInstanceId,
3265
- transportId: this.getRouteableTransport(
3266
- localInstance,
3267
- this.useSocket ? "socket" : "rest",
3268
- "internal"
3269
- )?.uuid ?? void 0,
3270
- transportOrigin: this.getRouteableTransport(
3271
- localInstance,
3272
- this.useSocket ? "socket" : "rest",
3273
- "internal"
3274
- )?.origin ?? void 0,
3275
- transportProtocols: this.getRouteableTransport(
3276
- localInstance,
3277
- this.useSocket ? "socket" : "rest",
3278
- "internal"
3279
- )?.protocols ?? void 0,
3221
+ transportId: transport?.uuid ?? void 0,
3222
+ transportRole: transport?.role ?? void 0,
3223
+ transportOrigin: transport?.origin ?? void 0,
3224
+ transportProtocols: transport?.protocols ?? void 0,
3280
3225
  isFrontend: localInstance.isFrontend,
3281
3226
  reportedAt,
3282
3227
  state: snapshot.state,
@@ -3640,6 +3585,7 @@ var ServiceRegistry = class _ServiceRegistry {
3640
3585
  this.deputies.clear();
3641
3586
  this.remoteSignals.clear();
3642
3587
  this.remoteIntents.clear();
3588
+ this.gatheredSyncTransmissionServices.clear();
3643
3589
  this.remoteIntentDeputiesByKey.clear();
3644
3590
  this.remoteIntentDeputiesByTask.clear();
3645
3591
  this.dependeesByService.clear();
@@ -4891,10 +4837,14 @@ var SocketController = class _SocketController {
4891
4837
  const communicationTypes = this.normalizeCommunicationTypes(
4892
4838
  input.communicationTypes
4893
4839
  );
4840
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
4894
4841
  const serviceName = String(input.serviceName ?? "");
4895
4842
  const serviceTransportId = String(input.serviceTransportId ?? "");
4896
4843
  const serviceOrigin = String(input.serviceOrigin ?? "");
4897
4844
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
4845
+ if (!transportProtocols.includes("socket")) {
4846
+ return false;
4847
+ }
4898
4848
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
4899
4849
  CadenzaService.log(
4900
4850
  "Socket client setup skipped due to missing transport origin",
@@ -4920,7 +4870,7 @@ var SocketController = class _SocketController {
4920
4870
  serviceName,
4921
4871
  serviceTransportId,
4922
4872
  serviceOrigin,
4923
- transportProtocols: input.transportProtocols,
4873
+ transportProtocols,
4924
4874
  url
4925
4875
  });
4926
4876
  };
@@ -4941,7 +4891,7 @@ var SocketController = class _SocketController {
4941
4891
  serviceName,
4942
4892
  serviceTransportId,
4943
4893
  serviceOrigin,
4944
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
4894
+ transportProtocols,
4945
4895
  url,
4946
4896
  destroyed: false,
4947
4897
  updatedAt: Date.now()
@@ -5182,19 +5132,6 @@ var SocketController = class _SocketController {
5182
5132
  });
5183
5133
  });
5184
5134
  socket.on("signal", (signalCtx, callback) => {
5185
- if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5186
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
5187
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5188
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5189
- signalName: signalCtx.__signalName,
5190
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5191
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5192
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5193
- serviceInstanceTransports: Array.isArray(
5194
- signalCtx.serviceInstanceTransports
5195
- ) ? signalCtx.serviceInstanceTransports.length : 0
5196
- });
5197
- }
5198
5135
  if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
5199
5136
  if (isSocketAckCallback(callback)) {
5200
5137
  callback({
@@ -5493,21 +5430,6 @@ var SocketController = class _SocketController {
5493
5430
  if (signalCtx.__signalName === void 0) {
5494
5431
  return;
5495
5432
  }
5496
- if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5497
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
5498
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5499
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5500
- targetServiceName: serviceName,
5501
- targetUrl: url,
5502
- signalName: signalCtx.__signalName,
5503
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5504
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5505
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5506
- serviceInstanceTransports: Array.isArray(
5507
- signalCtx.serviceInstanceTransports
5508
- ) ? signalCtx.serviceInstanceTransports.length : 0
5509
- });
5510
- }
5511
5433
  delete signalCtx.__broadcast;
5512
5434
  const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
5513
5435
  errored: true,
@@ -5548,7 +5470,7 @@ var SocketController = class _SocketController {
5548
5470
  communicationTypes,
5549
5471
  serviceTransportId,
5550
5472
  serviceOrigin,
5551
- transportProtocols: input.transportProtocols,
5473
+ transportProtocols,
5552
5474
  handshakeData: {
5553
5475
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5554
5476
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -5908,6 +5830,209 @@ var SignalController = class _SignalController {
5908
5830
  }
5909
5831
  };
5910
5832
 
5833
+ // src/runtime/RuntimeValidationController.ts
5834
+ var RUNTIME_VALIDATION_INTENTS = {
5835
+ getPolicy: "meta-runtime-validation-policy-get",
5836
+ setPolicy: "meta-runtime-validation-policy-set",
5837
+ replacePolicy: "meta-runtime-validation-policy-replace",
5838
+ clearPolicy: "meta-runtime-validation-policy-clear",
5839
+ listScopes: "meta-runtime-validation-scope-list",
5840
+ upsertScope: "meta-runtime-validation-scope-upsert",
5841
+ removeScope: "meta-runtime-validation-scope-remove",
5842
+ clearScopes: "meta-runtime-validation-scope-clear"
5843
+ };
5844
+ var RUNTIME_VALIDATION_SIGNALS = {
5845
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
5846
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
5847
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
5848
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
5849
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
5850
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
5851
+ policyUpdated: "meta.runtime_validation.policy_updated",
5852
+ policyCleared: "meta.runtime_validation.policy_cleared",
5853
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
5854
+ scopeRemoved: "meta.runtime_validation.scope_removed",
5855
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
5856
+ };
5857
+ function normalizePolicyContext(ctx) {
5858
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
5859
+ const policy = {};
5860
+ for (const key of [
5861
+ "metaInput",
5862
+ "metaOutput",
5863
+ "businessInput",
5864
+ "businessOutput",
5865
+ "warnOnMissingMetaInputSchema",
5866
+ "warnOnMissingMetaOutputSchema",
5867
+ "warnOnMissingBusinessInputSchema",
5868
+ "warnOnMissingBusinessOutputSchema"
5869
+ ]) {
5870
+ if (source[key] !== void 0) {
5871
+ policy[key] = source[key];
5872
+ }
5873
+ }
5874
+ return policy;
5875
+ }
5876
+ function normalizeScopeContext(ctx) {
5877
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
5878
+ return {
5879
+ id: source.id,
5880
+ active: source.active,
5881
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
5882
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
5883
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
5884
+ };
5885
+ }
5886
+ var RuntimeValidationController = class _RuntimeValidationController {
5887
+ static get instance() {
5888
+ if (!this._instance) {
5889
+ this._instance = new _RuntimeValidationController();
5890
+ }
5891
+ return this._instance;
5892
+ }
5893
+ constructor() {
5894
+ CadenzaService.defineIntent({
5895
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
5896
+ description: "Get the active runtime validation policy.",
5897
+ input: { type: "object" },
5898
+ output: { type: "object" }
5899
+ });
5900
+ CadenzaService.defineIntent({
5901
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
5902
+ description: "Merge fields into the active runtime validation policy.",
5903
+ input: { type: "object" },
5904
+ output: { type: "object" }
5905
+ });
5906
+ CadenzaService.defineIntent({
5907
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
5908
+ description: "Replace the active runtime validation policy.",
5909
+ input: { type: "object" },
5910
+ output: { type: "object" }
5911
+ });
5912
+ CadenzaService.defineIntent({
5913
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
5914
+ description: "Clear the active runtime validation policy.",
5915
+ input: { type: "object" },
5916
+ output: { type: "object" }
5917
+ });
5918
+ CadenzaService.defineIntent({
5919
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
5920
+ description: "List active runtime validation scopes.",
5921
+ input: { type: "object" },
5922
+ output: { type: "object" }
5923
+ });
5924
+ CadenzaService.defineIntent({
5925
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
5926
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
5927
+ input: { type: "object" },
5928
+ output: { type: "object" }
5929
+ });
5930
+ CadenzaService.defineIntent({
5931
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
5932
+ description: "Remove a runtime validation scope by id.",
5933
+ input: { type: "object" },
5934
+ output: { type: "object" }
5935
+ });
5936
+ CadenzaService.defineIntent({
5937
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
5938
+ description: "Clear all runtime validation scopes.",
5939
+ input: { type: "object" },
5940
+ output: { type: "object" }
5941
+ });
5942
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
5943
+ return {
5944
+ policy: CadenzaService.getRuntimeValidationPolicy()
5945
+ };
5946
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
5947
+ CadenzaService.createMetaTask(
5948
+ "Set runtime validation policy",
5949
+ (ctx, emit) => {
5950
+ const policy = normalizePolicyContext(ctx);
5951
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
5952
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
5953
+ policy: nextPolicy
5954
+ });
5955
+ return {
5956
+ policy: nextPolicy
5957
+ };
5958
+ },
5959
+ "Merges runtime validation policy fields at runtime."
5960
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
5961
+ CadenzaService.createMetaTask(
5962
+ "Replace runtime validation policy",
5963
+ (ctx, emit) => {
5964
+ const policy = normalizePolicyContext(ctx);
5965
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
5966
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
5967
+ policy: nextPolicy
5968
+ });
5969
+ return {
5970
+ policy: nextPolicy
5971
+ };
5972
+ },
5973
+ "Replaces runtime validation policy fields at runtime."
5974
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
5975
+ CadenzaService.createMetaTask(
5976
+ "Clear runtime validation policy",
5977
+ (_ctx, emit) => {
5978
+ CadenzaService.clearRuntimeValidationPolicy();
5979
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
5980
+ return {
5981
+ policy: CadenzaService.getRuntimeValidationPolicy()
5982
+ };
5983
+ },
5984
+ "Clears the runtime validation policy."
5985
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
5986
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
5987
+ return {
5988
+ scopes: CadenzaService.getRuntimeValidationScopes()
5989
+ };
5990
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
5991
+ CadenzaService.createMetaTask(
5992
+ "Upsert runtime validation scope",
5993
+ (ctx, emit) => {
5994
+ const scope = normalizeScopeContext(ctx);
5995
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
5996
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
5997
+ scope: nextScope
5998
+ });
5999
+ return {
6000
+ scope: nextScope
6001
+ };
6002
+ },
6003
+ "Upserts a runtime validation scope for targeted debugging."
6004
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6005
+ CadenzaService.createMetaTask(
6006
+ "Remove runtime validation scope",
6007
+ (ctx, emit) => {
6008
+ if (!ctx.id) {
6009
+ throw new Error("Runtime validation scope id is required");
6010
+ }
6011
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6012
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6013
+ id: ctx.id
6014
+ });
6015
+ return {
6016
+ id: ctx.id,
6017
+ scopes: CadenzaService.getRuntimeValidationScopes()
6018
+ };
6019
+ },
6020
+ "Removes a runtime validation scope."
6021
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6022
+ CadenzaService.createMetaTask(
6023
+ "Clear runtime validation scopes",
6024
+ (_ctx, emit) => {
6025
+ CadenzaService.clearRuntimeValidationScopes();
6026
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6027
+ return {
6028
+ scopes: CadenzaService.getRuntimeValidationScopes()
6029
+ };
6030
+ },
6031
+ "Clears all runtime validation scopes."
6032
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6033
+ }
6034
+ };
6035
+
5911
6036
  // src/graph/controllers/registerActorSessionPersistence.ts
5912
6037
  import { META_ACTOR_SESSION_STATE_PERSIST_INTENT } from "@cadenza.io/core";
5913
6038
  function registerActorSessionPersistenceTasks() {
@@ -6524,7 +6649,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
6524
6649
  }
6525
6650
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
6526
6651
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
6527
- const debugTable = shouldDebugSyncTable(tableName);
6528
6652
  if (!localInsertTask && !isCadenzaDBReady) {
6529
6653
  return void 0;
6530
6654
  }
@@ -6537,16 +6661,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6537
6661
  register: false,
6538
6662
  isHidden: true
6539
6663
  });
6540
- if (debugTable) {
6541
- logSyncDebug("insert_task_resolved", {
6542
- tableName,
6543
- localInsertTaskName: localInsertTask?.name ?? null,
6544
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
6545
- targetTaskName: targetTask.name,
6546
- queryData,
6547
- options
6548
- });
6549
- }
6550
6664
  const prepareExecutionTask = CadenzaService.createMetaTask(
6551
6665
  `Prepare graph sync insert for ${tableName}`,
6552
6666
  (ctx) => {
@@ -6557,12 +6671,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6557
6671
  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) {
6558
6672
  console.warn(
6559
6673
  "[CADENZA_SYNC_EMPTY_INSERT]",
6560
- summarizeSyncDebugValue({
6674
+ {
6561
6675
  tableName,
6562
6676
  queryData: originalQueryData,
6563
6677
  ctx,
6564
6678
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
6565
- })
6679
+ }
6566
6680
  );
6567
6681
  }
6568
6682
  return buildSyncExecutionEnvelope(
@@ -6576,37 +6690,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6576
6690
  isHidden: true
6577
6691
  }
6578
6692
  );
6579
- if (debugTable) {
6580
- prepareExecutionTask.then(
6581
- CadenzaService.createMetaTask(
6582
- `Log prepared graph sync insert execution for ${tableName}`,
6583
- (ctx) => {
6584
- if (tableName === "task") {
6585
- if (!shouldDebugTaskSyncPayload(ctx)) {
6586
- return ctx;
6587
- }
6588
- logSyncDebug("insert_prepare", {
6589
- tableName,
6590
- targetTaskName: targetTask.name,
6591
- payload: buildTaskSyncDebugPayload(ctx)
6592
- });
6593
- return ctx;
6594
- }
6595
- logSyncDebug("insert_prepare", {
6596
- tableName,
6597
- targetTaskName: targetTask.name,
6598
- ctx
6599
- });
6600
- return ctx;
6601
- },
6602
- `Logs prepared ${tableName} sync insert payloads.`,
6603
- {
6604
- register: false,
6605
- isHidden: true
6606
- }
6607
- )
6608
- );
6609
- }
6610
6693
  const finalizeExecutionTask = CadenzaService.createMetaTask(
6611
6694
  `Finalize graph sync insert for ${tableName}`,
6612
6695
  (ctx) => {
@@ -6617,25 +6700,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
6617
6700
  ...ctx,
6618
6701
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
6619
6702
  };
6620
- if (debugTable) {
6621
- if (tableName === "task") {
6622
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
6623
- logSyncDebug("insert_finalize", {
6624
- tableName,
6625
- targetTaskName: targetTask.name,
6626
- success: didSyncInsertSucceed(normalizedContext),
6627
- payload: buildTaskSyncDebugPayload(normalizedContext)
6628
- });
6629
- }
6630
- } else {
6631
- logSyncDebug("insert_finalize", {
6632
- tableName,
6633
- targetTaskName: targetTask.name,
6634
- success: didSyncInsertSucceed(normalizedContext),
6635
- ctx: normalizedContext
6636
- });
6637
- }
6638
- }
6639
6703
  return normalizedContext;
6640
6704
  },
6641
6705
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -6670,139 +6734,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
6670
6734
  intent_registry: "intentRegistrys"
6671
6735
  };
6672
6736
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
6673
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
6674
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
6675
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
6676
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
6677
- "Query service_instance",
6678
- "Query service_instance_transport",
6679
- "Query intent_to_task_map",
6680
- "Query signal_to_task_map",
6681
- "Prepare for signal sync",
6682
- "Compile sync data and broadcast",
6683
- "Forward service instance sync",
6684
- "Forward service transport sync",
6685
- "Forward intent to task map sync",
6686
- "Forward signal to task map sync",
6687
- "Normalize telemetry ingest payload",
6688
- "Get telemetry session state",
6689
- "Normalize anomaly detect input",
6690
- "Read anomaly runtime session",
6691
- "Normalize prediction compute input",
6692
- "Normalize telemetry insert queryData"
6693
- ]);
6694
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
6695
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
6696
- "meta-service-registry-full-sync",
6697
- "runner-traffic-runtime-get",
6698
- "iot-telemetry-ingest",
6699
- "iot-telemetry-session-get",
6700
- "iot-anomaly-detect",
6701
- "iot-anomaly-runtime-get",
6702
- "iot-prediction-compute",
6703
- "iot-db-telemetry-insert",
6704
- "query-pg-cadenza-db-postgres-actor-service_instance",
6705
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
6706
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
6707
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
6708
- ]);
6709
- function shouldDebugSyncTable(tableName) {
6710
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
6711
- }
6712
- function shouldDebugSyncTaskName(taskName) {
6713
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
6714
- }
6715
- function shouldDebugSyncRoutineName(routineName) {
6716
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
6717
- }
6718
- function shouldDebugSyncIntentName(intentName) {
6719
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
6720
- }
6721
- function summarizeSyncDebugValue(value, depth = 0) {
6722
- if (value === null || value === void 0) {
6723
- return value;
6724
- }
6725
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
6726
- return value;
6727
- }
6728
- if (value instanceof Set) {
6729
- return {
6730
- __type: "Set",
6731
- size: value.size,
6732
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
6733
- };
6734
- }
6735
- if (value instanceof Map) {
6736
- return {
6737
- __type: "Map",
6738
- size: value.size
6739
- };
6740
- }
6741
- if (Array.isArray(value)) {
6742
- return {
6743
- __type: "Array",
6744
- length: value.length,
6745
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
6746
- };
6747
- }
6748
- if (typeof value === "object") {
6749
- if (depth >= 2) {
6750
- return "[object]";
6751
- }
6752
- const output = {};
6753
- const entries = Object.entries(value).filter(
6754
- ([key]) => ![
6755
- "functionString",
6756
- "tagIdGetter",
6757
- "__functionString",
6758
- "__getTagCallback",
6759
- "joinedContexts",
6760
- "task",
6761
- "taskInstance",
6762
- "tasks"
6763
- ].includes(key)
6764
- ).slice(0, 12);
6765
- for (const [key, nestedValue] of entries) {
6766
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
6767
- }
6768
- return output;
6769
- }
6770
- return String(value);
6771
- }
6772
- function logSyncDebug(event, payload) {
6773
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
6774
- }
6775
- function buildTaskSyncDebugPayload(ctx) {
6776
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
6777
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
6778
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
6779
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
6780
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
6781
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
6782
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
6783
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
6784
- return {
6785
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
6786
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
6787
- functionStringLength: functionString?.length ?? null,
6788
- tagIdGetterLength: tagIdGetter?.length ?? null,
6789
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
6790
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
6791
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
6792
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
6793
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
6794
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
6795
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
6796
- rowCount: ctx.rowCount ?? null,
6797
- errored: ctx.errored ?? false,
6798
- success: ctx.__success ?? null,
6799
- error: ctx.__error ?? null
6800
- };
6801
- }
6802
- function shouldDebugTaskSyncPayload(ctx) {
6803
- const payload = buildTaskSyncDebugPayload(ctx);
6804
- return shouldDebugSyncTaskName(payload.taskName);
6805
- }
6806
6737
  function resolveSyncQueryRows(ctx, tableName) {
6807
6738
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
6808
6739
  const rows = ctx?.[resultKey];
@@ -7249,16 +7180,6 @@ var GraphSyncController = class _GraphSyncController {
7249
7180
  if (!nextTask?.registered) {
7250
7181
  continue;
7251
7182
  }
7252
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
7253
- logSyncDebug("task_to_routine_split", {
7254
- routineName: routine.name,
7255
- routineVersion: routine.version,
7256
- taskName: nextTask.name,
7257
- taskVersion: nextTask.version,
7258
- serviceName: serviceName2,
7259
- registered: nextTask.registered
7260
- });
7261
- }
7262
7183
  yield {
7263
7184
  __syncing: ctx.__syncing,
7264
7185
  data: {
@@ -7404,20 +7325,6 @@ var GraphSyncController = class _GraphSyncController {
7404
7325
  if (task.registered) continue;
7405
7326
  const { __functionString, __getTagCallback } = task.export();
7406
7327
  this.tasksSynced = false;
7407
- if (shouldDebugSyncTaskName(task.name)) {
7408
- logSyncDebug("task_registration_split", {
7409
- taskName: task.name,
7410
- taskVersion: task.version,
7411
- serviceName: serviceName2,
7412
- register: task.register,
7413
- registered: task.registered,
7414
- hidden: task.hidden,
7415
- exportFunctionLength: __functionString?.length ?? null,
7416
- exportTagGetterLength: __getTagCallback?.length ?? null,
7417
- observedSignals: Array.from(task.observedSignals),
7418
- handledIntents: Array.from(task.handlesIntents)
7419
- });
7420
- }
7421
7328
  yield {
7422
7329
  __syncing: ctx.__syncing,
7423
7330
  data: {
@@ -7472,13 +7379,6 @@ var GraphSyncController = class _GraphSyncController {
7472
7379
  const registerTaskTask = CadenzaService.createMetaTask(
7473
7380
  "Record registration",
7474
7381
  (ctx, emit) => {
7475
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
7476
- logSyncDebug("task_registration_result", {
7477
- taskName: ctx.__taskName,
7478
- success: didSyncInsertSucceed(ctx),
7479
- ctx
7480
- });
7481
- }
7482
7382
  if (!didSyncInsertSucceed(ctx)) {
7483
7383
  return;
7484
7384
  }
@@ -7504,16 +7404,6 @@ var GraphSyncController = class _GraphSyncController {
7504
7404
  "Prepare created task for immediate sync",
7505
7405
  (ctx) => {
7506
7406
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
7507
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
7508
- logSyncDebug("task_created_for_immediate_sync", {
7509
- incomingTaskName: ctx?.data?.name ?? null,
7510
- resolvedTaskName: task?.name ?? null,
7511
- exists: Boolean(task),
7512
- hidden: task?.hidden ?? null,
7513
- register: task?.register ?? null,
7514
- registered: task?.registered ?? null
7515
- });
7516
- }
7517
7407
  if (!task || task.hidden || !task.register || task.registered) {
7518
7408
  return false;
7519
7409
  }
@@ -7700,17 +7590,6 @@ var GraphSyncController = class _GraphSyncController {
7700
7590
  if (!isGlobal) {
7701
7591
  continue;
7702
7592
  }
7703
- if (shouldDebugSyncTaskName(task.name)) {
7704
- logSyncDebug("signal_to_task_map_split", {
7705
- taskName: task.name,
7706
- signalName: _signal,
7707
- rawSignal: signal,
7708
- serviceName: serviceName2,
7709
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
7710
- _signal
7711
- )?.registered
7712
- });
7713
- }
7714
7593
  yield {
7715
7594
  __syncing: ctx.__syncing,
7716
7595
  data: {
@@ -7821,21 +7700,6 @@ var GraphSyncController = class _GraphSyncController {
7821
7700
  }
7822
7701
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
7823
7702
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
7824
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
7825
- if (shouldDebugTask) {
7826
- logSyncDebug("intent_map_task_state", {
7827
- taskName: task.name,
7828
- taskVersion: task.version,
7829
- serviceName: serviceName2,
7830
- registered: task.registered,
7831
- register: task.register,
7832
- hidden: task.hidden,
7833
- handledIntents: Array.from(task.handlesIntents),
7834
- registeredIntents: Array.from(task.__registeredIntents),
7835
- tasksSynced: this.tasksSynced,
7836
- intentsSynced: this.intentsSynced
7837
- });
7838
- }
7839
7703
  let emittedCount = 0;
7840
7704
  for (const intent of task.handlesIntents) {
7841
7705
  if (task.__registeredIntents.has(intent)) continue;
@@ -7861,15 +7725,6 @@ var GraphSyncController = class _GraphSyncController {
7861
7725
  if (!intentDefinition) {
7862
7726
  continue;
7863
7727
  }
7864
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
7865
- logSyncDebug("intent_to_task_map_split", {
7866
- taskName: task.name,
7867
- taskVersion: task.version,
7868
- intentName: intent,
7869
- serviceName: serviceName2,
7870
- intentDefinition
7871
- });
7872
- }
7873
7728
  yield {
7874
7729
  __syncing: ctx.__syncing,
7875
7730
  data: {
@@ -7890,15 +7745,6 @@ var GraphSyncController = class _GraphSyncController {
7890
7745
  };
7891
7746
  emittedCount += 1;
7892
7747
  }
7893
- if (shouldDebugTask && emittedCount === 0) {
7894
- logSyncDebug("intent_map_task_noop", {
7895
- taskName: task.name,
7896
- taskVersion: task.version,
7897
- serviceName: serviceName2,
7898
- handledIntents: Array.from(task.handlesIntents),
7899
- registeredIntents: Array.from(task.__registeredIntents)
7900
- });
7901
- }
7902
7748
  return emittedCount > 0;
7903
7749
  }.bind(this)
7904
7750
  );
@@ -7908,13 +7754,6 @@ var GraphSyncController = class _GraphSyncController {
7908
7754
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
7909
7755
  return false;
7910
7756
  }
7911
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7912
- logSyncDebug("intent_definition_prepare", {
7913
- taskName: ctx.__taskName,
7914
- intentName: ctx.__intent,
7915
- intentDefinition: ctx.__intentDefinition
7916
- });
7917
- }
7918
7757
  return {
7919
7758
  ...ctx,
7920
7759
  data: ctx.__intentDefinition
@@ -7927,13 +7766,6 @@ var GraphSyncController = class _GraphSyncController {
7927
7766
  if (!ctx.__intentMapData) {
7928
7767
  return false;
7929
7768
  }
7930
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
7931
- logSyncDebug("intent_map_payload_restore", {
7932
- taskName: ctx.__taskName,
7933
- intentName: ctx.__intent,
7934
- intentMapData: ctx.__intentMapData
7935
- });
7936
- }
7937
7769
  return {
7938
7770
  ...ctx,
7939
7771
  data: ctx.__intentMapData
@@ -8755,6 +8587,13 @@ var CadenzaService = class {
8755
8587
  if (this.isBootstrapped) return;
8756
8588
  this.isBootstrapped = true;
8757
8589
  Cadenza.bootstrap();
8590
+ Cadenza.setRuntimeInquiryDelegate(
8591
+ (inquiry, context, options) => this.inquire(
8592
+ inquiry,
8593
+ context,
8594
+ options ?? {}
8595
+ )
8596
+ );
8758
8597
  this.signalBroker = Cadenza.signalBroker;
8759
8598
  this.inquiryBroker = Cadenza.inquiryBroker;
8760
8599
  this.runner = Cadenza.runner;
@@ -8763,7 +8602,7 @@ var CadenzaService = class {
8763
8602
  this.serviceRegistry = ServiceRegistry.instance;
8764
8603
  RestController.instance;
8765
8604
  SocketController.instance;
8766
- console.log("BOOTSTRAPPED");
8605
+ RuntimeValidationController.instance;
8767
8606
  }
8768
8607
  static ensureTransportControllers(isFrontend) {
8769
8608
  if (!isFrontend) {
@@ -8902,6 +8741,38 @@ var CadenzaService = class {
8902
8741
  this.inquiryBroker?.addIntent(intent);
8903
8742
  return intent;
8904
8743
  }
8744
+ static getRuntimeValidationPolicy() {
8745
+ this.bootstrap();
8746
+ return Cadenza.getRuntimeValidationPolicy();
8747
+ }
8748
+ static setRuntimeValidationPolicy(policy = {}) {
8749
+ this.bootstrap();
8750
+ return Cadenza.setRuntimeValidationPolicy(policy);
8751
+ }
8752
+ static replaceRuntimeValidationPolicy(policy = {}) {
8753
+ this.bootstrap();
8754
+ return Cadenza.replaceRuntimeValidationPolicy(policy);
8755
+ }
8756
+ static clearRuntimeValidationPolicy() {
8757
+ this.bootstrap();
8758
+ Cadenza.clearRuntimeValidationPolicy();
8759
+ }
8760
+ static getRuntimeValidationScopes() {
8761
+ this.bootstrap();
8762
+ return Cadenza.getRuntimeValidationScopes();
8763
+ }
8764
+ static upsertRuntimeValidationScope(scope) {
8765
+ this.bootstrap();
8766
+ return Cadenza.upsertRuntimeValidationScope(scope);
8767
+ }
8768
+ static removeRuntimeValidationScope(id) {
8769
+ this.bootstrap();
8770
+ Cadenza.removeRuntimeValidationScope(id);
8771
+ }
8772
+ static clearRuntimeValidationScopes() {
8773
+ this.bootstrap();
8774
+ Cadenza.clearRuntimeValidationScopes();
8775
+ }
8905
8776
  static getInquiryResponderDescriptor(task) {
8906
8777
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
8907
8778
  }
@@ -9662,7 +9533,6 @@ var CadenzaService = class {
9662
9533
  }
9663
9534
  });
9664
9535
  });
9665
- console.log("Creating service...");
9666
9536
  const initContext = {
9667
9537
  data: {
9668
9538
  name: serviceName,
@@ -9695,18 +9565,13 @@ var CadenzaService = class {
9695
9565
  }).doOn("meta.fetch.handshake_complete");
9696
9566
  } else {
9697
9567
  this.emit("meta.create_service_requested", initContext);
9698
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
9699
- if (ctx.serviceName) {
9700
- console.log("[CADENZA_SYNC_DEBUG] create_sync_signal_transmission", {
9701
- localServiceName: serviceName,
9702
- localServiceInstanceId: serviceId,
9703
- targetServiceName: ctx.serviceName,
9704
- signalName: "global.meta.cadenza_db.gathered_sync_data"
9705
- });
9706
- }
9707
- this.createSignalTransmissionTask(
9708
- "global.meta.cadenza_db.gathered_sync_data",
9709
- ctx.serviceName
9568
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
9569
+ emit(
9570
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
9571
+ {
9572
+ serviceName: ctx.serviceName,
9573
+ __reason: "handshake"
9574
+ }
9710
9575
  );
9711
9576
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
9712
9577
  }
@@ -10701,6 +10566,8 @@ export {
10701
10566
  EphemeralTask2 as EphemeralTask,
10702
10567
  GraphMetadataController,
10703
10568
  GraphRoutine2 as GraphRoutine,
10569
+ RUNTIME_VALIDATION_INTENTS,
10570
+ RUNTIME_VALIDATION_SIGNALS,
10704
10571
  RestController,
10705
10572
  ServiceRegistry,
10706
10573
  SignalController,