@cadenza.io/service 2.18.2 → 2.18.3

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
@@ -55,8 +55,46 @@ module.exports = __toCommonJS(index_exports);
55
55
  var import_core5 = __toESM(require("@cadenza.io/core"));
56
56
 
57
57
  // src/graph/definition/DeputyTask.ts
58
- var import_uuid = require("uuid");
58
+ var import_uuid2 = require("uuid");
59
59
  var import_core = require("@cadenza.io/core");
60
+
61
+ // src/utils/delegation.ts
62
+ var import_uuid = require("uuid");
63
+ var ROOT_METADATA_PASSTHROUGH_KEYS = [
64
+ "__executionTraceId",
65
+ "__inquiryId",
66
+ "__inquirySourceTaskName",
67
+ "__inquirySourceTaskVersion",
68
+ "__inquirySourceTaskExecutionId",
69
+ "__inquirySourceRoutineExecutionId"
70
+ ];
71
+ function hoistDelegationMetadataFields(input, metadataInput) {
72
+ const context = input && typeof input === "object" ? { ...input } : {};
73
+ const mutableContext = context;
74
+ const metadata = metadataInput && typeof metadataInput === "object" ? metadataInput : context.__metadata && typeof context.__metadata === "object" ? context.__metadata : {};
75
+ for (const key of ROOT_METADATA_PASSTHROUGH_KEYS) {
76
+ if ((mutableContext[key] === void 0 || mutableContext[key] === null) && metadata[key] !== void 0 && metadata[key] !== null) {
77
+ mutableContext[key] = metadata[key];
78
+ }
79
+ }
80
+ return context;
81
+ }
82
+ function ensureDelegationContextMetadata(input) {
83
+ const rawContext = input && typeof input === "object" ? { ...input } : {};
84
+ const metadata = rawContext.__metadata && typeof rawContext.__metadata === "object" ? { ...rawContext.__metadata } : {};
85
+ const context = hoistDelegationMetadataFields(rawContext, metadata);
86
+ const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof rawContext.__deputyExecId === "string" && rawContext.__deputyExecId.length > 0 ? context.__deputyExecId : (0, import_uuid.v4)();
87
+ return {
88
+ ...context,
89
+ __deputyExecId: deputyExecId,
90
+ __metadata: {
91
+ ...metadata,
92
+ __deputyExecId: deputyExecId
93
+ }
94
+ };
95
+ }
96
+
97
+ // src/graph/definition/DeputyTask.ts
60
98
  var DeputyTask = class extends import_core.Task {
61
99
  /**
62
100
  * Constructs a new instance of the class with the specified parameters.
@@ -94,7 +132,7 @@ var DeputyTask = class extends import_core.Task {
94
132
  resolve(context);
95
133
  return;
96
134
  }
97
- const processId = (0, import_uuid.v4)();
135
+ const processId = (0, import_uuid2.v4)();
98
136
  context.__metadata.__deputyExecId = processId;
99
137
  emit("meta.deputy.delegation_requested", {
100
138
  ...context
@@ -182,7 +220,7 @@ var DeputyTask = class extends import_core.Task {
182
220
  execute(context, emit, inquire, progressCallback, nodeData) {
183
221
  const ctx = context.getContext();
184
222
  const metadata = context.getMetadata();
185
- const deputyContext = {
223
+ const deputyContext = hoistDelegationMetadataFields({
186
224
  __timeout: this.timeout,
187
225
  __localTaskName: this.name,
188
226
  __localTaskVersion: this.version,
@@ -199,7 +237,7 @@ var DeputyTask = class extends import_core.Task {
199
237
  __deputyTaskName: this.name
200
238
  },
201
239
  ...ctx
202
- };
240
+ });
203
241
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
204
242
  }
205
243
  };
@@ -280,7 +318,7 @@ var DatabaseTask = class extends DeputyTask {
280
318
  },
281
319
  ...dynamicQueryData
282
320
  };
283
- const deputyContext = {
321
+ const deputyContext = hoistDelegationMetadataFields({
284
322
  ...ctx,
285
323
  __localTaskName: this.name,
286
324
  __localTaskVersion: this.version,
@@ -303,7 +341,7 @@ var DatabaseTask = class extends DeputyTask {
303
341
  filter: nextQueryData.filter ?? ctx.filter,
304
342
  fields: nextQueryData.fields ?? ctx.fields,
305
343
  queryData: nextQueryData
306
- };
344
+ });
307
345
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
308
346
  }
309
347
  };
@@ -554,22 +592,6 @@ function getRouteableTransport(instance, role, protocol) {
554
592
  return selectTransportForRole(instance.transports ?? [], role, protocol);
555
593
  }
556
594
 
557
- // src/utils/delegation.ts
558
- var import_uuid2 = require("uuid");
559
- function ensureDelegationContextMetadata(input) {
560
- const context = input && typeof input === "object" ? { ...input } : {};
561
- const metadata = context.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
562
- const deputyExecId = typeof metadata.__deputyExecId === "string" && metadata.__deputyExecId.length > 0 ? metadata.__deputyExecId : typeof context.__deputyExecId === "string" && context.__deputyExecId.length > 0 ? context.__deputyExecId : (0, import_uuid2.v4)();
563
- return {
564
- ...context,
565
- __deputyExecId: deputyExecId,
566
- __metadata: {
567
- ...metadata,
568
- __deputyExecId: deputyExecId
569
- }
570
- };
571
- }
572
-
573
595
  // src/utils/readiness.ts
574
596
  function evaluateDependencyReadiness(input) {
575
597
  const missedHeartbeats = Math.max(
@@ -766,6 +788,10 @@ var INTERNAL_RUNTIME_STATUS_TASK_NAMES = /* @__PURE__ */ new Set([
766
788
  "Collect distributed readiness",
767
789
  "Get status"
768
790
  ]);
791
+ var SERVICE_REGISTRY_TRACE_SERVICE = (process.env.CADENZA_SERVICE_REGISTRY_TRACE_SERVICE ?? "").trim();
792
+ function shouldTraceServiceRegistry(serviceName) {
793
+ return SERVICE_REGISTRY_TRACE_SERVICE.length > 0 && serviceName === SERVICE_REGISTRY_TRACE_SERVICE;
794
+ }
769
795
  function buildServiceRegistryInsertQueryData(ctx, queryData) {
770
796
  const joinedContexts = Array.isArray(ctx.joinedContexts) ? ctx.joinedContexts : [];
771
797
  const getJoinedValue = (key) => {
@@ -839,6 +865,45 @@ function normalizeServiceRegistryInsertResult(tableName, ctx, queryData, rawResu
839
865
  }
840
866
  return result;
841
867
  }
868
+ function resolveServiceInstanceRegistrationPayload(ctx, fallbackServiceName, fallbackServiceInstanceId) {
869
+ const candidateSources = [
870
+ ctx.__registrationData,
871
+ ctx.queryData?.data,
872
+ ctx.__resolverQueryData?.data,
873
+ ctx.__resolverOriginalContext?.__registrationData,
874
+ ctx.__resolverOriginalContext?.queryData?.data,
875
+ ctx.data,
876
+ ctx.__resolverOriginalContext?.data
877
+ ];
878
+ let resolvedData = null;
879
+ for (const candidate of candidateSources) {
880
+ if (candidate && typeof candidate === "object" && !Array.isArray(candidate)) {
881
+ resolvedData = {
882
+ ...candidate
883
+ };
884
+ break;
885
+ }
886
+ }
887
+ if (!resolvedData) {
888
+ return null;
889
+ }
890
+ const resolvedUuid = String(
891
+ resolvedData.uuid ?? ctx.__serviceInstanceId ?? ctx.__resolverOriginalContext?.__serviceInstanceId ?? fallbackServiceInstanceId ?? ""
892
+ ).trim();
893
+ const resolvedServiceName = String(
894
+ resolvedData.service_name ?? ctx.__serviceName ?? ctx.__resolverOriginalContext?.__serviceName ?? fallbackServiceName ?? ""
895
+ ).trim();
896
+ const resolvedProcessPid = typeof resolvedData.process_pid === "number" ? resolvedData.process_pid : typeof ctx.__resolverOriginalContext?.data?.process_pid === "number" ? ctx.__resolverOriginalContext.data.process_pid : typeof ctx.__resolverOriginalContext?.__registrationData?.process_pid === "number" ? ctx.__resolverOriginalContext.__registrationData.process_pid : typeof ctx.queryData?.data?.process_pid === "number" ? ctx.queryData.data.process_pid : typeof ctx.__registrationData?.process_pid === "number" ? ctx.__registrationData.process_pid : null;
897
+ if (!resolvedUuid || !resolvedServiceName || resolvedProcessPid === null) {
898
+ return null;
899
+ }
900
+ return {
901
+ ...resolvedData,
902
+ uuid: resolvedUuid,
903
+ service_name: resolvedServiceName,
904
+ process_pid: resolvedProcessPid
905
+ };
906
+ }
842
907
  function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {}) {
843
908
  const remoteInsertTask = CadenzaService.createCadenzaDBInsertTask(
844
909
  tableName,
@@ -863,13 +928,24 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
863
928
  });
864
929
  delegationContext.__metadata.__skipRemoteExecution = delegationContext.__metadata.__skipRemoteExecution ?? delegationContext.__skipRemoteExecution ?? false;
865
930
  delegationContext.__metadata.__blockRemoteExecution = delegationContext.__metadata.__blockRemoteExecution ?? delegationContext.__blockRemoteExecution ?? false;
866
- return {
931
+ const nextContext = {
867
932
  ...delegationContext,
868
933
  __resolverOriginalContext: {
869
934
  ...ctx
870
935
  },
871
936
  __resolverQueryData: nextQueryData
872
937
  };
938
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
939
+ console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_registry_insert_execution", {
940
+ tableName,
941
+ signalName,
942
+ resolverRequestId: ctx.__resolverRequestId ?? null,
943
+ hasData: nextQueryData.data !== void 0,
944
+ queryDataKeys: Object.keys(nextQueryData),
945
+ dataKeys: nextQueryData.data && typeof nextQueryData.data === "object" ? Object.keys(nextQueryData.data) : []
946
+ });
947
+ }
948
+ return nextContext;
873
949
  },
874
950
  `Prepares ${tableName} service-registry insert payloads for runner execution.`,
875
951
  {
@@ -895,7 +971,7 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
895
971
  ctx.__resolverQueryData ?? ctx.queryData ?? {},
896
972
  ctx
897
973
  );
898
- if (tableName === "service_instance" && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
974
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
899
975
  console.log("[CADENZA_INSTANCE_DEBUG] finalize_service_registry_insert", {
900
976
  tableName,
901
977
  hasNormalized: !!normalized,
@@ -932,6 +1008,16 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
932
1008
  CadenzaService.createEphemeralMetaTask(
933
1009
  `Resolve service registry insert execution for ${tableName} (${resolverRequestId})`,
934
1010
  (resultCtx) => {
1011
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
1012
+ console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert_signal", {
1013
+ tableName,
1014
+ resolverRequestId,
1015
+ incomingResolverRequestId: resultCtx.__resolverRequestId ?? null,
1016
+ errored: resultCtx.errored === true,
1017
+ error: resultCtx.__error ?? null,
1018
+ keys: resultCtx && typeof resultCtx === "object" ? Object.keys(resultCtx) : []
1019
+ });
1020
+ }
935
1021
  if (resultCtx.__resolverRequestId !== resolverRequestId) {
936
1022
  return false;
937
1023
  }
@@ -951,7 +1037,7 @@ function resolveServiceRegistryInsertTask(tableName, queryData = {}, options = {
951
1037
  ).doOn(executionResolvedSignal, executionFailedSignal);
952
1038
  const localInsertTask = CadenzaService.getLocalCadenzaDBInsertTask(tableName);
953
1039
  const executionSignal = localInsertTask ? localExecutionRequestedSignal : remoteExecutionRequestedSignal;
954
- if (tableName === "service_instance" && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
1040
+ if ((tableName === "service_instance" || tableName === "service") && (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true")) {
955
1041
  console.log("[CADENZA_INSTANCE_DEBUG] resolve_service_registry_insert", {
956
1042
  tableName,
957
1043
  executionSignal,
@@ -1404,6 +1490,9 @@ var ServiceRegistry = class _ServiceRegistry {
1404
1490
  )?.destroy();
1405
1491
  continue;
1406
1492
  }
1493
+ if (map.serviceName === this.serviceName) {
1494
+ continue;
1495
+ }
1407
1496
  if (locallyEmittedSignals.includes(map.signalName)) {
1408
1497
  if (!this.remoteSignals.get(map.serviceName)) {
1409
1498
  this.remoteSignals.set(map.serviceName, /* @__PURE__ */ new Set());
@@ -1437,6 +1526,13 @@ var ServiceRegistry = class _ServiceRegistry {
1437
1526
  "Handle global intent registration",
1438
1527
  (ctx, emit) => {
1439
1528
  const intentToTaskMaps = this.normalizeIntentMaps(ctx);
1529
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1530
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] handle_global_intents", {
1531
+ localServiceName: this.serviceName,
1532
+ intentCount: intentToTaskMaps.length,
1533
+ sample: intentToTaskMaps.slice(0, 5)
1534
+ });
1535
+ }
1440
1536
  const sorted = intentToTaskMaps.sort((a, b) => {
1441
1537
  if (a.deleted && !b.deleted) return -1;
1442
1538
  if (!a.deleted && b.deleted) return 1;
@@ -1448,6 +1544,9 @@ var ServiceRegistry = class _ServiceRegistry {
1448
1544
  this.unregisterRemoteIntentDeputy(map);
1449
1545
  continue;
1450
1546
  }
1547
+ if (map.serviceName === this.serviceName) {
1548
+ continue;
1549
+ }
1451
1550
  CadenzaService.inquiryBroker.addIntent({
1452
1551
  name: map.intentName
1453
1552
  });
@@ -1652,6 +1751,11 @@ var ServiceRegistry = class _ServiceRegistry {
1652
1751
  "Full sync",
1653
1752
  async (ctx) => {
1654
1753
  if (this.connectsToCadenzaDB && this.serviceName !== "CadenzaDB" && !this.hasBootstrapFullSyncDeputies()) {
1754
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1755
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_skipped_missing_bootstrap_deputies", {
1756
+ localServiceName: this.serviceName
1757
+ });
1758
+ }
1655
1759
  return false;
1656
1760
  }
1657
1761
  const inquiryResult = await CadenzaService.inquire(
@@ -1670,6 +1774,15 @@ var ServiceRegistry = class _ServiceRegistry {
1670
1774
  const serviceInstances = this.normalizeServiceInstancesFromSync(
1671
1775
  inquiryResult
1672
1776
  );
1777
+ if (shouldTraceServiceRegistry(this.serviceName)) {
1778
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] full_sync_result", {
1779
+ localServiceName: this.serviceName,
1780
+ inquiryMeta: inquiryResult.__inquiryMeta,
1781
+ signalToTaskMaps: signalToTaskMaps.length,
1782
+ intentToTaskMaps: intentToTaskMaps.length,
1783
+ serviceInstances: serviceInstances.length
1784
+ });
1785
+ }
1673
1786
  return {
1674
1787
  ...ctx,
1675
1788
  signalToTaskMaps,
@@ -1712,6 +1825,9 @@ var ServiceRegistry = class _ServiceRegistry {
1712
1825
  "Handle Deputy Registration",
1713
1826
  (ctx, emit) => {
1714
1827
  const { serviceName } = ctx;
1828
+ if (!serviceName || serviceName === this.serviceName) {
1829
+ return false;
1830
+ }
1715
1831
  if (!this.deputies.has(serviceName)) this.deputies.set(serviceName, []);
1716
1832
  this.deputies.get(serviceName).push({
1717
1833
  serviceName,
@@ -2438,15 +2554,29 @@ var ServiceRegistry = class _ServiceRegistry {
2438
2554
  CadenzaService.createMetaTask(
2439
2555
  "Retry local service instance registration after failed insert",
2440
2556
  (ctx) => {
2557
+ const registrationPayload = resolveServiceInstanceRegistrationPayload(
2558
+ ctx,
2559
+ this.serviceName,
2560
+ this.serviceInstanceId
2561
+ );
2562
+ if (!registrationPayload) {
2563
+ return false;
2564
+ }
2441
2565
  const serviceName = String(
2442
- ctx.__serviceName ?? ctx.data?.service_name ?? this.serviceName ?? ""
2566
+ registrationPayload.service_name ?? this.serviceName ?? ""
2443
2567
  ).trim();
2444
2568
  if (!serviceName || serviceName !== this.serviceName) {
2445
2569
  return false;
2446
2570
  }
2447
2571
  CadenzaService.schedule(
2448
2572
  "meta.service_registry.instance_registration_requested",
2449
- { ...ctx },
2573
+ {
2574
+ ...ctx,
2575
+ data: registrationPayload,
2576
+ __registrationData: registrationPayload,
2577
+ __serviceName: serviceName,
2578
+ __serviceInstanceId: registrationPayload.uuid
2579
+ },
2450
2580
  5e3
2451
2581
  );
2452
2582
  return true;
@@ -2460,18 +2590,26 @@ var ServiceRegistry = class _ServiceRegistry {
2460
2590
  CadenzaService.createMetaTask(
2461
2591
  "Prepare service instance registration",
2462
2592
  (ctx) => {
2593
+ const registrationPayload = resolveServiceInstanceRegistrationPayload(
2594
+ ctx,
2595
+ this.serviceName,
2596
+ this.serviceInstanceId
2597
+ );
2463
2598
  if (process.env.CADENZA_INSTANCE_DEBUG === "1" || process.env.CADENZA_INSTANCE_DEBUG === "true") {
2464
2599
  console.log("[CADENZA_INSTANCE_DEBUG] prepare_service_instance_registration", {
2465
- serviceName: ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
2466
- serviceInstanceId: ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
2467
- hasData: !!ctx.data,
2468
- dataKeys: ctx.data && typeof ctx.data === "object" ? Object.keys(ctx.data) : [],
2600
+ serviceName: registrationPayload?.service_name ?? ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? null,
2601
+ serviceInstanceId: registrationPayload?.uuid ?? ctx.data?.uuid ?? ctx.__serviceInstanceId ?? this.serviceInstanceId ?? null,
2602
+ hasData: !!registrationPayload,
2603
+ dataKeys: registrationPayload && typeof registrationPayload === "object" ? Object.keys(registrationPayload) : [],
2469
2604
  transportCount: Array.isArray(ctx.__transportData) ? ctx.__transportData.length : Array.isArray(ctx.transportData) ? ctx.transportData.length : 0,
2470
2605
  skipRemoteExecution: ctx.__skipRemoteExecution === true
2471
2606
  });
2472
2607
  }
2608
+ if (!registrationPayload) {
2609
+ return false;
2610
+ }
2473
2611
  const serviceName = String(
2474
- ctx.data?.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
2612
+ registrationPayload.service_name ?? ctx.__serviceName ?? this.serviceName ?? ""
2475
2613
  ).trim();
2476
2614
  if (serviceName === "CadenzaDB" && !CadenzaService.getLocalCadenzaDBInsertTask("service_instance")) {
2477
2615
  CadenzaService.schedule(
@@ -2481,7 +2619,16 @@ var ServiceRegistry = class _ServiceRegistry {
2481
2619
  );
2482
2620
  return false;
2483
2621
  }
2484
- return ctx;
2622
+ return {
2623
+ ...ctx,
2624
+ data: registrationPayload,
2625
+ __registrationData: {
2626
+ ...ctx.__registrationData ?? {},
2627
+ ...registrationPayload
2628
+ },
2629
+ __serviceName: serviceName,
2630
+ __serviceInstanceId: registrationPayload.uuid
2631
+ };
2485
2632
  },
2486
2633
  "Waits for the exact local CadenzaDB service instance insert task during self-bootstrap."
2487
2634
  ).doOn("meta.service_registry.instance_registration_requested").then(this.insertServiceInstanceTask);
@@ -2856,6 +3003,15 @@ var ServiceRegistry = class _ServiceRegistry {
2856
3003
  };
2857
3004
  this.remoteIntentDeputiesByKey.set(key, descriptor);
2858
3005
  this.remoteIntentDeputiesByTask.set(deputyTask, descriptor);
3006
+ if (shouldTraceServiceRegistry(this.serviceName)) {
3007
+ console.log("[CADENZA_SERVICE_REGISTRY_TRACE] register_remote_intent_deputy", {
3008
+ localServiceName: this.serviceName,
3009
+ intentName: map.intentName,
3010
+ remoteServiceName: map.serviceName,
3011
+ remoteTaskName: map.taskName,
3012
+ remoteTaskVersion: map.taskVersion
3013
+ });
3014
+ }
2859
3015
  }
2860
3016
  unregisterRemoteIntentDeputy(map) {
2861
3017
  const key = this.buildRemoteIntentDeputyKey(map);
@@ -3114,7 +3270,7 @@ var ServiceRegistry = class _ServiceRegistry {
3114
3270
  return communicationTypes;
3115
3271
  }
3116
3272
  ensureDependeeClientForInstance(instance, emit, ctx) {
3117
- if (!instance || instance.uuid === this.serviceInstanceId || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
3273
+ if (!instance || instance.uuid === this.serviceInstanceId || instance.serviceName === this.serviceName || instance.isFrontend || !instance.isActive || instance.isNonResponsive || instance.isBlocked) {
3118
3274
  return false;
3119
3275
  }
3120
3276
  if (!this.deputies.has(instance.serviceName) && !this.remoteIntents.has(instance.serviceName) && !this.remoteSignals.has(instance.serviceName)) {
@@ -3142,6 +3298,9 @@ var ServiceRegistry = class _ServiceRegistry {
3142
3298
  return true;
3143
3299
  }
3144
3300
  ensureDependeeClientsForService(serviceName, emit, ctx) {
3301
+ if (!serviceName || serviceName === this.serviceName) {
3302
+ return;
3303
+ }
3145
3304
  for (const instance of this.instances.get(serviceName) ?? []) {
3146
3305
  this.ensureDependeeClientForInstance(instance, emit, ctx);
3147
3306
  }
@@ -3934,7 +4093,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
3934
4093
  execute(context, emit, inquire, progressCallback) {
3935
4094
  const ctx = context.getContext();
3936
4095
  const metadata = context.getMetadata();
3937
- const deputyContext = {
4096
+ const deputyContext = hoistDelegationMetadataFields({
3938
4097
  __localTaskName: this.name,
3939
4098
  __localServiceName: CadenzaService.serviceRegistry.serviceName,
3940
4099
  __serviceName: this.serviceName,
@@ -3947,7 +4106,7 @@ var SignalTransmissionTask = class extends import_core2.Task {
3947
4106
  __signalName: this.signalName,
3948
4107
  __signalEmissionId: metadata.__signalEmission?.uuid,
3949
4108
  ...ctx
3950
- };
4109
+ });
3951
4110
  return this.taskFunction(deputyContext, emit, inquire, progressCallback);
3952
4111
  }
3953
4112
  };
@@ -4146,8 +4305,11 @@ var RestController = class _RestController {
4146
4305
  const app = ctx.__app;
4147
4306
  app.post("/handshake", (req, res) => {
4148
4307
  try {
4149
- CadenzaService.log("New fetch connection.", req.body);
4150
- CadenzaService.emit("meta.rest.handshake", req.body);
4308
+ const handshakePayload = req.body && typeof req.body === "object" ? req.body : {};
4309
+ if (Object.keys(handshakePayload).length > 0) {
4310
+ CadenzaService.log("New fetch connection.", handshakePayload);
4311
+ }
4312
+ CadenzaService.emit("meta.rest.handshake", handshakePayload);
4151
4313
  res.send({
4152
4314
  __status: "success",
4153
4315
  __serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
@@ -4544,7 +4706,13 @@ var RestController = class _RestController {
4544
4706
  return ctx2;
4545
4707
  },
4546
4708
  "Sends handshake request",
4547
- { retryCount: 5, retryDelay: 1e3, retryDelayFactor: 1.5 }
4709
+ {
4710
+ retryCount: 5,
4711
+ retryDelay: 1e3,
4712
+ retryDelayFactor: 1.5,
4713
+ register: false,
4714
+ isHidden: true
4715
+ }
4548
4716
  ).doOn(`meta.fetch.handshake_requested:${fetchId}`).emits("meta.fetch.handshake_complete").attachSignal(
4549
4717
  "meta.fetch.handshake_failed",
4550
4718
  "global.meta.fetch.service_communication_established"
@@ -4598,7 +4766,11 @@ var RestController = class _RestController {
4598
4766
  }
4599
4767
  return resultContext;
4600
4768
  },
4601
- "Sends delegation request"
4769
+ "Sends delegation request",
4770
+ {
4771
+ register: false,
4772
+ isHidden: true
4773
+ }
4602
4774
  ).doOn(
4603
4775
  `meta.service_registry.selected_instance_for_fetch:${fetchId}`,
4604
4776
  `meta.service_registry.socket_failed:${fetchId}`
@@ -4650,7 +4822,11 @@ var RestController = class _RestController {
4650
4822
  }
4651
4823
  return response;
4652
4824
  },
4653
- "Sends signal request"
4825
+ "Sends signal request",
4826
+ {
4827
+ register: false,
4828
+ isHidden: true
4829
+ }
4654
4830
  ).doOn(
4655
4831
  `meta.service_registry.selected_instance_for_fetch:${fetchId}`,
4656
4832
  `meta.signal_controller.remote_signal_registered:${serviceName}`,
@@ -4692,18 +4868,30 @@ var RestController = class _RestController {
4692
4868
  }
4693
4869
  return status;
4694
4870
  },
4695
- "Requests status"
4871
+ "Requests status",
4872
+ {
4873
+ register: false,
4874
+ isHidden: true
4875
+ }
4696
4876
  ).doOn("meta.fetch.status_check_requested").emits("meta.fetch.status_checked").emitsOnFail("meta.fetch.status_check_failed");
4697
- CadenzaService.createEphemeralMetaTask(`Destroy fetch client ${fetchId}`, () => {
4698
- fetchDiagnostics.connected = false;
4699
- fetchDiagnostics.destroyed = true;
4700
- fetchDiagnostics.updatedAt = Date.now();
4701
- CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
4702
- handshakeTask.destroy();
4703
- delegateTask.destroy();
4704
- transmitTask.destroy();
4705
- statusTask.destroy();
4706
- }).doOn(
4877
+ CadenzaService.createEphemeralMetaTask(
4878
+ `Destroy fetch client ${fetchId}`,
4879
+ () => {
4880
+ fetchDiagnostics.connected = false;
4881
+ fetchDiagnostics.destroyed = true;
4882
+ fetchDiagnostics.updatedAt = Date.now();
4883
+ CadenzaService.log("Destroying fetch client", { URL: URL2, serviceName });
4884
+ handshakeTask.destroy();
4885
+ delegateTask.destroy();
4886
+ transmitTask.destroy();
4887
+ statusTask.destroy();
4888
+ },
4889
+ "",
4890
+ {
4891
+ register: false,
4892
+ isHidden: true
4893
+ }
4894
+ ).doOn(
4707
4895
  `meta.fetch.destroy_requested:${fetchId}`,
4708
4896
  `meta.socket_client.disconnected:${fetchId}`,
4709
4897
  `meta.fetch.handshake_failed:${fetchId}`
@@ -6122,7 +6310,11 @@ var SocketController = class _SocketController {
6122
6310
  }
6123
6311
  );
6124
6312
  },
6125
- "Handshakes with socket server"
6313
+ "Handshakes with socket server",
6314
+ {
6315
+ register: false,
6316
+ isHidden: true
6317
+ }
6126
6318
  ).doOn(`meta.socket_client.connected:${fetchId}`);
6127
6319
  runtimeHandle.delegateTask = CadenzaService.createMetaTask(
6128
6320
  `Delegate flow to Socket service ${url}`,
@@ -6200,7 +6392,11 @@ var SocketController = class _SocketController {
6200
6392
  }
6201
6393
  }
6202
6394
  },
6203
- `Delegate flow to service ${serviceName} with address ${url}`
6395
+ `Delegate flow to service ${serviceName} with address ${url}`,
6396
+ {
6397
+ register: false,
6398
+ isHidden: true
6399
+ }
6204
6400
  ).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal(
6205
6401
  "meta.socket_client.delegated",
6206
6402
  "meta.socket_shutdown_requested"
@@ -6224,7 +6420,11 @@ var SocketController = class _SocketController {
6224
6420
  }
6225
6421
  return response;
6226
6422
  },
6227
- `Transmits signal to service ${serviceName} with address ${url}`
6423
+ `Transmits signal to service ${serviceName} with address ${url}`,
6424
+ {
6425
+ register: false,
6426
+ isHidden: true
6427
+ }
6228
6428
  ).doOn(`meta.service_registry.selected_instance_for_socket:${fetchId}`).attachSignal("meta.socket_client.transmitted");
6229
6429
  CadenzaService.createEphemeralMetaTask(
6230
6430
  `Shutdown SocketClient ${url}`,
@@ -6268,7 +6468,11 @@ var SocketController = class _SocketController {
6268
6468
  fetchId
6269
6469
  });
6270
6470
  },
6271
- "Shuts down the socket client"
6471
+ "Shuts down the socket client",
6472
+ {
6473
+ register: false,
6474
+ isHidden: true
6475
+ }
6272
6476
  ).doOn(
6273
6477
  `meta.socket_shutdown_requested:${fetchId}`,
6274
6478
  `meta.socket_client.disconnected:${fetchId}`,
@@ -6532,10 +6736,18 @@ function decomposeSignalName(signalName) {
6532
6736
 
6533
6737
  // src/signals/SignalController.ts
6534
6738
  function buildSignalDatabaseTriggerContext(data) {
6739
+ const onConflict = {
6740
+ target: ["name"],
6741
+ action: {
6742
+ do: "nothing"
6743
+ }
6744
+ };
6535
6745
  return {
6536
6746
  data: { ...data },
6747
+ onConflict,
6537
6748
  queryData: {
6538
- data: { ...data }
6749
+ data: { ...data },
6750
+ onConflict
6539
6751
  }
6540
6752
  };
6541
6753
  }
@@ -6562,16 +6774,28 @@ var SignalController = class _SignalController {
6562
6774
  CadenzaService.createMetaTask(
6563
6775
  "Handle Signal Registration",
6564
6776
  (ctx, emit) => {
6777
+ if (!CadenzaService.hasCompletedBootstrapSync()) {
6778
+ return false;
6779
+ }
6565
6780
  const { signalName } = ctx;
6781
+ const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
6782
+ signalName
6783
+ );
6784
+ if (signalObserver?.registered || signalObserver?.registrationRequested) {
6785
+ return false;
6786
+ }
6787
+ if (signalObserver) {
6788
+ signalObserver.registrationRequested = true;
6789
+ }
6566
6790
  const { isMeta, isGlobal, domain, action } = decomposeSignalName(signalName);
6567
6791
  emit(
6568
6792
  "global.meta.signal_controller.signal_added",
6569
6793
  buildSignalDatabaseTriggerContext({
6570
6794
  name: signalName,
6571
- isGlobal,
6795
+ is_global: isGlobal,
6572
6796
  domain,
6573
6797
  action,
6574
- isMeta
6798
+ is_meta: isMeta
6575
6799
  })
6576
6800
  );
6577
6801
  return ctx;
@@ -6580,12 +6804,35 @@ var SignalController = class _SignalController {
6580
6804
  ).doOn("meta.signal_broker.added").attachSignal("global.meta.signal_controller.signal_added");
6581
6805
  CadenzaService.createMetaTask(
6582
6806
  "Add data to signal emission",
6583
- (ctx) => {
6807
+ (ctx, emit) => {
6584
6808
  const signalEmission = ctx.__signalEmission;
6585
6809
  delete ctx.__signalEmission;
6586
6810
  if (!signalEmission) {
6587
6811
  return false;
6588
6812
  }
6813
+ if (typeof signalEmission.signalName === "string" && signalEmission.signalName.trim().length > 0 && !CadenzaService.signalBroker.signalObservers?.has(signalEmission.signalName)) {
6814
+ CadenzaService.signalBroker.addSignal(signalEmission.signalName);
6815
+ } else {
6816
+ const signalObserver = CadenzaService.signalBroker.signalObservers?.get(
6817
+ signalEmission.signalName
6818
+ );
6819
+ if (signalObserver && signalObserver.registered !== true && signalObserver.registrationRequested !== true && CadenzaService.hasCompletedBootstrapSync()) {
6820
+ signalObserver.registrationRequested = true;
6821
+ const { isMeta, isGlobal, domain, action } = decomposeSignalName(
6822
+ signalEmission.signalName
6823
+ );
6824
+ emit(
6825
+ "global.meta.signal_controller.signal_added",
6826
+ buildSignalDatabaseTriggerContext({
6827
+ name: signalEmission.signalName,
6828
+ is_global: isGlobal,
6829
+ domain,
6830
+ action,
6831
+ is_meta: isMeta
6832
+ })
6833
+ );
6834
+ }
6835
+ }
6589
6836
  return {
6590
6837
  data: {
6591
6838
  uuid: signalEmission.uuid,
@@ -6940,10 +7187,10 @@ function registerActorSessionPersistenceTasks() {
6940
7187
  }
6941
7188
 
6942
7189
  // src/graph/controllers/GraphMetadataController.ts
6943
- function buildDatabaseTriggerContext(data, filter, extra = {}) {
7190
+ function buildDatabaseTriggerContext(data, filter, extra = {}, queryExtra = {}) {
6944
7191
  const nextData = data && typeof data === "object" ? { ...data } : void 0;
6945
7192
  const nextFilter = filter && typeof filter === "object" ? { ...filter } : void 0;
6946
- const queryData = {};
7193
+ const queryData = { ...queryExtra };
6947
7194
  if (nextData !== void 0) {
6948
7195
  queryData.data = nextData;
6949
7196
  }
@@ -6957,19 +7204,108 @@ function buildDatabaseTriggerContext(data, filter, extra = {}) {
6957
7204
  ...Object.keys(queryData).length > 0 ? { queryData } : {}
6958
7205
  };
6959
7206
  }
7207
+ function resolveTaskFromMetadataContext(ctx) {
7208
+ const taskName = String(
7209
+ ctx?.taskName ?? ctx?.data?.taskName ?? ctx?.data?.task_name ?? ctx?.filter?.taskName ?? ctx?.filter?.task_name ?? ""
7210
+ );
7211
+ return taskName ? CadenzaService.get(taskName) : void 0;
7212
+ }
7213
+ function resolveTaskByName(name) {
7214
+ const taskName = String(name ?? "");
7215
+ return taskName ? CadenzaService.get(taskName) : void 0;
7216
+ }
7217
+ function resolvePredecessorTaskFromMetadataContext(ctx) {
7218
+ return resolveTaskByName(
7219
+ ctx?.predecessorTaskName ?? ctx?.data?.predecessorTaskName ?? ctx?.data?.predecessor_task_name ?? ctx?.filter?.predecessorTaskName ?? ctx?.filter?.predecessor_task_name
7220
+ );
7221
+ }
7222
+ function shouldSkipDirectTaskMetadata(task) {
7223
+ return !task || !task.register || task.isHidden || task.isDeputy;
7224
+ }
7225
+ function shouldPersistBusinessTaskExecution(task) {
7226
+ return !!task && task.register && !task.isHidden && !task.isMeta && !task.isSubMeta && !task.isDeputy;
7227
+ }
7228
+ function shouldEmitDirectPrimitiveMetadata() {
7229
+ return CadenzaService.hasCompletedBootstrapSync();
7230
+ }
7231
+ function shouldPersistBusinessInquiry(ctx) {
7232
+ const inquiryName = String(
7233
+ ctx?.data?.name ?? ctx?.inquiry ?? ctx?.data?.metadata?.inquiryMeta?.inquiry ?? ""
7234
+ );
7235
+ if (!inquiryName) {
7236
+ return false;
7237
+ }
7238
+ return !isMetaIntentName(inquiryName) && ctx?.data?.isMeta !== true && ctx?.data?.is_meta !== true;
7239
+ }
7240
+ function shouldPersistRoutineExecution(ctx) {
7241
+ if (ctx?.data?.isMeta === true || ctx?.data?.is_meta === true) {
7242
+ return false;
7243
+ }
7244
+ const routineTask = resolveTaskByName(ctx?.data?.name);
7245
+ if (routineTask) {
7246
+ return shouldPersistBusinessTaskExecution(routineTask);
7247
+ }
7248
+ return true;
7249
+ }
7250
+ function shouldPersistTaskExecutionMetadata(ctx) {
7251
+ const task = resolveTaskFromMetadataContext(ctx);
7252
+ return shouldPersistBusinessTaskExecution(task);
7253
+ }
7254
+ function shouldPersistTaskExecutionMap(ctx) {
7255
+ return shouldPersistBusinessTaskExecution(resolveTaskFromMetadataContext(ctx)) && shouldPersistBusinessTaskExecution(resolvePredecessorTaskFromMetadataContext(ctx));
7256
+ }
7257
+ function hasInquiryLink(data) {
7258
+ const metaContext = data?.metaContext ?? data?.meta_context;
7259
+ const directInquiryId = metaContext?.__inquiryId ?? metaContext?.__metadata?.__inquiryId;
7260
+ return typeof directInquiryId === "string" && directInquiryId.length > 0;
7261
+ }
6960
7262
  var GraphMetadataController = class _GraphMetadataController {
6961
7263
  static get instance() {
6962
7264
  if (!this._instance) this._instance = new _GraphMetadataController();
6963
7265
  return this._instance;
6964
7266
  }
6965
7267
  constructor() {
7268
+ const buildOnConflictDoNothing = (target) => ({
7269
+ target,
7270
+ action: {
7271
+ do: "nothing"
7272
+ }
7273
+ });
6966
7274
  CadenzaService.createMetaTask("Handle task creation", (ctx) => {
6967
- return buildDatabaseTriggerContext({
6968
- ...ctx.data,
6969
- serviceName: CadenzaService.serviceRegistry.serviceName
6970
- });
7275
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7276
+ return false;
7277
+ }
7278
+ const taskName = String(ctx.data?.name ?? ctx.data?.taskName ?? "");
7279
+ const task = taskName ? CadenzaService.get(taskName) : void 0;
7280
+ const onConflict = buildOnConflictDoNothing([
7281
+ "name",
7282
+ "service_name",
7283
+ "version"
7284
+ ]);
7285
+ if (shouldSkipDirectTaskMetadata(task) || task?.registered || task?.registrationRequested) {
7286
+ return false;
7287
+ }
7288
+ if (task) {
7289
+ task.registrationRequested = true;
7290
+ }
7291
+ return buildDatabaseTriggerContext(
7292
+ {
7293
+ ...ctx.data,
7294
+ serviceName: CadenzaService.serviceRegistry.serviceName
7295
+ },
7296
+ void 0,
7297
+ { onConflict },
7298
+ { onConflict }
7299
+ );
6971
7300
  }).doOn("meta.task.created").emits("global.meta.graph_metadata.task_created");
6972
7301
  CadenzaService.createMetaTask("Handle task update", (ctx) => {
7302
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7303
+ return false;
7304
+ }
7305
+ const task = resolveTaskFromMetadataContext(ctx);
7306
+ if (shouldSkipDirectTaskMetadata(task)) {
7307
+ return false;
7308
+ }
6973
7309
  return buildDatabaseTriggerContext(
6974
7310
  ctx.data ?? void 0,
6975
7311
  {
@@ -6979,11 +7315,14 @@ var GraphMetadataController = class _GraphMetadataController {
6979
7315
  );
6980
7316
  }).doOn("meta.task.layer_index_changed", "meta.task.destroyed").emits("global.meta.graph_metadata.task_updated");
6981
7317
  CadenzaService.createMetaTask("Handle task relationship creation", (ctx) => {
7318
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7319
+ return false;
7320
+ }
6982
7321
  const taskName = ctx.data?.taskName ?? ctx.data?.task_name;
6983
7322
  const predecessorTaskName = ctx.data?.predecessorTaskName ?? ctx.data?.predecessor_task_name;
6984
7323
  const task = taskName ? CadenzaService.get(taskName) : void 0;
6985
7324
  const predecessorTask = predecessorTaskName ? CadenzaService.get(predecessorTaskName) : void 0;
6986
- if (!task?.registered || !predecessorTask?.registered) {
7325
+ if (shouldSkipDirectTaskMetadata(task) || shouldSkipDirectTaskMetadata(predecessorTask) || !task?.registered || !predecessorTask?.registered) {
6987
7326
  return false;
6988
7327
  }
6989
7328
  return buildDatabaseTriggerContext({
@@ -6996,14 +7335,35 @@ var GraphMetadataController = class _GraphMetadataController {
6996
7335
  CadenzaService.log(`Error in task ${ctx.data.taskName}`, ctx.data, "error");
6997
7336
  }).doOn("meta.node.errored");
6998
7337
  CadenzaService.createMetaTask("Handle task signal observation", (ctx) => {
6999
- const isGlobal = ctx.signalName.startsWith("global.");
7338
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7339
+ return false;
7340
+ }
7341
+ const signalName = String(
7342
+ ctx.signalName ?? ctx.data?.signalName ?? ""
7343
+ ).split(":")[0];
7344
+ const task = resolveTaskFromMetadataContext(ctx);
7345
+ if (shouldSkipDirectTaskMetadata(task)) {
7346
+ return false;
7347
+ }
7348
+ if (task?.registered && task.registeredSignals.has(signalName)) {
7349
+ return false;
7350
+ }
7351
+ const isGlobal = signalName.startsWith("global.");
7000
7352
  return buildDatabaseTriggerContext({
7001
7353
  ...ctx.data,
7354
+ signalName,
7002
7355
  isGlobal,
7003
7356
  serviceName: CadenzaService.serviceRegistry.serviceName
7004
7357
  });
7005
7358
  }).doOn("meta.task.observed_signal").emits("global.meta.graph_metadata.task_signal_observed");
7006
7359
  CadenzaService.createMetaTask("Handle task signal attachment", (ctx) => {
7360
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7361
+ return false;
7362
+ }
7363
+ const task = resolveTaskFromMetadataContext(ctx);
7364
+ if (shouldSkipDirectTaskMetadata(task)) {
7365
+ return false;
7366
+ }
7007
7367
  return buildDatabaseTriggerContext(
7008
7368
  ctx.data ?? void 0,
7009
7369
  {
@@ -7013,12 +7373,33 @@ var GraphMetadataController = class _GraphMetadataController {
7013
7373
  );
7014
7374
  }).doOn("meta.task.attached_signal").emits("global.meta.graph_metadata.task_attached_signal");
7015
7375
  CadenzaService.createMetaTask("Handle task intent association", (ctx) => {
7376
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7377
+ return false;
7378
+ }
7379
+ const intentName = String(ctx.data?.intentName ?? "");
7380
+ const task = resolveTaskFromMetadataContext(ctx);
7381
+ if (shouldSkipDirectTaskMetadata(task)) {
7382
+ return false;
7383
+ }
7384
+ if (task?.registered && task.__registeredIntents?.has(
7385
+ intentName
7386
+ )) {
7387
+ return false;
7388
+ }
7016
7389
  return buildDatabaseTriggerContext({
7017
7390
  ...ctx.data,
7391
+ intentName,
7018
7392
  serviceName: CadenzaService.serviceRegistry.serviceName
7019
7393
  });
7020
7394
  }).doOn("meta.task.intent_associated").emits("global.meta.graph_metadata.task_intent_associated");
7021
7395
  CadenzaService.createMetaTask("Handle task unsubscribing signal", (ctx) => {
7396
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7397
+ return false;
7398
+ }
7399
+ const task = resolveTaskFromMetadataContext(ctx);
7400
+ if (shouldSkipDirectTaskMetadata(task)) {
7401
+ return false;
7402
+ }
7022
7403
  return buildDatabaseTriggerContext(
7023
7404
  {
7024
7405
  deleted: true
@@ -7030,6 +7411,13 @@ var GraphMetadataController = class _GraphMetadataController {
7030
7411
  );
7031
7412
  }).doOn("meta.task.unsubscribed_signal").emits("meta.graph_metadata.task_unsubscribed_signal");
7032
7413
  CadenzaService.createMetaTask("Handle task detaching signal", (ctx) => {
7414
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7415
+ return false;
7416
+ }
7417
+ const task = resolveTaskFromMetadataContext(ctx);
7418
+ if (shouldSkipDirectTaskMetadata(task)) {
7419
+ return false;
7420
+ }
7033
7421
  return buildDatabaseTriggerContext(
7034
7422
  {
7035
7423
  deleted: true
@@ -7041,12 +7429,18 @@ var GraphMetadataController = class _GraphMetadataController {
7041
7429
  );
7042
7430
  }).doOn("meta.task.detached_signal").emits("global.meta.graph_metadata.task_detached_signal");
7043
7431
  CadenzaService.createMetaTask("Handle routine creation", (ctx) => {
7432
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7433
+ return false;
7434
+ }
7044
7435
  return buildDatabaseTriggerContext({
7045
7436
  ...ctx.data,
7046
7437
  serviceName: CadenzaService.serviceRegistry.serviceName
7047
7438
  });
7048
7439
  }).doAfter(CadenzaService.registry.registerRoutine).emits("global.meta.graph_metadata.routine_created");
7049
7440
  CadenzaService.createMetaTask("Handle routine update", (ctx) => {
7441
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7442
+ return false;
7443
+ }
7050
7444
  return buildDatabaseTriggerContext(
7051
7445
  ctx.data ?? void 0,
7052
7446
  {
@@ -7056,6 +7450,9 @@ var GraphMetadataController = class _GraphMetadataController {
7056
7450
  );
7057
7451
  }).doOn("meta.routine.destroyed").emits("global.meta.graph_metadata.routine_updated");
7058
7452
  CadenzaService.createMetaTask("Handle adding task to routine", (ctx) => {
7453
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7454
+ return false;
7455
+ }
7059
7456
  return buildDatabaseTriggerContext({
7060
7457
  ...ctx.data,
7061
7458
  serviceName: CadenzaService.serviceRegistry.serviceName
@@ -7071,8 +7468,12 @@ var GraphMetadataController = class _GraphMetadataController {
7071
7468
  CadenzaService.createMetaTask(
7072
7469
  "Handle routine execution creation",
7073
7470
  (ctx) => {
7471
+ if (!shouldPersistRoutineExecution(ctx)) {
7472
+ return false;
7473
+ }
7074
7474
  return buildDatabaseTriggerContext({
7075
7475
  ...ctx.data,
7476
+ previousRoutineExecution: hasInquiryLink(ctx.data) ? null : ctx.data?.previousRoutineExecution ?? ctx.data?.previous_routine_execution ?? null,
7076
7477
  serviceName: CadenzaService.serviceRegistry.serviceName,
7077
7478
  serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId
7078
7479
  });
@@ -7109,6 +7510,9 @@ var GraphMetadataController = class _GraphMetadataController {
7109
7510
  CadenzaService.createMetaTask(
7110
7511
  "Handle task execution creation",
7111
7512
  (ctx) => {
7513
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7514
+ return false;
7515
+ }
7112
7516
  return buildDatabaseTriggerContext({
7113
7517
  ...ctx.data,
7114
7518
  serviceName: CadenzaService.serviceRegistry.serviceName,
@@ -7121,6 +7525,9 @@ var GraphMetadataController = class _GraphMetadataController {
7121
7525
  CadenzaService.createMetaTask(
7122
7526
  "Handle task execution mapped",
7123
7527
  (ctx) => {
7528
+ if (!shouldPersistTaskExecutionMap(ctx)) {
7529
+ return false;
7530
+ }
7124
7531
  return buildDatabaseTriggerContext(
7125
7532
  ctx.data ?? void 0,
7126
7533
  ctx.filter ?? void 0
@@ -7132,6 +7539,9 @@ var GraphMetadataController = class _GraphMetadataController {
7132
7539
  CadenzaService.createMetaTask(
7133
7540
  "Handle task execution started",
7134
7541
  (ctx) => {
7542
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7543
+ return false;
7544
+ }
7135
7545
  return buildDatabaseTriggerContext(
7136
7546
  ctx.data ?? void 0,
7137
7547
  ctx.filter ?? void 0
@@ -7143,6 +7553,9 @@ var GraphMetadataController = class _GraphMetadataController {
7143
7553
  CadenzaService.createMetaTask(
7144
7554
  "Handle task execution ended",
7145
7555
  (ctx) => {
7556
+ if (!shouldPersistTaskExecutionMetadata(ctx)) {
7557
+ return false;
7558
+ }
7146
7559
  return buildDatabaseTriggerContext(
7147
7560
  {
7148
7561
  ...ctx.data,
@@ -7155,9 +7568,39 @@ var GraphMetadataController = class _GraphMetadataController {
7155
7568
  "Handles task execution ended",
7156
7569
  { concurrency: 100, isSubMeta: true }
7157
7570
  ).doOn("meta.node.ended").emits("global.meta.graph_metadata.task_execution_ended");
7571
+ CadenzaService.createMetaTask(
7572
+ "Handle inquiry creation",
7573
+ (ctx) => {
7574
+ if (!shouldPersistBusinessInquiry(ctx)) {
7575
+ return false;
7576
+ }
7577
+ return buildDatabaseTriggerContext({
7578
+ ...ctx.data,
7579
+ serviceName: CadenzaService.serviceRegistry.serviceName,
7580
+ serviceInstanceId: CadenzaService.serviceRegistry.serviceInstanceId,
7581
+ isMeta: false
7582
+ });
7583
+ },
7584
+ "Handles inquiry creation",
7585
+ { concurrency: 100, isSubMeta: true }
7586
+ ).doOn("meta.inquiry_broker.inquiry_started").emits("global.meta.graph_metadata.inquiry_created");
7587
+ CadenzaService.createMetaTask(
7588
+ "Handle inquiry update",
7589
+ (ctx) => {
7590
+ return buildDatabaseTriggerContext(
7591
+ ctx.data ?? void 0,
7592
+ ctx.filter ?? void 0
7593
+ );
7594
+ },
7595
+ "Handles inquiry completion updates",
7596
+ { concurrency: 100, isSubMeta: true }
7597
+ ).doOn("meta.inquiry_broker.inquiry_completed").emits("global.meta.graph_metadata.inquiry_updated");
7158
7598
  CadenzaService.createMetaTask(
7159
7599
  "Handle task execution relationship creation",
7160
7600
  (ctx) => {
7601
+ if (!shouldPersistTaskExecutionMap(ctx)) {
7602
+ return false;
7603
+ }
7161
7604
  return buildDatabaseTriggerContext(
7162
7605
  {
7163
7606
  executionCount: "increment",
@@ -7173,12 +7616,18 @@ var GraphMetadataController = class _GraphMetadataController {
7173
7616
  { concurrency: 100, isSubMeta: true }
7174
7617
  ).doOn("meta.node.mapped", "meta.node.detected_previous_task_execution").emits("global.meta.graph_metadata.relationship_executed");
7175
7618
  CadenzaService.createMetaTask("Handle actor creation", (ctx) => {
7619
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7620
+ return false;
7621
+ }
7176
7622
  return buildDatabaseTriggerContext({
7177
7623
  ...ctx.data,
7178
7624
  service_name: CadenzaService.serviceRegistry.serviceName
7179
7625
  });
7180
7626
  }).doOn("meta.actor.created").emits("global.meta.graph_metadata.actor_created");
7181
7627
  CadenzaService.createMetaTask("Handle actor task association", (ctx) => {
7628
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7629
+ return false;
7630
+ }
7182
7631
  return buildDatabaseTriggerContext({
7183
7632
  ...ctx.data,
7184
7633
  service_name: CadenzaService.serviceRegistry.serviceName
@@ -7186,6 +7635,9 @@ var GraphMetadataController = class _GraphMetadataController {
7186
7635
  }).doOn("meta.actor.task_associated").emits("global.meta.graph_metadata.actor_task_associated");
7187
7636
  registerActorSessionPersistenceTasks();
7188
7637
  CadenzaService.createMetaTask("Handle Intent Creation", (ctx) => {
7638
+ if (!shouldEmitDirectPrimitiveMetadata()) {
7639
+ return false;
7640
+ }
7189
7641
  const intentName = ctx.data?.name;
7190
7642
  return buildDatabaseTriggerContext({
7191
7643
  ...ctx.data,
@@ -7236,6 +7688,9 @@ var AUTHORITY_SYNC_DEBUG_TASK_NAMES = /* @__PURE__ */ new Set([
7236
7688
  ]);
7237
7689
  var AUTHORITY_SYNC_DEBUG_ROUTINE_NAMES = /* @__PURE__ */ new Set(["Sync services"]);
7238
7690
  var INTENT_MAP_DEBUG_ENABLED = process.env.CADENZA_INTENT_MAP_DEBUG === "1" || process.env.CADENZA_INTENT_MAP_DEBUG === "true";
7691
+ var POSTGRES_SETUP_DEBUG_ENABLED = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
7692
+ var GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY = 200;
7693
+ var GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS = 12e4;
7239
7694
  function logAuthoritySyncDebug(event, payload) {
7240
7695
  if (!AUTHORITY_SYNC_DEBUG_ENABLED) {
7241
7696
  return;
@@ -7281,6 +7736,12 @@ function logIntentMapSetupDebug(event, payload) {
7281
7736
  }
7282
7737
  console.log("[CADENZA_INTENT_MAP_DEBUG]", event, payload);
7283
7738
  }
7739
+ function logPostgresSetupDebug(event, payload) {
7740
+ if (!POSTGRES_SETUP_DEBUG_ENABLED) {
7741
+ return;
7742
+ }
7743
+ console.log("[CADENZA_POSTGRES_SETUP_DEBUG]", event, payload);
7744
+ }
7284
7745
  function buildAuthoritySyncDebugSummary(payload, context) {
7285
7746
  const data = payload.data && typeof payload.data === "object" && !Array.isArray(payload.data) ? payload.data : {};
7286
7747
  return {
@@ -7492,7 +7953,55 @@ function errorMessage(error) {
7492
7953
  }
7493
7954
  return String(error);
7494
7955
  }
7495
- function isTransientDatabaseError(error) {
7956
+ var EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS = /* @__PURE__ */ new Set([
7957
+ "routine_execution_execution_trace_id_fkey",
7958
+ "routine_execution_previous_routine_execution_fkey",
7959
+ "task_execution_routine_execution_id_fkey",
7960
+ "task_execution_execution_trace_id_fkey",
7961
+ "task_execution_signal_emission_id_fkey",
7962
+ "task_execution_inquiry_id_fkey",
7963
+ "task_execution_map_task_execution_id_fkey",
7964
+ "task_execution_map_previous_task_execution_id_fkey",
7965
+ "signal_emission_execution_trace_id_fkey",
7966
+ "signal_emission_routine_execution_id_fkey",
7967
+ "signal_emission_task_execution_id_fkey",
7968
+ "inquiry_execution_trace_id_fkey",
7969
+ "inquiry_routine_execution_id_fkey",
7970
+ "inquiry_task_execution_id_fkey"
7971
+ ]);
7972
+ function resolveOperationTableName(operationLabel) {
7973
+ if (!operationLabel) {
7974
+ return null;
7975
+ }
7976
+ const match = /^insert\s+([a-z0-9_]+)$/i.exec(operationLabel.trim());
7977
+ return match?.[1]?.toLowerCase() ?? null;
7978
+ }
7979
+ function isRetryableExecutionObservabilityForeignKeyError(error, operationLabel) {
7980
+ if (!error || typeof error !== "object") {
7981
+ return false;
7982
+ }
7983
+ const dbError = error;
7984
+ if (String(dbError.code ?? "") !== "23503") {
7985
+ return false;
7986
+ }
7987
+ const constraint = String(dbError.constraint ?? "").toLowerCase();
7988
+ if (constraint && EXECUTION_OBSERVABILITY_RETRYABLE_FOREIGN_KEYS.has(constraint)) {
7989
+ return true;
7990
+ }
7991
+ const table = String(dbError.table ?? "").toLowerCase() || resolveOperationTableName(operationLabel) || "";
7992
+ if (![
7993
+ "routine_execution",
7994
+ "task_execution",
7995
+ "task_execution_map",
7996
+ "signal_emission",
7997
+ "inquiry"
7998
+ ].includes(table)) {
7999
+ return false;
8000
+ }
8001
+ const message = String(dbError.message ?? "").toLowerCase();
8002
+ return message.includes("foreign key constraint") && (message.includes("execution_trace") || message.includes("routine_execution") || message.includes("task_execution") || message.includes("signal_emission") || message.includes("inquiry"));
8003
+ }
8004
+ function isTransientDatabaseError(error, operationLabel) {
7496
8005
  if (!error || typeof error !== "object") {
7497
8006
  return false;
7498
8007
  }
@@ -7502,7 +8011,10 @@ function isTransientDatabaseError(error) {
7502
8011
  return true;
7503
8012
  }
7504
8013
  const message = String(dbError.message ?? "").toLowerCase();
7505
- return message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset");
8014
+ if (message.includes("timeout") || message.includes("terminating connection") || message.includes("connection reset")) {
8015
+ return true;
8016
+ }
8017
+ return isRetryableExecutionObservabilityForeignKeyError(error, operationLabel);
7506
8018
  }
7507
8019
  function isSqlIdentifier(value) {
7508
8020
  return /^[a-z_][a-z0-9_]*$/.test(value);
@@ -7536,6 +8048,37 @@ function resolveDataRows(data) {
7536
8048
  }
7537
8049
  return [ensurePlainObject(data, "data")];
7538
8050
  }
8051
+ var DB_OPERATION_CONTEXT_KEYS = [
8052
+ "data",
8053
+ "batch",
8054
+ "transaction",
8055
+ "onConflict",
8056
+ "filter",
8057
+ "fields",
8058
+ "joins",
8059
+ "sort",
8060
+ "limit",
8061
+ "offset",
8062
+ "queryMode",
8063
+ "aggregates",
8064
+ "groupBy"
8065
+ ];
8066
+ function mergeTriggerQueryData(context, triggerQueryData) {
8067
+ const existingQueryData = typeof context.queryData === "object" && context.queryData ? { ...context.queryData } : {};
8068
+ for (const key of DB_OPERATION_CONTEXT_KEYS) {
8069
+ if (!Object.prototype.hasOwnProperty.call(existingQueryData, key) && context[key] !== void 0) {
8070
+ existingQueryData[key] = context[key];
8071
+ }
8072
+ }
8073
+ return {
8074
+ ...existingQueryData,
8075
+ ...triggerQueryData
8076
+ };
8077
+ }
8078
+ function resolveOperationPayload(context) {
8079
+ const queryData = typeof context.queryData === "object" && context.queryData ? context.queryData : {};
8080
+ return mergeTriggerQueryData(context, queryData);
8081
+ }
7539
8082
  function buildAddConstraintIfMissingStatement(tableName, constraintName, constraintDefinition) {
7540
8083
  const escapedConstraintName = constraintName.replace(/'/g, "''");
7541
8084
  const escapedTableName = tableName.replace(/'/g, "''");
@@ -7673,9 +8216,19 @@ var DatabaseController = class _DatabaseController {
7673
8216
  };
7674
8217
  const runtimeState = registration.actor.getRuntimeState(registration.actorKey);
7675
8218
  if (runtimeState?.ready) {
8219
+ logPostgresSetupDebug("setup_already_ready", {
8220
+ actorName: registration.actorName,
8221
+ databaseName: registration.databaseName
8222
+ });
7676
8223
  this.emitSetupDone(registration, payload);
7677
8224
  return registration;
7678
8225
  }
8226
+ logPostgresSetupDebug("emit_setup_requested", {
8227
+ actorName: registration.actorName,
8228
+ databaseName: registration.databaseName,
8229
+ ownerServiceName: registration.ownerServiceName,
8230
+ payloadKeys: Object.keys(payload)
8231
+ });
7679
8232
  CadenzaService.emit(registration.setupSignal, payload);
7680
8233
  return registration;
7681
8234
  }
@@ -7727,6 +8280,11 @@ var DatabaseController = class _DatabaseController {
7727
8280
  `Setup ${registration.actorName}`,
7728
8281
  registration.actor.task(
7729
8282
  async ({ input, state, runtimeState, setState, setRuntimeState, emit }) => {
8283
+ logPostgresSetupDebug("setup_task_started", {
8284
+ actorName: registration.actorName,
8285
+ databaseName: registration.databaseName,
8286
+ inputKeys: Object.keys(input ?? {})
8287
+ });
7730
8288
  const requestedDatabaseName = String(
7731
8289
  input.options?.databaseName ?? input.databaseName ?? registration.databaseName
7732
8290
  );
@@ -7745,11 +8303,19 @@ var DatabaseController = class _DatabaseController {
7745
8303
  }
7746
8304
  try {
7747
8305
  await this.createDatabaseIfMissing(requestedDatabaseName);
8306
+ logPostgresSetupDebug("database_ready", {
8307
+ actorName: registration.actorName,
8308
+ databaseName: requestedDatabaseName
8309
+ });
7748
8310
  const pool = this.createTargetPool(
7749
8311
  requestedDatabaseName,
7750
8312
  state.safetyPolicy.statementTimeoutMs
7751
8313
  );
7752
8314
  await this.checkPoolHealth(pool, state.safetyPolicy);
8315
+ logPostgresSetupDebug("pool_healthy", {
8316
+ actorName: registration.actorName,
8317
+ databaseName: requestedDatabaseName
8318
+ });
7753
8319
  this.validateSchema({
7754
8320
  schema: registration.schema,
7755
8321
  options: registration.options
@@ -7797,6 +8363,10 @@ var DatabaseController = class _DatabaseController {
7797
8363
  this.emitSetupDone(registration, {
7798
8364
  ...input
7799
8365
  });
8366
+ logPostgresSetupDebug("setup_task_completed", {
8367
+ actorName: registration.actorName,
8368
+ databaseName: requestedDatabaseName
8369
+ });
7800
8370
  return {
7801
8371
  ...input,
7802
8372
  __success: true,
@@ -7806,6 +8376,11 @@ var DatabaseController = class _DatabaseController {
7806
8376
  };
7807
8377
  } catch (error) {
7808
8378
  const message = errorMessage(error);
8379
+ logPostgresSetupDebug("setup_task_failed", {
8380
+ actorName: registration.actorName,
8381
+ databaseName: requestedDatabaseName,
8382
+ error: message
8383
+ });
7809
8384
  setRuntimeState({
7810
8385
  pool: null,
7811
8386
  ready: false,
@@ -7933,7 +8508,7 @@ var DatabaseController = class _DatabaseController {
7933
8508
  return await work();
7934
8509
  } catch (error) {
7935
8510
  lastError = error;
7936
- const transient = isTransientDatabaseError(error);
8511
+ const transient = isTransientDatabaseError(error, operationLabel);
7937
8512
  if (!transient || attempt >= attempts) {
7938
8513
  break;
7939
8514
  }
@@ -8599,7 +9174,7 @@ var DatabaseController = class _DatabaseController {
8599
9174
  description: `Macro upsert operation for table ${tableName}`,
8600
9175
  input: insertSchema
8601
9176
  });
8602
- CadenzaService.createThrottledTask(
9177
+ CadenzaService.createTask(
8603
9178
  `UPSERT ${tableName}`,
8604
9179
  registration.actor.task(
8605
9180
  async ({ input }) => {
@@ -8620,9 +9195,11 @@ var DatabaseController = class _DatabaseController {
8620
9195
  },
8621
9196
  { mode: "write" }
8622
9197
  ),
8623
- (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
8624
9198
  `Macro upsert task for ${tableName}`,
8625
9199
  {
9200
+ concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
9201
+ timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
9202
+ getTagCallback: () => `upsert:${registration.actorToken}:${tableName}`,
8626
9203
  isMeta: registration.options.isMeta,
8627
9204
  isSubMeta: registration.options.isMeta,
8628
9205
  validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
@@ -8653,15 +9230,15 @@ var DatabaseController = class _DatabaseController {
8653
9230
  };
8654
9231
  }
8655
9232
  if (trigger.queryData) {
8656
- context.queryData = {
8657
- ...context.queryData ?? {},
8658
- ...trigger.queryData
8659
- };
9233
+ context.queryData = mergeTriggerQueryData(
9234
+ context,
9235
+ trigger.queryData
9236
+ );
8660
9237
  payloadModifiedByTriggers = true;
8661
9238
  }
8662
9239
  }
8663
9240
  }
8664
- const operationPayload = typeof context.queryData === "object" && context.queryData ? context.queryData : context;
9241
+ const operationPayload = resolveOperationPayload(context);
8665
9242
  const shouldDebugAuthoritySync = shouldDebugAuthoritySyncPayload(
8666
9243
  tableName,
8667
9244
  operationPayload
@@ -8758,18 +9335,29 @@ var DatabaseController = class _DatabaseController {
8758
9335
  },
8759
9336
  { mode: op === "query" ? "read" : "write" }
8760
9337
  );
8761
- const task = CadenzaService.createThrottledTask(
9338
+ const taskOptions = {
9339
+ isMeta: registration.options.isMeta,
9340
+ isSubMeta: registration.options.isMeta,
9341
+ validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
9342
+ inputSchema: schema
9343
+ };
9344
+ const task = (op === "insert" ? CadenzaService.createTask(
8762
9345
  taskName,
8763
9346
  databaseTaskFunction,
8764
- (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
8765
9347
  `Auto-generated ${op} task for ${tableName} (PostgresActor)`,
8766
9348
  {
8767
- isMeta: registration.options.isMeta,
8768
- isSubMeta: registration.options.isMeta,
8769
- validateInputContext: shouldValidateGeneratedDbTaskInput(registration),
8770
- inputSchema: schema
9349
+ ...taskOptions,
9350
+ concurrency: GENERATED_POSTGRES_WRITE_TASK_CONCURRENCY,
9351
+ timeout: GENERATED_POSTGRES_WRITE_TASK_TIMEOUT_MS,
9352
+ getTagCallback: () => `insert:${registration.actorToken}:${tableName}`
8771
9353
  }
8772
- ).doOn(
9354
+ ) : CadenzaService.createThrottledTask(
9355
+ taskName,
9356
+ databaseTaskFunction,
9357
+ (context) => context?.__metadata?.__executionTraceId ?? context?.__executionTraceId ?? "default",
9358
+ `Auto-generated ${op} task for ${tableName} (PostgresActor)`,
9359
+ taskOptions
9360
+ )).doOn(
8773
9361
  ...table.customSignals?.triggers?.[op]?.map(
8774
9362
  (signal) => typeof signal === "string" ? signal : signal.signal
8775
9363
  ) ?? []
@@ -9426,7 +10014,7 @@ function buildIntentRegistryData(intent) {
9426
10014
  description: typeof intent?.description === "string" ? intent.description : "",
9427
10015
  input: intent?.input && typeof intent.input === "object" ? intent.input : { type: "object" },
9428
10016
  output: intent?.output && typeof intent.output === "object" ? intent.output : { type: "object" },
9429
- isMeta: isMetaIntentName(name)
10017
+ is_meta: isMetaIntentName(name)
9430
10018
  };
9431
10019
  }
9432
10020
  function getJoinedContextValue(ctx, key) {
@@ -9649,6 +10237,22 @@ var EARLY_SYNC_TICK_DELAYS_MS = [
9649
10237
  BOOTSTRAP_SYNC_STALE_CYCLE_MS * 2 + 2e3,
9650
10238
  BOOTSTRAP_SYNC_STALE_CYCLE_MS * 3 + 3e3
9651
10239
  ];
10240
+ function shouldTraceSyncPhase(serviceName) {
10241
+ const configured = process.env.CADENZA_SYNC_PHASE_TRACE_SERVICE;
10242
+ if (!configured || !serviceName) {
10243
+ return false;
10244
+ }
10245
+ return configured === serviceName;
10246
+ }
10247
+ function canonicalizeSignalName(signalName) {
10248
+ if (typeof signalName !== "string") {
10249
+ return "";
10250
+ }
10251
+ return signalName.split(":")[0]?.trim() ?? "";
10252
+ }
10253
+ function isBootstrapLocalOnlySignal(signalName) {
10254
+ return signalName === "meta.service_registry.insert_execution_requested" || signalName.startsWith("meta.sync_controller.");
10255
+ }
9652
10256
  function getRegistrableTasks() {
9653
10257
  return Array.from(CadenzaService.registry.tasks.values()).filter(
9654
10258
  (task) => task.register && !task.isHidden && !task.isDeputy
@@ -9657,24 +10261,51 @@ function getRegistrableTasks() {
9657
10261
  function getRegistrableRoutines() {
9658
10262
  return Array.from(CadenzaService.registry.routines.values());
9659
10263
  }
9660
- function isAuthoritySyncSignal(signalName) {
9661
- return decomposeSignalName(signalName).isGlobal;
9662
- }
9663
10264
  function getRegistrableSignalObservers() {
9664
10265
  const signalObservers = CadenzaService.signalBroker.signalObservers;
9665
10266
  if (!signalObservers) {
9666
10267
  return [];
9667
10268
  }
9668
- return Array.from(signalObservers.entries()).filter(([signalName]) => isAuthoritySyncSignal(signalName)).map(([signalName, observer]) => ({
9669
- signalName,
9670
- ...observer
9671
- }));
10269
+ const canonicalObservers = /* @__PURE__ */ new Map();
10270
+ for (const [rawSignalName, observer] of signalObservers.entries()) {
10271
+ const signalName = canonicalizeSignalName(rawSignalName);
10272
+ if (!signalName || isBootstrapLocalOnlySignal(signalName)) {
10273
+ continue;
10274
+ }
10275
+ const existing = canonicalObservers.get(signalName);
10276
+ canonicalObservers.set(signalName, {
10277
+ signalName,
10278
+ registered: existing?.registered === true || observer?.registered === true
10279
+ });
10280
+ }
10281
+ return Array.from(canonicalObservers.values());
10282
+ }
10283
+ function isLocallyHandledIntentName(intentName) {
10284
+ const observer = CadenzaService.inquiryBroker.inquiryObservers.get(intentName);
10285
+ if (!observer) {
10286
+ return false;
10287
+ }
10288
+ for (const task of observer.tasks) {
10289
+ if (task.register && !task.isHidden && !task.isDeputy) {
10290
+ return true;
10291
+ }
10292
+ }
10293
+ return false;
9672
10294
  }
9673
10295
  function getRegistrableIntentNames() {
9674
10296
  return Array.from(CadenzaService.inquiryBroker.intents.values()).map((intent) => buildIntentRegistryData(intent)).filter(
9675
10297
  (intentDefinition) => intentDefinition !== null
10298
+ ).filter(
10299
+ (intentDefinition) => isLocallyHandledIntentName(String(intentDefinition.name))
9676
10300
  ).map((intentDefinition) => String(intentDefinition.name));
9677
10301
  }
10302
+ function isRegistrableLocalIntentDefinition(intent) {
10303
+ const intentData = buildIntentRegistryData(intent);
10304
+ if (!intentData) {
10305
+ return false;
10306
+ }
10307
+ return isLocallyHandledIntentName(String(intentData.name));
10308
+ }
9678
10309
  function buildActorRegistrationKey(actor, serviceName) {
9679
10310
  const data = buildActorRegistrationData(actor);
9680
10311
  const name = typeof data.name === "string" && data.name.trim().length > 0 ? data.name.trim() : "";
@@ -9809,6 +10440,13 @@ var GraphSyncController = class _GraphSyncController {
9809
10440
  const finalizeTaskSync = (emit, ctx) => {
9810
10441
  const pendingTasks = getRegistrableTasks().filter((task) => !task.registered);
9811
10442
  const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10443
+ if (shouldTraceSyncPhase(serviceName2)) {
10444
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_tasks", {
10445
+ serviceName: serviceName2,
10446
+ pendingCount: pendingTasks.length,
10447
+ sample: pendingTasks.slice(0, 5).map((task) => task.name)
10448
+ });
10449
+ }
9812
10450
  if (pendingTasks.length > 0) {
9813
10451
  this.tasksSynced = false;
9814
10452
  return false;
@@ -9828,6 +10466,13 @@ var GraphSyncController = class _GraphSyncController {
9828
10466
  (routine) => !routine.registered
9829
10467
  );
9830
10468
  const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10469
+ if (shouldTraceSyncPhase(serviceName2)) {
10470
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_routines", {
10471
+ serviceName: serviceName2,
10472
+ pendingCount: pendingRoutines.length,
10473
+ sample: pendingRoutines.slice(0, 5).map((routine) => routine.name)
10474
+ });
10475
+ }
9831
10476
  if (pendingRoutines.length > 0) {
9832
10477
  this.routinesSynced = false;
9833
10478
  return false;
@@ -9847,6 +10492,13 @@ var GraphSyncController = class _GraphSyncController {
9847
10492
  (observer) => observer.registered !== true
9848
10493
  );
9849
10494
  const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10495
+ if (shouldTraceSyncPhase(serviceName2)) {
10496
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_signals", {
10497
+ serviceName: serviceName2,
10498
+ pendingCount: pendingSignals.length,
10499
+ sample: pendingSignals.slice(0, 5).map((observer) => observer.signalName)
10500
+ });
10501
+ }
9850
10502
  if (pendingSignals.length > 0) {
9851
10503
  this.signalsSynced = false;
9852
10504
  return false;
@@ -9866,6 +10518,13 @@ var GraphSyncController = class _GraphSyncController {
9866
10518
  (intentName) => !this.registeredIntentDefinitions.has(intentName)
9867
10519
  );
9868
10520
  const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
10521
+ if (shouldTraceSyncPhase(serviceName2)) {
10522
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_intents", {
10523
+ serviceName: serviceName2,
10524
+ pendingCount: pendingIntentNames.length,
10525
+ sample: pendingIntentNames.slice(0, 5)
10526
+ });
10527
+ }
9869
10528
  if (pendingIntentNames.length > 0) {
9870
10529
  this.intentsSynced = false;
9871
10530
  return false;
@@ -9887,6 +10546,13 @@ var GraphSyncController = class _GraphSyncController {
9887
10546
  return false;
9888
10547
  }
9889
10548
  const pendingActorKeys = CadenzaService.getAllActors().map((actor) => buildActorRegistrationKey(actor, syncServiceName)).filter((registrationKey) => Boolean(registrationKey)).filter((registrationKey) => !this.registeredActors.has(registrationKey));
10549
+ if (shouldTraceSyncPhase(syncServiceName)) {
10550
+ console.log("[CADENZA_SYNC_PHASE_TRACE] finalize_actors", {
10551
+ serviceName: syncServiceName,
10552
+ pendingCount: pendingActorKeys.length,
10553
+ sample: pendingActorKeys.slice(0, 5)
10554
+ });
10555
+ }
9890
10556
  if (pendingActorKeys.length > 0) {
9891
10557
  this.actorsSynced = false;
9892
10558
  return false;
@@ -9967,8 +10633,8 @@ var GraphSyncController = class _GraphSyncController {
9967
10633
  name: routine.name,
9968
10634
  version: routine.version,
9969
10635
  description: routine.description,
9970
- serviceName: serviceName2,
9971
- isMeta: routine.isMeta
10636
+ service_name: serviceName2,
10637
+ is_meta: routine.isMeta
9972
10638
  },
9973
10639
  __routineName: routine.name
9974
10640
  };
@@ -10031,11 +10697,11 @@ var GraphSyncController = class _GraphSyncController {
10031
10697
  yield {
10032
10698
  __syncing: ctx.__syncing,
10033
10699
  data: {
10034
- taskName: nextTask.name,
10035
- taskVersion: nextTask.version,
10036
- routineName: routine.name,
10037
- routineVersion: routine.version,
10038
- serviceName: serviceName2
10700
+ task_name: nextTask.name,
10701
+ task_version: nextTask.version,
10702
+ routine_name: routine.name,
10703
+ routine_version: routine.version,
10704
+ service_name: serviceName2
10039
10705
  },
10040
10706
  __routineName: routine.name,
10041
10707
  __taskName: nextTask.name
@@ -10093,12 +10759,20 @@ var GraphSyncController = class _GraphSyncController {
10093
10759
  });
10094
10760
  const { signals } = ctx;
10095
10761
  if (!signals) return;
10096
- const filteredSignals = signals.filter((signal) => {
10097
- if (signal.data.registered) {
10762
+ const seenSignals = /* @__PURE__ */ new Set();
10763
+ const filteredSignals = signals.map((signal) => ({
10764
+ signalName: canonicalizeSignalName(signal.signal),
10765
+ data: signal.data
10766
+ })).filter((signal) => {
10767
+ if (!signal.signalName || signal.data?.registered || isBootstrapLocalOnlySignal(signal.signalName)) {
10768
+ return false;
10769
+ }
10770
+ if (seenSignals.has(signal.signalName)) {
10098
10771
  return false;
10099
10772
  }
10100
- return isAuthoritySyncSignal(signal.signal);
10101
- }).map((signal) => signal.signal);
10773
+ seenSignals.add(signal.signalName);
10774
+ return true;
10775
+ }).map((signal) => signal.signalName);
10102
10776
  for (const signal of filteredSignals) {
10103
10777
  const { isMeta, isGlobal, domain, action } = decomposeSignalName(signal);
10104
10778
  this.signalsSynced = false;
@@ -10106,10 +10780,10 @@ var GraphSyncController = class _GraphSyncController {
10106
10780
  __syncing: ctx.__syncing,
10107
10781
  data: {
10108
10782
  name: signal,
10109
- isGlobal,
10783
+ is_global: isGlobal,
10110
10784
  domain,
10111
10785
  action,
10112
- isMeta
10786
+ is_meta: isMeta
10113
10787
  },
10114
10788
  __signal: signal
10115
10789
  };
@@ -10150,6 +10824,7 @@ var GraphSyncController = class _GraphSyncController {
10150
10824
  const observer = signalObservers?.get(signalName);
10151
10825
  if (observer) {
10152
10826
  observer.registered = true;
10827
+ observer.registrationRequested = false;
10153
10828
  }
10154
10829
  emit(
10155
10830
  "meta.sync_controller.signal_registered",
@@ -10187,25 +10862,25 @@ var GraphSyncController = class _GraphSyncController {
10187
10862
  name: task.name,
10188
10863
  version: task.version,
10189
10864
  description: task.description,
10190
- functionString: __functionString,
10191
- tagIdGetter: __getTagCallback,
10192
- layerIndex: task.layerIndex,
10865
+ function_string: __functionString,
10866
+ tag_id_getter: __getTagCallback,
10867
+ layer_index: task.layerIndex,
10193
10868
  concurrency: task.concurrency,
10194
10869
  timeout: task.timeout,
10195
- isUnique: task.isUnique,
10196
- isSignal: task.isSignal,
10197
- isThrottled: task.isThrottled,
10198
- isDebounce: task.isDebounce,
10199
- isEphemeral: task.isEphemeral,
10200
- isMeta: task.isMeta,
10201
- isSubMeta: task.isSubMeta,
10202
- isHidden: task.isHidden,
10203
- validateInputContext: task.validateInputContext,
10204
- validateOutputContext: task.validateOutputContext,
10205
- retryCount: task.retryCount,
10206
- retryDelay: task.retryDelay,
10207
- retryDelayMax: task.retryDelayMax,
10208
- retryDelayFactor: task.retryDelayFactor,
10870
+ is_unique: task.isUnique,
10871
+ is_signal: task.isSignal,
10872
+ is_throttled: task.isThrottled,
10873
+ is_debounce: task.isDebounce,
10874
+ is_ephemeral: task.isEphemeral,
10875
+ is_meta: task.isMeta,
10876
+ is_sub_meta: task.isSubMeta,
10877
+ is_hidden: task.isHidden,
10878
+ validate_input_context: task.validateInputContext,
10879
+ validate_output_context: task.validateOutputContext,
10880
+ retry_count: task.retryCount,
10881
+ retry_delay: task.retryDelay,
10882
+ retry_delay_max: task.retryDelayMax,
10883
+ retry_delay_factor: task.retryDelayFactor,
10209
10884
  service_name: serviceName2,
10210
10885
  signals: {
10211
10886
  emits: Array.from(task.emitsSignals),
@@ -10249,6 +10924,7 @@ var GraphSyncController = class _GraphSyncController {
10249
10924
  return true;
10250
10925
  }
10251
10926
  task.registered = true;
10927
+ task.registrationRequested = false;
10252
10928
  emit(
10253
10929
  "meta.sync_controller.task_registered",
10254
10930
  buildMinimalSyncSignalContext(ctx, {
@@ -10436,11 +11112,11 @@ var GraphSyncController = class _GraphSyncController {
10436
11112
  yield {
10437
11113
  __syncing: ctx.__syncing,
10438
11114
  data: {
10439
- signalName: _signal,
10440
- isGlobal,
10441
- taskName: task.name,
10442
- taskVersion: task.version,
10443
- serviceName: serviceName2
11115
+ signal_name: _signal,
11116
+ is_global: isGlobal,
11117
+ task_name: task.name,
11118
+ task_version: task.version,
11119
+ service_name: serviceName2
10444
11120
  },
10445
11121
  __taskName: task.name,
10446
11122
  __signal: signal
@@ -10481,6 +11157,9 @@ var GraphSyncController = class _GraphSyncController {
10481
11157
  });
10482
11158
  const intents = Array.isArray(ctx.intents) ? ctx.intents : Array.from(CadenzaService.inquiryBroker.intents.values());
10483
11159
  for (const intent of intents) {
11160
+ if (!isRegistrableLocalIntentDefinition(intent)) {
11161
+ continue;
11162
+ }
10484
11163
  const intentData = buildIntentRegistryData(intent);
10485
11164
  if (!intentData) {
10486
11165
  continue;
@@ -10578,19 +11257,19 @@ var GraphSyncController = class _GraphSyncController {
10578
11257
  yield {
10579
11258
  __syncing: ctx.__syncing,
10580
11259
  data: {
10581
- intentName: intent,
10582
- taskName: task.name,
10583
- taskVersion: task.version,
10584
- serviceName: serviceName2
11260
+ intent_name: intent,
11261
+ task_name: task.name,
11262
+ task_version: task.version,
11263
+ service_name: serviceName2
10585
11264
  },
10586
11265
  __taskName: task.name,
10587
11266
  __intent: intent,
10588
11267
  __intentDefinition: intentDefinition,
10589
11268
  __intentMapData: {
10590
- intentName: intent,
10591
- taskName: task.name,
10592
- taskVersion: task.version,
10593
- serviceName: serviceName2
11269
+ intent_name: intent,
11270
+ task_name: task.name,
11271
+ task_version: task.version,
11272
+ service_name: serviceName2
10594
11273
  }
10595
11274
  };
10596
11275
  emittedCount += 1;
@@ -10628,7 +11307,9 @@ var GraphSyncController = class _GraphSyncController {
10628
11307
  CadenzaService.debounce("meta.sync_controller.synced_resource", {
10629
11308
  delayMs: 3e3
10630
11309
  });
10631
- if (task.hidden || !task.register || task.isDeputy) return;
11310
+ if (task.hidden || !task.register || task.isDeputy || !task.registered) {
11311
+ return;
11312
+ }
10632
11313
  const predecessorServiceName = resolveSyncServiceName(task);
10633
11314
  if (!predecessorServiceName) {
10634
11315
  return;
@@ -10643,12 +11324,12 @@ var GraphSyncController = class _GraphSyncController {
10643
11324
  }
10644
11325
  yield {
10645
11326
  data: {
10646
- taskName: t.name,
10647
- taskVersion: t.version,
10648
- predecessorTaskName: task.name,
10649
- predecessorTaskVersion: task.version,
10650
- serviceName: serviceName2,
10651
- predecessorServiceName
11327
+ task_name: t.name,
11328
+ task_version: t.version,
11329
+ predecessor_task_name: task.name,
11330
+ predecessor_task_version: task.version,
11331
+ service_name: serviceName2,
11332
+ predecessor_service_name: predecessorServiceName
10652
11333
  },
10653
11334
  __taskName: task.name,
10654
11335
  __nextTaskName: t.name
@@ -10695,75 +11376,7 @@ var GraphSyncController = class _GraphSyncController {
10695
11376
  taskMapRegistrationGraph,
10696
11377
  recordTaskMapRegistrationTask
10697
11378
  );
10698
- this.registerDeputyRelationshipTask = CadenzaService.createMetaTask(
10699
- "Register deputy relationship",
10700
- (ctx) => {
10701
- const task = ctx.task;
10702
- if (task.hidden || !task.register) return;
10703
- if (task.isDeputy && !task.signalName) {
10704
- if (task.registeredDeputyMap) return;
10705
- const serviceName2 = resolveSyncServiceName(task);
10706
- const predecessorServiceName = resolveSyncServiceName();
10707
- if (!serviceName2 || !predecessorServiceName) {
10708
- return;
10709
- }
10710
- return {
10711
- data: {
10712
- task_name: task.remoteRoutineName,
10713
- task_version: 1,
10714
- service_name: serviceName2,
10715
- predecessor_task_name: task.name,
10716
- predecessor_task_version: task.version,
10717
- predecessor_service_name: predecessorServiceName
10718
- },
10719
- __taskName: task.name
10720
- };
10721
- }
10722
- }
10723
- );
10724
- const deputyRelationshipRegistrationGraph = resolveSyncInsertTask(
10725
- this.isCadenzaDBReady,
10726
- "directional_task_graph_map",
10727
- {
10728
- onConflict: {
10729
- target: [
10730
- "task_name",
10731
- "predecessor_task_name",
10732
- "task_version",
10733
- "predecessor_task_version",
10734
- "service_name",
10735
- "predecessor_service_name"
10736
- ],
10737
- action: {
10738
- do: "nothing"
10739
- }
10740
- }
10741
- },
10742
- { concurrency: 30 }
10743
- );
10744
- const recordDeputyRelationshipRegistrationTask = CadenzaService.createMetaTask(
10745
- "Record deputy relationship registration",
10746
- (ctx) => {
10747
- if (!didSyncInsertSucceed(ctx)) {
10748
- return;
10749
- }
10750
- CadenzaService.debounce("meta.sync_controller.synced_resource", {
10751
- delayMs: 3e3
10752
- });
10753
- const task = resolveLocalTaskFromSyncContext(ctx);
10754
- if (!task) {
10755
- return true;
10756
- }
10757
- task.registeredDeputyMap = true;
10758
- }
10759
- );
10760
- wireSyncTaskGraph(
10761
- this.registerDeputyRelationshipTask,
10762
- deputyRelationshipRegistrationGraph,
10763
- recordDeputyRelationshipRegistrationTask
10764
- );
10765
11379
  const hasPendingDirectionalTaskMaps = () => getRegistrableTasks().some((task) => {
10766
- const taskWithDeputyState = task;
10767
11380
  if (task.isHidden || !task.register || !task.registered) {
10768
11381
  return false;
10769
11382
  }
@@ -10779,9 +11392,6 @@ var GraphSyncController = class _GraphSyncController {
10779
11392
  return true;
10780
11393
  }
10781
11394
  }
10782
- if (task.isDeputy && !taskWithDeputyState.signalName && !taskWithDeputyState.registeredDeputyMap) {
10783
- return Boolean(resolveSyncServiceName(task) && resolveSyncServiceName());
10784
- }
10785
11395
  return false;
10786
11396
  });
10787
11397
  const hasPendingSignalTaskMaps = () => getRegistrableTasks().some((task) => {
@@ -10979,6 +11589,18 @@ var GraphSyncController = class _GraphSyncController {
10979
11589
  if (!syncCycleId) {
10980
11590
  return false;
10981
11591
  }
11592
+ const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
11593
+ if (shouldTraceSyncPhase(serviceName2)) {
11594
+ console.log("[CADENZA_SYNC_PHASE_TRACE] map_barrier_check", {
11595
+ serviceName: serviceName2,
11596
+ syncCycleId,
11597
+ directionalTaskMapsSynced: this.directionalTaskMapsSynced,
11598
+ signalTaskMapsSynced: this.signalTaskMapsSynced,
11599
+ intentTaskMapsSynced: this.intentTaskMapsSynced,
11600
+ actorTaskMapsSynced: this.actorTaskMapsSynced,
11601
+ routineTaskMapsSynced: this.routineTaskMapsSynced
11602
+ });
11603
+ }
10982
11604
  if (!this.directionalTaskMapsSynced || !this.signalTaskMapsSynced || !this.intentTaskMapsSynced || !this.actorTaskMapsSynced || !this.routineTaskMapsSynced) {
10983
11605
  return false;
10984
11606
  }
@@ -11046,6 +11668,17 @@ var GraphSyncController = class _GraphSyncController {
11046
11668
  return false;
11047
11669
  }
11048
11670
  const serviceName2 = typeof ctx.__serviceName === "string" ? ctx.__serviceName : resolveSyncServiceName();
11671
+ if (shouldTraceSyncPhase(serviceName2)) {
11672
+ console.log("[CADENZA_SYNC_PHASE_TRACE] primitive_barrier_check", {
11673
+ serviceName: serviceName2,
11674
+ syncCycleId,
11675
+ tasksSynced: this.tasksSynced,
11676
+ signalsSynced: this.signalsSynced,
11677
+ intentsSynced: this.intentsSynced,
11678
+ actorsSynced: this.actorsSynced,
11679
+ routinesSynced: this.routinesSynced
11680
+ });
11681
+ }
11049
11682
  if (!this.tasksSynced || !this.signalsSynced || !this.intentsSynced || !this.actorsSynced || !this.routinesSynced) {
11050
11683
  return false;
11051
11684
  }
@@ -11231,7 +11864,9 @@ var GraphSyncController = class _GraphSyncController {
11231
11864
  "Get all intents for sync",
11232
11865
  (ctx) => ({
11233
11866
  ...ctx,
11234
- intents: Array.from(CadenzaService.inquiryBroker.intents.values())
11867
+ intents: Array.from(CadenzaService.inquiryBroker.intents.values()).filter(
11868
+ (intent) => isRegistrableLocalIntentDefinition(intent)
11869
+ )
11235
11870
  }),
11236
11871
  "Collects local intents for the primitive sync phase.",
11237
11872
  {
@@ -11272,14 +11907,8 @@ var GraphSyncController = class _GraphSyncController {
11272
11907
  iterateTasksForDirectionalTaskMapSyncTask,
11273
11908
  gatherDirectionalTaskMapRegistrationTask
11274
11909
  );
11275
- iterateTasksForDirectionalTaskMapSyncTask.then(
11276
- this.registerTaskMapTask,
11277
- this.registerDeputyRelationshipTask
11278
- );
11910
+ iterateTasksForDirectionalTaskMapSyncTask.then(this.registerTaskMapTask);
11279
11911
  recordTaskMapRegistrationTask.then(gatherDirectionalTaskMapRegistrationTask);
11280
- recordDeputyRelationshipRegistrationTask.then(
11281
- gatherDirectionalTaskMapRegistrationTask
11282
- );
11283
11912
  gatherDirectionalTaskMapRegistrationTask.then(mapPhaseBarrierTask);
11284
11913
  const iterateTasksForSignalTaskMapSyncTask = CadenzaService.registry.doForEachTask.clone();
11285
11914
  startSignalTaskMapSyncTask.then(
@@ -11512,6 +12141,11 @@ function resolveBootstrapEndpoint(options) {
11512
12141
  }
11513
12142
 
11514
12143
  // src/Cadenza.ts
12144
+ var POSTGRES_SETUP_DEBUG_ENABLED2 = process.env.CADENZA_POSTGRES_SETUP_DEBUG === "1" || process.env.CADENZA_POSTGRES_SETUP_DEBUG === "true";
12145
+ var DEFAULT_DEPUTY_TASK_CONCURRENCY = 50;
12146
+ var DEFAULT_DEPUTY_TASK_TIMEOUT_MS = 12e4;
12147
+ var DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY = 50;
12148
+ var DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS = 12e4;
11515
12149
  var CadenzaService = class {
11516
12150
  static replayRegisteredTaskIntentAssociations() {
11517
12151
  for (const task of this.registry.tasks.values()) {
@@ -11696,6 +12330,12 @@ var CadenzaService = class {
11696
12330
  static setMode(mode) {
11697
12331
  import_core5.default.setMode(mode);
11698
12332
  }
12333
+ static hasCompletedBootstrapSync() {
12334
+ return !this.serviceCreated || this.bootstrapSyncCompleted;
12335
+ }
12336
+ static markBootstrapSyncCompleted() {
12337
+ this.bootstrapSyncCompleted = true;
12338
+ }
11699
12339
  /**
11700
12340
  * Emits a signal with the specified data using the associated broker.
11701
12341
  *
@@ -11783,6 +12423,46 @@ var CadenzaService = class {
11783
12423
  responders: statuses
11784
12424
  };
11785
12425
  }
12426
+ static shouldPersistInquiry(inquiry, _context) {
12427
+ return !isMetaIntentName(inquiry);
12428
+ }
12429
+ static splitInquiryPersistenceContext(context) {
12430
+ const businessContext = {};
12431
+ const metadata = context?.__metadata && typeof context.__metadata === "object" ? { ...context.__metadata } : {};
12432
+ for (const [key, value] of Object.entries(context ?? {})) {
12433
+ if (key === "__metadata") {
12434
+ continue;
12435
+ }
12436
+ if (key.startsWith("__")) {
12437
+ metadata[key] = value;
12438
+ continue;
12439
+ }
12440
+ businessContext[key] = value;
12441
+ }
12442
+ return {
12443
+ context: businessContext,
12444
+ metadata
12445
+ };
12446
+ }
12447
+ static buildInquiryPersistenceStartData(inquiryId, inquiry, context, startedAt) {
12448
+ const normalizedTaskVersion = Number(context?.__inquirySourceTaskVersion);
12449
+ const { context: inquiryContext, metadata } = this.splitInquiryPersistenceContext(context);
12450
+ return {
12451
+ uuid: inquiryId,
12452
+ name: inquiry,
12453
+ taskName: typeof context?.__inquirySourceTaskName === "string" ? context.__inquirySourceTaskName : null,
12454
+ taskVersion: Number.isFinite(normalizedTaskVersion) && normalizedTaskVersion > 0 ? normalizedTaskVersion : null,
12455
+ taskExecutionId: typeof context?.__inquirySourceTaskExecutionId === "string" ? context.__inquirySourceTaskExecutionId : null,
12456
+ serviceName: this.serviceRegistry.serviceName,
12457
+ serviceInstanceId: this.serviceRegistry.serviceInstanceId,
12458
+ executionTraceId: typeof (context?.__metadata?.__executionTraceId ?? context?.__executionTraceId) === "string" ? context.__metadata?.__executionTraceId ?? context.__executionTraceId : null,
12459
+ routineExecutionId: typeof context?.__inquirySourceRoutineExecutionId === "string" ? context.__inquirySourceRoutineExecutionId : null,
12460
+ context: inquiryContext,
12461
+ metadata,
12462
+ isMeta: false,
12463
+ sentAt: formatTimestamp(startedAt)
12464
+ };
12465
+ }
11786
12466
  static async inquire(inquiry, context, options = {}) {
11787
12467
  this.bootstrap();
11788
12468
  const hydratedResult = this.consumeHydratedInquiryResult(
@@ -11797,6 +12477,20 @@ var CadenzaService = class {
11797
12477
  descriptor: this.getInquiryResponderDescriptor(task)
11798
12478
  })) : [];
11799
12479
  const isMetaInquiry = isMetaIntentName(inquiry);
12480
+ const startedAt = Date.now();
12481
+ const persistInquiry = this.shouldPersistInquiry(inquiry, context);
12482
+ const logicalInquiryId = persistInquiry ? (0, import_uuid6.v4)() : null;
12483
+ const inquiryStartData = logicalInquiryId ? this.buildInquiryPersistenceStartData(
12484
+ logicalInquiryId,
12485
+ inquiry,
12486
+ context,
12487
+ startedAt
12488
+ ) : null;
12489
+ if (inquiryStartData) {
12490
+ this.emit("meta.inquiry_broker.inquiry_started", {
12491
+ data: inquiryStartData
12492
+ });
12493
+ }
11800
12494
  const responders = allResponders.filter(({ task, descriptor }) => {
11801
12495
  const shouldExecute = shouldExecuteInquiryResponder(inquiry, task.isMeta);
11802
12496
  if (shouldExecute) {
@@ -11831,6 +12525,21 @@ var CadenzaService = class {
11831
12525
  durationMs: 0,
11832
12526
  responders: []
11833
12527
  };
12528
+ if (logicalInquiryId) {
12529
+ this.emit("meta.inquiry_broker.inquiry_completed", {
12530
+ data: {
12531
+ fulfilledAt: formatTimestamp(startedAt),
12532
+ duration: 0,
12533
+ metadata: {
12534
+ ...inquiryStartData?.metadata ?? {},
12535
+ inquiryMeta
12536
+ }
12537
+ },
12538
+ filter: {
12539
+ uuid: logicalInquiryId
12540
+ }
12541
+ });
12542
+ }
11834
12543
  if (options.requireComplete) {
11835
12544
  throw {
11836
12545
  __inquiryMeta: inquiryMeta,
@@ -11846,7 +12555,6 @@ var CadenzaService = class {
11846
12555
  const overallTimeoutMs = options.overallTimeoutMs ?? options.timeout ?? 0;
11847
12556
  const requireComplete = options.requireComplete ?? false;
11848
12557
  const perResponderTimeoutMs = options.perResponderTimeoutMs;
11849
- const startedAt = Date.now();
11850
12558
  const statuses = [];
11851
12559
  const statusByTask = /* @__PURE__ */ new Map();
11852
12560
  for (const responder of responders) {
@@ -11892,10 +12600,26 @@ var CadenzaService = class {
11892
12600
  statuses,
11893
12601
  allResponders.length
11894
12602
  );
12603
+ const finishedAt = Date.now();
11895
12604
  const responseContext = {
11896
12605
  ...mergedContext,
11897
12606
  __inquiryMeta: inquiryMeta
11898
12607
  };
12608
+ if (logicalInquiryId) {
12609
+ this.emit("meta.inquiry_broker.inquiry_completed", {
12610
+ data: {
12611
+ fulfilledAt: formatTimestamp(finishedAt),
12612
+ duration: finishedAt - startedAt,
12613
+ metadata: {
12614
+ ...inquiryStartData?.metadata ?? {},
12615
+ inquiryMeta
12616
+ }
12617
+ },
12618
+ filter: {
12619
+ uuid: logicalInquiryId
12620
+ }
12621
+ });
12622
+ }
11899
12623
  if (requireComplete && (timedOut || inquiryMeta.failed > 0 || inquiryMeta.timedOut > 0 || inquiryMeta.pending > 0)) {
11900
12624
  reject({
11901
12625
  ...responseContext,
@@ -11911,7 +12635,7 @@ var CadenzaService = class {
11911
12635
  }
11912
12636
  for (const responder of responders) {
11913
12637
  const { task, descriptor } = responder;
11914
- const inquiryId = (0, import_uuid6.v4)();
12638
+ const responderInquiryId = (0, import_uuid6.v4)();
11915
12639
  startTimeByTask.set(task, Date.now());
11916
12640
  const resolverTask = this.createEphemeralMetaTask(
11917
12641
  `Resolve inquiry ${inquiry} for ${descriptor.localTaskName}`,
@@ -11939,11 +12663,12 @@ var CadenzaService = class {
11939
12663
  },
11940
12664
  "Resolves distributed inquiry responder result",
11941
12665
  { register: false }
11942
- ).doOn(`meta.node.graph_completed:${inquiryId}`);
12666
+ ).doOn(`meta.node.graph_completed:${responderInquiryId}`);
11943
12667
  resolverTasks.push(resolverTask);
11944
12668
  const executionContext = {
11945
12669
  ...context,
11946
- __routineExecId: inquiryId,
12670
+ ...logicalInquiryId ? { __inquiryId: logicalInquiryId } : {},
12671
+ __routineExecId: responderInquiryId,
11947
12672
  __isInquiry: true
11948
12673
  };
11949
12674
  if (perResponderTimeoutMs !== void 0) {
@@ -12105,8 +12830,8 @@ var CadenzaService = class {
12105
12830
  this.validateName(routineName);
12106
12831
  const name = `${routineName} (Proxy)`;
12107
12832
  options = {
12108
- concurrency: 100,
12109
- timeout: 0,
12833
+ concurrency: DEFAULT_DEPUTY_TASK_CONCURRENCY,
12834
+ timeout: DEFAULT_DEPUTY_TASK_TIMEOUT_MS,
12110
12835
  register: true,
12111
12836
  isUnique: false,
12112
12837
  isMeta: false,
@@ -12213,8 +12938,8 @@ var CadenzaService = class {
12213
12938
  return;
12214
12939
  }
12215
12940
  options = {
12216
- concurrency: 100,
12217
- timeout: 0,
12941
+ concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
12942
+ timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
12218
12943
  register: true,
12219
12944
  isUnique: false,
12220
12945
  isMeta: true,
@@ -12275,8 +13000,8 @@ var CadenzaService = class {
12275
13000
  const description = `Executes a ${operation} on table ${tableName} in ${targetDatabaseServiceName}`;
12276
13001
  const taskName = `${operation.charAt(0).toUpperCase() + operation.slice(1)} ${tableName}`;
12277
13002
  options = {
12278
- concurrency: 100,
12279
- timeout: 0,
13003
+ concurrency: DEFAULT_DATABASE_PROXY_TASK_CONCURRENCY,
13004
+ timeout: DEFAULT_DATABASE_PROXY_TASK_TIMEOUT_MS,
12280
13005
  register: true,
12281
13006
  isUnique: false,
12282
13007
  isMeta: false,
@@ -12420,6 +13145,7 @@ var CadenzaService = class {
12420
13145
  this.validateName(serviceName);
12421
13146
  this.validateServiceName(serviceName);
12422
13147
  const serviceId = options.customServiceId ?? (0, import_uuid6.v4)();
13148
+ this.bootstrapSyncCompleted = false;
12423
13149
  this.serviceRegistry.serviceName = serviceName;
12424
13150
  this.serviceRegistry.serviceInstanceId = serviceId;
12425
13151
  this.serviceRegistry.connectsToCadenzaDB = !!options.cadenzaDB?.connect;
@@ -12455,6 +13181,7 @@ var CadenzaService = class {
12455
13181
  this.createMetaTask(
12456
13182
  "Initialize graph metadata controller after initial sync",
12457
13183
  () => {
13184
+ this.markBootstrapSyncCompleted();
12458
13185
  GraphMetadataController.instance;
12459
13186
  return true;
12460
13187
  },
@@ -12540,14 +13267,14 @@ var CadenzaService = class {
12540
13267
  data: {
12541
13268
  name: serviceName,
12542
13269
  description,
12543
- displayName: options.displayName ?? "",
12544
- isMeta: options.isMeta
13270
+ display_name: options.displayName ?? "",
13271
+ is_meta: options.isMeta
12545
13272
  },
12546
13273
  __registrationData: {
12547
13274
  name: serviceName,
12548
13275
  description,
12549
- displayName: options.displayName ?? "",
12550
- isMeta: options.isMeta
13276
+ display_name: options.displayName ?? "",
13277
+ is_meta: options.isMeta
12551
13278
  },
12552
13279
  __serviceName: serviceName,
12553
13280
  __serviceInstanceId: serviceId,
@@ -12738,10 +13465,35 @@ var CadenzaService = class {
12738
13465
  registration.actorName
12739
13466
  );
12740
13467
  const createServiceTaskName = `Create database service ${name} after ${registration.actorName} setup`;
13468
+ const traceSetupDoneTaskName = `Trace database service ${name} setup done`;
13469
+ if (POSTGRES_SETUP_DEBUG_ENABLED2 && !this.get(traceSetupDoneTaskName)) {
13470
+ this.createMetaTask(
13471
+ traceSetupDoneTaskName,
13472
+ (ctx) => {
13473
+ console.log("[CADENZA_POSTGRES_SETUP_DEBUG] setup_done_signal_observed", {
13474
+ serviceName: name,
13475
+ actorName: registration.actorName,
13476
+ payloadKeys: Object.keys(ctx ?? {})
13477
+ });
13478
+ return true;
13479
+ },
13480
+ "Debug trace for PostgresActor setup-done signal delivery.",
13481
+ { isHidden: true, register: false }
13482
+ ).doOn(registration.setupDoneSignal);
13483
+ }
12741
13484
  if (!this.get(createServiceTaskName)) {
12742
13485
  this.createMetaTask(
12743
13486
  createServiceTaskName,
12744
13487
  () => {
13488
+ if (POSTGRES_SETUP_DEBUG_ENABLED2) {
13489
+ console.log(
13490
+ "[CADENZA_POSTGRES_SETUP_DEBUG] create_database_service_task_fired",
13491
+ {
13492
+ serviceName: name,
13493
+ actorName: registration.actorName
13494
+ }
13495
+ );
13496
+ }
12745
13497
  this.createCadenzaService(name, description, serviceOptions);
12746
13498
  return true;
12747
13499
  },
@@ -13273,6 +14025,7 @@ var CadenzaService = class {
13273
14025
  this.serviceRegistry?.reset();
13274
14026
  this.isBootstrapped = false;
13275
14027
  this.serviceCreated = false;
14028
+ this.bootstrapSyncCompleted = false;
13276
14029
  this.defaultDatabaseServiceName = null;
13277
14030
  this.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
13278
14031
  this.hydratedInquiryResults = /* @__PURE__ */ new Map();
@@ -13281,6 +14034,7 @@ var CadenzaService = class {
13281
14034
  };
13282
14035
  CadenzaService.isBootstrapped = false;
13283
14036
  CadenzaService.serviceCreated = false;
14037
+ CadenzaService.bootstrapSyncCompleted = false;
13284
14038
  CadenzaService.defaultDatabaseServiceName = null;
13285
14039
  CadenzaService.warnedInvalidMetaIntentResponderKeys = /* @__PURE__ */ new Set();
13286
14040
  CadenzaService.hydratedInquiryResults = /* @__PURE__ */ new Map();