@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.
package/dist/index.js CHANGED
@@ -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: uuid8,
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, uuid8, 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();
@@ -5423,10 +5390,14 @@ var SocketController = class _SocketController {
5423
5390
  const communicationTypes = this.normalizeCommunicationTypes(
5424
5391
  input.communicationTypes
5425
5392
  );
5393
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
5426
5394
  const serviceName = String(input.serviceName ?? "");
5427
5395
  const serviceTransportId = String(input.serviceTransportId ?? "");
5428
5396
  const serviceOrigin = String(input.serviceOrigin ?? "");
5429
5397
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
5398
+ if (!transportProtocols.includes("socket")) {
5399
+ return false;
5400
+ }
5430
5401
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
5431
5402
  CadenzaService.log(
5432
5403
  "Socket client setup skipped due to missing transport origin",
@@ -5452,7 +5423,7 @@ var SocketController = class _SocketController {
5452
5423
  serviceName,
5453
5424
  serviceTransportId,
5454
5425
  serviceOrigin,
5455
- transportProtocols: input.transportProtocols,
5426
+ transportProtocols,
5456
5427
  url
5457
5428
  });
5458
5429
  };
@@ -5473,7 +5444,7 @@ var SocketController = class _SocketController {
5473
5444
  serviceName,
5474
5445
  serviceTransportId,
5475
5446
  serviceOrigin,
5476
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
5447
+ transportProtocols,
5477
5448
  url,
5478
5449
  destroyed: false,
5479
5450
  updatedAt: Date.now()
@@ -6052,7 +6023,7 @@ var SocketController = class _SocketController {
6052
6023
  communicationTypes,
6053
6024
  serviceTransportId,
6054
6025
  serviceOrigin,
6055
- transportProtocols: input.transportProtocols,
6026
+ transportProtocols,
6056
6027
  handshakeData: {
6057
6028
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
6058
6029
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -6412,6 +6383,209 @@ var SignalController = class _SignalController {
6412
6383
  }
6413
6384
  };
6414
6385
 
6386
+ // src/runtime/RuntimeValidationController.ts
6387
+ var RUNTIME_VALIDATION_INTENTS = {
6388
+ getPolicy: "meta-runtime-validation-policy-get",
6389
+ setPolicy: "meta-runtime-validation-policy-set",
6390
+ replacePolicy: "meta-runtime-validation-policy-replace",
6391
+ clearPolicy: "meta-runtime-validation-policy-clear",
6392
+ listScopes: "meta-runtime-validation-scope-list",
6393
+ upsertScope: "meta-runtime-validation-scope-upsert",
6394
+ removeScope: "meta-runtime-validation-scope-remove",
6395
+ clearScopes: "meta-runtime-validation-scope-clear"
6396
+ };
6397
+ var RUNTIME_VALIDATION_SIGNALS = {
6398
+ setPolicyRequested: "meta.runtime_validation.policy_set_requested",
6399
+ replacePolicyRequested: "meta.runtime_validation.policy_replace_requested",
6400
+ clearPolicyRequested: "meta.runtime_validation.policy_clear_requested",
6401
+ upsertScopeRequested: "meta.runtime_validation.scope_upsert_requested",
6402
+ removeScopeRequested: "meta.runtime_validation.scope_remove_requested",
6403
+ clearScopesRequested: "meta.runtime_validation.scope_clear_requested",
6404
+ policyUpdated: "meta.runtime_validation.policy_updated",
6405
+ policyCleared: "meta.runtime_validation.policy_cleared",
6406
+ scopeUpserted: "meta.runtime_validation.scope_upserted",
6407
+ scopeRemoved: "meta.runtime_validation.scope_removed",
6408
+ scopesCleared: "meta.runtime_validation.scopes_cleared"
6409
+ };
6410
+ function normalizePolicyContext(ctx) {
6411
+ const source = ctx.policy && typeof ctx.policy === "object" && !Array.isArray(ctx.policy) ? ctx.policy : ctx;
6412
+ const policy = {};
6413
+ for (const key of [
6414
+ "metaInput",
6415
+ "metaOutput",
6416
+ "businessInput",
6417
+ "businessOutput",
6418
+ "warnOnMissingMetaInputSchema",
6419
+ "warnOnMissingMetaOutputSchema",
6420
+ "warnOnMissingBusinessInputSchema",
6421
+ "warnOnMissingBusinessOutputSchema"
6422
+ ]) {
6423
+ if (source[key] !== void 0) {
6424
+ policy[key] = source[key];
6425
+ }
6426
+ }
6427
+ return policy;
6428
+ }
6429
+ function normalizeScopeContext(ctx) {
6430
+ const source = ctx.scope && typeof ctx.scope === "object" && !Array.isArray(ctx.scope) ? ctx.scope : ctx;
6431
+ return {
6432
+ id: source.id,
6433
+ active: source.active,
6434
+ startTaskNames: Array.isArray(source.startTaskNames) ? source.startTaskNames : void 0,
6435
+ startRoutineNames: Array.isArray(source.startRoutineNames) ? source.startRoutineNames : void 0,
6436
+ policy: source.policy && typeof source.policy === "object" ? normalizePolicyContext({ policy: source.policy }) : void 0
6437
+ };
6438
+ }
6439
+ var RuntimeValidationController = class _RuntimeValidationController {
6440
+ static get instance() {
6441
+ if (!this._instance) {
6442
+ this._instance = new _RuntimeValidationController();
6443
+ }
6444
+ return this._instance;
6445
+ }
6446
+ constructor() {
6447
+ CadenzaService.defineIntent({
6448
+ name: RUNTIME_VALIDATION_INTENTS.getPolicy,
6449
+ description: "Get the active runtime validation policy.",
6450
+ input: { type: "object" },
6451
+ output: { type: "object" }
6452
+ });
6453
+ CadenzaService.defineIntent({
6454
+ name: RUNTIME_VALIDATION_INTENTS.setPolicy,
6455
+ description: "Merge fields into the active runtime validation policy.",
6456
+ input: { type: "object" },
6457
+ output: { type: "object" }
6458
+ });
6459
+ CadenzaService.defineIntent({
6460
+ name: RUNTIME_VALIDATION_INTENTS.replacePolicy,
6461
+ description: "Replace the active runtime validation policy.",
6462
+ input: { type: "object" },
6463
+ output: { type: "object" }
6464
+ });
6465
+ CadenzaService.defineIntent({
6466
+ name: RUNTIME_VALIDATION_INTENTS.clearPolicy,
6467
+ description: "Clear the active runtime validation policy.",
6468
+ input: { type: "object" },
6469
+ output: { type: "object" }
6470
+ });
6471
+ CadenzaService.defineIntent({
6472
+ name: RUNTIME_VALIDATION_INTENTS.listScopes,
6473
+ description: "List active runtime validation scopes.",
6474
+ input: { type: "object" },
6475
+ output: { type: "object" }
6476
+ });
6477
+ CadenzaService.defineIntent({
6478
+ name: RUNTIME_VALIDATION_INTENTS.upsertScope,
6479
+ description: "Create or update a runtime validation scope for targeted subflow validation.",
6480
+ input: { type: "object" },
6481
+ output: { type: "object" }
6482
+ });
6483
+ CadenzaService.defineIntent({
6484
+ name: RUNTIME_VALIDATION_INTENTS.removeScope,
6485
+ description: "Remove a runtime validation scope by id.",
6486
+ input: { type: "object" },
6487
+ output: { type: "object" }
6488
+ });
6489
+ CadenzaService.defineIntent({
6490
+ name: RUNTIME_VALIDATION_INTENTS.clearScopes,
6491
+ description: "Clear all runtime validation scopes.",
6492
+ input: { type: "object" },
6493
+ output: { type: "object" }
6494
+ });
6495
+ CadenzaService.createMetaTask("Get runtime validation policy", () => {
6496
+ return {
6497
+ policy: CadenzaService.getRuntimeValidationPolicy()
6498
+ };
6499
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.getPolicy);
6500
+ CadenzaService.createMetaTask(
6501
+ "Set runtime validation policy",
6502
+ (ctx, emit) => {
6503
+ const policy = normalizePolicyContext(ctx);
6504
+ const nextPolicy = CadenzaService.setRuntimeValidationPolicy(policy);
6505
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6506
+ policy: nextPolicy
6507
+ });
6508
+ return {
6509
+ policy: nextPolicy
6510
+ };
6511
+ },
6512
+ "Merges runtime validation policy fields at runtime."
6513
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.setPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.setPolicyRequested);
6514
+ CadenzaService.createMetaTask(
6515
+ "Replace runtime validation policy",
6516
+ (ctx, emit) => {
6517
+ const policy = normalizePolicyContext(ctx);
6518
+ const nextPolicy = CadenzaService.replaceRuntimeValidationPolicy(policy);
6519
+ emit(RUNTIME_VALIDATION_SIGNALS.policyUpdated, {
6520
+ policy: nextPolicy
6521
+ });
6522
+ return {
6523
+ policy: nextPolicy
6524
+ };
6525
+ },
6526
+ "Replaces runtime validation policy fields at runtime."
6527
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.replacePolicy).doOn(RUNTIME_VALIDATION_SIGNALS.replacePolicyRequested);
6528
+ CadenzaService.createMetaTask(
6529
+ "Clear runtime validation policy",
6530
+ (_ctx, emit) => {
6531
+ CadenzaService.clearRuntimeValidationPolicy();
6532
+ emit(RUNTIME_VALIDATION_SIGNALS.policyCleared, {});
6533
+ return {
6534
+ policy: CadenzaService.getRuntimeValidationPolicy()
6535
+ };
6536
+ },
6537
+ "Clears the runtime validation policy."
6538
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearPolicy).doOn(RUNTIME_VALIDATION_SIGNALS.clearPolicyRequested);
6539
+ CadenzaService.createMetaTask("List runtime validation scopes", () => {
6540
+ return {
6541
+ scopes: CadenzaService.getRuntimeValidationScopes()
6542
+ };
6543
+ }).respondsTo(RUNTIME_VALIDATION_INTENTS.listScopes);
6544
+ CadenzaService.createMetaTask(
6545
+ "Upsert runtime validation scope",
6546
+ (ctx, emit) => {
6547
+ const scope = normalizeScopeContext(ctx);
6548
+ const nextScope = CadenzaService.upsertRuntimeValidationScope(scope);
6549
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeUpserted, {
6550
+ scope: nextScope
6551
+ });
6552
+ return {
6553
+ scope: nextScope
6554
+ };
6555
+ },
6556
+ "Upserts a runtime validation scope for targeted debugging."
6557
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.upsertScope).doOn(RUNTIME_VALIDATION_SIGNALS.upsertScopeRequested);
6558
+ CadenzaService.createMetaTask(
6559
+ "Remove runtime validation scope",
6560
+ (ctx, emit) => {
6561
+ if (!ctx.id) {
6562
+ throw new Error("Runtime validation scope id is required");
6563
+ }
6564
+ CadenzaService.removeRuntimeValidationScope(ctx.id);
6565
+ emit(RUNTIME_VALIDATION_SIGNALS.scopeRemoved, {
6566
+ id: ctx.id
6567
+ });
6568
+ return {
6569
+ id: ctx.id,
6570
+ scopes: CadenzaService.getRuntimeValidationScopes()
6571
+ };
6572
+ },
6573
+ "Removes a runtime validation scope."
6574
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.removeScope).doOn(RUNTIME_VALIDATION_SIGNALS.removeScopeRequested);
6575
+ CadenzaService.createMetaTask(
6576
+ "Clear runtime validation scopes",
6577
+ (_ctx, emit) => {
6578
+ CadenzaService.clearRuntimeValidationScopes();
6579
+ emit(RUNTIME_VALIDATION_SIGNALS.scopesCleared, {});
6580
+ return {
6581
+ scopes: CadenzaService.getRuntimeValidationScopes()
6582
+ };
6583
+ },
6584
+ "Clears all runtime validation scopes."
6585
+ ).respondsTo(RUNTIME_VALIDATION_INTENTS.clearScopes).doOn(RUNTIME_VALIDATION_SIGNALS.clearScopesRequested);
6586
+ }
6587
+ };
6588
+
6415
6589
  // src/graph/controllers/registerActorSessionPersistence.ts
6416
6590
  var import_core3 = require("@cadenza.io/core");
6417
6591
  function registerActorSessionPersistenceTasks() {
@@ -9123,7 +9297,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
9123
9297
  }
9124
9298
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
9125
9299
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
9126
- const debugTable = shouldDebugSyncTable(tableName);
9127
9300
  if (!localInsertTask && !isCadenzaDBReady) {
9128
9301
  return void 0;
9129
9302
  }
@@ -9136,16 +9309,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9136
9309
  register: false,
9137
9310
  isHidden: true
9138
9311
  });
9139
- if (debugTable) {
9140
- logSyncDebug("insert_task_resolved", {
9141
- tableName,
9142
- localInsertTaskName: localInsertTask?.name ?? null,
9143
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
9144
- targetTaskName: targetTask.name,
9145
- queryData,
9146
- options
9147
- });
9148
- }
9149
9312
  const prepareExecutionTask = CadenzaService.createMetaTask(
9150
9313
  `Prepare graph sync insert for ${tableName}`,
9151
9314
  (ctx) => {
@@ -9156,12 +9319,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9156
9319
  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) {
9157
9320
  console.warn(
9158
9321
  "[CADENZA_SYNC_EMPTY_INSERT]",
9159
- summarizeSyncDebugValue({
9322
+ {
9160
9323
  tableName,
9161
9324
  queryData: originalQueryData,
9162
9325
  ctx,
9163
9326
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
9164
- })
9327
+ }
9165
9328
  );
9166
9329
  }
9167
9330
  return buildSyncExecutionEnvelope(
@@ -9175,37 +9338,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9175
9338
  isHidden: true
9176
9339
  }
9177
9340
  );
9178
- if (debugTable) {
9179
- prepareExecutionTask.then(
9180
- CadenzaService.createMetaTask(
9181
- `Log prepared graph sync insert execution for ${tableName}`,
9182
- (ctx) => {
9183
- if (tableName === "task") {
9184
- if (!shouldDebugTaskSyncPayload(ctx)) {
9185
- return ctx;
9186
- }
9187
- logSyncDebug("insert_prepare", {
9188
- tableName,
9189
- targetTaskName: targetTask.name,
9190
- payload: buildTaskSyncDebugPayload(ctx)
9191
- });
9192
- return ctx;
9193
- }
9194
- logSyncDebug("insert_prepare", {
9195
- tableName,
9196
- targetTaskName: targetTask.name,
9197
- ctx
9198
- });
9199
- return ctx;
9200
- },
9201
- `Logs prepared ${tableName} sync insert payloads.`,
9202
- {
9203
- register: false,
9204
- isHidden: true
9205
- }
9206
- )
9207
- );
9208
- }
9209
9341
  const finalizeExecutionTask = CadenzaService.createMetaTask(
9210
9342
  `Finalize graph sync insert for ${tableName}`,
9211
9343
  (ctx) => {
@@ -9216,25 +9348,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9216
9348
  ...ctx,
9217
9349
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
9218
9350
  };
9219
- if (debugTable) {
9220
- if (tableName === "task") {
9221
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
9222
- logSyncDebug("insert_finalize", {
9223
- tableName,
9224
- targetTaskName: targetTask.name,
9225
- success: didSyncInsertSucceed(normalizedContext),
9226
- payload: buildTaskSyncDebugPayload(normalizedContext)
9227
- });
9228
- }
9229
- } else {
9230
- logSyncDebug("insert_finalize", {
9231
- tableName,
9232
- targetTaskName: targetTask.name,
9233
- success: didSyncInsertSucceed(normalizedContext),
9234
- ctx: normalizedContext
9235
- });
9236
- }
9237
- }
9238
9351
  return normalizedContext;
9239
9352
  },
9240
9353
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -9269,139 +9382,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
9269
9382
  intent_registry: "intentRegistrys"
9270
9383
  };
9271
9384
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
9272
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
9273
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
9274
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
9275
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
9276
- "Query service_instance",
9277
- "Query service_instance_transport",
9278
- "Query intent_to_task_map",
9279
- "Query signal_to_task_map",
9280
- "Prepare for signal sync",
9281
- "Compile sync data and broadcast",
9282
- "Forward service instance sync",
9283
- "Forward service transport sync",
9284
- "Forward intent to task map sync",
9285
- "Forward signal to task map sync",
9286
- "Normalize telemetry ingest payload",
9287
- "Get telemetry session state",
9288
- "Normalize anomaly detect input",
9289
- "Read anomaly runtime session",
9290
- "Normalize prediction compute input",
9291
- "Normalize telemetry insert queryData"
9292
- ]);
9293
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
9294
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
9295
- "meta-service-registry-full-sync",
9296
- "runner-traffic-runtime-get",
9297
- "iot-telemetry-ingest",
9298
- "iot-telemetry-session-get",
9299
- "iot-anomaly-detect",
9300
- "iot-anomaly-runtime-get",
9301
- "iot-prediction-compute",
9302
- "iot-db-telemetry-insert",
9303
- "query-pg-cadenza-db-postgres-actor-service_instance",
9304
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
9305
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
9306
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
9307
- ]);
9308
- function shouldDebugSyncTable(tableName) {
9309
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
9310
- }
9311
- function shouldDebugSyncTaskName(taskName) {
9312
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
9313
- }
9314
- function shouldDebugSyncRoutineName(routineName) {
9315
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
9316
- }
9317
- function shouldDebugSyncIntentName(intentName) {
9318
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
9319
- }
9320
- function summarizeSyncDebugValue(value, depth = 0) {
9321
- if (value === null || value === void 0) {
9322
- return value;
9323
- }
9324
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
9325
- return value;
9326
- }
9327
- if (value instanceof Set) {
9328
- return {
9329
- __type: "Set",
9330
- size: value.size,
9331
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
9332
- };
9333
- }
9334
- if (value instanceof Map) {
9335
- return {
9336
- __type: "Map",
9337
- size: value.size
9338
- };
9339
- }
9340
- if (Array.isArray(value)) {
9341
- return {
9342
- __type: "Array",
9343
- length: value.length,
9344
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
9345
- };
9346
- }
9347
- if (typeof value === "object") {
9348
- if (depth >= 2) {
9349
- return "[object]";
9350
- }
9351
- const output = {};
9352
- const entries = Object.entries(value).filter(
9353
- ([key]) => ![
9354
- "functionString",
9355
- "tagIdGetter",
9356
- "__functionString",
9357
- "__getTagCallback",
9358
- "joinedContexts",
9359
- "task",
9360
- "taskInstance",
9361
- "tasks"
9362
- ].includes(key)
9363
- ).slice(0, 12);
9364
- for (const [key, nestedValue] of entries) {
9365
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
9366
- }
9367
- return output;
9368
- }
9369
- return String(value);
9370
- }
9371
- function logSyncDebug(event, payload) {
9372
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
9373
- }
9374
- function buildTaskSyncDebugPayload(ctx) {
9375
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
9376
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
9377
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
9378
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
9379
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
9380
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
9381
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
9382
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
9383
- return {
9384
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
9385
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
9386
- functionStringLength: functionString?.length ?? null,
9387
- tagIdGetterLength: tagIdGetter?.length ?? null,
9388
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
9389
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
9390
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
9391
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
9392
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
9393
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
9394
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
9395
- rowCount: ctx.rowCount ?? null,
9396
- errored: ctx.errored ?? false,
9397
- success: ctx.__success ?? null,
9398
- error: ctx.__error ?? null
9399
- };
9400
- }
9401
- function shouldDebugTaskSyncPayload(ctx) {
9402
- const payload = buildTaskSyncDebugPayload(ctx);
9403
- return shouldDebugSyncTaskName(payload.taskName);
9404
- }
9405
9385
  function resolveSyncQueryRows(ctx, tableName) {
9406
9386
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
9407
9387
  const rows = ctx?.[resultKey];
@@ -9848,16 +9828,6 @@ var GraphSyncController = class _GraphSyncController {
9848
9828
  if (!nextTask?.registered) {
9849
9829
  continue;
9850
9830
  }
9851
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
9852
- logSyncDebug("task_to_routine_split", {
9853
- routineName: routine.name,
9854
- routineVersion: routine.version,
9855
- taskName: nextTask.name,
9856
- taskVersion: nextTask.version,
9857
- serviceName: serviceName2,
9858
- registered: nextTask.registered
9859
- });
9860
- }
9861
9831
  yield {
9862
9832
  __syncing: ctx.__syncing,
9863
9833
  data: {
@@ -10003,20 +9973,6 @@ var GraphSyncController = class _GraphSyncController {
10003
9973
  if (task.registered) continue;
10004
9974
  const { __functionString, __getTagCallback } = task.export();
10005
9975
  this.tasksSynced = false;
10006
- if (shouldDebugSyncTaskName(task.name)) {
10007
- logSyncDebug("task_registration_split", {
10008
- taskName: task.name,
10009
- taskVersion: task.version,
10010
- serviceName: serviceName2,
10011
- register: task.register,
10012
- registered: task.registered,
10013
- hidden: task.hidden,
10014
- exportFunctionLength: __functionString?.length ?? null,
10015
- exportTagGetterLength: __getTagCallback?.length ?? null,
10016
- observedSignals: Array.from(task.observedSignals),
10017
- handledIntents: Array.from(task.handlesIntents)
10018
- });
10019
- }
10020
9976
  yield {
10021
9977
  __syncing: ctx.__syncing,
10022
9978
  data: {
@@ -10071,13 +10027,6 @@ var GraphSyncController = class _GraphSyncController {
10071
10027
  const registerTaskTask = CadenzaService.createMetaTask(
10072
10028
  "Record registration",
10073
10029
  (ctx, emit) => {
10074
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
10075
- logSyncDebug("task_registration_result", {
10076
- taskName: ctx.__taskName,
10077
- success: didSyncInsertSucceed(ctx),
10078
- ctx
10079
- });
10080
- }
10081
10030
  if (!didSyncInsertSucceed(ctx)) {
10082
10031
  return;
10083
10032
  }
@@ -10103,16 +10052,6 @@ var GraphSyncController = class _GraphSyncController {
10103
10052
  "Prepare created task for immediate sync",
10104
10053
  (ctx) => {
10105
10054
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
10106
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
10107
- logSyncDebug("task_created_for_immediate_sync", {
10108
- incomingTaskName: ctx?.data?.name ?? null,
10109
- resolvedTaskName: task?.name ?? null,
10110
- exists: Boolean(task),
10111
- hidden: task?.hidden ?? null,
10112
- register: task?.register ?? null,
10113
- registered: task?.registered ?? null
10114
- });
10115
- }
10116
10055
  if (!task || task.hidden || !task.register || task.registered) {
10117
10056
  return false;
10118
10057
  }
@@ -10299,17 +10238,6 @@ var GraphSyncController = class _GraphSyncController {
10299
10238
  if (!isGlobal) {
10300
10239
  continue;
10301
10240
  }
10302
- if (shouldDebugSyncTaskName(task.name)) {
10303
- logSyncDebug("signal_to_task_map_split", {
10304
- taskName: task.name,
10305
- signalName: _signal,
10306
- rawSignal: signal,
10307
- serviceName: serviceName2,
10308
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
10309
- _signal
10310
- )?.registered
10311
- });
10312
- }
10313
10241
  yield {
10314
10242
  __syncing: ctx.__syncing,
10315
10243
  data: {
@@ -10420,21 +10348,6 @@ var GraphSyncController = class _GraphSyncController {
10420
10348
  }
10421
10349
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
10422
10350
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
10423
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
10424
- if (shouldDebugTask) {
10425
- logSyncDebug("intent_map_task_state", {
10426
- taskName: task.name,
10427
- taskVersion: task.version,
10428
- serviceName: serviceName2,
10429
- registered: task.registered,
10430
- register: task.register,
10431
- hidden: task.hidden,
10432
- handledIntents: Array.from(task.handlesIntents),
10433
- registeredIntents: Array.from(task.__registeredIntents),
10434
- tasksSynced: this.tasksSynced,
10435
- intentsSynced: this.intentsSynced
10436
- });
10437
- }
10438
10351
  let emittedCount = 0;
10439
10352
  for (const intent of task.handlesIntents) {
10440
10353
  if (task.__registeredIntents.has(intent)) continue;
@@ -10460,15 +10373,6 @@ var GraphSyncController = class _GraphSyncController {
10460
10373
  if (!intentDefinition) {
10461
10374
  continue;
10462
10375
  }
10463
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
10464
- logSyncDebug("intent_to_task_map_split", {
10465
- taskName: task.name,
10466
- taskVersion: task.version,
10467
- intentName: intent,
10468
- serviceName: serviceName2,
10469
- intentDefinition
10470
- });
10471
- }
10472
10376
  yield {
10473
10377
  __syncing: ctx.__syncing,
10474
10378
  data: {
@@ -10489,15 +10393,6 @@ var GraphSyncController = class _GraphSyncController {
10489
10393
  };
10490
10394
  emittedCount += 1;
10491
10395
  }
10492
- if (shouldDebugTask && emittedCount === 0) {
10493
- logSyncDebug("intent_map_task_noop", {
10494
- taskName: task.name,
10495
- taskVersion: task.version,
10496
- serviceName: serviceName2,
10497
- handledIntents: Array.from(task.handlesIntents),
10498
- registeredIntents: Array.from(task.__registeredIntents)
10499
- });
10500
- }
10501
10396
  return emittedCount > 0;
10502
10397
  }.bind(this)
10503
10398
  );
@@ -10507,13 +10402,6 @@ var GraphSyncController = class _GraphSyncController {
10507
10402
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
10508
10403
  return false;
10509
10404
  }
10510
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10511
- logSyncDebug("intent_definition_prepare", {
10512
- taskName: ctx.__taskName,
10513
- intentName: ctx.__intent,
10514
- intentDefinition: ctx.__intentDefinition
10515
- });
10516
- }
10517
10405
  return {
10518
10406
  ...ctx,
10519
10407
  data: ctx.__intentDefinition
@@ -10526,13 +10414,6 @@ var GraphSyncController = class _GraphSyncController {
10526
10414
  if (!ctx.__intentMapData) {
10527
10415
  return false;
10528
10416
  }
10529
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10530
- logSyncDebug("intent_map_payload_restore", {
10531
- taskName: ctx.__taskName,
10532
- intentName: ctx.__intent,
10533
- intentMapData: ctx.__intentMapData
10534
- });
10535
- }
10536
10417
  return {
10537
10418
  ...ctx,
10538
10419
  data: ctx.__intentMapData
@@ -11354,6 +11235,13 @@ var CadenzaService = class {
11354
11235
  if (this.isBootstrapped) return;
11355
11236
  this.isBootstrapped = true;
11356
11237
  import_core5.default.bootstrap();
11238
+ import_core5.default.setRuntimeInquiryDelegate(
11239
+ (inquiry, context, options) => this.inquire(
11240
+ inquiry,
11241
+ context,
11242
+ options ?? {}
11243
+ )
11244
+ );
11357
11245
  this.signalBroker = import_core5.default.signalBroker;
11358
11246
  this.inquiryBroker = import_core5.default.inquiryBroker;
11359
11247
  this.runner = import_core5.default.runner;
@@ -11362,7 +11250,7 @@ var CadenzaService = class {
11362
11250
  this.serviceRegistry = ServiceRegistry.instance;
11363
11251
  RestController.instance;
11364
11252
  SocketController.instance;
11365
- console.log("BOOTSTRAPPED");
11253
+ RuntimeValidationController.instance;
11366
11254
  }
11367
11255
  static ensureTransportControllers(isFrontend) {
11368
11256
  if (!isFrontend) {
@@ -11501,6 +11389,38 @@ var CadenzaService = class {
11501
11389
  this.inquiryBroker?.addIntent(intent);
11502
11390
  return intent;
11503
11391
  }
11392
+ static getRuntimeValidationPolicy() {
11393
+ this.bootstrap();
11394
+ return import_core5.default.getRuntimeValidationPolicy();
11395
+ }
11396
+ static setRuntimeValidationPolicy(policy = {}) {
11397
+ this.bootstrap();
11398
+ return import_core5.default.setRuntimeValidationPolicy(policy);
11399
+ }
11400
+ static replaceRuntimeValidationPolicy(policy = {}) {
11401
+ this.bootstrap();
11402
+ return import_core5.default.replaceRuntimeValidationPolicy(policy);
11403
+ }
11404
+ static clearRuntimeValidationPolicy() {
11405
+ this.bootstrap();
11406
+ import_core5.default.clearRuntimeValidationPolicy();
11407
+ }
11408
+ static getRuntimeValidationScopes() {
11409
+ this.bootstrap();
11410
+ return import_core5.default.getRuntimeValidationScopes();
11411
+ }
11412
+ static upsertRuntimeValidationScope(scope) {
11413
+ this.bootstrap();
11414
+ return import_core5.default.upsertRuntimeValidationScope(scope);
11415
+ }
11416
+ static removeRuntimeValidationScope(id) {
11417
+ this.bootstrap();
11418
+ import_core5.default.removeRuntimeValidationScope(id);
11419
+ }
11420
+ static clearRuntimeValidationScopes() {
11421
+ this.bootstrap();
11422
+ import_core5.default.clearRuntimeValidationScopes();
11423
+ }
11504
11424
  static getInquiryResponderDescriptor(task) {
11505
11425
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
11506
11426
  }
@@ -12261,7 +12181,6 @@ var CadenzaService = class {
12261
12181
  }
12262
12182
  });
12263
12183
  });
12264
- console.log("Creating service...");
12265
12184
  const initContext = {
12266
12185
  data: {
12267
12186
  name: serviceName,
@@ -12294,10 +12213,13 @@ var CadenzaService = class {
12294
12213
  }).doOn("meta.fetch.handshake_complete");
12295
12214
  } else {
12296
12215
  this.emit("meta.create_service_requested", initContext);
12297
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
12298
- this.createSignalTransmissionTask(
12299
- "global.meta.cadenza_db.gathered_sync_data",
12300
- ctx.serviceName
12216
+ this.createMetaTask("Create signal transmission for sync", (ctx, emit) => {
12217
+ emit(
12218
+ "meta.service_registry.gathered_sync_transmission_reconcile_requested",
12219
+ {
12220
+ serviceName: ctx.serviceName,
12221
+ __reason: "handshake"
12222
+ }
12301
12223
  );
12302
12224
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
12303
12225
  }
@@ -13287,6 +13209,8 @@ var index_default = CadenzaService;
13287
13209
  EphemeralTask,
13288
13210
  GraphMetadataController,
13289
13211
  GraphRoutine,
13212
+ RUNTIME_VALIDATION_INTENTS,
13213
+ RUNTIME_VALIDATION_SIGNALS,
13290
13214
  RestController,
13291
13215
  ServiceRegistry,
13292
13216
  SignalController,