@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.
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
  }
@@ -727,6 +736,7 @@ function hasSignificantRuntimeStatusChange(previous, next) {
727
736
  // src/registry/ServiceRegistry.ts
728
737
  var META_SERVICE_REGISTRY_FULL_SYNC_INTENT = "meta-service-registry-full-sync";
729
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";
730
740
  var META_RUNTIME_STATUS_HEARTBEAT_TICK_SIGNAL = "meta.service_registry.runtime_status.heartbeat_tick";
731
741
  var META_RUNTIME_STATUS_MONITOR_TICK_SIGNAL = "meta.service_registry.runtime_status.monitor_tick";
732
742
  var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
@@ -814,18 +824,6 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
814
824
  }
815
825
  return result;
816
826
  }
817
- function shouldTraceIotDbRegistryPath(localServiceName, targetServiceName) {
818
- return targetServiceName === "IotDbService" && localServiceName !== "IotDbService";
819
- }
820
- function summarizeTransportDescriptors(transports) {
821
- return transports.map((transport) => ({
822
- uuid: transport.uuid,
823
- serviceInstanceId: transport.serviceInstanceId,
824
- role: transport.role,
825
- origin: transport.origin,
826
- protocols: transport.protocols
827
- }));
828
- }
829
827
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
830
828
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
831
829
  tableName,
@@ -842,6 +840,10 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
842
840
  const nextQueryData = buildServiceRegistryInsertQueryData(ctx, queryData);
843
841
  const delegationContext = ensureDelegationContextMetadata({
844
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,
845
847
  queryData: nextQueryData
846
848
  });
847
849
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
@@ -965,6 +967,7 @@ var ServiceRegistry = class _ServiceRegistry {
965
967
  this.deputies = /* @__PURE__ */ new Map();
966
968
  this.remoteSignals = /* @__PURE__ */ new Map();
967
969
  this.remoteIntents = /* @__PURE__ */ new Map();
970
+ this.gatheredSyncTransmissionServices = /* @__PURE__ */ new Set();
968
971
  this.remoteIntentDeputiesByKey = /* @__PURE__ */ new Map();
969
972
  this.remoteIntentDeputiesByTask = /* @__PURE__ */ new Map();
970
973
  this.dependeesByService = /* @__PURE__ */ new Map();
@@ -1216,21 +1219,6 @@ var ServiceRegistry = class _ServiceRegistry {
1216
1219
  trackedInstance.acceptingWork = snapshot.acceptingWork;
1217
1220
  trackedInstance.reportedAt = trackedInstance.reportedAt ?? (/* @__PURE__ */ new Date()).toISOString();
1218
1221
  }
1219
- if (shouldTraceIotDbRegistryPath(this.serviceName, serviceName)) {
1220
- console.log("[CADENZA_REGISTRY_DEBUG] handle_instance_update", {
1221
- localServiceName: this.serviceName,
1222
- localServiceInstanceId: this.serviceInstanceId,
1223
- targetServiceName: serviceName,
1224
- targetServiceInstanceId: uuid8,
1225
- existingInstance: !!existing,
1226
- deleted,
1227
- remoteInterest: this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName),
1228
- hasDeputies: this.deputies.has(serviceName),
1229
- hasRemoteIntents: this.remoteIntents.has(serviceName),
1230
- hasRemoteSignals: this.remoteSignals.has(serviceName),
1231
- transports: trackedInstance ? summarizeTransportDescriptors(trackedInstance.transports) : []
1232
- });
1233
- }
1234
1222
  if (!serviceInstance.isBootstrapPlaceholder) {
1235
1223
  this.reconcileBootstrapPlaceholderInstance(serviceName, uuid8, emit);
1236
1224
  }
@@ -1243,7 +1231,8 @@ var ServiceRegistry = class _ServiceRegistry {
1243
1231
  if (this.deputies.has(serviceName) || this.remoteIntents.has(serviceName) || this.remoteSignals.has(serviceName)) {
1244
1232
  const connected = this.ensureDependeeClientForInstance(
1245
1233
  trackedInstance,
1246
- emit
1234
+ emit,
1235
+ ctx
1247
1236
  );
1248
1237
  if (!connected) {
1249
1238
  emit("meta.service_registry.routeable_transport_missing", {
@@ -1286,27 +1275,6 @@ var ServiceRegistry = class _ServiceRegistry {
1286
1275
  break;
1287
1276
  }
1288
1277
  }
1289
- if (shouldTraceIotDbRegistryPath(
1290
- this.serviceName,
1291
- ownerInstance?.serviceName ?? ctx.serviceName ?? void 0
1292
- )) {
1293
- console.log("[CADENZA_REGISTRY_DEBUG] handle_transport_update", {
1294
- localServiceName: this.serviceName,
1295
- localServiceInstanceId: this.serviceInstanceId,
1296
- transport: {
1297
- uuid: transport.uuid,
1298
- serviceInstanceId: transport.serviceInstanceId,
1299
- role: transport.role,
1300
- origin: transport.origin,
1301
- protocols: transport.protocols,
1302
- deleted: transport.deleted
1303
- },
1304
- ownerFound: !!ownerInstance,
1305
- ownerServiceName: ownerInstance?.serviceName,
1306
- ownerInstanceId: ownerInstance?.uuid,
1307
- ownerTransports: ownerInstance ? summarizeTransportDescriptors(ownerInstance.transports) : []
1308
- });
1309
- }
1310
1278
  if (!ownerInstance) {
1311
1279
  return false;
1312
1280
  }
@@ -1332,7 +1300,7 @@ var ServiceRegistry = class _ServiceRegistry {
1332
1300
  if (!hasRemoteInterest) {
1333
1301
  return true;
1334
1302
  }
1335
- this.ensureDependeeClientForInstance(ownerInstance, emit);
1303
+ this.ensureDependeeClientForInstance(ownerInstance, emit, ctx);
1336
1304
  return true;
1337
1305
  },
1338
1306
  "Handles service transport updates independently from instance rows."
@@ -1362,29 +1330,12 @@ var ServiceRegistry = class _ServiceRegistry {
1362
1330
  "Tracks remote dependency instances for runtime heartbeat monitoring."
1363
1331
  ).doOn("meta.service_registry.dependee_registered");
1364
1332
  const normalizeServiceInstancesFromSync = (ctx) => this.normalizeServiceInstancesFromSync(ctx);
1365
- const getLocalTraceContext = () => ({
1366
- localServiceName: this.serviceName,
1367
- localServiceInstanceId: this.serviceInstanceId
1368
- });
1369
1333
  CadenzaService.createMetaTask("Split service instances", function* (ctx) {
1370
1334
  const serviceInstances = normalizeServiceInstancesFromSync(ctx);
1371
1335
  if (serviceInstances.length === 0) {
1372
1336
  return;
1373
1337
  }
1374
1338
  for (const serviceInstance of serviceInstances) {
1375
- const { localServiceName, localServiceInstanceId } = getLocalTraceContext();
1376
- if (shouldTraceIotDbRegistryPath(
1377
- localServiceName,
1378
- serviceInstance.serviceName
1379
- )) {
1380
- console.log("[CADENZA_REGISTRY_DEBUG] split_service_instance", {
1381
- localServiceName,
1382
- localServiceInstanceId,
1383
- targetServiceName: serviceInstance.serviceName,
1384
- targetServiceInstanceId: serviceInstance.uuid,
1385
- transports: summarizeTransportDescriptors(serviceInstance.transports)
1386
- });
1387
- }
1388
1339
  yield { serviceInstance };
1389
1340
  }
1390
1341
  }).doOn(
@@ -1430,6 +1381,15 @@ var ServiceRegistry = class _ServiceRegistry {
1430
1381
  },
1431
1382
  "Handles registration of remote signals"
1432
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
+ );
1433
1393
  this.handleGlobalIntentRegistrationTask = CadenzaService.createMetaTask(
1434
1394
  "Handle global intent registration",
1435
1395
  (ctx, emit) => {
@@ -1439,34 +1399,20 @@ var ServiceRegistry = class _ServiceRegistry {
1439
1399
  if (!a.deleted && b.deleted) return 1;
1440
1400
  return 0;
1441
1401
  });
1442
- if (ctx.__signalName === CADENZA_DB_GATHERED_SYNC_SIGNAL) {
1443
- const relevantIntentNames = sorted.filter(
1444
- (map) => map.intentName === META_SERVICE_REGISTRY_FULL_SYNC_INTENT || map.intentName === "Query service_instance" || map.intentName === "Query service_instance_transport"
1445
- ).map((map) => ({
1446
- intentName: map.intentName,
1447
- serviceName: map.serviceName,
1448
- taskName: map.taskName,
1449
- taskVersion: map.taskVersion,
1450
- deleted: !!map.deleted
1451
- }));
1452
- console.log("[CADENZA_SYNC_DEBUG] gathered_sync_intent_registration", {
1453
- localServiceName: this.serviceName,
1454
- localServiceInstanceId: this.serviceInstanceId,
1455
- signalName: ctx.__signalName,
1456
- totalIntentMaps: sorted.length,
1457
- relevantIntentNames
1458
- });
1459
- }
1460
1402
  for (const map of sorted) {
1461
- if (map.deleted) {
1462
- this.unregisterRemoteIntentDeputy(map);
1463
- 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;
1464
1415
  }
1465
- CadenzaService.inquiryBroker.addIntent({
1466
- name: map.intentName
1467
- });
1468
- this.registerRemoteIntentDeputy(map);
1469
- this.ensureDependeeClientsForService(map.serviceName, emit);
1470
1416
  }
1471
1417
  return true;
1472
1418
  },
@@ -1618,7 +1564,7 @@ var ServiceRegistry = class _ServiceRegistry {
1618
1564
  {
1619
1565
  uuid: report.transportId,
1620
1566
  serviceInstanceId: report.serviceInstanceId,
1621
- role: this.getRoutingTransportRole(),
1567
+ role: report.transportRole ?? this.getRoutingTransportRole(),
1622
1568
  origin: report.transportOrigin,
1623
1569
  protocols: report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"],
1624
1570
  securityProfile: null,
@@ -1660,21 +1606,6 @@ var ServiceRegistry = class _ServiceRegistry {
1660
1606
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1661
1607
  inquiryResult
1662
1608
  );
1663
- if (shouldTraceIotDbRegistryPath(this.serviceName, "IotDbService")) {
1664
- const tracedInstances = serviceInstances.filter((instance) => instance.serviceName === "IotDbService").map((instance) => ({
1665
- uuid: instance.uuid,
1666
- isActive: instance.isActive,
1667
- isNonResponsive: instance.isNonResponsive,
1668
- isBlocked: instance.isBlocked,
1669
- transports: summarizeTransportDescriptors(instance.transports)
1670
- }));
1671
- console.log("[CADENZA_REGISTRY_DEBUG] full_sync_instances", {
1672
- localServiceName: this.serviceName,
1673
- localServiceInstanceId: this.serviceInstanceId,
1674
- totalServiceInstances: serviceInstances.length,
1675
- tracedInstances
1676
- });
1677
- }
1678
1609
  return {
1679
1610
  ...ctx,
1680
1611
  signalToTaskMaps,
@@ -1771,44 +1702,6 @@ var ServiceRegistry = class _ServiceRegistry {
1771
1702
  let retries = __retries ?? 0;
1772
1703
  let triedInstances = __triedInstances ?? [];
1773
1704
  const preferredRole = this.getRoutingTransportRole();
1774
- const allInstances = this.instances.get(__serviceName) ?? [];
1775
- const candidateDiagnostics = shouldTraceIotDbRegistryPath(
1776
- this.serviceName,
1777
- __serviceName ?? void 0
1778
- ) ? allInstances.map((instance) => ({
1779
- uuid: instance.uuid,
1780
- isActive: instance.isActive,
1781
- isNonResponsive: instance.isNonResponsive,
1782
- isBlocked: instance.isBlocked,
1783
- isFrontend: instance.isFrontend,
1784
- transports: summarizeTransportDescriptors(instance.transports),
1785
- selectedTransport: instance.isFrontend ? null : this.selectTransportForInstance(
1786
- instance,
1787
- context,
1788
- preferredRole
1789
- ) ? {
1790
- uuid: this.selectTransportForInstance(
1791
- instance,
1792
- context,
1793
- preferredRole
1794
- ).uuid,
1795
- role: this.selectTransportForInstance(
1796
- instance,
1797
- context,
1798
- preferredRole
1799
- ).role,
1800
- origin: this.selectTransportForInstance(
1801
- instance,
1802
- context,
1803
- preferredRole
1804
- ).origin,
1805
- protocols: this.selectTransportForInstance(
1806
- instance,
1807
- context,
1808
- preferredRole
1809
- ).protocols
1810
- } : null
1811
- })) : void 0;
1812
1705
  const instances = this.instances.get(__serviceName)?.filter((instance) => {
1813
1706
  if (targetServiceInstanceId && instance.uuid !== targetServiceInstanceId) {
1814
1707
  return false;
@@ -1841,20 +1734,6 @@ var ServiceRegistry = class _ServiceRegistry {
1841
1734
  }
1842
1735
  return (a.numberOfRunningGraphs ?? 0) - (b.numberOfRunningGraphs ?? 0);
1843
1736
  });
1844
- if (candidateDiagnostics) {
1845
- console.log("[CADENZA_REGISTRY_DEBUG] get_balanced_instance", {
1846
- localServiceName: this.serviceName,
1847
- localServiceInstanceId: this.serviceInstanceId,
1848
- targetServiceName: __serviceName,
1849
- preferredRole,
1850
- useSocket: this.useSocket,
1851
- targetServiceInstanceId,
1852
- retries,
1853
- triedInstances,
1854
- candidateDiagnostics,
1855
- filteredInstanceIds: instances?.map((instance) => instance.uuid) ?? []
1856
- });
1857
- }
1858
1737
  if (!instances || instances.length === 0 || retries > this.retryCount) {
1859
1738
  context.errored = true;
1860
1739
  context.__error = this.isFrontend && preferredRole === "public" ? `No public transport available for ${__serviceName}.` : `No routeable ${preferredRole} transport available for ${__serviceName}. Retries: ${retries}.`;
@@ -2112,6 +1991,7 @@ var ServiceRegistry = class _ServiceRegistry {
2112
1991
  serviceName: report.serviceName,
2113
1992
  serviceInstanceId: report.serviceInstanceId,
2114
1993
  transportId: report.transportId,
1994
+ transportRole: report.transportRole,
2115
1995
  transportOrigin: report.transportOrigin,
2116
1996
  transportProtocols: report.transportProtocols,
2117
1997
  isFrontend: report.isFrontend,
@@ -2728,6 +2608,64 @@ var ServiceRegistry = class _ServiceRegistry {
2728
2608
  (instance) => !!instance && !!instance.isActive && !instance.isNonResponsive && !instance.isBlocked
2729
2609
  );
2730
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
+ }
2731
2669
  registerRemoteIntentDeputy(map) {
2732
2670
  if (!this.serviceName || map.serviceName === this.serviceName) {
2733
2671
  return;
@@ -2970,38 +2908,18 @@ var ServiceRegistry = class _ServiceRegistry {
2970
2908
  }
2971
2909
  return communicationTypes;
2972
2910
  }
2973
- ensureDependeeClientForInstance(instance, emit) {
2911
+ ensureDependeeClientForInstance(instance, emit, ctx) {
2974
2912
  if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
2975
2913
  return false;
2976
2914
  }
2977
2915
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
2978
2916
  return false;
2979
2917
  }
2980
- const transport = this.getRouteableTransport(
2918
+ const transport = this.selectTransportForInstance(
2981
2919
  instance,
2982
- this.useSocket ? "socket" : "rest"
2983
- );
2984
- if (shouldTraceIotDbRegistryPath(this.serviceName, instance.serviceName)) {
2985
- console.log("[CADENZA_REGISTRY_DEBUG] ensure_dependee_client_for_instance", {
2986
- localServiceName: this.serviceName,
2987
- localServiceInstanceId: this.serviceInstanceId,
2988
- targetServiceName: instance.serviceName,
2989
- targetServiceInstanceId: instance.uuid,
2990
- useSocket: this.useSocket,
2991
- routeableRole: this.getRoutingTransportRole(),
2992
- hasDeputies: this.deputies.has(instance.serviceName),
2993
- hasRemoteIntents: this.remoteIntents.has(instance.serviceName),
2994
- hasRemoteSignals: this.remoteSignals.has(instance.serviceName),
2995
- clientCreatedTransportIds: instance.clientCreatedTransportIds ?? [],
2996
- transports: summarizeTransportDescriptors(instance.transports),
2997
- selectedTransport: transport ? {
2998
- uuid: transport.uuid,
2999
- role: transport.role,
3000
- origin: transport.origin,
3001
- protocols: transport.protocols
3002
- } : null
3003
- });
3004
- }
2920
+ ctx ?? {},
2921
+ this.getRoutingTransportRole()
2922
+ );
3005
2923
  if (!transport || this.hasTransportClientCreated(instance, transport.uuid)) {
3006
2924
  return false;
3007
2925
  }
@@ -3018,9 +2936,9 @@ var ServiceRegistry = class _ServiceRegistry {
3018
2936
  this.markTransportClientCreated(instance, transport.uuid);
3019
2937
  return true;
3020
2938
  }
3021
- ensureDependeeClientsForService(serviceName, emit) {
2939
+ ensureDependeeClientsForService(serviceName, emit, ctx) {
3022
2940
  for (const instance of this.instances.get(serviceName) ?? []) {
3023
- this.ensureDependeeClientForInstance(instance, emit);
2941
+ this.ensureDependeeClientForInstance(instance, emit, ctx);
3024
2942
  }
3025
2943
  }
3026
2944
  hasTransportClientCreated(instance, transportId) {
@@ -3079,6 +2997,10 @@ var ServiceRegistry = class _ServiceRegistry {
3079
2997
  if (!instances?.length) {
3080
2998
  return;
3081
2999
  }
3000
+ const resolvedInstance = instances.find(
3001
+ (instance) => instance.uuid === resolvedInstanceId
3002
+ );
3003
+ const frontendRoutingRole = this.isFrontend ? this.getRoutingTransportRole() : null;
3082
3004
  const placeholders = instances.filter(
3083
3005
  (instance) => instance.uuid !== resolvedInstanceId && instance.isBootstrapPlaceholder
3084
3006
  );
@@ -3090,7 +3012,33 @@ var ServiceRegistry = class _ServiceRegistry {
3090
3012
  const requiredForReadiness = this.readinessDependeeByInstance.has(
3091
3013
  placeholder.uuid
3092
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
+ }
3093
3038
  for (const transport of placeholder.transports) {
3039
+ if (preservedTransportIds.has(transport.uuid)) {
3040
+ continue;
3041
+ }
3094
3042
  const transportKey = buildTransportClientKey(transport);
3095
3043
  emit(`meta.socket_shutdown_requested:${transportKey}`, {});
3096
3044
  emit(`meta.fetch.destroy_requested:${transportKey}`, {});
@@ -3211,6 +3159,7 @@ var ServiceRegistry = class _ServiceRegistry {
3211
3159
  return null;
3212
3160
  }
3213
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;
3214
3163
  const transportOrigin = ctx.transportOrigin ?? ctx.serviceOrigin ?? ctx.serviceTransport?.origin ?? void 0;
3215
3164
  const transportProtocols = Array.isArray(
3216
3165
  ctx.transportProtocols ?? ctx.serviceTransport?.protocols
@@ -3236,6 +3185,7 @@ var ServiceRegistry = class _ServiceRegistry {
3236
3185
  serviceName,
3237
3186
  serviceInstanceId,
3238
3187
  transportId: typeof transportId === "string" && transportId.trim().length > 0 ? transportId : void 0,
3188
+ transportRole: transportRole === "internal" || transportRole === "public" ? transportRole : void 0,
3239
3189
  transportOrigin: typeof transportOrigin === "string" && transportOrigin.trim().length > 0 ? transportOrigin : void 0,
3240
3190
  transportProtocols: transportProtocols && transportProtocols.length > 0 ? Array.from(new Set(transportProtocols)) : void 0,
3241
3191
  isFrontend: typeof ctx.isFrontend === "boolean" ? ctx.isFrontend : typeof ctx.serviceInstance?.isFrontend === "boolean" ? ctx.serviceInstance.isFrontend : void 0,
@@ -3258,13 +3208,16 @@ var ServiceRegistry = class _ServiceRegistry {
3258
3208
  const protocols = report.transportProtocols && report.transportProtocols.length > 0 ? report.transportProtocols : ["rest", "socket"];
3259
3209
  const existingTransport = this.getTransportById(instance, report.transportId);
3260
3210
  if (existingTransport) {
3211
+ if (report.transportRole) {
3212
+ existingTransport.role = report.transportRole;
3213
+ }
3261
3214
  existingTransport.origin = report.transportOrigin;
3262
3215
  existingTransport.protocols = protocols;
3263
3216
  } else {
3264
3217
  instance.transports.push({
3265
3218
  uuid: report.transportId,
3266
3219
  serviceInstanceId: report.serviceInstanceId,
3267
- role: this.getRoutingTransportRole(),
3220
+ role: report.transportRole ?? this.getRoutingTransportRole(),
3268
3221
  origin: report.transportOrigin,
3269
3222
  protocols,
3270
3223
  securityProfile: null,
@@ -3310,24 +3263,18 @@ var ServiceRegistry = class _ServiceRegistry {
3310
3263
  localInstance.isBlocked
3311
3264
  );
3312
3265
  const reportedAt = (/* @__PURE__ */ new Date()).toISOString();
3266
+ const transport = this.getRouteableTransport(
3267
+ localInstance,
3268
+ this.useSocket ? "socket" : "rest",
3269
+ "internal"
3270
+ );
3313
3271
  const report = {
3314
3272
  serviceName: this.serviceName,
3315
3273
  serviceInstanceId: this.serviceInstanceId,
3316
- transportId: this.getRouteableTransport(
3317
- localInstance,
3318
- this.useSocket ? "socket" : "rest",
3319
- "internal"
3320
- )?.uuid ?? void 0,
3321
- transportOrigin: this.getRouteableTransport(
3322
- localInstance,
3323
- this.useSocket ? "socket" : "rest",
3324
- "internal"
3325
- )?.origin ?? void 0,
3326
- transportProtocols: this.getRouteableTransport(
3327
- localInstance,
3328
- this.useSocket ? "socket" : "rest",
3329
- "internal"
3330
- )?.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,
3331
3278
  isFrontend: localInstance.isFrontend,
3332
3279
  reportedAt,
3333
3280
  state: snapshot.state,
@@ -3691,6 +3638,7 @@ var ServiceRegistry = class _ServiceRegistry {
3691
3638
  this.deputies.clear();
3692
3639
  this.remoteSignals.clear();
3693
3640
  this.remoteIntents.clear();
3641
+ this.gatheredSyncTransmissionServices.clear();
3694
3642
  this.remoteIntentDeputiesByKey.clear();
3695
3643
  this.remoteIntentDeputiesByTask.clear();
3696
3644
  this.dependeesByService.clear();
@@ -4049,19 +3997,6 @@ var RestController = class _RestController {
4049
3997
  let ctx2;
4050
3998
  try {
4051
3999
  ctx2 = req.body;
4052
- if (ctx2?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
4053
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_rest", {
4054
- localServiceName: CadenzaService.serviceRegistry.serviceName,
4055
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
4056
- signalName: ctx2.__signalName,
4057
- intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
4058
- signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
4059
- serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
4060
- serviceInstanceTransports: Array.isArray(
4061
- ctx2.serviceInstanceTransports
4062
- ) ? ctx2.serviceInstanceTransports.length : 0
4063
- });
4064
- }
4065
4000
  if (!CadenzaService.signalBroker.listObservedSignals().includes(ctx2.__signalName)) {
4066
4001
  res.send({
4067
4002
  ...ctx2,
@@ -4446,21 +4381,6 @@ var RestController = class _RestController {
4446
4381
  if (ctx2.__signalName === void 0) {
4447
4382
  return;
4448
4383
  }
4449
- if (ctx2.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
4450
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_rest", {
4451
- localServiceName: CadenzaService.serviceRegistry.serviceName,
4452
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
4453
- targetServiceName: serviceName,
4454
- targetUrl: URL2,
4455
- signalName: ctx2.__signalName,
4456
- intentToTaskMaps: Array.isArray(ctx2.intentToTaskMaps) ? ctx2.intentToTaskMaps.length : 0,
4457
- signalToTaskMaps: Array.isArray(ctx2.signalToTaskMaps) ? ctx2.signalToTaskMaps.length : 0,
4458
- serviceInstances: Array.isArray(ctx2.serviceInstances) ? ctx2.serviceInstances.length : 0,
4459
- serviceInstanceTransports: Array.isArray(
4460
- ctx2.serviceInstanceTransports
4461
- ) ? ctx2.serviceInstanceTransports.length : 0
4462
- });
4463
- }
4464
4384
  fetchDiagnostics.signalTransmissions++;
4465
4385
  fetchDiagnostics.updatedAt = Date.now();
4466
4386
  let response;
@@ -5470,10 +5390,14 @@ var SocketController = class _SocketController {
5470
5390
  const communicationTypes = this.normalizeCommunicationTypes(
5471
5391
  input.communicationTypes
5472
5392
  );
5393
+ const transportProtocols = Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [];
5473
5394
  const serviceName = String(input.serviceName ?? "");
5474
5395
  const serviceTransportId = String(input.serviceTransportId ?? "");
5475
5396
  const serviceOrigin = String(input.serviceOrigin ?? "");
5476
5397
  const parsedOrigin = parseTransportOrigin(serviceOrigin);
5398
+ if (!transportProtocols.includes("socket")) {
5399
+ return false;
5400
+ }
5477
5401
  if (!serviceTransportId || !serviceOrigin || !parsedOrigin) {
5478
5402
  CadenzaService.log(
5479
5403
  "Socket client setup skipped due to missing transport origin",
@@ -5499,7 +5423,7 @@ var SocketController = class _SocketController {
5499
5423
  serviceName,
5500
5424
  serviceTransportId,
5501
5425
  serviceOrigin,
5502
- transportProtocols: input.transportProtocols,
5426
+ transportProtocols,
5503
5427
  url
5504
5428
  });
5505
5429
  };
@@ -5520,7 +5444,7 @@ var SocketController = class _SocketController {
5520
5444
  serviceName,
5521
5445
  serviceTransportId,
5522
5446
  serviceOrigin,
5523
- transportProtocols: Array.isArray(input.transportProtocols) ? input.transportProtocols.map((entry) => String(entry)) : [],
5447
+ transportProtocols,
5524
5448
  url,
5525
5449
  destroyed: false,
5526
5450
  updatedAt: Date.now()
@@ -5761,19 +5685,6 @@ var SocketController = class _SocketController {
5761
5685
  });
5762
5686
  });
5763
5687
  socket.on("signal", (signalCtx, callback) => {
5764
- if (signalCtx?.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
5765
- console.log("[CADENZA_SYNC_DEBUG] received_sync_signal_socket", {
5766
- localServiceName: CadenzaService.serviceRegistry.serviceName,
5767
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
5768
- signalName: signalCtx.__signalName,
5769
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
5770
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
5771
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
5772
- serviceInstanceTransports: Array.isArray(
5773
- signalCtx.serviceInstanceTransports
5774
- ) ? signalCtx.serviceInstanceTransports.length : 0
5775
- });
5776
- }
5777
5688
  if (CadenzaService.signalBroker.listObservedSignals().includes(signalCtx.__signalName)) {
5778
5689
  if (isSocketAckCallback(callback)) {
5779
5690
  callback({
@@ -6072,21 +5983,6 @@ var SocketController = class _SocketController {
6072
5983
  if (signalCtx.__signalName === void 0) {
6073
5984
  return;
6074
5985
  }
6075
- if (signalCtx.__signalName === "global.meta.cadenza_db.gathered_sync_data") {
6076
- console.log("[CADENZA_SYNC_DEBUG] transmit_sync_signal_socket", {
6077
- localServiceName: CadenzaService.serviceRegistry.serviceName,
6078
- localServiceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
6079
- targetServiceName: serviceName,
6080
- targetUrl: url,
6081
- signalName: signalCtx.__signalName,
6082
- intentToTaskMaps: Array.isArray(signalCtx.intentToTaskMaps) ? signalCtx.intentToTaskMaps.length : 0,
6083
- signalToTaskMaps: Array.isArray(signalCtx.signalToTaskMaps) ? signalCtx.signalToTaskMaps.length : 0,
6084
- serviceInstances: Array.isArray(signalCtx.serviceInstances) ? signalCtx.serviceInstances.length : 0,
6085
- serviceInstanceTransports: Array.isArray(
6086
- signalCtx.serviceInstanceTransports
6087
- ) ? signalCtx.serviceInstanceTransports.length : 0
6088
- });
6089
- }
6090
5986
  delete signalCtx.__broadcast;
6091
5987
  const response = await runtimeHandle.emitWhenReady?.("signal", signalCtx, 5e3) ?? {
6092
5988
  errored: true,
@@ -6127,7 +6023,7 @@ var SocketController = class _SocketController {
6127
6023
  communicationTypes,
6128
6024
  serviceTransportId,
6129
6025
  serviceOrigin,
6130
- transportProtocols: input.transportProtocols,
6026
+ transportProtocols,
6131
6027
  handshakeData: {
6132
6028
  instanceId: CadenzaService.serviceRegistry.serviceInstanceId,
6133
6029
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -6487,6 +6383,209 @@ var SignalController = class _SignalController {
6487
6383
  }
6488
6384
  };
6489
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
+
6490
6589
  // src/graph/controllers/registerActorSessionPersistence.ts
6491
6590
  var import_core3 = require("@cadenza.io/core");
6492
6591
  function registerActorSessionPersistenceTasks() {
@@ -9198,7 +9297,6 @@ function buildSyncExecutionEnvelope(ctx, queryData) {
9198
9297
  }
9199
9298
  function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, options = {}) {
9200
9299
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
9201
- const debugTable = shouldDebugSyncTable(tableName);
9202
9300
  if (!localInsertTask && !isCadenzaDBReady) {
9203
9301
  return void 0;
9204
9302
  }
@@ -9211,16 +9309,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9211
9309
  register: false,
9212
9310
  isHidden: true
9213
9311
  });
9214
- if (debugTable) {
9215
- logSyncDebug("insert_task_resolved", {
9216
- tableName,
9217
- localInsertTaskName: localInsertTask?.name ?? null,
9218
- remoteInsertTaskName: isCadenzaDBReady ? targetTask.name : null,
9219
- targetTaskName: targetTask.name,
9220
- queryData,
9221
- options
9222
- });
9223
- }
9224
9312
  const prepareExecutionTask = CadenzaService.createMetaTask(
9225
9313
  `Prepare graph sync insert for ${tableName}`,
9226
9314
  (ctx) => {
@@ -9231,12 +9319,12 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9231
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) {
9232
9320
  console.warn(
9233
9321
  "[CADENZA_SYNC_EMPTY_INSERT]",
9234
- summarizeSyncDebugValue({
9322
+ {
9235
9323
  tableName,
9236
9324
  queryData: originalQueryData,
9237
9325
  ctx,
9238
9326
  joinedContexts: Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : []
9239
- })
9327
+ }
9240
9328
  );
9241
9329
  }
9242
9330
  return buildSyncExecutionEnvelope(
@@ -9250,37 +9338,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9250
9338
  isHidden: true
9251
9339
  }
9252
9340
  );
9253
- if (debugTable) {
9254
- prepareExecutionTask.then(
9255
- CadenzaService.createMetaTask(
9256
- `Log prepared graph sync insert execution for ${tableName}`,
9257
- (ctx) => {
9258
- if (tableName === "task") {
9259
- if (!shouldDebugTaskSyncPayload(ctx)) {
9260
- return ctx;
9261
- }
9262
- logSyncDebug("insert_prepare", {
9263
- tableName,
9264
- targetTaskName: targetTask.name,
9265
- payload: buildTaskSyncDebugPayload(ctx)
9266
- });
9267
- return ctx;
9268
- }
9269
- logSyncDebug("insert_prepare", {
9270
- tableName,
9271
- targetTaskName: targetTask.name,
9272
- ctx
9273
- });
9274
- return ctx;
9275
- },
9276
- `Logs prepared ${tableName} sync insert payloads.`,
9277
- {
9278
- register: false,
9279
- isHidden: true
9280
- }
9281
- )
9282
- );
9283
- }
9284
9341
  const finalizeExecutionTask = CadenzaService.createMetaTask(
9285
9342
  `Finalize graph sync insert for ${tableName}`,
9286
9343
  (ctx) => {
@@ -9291,25 +9348,6 @@ function resolveSyncInsertTask(isCadenzaDBReady, tableName, queryData = {}, opti
9291
9348
  ...ctx,
9292
9349
  queryData: ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : originalQueryData
9293
9350
  };
9294
- if (debugTable) {
9295
- if (tableName === "task") {
9296
- if (shouldDebugTaskSyncPayload(normalizedContext)) {
9297
- logSyncDebug("insert_finalize", {
9298
- tableName,
9299
- targetTaskName: targetTask.name,
9300
- success: didSyncInsertSucceed(normalizedContext),
9301
- payload: buildTaskSyncDebugPayload(normalizedContext)
9302
- });
9303
- }
9304
- } else {
9305
- logSyncDebug("insert_finalize", {
9306
- tableName,
9307
- targetTaskName: targetTask.name,
9308
- success: didSyncInsertSucceed(normalizedContext),
9309
- ctx: normalizedContext
9310
- });
9311
- }
9312
- }
9313
9351
  return normalizedContext;
9314
9352
  },
9315
9353
  `Finalizes ${tableName} graph-sync insert execution after the authority task finishes.`,
@@ -9344,139 +9382,6 @@ var AUTHORITY_QUERY_RESULT_KEYS = {
9344
9382
  intent_registry: "intentRegistrys"
9345
9383
  };
9346
9384
  var EARLY_SYNC_REQUEST_DELAYS_MS = [2e3, 1e4, 3e4];
9347
- var SYNC_DEBUG_PREFIX = "[CADENZA_SYNC_DEBUG]";
9348
- var SYNC_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env === "object" && process.env.CADENZA_SYNC_DEBUG === "true";
9349
- var SYNC_DEBUG_TABLES = /* @__PURE__ */ new Set(["intent_to_task_map", "task"]);
9350
- var SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
9351
- "Query service_instance",
9352
- "Query service_instance_transport",
9353
- "Query intent_to_task_map",
9354
- "Query signal_to_task_map",
9355
- "Prepare for signal sync",
9356
- "Compile sync data and broadcast",
9357
- "Forward service instance sync",
9358
- "Forward service transport sync",
9359
- "Forward intent to task map sync",
9360
- "Forward signal to task map sync",
9361
- "Normalize telemetry ingest payload",
9362
- "Get telemetry session state",
9363
- "Normalize anomaly detect input",
9364
- "Read anomaly runtime session",
9365
- "Normalize prediction compute input",
9366
- "Normalize telemetry insert queryData"
9367
- ]);
9368
- var SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
9369
- var SYNC_DEBUG_INTENT_NAMES = /* @__PURE__ */ new Set([
9370
- "meta-service-registry-full-sync",
9371
- "runner-traffic-runtime-get",
9372
- "iot-telemetry-ingest",
9373
- "iot-telemetry-session-get",
9374
- "iot-anomaly-detect",
9375
- "iot-anomaly-runtime-get",
9376
- "iot-prediction-compute",
9377
- "iot-db-telemetry-insert",
9378
- "query-pg-cadenza-db-postgres-actor-service_instance",
9379
- "query-pg-cadenza-db-postgres-actor-service_instance_transport",
9380
- "query-pg-cadenza-db-postgres-actor-intent_to_task_map",
9381
- "query-pg-cadenza-db-postgres-actor-signal_to_task_map"
9382
- ]);
9383
- function shouldDebugSyncTable(tableName) {
9384
- return SYNC_DEBUG_ENABLED && SYNC_DEBUG_TABLES.has(tableName);
9385
- }
9386
- function shouldDebugSyncTaskName(taskName) {
9387
- return SYNC_DEBUG_ENABLED && typeof taskName === "string" && SYNC_DEBUG_TASK_NAMES.has(taskName);
9388
- }
9389
- function shouldDebugSyncRoutineName(routineName) {
9390
- return SYNC_DEBUG_ENABLED && typeof routineName === "string" && SYNC_DEBUG_ROUTINE_NAMES.has(routineName);
9391
- }
9392
- function shouldDebugSyncIntentName(intentName) {
9393
- return SYNC_DEBUG_ENABLED && typeof intentName === "string" && SYNC_DEBUG_INTENT_NAMES.has(intentName);
9394
- }
9395
- function summarizeSyncDebugValue(value, depth = 0) {
9396
- if (value === null || value === void 0) {
9397
- return value;
9398
- }
9399
- if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
9400
- return value;
9401
- }
9402
- if (value instanceof Set) {
9403
- return {
9404
- __type: "Set",
9405
- size: value.size,
9406
- values: Array.from(value).slice(0, 8).map((item) => summarizeSyncDebugValue(item, depth + 1))
9407
- };
9408
- }
9409
- if (value instanceof Map) {
9410
- return {
9411
- __type: "Map",
9412
- size: value.size
9413
- };
9414
- }
9415
- if (Array.isArray(value)) {
9416
- return {
9417
- __type: "Array",
9418
- length: value.length,
9419
- items: value.slice(0, 5).map((item) => summarizeSyncDebugValue(item, depth + 1))
9420
- };
9421
- }
9422
- if (typeof value === "object") {
9423
- if (depth >= 2) {
9424
- return "[object]";
9425
- }
9426
- const output = {};
9427
- const entries = Object.entries(value).filter(
9428
- ([key]) => ![
9429
- "functionString",
9430
- "tagIdGetter",
9431
- "__functionString",
9432
- "__getTagCallback",
9433
- "joinedContexts",
9434
- "task",
9435
- "taskInstance",
9436
- "tasks"
9437
- ].includes(key)
9438
- ).slice(0, 12);
9439
- for (const [key, nestedValue] of entries) {
9440
- output[key] = summarizeSyncDebugValue(nestedValue, depth + 1);
9441
- }
9442
- return output;
9443
- }
9444
- return String(value);
9445
- }
9446
- function logSyncDebug(event, payload) {
9447
- console.log(`${SYNC_DEBUG_PREFIX} ${event}`, summarizeSyncDebugValue(payload));
9448
- }
9449
- function buildTaskSyncDebugPayload(ctx) {
9450
- const data = ctx.data && typeof ctx.data === "object" ? ctx.data : {};
9451
- const queryData = ctx.queryData && typeof ctx.queryData === "object" ? ctx.queryData : {};
9452
- const queryDataData = queryData.data && typeof queryData.data === "object" ? queryData.data : {};
9453
- const taskPayload = Object.keys(queryDataData).length > 0 ? queryDataData : data;
9454
- const functionString = typeof taskPayload.functionString === "string" ? taskPayload.functionString : typeof taskPayload.function_string === "string" ? taskPayload.function_string : void 0;
9455
- const tagIdGetter = typeof taskPayload.tagIdGetter === "string" ? taskPayload.tagIdGetter : typeof taskPayload.tag_id_getter === "string" ? taskPayload.tag_id_getter : void 0;
9456
- const signals = taskPayload.signals && typeof taskPayload.signals === "object" ? taskPayload.signals : {};
9457
- const intents = taskPayload.intents && typeof taskPayload.intents === "object" ? taskPayload.intents : {};
9458
- return {
9459
- taskName: taskPayload.name ?? taskPayload.taskName ?? taskPayload.task_name ?? ctx.__taskName ?? null,
9460
- serviceName: taskPayload.service_name ?? taskPayload.serviceName ?? ctx.__syncServiceName ?? null,
9461
- functionStringLength: functionString?.length ?? null,
9462
- tagIdGetterLength: tagIdGetter?.length ?? null,
9463
- isMeta: taskPayload.isMeta ?? taskPayload.is_meta ?? null,
9464
- isSubMeta: taskPayload.isSubMeta ?? taskPayload.is_sub_meta ?? null,
9465
- isHidden: taskPayload.isHidden ?? taskPayload.is_hidden ?? null,
9466
- signalsEmitsCount: Array.isArray(signals.emits) ? signals.emits.length : null,
9467
- signalsObservedCount: Array.isArray(signals.observed) ? signals.observed.length : null,
9468
- intentHandlesCount: Array.isArray(intents.handles) ? intents.handles.length : null,
9469
- intentInquiresCount: Array.isArray(intents.inquires) ? intents.inquires.length : null,
9470
- rowCount: ctx.rowCount ?? null,
9471
- errored: ctx.errored ?? false,
9472
- success: ctx.__success ?? null,
9473
- error: ctx.__error ?? null
9474
- };
9475
- }
9476
- function shouldDebugTaskSyncPayload(ctx) {
9477
- const payload = buildTaskSyncDebugPayload(ctx);
9478
- return shouldDebugSyncTaskName(payload.taskName);
9479
- }
9480
9385
  function resolveSyncQueryRows(ctx, tableName) {
9481
9386
  const resultKey = AUTHORITY_QUERY_RESULT_KEYS[tableName];
9482
9387
  const rows = ctx?.[resultKey];
@@ -9923,16 +9828,6 @@ var GraphSyncController = class _GraphSyncController {
9923
9828
  if (!nextTask?.registered) {
9924
9829
  continue;
9925
9830
  }
9926
- if (shouldDebugSyncRoutineName(routine.name) || shouldDebugSyncTaskName(nextTask.name)) {
9927
- logSyncDebug("task_to_routine_split", {
9928
- routineName: routine.name,
9929
- routineVersion: routine.version,
9930
- taskName: nextTask.name,
9931
- taskVersion: nextTask.version,
9932
- serviceName: serviceName2,
9933
- registered: nextTask.registered
9934
- });
9935
- }
9936
9831
  yield {
9937
9832
  __syncing: ctx.__syncing,
9938
9833
  data: {
@@ -10078,20 +9973,6 @@ var GraphSyncController = class _GraphSyncController {
10078
9973
  if (task.registered) continue;
10079
9974
  const { __functionString, __getTagCallback } = task.export();
10080
9975
  this.tasksSynced = false;
10081
- if (shouldDebugSyncTaskName(task.name)) {
10082
- logSyncDebug("task_registration_split", {
10083
- taskName: task.name,
10084
- taskVersion: task.version,
10085
- serviceName: serviceName2,
10086
- register: task.register,
10087
- registered: task.registered,
10088
- hidden: task.hidden,
10089
- exportFunctionLength: __functionString?.length ?? null,
10090
- exportTagGetterLength: __getTagCallback?.length ?? null,
10091
- observedSignals: Array.from(task.observedSignals),
10092
- handledIntents: Array.from(task.handlesIntents)
10093
- });
10094
- }
10095
9976
  yield {
10096
9977
  __syncing: ctx.__syncing,
10097
9978
  data: {
@@ -10146,13 +10027,6 @@ var GraphSyncController = class _GraphSyncController {
10146
10027
  const registerTaskTask = CadenzaService.createMetaTask(
10147
10028
  "Record registration",
10148
10029
  (ctx, emit) => {
10149
- if (shouldDebugSyncTaskName(ctx.__taskName)) {
10150
- logSyncDebug("task_registration_result", {
10151
- taskName: ctx.__taskName,
10152
- success: didSyncInsertSucceed(ctx),
10153
- ctx
10154
- });
10155
- }
10156
10030
  if (!didSyncInsertSucceed(ctx)) {
10157
10031
  return;
10158
10032
  }
@@ -10178,16 +10052,6 @@ var GraphSyncController = class _GraphSyncController {
10178
10052
  "Prepare created task for immediate sync",
10179
10053
  (ctx) => {
10180
10054
  const task = ctx.taskInstance ?? (ctx.data?.name ? CadenzaService.get(String(ctx.data.name)) : void 0);
10181
- if (shouldDebugSyncTaskName(task?.name ?? ctx?.data?.name)) {
10182
- logSyncDebug("task_created_for_immediate_sync", {
10183
- incomingTaskName: ctx?.data?.name ?? null,
10184
- resolvedTaskName: task?.name ?? null,
10185
- exists: Boolean(task),
10186
- hidden: task?.hidden ?? null,
10187
- register: task?.register ?? null,
10188
- registered: task?.registered ?? null
10189
- });
10190
- }
10191
10055
  if (!task || task.hidden || !task.register || task.registered) {
10192
10056
  return false;
10193
10057
  }
@@ -10374,17 +10238,6 @@ var GraphSyncController = class _GraphSyncController {
10374
10238
  if (!isGlobal) {
10375
10239
  continue;
10376
10240
  }
10377
- if (shouldDebugSyncTaskName(task.name)) {
10378
- logSyncDebug("signal_to_task_map_split", {
10379
- taskName: task.name,
10380
- signalName: _signal,
10381
- rawSignal: signal,
10382
- serviceName: serviceName2,
10383
- observerRegistered: CadenzaService.signalBroker.signalObservers?.get(
10384
- _signal
10385
- )?.registered
10386
- });
10387
- }
10388
10241
  yield {
10389
10242
  __syncing: ctx.__syncing,
10390
10243
  data: {
@@ -10495,21 +10348,6 @@ var GraphSyncController = class _GraphSyncController {
10495
10348
  }
10496
10349
  task.__registeredIntents = task.__registeredIntents ?? /* @__PURE__ */ new Set();
10497
10350
  task.__invalidMetaIntentWarnings = task.__invalidMetaIntentWarnings ?? /* @__PURE__ */ new Set();
10498
- const shouldDebugTask = shouldDebugSyncTaskName(task.name);
10499
- if (shouldDebugTask) {
10500
- logSyncDebug("intent_map_task_state", {
10501
- taskName: task.name,
10502
- taskVersion: task.version,
10503
- serviceName: serviceName2,
10504
- registered: task.registered,
10505
- register: task.register,
10506
- hidden: task.hidden,
10507
- handledIntents: Array.from(task.handlesIntents),
10508
- registeredIntents: Array.from(task.__registeredIntents),
10509
- tasksSynced: this.tasksSynced,
10510
- intentsSynced: this.intentsSynced
10511
- });
10512
- }
10513
10351
  let emittedCount = 0;
10514
10352
  for (const intent of task.handlesIntents) {
10515
10353
  if (task.__registeredIntents.has(intent)) continue;
@@ -10535,15 +10373,6 @@ var GraphSyncController = class _GraphSyncController {
10535
10373
  if (!intentDefinition) {
10536
10374
  continue;
10537
10375
  }
10538
- if (shouldDebugSyncTaskName(task.name) || shouldDebugSyncIntentName(intent)) {
10539
- logSyncDebug("intent_to_task_map_split", {
10540
- taskName: task.name,
10541
- taskVersion: task.version,
10542
- intentName: intent,
10543
- serviceName: serviceName2,
10544
- intentDefinition
10545
- });
10546
- }
10547
10376
  yield {
10548
10377
  __syncing: ctx.__syncing,
10549
10378
  data: {
@@ -10564,15 +10393,6 @@ var GraphSyncController = class _GraphSyncController {
10564
10393
  };
10565
10394
  emittedCount += 1;
10566
10395
  }
10567
- if (shouldDebugTask && emittedCount === 0) {
10568
- logSyncDebug("intent_map_task_noop", {
10569
- taskName: task.name,
10570
- taskVersion: task.version,
10571
- serviceName: serviceName2,
10572
- handledIntents: Array.from(task.handlesIntents),
10573
- registeredIntents: Array.from(task.__registeredIntents)
10574
- });
10575
- }
10576
10396
  return emittedCount > 0;
10577
10397
  }.bind(this)
10578
10398
  );
@@ -10582,13 +10402,6 @@ var GraphSyncController = class _GraphSyncController {
10582
10402
  if (!ctx.__intentDefinition || !ctx.__intentMapData) {
10583
10403
  return false;
10584
10404
  }
10585
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10586
- logSyncDebug("intent_definition_prepare", {
10587
- taskName: ctx.__taskName,
10588
- intentName: ctx.__intent,
10589
- intentDefinition: ctx.__intentDefinition
10590
- });
10591
- }
10592
10405
  return {
10593
10406
  ...ctx,
10594
10407
  data: ctx.__intentDefinition
@@ -10601,13 +10414,6 @@ var GraphSyncController = class _GraphSyncController {
10601
10414
  if (!ctx.__intentMapData) {
10602
10415
  return false;
10603
10416
  }
10604
- if (shouldDebugSyncTaskName(ctx.__taskName) || shouldDebugSyncIntentName(ctx.__intent)) {
10605
- logSyncDebug("intent_map_payload_restore", {
10606
- taskName: ctx.__taskName,
10607
- intentName: ctx.__intent,
10608
- intentMapData: ctx.__intentMapData
10609
- });
10610
- }
10611
10417
  return {
10612
10418
  ...ctx,
10613
10419
  data: ctx.__intentMapData
@@ -11429,6 +11235,13 @@ var CadenzaService = class {
11429
11235
  if (this.isBootstrapped) return;
11430
11236
  this.isBootstrapped = true;
11431
11237
  import_core5.default.bootstrap();
11238
+ import_core5.default.setRuntimeInquiryDelegate(
11239
+ (inquiry, context, options) => this.inquire(
11240
+ inquiry,
11241
+ context,
11242
+ options ?? {}
11243
+ )
11244
+ );
11432
11245
  this.signalBroker = import_core5.default.signalBroker;
11433
11246
  this.inquiryBroker = import_core5.default.inquiryBroker;
11434
11247
  this.runner = import_core5.default.runner;
@@ -11437,7 +11250,7 @@ var CadenzaService = class {
11437
11250
  this.serviceRegistry = ServiceRegistry.instance;
11438
11251
  RestController.instance;
11439
11252
  SocketController.instance;
11440
- console.log("BOOTSTRAPPED");
11253
+ RuntimeValidationController.instance;
11441
11254
  }
11442
11255
  static ensureTransportControllers(isFrontend) {
11443
11256
  if (!isFrontend) {
@@ -11576,6 +11389,38 @@ var CadenzaService = class {
11576
11389
  this.inquiryBroker?.addIntent(intent);
11577
11390
  return intent;
11578
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
+ }
11579
11424
  static getInquiryResponderDescriptor(task) {
11580
11425
  return this.serviceRegistry.getInquiryResponderDescriptor(task);
11581
11426
  }
@@ -12336,7 +12181,6 @@ var CadenzaService = class {
12336
12181
  }
12337
12182
  });
12338
12183
  });
12339
- console.log("Creating service...");
12340
12184
  const initContext = {
12341
12185
  data: {
12342
12186
  name: serviceName,
@@ -12369,18 +12213,13 @@ var CadenzaService = class {
12369
12213
  }).doOn("meta.fetch.handshake_complete");
12370
12214
  } else {
12371
12215
  this.emit("meta.create_service_requested", initContext);
12372
- this.createMetaTask("Create signal transmission for sync", (ctx) => {
12373
- if (ctx.serviceName) {
12374
- console.log("[CADENZA_SYNC_DEBUG] create_sync_signal_transmission", {
12375
- localServiceName: serviceName,
12376
- localServiceInstanceId: serviceId,
12377
- targetServiceName: ctx.serviceName,
12378
- signalName: "global.meta.cadenza_db.gathered_sync_data"
12379
- });
12380
- }
12381
- this.createSignalTransmissionTask(
12382
- "global.meta.cadenza_db.gathered_sync_data",
12383
- 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
+ }
12384
12223
  );
12385
12224
  }).doOn("meta.rest.handshake", "meta.socket.handshake");
12386
12225
  }
@@ -13370,6 +13209,8 @@ var index_default = CadenzaService;
13370
13209
  EphemeralTask,
13371
13210
  GraphMetadataController,
13372
13211
  GraphRoutine,
13212
+ RUNTIME_VALIDATION_INTENTS,
13213
+ RUNTIME_VALIDATION_SIGNALS,
13373
13214
  RestController,
13374
13215
  ServiceRegistry,
13375
13216
  SignalController,